From 8f5676242c316984afda1614aab418d325ec628c Mon Sep 17 00:00:00 2001 From: Anders Swanson Date: Wed, 27 Aug 2025 14:48:02 -0700 Subject: [PATCH 1/3] Version 2.0.3 documentation Signed-off-by: Anders Swanson --- docs/404.html | 6 +- docs/assets/js/01070055.d16dd02e.js | 1 + docs/assets/js/0170a66b.a482c5a3.js | 1 + docs/assets/js/0e384e19.11007e6c.js | 1 - docs/assets/js/0e384e19.df53043b.js | 1 + docs/assets/js/14eb3368.a004a01c.js | 1 + docs/assets/js/14eb3368.d64fc15c.js | 1 - docs/assets/js/1668.57de6221.js | 1 + docs/assets/js/17896441.123f7693.js | 1 + docs/assets/js/17896441.951229dd.js | 1 - docs/assets/js/1df93b7f.3265e8f4.js | 1 + docs/assets/js/1df93b7f.ff24e8ed.js | 1 - docs/assets/js/1e10f605.85d7d328.js | 1 + docs/assets/js/1e10f605.ef94c6bf.js | 1 - docs/assets/js/1f391b9e.934f2783.js | 1 + docs/assets/js/1f391b9e.d091afa4.js | 1 - docs/assets/js/21b27731.093b684e.js | 1 - docs/assets/js/21b27731.f20c3f00.js | 1 + docs/assets/js/2237.5e84b40a.js | 1 + docs/assets/js/237.d496122d.js | 1 - docs/assets/js/2a1428c8.81093459.js | 1 - docs/assets/js/2a1428c8.aeb7d0d6.js | 1 + docs/assets/js/2c91c66b.4209897b.js | 1 - docs/assets/js/2c91c66b.a471022d.js | 1 + docs/assets/js/2d404bd3.073e06e4.js | 1 + docs/assets/js/2d404bd3.778d36b4.js | 1 - docs/assets/js/36b77772.a0a96e13.js | 1 + docs/assets/js/3740dcc7.a3ac8f6e.js | 1 + docs/assets/js/384c9e20.1ed457f7.js | 1 - docs/assets/js/384c9e20.830f0bbb.js | 1 + docs/assets/js/393be207.6daba6a3.js | 1 + docs/assets/js/393be207.fc1e167d.js | 1 - docs/assets/js/3c57bc2c.e119104c.js | 1 + docs/assets/js/468714db.5f17f508.js | 1 + docs/assets/js/488c0ad4.c4e24d7b.js | 1 + docs/assets/js/49d0ab44.3162fd79.js | 1 - docs/assets/js/49d0ab44.d41e7e86.js | 1 + docs/assets/js/5240f2c1.1c8abb1b.js | 1 - docs/assets/js/5240f2c1.7779f2d4.js | 1 + docs/assets/js/5e8a6b04.2d605a88.js | 1 + docs/assets/js/5e95c892.0766153a.js | 1 + docs/assets/js/5e95c892.0955054f.js | 1 - docs/assets/js/61f1b472.623412d3.js | 1 + docs/assets/js/61f1b472.6d4df439.js | 1 - docs/assets/js/668.a919aaa7.js | 1 - docs/assets/js/6a577544.bcbc70ea.js | 1 + docs/assets/js/6ad7f408.79deb557.js | 1 + docs/assets/js/6e6103cc.231b1b1b.js | 1 - docs/assets/js/6e6103cc.817fcf37.js | 1 + docs/assets/js/6f6f2b68.116500b3.js | 1 - docs/assets/js/6f6f2b68.8ad1a530.js | 1 + docs/assets/js/7569d55b.5f9fbe1f.js | 1 + docs/assets/js/85a0f18d.23b1b3b5.js | 1 - docs/assets/js/85a0f18d.3710d60b.js | 1 + docs/assets/js/867ce809.3f108176.js | 1 + docs/assets/js/867ce809.fdf6483f.js | 1 - docs/assets/js/8be1f15d.b28ab2e6.js | 1 + docs/assets/js/9419d97c.9d1606f1.js | 1 + docs/assets/js/a7456010.25370a92.js | 1 - docs/assets/js/a7456010.8bd40a5b.js | 1 + docs/assets/js/a7901124.1486562b.js | 1 + docs/assets/js/a7bd4aaa.2ca06876.js | 1 - docs/assets/js/a7bd4aaa.8e47733e.js | 1 + docs/assets/js/a7f4dc0a.b6021f3c.js | 1 - docs/assets/js/a7f4dc0a.fab1aab9.js | 1 + docs/assets/js/a94703ab.0527b935.js | 1 + docs/assets/js/a94703ab.643e6934.js | 1 - docs/assets/js/a989571e.01007baf.js | 1 - docs/assets/js/a989571e.754a5e4f.js | 1 + docs/assets/js/ab01181e.bd6e5167.js | 1 + docs/assets/js/aba21aa0.6827c32a.js | 1 + docs/assets/js/aba21aa0.ef5bd9e3.js | 1 - docs/assets/js/af966633.0bc25fd8.js | 1 - docs/assets/js/af966633.d7133a46.js | 1 + docs/assets/js/b8d4edc5.8eabd942.js | 1 + docs/assets/js/b8d4edc5.c60980e4.js | 1 - docs/assets/js/c4e87715.b14dd93f.js | 1 + docs/assets/js/c539bf3f.1cf406ef.js | 1 + docs/assets/js/c539bf3f.35853f87.js | 1 - docs/assets/js/cf0dfdd1.1f08fe6e.js | 1 + docs/assets/js/d72bb23b.1e9dae26.js | 1 - docs/assets/js/d72bb23b.80f5a95a.js | 1 + docs/assets/js/d94a41cc.bc85db5c.js | 1 - docs/assets/js/d94a41cc.cf627fef.js | 1 + docs/assets/js/dac61621.2f9dd97b.js | 1 - docs/assets/js/dac61621.9472896f.js | 1 + docs/assets/js/e0c86ee0.0cf62a46.js | 1 + docs/assets/js/f36aa3f3.da1bf05b.js | 1 + docs/assets/js/f6de67f9.85db75b5.js | 1 + docs/assets/js/f7d2b7bf.0e65ba99.js | 1 + docs/assets/js/fcc612c9.2600ed97.js | 1 + docs/assets/js/main.7870a9cd.js | 2 + ...CENSE.txt => main.7870a9cd.js.LICENSE.txt} | 0 docs/assets/js/main.dfeca7cc.js | 2 - docs/assets/js/runtime~main.17989aec.js | 1 - docs/assets/js/runtime~main.cf06ab3a.js | 1 + docs/docs/advanced/development/index.html | 12 +- docs/docs/advanced/go-runtime/index.html | 12 +- docs/docs/advanced/txeventq/index.html | 12 +- docs/docs/category/advanced/index.html | 10 +- docs/docs/category/configuration/index.html | 10 +- docs/docs/category/getting-started/index.html | 10 +- docs/docs/category/releases/index.html | 10 +- docs/docs/configuration/alert-logs/index.html | 12 +- .../docs/configuration/azure-vault/index.html | 12 +- .../docs/configuration/config-file/index.html | 12 +- .../configuration/custom-metrics/index.html | 12 +- .../multiple-databases/index.html | 12 +- docs/docs/configuration/oci-vault/index.html | 12 +- .../configuration/oracle-wallet/index.html | 12 +- docs/docs/getting-started/basics/index.html | 12 +- .../default-metrics/index.html | 12 +- .../grafana-dashboards/index.html | 12 +- .../getting-started/kubernetes/index.html | 12 +- docs/docs/intro/index.html | 12 +- .../docs/next/advanced/development/index.html | 42 +++ docs/docs/next/advanced/go-runtime/index.html | 23 ++ docs/docs/next/advanced/txeventq/index.html | 44 +++ docs/docs/next/category/advanced/index.html | 16 ++ .../next/category/configuration/index.html | 16 ++ .../next/category/getting-started/index.html | 16 ++ docs/docs/next/category/releases/index.html | 16 ++ .../next/configuration/alert-logs/index.html | 22 ++ .../next/configuration/azure-vault/index.html | 35 +++ .../next/configuration/config-file/index.html | 22 ++ .../configuration/custom-metrics/index.html | 45 +++ .../multiple-databases/index.html | 25 ++ .../next/configuration/oci-vault/index.html | 29 ++ .../configuration/oracle-wallet/index.html | 57 ++++ .../next/getting-started/basics/index.html | 75 +++++ .../default-metrics/index.html | 20 ++ .../grafana-dashboards/index.html | 20 ++ .../getting-started/kubernetes/index.html | 52 ++++ docs/docs/next/intro/index.html | 39 +++ docs/docs/next/releases/changelog/index.html | 254 ++++++++++++++++ docs/docs/next/releases/roadmap/index.html | 29 ++ docs/docs/releases/changelog/index.html | 17 +- docs/docs/releases/roadmap/index.html | 12 +- docs/index.html | 6 +- docs/markdown-page/index.html | 6 +- docs/sitemap.xml | 2 +- site/docs/releases/changelog.md | 2 + site/docusaurus.config.ts | 2 +- .../version-2.0.3/advanced/_category_.json | 8 + .../version-2.0.3/advanced/development.md | 54 ++++ .../version-2.0.3/advanced/go-runtime.md | 14 + .../version-2.0.3/advanced/txeventq.md | 117 ++++++++ .../configuration/_category_.json | 8 + .../version-2.0.3/configuration/alert-logs.md | 30 ++ .../configuration/azure-vault.md | 40 +++ .../configuration/config-file.md | 103 +++++++ .../configuration/custom-metrics.md | 134 +++++++++ .../configuration/multiple-databases.md | 136 +++++++++ .../version-2.0.3/configuration/oci-vault.md | 30 ++ .../configuration/oracle-wallet.md | 109 +++++++ .../getting-started/_category_.json | 8 + .../version-2.0.3/getting-started/basics.md | 231 +++++++++++++++ .../getting-started/default-metrics.md | 136 +++++++++ .../getting-started/grafana-dashboards.md | 14 + .../getting-started/kubernetes.md | 116 ++++++++ site/versioned_docs/version-2.0.3/intro.md | 32 +++ .../version-2.0.3/releases/_category_.json | 8 + .../version-2.0.3/releases/changelog.md | 271 ++++++++++++++++++ .../version-2.0.3/releases/roadmap.md | 21 ++ .../version-2.0.3-sidebars.json | 8 + site/versions.json | 1 + 166 files changed, 2722 insertions(+), 173 deletions(-) create mode 100644 docs/assets/js/01070055.d16dd02e.js create mode 100644 docs/assets/js/0170a66b.a482c5a3.js delete mode 100644 docs/assets/js/0e384e19.11007e6c.js create mode 100644 docs/assets/js/0e384e19.df53043b.js create mode 100644 docs/assets/js/14eb3368.a004a01c.js delete mode 100644 docs/assets/js/14eb3368.d64fc15c.js create mode 100644 docs/assets/js/1668.57de6221.js create mode 100644 docs/assets/js/17896441.123f7693.js delete mode 100644 docs/assets/js/17896441.951229dd.js create mode 100644 docs/assets/js/1df93b7f.3265e8f4.js delete mode 100644 docs/assets/js/1df93b7f.ff24e8ed.js create mode 100644 docs/assets/js/1e10f605.85d7d328.js delete mode 100644 docs/assets/js/1e10f605.ef94c6bf.js create mode 100644 docs/assets/js/1f391b9e.934f2783.js delete mode 100644 docs/assets/js/1f391b9e.d091afa4.js delete mode 100644 docs/assets/js/21b27731.093b684e.js create mode 100644 docs/assets/js/21b27731.f20c3f00.js create mode 100644 docs/assets/js/2237.5e84b40a.js delete mode 100644 docs/assets/js/237.d496122d.js delete mode 100644 docs/assets/js/2a1428c8.81093459.js create mode 100644 docs/assets/js/2a1428c8.aeb7d0d6.js delete mode 100644 docs/assets/js/2c91c66b.4209897b.js create mode 100644 docs/assets/js/2c91c66b.a471022d.js create mode 100644 docs/assets/js/2d404bd3.073e06e4.js delete mode 100644 docs/assets/js/2d404bd3.778d36b4.js create mode 100644 docs/assets/js/36b77772.a0a96e13.js create mode 100644 docs/assets/js/3740dcc7.a3ac8f6e.js delete mode 100644 docs/assets/js/384c9e20.1ed457f7.js create mode 100644 docs/assets/js/384c9e20.830f0bbb.js create mode 100644 docs/assets/js/393be207.6daba6a3.js delete mode 100644 docs/assets/js/393be207.fc1e167d.js create mode 100644 docs/assets/js/3c57bc2c.e119104c.js create mode 100644 docs/assets/js/468714db.5f17f508.js create mode 100644 docs/assets/js/488c0ad4.c4e24d7b.js delete mode 100644 docs/assets/js/49d0ab44.3162fd79.js create mode 100644 docs/assets/js/49d0ab44.d41e7e86.js delete mode 100644 docs/assets/js/5240f2c1.1c8abb1b.js create mode 100644 docs/assets/js/5240f2c1.7779f2d4.js create mode 100644 docs/assets/js/5e8a6b04.2d605a88.js create mode 100644 docs/assets/js/5e95c892.0766153a.js delete mode 100644 docs/assets/js/5e95c892.0955054f.js create mode 100644 docs/assets/js/61f1b472.623412d3.js delete mode 100644 docs/assets/js/61f1b472.6d4df439.js delete mode 100644 docs/assets/js/668.a919aaa7.js create mode 100644 docs/assets/js/6a577544.bcbc70ea.js create mode 100644 docs/assets/js/6ad7f408.79deb557.js delete mode 100644 docs/assets/js/6e6103cc.231b1b1b.js create mode 100644 docs/assets/js/6e6103cc.817fcf37.js delete mode 100644 docs/assets/js/6f6f2b68.116500b3.js create mode 100644 docs/assets/js/6f6f2b68.8ad1a530.js create mode 100644 docs/assets/js/7569d55b.5f9fbe1f.js delete mode 100644 docs/assets/js/85a0f18d.23b1b3b5.js create mode 100644 docs/assets/js/85a0f18d.3710d60b.js create mode 100644 docs/assets/js/867ce809.3f108176.js delete mode 100644 docs/assets/js/867ce809.fdf6483f.js create mode 100644 docs/assets/js/8be1f15d.b28ab2e6.js create mode 100644 docs/assets/js/9419d97c.9d1606f1.js delete mode 100644 docs/assets/js/a7456010.25370a92.js create mode 100644 docs/assets/js/a7456010.8bd40a5b.js create mode 100644 docs/assets/js/a7901124.1486562b.js delete mode 100644 docs/assets/js/a7bd4aaa.2ca06876.js create mode 100644 docs/assets/js/a7bd4aaa.8e47733e.js delete mode 100644 docs/assets/js/a7f4dc0a.b6021f3c.js create mode 100644 docs/assets/js/a7f4dc0a.fab1aab9.js create mode 100644 docs/assets/js/a94703ab.0527b935.js delete mode 100644 docs/assets/js/a94703ab.643e6934.js delete mode 100644 docs/assets/js/a989571e.01007baf.js create mode 100644 docs/assets/js/a989571e.754a5e4f.js create mode 100644 docs/assets/js/ab01181e.bd6e5167.js create mode 100644 docs/assets/js/aba21aa0.6827c32a.js delete mode 100644 docs/assets/js/aba21aa0.ef5bd9e3.js delete mode 100644 docs/assets/js/af966633.0bc25fd8.js create mode 100644 docs/assets/js/af966633.d7133a46.js create mode 100644 docs/assets/js/b8d4edc5.8eabd942.js delete mode 100644 docs/assets/js/b8d4edc5.c60980e4.js create mode 100644 docs/assets/js/c4e87715.b14dd93f.js create mode 100644 docs/assets/js/c539bf3f.1cf406ef.js delete mode 100644 docs/assets/js/c539bf3f.35853f87.js create mode 100644 docs/assets/js/cf0dfdd1.1f08fe6e.js delete mode 100644 docs/assets/js/d72bb23b.1e9dae26.js create mode 100644 docs/assets/js/d72bb23b.80f5a95a.js delete mode 100644 docs/assets/js/d94a41cc.bc85db5c.js create mode 100644 docs/assets/js/d94a41cc.cf627fef.js delete mode 100644 docs/assets/js/dac61621.2f9dd97b.js create mode 100644 docs/assets/js/dac61621.9472896f.js create mode 100644 docs/assets/js/e0c86ee0.0cf62a46.js create mode 100644 docs/assets/js/f36aa3f3.da1bf05b.js create mode 100644 docs/assets/js/f6de67f9.85db75b5.js create mode 100644 docs/assets/js/f7d2b7bf.0e65ba99.js create mode 100644 docs/assets/js/fcc612c9.2600ed97.js create mode 100644 docs/assets/js/main.7870a9cd.js rename docs/assets/js/{main.dfeca7cc.js.LICENSE.txt => main.7870a9cd.js.LICENSE.txt} (100%) delete mode 100644 docs/assets/js/main.dfeca7cc.js delete mode 100644 docs/assets/js/runtime~main.17989aec.js create mode 100644 docs/assets/js/runtime~main.cf06ab3a.js create mode 100644 docs/docs/next/advanced/development/index.html create mode 100644 docs/docs/next/advanced/go-runtime/index.html create mode 100644 docs/docs/next/advanced/txeventq/index.html create mode 100644 docs/docs/next/category/advanced/index.html create mode 100644 docs/docs/next/category/configuration/index.html create mode 100644 docs/docs/next/category/getting-started/index.html create mode 100644 docs/docs/next/category/releases/index.html create mode 100644 docs/docs/next/configuration/alert-logs/index.html create mode 100644 docs/docs/next/configuration/azure-vault/index.html create mode 100644 docs/docs/next/configuration/config-file/index.html create mode 100644 docs/docs/next/configuration/custom-metrics/index.html create mode 100644 docs/docs/next/configuration/multiple-databases/index.html create mode 100644 docs/docs/next/configuration/oci-vault/index.html create mode 100644 docs/docs/next/configuration/oracle-wallet/index.html create mode 100644 docs/docs/next/getting-started/basics/index.html create mode 100644 docs/docs/next/getting-started/default-metrics/index.html create mode 100644 docs/docs/next/getting-started/grafana-dashboards/index.html create mode 100644 docs/docs/next/getting-started/kubernetes/index.html create mode 100644 docs/docs/next/intro/index.html create mode 100644 docs/docs/next/releases/changelog/index.html create mode 100644 docs/docs/next/releases/roadmap/index.html create mode 100644 site/versioned_docs/version-2.0.3/advanced/_category_.json create mode 100644 site/versioned_docs/version-2.0.3/advanced/development.md create mode 100644 site/versioned_docs/version-2.0.3/advanced/go-runtime.md create mode 100644 site/versioned_docs/version-2.0.3/advanced/txeventq.md create mode 100644 site/versioned_docs/version-2.0.3/configuration/_category_.json create mode 100644 site/versioned_docs/version-2.0.3/configuration/alert-logs.md create mode 100644 site/versioned_docs/version-2.0.3/configuration/azure-vault.md create mode 100644 site/versioned_docs/version-2.0.3/configuration/config-file.md create mode 100644 site/versioned_docs/version-2.0.3/configuration/custom-metrics.md create mode 100644 site/versioned_docs/version-2.0.3/configuration/multiple-databases.md create mode 100644 site/versioned_docs/version-2.0.3/configuration/oci-vault.md create mode 100644 site/versioned_docs/version-2.0.3/configuration/oracle-wallet.md create mode 100644 site/versioned_docs/version-2.0.3/getting-started/_category_.json create mode 100644 site/versioned_docs/version-2.0.3/getting-started/basics.md create mode 100644 site/versioned_docs/version-2.0.3/getting-started/default-metrics.md create mode 100644 site/versioned_docs/version-2.0.3/getting-started/grafana-dashboards.md create mode 100644 site/versioned_docs/version-2.0.3/getting-started/kubernetes.md create mode 100644 site/versioned_docs/version-2.0.3/intro.md create mode 100644 site/versioned_docs/version-2.0.3/releases/_category_.json create mode 100644 site/versioned_docs/version-2.0.3/releases/changelog.md create mode 100644 site/versioned_docs/version-2.0.3/releases/roadmap.md create mode 100644 site/versioned_sidebars/version-2.0.3-sidebars.json diff --git a/docs/404.html b/docs/404.html index 4bf7aa3b..09cbf085 100644 --- a/docs/404.html +++ b/docs/404.html @@ -4,13 +4,13 @@ Page Not Found | Oracle Database Metrics Exporter - - + + -
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

+
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

\ No newline at end of file diff --git a/docs/assets/js/01070055.d16dd02e.js b/docs/assets/js/01070055.d16dd02e.js new file mode 100644 index 00000000..6a50b4aa --- /dev/null +++ b/docs/assets/js/01070055.d16dd02e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[7791],{8453:(e,a,t)=>{t.d(a,{R:()=>o,x:()=>_});var s=t(6540);const r={},c=s.createContext(r);function o(e){const a=s.useContext(c);return s.useMemo(function(){return"function"==typeof e?e(a):{...a,...e}},[a,e])}function _(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),s.createElement(c.Provider,{value:a},e.children)}},9313:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>d,contentTitle:()=>_,default:()=>i,frontMatter:()=>o,metadata:()=>s,toc:()=>n});const s=JSON.parse('{"id":"getting-started/default-metrics","title":"Default Metrics","description":"The exporter includes default metrics for Oracle Database, and process-specific metrics on the go runtime.","source":"@site/versioned_docs/version-2.0.3/getting-started/default-metrics.md","sourceDirName":"getting-started","slug":"/getting-started/default-metrics","permalink":"/oracle-db-appdev-monitoring/docs/getting-started/default-metrics","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/versioned_docs/version-2.0.3/getting-started/default-metrics.md","tags":[],"version":"2.0.3","sidebarPosition":2,"frontMatter":{"title":"Default Metrics","sidebar_position":2},"sidebar":"tutorialSidebar","previous":{"title":"Installation","permalink":"/oracle-db-appdev-monitoring/docs/getting-started/basics"},"next":{"title":"Kubernetes","permalink":"/oracle-db-appdev-monitoring/docs/getting-started/kubernetes"}}');var r=t(4848),c=t(8453);const o={title:"Default Metrics",sidebar_position:2},_="Default Metrics",d={},n=[];function l(e){const a={a:"a",code:"code",h1:"h1",header:"header",p:"p",pre:"pre",...(0,c.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(a.header,{children:(0,r.jsx)(a.h1,{id:"default-metrics",children:"Default Metrics"})}),"\n",(0,r.jsxs)(a.p,{children:["The exporter includes ",(0,r.jsx)(a.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/collector/default_metrics.toml",children:"default metrics"})," for Oracle Database, and process-specific metrics on the ",(0,r.jsx)(a.code,{children:"go"})," runtime."]}),"\n",(0,r.jsxs)(a.p,{children:["You can find the exporter's metric schema in the ",(0,r.jsx)(a.a,{href:"/oracle-db-appdev-monitoring/docs/configuration/custom-metrics#metric-schema",children:"Custom Metrics configuration"}),"."]}),"\n",(0,r.jsx)(a.p,{children:'The following metrics are included by default. The values given are a sample for a single database, "db1":'}),"\n",(0,r.jsx)(a.pre,{children:(0,r.jsx)(a.code,{className:"language-bash",children:'# HELP oracledb_activity_execute_count Generic counter metric from gv$sysstat view in Oracle.\n# TYPE oracledb_activity_execute_count gauge\noracledb_activity_execute_count{database="db1"} 6.212049e+06\n# HELP oracledb_activity_parse_count_total Generic counter metric from gv$sysstat view in Oracle.\n# TYPE oracledb_activity_parse_count_total gauge\noracledb_activity_parse_count_total{database="db1"} 1.054178e+06\n# HELP oracledb_activity_user_commits Generic counter metric from gv$sysstat view in Oracle.\n# TYPE oracledb_activity_user_commits gauge\noracledb_activity_user_commits{database="db1"} 86538\n# HELP oracledb_activity_user_rollbacks Generic counter metric from gv$sysstat view in Oracle.\n# TYPE oracledb_activity_user_rollbacks gauge\noracledb_activity_user_rollbacks{database="db1"} 18\n# HELP oracledb_db_platform_value Database platform\n# TYPE oracledb_db_platform_value gauge\noracledb_db_platform_value{database="db1",platform_name="Linux OS (AARCH64)"} 1\n# HELP oracledb_db_system_value Database system resources metric\n# TYPE oracledb_db_system_value gauge\noracledb_db_system_value{database="db1",name="cpu_count"} 2\noracledb_db_system_value{database="db1",name="pga_aggregate_limit"} 2.147483648e+09\noracledb_db_system_value{database="db1",name="sga_max_size"} 1.610612736e+09\n# HELP oracledb_dbtype Type of database the exporter is connected to (0=non-CDB, 1=CDB, >1=PDB).\n# TYPE oracledb_dbtype gauge\noracledb_dbtype{database="db1"} 3\n# HELP oracledb_exporter_build_info A metric with a constant \'1\' value labeled by version, revision, branch, goversion from which oracledb_exporter was built, and the goos and goarch for the build.\n# TYPE oracledb_exporter_build_info gauge\noracledb_exporter_build_info{branch="",goarch="arm64",goos="darwin",goversion="go1.24.5",revision="unknown",tags="unknown",version=""} 1\n# HELP oracledb_exporter_last_scrape_duration_seconds Duration of the last scrape of metrics from Oracle DB.\n# TYPE oracledb_exporter_last_scrape_duration_seconds gauge\noracledb_exporter_last_scrape_duration_seconds 0.05714725\n# HELP oracledb_exporter_last_scrape_error Whether the last scrape of metrics from Oracle DB resulted in an error (1 for error, 0 for success).\n# TYPE oracledb_exporter_last_scrape_error gauge\noracledb_exporter_last_scrape_error 0\n# HELP oracledb_exporter_scrapes_total Total number of times Oracle DB was scraped for metrics.\n# TYPE oracledb_exporter_scrapes_total counter\noracledb_exporter_scrapes_total 2\n# HELP oracledb_process_count Gauge metric with count of processes.\n# TYPE oracledb_process_count gauge\noracledb_process_count{database="db1"} 85\n# HELP oracledb_sessions_value Gauge metric with count of sessions by status and type.\n# TYPE oracledb_sessions_value gauge\noracledb_sessions_value{database="db1",status="ACTIVE",type="BACKGROUND"} 61\noracledb_sessions_value{database="db1",status="ACTIVE",type="USER"} 2\noracledb_sessions_value{database="db1",status="INACTIVE",type="USER"} 19\n# HELP oracledb_tablespace_bytes Generic counter metric of tablespaces bytes in Oracle.\n# TYPE oracledb_tablespace_bytes gauge\noracledb_tablespace_bytes{database="db1",tablespace="SYSAUX",type="PERMANENT"} 7.7430784e+08\noracledb_tablespace_bytes{database="db1",tablespace="SYSTEM",type="PERMANENT"} 3.18963712e+08\noracledb_tablespace_bytes{database="db1",tablespace="TEMP",type="TEMPORARY"} 7.340032e+06\noracledb_tablespace_bytes{database="db1",tablespace="UNDOTBS1",type="UNDO"} 2.1364736e+07\noracledb_tablespace_bytes{database="db1",tablespace="USERS",type="PERMANENT"} 7.340032e+06\n# HELP oracledb_tablespace_free Generic counter metric of tablespaces free bytes in Oracle.\n# TYPE oracledb_tablespace_free gauge\noracledb_tablespace_free{database="db1",tablespace="SYSAUX",type="PERMANENT"} 7.5289739264e+10\noracledb_tablespace_free{database="db1",tablespace="SYSTEM",type="PERMANENT"} 7.524491264e+10\noracledb_tablespace_free{database="db1",tablespace="TEMP",type="TEMPORARY"} 1.3631488e+07\noracledb_tablespace_free{database="db1",tablespace="UNDOTBS1",type="UNDO"} 3.518435069952e+13\noracledb_tablespace_free{database="db1",tablespace="USERS",type="PERMANENT"} 3.4352381952e+10\n# HELP oracledb_tablespace_max_bytes Generic counter metric of tablespaces max bytes in Oracle.\n# TYPE oracledb_tablespace_max_bytes gauge\noracledb_tablespace_max_bytes{database="db1",tablespace="SYSAUX",type="PERMANENT"} 7.6064047104e+10\noracledb_tablespace_max_bytes{database="db1",tablespace="SYSTEM",type="PERMANENT"} 7.5563876352e+10\noracledb_tablespace_max_bytes{database="db1",tablespace="TEMP",type="TEMPORARY"} 2.097152e+07\noracledb_tablespace_max_bytes{database="db1",tablespace="UNDOTBS1",type="UNDO"} 3.5184372064256e+13\noracledb_tablespace_max_bytes{database="db1",tablespace="USERS",type="PERMANENT"} 3.4359721984e+10\n# HELP oracledb_tablespace_used_percent Gauge metric showing as a percentage of how much of the tablespace has been used.\n# TYPE oracledb_tablespace_used_percent gauge\noracledb_tablespace_used_percent{database="db1",tablespace="SYSAUX",type="PERMANENT"} 1.0179682379262742\noracledb_tablespace_used_percent{database="db1",tablespace="SYSTEM",type="PERMANENT"} 0.4221113677574824\noracledb_tablespace_used_percent{database="db1",tablespace="TEMP",type="TEMPORARY"} 0.35\noracledb_tablespace_used_percent{database="db1",tablespace="UNDOTBS1",type="UNDO"} 6.072223190734319e-05\noracledb_tablespace_used_percent{database="db1",tablespace="USERS",type="PERMANENT"} 0.021362314873845517\n# HELP oracledb_top_sql_elapsed SQL statement elapsed time running\n# TYPE oracledb_top_sql_elapsed gauge\noracledb_top_sql_elapsed{database="db1",sql_id="0npm6czzaj44m",sql_text="SELECT idx_objn FROM vecsys.vector$index WHERE JSON_VAL"} 6.118614\noracledb_top_sql_elapsed{database="db1",sql_id="0sbbcuruzd66f",sql_text="select /*+ rule */ bucket_cnt, row_cnt, cache_cnt, null"} 1.538687\noracledb_top_sql_elapsed{database="db1",sql_id="121ffmrc95v7g",sql_text="select i.obj#,i.ts#,i.file#,i.block#,i.intcols,i.type#,"} 2.200984\noracledb_top_sql_elapsed{database="db1",sql_id="61znfd8fvgha6",sql_text="SELECT new.sql_seq, old.plan_hash_value, sqlset_row(ne"} 2.628263\noracledb_top_sql_elapsed{database="db1",sql_id="68dw2nt8wtunk",sql_text="select originating_timestamp, module_id, execution_cont"} 2.296924\noracledb_top_sql_elapsed{database="db1",sql_id="9bd61v53p81sk",sql_text="begin prvt_hdm.auto_execute( :dbid , :inst_num , :end_s"} 1.67611\noracledb_top_sql_elapsed{database="db1",sql_id="aba13jkkk3fts",sql_text="SELECT idx_objn, json_value(IDX_SPARE2, \'$.counter\') FR"} 3.010397\noracledb_top_sql_elapsed{database="db1",sql_id="afcz0dh295hzp",sql_text=" SELECT /*+ first_rows(1) */ sql_id, force_matching_sig"} 2.246092\noracledb_top_sql_elapsed{database="db1",sql_id="ampw9ddqufjd3",sql_text="begin /*KAPI:capture*/ dbms_auto_index_internal.capture"} 4.102646\noracledb_top_sql_elapsed{database="db1",sql_id="avzy19hxu6gg4",sql_text="SELECT VALUE(P) FROM TABLE(DBMS_SQLTUNE.SELECT_CURSOR_C"} 2.564301\noracledb_top_sql_elapsed{database="db1",sql_id="b39m8n96gxk7c",sql_text="call dbms_autotask_prvt.run_autotask ( :0,:1 )"} 4.418653\noracledb_top_sql_elapsed{database="db1",sql_id="bj9ajtpfh9f41",sql_text=" declare purge_scn "} 6.425015\noracledb_top_sql_elapsed{database="db1",sql_id="bq819r502v7u2",sql_text="select originating_timestamp, module_id, execution_cont"} 3.676572\noracledb_top_sql_elapsed{database="db1",sql_id="ddrfu7d7hbkym",sql_text=" select count(1), partition_id "} 1.870379\noracledb_top_sql_elapsed{database="db1",sql_id="f6w8rqdkx0bnv",sql_text="SELECT * FROM ( SELECT /*+ ordered use_nl(o c cu h) ind"} 1.895947\n# HELP oracledb_up Whether the Oracle database server is up.\n# TYPE oracledb_up gauge\noracledb_up{database="db1"} 1\n# HELP oracledb_wait_time_administrative counter metric from system_wait_class view in Oracle.\n# TYPE oracledb_wait_time_administrative counter\noracledb_wait_time_administrative{database="db1"} 0\n# HELP oracledb_wait_time_application counter metric from system_wait_class view in Oracle.\n# TYPE oracledb_wait_time_application counter\noracledb_wait_time_application{database="db1"} 0.73\n# HELP oracledb_wait_time_commit counter metric from system_wait_class view in Oracle.\n# TYPE oracledb_wait_time_commit counter\noracledb_wait_time_commit{database="db1"} 0.17\n# HELP oracledb_wait_time_concurrency counter metric from system_wait_class view in Oracle.\n# TYPE oracledb_wait_time_concurrency counter\noracledb_wait_time_concurrency{database="db1"} 6.8\n# HELP oracledb_wait_time_configuration counter metric from system_wait_class view in Oracle.\n# TYPE oracledb_wait_time_configuration counter\noracledb_wait_time_configuration{database="db1"} 19.71\n# HELP oracledb_wait_time_network counter metric from system_wait_class view in Oracle.\n# TYPE oracledb_wait_time_network counter\noracledb_wait_time_network{database="db1"} 0.29\n# HELP oracledb_wait_time_other counter metric from system_wait_class view in Oracle.\n# TYPE oracledb_wait_time_other counter\noracledb_wait_time_other{database="db1"} 6.02\n# HELP oracledb_wait_time_scheduler counter metric from system_wait_class view in Oracle.\n# TYPE oracledb_wait_time_scheduler counter\noracledb_wait_time_scheduler{database="db1"} 4.01\n# HELP oracledb_wait_time_system_io counter metric from system_wait_class view in Oracle.\n# TYPE oracledb_wait_time_system_io counter\noracledb_wait_time_system_io{database="db1"} 0.13\n# HELP oracledb_wait_time_user_io counter metric from system_wait_class view in Oracle.\n# TYPE oracledb_wait_time_user_io counter\noracledb_wait_time_user_io{database="db1"} 12.38\n'})})]})}function i(e={}){const{wrapper:a}={...(0,c.R)(),...e.components};return a?(0,r.jsx)(a,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}}}]); \ No newline at end of file diff --git a/docs/assets/js/0170a66b.a482c5a3.js b/docs/assets/js/0170a66b.a482c5a3.js new file mode 100644 index 00000000..c60d0470 --- /dev/null +++ b/docs/assets/js/0170a66b.a482c5a3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[154],{7417:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>p,frontMatter:()=>i,metadata:()=>r,toc:()=>d});const r=JSON.parse('{"id":"releases/roadmap","title":"Roadmap","description":"Planned and upcoming features for the exporter.","source":"@site/versioned_docs/version-2.0.3/releases/roadmap.md","sourceDirName":"releases","slug":"/releases/roadmap","permalink":"/oracle-db-appdev-monitoring/docs/releases/roadmap","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/versioned_docs/version-2.0.3/releases/roadmap.md","tags":[],"version":"2.0.3","sidebarPosition":1,"frontMatter":{"title":"Roadmap","sidebar_position":1},"sidebar":"tutorialSidebar","previous":{"title":"Releases","permalink":"/oracle-db-appdev-monitoring/docs/category/releases"},"next":{"title":"Changelog","permalink":"/oracle-db-appdev-monitoring/docs/releases/changelog"}}');var o=n(4848),a=n(8453);const i={title:"Roadmap",sidebar_position:1},s="Exporter Roadmap",l={},d=[];function c(e){const t={h1:"h1",header:"header",li:"li",p:"p",ul:"ul",...(0,a.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"exporter-roadmap",children:"Exporter Roadmap"})}),"\n",(0,o.jsx)(t.p,{children:"Planned and upcoming features for the exporter."}),"\n",(0,o.jsx)(t.p,{children:"We welcome input on community-driven features you'd like to see supported. Please open an issue in this repository with your suggestions."}),"\n",(0,o.jsx)(t.p,{children:"Currently, we plan to address the following key features:"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsx)(t.li,{children:"Provide default Oracle Exadata metrics"}),"\n",(0,o.jsx)(t.li,{children:"Implement connection storm protection: prevent the exporter from repeatedly connecting when the credentials fail, to prevent a storm of connections causing accounts to be locked across a large number of databases"}),"\n",(0,o.jsx)(t.li,{children:"Provide the option to have the Oracle client outside of the container image, e.g., on a shared volume,"}),"\n",(0,o.jsx)(t.li,{children:"Implement the ability to update the configuration dynamically, i.e., without a restart"}),"\n",(0,o.jsx)(t.li,{children:"Implement support for tracing within the database, e.g., using an execution context ID provide by an external caller"}),"\n",(0,o.jsx)(t.li,{children:"Provide additional pre-built Grafana dashboards,"}),"\n",(0,o.jsx)(t.li,{children:"Integration with Spring Observability, e.g., Micrometer"}),"\n",(0,o.jsx)(t.li,{children:"Provide additional documentation and samples"}),"\n"]})]})}function p(e={}){const{wrapper:t}={...(0,a.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>i,x:()=>s});var r=n(6540);const o={},a=r.createContext(o);function i(e){const t=r.useContext(a);return r.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),r.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/0e384e19.11007e6c.js b/docs/assets/js/0e384e19.11007e6c.js deleted file mode 100644 index 7f963f7d..00000000 --- a/docs/assets/js/0e384e19.11007e6c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[976],{2053:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>s,metadata:()=>r,toc:()=>l});const r=JSON.parse('{"id":"intro","title":"OpenTelemetry Metrics for Oracle Database","description":"This project aims to provide observability for the Oracle Database so that users can understand performance and diagnose issues easily across applications and database. Over time, this project will provide not just metrics, but also logging and tracing support, and integration into popular frameworks like Spring Boot. The project aims to deliver functionality to support both cloud and on-premises databases, including those running in Kubernetes and containers.","source":"@site/docs/intro.md","sourceDirName":".","slug":"/intro","permalink":"/oracle-db-appdev-monitoring/docs/intro","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/docs/intro.md","tags":[],"version":"current","sidebarPosition":1,"frontMatter":{"sidebar_position":1},"sidebar":"tutorialSidebar","next":{"title":"Getting Started","permalink":"/oracle-db-appdev-monitoring/docs/category/getting-started"}}');var a=n(4848),o=n(8453);const s={sidebar_position:1},i="OpenTelemetry Metrics for Oracle Database",c={},l=[{value:"Main Features",id:"main-features",level:2}];function d(e){const t={a:"a",blockquote:"blockquote",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,o.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.header,{children:(0,a.jsx)(t.h1,{id:"opentelemetry-metrics-for-oracle-database",children:"OpenTelemetry Metrics for Oracle Database"})}),"\n",(0,a.jsx)(t.p,{children:"This project aims to provide observability for the Oracle Database so that users can understand performance and diagnose issues easily across applications and database. Over time, this project will provide not just metrics, but also logging and tracing support, and integration into popular frameworks like Spring Boot. The project aims to deliver functionality to support both cloud and on-premises databases, including those running in Kubernetes and containers."}),"\n",(0,a.jsxs)(t.p,{children:["Contributions are welcome - please see ",(0,a.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/CONTRIBUTING.md",children:"contributing"}),"."]}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{alt:"Oracle Database Dashboard",src:n(3672).A+"",width:"1256",height:"1460"})}),"\n",(0,a.jsx)(t.h2,{id:"main-features",children:"Main Features"}),"\n",(0,a.jsx)(t.p,{children:"The exporter supports the following main features"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"Exports Oracle Database metrics in standard OTEL/Prometheus format"}),"\n",(0,a.jsx)(t.li,{children:"Works with on-prem, in the cloud, and in Kubernetes, with single instance, clustered, or Autonomous Oracle Database instances"}),"\n",(0,a.jsx)(t.li,{children:"Authenticate with plaintext, TLS, and Oracle Wallet"}),"\n",(0,a.jsx)(t.li,{children:"Secure credentials with Oracle Cloud Infrastructure (OCI) Vault or Azure Vault"}),"\n",(0,a.jsx)(t.li,{children:"Load metrics from one or more databases using a single exporter instance"}),"\n",(0,a.jsx)(t.li,{children:"Export the Prometheus Alert Log in JSON format for easy ingest by log aggregators"}),"\n",(0,a.jsx)(t.li,{children:"Pre-buit AMD64 and ARM64 images provided"}),"\n",(0,a.jsx)(t.li,{children:'Standard, default metrics included "out of the box"'}),"\n",(0,a.jsx)(t.li,{children:"Easily define custom metrics using YAML or TOML"}),"\n",(0,a.jsx)(t.li,{children:"Define the scrape interval, database query timeout, and other parameters on a per-metric, per-database level"}),"\n",(0,a.jsx)(t.li,{children:"Customize the database connection pool using go-sql, Oracle Database connection pools, and works with Database Resident Connection Pools"}),"\n",(0,a.jsxs)(t.li,{children:["Includes a sample ",(0,a.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/docker-compose/grafana",children:"Grafana dashboards"})," for inspiration or customization"]}),"\n"]}),"\n",(0,a.jsxs)(t.p,{children:["From the v1.0 release onwards, this project provides a ",(0,a.jsx)(t.a,{href:"https://prometheus.io/",children:"Prometheus"})," exporter for Oracle Database based in part on a Prometheus exporter created by ",(0,a.jsx)(t.a,{href:"https://github.com/iamseth/oracledb_exporter",children:"Seth Miller"}),". This project includes changes to comply with various Oracle standards and policies, as well as new features."]}),"\n",(0,a.jsxs)(t.blockquote,{children:["\n",(0,a.jsx)(t.p,{children:'Seth has archived his exporter as of Feb 13, 2025 and added a note encouraging people to check out ours instead. We wanted to extend a huge "Thank You!" to Seth for the work he did on that exporter, and his contributions to the Oracle and open source communities!'}),"\n"]})]})}function p(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},3672:(e,t,n)=>{n.d(t,{A:()=>r});const r=n.p+"assets/images/exporter-running-against-basedb-8d8d9efd9a0bec0eb44e25f40e1cced0.png"},8453:(e,t,n)=>{n.d(t,{R:()=>s,x:()=>i});var r=n(6540);const a={},o=r.createContext(a);function s(e){const t=r.useContext(o);return r.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/0e384e19.df53043b.js b/docs/assets/js/0e384e19.df53043b.js new file mode 100644 index 00000000..55c5f4f5 --- /dev/null +++ b/docs/assets/js/0e384e19.df53043b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[3976],{2053:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>s,metadata:()=>r,toc:()=>l});const r=JSON.parse('{"id":"intro","title":"OpenTelemetry Metrics for Oracle Database","description":"This project aims to provide observability for the Oracle Database so that users can understand performance and diagnose issues easily across applications and database. Over time, this project will provide not just metrics, but also logging and tracing support, and integration into popular frameworks like Spring Boot. The project aims to deliver functionality to support both cloud and on-premises databases, including those running in Kubernetes and containers.","source":"@site/docs/intro.md","sourceDirName":".","slug":"/intro","permalink":"/oracle-db-appdev-monitoring/docs/next/intro","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/docs/intro.md","tags":[],"version":"current","sidebarPosition":1,"frontMatter":{"sidebar_position":1},"sidebar":"tutorialSidebar","next":{"title":"Getting Started","permalink":"/oracle-db-appdev-monitoring/docs/next/category/getting-started"}}');var a=n(4848),o=n(8453);const s={sidebar_position:1},i="OpenTelemetry Metrics for Oracle Database",c={},l=[{value:"Main Features",id:"main-features",level:2}];function d(e){const t={a:"a",blockquote:"blockquote",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,o.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.header,{children:(0,a.jsx)(t.h1,{id:"opentelemetry-metrics-for-oracle-database",children:"OpenTelemetry Metrics for Oracle Database"})}),"\n",(0,a.jsx)(t.p,{children:"This project aims to provide observability for the Oracle Database so that users can understand performance and diagnose issues easily across applications and database. Over time, this project will provide not just metrics, but also logging and tracing support, and integration into popular frameworks like Spring Boot. The project aims to deliver functionality to support both cloud and on-premises databases, including those running in Kubernetes and containers."}),"\n",(0,a.jsxs)(t.p,{children:["Contributions are welcome - please see ",(0,a.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/CONTRIBUTING.md",children:"contributing"}),"."]}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{alt:"Oracle Database Dashboard",src:n(3672).A+"",width:"1256",height:"1460"})}),"\n",(0,a.jsx)(t.h2,{id:"main-features",children:"Main Features"}),"\n",(0,a.jsx)(t.p,{children:"The exporter supports the following main features"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"Exports Oracle Database metrics in standard OTEL/Prometheus format"}),"\n",(0,a.jsx)(t.li,{children:"Works with on-prem, in the cloud, and in Kubernetes, with single instance, clustered, or Autonomous Oracle Database instances"}),"\n",(0,a.jsx)(t.li,{children:"Authenticate with plaintext, TLS, and Oracle Wallet"}),"\n",(0,a.jsx)(t.li,{children:"Secure credentials with Oracle Cloud Infrastructure (OCI) Vault or Azure Vault"}),"\n",(0,a.jsx)(t.li,{children:"Load metrics from one or more databases using a single exporter instance"}),"\n",(0,a.jsx)(t.li,{children:"Export the Prometheus Alert Log in JSON format for easy ingest by log aggregators"}),"\n",(0,a.jsx)(t.li,{children:"Pre-buit AMD64 and ARM64 images provided"}),"\n",(0,a.jsx)(t.li,{children:'Standard, default metrics included "out of the box"'}),"\n",(0,a.jsx)(t.li,{children:"Easily define custom metrics using YAML or TOML"}),"\n",(0,a.jsx)(t.li,{children:"Define the scrape interval, database query timeout, and other parameters on a per-metric, per-database level"}),"\n",(0,a.jsx)(t.li,{children:"Customize the database connection pool using go-sql, Oracle Database connection pools, and works with Database Resident Connection Pools"}),"\n",(0,a.jsxs)(t.li,{children:["Includes a sample ",(0,a.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/docker-compose/grafana",children:"Grafana dashboards"})," for inspiration or customization"]}),"\n"]}),"\n",(0,a.jsxs)(t.p,{children:["From the v1.0 release onwards, this project provides a ",(0,a.jsx)(t.a,{href:"https://prometheus.io/",children:"Prometheus"})," exporter for Oracle Database based in part on a Prometheus exporter created by ",(0,a.jsx)(t.a,{href:"https://github.com/iamseth/oracledb_exporter",children:"Seth Miller"}),". This project includes changes to comply with various Oracle standards and policies, as well as new features."]}),"\n",(0,a.jsxs)(t.blockquote,{children:["\n",(0,a.jsx)(t.p,{children:'Seth has archived his exporter as of Feb 13, 2025 and added a note encouraging people to check out ours instead. We wanted to extend a huge "Thank You!" to Seth for the work he did on that exporter, and his contributions to the Oracle and open source communities!'}),"\n"]})]})}function p(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},3672:(e,t,n)=>{n.d(t,{A:()=>r});const r=n.p+"assets/images/exporter-running-against-basedb-8d8d9efd9a0bec0eb44e25f40e1cced0.png"},8453:(e,t,n)=>{n.d(t,{R:()=>s,x:()=>i});var r=n(6540);const a={},o=r.createContext(a);function s(e){const t=r.useContext(o);return r.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/14eb3368.a004a01c.js b/docs/assets/js/14eb3368.a004a01c.js new file mode 100644 index 00000000..b35c1e1d --- /dev/null +++ b/docs/assets/js/14eb3368.a004a01c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[6969],{594:(e,s,n)=>{n.d(s,{A:()=>j});n(6540);var t=n(4164),r=n(7559),a=n(4718),i=n(9169),c=n(8774),l=n(1312),o=n(6025),d=n(4848);function u(e){return(0,d.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,d.jsx)("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"})})}const m={breadcrumbHomeIcon:"breadcrumbHomeIcon_YNFT"};function h(){const e=(0,o.Ay)("/");return(0,d.jsx)("li",{className:"breadcrumbs__item",children:(0,d.jsx)(c.A,{"aria-label":(0,l.T)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e,children:(0,d.jsx)(u,{className:m.breadcrumbHomeIcon})})})}var b=n(5260),x=n(4586);function p(e){const s=function({breadcrumbs:e}){const{siteConfig:s}=(0,x.A)();return{"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:e.filter(e=>e.href).map((e,n)=>({"@type":"ListItem",position:n+1,name:e.label,item:`${s.url}${e.href}`}))}}({breadcrumbs:e.breadcrumbs});return(0,d.jsx)(b.A,{children:(0,d.jsx)("script",{type:"application/ld+json",children:JSON.stringify(s)})})}const g={breadcrumbsContainer:"breadcrumbsContainer_Z_bl"};function v({children:e,href:s,isLast:n}){const t="breadcrumbs__link";return n?(0,d.jsx)("span",{className:t,children:e}):s?(0,d.jsx)(c.A,{className:t,href:s,children:(0,d.jsx)("span",{children:e})}):(0,d.jsx)("span",{className:t,children:e})}function f({children:e,active:s}){return(0,d.jsx)("li",{className:(0,t.A)("breadcrumbs__item",{"breadcrumbs__item--active":s}),children:e})}function j(){const e=(0,a.OF)(),s=(0,i.Dt)();return e?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(p,{breadcrumbs:e}),(0,d.jsx)("nav",{className:(0,t.A)(r.G.docs.docBreadcrumbs,g.breadcrumbsContainer),"aria-label":(0,l.T)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"}),children:(0,d.jsxs)("ul",{className:"breadcrumbs",children:[s&&(0,d.jsx)(h,{}),e.map((s,n)=>{const t=n===e.length-1,r="category"===s.type&&s.linkUnlisted?void 0:s.href;return(0,d.jsx)(f,{active:t,children:(0,d.jsx)(v,{href:r,isLast:t,children:s.label})},n)})]})})]}):null}},1878:(e,s,n)=>{n.d(s,{A:()=>p});n(6540);var t=n(4164),r=n(4586),a=n(8774),i=n(1312),c=n(4070),l=n(7559),o=n(3886),d=n(3025),u=n(4848);const m={unreleased:function({siteTitle:e,versionMetadata:s}){return(0,u.jsx)(i.A,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:e,versionLabel:(0,u.jsx)("b",{children:s.label})},children:"This is unreleased documentation for {siteTitle} {versionLabel} version."})},unmaintained:function({siteTitle:e,versionMetadata:s}){return(0,u.jsx)(i.A,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:e,versionLabel:(0,u.jsx)("b",{children:s.label})},children:"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained."})}};function h(e){const s=m[e.versionMetadata.banner];return(0,u.jsx)(s,{...e})}function b({versionLabel:e,to:s,onClick:n}){return(0,u.jsx)(i.A,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:e,latestVersionLink:(0,u.jsx)("b",{children:(0,u.jsx)(a.A,{to:s,onClick:n,children:(0,u.jsx)(i.A,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label",children:"latest version"})})})},children:"For up-to-date documentation, see the {latestVersionLink} ({versionLabel})."})}function x({className:e,versionMetadata:s}){const{siteConfig:{title:n}}=(0,r.A)(),{pluginId:a}=(0,c.vT)({failfast:!0}),{savePreferredVersionName:i}=(0,o.g1)(a),{latestDocSuggestion:d,latestVersionSuggestion:m}=(0,c.HW)(a),x=d??(p=m).docs.find(e=>e.id===p.mainDocId);var p;return(0,u.jsxs)("div",{className:(0,t.A)(e,l.G.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert",children:[(0,u.jsx)("div",{children:(0,u.jsx)(h,{siteTitle:n,versionMetadata:s})}),(0,u.jsx)("div",{className:"margin-top--md",children:(0,u.jsx)(b,{versionLabel:m.label,to:x.path,onClick:()=>i(m.name)})})]})}function p({className:e}){const s=(0,d.r)();return s.banner?(0,u.jsx)(x,{className:e,versionMetadata:s}):null}},4267:(e,s,n)=>{n.d(s,{A:()=>l});n(6540);var t=n(4164),r=n(1312),a=n(7559),i=n(3025),c=n(4848);function l({className:e}){const s=(0,i.r)();return s.badge?(0,c.jsx)("span",{className:(0,t.A)(e,a.G.docs.docVersionBadge,"badge badge--secondary"),children:(0,c.jsx)(r.A,{id:"theme.docs.versionBadge.label",values:{versionLabel:s.label},children:"Version: {versionLabel}"})}):null}},6098:(e,s,n)=>{n.r(s),n.d(s,{default:()=>P});var t=n(6540),r=n(5500),a=n(4718),i=n(6025),c=n(4164),l=n(8774),o=n(4586);const d=["zero","one","two","few","many","other"];function u(e){return d.filter(s=>e.includes(s))}const m={locale:"en",pluralForms:u(["one","other"]),select:e=>1===e?"one":"other"};function h(){const{i18n:{currentLocale:e}}=(0,o.A)();return(0,t.useMemo)(()=>{try{return function(e){const s=new Intl.PluralRules(e);return{locale:e,pluralForms:u(s.resolvedOptions().pluralCategories),select:e=>s.select(e)}}(e)}catch(s){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${s.message}\n`),m}},[e])}function b(){const e=h();return{selectMessage:(s,n)=>function(e,s,n){const t=e.split("|");if(1===t.length)return t[0];t.length>n.pluralForms.length&&console.error(`For locale=${n.locale}, a maximum of ${n.pluralForms.length} plural forms are expected (${n.pluralForms.join(",")}), but the message contains ${t.length}: ${e}`);const r=n.select(s),a=n.pluralForms.indexOf(r);return t[Math.min(a,t.length-1)]}(n,s,e)}}var x=n(6654),p=n(1312),g=n(1107);const v={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};var f=n(4848);function j({className:e,href:s,children:n}){return(0,f.jsx)(l.A,{href:s,className:(0,c.A)("card padding--lg",v.cardContainer,e),children:n})}function N({className:e,href:s,icon:n,title:t,description:r}){return(0,f.jsxs)(j,{href:s,className:e,children:[(0,f.jsxs)(g.A,{as:"h2",className:(0,c.A)("text--truncate",v.cardTitle),title:t,children:[n," ",t]}),r&&(0,f.jsx)("p",{className:(0,c.A)("text--truncate",v.cardDescription),title:r,children:r})]})}function A({item:e}){const s=(0,a.Nr)(e),n=function(){const{selectMessage:e}=b();return s=>e(s,(0,p.T)({message:"1 item|{count} items",id:"theme.docs.DocCard.categoryDescription.plurals",description:"The default description for a category card in the generated index about how many items this category includes"},{count:s}))}();return s?(0,f.jsx)(N,{className:e.className,href:s,icon:"\ud83d\uddc3\ufe0f",title:e.label,description:e.description??n(e.items.length)}):null}function L({item:e}){const s=(0,x.A)(e.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",n=(0,a.cC)(e.docId??void 0);return(0,f.jsx)(N,{className:e.className,href:e.href,icon:s,title:e.label,description:e.description??n?.description})}function _({item:e}){switch(e.type){case"link":return(0,f.jsx)(L,{item:e});case"category":return(0,f.jsx)(A,{item:e});default:throw new Error(`unknown item type ${JSON.stringify(e)}`)}}const T={docCardListItem:"docCardListItem_W1sv"};function k({className:e}){const s=(0,a.a4)();return(0,f.jsx)(I,{items:s,className:e})}function y({item:e}){return(0,f.jsx)("article",{className:(0,c.A)(T.docCardListItem,"col col--6"),children:(0,f.jsx)(_,{item:e})})}function I(e){const{items:s,className:n}=e;if(!s)return(0,f.jsx)(k,{...e});const t=(0,a.d1)(s);return(0,f.jsx)("section",{className:(0,c.A)("row",n),children:t.map((e,s)=>(0,f.jsx)(y,{item:e},s))})}var C=n(6929),w=n(1878),F=n(4267),V=n(594);const M={generatedIndexPage:"generatedIndexPage_vN6x",title:"title_kItE"};function $({categoryGeneratedIndex:e}){return(0,f.jsx)(r.be,{title:e.title,description:e.description,keywords:e.keywords,image:(0,i.Ay)(e.image)})}function D({categoryGeneratedIndex:e}){const s=(0,a.$S)();return(0,f.jsxs)("div",{className:M.generatedIndexPage,children:[(0,f.jsx)(w.A,{}),(0,f.jsx)(V.A,{}),(0,f.jsx)(F.A,{}),(0,f.jsxs)("header",{children:[(0,f.jsx)(g.A,{as:"h1",className:M.title,children:e.title}),e.description&&(0,f.jsx)("p",{children:e.description})]}),(0,f.jsx)("article",{className:"margin-top--lg",children:(0,f.jsx)(I,{items:s.items,className:M.list})}),(0,f.jsx)("footer",{className:"margin-top--md",children:(0,f.jsx)(C.A,{previous:e.navigation.previous,next:e.navigation.next})})]})}function P(e){return(0,f.jsxs)(f.Fragment,{children:[(0,f.jsx)($,{...e}),(0,f.jsx)(D,{...e})]})}},6929:(e,s,n)=>{n.d(s,{A:()=>l});n(6540);var t=n(4164),r=n(1312),a=n(8774),i=n(4848);function c(e){const{permalink:s,title:n,subLabel:r,isNext:c}=e;return(0,i.jsxs)(a.A,{className:(0,t.A)("pagination-nav__link",c?"pagination-nav__link--next":"pagination-nav__link--prev"),to:s,children:[r&&(0,i.jsx)("div",{className:"pagination-nav__sublabel",children:r}),(0,i.jsx)("div",{className:"pagination-nav__label",children:n})]})}function l(e){const{className:s,previous:n,next:a}=e;return(0,i.jsxs)("nav",{className:(0,t.A)(s,"pagination-nav"),"aria-label":(0,r.T)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"}),children:[n&&(0,i.jsx)(c,{...n,subLabel:(0,i.jsx)(r.A,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc",children:"Previous"})}),a&&(0,i.jsx)(c,{...a,subLabel:(0,i.jsx)(r.A,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc",children:"Next"}),isNext:!0})]})}}}]); \ No newline at end of file diff --git a/docs/assets/js/14eb3368.d64fc15c.js b/docs/assets/js/14eb3368.d64fc15c.js deleted file mode 100644 index f257d0d7..00000000 --- a/docs/assets/js/14eb3368.d64fc15c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[969],{594:(e,s,n)=>{n.d(s,{A:()=>j});n(6540);var t=n(4164),r=n(7559),a=n(4718),i=n(9169),c=n(8774),l=n(1312),o=n(6025),d=n(4848);function u(e){return(0,d.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,d.jsx)("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"})})}const m={breadcrumbHomeIcon:"breadcrumbHomeIcon_YNFT"};function h(){const e=(0,o.Ay)("/");return(0,d.jsx)("li",{className:"breadcrumbs__item",children:(0,d.jsx)(c.A,{"aria-label":(0,l.T)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e,children:(0,d.jsx)(u,{className:m.breadcrumbHomeIcon})})})}var b=n(5260),x=n(4586);function p(e){const s=function({breadcrumbs:e}){const{siteConfig:s}=(0,x.A)();return{"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:e.filter(e=>e.href).map((e,n)=>({"@type":"ListItem",position:n+1,name:e.label,item:`${s.url}${e.href}`}))}}({breadcrumbs:e.breadcrumbs});return(0,d.jsx)(b.A,{children:(0,d.jsx)("script",{type:"application/ld+json",children:JSON.stringify(s)})})}const g={breadcrumbsContainer:"breadcrumbsContainer_Z_bl"};function v({children:e,href:s,isLast:n}){const t="breadcrumbs__link";return n?(0,d.jsx)("span",{className:t,children:e}):s?(0,d.jsx)(c.A,{className:t,href:s,children:(0,d.jsx)("span",{children:e})}):(0,d.jsx)("span",{className:t,children:e})}function f({children:e,active:s}){return(0,d.jsx)("li",{className:(0,t.A)("breadcrumbs__item",{"breadcrumbs__item--active":s}),children:e})}function j(){const e=(0,a.OF)(),s=(0,i.Dt)();return e?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(p,{breadcrumbs:e}),(0,d.jsx)("nav",{className:(0,t.A)(r.G.docs.docBreadcrumbs,g.breadcrumbsContainer),"aria-label":(0,l.T)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"}),children:(0,d.jsxs)("ul",{className:"breadcrumbs",children:[s&&(0,d.jsx)(h,{}),e.map((s,n)=>{const t=n===e.length-1,r="category"===s.type&&s.linkUnlisted?void 0:s.href;return(0,d.jsx)(f,{active:t,children:(0,d.jsx)(v,{href:r,isLast:t,children:s.label})},n)})]})})]}):null}},1878:(e,s,n)=>{n.d(s,{A:()=>p});n(6540);var t=n(4164),r=n(4586),a=n(8774),i=n(1312),c=n(4070),l=n(7559),o=n(3886),d=n(3025),u=n(4848);const m={unreleased:function({siteTitle:e,versionMetadata:s}){return(0,u.jsx)(i.A,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:e,versionLabel:(0,u.jsx)("b",{children:s.label})},children:"This is unreleased documentation for {siteTitle} {versionLabel} version."})},unmaintained:function({siteTitle:e,versionMetadata:s}){return(0,u.jsx)(i.A,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:e,versionLabel:(0,u.jsx)("b",{children:s.label})},children:"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained."})}};function h(e){const s=m[e.versionMetadata.banner];return(0,u.jsx)(s,{...e})}function b({versionLabel:e,to:s,onClick:n}){return(0,u.jsx)(i.A,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:e,latestVersionLink:(0,u.jsx)("b",{children:(0,u.jsx)(a.A,{to:s,onClick:n,children:(0,u.jsx)(i.A,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label",children:"latest version"})})})},children:"For up-to-date documentation, see the {latestVersionLink} ({versionLabel})."})}function x({className:e,versionMetadata:s}){const{siteConfig:{title:n}}=(0,r.A)(),{pluginId:a}=(0,c.vT)({failfast:!0}),{savePreferredVersionName:i}=(0,o.g1)(a),{latestDocSuggestion:d,latestVersionSuggestion:m}=(0,c.HW)(a),x=d??(p=m).docs.find(e=>e.id===p.mainDocId);var p;return(0,u.jsxs)("div",{className:(0,t.A)(e,l.G.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert",children:[(0,u.jsx)("div",{children:(0,u.jsx)(h,{siteTitle:n,versionMetadata:s})}),(0,u.jsx)("div",{className:"margin-top--md",children:(0,u.jsx)(b,{versionLabel:m.label,to:x.path,onClick:()=>i(m.name)})})]})}function p({className:e}){const s=(0,d.r)();return s.banner?(0,u.jsx)(x,{className:e,versionMetadata:s}):null}},4267:(e,s,n)=>{n.d(s,{A:()=>l});n(6540);var t=n(4164),r=n(1312),a=n(7559),i=n(3025),c=n(4848);function l({className:e}){const s=(0,i.r)();return s.badge?(0,c.jsx)("span",{className:(0,t.A)(e,a.G.docs.docVersionBadge,"badge badge--secondary"),children:(0,c.jsx)(r.A,{id:"theme.docs.versionBadge.label",values:{versionLabel:s.label},children:"Version: {versionLabel}"})}):null}},6098:(e,s,n)=>{n.r(s),n.d(s,{default:()=>P});var t=n(6540),r=n(5500),a=n(4718),i=n(6025),c=n(4164),l=n(8774),o=n(4586);const d=["zero","one","two","few","many","other"];function u(e){return d.filter(s=>e.includes(s))}const m={locale:"en",pluralForms:u(["one","other"]),select:e=>1===e?"one":"other"};function h(){const{i18n:{currentLocale:e}}=(0,o.A)();return(0,t.useMemo)(()=>{try{return function(e){const s=new Intl.PluralRules(e);return{locale:e,pluralForms:u(s.resolvedOptions().pluralCategories),select:e=>s.select(e)}}(e)}catch(s){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${s.message}\n`),m}},[e])}function b(){const e=h();return{selectMessage:(s,n)=>function(e,s,n){const t=e.split("|");if(1===t.length)return t[0];t.length>n.pluralForms.length&&console.error(`For locale=${n.locale}, a maximum of ${n.pluralForms.length} plural forms are expected (${n.pluralForms.join(",")}), but the message contains ${t.length}: ${e}`);const r=n.select(s),a=n.pluralForms.indexOf(r);return t[Math.min(a,t.length-1)]}(n,s,e)}}var x=n(6654),p=n(1312),g=n(1107);const v={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};var f=n(4848);function j({className:e,href:s,children:n}){return(0,f.jsx)(l.A,{href:s,className:(0,c.A)("card padding--lg",v.cardContainer,e),children:n})}function N({className:e,href:s,icon:n,title:t,description:r}){return(0,f.jsxs)(j,{href:s,className:e,children:[(0,f.jsxs)(g.A,{as:"h2",className:(0,c.A)("text--truncate",v.cardTitle),title:t,children:[n," ",t]}),r&&(0,f.jsx)("p",{className:(0,c.A)("text--truncate",v.cardDescription),title:r,children:r})]})}function A({item:e}){const s=(0,a.Nr)(e),n=function(){const{selectMessage:e}=b();return s=>e(s,(0,p.T)({message:"1 item|{count} items",id:"theme.docs.DocCard.categoryDescription.plurals",description:"The default description for a category card in the generated index about how many items this category includes"},{count:s}))}();return s?(0,f.jsx)(N,{className:e.className,href:s,icon:"\ud83d\uddc3\ufe0f",title:e.label,description:e.description??n(e.items.length)}):null}function L({item:e}){const s=(0,x.A)(e.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",n=(0,a.cC)(e.docId??void 0);return(0,f.jsx)(N,{className:e.className,href:e.href,icon:s,title:e.label,description:e.description??n?.description})}function _({item:e}){switch(e.type){case"link":return(0,f.jsx)(L,{item:e});case"category":return(0,f.jsx)(A,{item:e});default:throw new Error(`unknown item type ${JSON.stringify(e)}`)}}const T={docCardListItem:"docCardListItem_W1sv"};function k({className:e}){const s=(0,a.a4)();return(0,f.jsx)(I,{items:s,className:e})}function y({item:e}){return(0,f.jsx)("article",{className:(0,c.A)(T.docCardListItem,"col col--6"),children:(0,f.jsx)(_,{item:e})})}function I(e){const{items:s,className:n}=e;if(!s)return(0,f.jsx)(k,{...e});const t=(0,a.d1)(s);return(0,f.jsx)("section",{className:(0,c.A)("row",n),children:t.map((e,s)=>(0,f.jsx)(y,{item:e},s))})}var C=n(6929),w=n(1878),F=n(4267),V=n(594);const M={generatedIndexPage:"generatedIndexPage_vN6x",title:"title_kItE"};function $({categoryGeneratedIndex:e}){return(0,f.jsx)(r.be,{title:e.title,description:e.description,keywords:e.keywords,image:(0,i.Ay)(e.image)})}function D({categoryGeneratedIndex:e}){const s=(0,a.$S)();return(0,f.jsxs)("div",{className:M.generatedIndexPage,children:[(0,f.jsx)(w.A,{}),(0,f.jsx)(V.A,{}),(0,f.jsx)(F.A,{}),(0,f.jsxs)("header",{children:[(0,f.jsx)(g.A,{as:"h1",className:M.title,children:e.title}),e.description&&(0,f.jsx)("p",{children:e.description})]}),(0,f.jsx)("article",{className:"margin-top--lg",children:(0,f.jsx)(I,{items:s.items,className:M.list})}),(0,f.jsx)("footer",{className:"margin-top--md",children:(0,f.jsx)(C.A,{previous:e.navigation.previous,next:e.navigation.next})})]})}function P(e){return(0,f.jsxs)(f.Fragment,{children:[(0,f.jsx)($,{...e}),(0,f.jsx)(D,{...e})]})}},6929:(e,s,n)=>{n.d(s,{A:()=>l});n(6540);var t=n(4164),r=n(1312),a=n(8774),i=n(4848);function c(e){const{permalink:s,title:n,subLabel:r,isNext:c}=e;return(0,i.jsxs)(a.A,{className:(0,t.A)("pagination-nav__link",c?"pagination-nav__link--next":"pagination-nav__link--prev"),to:s,children:[r&&(0,i.jsx)("div",{className:"pagination-nav__sublabel",children:r}),(0,i.jsx)("div",{className:"pagination-nav__label",children:n})]})}function l(e){const{className:s,previous:n,next:a}=e;return(0,i.jsxs)("nav",{className:(0,t.A)(s,"pagination-nav"),"aria-label":(0,r.T)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"}),children:[n&&(0,i.jsx)(c,{...n,subLabel:(0,i.jsx)(r.A,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc",children:"Previous"})}),a&&(0,i.jsx)(c,{...a,subLabel:(0,i.jsx)(r.A,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc",children:"Next"}),isNext:!0})]})}}}]); \ No newline at end of file diff --git a/docs/assets/js/1668.57de6221.js b/docs/assets/js/1668.57de6221.js new file mode 100644 index 00000000..2b612856 --- /dev/null +++ b/docs/assets/js/1668.57de6221.js @@ -0,0 +1 @@ +(self.webpackChunksite=self.webpackChunksite||[]).push([[1668],{2153:(e,t,n)=>{"use strict";n.d(t,{A:()=>x});n(6540);var s=n(4164),a=n(1312),r=n(7559),i=n(8774);const o={iconEdit:"iconEdit_Z9Sw"};var c=n(4848);function l({className:e,...t}){return(0,c.jsx)("svg",{fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,s.A)(o.iconEdit,e),"aria-hidden":"true",...t,children:(0,c.jsx)("g",{children:(0,c.jsx)("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})})})}function d({editUrl:e}){return(0,c.jsxs)(i.A,{to:e,className:r.G.common.editThisPage,children:[(0,c.jsx)(l,{}),(0,c.jsx)(a.A,{id:"theme.common.editThisPage",description:"The link label to edit the current page",children:"Edit this page"})]})}var u=n(4586);function m(e={}){const{i18n:{currentLocale:t}}=(0,u.A)(),n=function(){const{i18n:{currentLocale:e,localeConfigs:t}}=(0,u.A)();return t[e].calendar}();return new Intl.DateTimeFormat(t,{calendar:n,...e})}function h({lastUpdatedAt:e}){const t=new Date(e),n=m({day:"numeric",month:"short",year:"numeric",timeZone:"UTC"}).format(t);return(0,c.jsx)(a.A,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:(0,c.jsx)("b",{children:(0,c.jsx)("time",{dateTime:t.toISOString(),itemProp:"dateModified",children:n})})},children:" on {date}"})}function f({lastUpdatedBy:e}){return(0,c.jsx)(a.A,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:(0,c.jsx)("b",{children:e})},children:" by {user}"})}function p({lastUpdatedAt:e,lastUpdatedBy:t}){return(0,c.jsxs)("span",{className:r.G.common.lastUpdated,children:[(0,c.jsx)(a.A,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:e?(0,c.jsx)(h,{lastUpdatedAt:e}):"",byUser:t?(0,c.jsx)(f,{lastUpdatedBy:t}):""},children:"Last updated{atDate}{byUser}"}),!1]})}const g={lastUpdated:"lastUpdated_JAkA"};function x({className:e,editUrl:t,lastUpdatedAt:n,lastUpdatedBy:a}){return(0,c.jsxs)("div",{className:(0,s.A)("row",e),children:[(0,c.jsx)("div",{className:"col",children:t&&(0,c.jsx)(d,{editUrl:t})}),(0,c.jsx)("div",{className:(0,s.A)("col",g.lastUpdated),children:(n||a)&&(0,c.jsx)(p,{lastUpdatedAt:n,lastUpdatedBy:a})})]})}},3253:(e,t,n)=>{"use strict";n.d(t,{A:()=>Ie});var s=n(6540),a=n(8453),r=n(5260),i=n(2303),o=n(4164),c=n(5293),l=n(6342);function d(){const{prism:e}=(0,l.p)(),{colorMode:t}=(0,c.G)(),n=e.theme,s=e.darkTheme||n;return"dark"===t?s:n}var u=n(7559),m=n(8426),h=n.n(m),f=n(9532),p=n(4848);const g=/title=(?["'])(?.*?)\1/,x=/\{(?<range>[\d,-]+)\}/,j={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},v={...j,lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}},b=Object.keys(j);function N(e,t){const n=e.map(e=>{const{start:n,end:s}=v[e];return`(?:${n}\\s*(${t.flatMap(e=>[e.line,e.block?.start,e.block?.end].filter(Boolean)).join("|")})\\s*${s})`}).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function y({showLineNumbers:e,metastring:t}){return"boolean"==typeof e?e?1:void 0:"number"==typeof e?e:function(e){const t=e?.split(" ").find(e=>e.startsWith("showLineNumbers"));if(t){if(t.startsWith("showLineNumbers=")){const e=t.replace("showLineNumbers=","");return parseInt(e,10)}return 1}}(t)}function A(e,t){const{language:n,magicComments:s}=t;if(void 0===n)return{lineClassNames:{},code:e};const a=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return N(["js","jsBlock"],t);case"jsx":case"tsx":return N(["js","jsBlock","jsx"],t);case"html":return N(["js","jsBlock","html"],t);case"python":case"py":case"bash":return N(["bash"],t);case"markdown":case"md":return N(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return N(["tex"],t);case"lua":case"haskell":return N(["lua"],t);case"sql":return N(["lua","jsBlock"],t);case"wasm":return N(["wasm"],t);case"vb":case"vba":case"visual-basic":return N(["vb","rem"],t);case"vbnet":return N(["vbnet","rem"],t);case"batch":return N(["rem"],t);case"basic":return N(["rem","f90"],t);case"fsharp":return N(["js","ml"],t);case"ocaml":case"sml":return N(["ml"],t);case"fortran":return N(["f90"],t);case"cobol":return N(["cobol"],t);default:return N(b,t)}}(n,s),r=e.split(/\r?\n/),i=Object.fromEntries(s.map(e=>[e.className,{start:0,range:""}])),o=Object.fromEntries(s.filter(e=>e.line).map(({className:e,line:t})=>[t,e])),c=Object.fromEntries(s.filter(e=>e.block).map(({className:e,block:t})=>[t.start,e])),l=Object.fromEntries(s.filter(e=>e.block).map(({className:e,block:t})=>[t.end,e]));for(let u=0;u<r.length;){const e=r[u].match(a);if(!e){u+=1;continue}const t=e.slice(1).find(e=>void 0!==e);o[t]?i[o[t]].range+=`${u},`:c[t]?i[c[t]].start=u:l[t]&&(i[l[t]].range+=`${i[l[t]].start}-${u-1},`),r.splice(u,1)}const d={};return Object.entries(i).forEach(([e,{range:t}])=>{h()(t).forEach(t=>{d[t]??=[],d[t].push(e)})}),{code:r.join("\n"),lineClassNames:d}}function C(e,t){const n=e.replace(/\r?\n$/,"");return function(e,{metastring:t,magicComments:n}){if(t&&x.test(t)){const s=t.match(x).groups.range;if(0===n.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${t}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const a=n[0].className,r=h()(s).filter(e=>e>0).map(e=>[e-1,[a]]);return{lineClassNames:Object.fromEntries(r),code:e}}return null}(n,{...t})??A(n,{...t})}function w(e){const t=function(e){return t=e.language??function(e){if(!e)return;const t=e.split(" ").find(e=>e.startsWith("language-"));return t?.replace(/language-/,"")}(e.className)??e.defaultLanguage,t?.toLowerCase()??"text";var t}({language:e.language,defaultLanguage:e.defaultLanguage,className:e.className}),{lineClassNames:n,code:s}=C(e.code,{metastring:e.metastring,magicComments:e.magicComments,language:t}),a=function({className:e,language:t}){return(0,o.A)(e,t&&!e?.includes(`language-${t}`)&&`language-${t}`)}({className:e.className,language:t}),r=(i=e.metastring,(i?.match(g)?.groups.title??"")||e.title);var i;const c=y({showLineNumbers:e.showLineNumbers,metastring:e.metastring});return{codeInput:e.code,code:s,className:a,language:t,title:r,lineNumbersStart:c,lineClassNames:n}}const k=(0,s.createContext)(null);function L({metadata:e,wordWrap:t,children:n}){const a=(0,s.useMemo)(()=>({metadata:e,wordWrap:t}),[e,t]);return(0,p.jsx)(k.Provider,{value:a,children:n})}function B(){const e=(0,s.useContext)(k);if(null===e)throw new f.dV("CodeBlockContextProvider");return e}const E="codeBlockContainer_Ckt0";function T({as:e,...t}){const n=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach(([e,s])=>{const a=t[e];a&&"string"==typeof s&&(n[a]=s)}),n}(d());return(0,p.jsx)(e,{...t,style:n,className:(0,o.A)(t.className,E,u.G.common.codeBlock)})}const H="codeBlock_bY9V",_="codeBlockStandalone_MEMb",M="codeBlockLines_e6Vv",S="codeBlockLinesWithNumbering_o6Pm";function I({children:e,className:t}){return(0,p.jsx)(T,{as:"pre",tabIndex:0,className:(0,o.A)(_,"thin-scrollbar",t),children:(0,p.jsx)("code",{className:M,children:e})})}const U={attributes:!0,characterData:!0,childList:!0,subtree:!0};function z(e,t){const[n,a]=(0,s.useState)(),r=(0,s.useCallback)(()=>{a(e.current?.closest("[role=tabpanel][hidden]"))},[e,a]);(0,s.useEffect)(()=>{r()},[r]),function(e,t,n=U){const a=(0,f._q)(t),r=(0,f.Be)(n);(0,s.useEffect)(()=>{const t=new MutationObserver(a);return e&&t.observe(e,r),()=>t.disconnect()},[e,a,r])}(n,e=>{e.forEach(e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),r())})},{attributes:!0,characterData:!1,childList:!1,subtree:!1})}function R({children:e}){return e}var V=n(1765);function O({line:e,token:t,...n}){return(0,p.jsx)("span",{...n})}const P="codeLine_lJS_",$="codeLineNumber_Tfdd",W="codeLineContent_feaV";function q({line:e,classNames:t,showLineNumbers:n,getLineProps:s,getTokenProps:a}){const r=function(e){const t=1===e.length&&"\n"===e[0].content?e[0]:void 0;return t?[{...t,content:""}]:e}(e),i=s({line:r,className:(0,o.A)(t,n&&P)}),c=r.map((e,t)=>{const n=a({token:e});return(0,p.jsx)(O,{...n,line:r,token:e,children:n.children},t)});return(0,p.jsxs)("span",{...i,children:[n?(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)("span",{className:$}),(0,p.jsx)("span",{className:W,children:c})]}):c,(0,p.jsx)("br",{})]})}const D=s.forwardRef((e,t)=>(0,p.jsx)("pre",{ref:t,tabIndex:0,...e,className:(0,o.A)(e.className,H,"thin-scrollbar")}));function F(e){const{metadata:t}=B();return(0,p.jsx)("code",{...e,className:(0,o.A)(e.className,M,void 0!==t.lineNumbersStart&&S),style:{...e.style,counterReset:void 0===t.lineNumbersStart?void 0:"line-count "+(t.lineNumbersStart-1)}})}function G({className:e}){const{metadata:t,wordWrap:n}=B(),s=d(),{code:a,language:r,lineNumbersStart:i,lineClassNames:c}=t;return(0,p.jsx)(V.f4,{theme:s,code:a,language:r,children:({className:t,style:s,tokens:a,getLineProps:r,getTokenProps:l})=>(0,p.jsx)(D,{ref:n.codeBlockRef,className:(0,o.A)(e,t),style:s,children:(0,p.jsx)(F,{children:a.map((e,t)=>(0,p.jsx)(q,{line:e,getLineProps:r,getTokenProps:l,classNames:c[t],showLineNumbers:void 0!==i},t))})})})}function J({children:e,fallback:t}){return(0,i.A)()?(0,p.jsx)(p.Fragment,{children:e?.()}):t??null}var Z=n(1312);function Y({className:e,...t}){return(0,p.jsx)("button",{type:"button",...t,className:(0,o.A)("clean-btn",e)})}function Q(e){return(0,p.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,p.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})})}function X(e){return(0,p.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,p.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})})}const K={copyButtonCopied:"copyButtonCopied_Vdqa",copyButtonIcons:"copyButtonIcons_IEyt",copyButtonIcon:"copyButtonIcon_TrPX",copyButtonSuccessIcon:"copyButtonSuccessIcon_cVMy"};function ee(e){return e?(0,Z.T)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,Z.T)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"})}function te(){const{metadata:{code:e}}=B(),[t,n]=(0,s.useState)(!1),a=(0,s.useRef)(void 0),r=(0,s.useCallback)(()=>{!function(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"),s=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 a=document.getSelection(),r=a.rangeCount>0&&a.getRangeAt(0);t.append(n),n.select(),n.selectionStart=0,n.selectionEnd=e.length;let i=!1;try{i=document.execCommand("copy")}catch{}n.remove(),r&&(a.removeAllRanges(),a.addRange(r)),s&&s.focus()}(e),n(!0),a.current=window.setTimeout(()=>{n(!1)},1e3)},[e]);return(0,s.useEffect)(()=>()=>window.clearTimeout(a.current),[]),{copyCode:r,isCopied:t}}function ne({className:e}){const{copyCode:t,isCopied:n}=te();return(0,p.jsx)(Y,{"aria-label":ee(n),title:(0,Z.T)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,o.A)(e,K.copyButton,n&&K.copyButtonCopied),onClick:t,children:(0,p.jsxs)("span",{className:K.copyButtonIcons,"aria-hidden":"true",children:[(0,p.jsx)(Q,{className:K.copyButtonIcon}),(0,p.jsx)(X,{className:K.copyButtonSuccessIcon})]})})}function se(e){return(0,p.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,p.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})})}const ae="wordWrapButtonIcon_b1P5",re="wordWrapButtonEnabled_uzNF";function ie({className:e}){const{wordWrap:t}=B();if(!(t.isEnabled||t.isCodeScrollable))return!1;const n=(0,Z.T)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,p.jsx)(Y,{onClick:()=>t.toggle(),className:(0,o.A)(e,t.isEnabled&&re),"aria-label":n,title:n,children:(0,p.jsx)(se,{className:ae,"aria-hidden":"true"})})}const oe="buttonGroup_M5ko";function ce({className:e}){return(0,p.jsx)(J,{children:()=>(0,p.jsxs)("div",{className:(0,o.A)(e,oe),children:[(0,p.jsx)(ie,{}),(0,p.jsx)(ne,{})]})})}const le="codeBlockContent_QJqH",de="codeBlockTitle_OeMC";function ue({className:e}){const{metadata:t}=B();return(0,p.jsxs)(T,{as:"div",className:(0,o.A)(e,t.className),children:[t.title&&(0,p.jsx)("div",{className:de,children:(0,p.jsx)(R,{children:t.title})}),(0,p.jsxs)("div",{className:le,children:[(0,p.jsx)(G,{}),(0,p.jsx)(ce,{})]})]})}function me(e){const t=function(e){const{prism:t}=(0,l.p)();return w({code:e.children,className:e.className,metastring:e.metastring,magicComments:t.magicComments,defaultLanguage:t.defaultLanguage,language:e.language,title:e.title,showLineNumbers:e.showLineNumbers})}(e),n=function(){const[e,t]=(0,s.useState)(!1),[n,a]=(0,s.useState)(!1),r=(0,s.useRef)(null),i=(0,s.useCallback)(()=>{const n=r.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t(e=>!e)},[r,e]),o=(0,s.useCallback)(()=>{const{scrollWidth:e,clientWidth:t}=r.current,n=e>t||r.current.querySelector("code").hasAttribute("style");a(n)},[r]);return z(r,o),(0,s.useEffect)(()=>{o()},[e,o]),(0,s.useEffect)(()=>(window.addEventListener("resize",o,{passive:!0}),()=>{window.removeEventListener("resize",o)}),[o]),{codeBlockRef:r,isEnabled:e,isCodeScrollable:n,toggle:i}}();return(0,p.jsx)(L,{metadata:t,wordWrap:n,children:(0,p.jsx)(ue,{})})}function he({children:e,...t}){const n=(0,i.A)(),a=function(e){return s.Children.toArray(e).some(e=>(0,s.isValidElement)(e))?e:Array.isArray(e)?e.join(""):e}(e),r="string"==typeof a?me:I;return(0,p.jsx)(r,{...t,children:a},String(n))}function fe(e){return(0,p.jsx)("code",{...e})}var pe=n(8774);var ge=n(3427),xe=n(1422);const je="details_lb9f",ve="isBrowser_bmU9",be="collapsibleContent_i85q";function Ne(e){return!!e&&("SUMMARY"===e.tagName||Ne(e.parentElement))}function ye(e,t){return!!e&&(e===t||ye(e.parentElement,t))}function Ae({summary:e,children:t,...n}){(0,ge.A)().collectAnchor(n.id);const a=(0,i.A)(),r=(0,s.useRef)(null),{collapsed:c,setCollapsed:l}=(0,xe.u)({initialState:!n.open}),[d,u]=(0,s.useState)(n.open),m=s.isValidElement(e)?e:(0,p.jsx)("summary",{children:e??"Details"});return(0,p.jsxs)("details",{...n,ref:r,open:d,"data-collapsed":c,className:(0,o.A)(je,a&&ve,n.className),onMouseDown:e=>{Ne(e.target)&&e.detail>1&&e.preventDefault()},onClick:e=>{e.stopPropagation();const t=e.target;Ne(t)&&ye(t,r.current)&&(e.preventDefault(),c?(l(!1),u(!0)):l(!0))},children:[m,(0,p.jsx)(xe.N,{lazy:!1,collapsed:c,onCollapseTransitionEnd:e=>{l(e),u(!e)},children:(0,p.jsx)("div",{className:be,children:t})})]})}const Ce="details_b_Ee";function we({...e}){return(0,p.jsx)(Ae,{...e,className:(0,o.A)("alert alert--info",Ce,e.className)})}function ke(e){const t=s.Children.toArray(e.children),n=t.find(e=>s.isValidElement(e)&&"summary"===e.type),a=(0,p.jsx)(p.Fragment,{children:t.filter(e=>e!==n)});return(0,p.jsx)(we,{...e,summary:n,children:a})}var Le=n(1107);function Be(e){return(0,p.jsx)(Le.A,{...e})}const Ee="containsTaskList_mC6p";function Te(e){if(void 0!==e)return(0,o.A)(e,e?.includes("contains-task-list")&&Ee)}const He="img_ev3q";var _e=n(7293),Me=n(418);const Se={Head:r.A,details:ke,Details:ke,code:function(e){return function(e){return void 0!==e.children&&s.Children.toArray(e.children).every(e=>"string"==typeof e&&!e.includes("\n"))}(e)?(0,p.jsx)(fe,{...e}):(0,p.jsx)(he,{...e})},a:function(e){return(0,p.jsx)(pe.A,{...e})},pre:function(e){return(0,p.jsx)(p.Fragment,{children:e.children})},ul:function(e){return(0,p.jsx)("ul",{...e,className:Te(e.className)})},li:function(e){return(0,ge.A)().collectAnchor(e.id),(0,p.jsx)("li",{...e})},img:function(e){return(0,p.jsx)("img",{decoding:"async",loading:"lazy",...e,className:(t=e.className,(0,o.A)(t,He))});var t},h1:e=>(0,p.jsx)(Be,{as:"h1",...e}),h2:e=>(0,p.jsx)(Be,{as:"h2",...e}),h3:e=>(0,p.jsx)(Be,{as:"h3",...e}),h4:e=>(0,p.jsx)(Be,{as:"h4",...e}),h5:e=>(0,p.jsx)(Be,{as:"h5",...e}),h6:e=>(0,p.jsx)(Be,{as:"h6",...e}),admonition:_e.A,mermaid:Me.A};function Ie({children:e}){return(0,p.jsx)(a.x,{components:Se,children:e})}},5195:(e,t,n)=>{"use strict";n.d(t,{A:()=>p});var s=n(6540),a=n(6342);function r(e){const t=e.map(e=>({...e,parentIndex:-1,children:[]})),n=Array(7).fill(-1);t.forEach((e,t)=>{const s=n.slice(2,e.level);e.parentIndex=Math.max(...s),n[e.level]=t});const s=[];return t.forEach(e=>{const{parentIndex:n,...a}=e;n>=0?t[n].children.push(a):s.push(a)}),s}function i({toc:e,minHeadingLevel:t,maxHeadingLevel:n}){return e.flatMap(e=>{const s=i({toc:e.children,minHeadingLevel:t,maxHeadingLevel:n});return function(e){return e.level>=t&&e.level<=n}(e)?[{...e,children:s}]:s})}function o(e){const t=e.getBoundingClientRect();return t.top===t.bottom?o(e.parentNode):t}function c(e,{anchorTopOffset:t}){const n=e.find(e=>o(e).top>=t);if(n){return function(e){return e.top>0&&e.bottom<window.innerHeight/2}(o(n))?n:e[e.indexOf(n)-1]??null}return e[e.length-1]??null}function l(){const e=(0,s.useRef)(0),{navbar:{hideOnScroll:t}}=(0,a.p)();return(0,s.useEffect)(()=>{e.current=t?0:document.querySelector(".navbar").clientHeight},[t]),e}function d(e){const t=(0,s.useRef)(void 0),n=l();(0,s.useEffect)(()=>{if(!e)return()=>{};const{linkClassName:s,linkActiveClassName:a,minHeadingLevel:r,maxHeadingLevel:i}=e;function o(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(s),o=function({minHeadingLevel:e,maxHeadingLevel:t}){const n=[];for(let s=e;s<=t;s+=1)n.push(`h${s}.anchor`);return Array.from(document.querySelectorAll(n.join()))}({minHeadingLevel:r,maxHeadingLevel:i}),l=c(o,{anchorTopOffset:n.current}),d=e.find(e=>l&&l.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e));e.forEach(e=>{!function(e,n){n?(t.current&&t.current!==e&&t.current.classList.remove(a),e.classList.add(a),t.current=e):e.classList.remove(a)}(e,e===d)})}return document.addEventListener("scroll",o),document.addEventListener("resize",o),o(),()=>{document.removeEventListener("scroll",o),document.removeEventListener("resize",o)}},[e,n])}var u=n(8774),m=n(4848);function h({toc:e,className:t,linkClassName:n,isChild:s}){return e.length?(0,m.jsx)("ul",{className:s?void 0:t,children:e.map(e=>(0,m.jsxs)("li",{children:[(0,m.jsx)(u.A,{to:`#${e.id}`,className:n??void 0,dangerouslySetInnerHTML:{__html:e.value}}),(0,m.jsx)(h,{isChild:!0,toc:e.children,className:t,linkClassName:n})]},e.id))}):null}const f=s.memo(h);function p({toc:e,className:t="table-of-contents table-of-contents__left-border",linkClassName:n="table-of-contents__link",linkActiveClassName:o,minHeadingLevel:c,maxHeadingLevel:l,...u}){const h=(0,a.p)(),p=c??h.tableOfContents.minHeadingLevel,g=l??h.tableOfContents.maxHeadingLevel,x=function({toc:e,minHeadingLevel:t,maxHeadingLevel:n}){return(0,s.useMemo)(()=>i({toc:r(e),minHeadingLevel:t,maxHeadingLevel:n}),[e,t,n])}({toc:e,minHeadingLevel:p,maxHeadingLevel:g});return d((0,s.useMemo)(()=>{if(n&&o)return{linkClassName:n,linkActiveClassName:o,minHeadingLevel:p,maxHeadingLevel:g}},[n,o,p,g])),(0,m.jsx)(f,{toc:x,className:t,linkClassName:n,...u})}},6896:(e,t,n)=>{"use strict";n.d(t,{A:()=>x});n(6540);var s=n(4164),a=n(1312),r=n(5260),i=n(4848);function o(){return(0,i.jsx)(a.A,{id:"theme.contentVisibility.unlistedBanner.title",description:"The unlisted content banner title",children:"Unlisted page"})}function c(){return(0,i.jsx)(a.A,{id:"theme.contentVisibility.unlistedBanner.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function l(){return(0,i.jsx)(r.A,{children:(0,i.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}function d(){return(0,i.jsx)(a.A,{id:"theme.contentVisibility.draftBanner.title",description:"The draft content banner title",children:"Draft page"})}function u(){return(0,i.jsx)(a.A,{id:"theme.contentVisibility.draftBanner.message",description:"The draft content banner message",children:"This page is a draft. It will only be visible in dev and be excluded from the production build."})}var m=n(7559),h=n(7293);function f({className:e}){return(0,i.jsx)(h.A,{type:"caution",title:(0,i.jsx)(d,{}),className:(0,s.A)(e,m.G.common.draftBanner),children:(0,i.jsx)(u,{})})}function p({className:e}){return(0,i.jsx)(h.A,{type:"caution",title:(0,i.jsx)(o,{}),className:(0,s.A)(e,m.G.common.unlistedBanner),children:(0,i.jsx)(c,{})})}function g(e){return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(l,{}),(0,i.jsx)(p,{...e})]})}function x({metadata:e}){const{unlisted:t,frontMatter:n}=e;return(0,i.jsxs)(i.Fragment,{children:[(t||n.unlisted)&&(0,i.jsx)(g,{}),n.draft&&(0,i.jsx)(f,{})]})}},7293:(e,t,n)=>{"use strict";n.d(t,{A:()=>_});var s=n(6540),a=n(4848);function r(e){const{mdxAdmonitionTitle:t,rest:n}=function(e){const t=s.Children.toArray(e),n=t.find(e=>s.isValidElement(e)&&"mdxAdmonitionTitle"===e.type),r=t.filter(e=>e!==n),i=n?.props.children;return{mdxAdmonitionTitle:i,rest:r.length>0?(0,a.jsx)(a.Fragment,{children:r}):null}}(e.children),r=e.title??t;return{...e,...r&&{title:r},children:n}}var i=n(4164),o=n(1312),c=n(7559);const l="admonition_xJq3",d="admonitionHeading_Gvgb",u="admonitionIcon_Rf37",m="admonitionContent_BuS1";function h({type:e,className:t,children:n}){return(0,a.jsx)("div",{className:(0,i.A)(c.G.common.admonition,c.G.common.admonitionType(e),l,t),children:n})}function f({icon:e,title:t}){return(0,a.jsxs)("div",{className:d,children:[(0,a.jsx)("span",{className:u,children:e}),t]})}function p({children:e}){return e?(0,a.jsx)("div",{className:m,children:e}):null}function g(e){const{type:t,icon:n,title:s,children:r,className:i}=e;return(0,a.jsxs)(h,{type:t,className:i,children:[s||n?(0,a.jsx)(f,{title:s,icon:n}):null,(0,a.jsx)(p,{children:r})]})}function x(e){return(0,a.jsx)("svg",{viewBox:"0 0 14 16",...e,children:(0,a.jsx)("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"})})}const j={icon:(0,a.jsx)(x,{}),title:(0,a.jsx)(o.A,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)",children:"note"})};function v(e){return(0,a.jsx)(g,{...j,...e,className:(0,i.A)("alert alert--secondary",e.className),children:e.children})}function b(e){return(0,a.jsx)("svg",{viewBox:"0 0 12 16",...e,children:(0,a.jsx)("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"})})}const N={icon:(0,a.jsx)(b,{}),title:(0,a.jsx)(o.A,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)",children:"tip"})};function y(e){return(0,a.jsx)(g,{...N,...e,className:(0,i.A)("alert alert--success",e.className),children:e.children})}function A(e){return(0,a.jsx)("svg",{viewBox:"0 0 14 16",...e,children:(0,a.jsx)("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"})})}const C={icon:(0,a.jsx)(A,{}),title:(0,a.jsx)(o.A,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)",children:"info"})};function w(e){return(0,a.jsx)(g,{...C,...e,className:(0,i.A)("alert alert--info",e.className),children:e.children})}function k(e){return(0,a.jsx)("svg",{viewBox:"0 0 16 16",...e,children:(0,a.jsx)("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"})})}const L={icon:(0,a.jsx)(k,{}),title:(0,a.jsx)(o.A,{id:"theme.admonition.warning",description:"The default label used for the Warning admonition (:::warning)",children:"warning"})};function B(e){return(0,a.jsx)("svg",{viewBox:"0 0 12 16",...e,children:(0,a.jsx)("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"})})}const E={icon:(0,a.jsx)(B,{}),title:(0,a.jsx)(o.A,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)",children:"danger"})};const T={icon:(0,a.jsx)(k,{}),title:(0,a.jsx)(o.A,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)",children:"caution"})};const H={...{note:v,tip:y,info:w,warning:function(e){return(0,a.jsx)(g,{...L,...e,className:(0,i.A)("alert alert--warning",e.className),children:e.children})},danger:function(e){return(0,a.jsx)(g,{...E,...e,className:(0,i.A)("alert alert--danger",e.className),children:e.children})}},...{secondary:e=>(0,a.jsx)(v,{title:"secondary",...e}),important:e=>(0,a.jsx)(w,{title:"important",...e}),success:e=>(0,a.jsx)(y,{title:"success",...e}),caution:function(e){return(0,a.jsx)(g,{...T,...e,className:(0,i.A)("alert alert--warning",e.className),children:e.children})}}};function _(e){const t=r(e),n=(s=t.type,H[s]||(console.warn(`No admonition component found for admonition type "${s}". Using Info as fallback.`),H.info));var s;return(0,a.jsx)(n,{...t})}},7763:(e,t,n)=>{"use strict";n.d(t,{A:()=>l});n(6540);var s=n(4164),a=n(5195);const r={tableOfContents:"tableOfContents_bqdL",docItemContainer:"docItemContainer_F8PC"};var i=n(4848);const o="table-of-contents__link toc-highlight",c="table-of-contents__link--active";function l({className:e,...t}){return(0,i.jsx)("div",{className:(0,s.A)(r.tableOfContents,"thin-scrollbar",e),children:(0,i.jsx)(a.A,{...t,linkClassName:o,linkActiveClassName:c})})}},8426:(e,t)=>{function n(e){let t,n=[];for(let s of e.split(",").map(e=>e.trim()))if(/^-?\d+$/.test(s))n.push(parseInt(s,10));else if(t=s.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,s,a,r]=t;if(s&&r){s=parseInt(s),r=parseInt(r);const e=s<r?1:-1;"-"!==a&&".."!==a&&"\u2025"!==a||(r+=e);for(let t=s;t!==r;t+=e)n.push(t)}}return n}t.default=n,e.exports=n},8453:(e,t,n)=>{"use strict";n.d(t,{R:()=>i,x:()=>o});var s=n(6540);const a={},r=s.createContext(a);function i(e){const t=s.useContext(r);return s.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),s.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/17896441.123f7693.js b/docs/assets/js/17896441.123f7693.js new file mode 100644 index 00000000..d27a345a --- /dev/null +++ b/docs/assets/js/17896441.123f7693.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[8401],{594:(e,t,s)=>{s.d(t,{A:()=>f});s(6540);var n=s(4164),a=s(7559),i=s(4718),o=s(9169),l=s(8774),r=s(1312),c=s(6025),d=s(4848);function u(e){return(0,d.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,d.jsx)("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"})})}const m={breadcrumbHomeIcon:"breadcrumbHomeIcon_YNFT"};function h(){const e=(0,c.Ay)("/");return(0,d.jsx)("li",{className:"breadcrumbs__item",children:(0,d.jsx)(l.A,{"aria-label":(0,r.T)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e,children:(0,d.jsx)(u,{className:m.breadcrumbHomeIcon})})})}var b=s(5260),x=s(4586);function v(e){const t=function({breadcrumbs:e}){const{siteConfig:t}=(0,x.A)();return{"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:e.filter(e=>e.href).map((e,s)=>({"@type":"ListItem",position:s+1,name:e.label,item:`${t.url}${e.href}`}))}}({breadcrumbs:e.breadcrumbs});return(0,d.jsx)(b.A,{children:(0,d.jsx)("script",{type:"application/ld+json",children:JSON.stringify(t)})})}const p={breadcrumbsContainer:"breadcrumbsContainer_Z_bl"};function g({children:e,href:t,isLast:s}){const n="breadcrumbs__link";return s?(0,d.jsx)("span",{className:n,children:e}):t?(0,d.jsx)(l.A,{className:n,href:t,children:(0,d.jsx)("span",{children:e})}):(0,d.jsx)("span",{className:n,children:e})}function j({children:e,active:t}){return(0,d.jsx)("li",{className:(0,n.A)("breadcrumbs__item",{"breadcrumbs__item--active":t}),children:e})}function f(){const e=(0,i.OF)(),t=(0,o.Dt)();return e?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(v,{breadcrumbs:e}),(0,d.jsx)("nav",{className:(0,n.A)(a.G.docs.docBreadcrumbs,p.breadcrumbsContainer),"aria-label":(0,r.T)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"}),children:(0,d.jsxs)("ul",{className:"breadcrumbs",children:[t&&(0,d.jsx)(h,{}),e.map((t,s)=>{const n=s===e.length-1,a="category"===t.type&&t.linkUnlisted?void 0:t.href;return(0,d.jsx)(j,{active:n,children:(0,d.jsx)(g,{href:a,isLast:n,children:t.label})},s)})]})})]}):null}},1878:(e,t,s)=>{s.d(t,{A:()=>v});s(6540);var n=s(4164),a=s(4586),i=s(8774),o=s(1312),l=s(4070),r=s(7559),c=s(3886),d=s(3025),u=s(4848);const m={unreleased:function({siteTitle:e,versionMetadata:t}){return(0,u.jsx)(o.A,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:e,versionLabel:(0,u.jsx)("b",{children:t.label})},children:"This is unreleased documentation for {siteTitle} {versionLabel} version."})},unmaintained:function({siteTitle:e,versionMetadata:t}){return(0,u.jsx)(o.A,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:e,versionLabel:(0,u.jsx)("b",{children:t.label})},children:"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained."})}};function h(e){const t=m[e.versionMetadata.banner];return(0,u.jsx)(t,{...e})}function b({versionLabel:e,to:t,onClick:s}){return(0,u.jsx)(o.A,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:e,latestVersionLink:(0,u.jsx)("b",{children:(0,u.jsx)(i.A,{to:t,onClick:s,children:(0,u.jsx)(o.A,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label",children:"latest version"})})})},children:"For up-to-date documentation, see the {latestVersionLink} ({versionLabel})."})}function x({className:e,versionMetadata:t}){const{siteConfig:{title:s}}=(0,a.A)(),{pluginId:i}=(0,l.vT)({failfast:!0}),{savePreferredVersionName:o}=(0,c.g1)(i),{latestDocSuggestion:d,latestVersionSuggestion:m}=(0,l.HW)(i),x=d??(v=m).docs.find(e=>e.id===v.mainDocId);var v;return(0,u.jsxs)("div",{className:(0,n.A)(e,r.G.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert",children:[(0,u.jsx)("div",{children:(0,u.jsx)(h,{siteTitle:s,versionMetadata:t})}),(0,u.jsx)("div",{className:"margin-top--md",children:(0,u.jsx)(b,{versionLabel:m.label,to:x.path,onClick:()=>o(m.name)})})]})}function v({className:e}){const t=(0,d.r)();return t.banner?(0,u.jsx)(x,{className:e,versionMetadata:t}):null}},4267:(e,t,s)=>{s.d(t,{A:()=>r});s(6540);var n=s(4164),a=s(1312),i=s(7559),o=s(3025),l=s(4848);function r({className:e}){const t=(0,o.r)();return t.badge?(0,l.jsx)("span",{className:(0,n.A)(e,i.G.docs.docVersionBadge,"badge badge--secondary"),children:(0,l.jsx)(a.A,{id:"theme.docs.versionBadge.label",values:{versionLabel:t.label},children:"Version: {versionLabel}"})}):null}},6929:(e,t,s)=>{s.d(t,{A:()=>r});s(6540);var n=s(4164),a=s(1312),i=s(8774),o=s(4848);function l(e){const{permalink:t,title:s,subLabel:a,isNext:l}=e;return(0,o.jsxs)(i.A,{className:(0,n.A)("pagination-nav__link",l?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t,children:[a&&(0,o.jsx)("div",{className:"pagination-nav__sublabel",children:a}),(0,o.jsx)("div",{className:"pagination-nav__label",children:s})]})}function r(e){const{className:t,previous:s,next:i}=e;return(0,o.jsxs)("nav",{className:(0,n.A)(t,"pagination-nav"),"aria-label":(0,a.T)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"}),children:[s&&(0,o.jsx)(l,{...s,subLabel:(0,o.jsx)(a.A,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc",children:"Previous"})}),i&&(0,o.jsx)(l,{...i,subLabel:(0,o.jsx)(a.A,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc",children:"Next"}),isNext:!0})]})}},8632:(e,t,s)=>{s.r(t),s.d(t,{default:()=>S});var n=s(6540),a=s(5500),i=s(9532),o=s(4848);const l=n.createContext(null);function r({children:e,content:t}){const s=function(e){return(0,n.useMemo)(()=>({metadata:e.metadata,frontMatter:e.frontMatter,assets:e.assets,contentTitle:e.contentTitle,toc:e.toc}),[e])}(t);return(0,o.jsx)(l.Provider,{value:s,children:e})}function c(){const e=(0,n.useContext)(l);if(null===e)throw new i.dV("DocProvider");return e}function d(){const{metadata:e,frontMatter:t,assets:s}=c();return(0,o.jsx)(a.be,{title:e.title,description:e.description,keywords:t.keywords,image:s.image??t.image})}var u=s(4164),m=s(4581),h=s(6929);function b(){const{metadata:e}=c();return(0,o.jsx)(h.A,{className:"docusaurus-mt-lg",previous:e.previous,next:e.next})}var x=s(1878),v=s(4267),p=s(7559),g=s(1312),j=s(8774);const f={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};function A({permalink:e,label:t,count:s,description:n}){return(0,o.jsxs)(j.A,{rel:"tag",href:e,title:n,className:(0,u.A)(f.tag,s?f.tagWithCount:f.tagRegular),children:[t,s&&(0,o.jsx)("span",{children:s})]})}const _={tags:"tags_jXut",tag:"tag_QGVx"};function N({tags:e}){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("b",{children:(0,o.jsx)(g.A,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list",children:"Tags:"})}),(0,o.jsx)("ul",{className:(0,u.A)(_.tags,"padding--none","margin-left--sm"),children:e.map(e=>(0,o.jsx)("li",{className:_.tag,children:(0,o.jsx)(A,{...e})},e.permalink))})]})}var C=s(2153);function L(){const{metadata:e}=c(),{editUrl:t,lastUpdatedAt:s,lastUpdatedBy:n,tags:a}=e,i=a.length>0,l=!!(t||s||n);return i||l?(0,o.jsxs)("footer",{className:(0,u.A)(p.G.docs.docFooter,"docusaurus-mt-lg"),children:[i&&(0,o.jsx)("div",{className:(0,u.A)("row margin-top--sm",p.G.docs.docFooterTagsRow),children:(0,o.jsx)("div",{className:"col",children:(0,o.jsx)(N,{tags:a})})}),l&&(0,o.jsx)(C.A,{className:(0,u.A)("margin-top--sm",p.G.docs.docFooterEditMetaRow),editUrl:t,lastUpdatedAt:s,lastUpdatedBy:n})]}):null}var T=s(1422),k=s(5195);const M={tocCollapsibleButton:"tocCollapsibleButton_TO0P",tocCollapsibleButtonExpanded:"tocCollapsibleButtonExpanded_MG3E"};function w({collapsed:e,...t}){return(0,o.jsx)("button",{type:"button",...t,className:(0,u.A)("clean-btn",M.tocCollapsibleButton,!e&&M.tocCollapsibleButtonExpanded,t.className),children:(0,o.jsx)(g.A,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component",children:"On this page"})})}const y={tocCollapsible:"tocCollapsible_ETCw",tocCollapsibleContent:"tocCollapsibleContent_vkbj",tocCollapsibleExpanded:"tocCollapsibleExpanded_sAul"};function B({toc:e,className:t,minHeadingLevel:s,maxHeadingLevel:n}){const{collapsed:a,toggleCollapsed:i}=(0,T.u)({initialState:!0});return(0,o.jsxs)("div",{className:(0,u.A)(y.tocCollapsible,!a&&y.tocCollapsibleExpanded,t),children:[(0,o.jsx)(w,{collapsed:a,onClick:i}),(0,o.jsx)(T.N,{lazy:!0,className:y.tocCollapsibleContent,collapsed:a,children:(0,o.jsx)(k.A,{toc:e,minHeadingLevel:s,maxHeadingLevel:n})})]})}const I={tocMobile:"tocMobile_ITEo"};function V(){const{toc:e,frontMatter:t}=c();return(0,o.jsx)(B,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:(0,u.A)(p.G.docs.docTocMobile,I.tocMobile)})}var H=s(7763);function E(){const{toc:e,frontMatter:t}=c();return(0,o.jsx)(H.A,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:p.G.docs.docTocDesktop})}var G=s(1107),F=s(3253);function R({children:e}){const t=function(){const{metadata:e,frontMatter:t,contentTitle:s}=c();return t.hide_title||void 0!==s?null:e.title}();return(0,o.jsxs)("div",{className:(0,u.A)(p.G.docs.docMarkdown,"markdown"),children:[t&&(0,o.jsx)("header",{children:(0,o.jsx)(G.A,{as:"h1",children:t})}),(0,o.jsx)(F.A,{children:e})]})}var D=s(594),O=s(6896);const U={docItemContainer:"docItemContainer_Djhp",docItemCol:"docItemCol_VOVn"};function P({children:e}){const t=function(){const{frontMatter:e,toc:t}=c(),s=(0,m.l)(),n=e.hide_table_of_contents,a=!n&&t.length>0;return{hidden:n,mobile:a?(0,o.jsx)(V,{}):void 0,desktop:!a||"desktop"!==s&&"ssr"!==s?void 0:(0,o.jsx)(E,{})}}(),{metadata:s}=c();return(0,o.jsxs)("div",{className:"row",children:[(0,o.jsxs)("div",{className:(0,u.A)("col",!t.hidden&&U.docItemCol),children:[(0,o.jsx)(O.A,{metadata:s}),(0,o.jsx)(x.A,{}),(0,o.jsxs)("div",{className:U.docItemContainer,children:[(0,o.jsxs)("article",{children:[(0,o.jsx)(D.A,{}),(0,o.jsx)(v.A,{}),t.mobile,(0,o.jsx)(R,{children:e}),(0,o.jsx)(L,{})]}),(0,o.jsx)(b,{})]})]}),t.desktop&&(0,o.jsx)("div",{className:"col col--3",children:t.desktop})]})}function S(e){const t=`docs-doc-id-${e.content.metadata.id}`,s=e.content;return(0,o.jsx)(r,{content:e.content,children:(0,o.jsxs)(a.e3,{className:t,children:[(0,o.jsx)(d,{}),(0,o.jsx)(P,{children:(0,o.jsx)(s,{})})]})})}}}]); \ No newline at end of file diff --git a/docs/assets/js/17896441.951229dd.js b/docs/assets/js/17896441.951229dd.js deleted file mode 100644 index 05eb7fd5..00000000 --- a/docs/assets/js/17896441.951229dd.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[401],{594:(e,t,s)=>{s.d(t,{A:()=>f});s(6540);var n=s(4164),a=s(7559),i=s(4718),o=s(9169),l=s(8774),r=s(1312),c=s(6025),d=s(4848);function u(e){return(0,d.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,d.jsx)("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"})})}const m={breadcrumbHomeIcon:"breadcrumbHomeIcon_YNFT"};function h(){const e=(0,c.Ay)("/");return(0,d.jsx)("li",{className:"breadcrumbs__item",children:(0,d.jsx)(l.A,{"aria-label":(0,r.T)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e,children:(0,d.jsx)(u,{className:m.breadcrumbHomeIcon})})})}var b=s(5260),x=s(4586);function v(e){const t=function({breadcrumbs:e}){const{siteConfig:t}=(0,x.A)();return{"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:e.filter(e=>e.href).map((e,s)=>({"@type":"ListItem",position:s+1,name:e.label,item:`${t.url}${e.href}`}))}}({breadcrumbs:e.breadcrumbs});return(0,d.jsx)(b.A,{children:(0,d.jsx)("script",{type:"application/ld+json",children:JSON.stringify(t)})})}const p={breadcrumbsContainer:"breadcrumbsContainer_Z_bl"};function g({children:e,href:t,isLast:s}){const n="breadcrumbs__link";return s?(0,d.jsx)("span",{className:n,children:e}):t?(0,d.jsx)(l.A,{className:n,href:t,children:(0,d.jsx)("span",{children:e})}):(0,d.jsx)("span",{className:n,children:e})}function j({children:e,active:t}){return(0,d.jsx)("li",{className:(0,n.A)("breadcrumbs__item",{"breadcrumbs__item--active":t}),children:e})}function f(){const e=(0,i.OF)(),t=(0,o.Dt)();return e?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(v,{breadcrumbs:e}),(0,d.jsx)("nav",{className:(0,n.A)(a.G.docs.docBreadcrumbs,p.breadcrumbsContainer),"aria-label":(0,r.T)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"}),children:(0,d.jsxs)("ul",{className:"breadcrumbs",children:[t&&(0,d.jsx)(h,{}),e.map((t,s)=>{const n=s===e.length-1,a="category"===t.type&&t.linkUnlisted?void 0:t.href;return(0,d.jsx)(j,{active:n,children:(0,d.jsx)(g,{href:a,isLast:n,children:t.label})},s)})]})})]}):null}},1878:(e,t,s)=>{s.d(t,{A:()=>v});s(6540);var n=s(4164),a=s(4586),i=s(8774),o=s(1312),l=s(4070),r=s(7559),c=s(3886),d=s(3025),u=s(4848);const m={unreleased:function({siteTitle:e,versionMetadata:t}){return(0,u.jsx)(o.A,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:e,versionLabel:(0,u.jsx)("b",{children:t.label})},children:"This is unreleased documentation for {siteTitle} {versionLabel} version."})},unmaintained:function({siteTitle:e,versionMetadata:t}){return(0,u.jsx)(o.A,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:e,versionLabel:(0,u.jsx)("b",{children:t.label})},children:"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained."})}};function h(e){const t=m[e.versionMetadata.banner];return(0,u.jsx)(t,{...e})}function b({versionLabel:e,to:t,onClick:s}){return(0,u.jsx)(o.A,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:e,latestVersionLink:(0,u.jsx)("b",{children:(0,u.jsx)(i.A,{to:t,onClick:s,children:(0,u.jsx)(o.A,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label",children:"latest version"})})})},children:"For up-to-date documentation, see the {latestVersionLink} ({versionLabel})."})}function x({className:e,versionMetadata:t}){const{siteConfig:{title:s}}=(0,a.A)(),{pluginId:i}=(0,l.vT)({failfast:!0}),{savePreferredVersionName:o}=(0,c.g1)(i),{latestDocSuggestion:d,latestVersionSuggestion:m}=(0,l.HW)(i),x=d??(v=m).docs.find(e=>e.id===v.mainDocId);var v;return(0,u.jsxs)("div",{className:(0,n.A)(e,r.G.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert",children:[(0,u.jsx)("div",{children:(0,u.jsx)(h,{siteTitle:s,versionMetadata:t})}),(0,u.jsx)("div",{className:"margin-top--md",children:(0,u.jsx)(b,{versionLabel:m.label,to:x.path,onClick:()=>o(m.name)})})]})}function v({className:e}){const t=(0,d.r)();return t.banner?(0,u.jsx)(x,{className:e,versionMetadata:t}):null}},4267:(e,t,s)=>{s.d(t,{A:()=>r});s(6540);var n=s(4164),a=s(1312),i=s(7559),o=s(3025),l=s(4848);function r({className:e}){const t=(0,o.r)();return t.badge?(0,l.jsx)("span",{className:(0,n.A)(e,i.G.docs.docVersionBadge,"badge badge--secondary"),children:(0,l.jsx)(a.A,{id:"theme.docs.versionBadge.label",values:{versionLabel:t.label},children:"Version: {versionLabel}"})}):null}},6929:(e,t,s)=>{s.d(t,{A:()=>r});s(6540);var n=s(4164),a=s(1312),i=s(8774),o=s(4848);function l(e){const{permalink:t,title:s,subLabel:a,isNext:l}=e;return(0,o.jsxs)(i.A,{className:(0,n.A)("pagination-nav__link",l?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t,children:[a&&(0,o.jsx)("div",{className:"pagination-nav__sublabel",children:a}),(0,o.jsx)("div",{className:"pagination-nav__label",children:s})]})}function r(e){const{className:t,previous:s,next:i}=e;return(0,o.jsxs)("nav",{className:(0,n.A)(t,"pagination-nav"),"aria-label":(0,a.T)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"}),children:[s&&(0,o.jsx)(l,{...s,subLabel:(0,o.jsx)(a.A,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc",children:"Previous"})}),i&&(0,o.jsx)(l,{...i,subLabel:(0,o.jsx)(a.A,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc",children:"Next"}),isNext:!0})]})}},8632:(e,t,s)=>{s.r(t),s.d(t,{default:()=>S});var n=s(6540),a=s(5500),i=s(9532),o=s(4848);const l=n.createContext(null);function r({children:e,content:t}){const s=function(e){return(0,n.useMemo)(()=>({metadata:e.metadata,frontMatter:e.frontMatter,assets:e.assets,contentTitle:e.contentTitle,toc:e.toc}),[e])}(t);return(0,o.jsx)(l.Provider,{value:s,children:e})}function c(){const e=(0,n.useContext)(l);if(null===e)throw new i.dV("DocProvider");return e}function d(){const{metadata:e,frontMatter:t,assets:s}=c();return(0,o.jsx)(a.be,{title:e.title,description:e.description,keywords:t.keywords,image:s.image??t.image})}var u=s(4164),m=s(4581),h=s(6929);function b(){const{metadata:e}=c();return(0,o.jsx)(h.A,{className:"docusaurus-mt-lg",previous:e.previous,next:e.next})}var x=s(1878),v=s(4267),p=s(7559),g=s(1312),j=s(8774);const f={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};function A({permalink:e,label:t,count:s,description:n}){return(0,o.jsxs)(j.A,{rel:"tag",href:e,title:n,className:(0,u.A)(f.tag,s?f.tagWithCount:f.tagRegular),children:[t,s&&(0,o.jsx)("span",{children:s})]})}const _={tags:"tags_jXut",tag:"tag_QGVx"};function N({tags:e}){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("b",{children:(0,o.jsx)(g.A,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list",children:"Tags:"})}),(0,o.jsx)("ul",{className:(0,u.A)(_.tags,"padding--none","margin-left--sm"),children:e.map(e=>(0,o.jsx)("li",{className:_.tag,children:(0,o.jsx)(A,{...e})},e.permalink))})]})}var C=s(2153);function L(){const{metadata:e}=c(),{editUrl:t,lastUpdatedAt:s,lastUpdatedBy:n,tags:a}=e,i=a.length>0,l=!!(t||s||n);return i||l?(0,o.jsxs)("footer",{className:(0,u.A)(p.G.docs.docFooter,"docusaurus-mt-lg"),children:[i&&(0,o.jsx)("div",{className:(0,u.A)("row margin-top--sm",p.G.docs.docFooterTagsRow),children:(0,o.jsx)("div",{className:"col",children:(0,o.jsx)(N,{tags:a})})}),l&&(0,o.jsx)(C.A,{className:(0,u.A)("margin-top--sm",p.G.docs.docFooterEditMetaRow),editUrl:t,lastUpdatedAt:s,lastUpdatedBy:n})]}):null}var T=s(1422),k=s(5195);const M={tocCollapsibleButton:"tocCollapsibleButton_TO0P",tocCollapsibleButtonExpanded:"tocCollapsibleButtonExpanded_MG3E"};function w({collapsed:e,...t}){return(0,o.jsx)("button",{type:"button",...t,className:(0,u.A)("clean-btn",M.tocCollapsibleButton,!e&&M.tocCollapsibleButtonExpanded,t.className),children:(0,o.jsx)(g.A,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component",children:"On this page"})})}const y={tocCollapsible:"tocCollapsible_ETCw",tocCollapsibleContent:"tocCollapsibleContent_vkbj",tocCollapsibleExpanded:"tocCollapsibleExpanded_sAul"};function B({toc:e,className:t,minHeadingLevel:s,maxHeadingLevel:n}){const{collapsed:a,toggleCollapsed:i}=(0,T.u)({initialState:!0});return(0,o.jsxs)("div",{className:(0,u.A)(y.tocCollapsible,!a&&y.tocCollapsibleExpanded,t),children:[(0,o.jsx)(w,{collapsed:a,onClick:i}),(0,o.jsx)(T.N,{lazy:!0,className:y.tocCollapsibleContent,collapsed:a,children:(0,o.jsx)(k.A,{toc:e,minHeadingLevel:s,maxHeadingLevel:n})})]})}const I={tocMobile:"tocMobile_ITEo"};function V(){const{toc:e,frontMatter:t}=c();return(0,o.jsx)(B,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:(0,u.A)(p.G.docs.docTocMobile,I.tocMobile)})}var H=s(7763);function E(){const{toc:e,frontMatter:t}=c();return(0,o.jsx)(H.A,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:p.G.docs.docTocDesktop})}var G=s(1107),F=s(3253);function R({children:e}){const t=function(){const{metadata:e,frontMatter:t,contentTitle:s}=c();return t.hide_title||void 0!==s?null:e.title}();return(0,o.jsxs)("div",{className:(0,u.A)(p.G.docs.docMarkdown,"markdown"),children:[t&&(0,o.jsx)("header",{children:(0,o.jsx)(G.A,{as:"h1",children:t})}),(0,o.jsx)(F.A,{children:e})]})}var D=s(594),O=s(6896);const U={docItemContainer:"docItemContainer_Djhp",docItemCol:"docItemCol_VOVn"};function P({children:e}){const t=function(){const{frontMatter:e,toc:t}=c(),s=(0,m.l)(),n=e.hide_table_of_contents,a=!n&&t.length>0;return{hidden:n,mobile:a?(0,o.jsx)(V,{}):void 0,desktop:!a||"desktop"!==s&&"ssr"!==s?void 0:(0,o.jsx)(E,{})}}(),{metadata:s}=c();return(0,o.jsxs)("div",{className:"row",children:[(0,o.jsxs)("div",{className:(0,u.A)("col",!t.hidden&&U.docItemCol),children:[(0,o.jsx)(O.A,{metadata:s}),(0,o.jsx)(x.A,{}),(0,o.jsxs)("div",{className:U.docItemContainer,children:[(0,o.jsxs)("article",{children:[(0,o.jsx)(D.A,{}),(0,o.jsx)(v.A,{}),t.mobile,(0,o.jsx)(R,{children:e}),(0,o.jsx)(L,{})]}),(0,o.jsx)(b,{})]})]}),t.desktop&&(0,o.jsx)("div",{className:"col col--3",children:t.desktop})]})}function S(e){const t=`docs-doc-id-${e.content.metadata.id}`,s=e.content;return(0,o.jsx)(r,{content:e.content,children:(0,o.jsxs)(a.e3,{className:t,children:[(0,o.jsx)(d,{}),(0,o.jsx)(P,{children:(0,o.jsx)(s,{})})]})})}}}]); \ No newline at end of file diff --git a/docs/assets/js/1df93b7f.3265e8f4.js b/docs/assets/js/1df93b7f.3265e8f4.js new file mode 100644 index 00000000..459d7852 --- /dev/null +++ b/docs/assets/js/1df93b7f.3265e8f4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[4583],{5579:(e,s,t)=>{t.r(s),t.d(s,{default:()=>f});var r=t(4164),c=t(8774),n=t(4586),i=t(1656),a=t(1107);const l={features:"features_t9lD",featureSvg:"featureSvg_GfXr"};var o=t(4848);const d=[{title:"Monitor From Anywhere",Svg:t(8819).A,description:(0,o.jsx)(o.Fragment,{children:"Run the Oracle Database Metrics Exporter as a local binary, container, or in Kubernetes. Use pre-built AMD64 and ARM64 images to easily get started."})},{title:"Extensible Database Metrics",Svg:t(8819).A,description:(0,o.jsxs)(o.Fragment,{children:["Use the default, include database metrics or define custom metrics with plain SQL queries in simple ",(0,o.jsx)("code",{children:"YAML"})," or ",(0,o.jsx)("code",{children:"TOML"})," files."]})},{title:"Multiple Databases? No Problem",Svg:t(8819).A,description:(0,o.jsx)(o.Fragment,{children:"Easily monitor one or more databases with a single exporter. One of your databases down or under maintenance? You'll still receive metrics from the others."})}];function h({title:e,Svg:s,description:t}){return(0,o.jsxs)("div",{className:(0,r.A)("col col--4"),children:[(0,o.jsx)("div",{className:"text--center",children:(0,o.jsx)(s,{className:l.featureSvg,role:"img"})}),(0,o.jsxs)("div",{className:"text--center padding-horiz--md",children:[(0,o.jsx)(a.A,{as:"h3",children:e}),(0,o.jsx)("p",{children:t})]})]})}function m(){return(0,o.jsx)("section",{className:l.features,children:(0,o.jsx)("div",{className:"container",children:(0,o.jsx)("div",{className:"row",children:d.map((e,s)=>(0,o.jsx)(h,{...e},s))})})})}const u={heroBanner:"heroBanner_qdFl",buttons:"buttons_AeoN"};function x(){const{siteConfig:e}=(0,n.A)();return(0,o.jsx)("header",{className:(0,r.A)("hero hero--primary",u.heroBanner),children:(0,o.jsxs)("div",{className:"container",children:[(0,o.jsx)(a.A,{as:"h1",className:"hero__title",children:e.title}),(0,o.jsx)("p",{className:"hero__subtitle",children:e.tagline}),(0,o.jsx)("div",{className:u.buttons,children:(0,o.jsx)(c.A,{className:"button button--secondary button--lg",to:"/docs/intro",children:"Getting Started Tutorial"})})]})})}function f(){const{siteConfig:e}=(0,n.A)();return(0,o.jsxs)(i.A,{title:`${e.title}`,description:"OpenTelemetry Metrics for your Oracle Database instances",children:[(0,o.jsx)(x,{}),(0,o.jsx)("main",{children:(0,o.jsx)(m,{})})]})}},8819:(e,s,t)=>{t.d(s,{A:()=>i});var r,c=t(6540);function n(){return n=Object.assign?Object.assign.bind():function(e){for(var s=1;s<arguments.length;s++){var t=arguments[s];for(var r in t)({}).hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e},n.apply(null,arguments)}const i=({title:e,titleId:s,...t})=>c.createElement("svg",n({xmlns:"http://www.w3.org/2000/svg",xmlSpace:"preserve",width:1622,height:1031,overflow:"hidden","aria-labelledby":s},t),e?c.createElement("title",{id:s},e):null,r||(r=c.createElement("path",{fill:"#FFF",d:"M1266.185 312.213c-69.525-69.407-182.432-69.407-252.244 0s-69.525 182.122 0 251.815c69.525 69.407 182.431 69.407 251.956 0 69.813-69.406 69.813-182.121.288-251.815m-16.376 235.754c-60.62 60.516-158.873 60.516-219.492 0s-60.619-158.603 0-219.119 158.873-60.516 219.492 0c60.044 60.229 59.47 158.03 0 219.119m19.248-158.603-21.546 8.03c2.585 6.884 4.596 14.054 5.746 21.224l22.695-3.728c-1.436-8.891-3.734-17.209-6.895-25.526m-31.315-48.757c-20.685-20.65-47.403-34.13-76.132-38.719l-3.448 22.658c24.133 3.728 46.255 14.914 63.492 32.122 7.47 7.457 14.078 16.061 19.249 25.239l20.11-11.185c-6.607-10.612-14.365-20.937-23.27-30.115m191.912 305.735c-15.513-15.488-31.89-29.541-49.126-42.734l-58.896-44.168c67.227-100.096 40.22-235.468-59.757-302.293s-235.868-40.153-303.094 59.942c-67.227 100.095-40.221 235.467 59.757 302.293 73.547 49.044 169.215 49.044 242.762 0l44.243 58.795c12.93 17.495 27.294 33.843 42.807 49.044l47.116 47.036 81.591-81.166zm-428.067-69.981c-76.42-76.29-76.42-199.903 0-276.194 76.42-76.29 200.243-76.29 276.664 0s76.42 199.904 0 276.194c-36.773 36.711-86.476 57.361-138.475 57.361-51.713 0-101.415-20.65-138.189-57.361m363.139 134.799c-14.652-14.627-28.155-30.115-40.508-46.75l-44.243-58.795c4.883-4.302 9.768-8.604 14.652-13.193s9.192-9.464 13.215-14.627l58.895 44.168c16.663 12.333 32.177 25.813 46.829 40.44l31.027 30.975-48.84 48.757zm132.729 2.581-8.044 24.378-48.84 48.757-24.42 8.031-8.044-8.031 81.304-81.166zM776.261 300.475c0-59.623-170.564-75.385-260.758-75.385s-260.759 15.762-260.759 75.385v435.976c0 58.125 170.565 73.459 260.759 73.459s260.758-15.334 260.758-73.317V300.475m-28.576 292.196c0 2.639-10.894 15.833-61.225 27.886-45.507 10.912-106.232 16.902-170.957 16.902s-125.45-5.848-170.957-16.902c-50.33-12.053-61.225-25.247-61.225-27.886V485.406c52.437 28.528 164.741 37.122 232.182 37.122s179.745-8.594 232.182-37.122Zm0-143.566c0 2.638-10.894 15.833-61.225 27.886-45.507 10.911-106.232 16.902-170.957 16.902s-125.45-5.991-170.957-16.902c-50.33-12.053-61.225-25.248-61.225-27.886V337.704c52.437 29.348 164.741 38.156 232.182 38.156s179.745-8.808 232.182-38.156ZM344.653 271.091c45.471-11.268 106.125-17.473 170.85-17.473s125.379 6.205 170.85 17.473c50.902 12.624 61.332 26.389 61.332 29.384s-10.43 16.76-61.331 29.384c-45.472 11.268-106.126 17.473-170.851 17.473s-125.379-6.205-170.85-17.473c-50.902-12.624-61.332-26.317-61.332-29.384s10.43-16.76 61.332-29.384M686.46 764.479c-45.507 10.912-106.232 16.903-170.957 16.903s-125.45-5.991-170.957-16.903c-50.33-12.053-61.225-25.282-61.225-27.886V628.865c52.437 28.528 164.741 37.122 232.182 37.122s179.745-8.558 232.182-37.122v107.728c0 2.604-10.716 15.833-61.225 27.886"})))}}]); \ No newline at end of file diff --git a/docs/assets/js/1df93b7f.ff24e8ed.js b/docs/assets/js/1df93b7f.ff24e8ed.js deleted file mode 100644 index e165a605..00000000 --- a/docs/assets/js/1df93b7f.ff24e8ed.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[583],{5579:(e,s,t)=>{t.r(s),t.d(s,{default:()=>f});var r=t(4164),c=t(8774),n=t(4586),i=t(1656),a=t(1107);const l={features:"features_t9lD",featureSvg:"featureSvg_GfXr"};var o=t(4848);const d=[{title:"Monitor From Anywhere",Svg:t(8819).A,description:(0,o.jsx)(o.Fragment,{children:"Run the Oracle Database Metrics Exporter as a local binary, container, or in Kubernetes. Use pre-built AMD64 and ARM64 images to easily get started."})},{title:"Extensible Database Metrics",Svg:t(8819).A,description:(0,o.jsxs)(o.Fragment,{children:["Use the default, include database metrics or define custom metrics with plain SQL queries in simple ",(0,o.jsx)("code",{children:"YAML"})," or ",(0,o.jsx)("code",{children:"TOML"})," files."]})},{title:"Multiple Databases? No Problem",Svg:t(8819).A,description:(0,o.jsx)(o.Fragment,{children:"Easily monitor one or more databases with a single exporter. One of your databases down or under maintenance? You'll still receive metrics from the others."})}];function h({title:e,Svg:s,description:t}){return(0,o.jsxs)("div",{className:(0,r.A)("col col--4"),children:[(0,o.jsx)("div",{className:"text--center",children:(0,o.jsx)(s,{className:l.featureSvg,role:"img"})}),(0,o.jsxs)("div",{className:"text--center padding-horiz--md",children:[(0,o.jsx)(a.A,{as:"h3",children:e}),(0,o.jsx)("p",{children:t})]})]})}function m(){return(0,o.jsx)("section",{className:l.features,children:(0,o.jsx)("div",{className:"container",children:(0,o.jsx)("div",{className:"row",children:d.map((e,s)=>(0,o.jsx)(h,{...e},s))})})})}const u={heroBanner:"heroBanner_qdFl",buttons:"buttons_AeoN"};function x(){const{siteConfig:e}=(0,n.A)();return(0,o.jsx)("header",{className:(0,r.A)("hero hero--primary",u.heroBanner),children:(0,o.jsxs)("div",{className:"container",children:[(0,o.jsx)(a.A,{as:"h1",className:"hero__title",children:e.title}),(0,o.jsx)("p",{className:"hero__subtitle",children:e.tagline}),(0,o.jsx)("div",{className:u.buttons,children:(0,o.jsx)(c.A,{className:"button button--secondary button--lg",to:"/docs/intro",children:"Getting Started Tutorial"})})]})})}function f(){const{siteConfig:e}=(0,n.A)();return(0,o.jsxs)(i.A,{title:`${e.title}`,description:"OpenTelemetry Metrics for your Oracle Database instances",children:[(0,o.jsx)(x,{}),(0,o.jsx)("main",{children:(0,o.jsx)(m,{})})]})}},8819:(e,s,t)=>{t.d(s,{A:()=>i});var r,c=t(6540);function n(){return n=Object.assign?Object.assign.bind():function(e){for(var s=1;s<arguments.length;s++){var t=arguments[s];for(var r in t)({}).hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e},n.apply(null,arguments)}const i=({title:e,titleId:s,...t})=>c.createElement("svg",n({xmlns:"http://www.w3.org/2000/svg",xmlSpace:"preserve",width:1622,height:1031,overflow:"hidden","aria-labelledby":s},t),e?c.createElement("title",{id:s},e):null,r||(r=c.createElement("path",{fill:"#FFF",d:"M1266.185 312.213c-69.525-69.407-182.432-69.407-252.244 0s-69.525 182.122 0 251.815c69.525 69.407 182.431 69.407 251.956 0 69.813-69.406 69.813-182.121.288-251.815m-16.376 235.754c-60.62 60.516-158.873 60.516-219.492 0s-60.619-158.603 0-219.119 158.873-60.516 219.492 0c60.044 60.229 59.47 158.03 0 219.119m19.248-158.603-21.546 8.03c2.585 6.884 4.596 14.054 5.746 21.224l22.695-3.728c-1.436-8.891-3.734-17.209-6.895-25.526m-31.315-48.757c-20.685-20.65-47.403-34.13-76.132-38.719l-3.448 22.658c24.133 3.728 46.255 14.914 63.492 32.122 7.47 7.457 14.078 16.061 19.249 25.239l20.11-11.185c-6.607-10.612-14.365-20.937-23.27-30.115m191.912 305.735c-15.513-15.488-31.89-29.541-49.126-42.734l-58.896-44.168c67.227-100.096 40.22-235.468-59.757-302.293s-235.868-40.153-303.094 59.942c-67.227 100.095-40.221 235.467 59.757 302.293 73.547 49.044 169.215 49.044 242.762 0l44.243 58.795c12.93 17.495 27.294 33.843 42.807 49.044l47.116 47.036 81.591-81.166zm-428.067-69.981c-76.42-76.29-76.42-199.903 0-276.194 76.42-76.29 200.243-76.29 276.664 0s76.42 199.904 0 276.194c-36.773 36.711-86.476 57.361-138.475 57.361-51.713 0-101.415-20.65-138.189-57.361m363.139 134.799c-14.652-14.627-28.155-30.115-40.508-46.75l-44.243-58.795c4.883-4.302 9.768-8.604 14.652-13.193s9.192-9.464 13.215-14.627l58.895 44.168c16.663 12.333 32.177 25.813 46.829 40.44l31.027 30.975-48.84 48.757zm132.729 2.581-8.044 24.378-48.84 48.757-24.42 8.031-8.044-8.031 81.304-81.166zM776.261 300.475c0-59.623-170.564-75.385-260.758-75.385s-260.759 15.762-260.759 75.385v435.976c0 58.125 170.565 73.459 260.759 73.459s260.758-15.334 260.758-73.317V300.475m-28.576 292.196c0 2.639-10.894 15.833-61.225 27.886-45.507 10.912-106.232 16.902-170.957 16.902s-125.45-5.848-170.957-16.902c-50.33-12.053-61.225-25.247-61.225-27.886V485.406c52.437 28.528 164.741 37.122 232.182 37.122s179.745-8.594 232.182-37.122Zm0-143.566c0 2.638-10.894 15.833-61.225 27.886-45.507 10.911-106.232 16.902-170.957 16.902s-125.45-5.991-170.957-16.902c-50.33-12.053-61.225-25.248-61.225-27.886V337.704c52.437 29.348 164.741 38.156 232.182 38.156s179.745-8.808 232.182-38.156ZM344.653 271.091c45.471-11.268 106.125-17.473 170.85-17.473s125.379 6.205 170.85 17.473c50.902 12.624 61.332 26.389 61.332 29.384s-10.43 16.76-61.331 29.384c-45.472 11.268-106.126 17.473-170.851 17.473s-125.379-6.205-170.85-17.473c-50.902-12.624-61.332-26.317-61.332-29.384s10.43-16.76 61.332-29.384M686.46 764.479c-45.507 10.912-106.232 16.903-170.957 16.903s-125.45-5.991-170.957-16.903c-50.33-12.053-61.225-25.282-61.225-27.886V628.865c52.437 28.528 164.741 37.122 232.182 37.122s179.745-8.558 232.182-37.122v107.728c0 2.604-10.716 15.833-61.225 27.886"})))}}]); \ No newline at end of file diff --git a/docs/assets/js/1e10f605.85d7d328.js b/docs/assets/js/1e10f605.85d7d328.js new file mode 100644 index 00000000..5a5d1109 --- /dev/null +++ b/docs/assets/js/1e10f605.85d7d328.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[5071],{7848:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>m,frontMatter:()=>l,metadata:()=>n,toc:()=>o});const n=JSON.parse('{"id":"configuration/custom-metrics","title":"Custom Metrics","description":"The exporter allows definition of arbitrary custom metrics in one or more TOML or YAML files.","source":"@site/docs/configuration/custom-metrics.md","sourceDirName":"configuration","slug":"/configuration/custom-metrics","permalink":"/oracle-db-appdev-monitoring/docs/next/configuration/custom-metrics","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/docs/configuration/custom-metrics.md","tags":[],"version":"current","sidebarPosition":2,"frontMatter":{"title":"Custom Metrics","sidebar_position":2},"sidebar":"tutorialSidebar","previous":{"title":"Exporter Config File","permalink":"/oracle-db-appdev-monitoring/docs/next/configuration/config-file"},"next":{"title":"Multiple Databases","permalink":"/oracle-db-appdev-monitoring/docs/next/configuration/multiple-databases"}}');var s=r(4848),i=r(8453);const l={title:"Custom Metrics",sidebar_position:2},a="Custom Metrics",c={},o=[{value:"Metric Schema",id:"metric-schema",level:3},{value:"Example Metric Definition",id:"example-metric-definition",level:3},{value:"Customize metrics in a container image",id:"customize-metrics-in-a-container-image",level:3}];function d(e){const t={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h3:"h3",header:"header",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"custom-metrics",children:"Custom Metrics"})}),"\n",(0,s.jsx)(t.p,{children:"The exporter allows definition of arbitrary custom metrics in one or more TOML or YAML files."}),"\n",(0,s.jsxs)(t.p,{children:["To specify custom metrics files\nexporter, use the ",(0,s.jsx)(t.code,{children:"metrics"})," configuration in the ",(0,s.jsx)(t.a,{href:"/oracle-db-appdev-monitoring/docs/next/configuration/config-file",children:"config file"}),":"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-yaml",children:"metrics:\n ## How often to scrape metrics. If not provided, metrics will be scraped on request.\n # scrapeInterval: 15s\n ## Path to default metrics file.\n default: default-metrics.toml\n ## Paths to any custom metrics files (TOML or YAML)\n custom:\n - custom-metrics-example/custom-metrics.toml\n"})}),"\n",(0,s.jsxs)(t.p,{children:["You may also use ",(0,s.jsx)(t.code,{children:"--custom.metrics"})," flag followed by a comma separated list of TOML or YAML files, or export ",(0,s.jsx)(t.code,{children:"CUSTOM_METRICS"})," variable environment (",(0,s.jsx)(t.code,{children:"export CUSTOM_METRICS=my-custom-metrics.toml,my-other-custom-metrics.toml"}),")"]}),"\n",(0,s.jsx)(t.h3,{id:"metric-schema",children:"Metric Schema"}),"\n",(0,s.jsxs)(t.p,{children:["Metrics files must contain a series of ",(0,s.jsx)(t.code,{children:"[[metric]]"})," definitions, in TOML, or the equivalent definition in a YAML file. Each metric definition must follow the exporter's metric schema:"]}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Field Name"}),(0,s.jsx)(t.th,{children:"Description"}),(0,s.jsx)(t.th,{children:"Type"}),(0,s.jsx)(t.th,{children:"Required"}),(0,s.jsx)(t.th,{children:"Default"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"context"}),(0,s.jsx)(t.td,{children:"Metric context, used to build metric FQN"}),(0,s.jsx)(t.td,{children:"String"}),(0,s.jsx)(t.td,{children:"Yes"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"labels"}),(0,s.jsx)(t.td,{children:"Metric labels, which must match column names in the query. Any column that is not a label will be parsed as a metric"}),(0,s.jsx)(t.td,{children:"Array of Strings"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"metricsdesc"}),(0,s.jsx)(t.td,{children:"Mapping between field(s) in the request and comment(s)"}),(0,s.jsx)(t.td,{children:"Dictionary of Strings"}),(0,s.jsx)(t.td,{children:"Yes"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"metricstype"}),(0,s.jsxs)(t.td,{children:["Mapping between field(s) in the request and ",(0,s.jsx)(t.a,{href:"https://prometheus.io/docs/concepts/metric_types/",children:"Prometheus metric types"})]}),(0,s.jsx)(t.td,{children:"Dictionary of Strings"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"metricsbuckets"}),(0,s.jsxs)(t.td,{children:["Split ",(0,s.jsx)(t.a,{href:"https://prometheus.io/docs/concepts/metric_types/#histogram",children:"histogram"})," metric types into buckets based on value (",(0,s.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/custom-metrics-example/metric-histogram-example.toml",children:"example"}),")"]}),(0,s.jsx)(t.td,{children:"Dictionary of String dictionaries"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"fieldtoappend"}),(0,s.jsx)(t.td,{children:"Field from the request to append to the metric FQN"}),(0,s.jsx)(t.td,{children:"String"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"request"}),(0,s.jsx)(t.td,{children:"Oracle database query to run for metrics scraping"}),(0,s.jsx)(t.td,{children:"String"}),(0,s.jsx)(t.td,{children:"Yes"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"ignorezeroresult"}),(0,s.jsx)(t.td,{children:"Whether or not an error will be printed if the request does not return any results"}),(0,s.jsx)(t.td,{children:"Boolean"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{children:"false"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"querytimeout"}),(0,s.jsx)(t.td,{children:"Oracle Database query timeout duration, e.g., 300ms, 0.5h"}),(0,s.jsx)(t.td,{children:"String duration"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{children:"Value of query.timeout in seconds"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"scrapeinterval"}),(0,s.jsx)(t.td,{children:"Custom metric scrape interval, used if scrape.interval is provided, otherwise metrics are always scraped on request."}),(0,s.jsx)(t.td,{children:"String duration"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"databases"}),(0,s.jsx)(t.td,{children:"Optional array of databases to scrape from. If not specified, the metric is scraped from all databases."}),(0,s.jsx)(t.td,{children:"Array of Strings"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{})]})]})]}),"\n",(0,s.jsx)(t.h3,{id:"example-metric-definition",children:"Example Metric Definition"}),"\n",(0,s.jsx)(t.p,{children:"Here's a simple example of a metric definition:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-toml",children:'[[metric]]\ncontext = "test"\nrequest = "SELECT 1 as value_1, 2 as value_2 FROM DUAL"\nmetricsdesc = { value_1 = "Simple example returning always 1.", value_2 = "Same but returning always 2." }\n'})}),"\n",(0,s.jsxs)(t.blockquote,{children:["\n",(0,s.jsxs)(t.p,{children:["NOTE: Do not add a semicolon (",(0,s.jsx)(t.code,{children:";"}),") at the end of the SQL queries."]}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"This file produce the following entries in the exporter:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-text",children:"# HELP oracledb_test_value_1 Simple example returning always 1.\n# TYPE oracledb_test_value_1 gauge\noracledb_test_value_1 1\n# HELP oracledb_test_value_2 Same but returning always 2.\n# TYPE oracledb_test_value_2 gauge\noracledb_test_value_2 2\n"})}),"\n",(0,s.jsxs)(t.p,{children:["You can also provide labels using ",(0,s.jsx)(t.code,{children:"labels"})," field. Here's an example providing two metrics, with and without labels:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-toml",children:'[[metric]]\ncontext = "context_no_label"\nrequest = "SELECT 1 as value_1, 2 as value_2 FROM DUAL"\nmetricsdesc = { value_1 = "Simple example returning always 1.", value_2 = "Same but returning always 2." }\n\n[[metric]]\ncontext = "context_with_labels"\nlabels = [ "label_1", "label_2" ]\nrequest = "SELECT 1 as value_1, 2 as value_2, \'First label\' as label_1, \'Second label\' as label_2 FROM DUAL"\nmetricsdesc = { value_1 = "Simple example returning always 1.", value_2 = "Same but returning always 2." }\n'})}),"\n",(0,s.jsx)(t.p,{children:"This TOML file produces the following result:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-text",children:'# HELP oracledb_context_no_label_value_1 Simple example returning always 1.\n# TYPE oracledb_context_no_label_value_1 gauge\noracledb_context_no_label_value_1 1\n# HELP oracledb_context_no_label_value_2 Same but returning always 2.\n# TYPE oracledb_context_no_label_value_2 gauge\noracledb_context_no_label_value_2 2\n# HELP oracledb_context_with_labels_value_1 Simple example returning always 1.\n# TYPE oracledb_context_with_labels_value_1 gauge\noracledb_context_with_labels_value_1{label_1="First label",label_2="Second label"} 1\n# HELP oracledb_context_with_labels_value_2 Same but returning always 2.\n# TYPE oracledb_context_with_labels_value_2 gauge\noracledb_context_with_labels_value_2{label_1="First label",label_2="Second label"} 2\n'})}),"\n",(0,s.jsxs)(t.p,{children:["Last, you can set metric type using ",(0,s.jsx)(t.strong,{children:"metricstype"})," field."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-toml",children:'[[metric]]\ncontext = "context_with_labels"\nlabels = [ "label_1", "label_2" ]\nrequest = "SELECT 1 as value_1, 2 as value_2, \'First label\' as label_1, \'Second label\' as label_2 FROM DUAL"\nmetricsdesc = { value_1 = "Simple example returning always 1 as counter.", value_2 = "Same but returning always 2 as gauge." }\n# Can be counter or gauge (default)\nmetricstype = { value_1 = "counter" }\n'})}),"\n",(0,s.jsx)(t.p,{children:"This TOML file will produce the following result:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-text",children:"# HELP oracledb_test_value_1 Simple test example returning always 1 as counter.\n# TYPE oracledb_test_value_1 counter\noracledb_test_value_1 1\n# HELP oracledb_test_value_2 Same test but returning always 2 as gauge.\n# TYPE oracledb_test_value_2 gauge\noracledb_test_value_2 2\n"})}),"\n",(0,s.jsxs)(t.p,{children:["You can find ",(0,s.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/custom-metrics-example/custom-metrics.toml",children:"working examples"})," of custom metrics for slow queries, big queries and top 100 tables.\nAn example of ",(0,s.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/custom-metrics-example/txeventq-metrics.toml",children:"custom metrics for Transacational Event Queues"})," is also provided."]}),"\n",(0,s.jsx)(t.h3,{id:"customize-metrics-in-a-container-image",children:"Customize metrics in a container image"}),"\n",(0,s.jsxs)(t.p,{children:["If you run the exporter as a container image and want to include your custom metrics in the image itself, you can use the following example ",(0,s.jsx)(t.code,{children:"Dockerfile"})," to create a new image:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-Dockerfile",children:'FROM container-registry.oracle.com/database/observability-exporter:2.0.2\nCOPY custom-metrics.toml /\nENTRYPOINT ["/oracledb_exporter", "--custom.metrics", "/custom-metrics.toml"]\n'})})]})}function m(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},8453:(e,t,r)=>{r.d(t,{R:()=>l,x:()=>a});var n=r(6540);const s={},i=n.createContext(s);function l(e){const t=n.useContext(i);return n.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),n.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/1e10f605.ef94c6bf.js b/docs/assets/js/1e10f605.ef94c6bf.js deleted file mode 100644 index 28f83435..00000000 --- a/docs/assets/js/1e10f605.ef94c6bf.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[71],{7848:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>m,frontMatter:()=>l,metadata:()=>n,toc:()=>o});const n=JSON.parse('{"id":"configuration/custom-metrics","title":"Custom Metrics","description":"The exporter allows definition of arbitrary custom metrics in one or more TOML or YAML files.","source":"@site/docs/configuration/custom-metrics.md","sourceDirName":"configuration","slug":"/configuration/custom-metrics","permalink":"/oracle-db-appdev-monitoring/docs/configuration/custom-metrics","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/docs/configuration/custom-metrics.md","tags":[],"version":"current","sidebarPosition":2,"frontMatter":{"title":"Custom Metrics","sidebar_position":2},"sidebar":"tutorialSidebar","previous":{"title":"Exporter Config File","permalink":"/oracle-db-appdev-monitoring/docs/configuration/config-file"},"next":{"title":"Multiple Databases","permalink":"/oracle-db-appdev-monitoring/docs/configuration/multiple-databases"}}');var s=r(4848),i=r(8453);const l={title:"Custom Metrics",sidebar_position:2},a="Custom Metrics",c={},o=[{value:"Metric Schema",id:"metric-schema",level:3},{value:"Example Metric Definition",id:"example-metric-definition",level:3},{value:"Customize metrics in a container image",id:"customize-metrics-in-a-container-image",level:3}];function d(e){const t={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h3:"h3",header:"header",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"custom-metrics",children:"Custom Metrics"})}),"\n",(0,s.jsx)(t.p,{children:"The exporter allows definition of arbitrary custom metrics in one or more TOML or YAML files."}),"\n",(0,s.jsxs)(t.p,{children:["To specify custom metrics files\nexporter, use the ",(0,s.jsx)(t.code,{children:"metrics"})," configuration in the ",(0,s.jsx)(t.a,{href:"/oracle-db-appdev-monitoring/docs/configuration/config-file",children:"config file"}),":"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-yaml",children:"metrics:\n ## How often to scrape metrics. If not provided, metrics will be scraped on request.\n # scrapeInterval: 15s\n ## Path to default metrics file.\n default: default-metrics.toml\n ## Paths to any custom metrics files (TOML or YAML)\n custom:\n - custom-metrics-example/custom-metrics.toml\n"})}),"\n",(0,s.jsxs)(t.p,{children:["You may also use ",(0,s.jsx)(t.code,{children:"--custom.metrics"})," flag followed by a comma separated list of TOML or YAML files, or export ",(0,s.jsx)(t.code,{children:"CUSTOM_METRICS"})," variable environment (",(0,s.jsx)(t.code,{children:"export CUSTOM_METRICS=my-custom-metrics.toml,my-other-custom-metrics.toml"}),")"]}),"\n",(0,s.jsx)(t.h3,{id:"metric-schema",children:"Metric Schema"}),"\n",(0,s.jsxs)(t.p,{children:["Metrics files must contain a series of ",(0,s.jsx)(t.code,{children:"[[metric]]"})," definitions, in TOML, or the equivalent definition in a YAML file. Each metric definition must follow the exporter's metric schema:"]}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Field Name"}),(0,s.jsx)(t.th,{children:"Description"}),(0,s.jsx)(t.th,{children:"Type"}),(0,s.jsx)(t.th,{children:"Required"}),(0,s.jsx)(t.th,{children:"Default"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"context"}),(0,s.jsx)(t.td,{children:"Metric context, used to build metric FQN"}),(0,s.jsx)(t.td,{children:"String"}),(0,s.jsx)(t.td,{children:"Yes"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"labels"}),(0,s.jsx)(t.td,{children:"Metric labels, which must match column names in the query. Any column that is not a label will be parsed as a metric"}),(0,s.jsx)(t.td,{children:"Array of Strings"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"metricsdesc"}),(0,s.jsx)(t.td,{children:"Mapping between field(s) in the request and comment(s)"}),(0,s.jsx)(t.td,{children:"Dictionary of Strings"}),(0,s.jsx)(t.td,{children:"Yes"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"metricstype"}),(0,s.jsxs)(t.td,{children:["Mapping between field(s) in the request and ",(0,s.jsx)(t.a,{href:"https://prometheus.io/docs/concepts/metric_types/",children:"Prometheus metric types"})]}),(0,s.jsx)(t.td,{children:"Dictionary of Strings"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"metricsbuckets"}),(0,s.jsxs)(t.td,{children:["Split ",(0,s.jsx)(t.a,{href:"https://prometheus.io/docs/concepts/metric_types/#histogram",children:"histogram"})," metric types into buckets based on value (",(0,s.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/custom-metrics-example/metric-histogram-example.toml",children:"example"}),")"]}),(0,s.jsx)(t.td,{children:"Dictionary of String dictionaries"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"fieldtoappend"}),(0,s.jsx)(t.td,{children:"Field from the request to append to the metric FQN"}),(0,s.jsx)(t.td,{children:"String"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"request"}),(0,s.jsx)(t.td,{children:"Oracle database query to run for metrics scraping"}),(0,s.jsx)(t.td,{children:"String"}),(0,s.jsx)(t.td,{children:"Yes"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"ignorezeroresult"}),(0,s.jsx)(t.td,{children:"Whether or not an error will be printed if the request does not return any results"}),(0,s.jsx)(t.td,{children:"Boolean"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{children:"false"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"querytimeout"}),(0,s.jsx)(t.td,{children:"Oracle Database query timeout duration, e.g., 300ms, 0.5h"}),(0,s.jsx)(t.td,{children:"String duration"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{children:"Value of query.timeout in seconds"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"scrapeinterval"}),(0,s.jsx)(t.td,{children:"Custom metric scrape interval, used if scrape.interval is provided, otherwise metrics are always scraped on request."}),(0,s.jsx)(t.td,{children:"String duration"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"databases"}),(0,s.jsx)(t.td,{children:"Optional array of databases to scrape from. If not specified, the metric is scraped from all databases."}),(0,s.jsx)(t.td,{children:"Array of Strings"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{})]})]})]}),"\n",(0,s.jsx)(t.h3,{id:"example-metric-definition",children:"Example Metric Definition"}),"\n",(0,s.jsx)(t.p,{children:"Here's a simple example of a metric definition:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-toml",children:'[[metric]]\ncontext = "test"\nrequest = "SELECT 1 as value_1, 2 as value_2 FROM DUAL"\nmetricsdesc = { value_1 = "Simple example returning always 1.", value_2 = "Same but returning always 2." }\n'})}),"\n",(0,s.jsxs)(t.blockquote,{children:["\n",(0,s.jsxs)(t.p,{children:["NOTE: Do not add a semicolon (",(0,s.jsx)(t.code,{children:";"}),") at the end of the SQL queries."]}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"This file produce the following entries in the exporter:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-text",children:"# HELP oracledb_test_value_1 Simple example returning always 1.\n# TYPE oracledb_test_value_1 gauge\noracledb_test_value_1 1\n# HELP oracledb_test_value_2 Same but returning always 2.\n# TYPE oracledb_test_value_2 gauge\noracledb_test_value_2 2\n"})}),"\n",(0,s.jsxs)(t.p,{children:["You can also provide labels using ",(0,s.jsx)(t.code,{children:"labels"})," field. Here's an example providing two metrics, with and without labels:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-toml",children:'[[metric]]\ncontext = "context_no_label"\nrequest = "SELECT 1 as value_1, 2 as value_2 FROM DUAL"\nmetricsdesc = { value_1 = "Simple example returning always 1.", value_2 = "Same but returning always 2." }\n\n[[metric]]\ncontext = "context_with_labels"\nlabels = [ "label_1", "label_2" ]\nrequest = "SELECT 1 as value_1, 2 as value_2, \'First label\' as label_1, \'Second label\' as label_2 FROM DUAL"\nmetricsdesc = { value_1 = "Simple example returning always 1.", value_2 = "Same but returning always 2." }\n'})}),"\n",(0,s.jsx)(t.p,{children:"This TOML file produces the following result:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-text",children:'# HELP oracledb_context_no_label_value_1 Simple example returning always 1.\n# TYPE oracledb_context_no_label_value_1 gauge\noracledb_context_no_label_value_1 1\n# HELP oracledb_context_no_label_value_2 Same but returning always 2.\n# TYPE oracledb_context_no_label_value_2 gauge\noracledb_context_no_label_value_2 2\n# HELP oracledb_context_with_labels_value_1 Simple example returning always 1.\n# TYPE oracledb_context_with_labels_value_1 gauge\noracledb_context_with_labels_value_1{label_1="First label",label_2="Second label"} 1\n# HELP oracledb_context_with_labels_value_2 Same but returning always 2.\n# TYPE oracledb_context_with_labels_value_2 gauge\noracledb_context_with_labels_value_2{label_1="First label",label_2="Second label"} 2\n'})}),"\n",(0,s.jsxs)(t.p,{children:["Last, you can set metric type using ",(0,s.jsx)(t.strong,{children:"metricstype"})," field."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-toml",children:'[[metric]]\ncontext = "context_with_labels"\nlabels = [ "label_1", "label_2" ]\nrequest = "SELECT 1 as value_1, 2 as value_2, \'First label\' as label_1, \'Second label\' as label_2 FROM DUAL"\nmetricsdesc = { value_1 = "Simple example returning always 1 as counter.", value_2 = "Same but returning always 2 as gauge." }\n# Can be counter or gauge (default)\nmetricstype = { value_1 = "counter" }\n'})}),"\n",(0,s.jsx)(t.p,{children:"This TOML file will produce the following result:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-text",children:"# HELP oracledb_test_value_1 Simple test example returning always 1 as counter.\n# TYPE oracledb_test_value_1 counter\noracledb_test_value_1 1\n# HELP oracledb_test_value_2 Same test but returning always 2 as gauge.\n# TYPE oracledb_test_value_2 gauge\noracledb_test_value_2 2\n"})}),"\n",(0,s.jsxs)(t.p,{children:["You can find ",(0,s.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/custom-metrics-example/custom-metrics.toml",children:"working examples"})," of custom metrics for slow queries, big queries and top 100 tables.\nAn example of ",(0,s.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/custom-metrics-example/txeventq-metrics.toml",children:"custom metrics for Transacational Event Queues"})," is also provided."]}),"\n",(0,s.jsx)(t.h3,{id:"customize-metrics-in-a-container-image",children:"Customize metrics in a container image"}),"\n",(0,s.jsxs)(t.p,{children:["If you run the exporter as a container image and want to include your custom metrics in the image itself, you can use the following example ",(0,s.jsx)(t.code,{children:"Dockerfile"})," to create a new image:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-Dockerfile",children:'FROM container-registry.oracle.com/database/observability-exporter:2.0.2\nCOPY custom-metrics.toml /\nENTRYPOINT ["/oracledb_exporter", "--custom.metrics", "/custom-metrics.toml"]\n'})})]})}function m(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},8453:(e,t,r)=>{r.d(t,{R:()=>l,x:()=>a});var n=r(6540);const s={},i=n.createContext(s);function l(e){const t=n.useContext(i);return n.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),n.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/1f391b9e.934f2783.js b/docs/assets/js/1f391b9e.934f2783.js new file mode 100644 index 00000000..81bbab9d --- /dev/null +++ b/docs/assets/js/1f391b9e.934f2783.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[6061],{7973:(e,a,s)=>{s.r(a),s.d(a,{default:()=>x});s(6540);var t=s(4164),d=s(5500),i=s(7559),l=s(1656),r=s(3253),c=s(7763),n=s(6896),o=s(2153);const m={mdxPageWrapper:"mdxPageWrapper_j9I6"};var p=s(4848);function x(e){const{content:a}=e,{metadata:s,assets:x}=a,{title:g,editUrl:h,description:j,frontMatter:A,lastUpdatedBy:v,lastUpdatedAt:_}=s,{keywords:u,wrapperClassName:w,hide_table_of_contents:f}=A,N=x.image??A.image,k=!!(h||_||v);return(0,p.jsx)(d.e3,{className:(0,t.A)(w??i.G.wrapper.mdxPages,i.G.page.mdxPage),children:(0,p.jsxs)(l.A,{children:[(0,p.jsx)(d.be,{title:g,description:j,keywords:u,image:N}),(0,p.jsx)("main",{className:"container container--fluid margin-vert--lg",children:(0,p.jsxs)("div",{className:(0,t.A)("row",m.mdxPageWrapper),children:[(0,p.jsxs)("div",{className:(0,t.A)("col",!f&&"col--8"),children:[(0,p.jsx)(n.A,{metadata:s}),(0,p.jsx)("article",{children:(0,p.jsx)(r.A,{children:(0,p.jsx)(a,{})})}),k&&(0,p.jsx)(o.A,{className:(0,t.A)("margin-top--sm",i.G.pages.pageFooterEditMetaRow),editUrl:h,lastUpdatedAt:_,lastUpdatedBy:v})]}),!f&&a.toc.length>0&&(0,p.jsx)("div",{className:"col col--2",children:(0,p.jsx)(c.A,{toc:a.toc,minHeadingLevel:A.toc_min_heading_level,maxHeadingLevel:A.toc_max_heading_level})})]})})]})})}}}]); \ No newline at end of file diff --git a/docs/assets/js/1f391b9e.d091afa4.js b/docs/assets/js/1f391b9e.d091afa4.js deleted file mode 100644 index 5e1d4ba4..00000000 --- a/docs/assets/js/1f391b9e.d091afa4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[61],{7973:(e,a,s)=>{s.r(a),s.d(a,{default:()=>x});s(6540);var t=s(4164),d=s(5500),i=s(7559),l=s(1656),r=s(3253),c=s(7763),n=s(6896),o=s(2153);const m={mdxPageWrapper:"mdxPageWrapper_j9I6"};var p=s(4848);function x(e){const{content:a}=e,{metadata:s,assets:x}=a,{title:g,editUrl:h,description:j,frontMatter:A,lastUpdatedBy:v,lastUpdatedAt:_}=s,{keywords:u,wrapperClassName:w,hide_table_of_contents:f}=A,N=x.image??A.image,k=!!(h||_||v);return(0,p.jsx)(d.e3,{className:(0,t.A)(w??i.G.wrapper.mdxPages,i.G.page.mdxPage),children:(0,p.jsxs)(l.A,{children:[(0,p.jsx)(d.be,{title:g,description:j,keywords:u,image:N}),(0,p.jsx)("main",{className:"container container--fluid margin-vert--lg",children:(0,p.jsxs)("div",{className:(0,t.A)("row",m.mdxPageWrapper),children:[(0,p.jsxs)("div",{className:(0,t.A)("col",!f&&"col--8"),children:[(0,p.jsx)(n.A,{metadata:s}),(0,p.jsx)("article",{children:(0,p.jsx)(r.A,{children:(0,p.jsx)(a,{})})}),k&&(0,p.jsx)(o.A,{className:(0,t.A)("margin-top--sm",i.G.pages.pageFooterEditMetaRow),editUrl:h,lastUpdatedAt:_,lastUpdatedBy:v})]}),!f&&a.toc.length>0&&(0,p.jsx)("div",{className:"col col--2",children:(0,p.jsx)(c.A,{toc:a.toc,minHeadingLevel:A.toc_min_heading_level,maxHeadingLevel:A.toc_max_heading_level})})]})})]})})}}}]); \ No newline at end of file diff --git a/docs/assets/js/21b27731.093b684e.js b/docs/assets/js/21b27731.093b684e.js deleted file mode 100644 index 3e22f1f4..00000000 --- a/docs/assets/js/21b27731.093b684e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[798],{3791:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>r,metadata:()=>a,toc:()=>d});const a=JSON.parse('{"id":"advanced/txeventq","title":"Monitoring TxEventQ","description":"Oracle Transactional Event Queues (\\"TxEventQ\\") is a fault-tolerant, scalable, real-time messaging backbone offered by converged Oracle Database that allows you to build an enterprise-class event-driven architectures.","source":"@site/docs/advanced/txeventq.md","sourceDirName":"advanced","slug":"/advanced/txeventq","permalink":"/oracle-db-appdev-monitoring/docs/advanced/txeventq","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/docs/advanced/txeventq.md","tags":[],"version":"current","sidebarPosition":2,"frontMatter":{"title":"Monitoring TxEventQ","sidebar_position":2},"sidebar":"tutorialSidebar","previous":{"title":"Configuring the Go Runtime","permalink":"/oracle-db-appdev-monitoring/docs/advanced/go-runtime"},"next":{"title":"Development","permalink":"/oracle-db-appdev-monitoring/docs/advanced/development"}}');var s=n(4848),o=n(8453);const r={title:"Monitoring TxEventQ",sidebar_position:2},i="Monitoring Transactional Event Queues",c={},d=[{value:"How to create some traffic with PL/SQL",id:"how-to-create-some-traffic-with-plsql",level:3},{value:"How to create some traffic with Java (Spring Boot)",id:"how-to-create-some-traffic-with-java-spring-boot",level:3},{value:"Metrics definitions",id:"metrics-definitions",level:3},{value:"Additional database permissions",id:"additional-database-permissions",level:3},{value:"Grafana dashboard",id:"grafana-dashboard",level:3}];function l(e){const t={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h3:"h3",header:"header",img:"img",p:"p",pre:"pre",...(0,o.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"monitoring-transactional-event-queues",children:"Monitoring Transactional Event Queues"})}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.a,{href:"https://docs.oracle.com/en/database/oracle/oracle-database/23/adque/index.html",children:"Oracle Transactional Event Queues"}),' ("TxEventQ") is a fault-tolerant, scalable, real-time messaging backbone offered by converged Oracle Database that allows you to build an enterprise-class event-driven architectures.']}),"\n",(0,s.jsx)(t.p,{children:"Access to the real-time broker, producer, and consumer metrics in a single dashboard and receiving alerts for issues allows teams to understand the state of their system."}),"\n",(0,s.jsx)(t.p,{children:"The exporter includes a set of metrics for monitoring TxEventQ and a pre-built Grafana dashboard."}),"\n",(0,s.jsxs)(t.blockquote,{children:["\n",(0,s.jsx)(t.p,{children:"Note: The metrics are written for Oracle Database 21c or later."}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"how-to-create-some-traffic-with-plsql",children:"How to create some traffic with PL/SQL"}),"\n",(0,s.jsx)(t.p,{children:"If you need to create a topic to monitor, you can use these statements to create and start a topic, and create a subscriber:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-sql",children:"declare\n subscriber sys.aq$_agent;\nbegin\n -- create the topic\n dbms_aqadm.create_transactional_event_queue(\n queue_name => 'my_topic',\n multiple_consumers => true -- true makes a pub/sub topic\n );\n\n -- start the topic\n dbms_aqadm.start_queue(\n queue_name => 'my_topic'\n );\n\n -- create a subscriber\n dbms_aqadm.add_subscriber(\n queue_name => 'my_teq',\n subscriber => sys.aq$_agent(\n 'my_subscriber', -- the subscriber name\n null, -- address, only used for notifications\n 0 -- protocol\n ),\n rule => 'correlation = ''my_subscriber'''\n );\nend;\n"})}),"\n",(0,s.jsx)(t.p,{children:"You can produce a message with these commands:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-sql",children:"declare\n enqueue_options dbms_aq.enqueue_options_t;\n message_properties dbms_aq.message_properties_t;\n message_handle raw(16);\n message SYS.AQ$_JMS_TEXT_MESSAGE;\nbegin\n -- create the message payload\n message := SYS.AQ$_JMS_TEXT_MESSAGE.construct;\n message.set_text('{\"orderid\": 12345, \"username\": \"Jessica Smith\"}');\n\n -- set the consumer name\n message_properties.correlation := 'my_subscriber';\n\n -- enqueue the message\n dbms_aq.enqueue(\n queue_name => 'my_topic',\n enqueue_options => enqueue_options,\n message_properties => message_properties,\n payload => message,\n msgid => message_handle);\n\n -- commit the transaction\n commit;\nend;\n"})}),"\n",(0,s.jsx)(t.h3,{id:"how-to-create-some-traffic-with-java-spring-boot",children:"How to create some traffic with Java (Spring Boot)"}),"\n",(0,s.jsxs)(t.p,{children:["A simple load generator is provided in ",(0,s.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/docker-compose/txeventq-load",children:"this directory"})," which you can use to create some traffic so you can experiment with the sample dashboard."]}),"\n",(0,s.jsxs)(t.p,{children:["To run the sample, first update ",(0,s.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/docker-compose/txeventq-load/src/main/resources/application.yaml",children:"application.yaml"})," with the correct IP address for your database, then start the application as follows:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"mvn spring-boot:run\n"})}),"\n",(0,s.jsx)(t.p,{children:"The application will create ten queues names TOPIC_0 through TOPIC_9 and randomly produce and consume messages on those queues. The example dashboard shown below was monitoring traffic produced using this application."}),"\n",(0,s.jsx)(t.h3,{id:"metrics-definitions",children:"Metrics definitions"}),"\n",(0,s.jsxs)(t.p,{children:["The metrics definitions are provided in ",(0,s.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/custom-metrics-example/txeventq-metrics.toml",children:"this file"}),". You need to provide this file to the exporter, e.g., by adding it to your container image, or creating a Kubernetes config map containing the file and mounting that config map as a volume in your deployment. You also need to set the ",(0,s.jsx)(t.code,{children:"CUSTOM_METRICS"})," environment variable to the location of this file."]}),"\n",(0,s.jsx)(t.h3,{id:"additional-database-permissions",children:"Additional database permissions"}),"\n",(0,s.jsx)(t.p,{children:'The database user that the exporter uses to connect to the database will also need additional permissions, which can be granted with these statements. This example assumes the exporter connects with the username "exporter":'}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-sql",children:"grant execute on dbms_aq to exporter;\ngrant execute on dbms_aqadm to exporter;\ngrant execute on dbms_aqin to exporter;\ngrant execute on dbms_aqjms_internal to exporter;\ngrant execute on dbms_teqk to exporter;\ngrant execute on DBMS_RESOURCE_MANAGER to exporter;\ngrant select_catalog_role to exporter;\ngrant select on sys.aq$_queue_shards to exporter;\ngrant select on user_queue_partition_assignment_table to exporter;\n"})}),"\n",(0,s.jsx)(t.h3,{id:"grafana-dashboard",children:"Grafana dashboard"}),"\n",(0,s.jsxs)(t.p,{children:["A Grafana dashboard for Transactional Event Queues is provided ",(0,s.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/docker-compose/grafana/dashboards/txeventq.json",children:"in this file"}),". This can be imported into your Grafana environment. Choose the Prometheus datasource that is collecting metrics from the exporter."]}),"\n",(0,s.jsxs)(t.blockquote,{children:["\n",(0,s.jsx)(t.p,{children:"Note: You may not see any activity on the dashboard unless there are clients producing and consuming messages from topics."}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"The dashboard will look like this:"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"Oracle Database Dashboard",src:n(7242).A+"",width:"1893",height:"1487"})})]})}function m(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},7242:(e,t,n)=>{n.d(t,{A:()=>a});const a=n.p+"assets/images/txeventq-dashboard-v2-880ceab000b0e8c267e0eedf322350d4.png"},8453:(e,t,n)=>{n.d(t,{R:()=>r,x:()=>i});var a=n(6540);const s={},o=a.createContext(s);function r(e){const t=a.useContext(o);return a.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),a.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/21b27731.f20c3f00.js b/docs/assets/js/21b27731.f20c3f00.js new file mode 100644 index 00000000..66fbfe5b --- /dev/null +++ b/docs/assets/js/21b27731.f20c3f00.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[3798],{3791:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>r,metadata:()=>a,toc:()=>d});const a=JSON.parse('{"id":"advanced/txeventq","title":"Monitoring TxEventQ","description":"Oracle Transactional Event Queues (\\"TxEventQ\\") is a fault-tolerant, scalable, real-time messaging backbone offered by converged Oracle Database that allows you to build an enterprise-class event-driven architectures.","source":"@site/docs/advanced/txeventq.md","sourceDirName":"advanced","slug":"/advanced/txeventq","permalink":"/oracle-db-appdev-monitoring/docs/next/advanced/txeventq","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/docs/advanced/txeventq.md","tags":[],"version":"current","sidebarPosition":2,"frontMatter":{"title":"Monitoring TxEventQ","sidebar_position":2},"sidebar":"tutorialSidebar","previous":{"title":"Configuring the Go Runtime","permalink":"/oracle-db-appdev-monitoring/docs/next/advanced/go-runtime"},"next":{"title":"Development","permalink":"/oracle-db-appdev-monitoring/docs/next/advanced/development"}}');var s=n(4848),o=n(8453);const r={title:"Monitoring TxEventQ",sidebar_position:2},i="Monitoring Transactional Event Queues",c={},d=[{value:"How to create some traffic with PL/SQL",id:"how-to-create-some-traffic-with-plsql",level:3},{value:"How to create some traffic with Java (Spring Boot)",id:"how-to-create-some-traffic-with-java-spring-boot",level:3},{value:"Metrics definitions",id:"metrics-definitions",level:3},{value:"Additional database permissions",id:"additional-database-permissions",level:3},{value:"Grafana dashboard",id:"grafana-dashboard",level:3}];function l(e){const t={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h3:"h3",header:"header",img:"img",p:"p",pre:"pre",...(0,o.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"monitoring-transactional-event-queues",children:"Monitoring Transactional Event Queues"})}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.a,{href:"https://docs.oracle.com/en/database/oracle/oracle-database/23/adque/index.html",children:"Oracle Transactional Event Queues"}),' ("TxEventQ") is a fault-tolerant, scalable, real-time messaging backbone offered by converged Oracle Database that allows you to build an enterprise-class event-driven architectures.']}),"\n",(0,s.jsx)(t.p,{children:"Access to the real-time broker, producer, and consumer metrics in a single dashboard and receiving alerts for issues allows teams to understand the state of their system."}),"\n",(0,s.jsx)(t.p,{children:"The exporter includes a set of metrics for monitoring TxEventQ and a pre-built Grafana dashboard."}),"\n",(0,s.jsxs)(t.blockquote,{children:["\n",(0,s.jsx)(t.p,{children:"Note: The metrics are written for Oracle Database 21c or later."}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"how-to-create-some-traffic-with-plsql",children:"How to create some traffic with PL/SQL"}),"\n",(0,s.jsx)(t.p,{children:"If you need to create a topic to monitor, you can use these statements to create and start a topic, and create a subscriber:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-sql",children:"declare\n subscriber sys.aq$_agent;\nbegin\n -- create the topic\n dbms_aqadm.create_transactional_event_queue(\n queue_name => 'my_topic',\n multiple_consumers => true -- true makes a pub/sub topic\n );\n\n -- start the topic\n dbms_aqadm.start_queue(\n queue_name => 'my_topic'\n );\n\n -- create a subscriber\n dbms_aqadm.add_subscriber(\n queue_name => 'my_teq',\n subscriber => sys.aq$_agent(\n 'my_subscriber', -- the subscriber name\n null, -- address, only used for notifications\n 0 -- protocol\n ),\n rule => 'correlation = ''my_subscriber'''\n );\nend;\n"})}),"\n",(0,s.jsx)(t.p,{children:"You can produce a message with these commands:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-sql",children:"declare\n enqueue_options dbms_aq.enqueue_options_t;\n message_properties dbms_aq.message_properties_t;\n message_handle raw(16);\n message SYS.AQ$_JMS_TEXT_MESSAGE;\nbegin\n -- create the message payload\n message := SYS.AQ$_JMS_TEXT_MESSAGE.construct;\n message.set_text('{\"orderid\": 12345, \"username\": \"Jessica Smith\"}');\n\n -- set the consumer name\n message_properties.correlation := 'my_subscriber';\n\n -- enqueue the message\n dbms_aq.enqueue(\n queue_name => 'my_topic',\n enqueue_options => enqueue_options,\n message_properties => message_properties,\n payload => message,\n msgid => message_handle);\n\n -- commit the transaction\n commit;\nend;\n"})}),"\n",(0,s.jsx)(t.h3,{id:"how-to-create-some-traffic-with-java-spring-boot",children:"How to create some traffic with Java (Spring Boot)"}),"\n",(0,s.jsxs)(t.p,{children:["A simple load generator is provided in ",(0,s.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/docker-compose/txeventq-load",children:"this directory"})," which you can use to create some traffic so you can experiment with the sample dashboard."]}),"\n",(0,s.jsxs)(t.p,{children:["To run the sample, first update ",(0,s.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/docker-compose/txeventq-load/src/main/resources/application.yaml",children:"application.yaml"})," with the correct IP address for your database, then start the application as follows:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"mvn spring-boot:run\n"})}),"\n",(0,s.jsx)(t.p,{children:"The application will create ten queues names TOPIC_0 through TOPIC_9 and randomly produce and consume messages on those queues. The example dashboard shown below was monitoring traffic produced using this application."}),"\n",(0,s.jsx)(t.h3,{id:"metrics-definitions",children:"Metrics definitions"}),"\n",(0,s.jsxs)(t.p,{children:["The metrics definitions are provided in ",(0,s.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/custom-metrics-example/txeventq-metrics.toml",children:"this file"}),". You need to provide this file to the exporter, e.g., by adding it to your container image, or creating a Kubernetes config map containing the file and mounting that config map as a volume in your deployment. You also need to set the ",(0,s.jsx)(t.code,{children:"CUSTOM_METRICS"})," environment variable to the location of this file."]}),"\n",(0,s.jsx)(t.h3,{id:"additional-database-permissions",children:"Additional database permissions"}),"\n",(0,s.jsx)(t.p,{children:'The database user that the exporter uses to connect to the database will also need additional permissions, which can be granted with these statements. This example assumes the exporter connects with the username "exporter":'}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-sql",children:"grant execute on dbms_aq to exporter;\ngrant execute on dbms_aqadm to exporter;\ngrant execute on dbms_aqin to exporter;\ngrant execute on dbms_aqjms_internal to exporter;\ngrant execute on dbms_teqk to exporter;\ngrant execute on DBMS_RESOURCE_MANAGER to exporter;\ngrant select_catalog_role to exporter;\ngrant select on sys.aq$_queue_shards to exporter;\ngrant select on user_queue_partition_assignment_table to exporter;\n"})}),"\n",(0,s.jsx)(t.h3,{id:"grafana-dashboard",children:"Grafana dashboard"}),"\n",(0,s.jsxs)(t.p,{children:["A Grafana dashboard for Transactional Event Queues is provided ",(0,s.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/docker-compose/grafana/dashboards/txeventq.json",children:"in this file"}),". This can be imported into your Grafana environment. Choose the Prometheus datasource that is collecting metrics from the exporter."]}),"\n",(0,s.jsxs)(t.blockquote,{children:["\n",(0,s.jsx)(t.p,{children:"Note: You may not see any activity on the dashboard unless there are clients producing and consuming messages from topics."}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"The dashboard will look like this:"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"Oracle Database Dashboard",src:n(7242).A+"",width:"1893",height:"1487"})})]})}function m(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},7242:(e,t,n)=>{n.d(t,{A:()=>a});const a=n.p+"assets/images/txeventq-dashboard-v2-880ceab000b0e8c267e0eedf322350d4.png"},8453:(e,t,n)=>{n.d(t,{R:()=>r,x:()=>i});var a=n(6540);const s={},o=a.createContext(s);function r(e){const t=a.useContext(o);return a.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),a.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/2237.5e84b40a.js b/docs/assets/js/2237.5e84b40a.js new file mode 100644 index 00000000..c24082b6 --- /dev/null +++ b/docs/assets/js/2237.5e84b40a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[2237],{2237:(e,t,i)=>{i.r(t),i.d(t,{default:()=>h});i(6540);var n=i(1312),s=i(5500),o=i(1656),r=i(3363),a=i(4848);function h(){const e=(0,n.T)({id:"theme.NotFound.title",message:"Page Not Found"});return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(s.be,{title:e}),(0,a.jsx)(o.A,{children:(0,a.jsx)(r.A,{})})]})}},3363:(e,t,i)=>{i.d(t,{A:()=>a});i(6540);var n=i(4164),s=i(1312),o=i(1107),r=i(4848);function a({className:e}){return(0,r.jsx)("main",{className:(0,n.A)("container margin-vert--xl",e),children:(0,r.jsx)("div",{className:"row",children:(0,r.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,r.jsx)(o.A,{as:"h1",className:"hero__title",children:(0,r.jsx)(s.A,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,r.jsx)("p",{children:(0,r.jsx)(s.A,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,r.jsx)("p",{children:(0,r.jsx)(s.A,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})})]})})})}}}]); \ No newline at end of file diff --git a/docs/assets/js/237.d496122d.js b/docs/assets/js/237.d496122d.js deleted file mode 100644 index 4b99bbb5..00000000 --- a/docs/assets/js/237.d496122d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[237],{2237:(e,t,i)=>{i.r(t),i.d(t,{default:()=>h});i(6540);var n=i(1312),s=i(5500),o=i(1656),r=i(3363),a=i(4848);function h(){const e=(0,n.T)({id:"theme.NotFound.title",message:"Page Not Found"});return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(s.be,{title:e}),(0,a.jsx)(o.A,{children:(0,a.jsx)(r.A,{})})]})}},3363:(e,t,i)=>{i.d(t,{A:()=>a});i(6540);var n=i(4164),s=i(1312),o=i(1107),r=i(4848);function a({className:e}){return(0,r.jsx)("main",{className:(0,n.A)("container margin-vert--xl",e),children:(0,r.jsx)("div",{className:"row",children:(0,r.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,r.jsx)(o.A,{as:"h1",className:"hero__title",children:(0,r.jsx)(s.A,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,r.jsx)("p",{children:(0,r.jsx)(s.A,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,r.jsx)("p",{children:(0,r.jsx)(s.A,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})})]})})})}}}]); \ No newline at end of file diff --git a/docs/assets/js/2a1428c8.81093459.js b/docs/assets/js/2a1428c8.81093459.js deleted file mode 100644 index 978e0ffb..00000000 --- a/docs/assets/js/2a1428c8.81093459.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[504],{9132:e=>{e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Releases","description":"Information on the exporter releases, changelog, and roadmap.","slug":"/category/releases","permalink":"/oracle-db-appdev-monitoring/docs/category/releases","sidebar":"tutorialSidebar","navigation":{"previous":{"title":"Development","permalink":"/oracle-db-appdev-monitoring/docs/advanced/development"},"next":{"title":"Roadmap","permalink":"/oracle-db-appdev-monitoring/docs/releases/roadmap"}}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/2a1428c8.aeb7d0d6.js b/docs/assets/js/2a1428c8.aeb7d0d6.js new file mode 100644 index 00000000..abaa5ad6 --- /dev/null +++ b/docs/assets/js/2a1428c8.aeb7d0d6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[7504],{9132:e=>{e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Releases","description":"Information on the exporter releases, changelog, and roadmap.","slug":"/category/releases","permalink":"/oracle-db-appdev-monitoring/docs/category/releases","sidebar":"tutorialSidebar","navigation":{"previous":{"title":"Development","permalink":"/oracle-db-appdev-monitoring/docs/advanced/development"},"next":{"title":"Roadmap","permalink":"/oracle-db-appdev-monitoring/docs/releases/roadmap"}}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/2c91c66b.4209897b.js b/docs/assets/js/2c91c66b.4209897b.js deleted file mode 100644 index 6ecbbedd..00000000 --- a/docs/assets/js/2c91c66b.4209897b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[747],{2162:(a,e,t)=>{t.d(e,{A:()=>r});const r=t.p+"assets/images/oracledb-dashboard-cac23ad464ac40e39bf6348f688daa1d.png"},5747:(a,e,t)=>{t.r(e),t.d(e,{assets:()=>d,contentTitle:()=>i,default:()=>l,frontMatter:()=>o,metadata:()=>r,toc:()=>c});const r=JSON.parse('{"id":"getting-started/grafana-dashboards","title":"Grafana Dashboards","description":"Sample Grafana dashboards are included with the exporter.","source":"@site/docs/getting-started/grafana-dashboards.md","sourceDirName":"getting-started","slug":"/getting-started/grafana-dashboards","permalink":"/oracle-db-appdev-monitoring/docs/getting-started/grafana-dashboards","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/docs/getting-started/grafana-dashboards.md","tags":[],"version":"current","sidebarPosition":4,"frontMatter":{"title":"Grafana Dashboards","sidebar_position":4},"sidebar":"tutorialSidebar","previous":{"title":"Kubernetes","permalink":"/oracle-db-appdev-monitoring/docs/getting-started/kubernetes"},"next":{"title":"Configuration","permalink":"/oracle-db-appdev-monitoring/docs/category/configuration"}}');var s=t(4848),n=t(8453);const o={title:"Grafana Dashboards",sidebar_position:4},i="Grafana Dashboards",d={},c=[];function h(a){const e={a:"a",h1:"h1",header:"header",img:"img",p:"p",...(0,n.R)(),...a.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(e.header,{children:(0,s.jsx)(e.h1,{id:"grafana-dashboards",children:"Grafana Dashboards"})}),"\n",(0,s.jsx)(e.p,{children:"Sample Grafana dashboards are included with the exporter."}),"\n",(0,s.jsxs)(e.p,{children:["A sample Grafana dashboard definition is provided ",(0,s.jsx)(e.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/docker-compose/grafana/dashboards",children:"in this directory"}),". You can import these dashboards into your Grafana instance, and set it to use the Prometheus datasource that you have defined for the Prometheus instance that is collecting metrics from the exporter."]}),"\n",(0,s.jsx)(e.p,{children:"The dashboard shows some basic information, as shown below:"}),"\n",(0,s.jsx)(e.p,{children:(0,s.jsx)(e.img,{alt:"Oracle Database Dashboard",src:t(2162).A+"",width:"1904",height:"1203"})})]})}function l(a={}){const{wrapper:e}={...(0,n.R)(),...a.components};return e?(0,s.jsx)(e,{...a,children:(0,s.jsx)(h,{...a})}):h(a)}},8453:(a,e,t)=>{t.d(e,{R:()=>o,x:()=>i});var r=t(6540);const s={},n=r.createContext(s);function o(a){const e=r.useContext(n);return r.useMemo(function(){return"function"==typeof a?a(e):{...e,...a}},[e,a])}function i(a){let e;return e=a.disableParentContext?"function"==typeof a.components?a.components(s):a.components||s:o(a.components),r.createElement(n.Provider,{value:e},a.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/2c91c66b.a471022d.js b/docs/assets/js/2c91c66b.a471022d.js new file mode 100644 index 00000000..cd41a69b --- /dev/null +++ b/docs/assets/js/2c91c66b.a471022d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[8747],{2162:(e,a,t)=>{t.d(a,{A:()=>r});const r=t.p+"assets/images/oracledb-dashboard-cac23ad464ac40e39bf6348f688daa1d.png"},5747:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>d,contentTitle:()=>i,default:()=>l,frontMatter:()=>o,metadata:()=>r,toc:()=>c});const r=JSON.parse('{"id":"getting-started/grafana-dashboards","title":"Grafana Dashboards","description":"Sample Grafana dashboards are included with the exporter.","source":"@site/docs/getting-started/grafana-dashboards.md","sourceDirName":"getting-started","slug":"/getting-started/grafana-dashboards","permalink":"/oracle-db-appdev-monitoring/docs/next/getting-started/grafana-dashboards","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/docs/getting-started/grafana-dashboards.md","tags":[],"version":"current","sidebarPosition":4,"frontMatter":{"title":"Grafana Dashboards","sidebar_position":4},"sidebar":"tutorialSidebar","previous":{"title":"Kubernetes","permalink":"/oracle-db-appdev-monitoring/docs/next/getting-started/kubernetes"},"next":{"title":"Configuration","permalink":"/oracle-db-appdev-monitoring/docs/next/category/configuration"}}');var n=t(4848),s=t(8453);const o={title:"Grafana Dashboards",sidebar_position:4},i="Grafana Dashboards",d={},c=[];function h(e){const a={a:"a",h1:"h1",header:"header",img:"img",p:"p",...(0,s.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.header,{children:(0,n.jsx)(a.h1,{id:"grafana-dashboards",children:"Grafana Dashboards"})}),"\n",(0,n.jsx)(a.p,{children:"Sample Grafana dashboards are included with the exporter."}),"\n",(0,n.jsxs)(a.p,{children:["A sample Grafana dashboard definition is provided ",(0,n.jsx)(a.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/docker-compose/grafana/dashboards",children:"in this directory"}),". You can import these dashboards into your Grafana instance, and set it to use the Prometheus datasource that you have defined for the Prometheus instance that is collecting metrics from the exporter."]}),"\n",(0,n.jsx)(a.p,{children:"The dashboard shows some basic information, as shown below:"}),"\n",(0,n.jsx)(a.p,{children:(0,n.jsx)(a.img,{alt:"Oracle Database Dashboard",src:t(2162).A+"",width:"1904",height:"1203"})})]})}function l(e={}){const{wrapper:a}={...(0,s.R)(),...e.components};return a?(0,n.jsx)(a,{...e,children:(0,n.jsx)(h,{...e})}):h(e)}},8453:(e,a,t)=>{t.d(a,{R:()=>o,x:()=>i});var r=t(6540);const n={},s=r.createContext(n);function o(e){const a=r.useContext(s);return r.useMemo(function(){return"function"==typeof e?e(a):{...a,...e}},[a,e])}function i(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:o(e.components),r.createElement(s.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/2d404bd3.073e06e4.js b/docs/assets/js/2d404bd3.073e06e4.js new file mode 100644 index 00000000..0a7ddcac --- /dev/null +++ b/docs/assets/js/2d404bd3.073e06e4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[6596],{8278:e=>{e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Getting Started","description":"Learn the most important Oracle Database Metrics Exporter concepts.","slug":"/category/getting-started","permalink":"/oracle-db-appdev-monitoring/docs/category/getting-started","sidebar":"tutorialSidebar","navigation":{"previous":{"title":"OpenTelemetry Metrics for Oracle Database","permalink":"/oracle-db-appdev-monitoring/docs/intro"},"next":{"title":"Installation","permalink":"/oracle-db-appdev-monitoring/docs/getting-started/basics"}}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/2d404bd3.778d36b4.js b/docs/assets/js/2d404bd3.778d36b4.js deleted file mode 100644 index f4501d2c..00000000 --- a/docs/assets/js/2d404bd3.778d36b4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[596],{8278:e=>{e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Getting Started","description":"Learn the most important Oracle Database Metrics Exporter concepts.","slug":"/category/getting-started","permalink":"/oracle-db-appdev-monitoring/docs/category/getting-started","sidebar":"tutorialSidebar","navigation":{"previous":{"title":"OpenTelemetry Metrics for Oracle Database","permalink":"/oracle-db-appdev-monitoring/docs/intro"},"next":{"title":"Installation","permalink":"/oracle-db-appdev-monitoring/docs/getting-started/basics"}}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/36b77772.a0a96e13.js b/docs/assets/js/36b77772.a0a96e13.js new file mode 100644 index 00000000..41e3c6d0 --- /dev/null +++ b/docs/assets/js/36b77772.a0a96e13.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[1604],{6651:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>a,contentTitle:()=>s,default:()=>g,frontMatter:()=>l,metadata:()=>n,toc:()=>d});const n=JSON.parse('{"id":"configuration/alert-logs","title":"Alert Logs","description":"Collect export alert logs with a log ingestion tool.","source":"@site/versioned_docs/version-2.0.3/configuration/alert-logs.md","sourceDirName":"configuration","slug":"/configuration/alert-logs","permalink":"/oracle-db-appdev-monitoring/docs/configuration/alert-logs","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/versioned_docs/version-2.0.3/configuration/alert-logs.md","tags":[],"version":"2.0.3","sidebarPosition":5,"frontMatter":{"title":"Alert Logs","sidebar_position":5},"sidebar":"tutorialSidebar","previous":{"title":"Oracle Wallet (mTLS)","permalink":"/oracle-db-appdev-monitoring/docs/configuration/oracle-wallet"},"next":{"title":"OCI Vault","permalink":"/oracle-db-appdev-monitoring/docs/configuration/oci-vault"}}');var r=o(4848),i=o(8453);const l={title:"Alert Logs",sidebar_position:5},s="Alert logs",a={},d=[];function c(e){const t={code:"code",h1:"h1",header:"header",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"alert-logs",children:"Alert logs"})}),"\n",(0,r.jsx)(t.p,{children:"Collect export alert logs with a log ingestion tool."}),"\n",(0,r.jsx)(t.p,{children:"The exporter exports alert log records as a JSON file suitable for collection by a log ingestion tool like Promtail or FluentBit."}),"\n",(0,r.jsx)(t.p,{children:"Alert logging is configured with the following parameters in the exporter config file:"}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Parameter"}),(0,r.jsx)(t.th,{children:"Description"}),(0,r.jsx)(t.th,{children:"Default"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"log.destination"}),(0,r.jsx)(t.td,{children:"Log file path"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"/log/alert.log"})})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"log.interval"}),(0,r.jsx)(t.td,{children:"Interval to log records"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"15s"})})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"log.disable"}),(0,r.jsxs)(t.td,{children:["Disable logging if set to ",(0,r.jsx)(t.code,{children:"1"})]}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"0"})})]})]})]}),"\n",(0,r.jsx)(t.p,{children:"Example alert log YAML configuration:"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-yaml",children:"log:\n # Path of log file\n destination: /opt/exporter/alert.log\n # Interval of log updates\n interval: 15s\n ## Set disable to 1 to disable logging\n # disable: 0\n"})})]})}function g(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},8453:(e,t,o)=>{o.d(t,{R:()=>l,x:()=>s});var n=o(6540);const r={},i=n.createContext(r);function l(e){const t=n.useContext(i);return n.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),n.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/3740dcc7.a3ac8f6e.js b/docs/assets/js/3740dcc7.a3ac8f6e.js new file mode 100644 index 00000000..607f677a --- /dev/null +++ b/docs/assets/js/3740dcc7.a3ac8f6e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[6948],{9844:e=>{e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Getting Started","description":"Learn the most important Oracle Database Metrics Exporter concepts.","slug":"/category/getting-started","permalink":"/oracle-db-appdev-monitoring/docs/next/category/getting-started","sidebar":"tutorialSidebar","navigation":{"previous":{"title":"OpenTelemetry Metrics for Oracle Database","permalink":"/oracle-db-appdev-monitoring/docs/next/intro"},"next":{"title":"Installation","permalink":"/oracle-db-appdev-monitoring/docs/next/getting-started/basics"}}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/384c9e20.1ed457f7.js b/docs/assets/js/384c9e20.1ed457f7.js deleted file mode 100644 index c1587799..00000000 --- a/docs/assets/js/384c9e20.1ed457f7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[405],{7655:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>p,frontMatter:()=>i,metadata:()=>r,toc:()=>d});const r=JSON.parse('{"id":"releases/roadmap","title":"Roadmap","description":"Planned and upcoming features for the exporter.","source":"@site/docs/releases/roadmap.md","sourceDirName":"releases","slug":"/releases/roadmap","permalink":"/oracle-db-appdev-monitoring/docs/releases/roadmap","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/docs/releases/roadmap.md","tags":[],"version":"current","sidebarPosition":1,"frontMatter":{"title":"Roadmap","sidebar_position":1},"sidebar":"tutorialSidebar","previous":{"title":"Releases","permalink":"/oracle-db-appdev-monitoring/docs/category/releases"},"next":{"title":"Changelog","permalink":"/oracle-db-appdev-monitoring/docs/releases/changelog"}}');var o=n(4848),a=n(8453);const i={title:"Roadmap",sidebar_position:1},s="Exporter Roadmap",l={},d=[];function c(e){const t={h1:"h1",header:"header",li:"li",p:"p",ul:"ul",...(0,a.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"exporter-roadmap",children:"Exporter Roadmap"})}),"\n",(0,o.jsx)(t.p,{children:"Planned and upcoming features for the exporter."}),"\n",(0,o.jsx)(t.p,{children:"We welcome input on community-driven features you'd like to see supported. Please open an issue in this repository with your suggestions."}),"\n",(0,o.jsx)(t.p,{children:"Currently, we plan to address the following key features:"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsx)(t.li,{children:"Provide default Oracle Exadata metrics"}),"\n",(0,o.jsx)(t.li,{children:"Implement connection storm protection: prevent the exporter from repeatedly connecting when the credentials fail, to prevent a storm of connections causing accounts to be locked across a large number of databases"}),"\n",(0,o.jsx)(t.li,{children:"Provide the option to have the Oracle client outside of the container image, e.g., on a shared volume,"}),"\n",(0,o.jsx)(t.li,{children:"Implement the ability to update the configuration dynamically, i.e., without a restart"}),"\n",(0,o.jsx)(t.li,{children:"Implement support for tracing within the database, e.g., using an execution context ID provide by an external caller"}),"\n",(0,o.jsx)(t.li,{children:"Provide additional pre-built Grafana dashboards,"}),"\n",(0,o.jsx)(t.li,{children:"Integration with Spring Observability, e.g., Micrometer"}),"\n",(0,o.jsx)(t.li,{children:"Provide additional documentation and samples"}),"\n"]})]})}function p(e={}){const{wrapper:t}={...(0,a.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>i,x:()=>s});var r=n(6540);const o={},a=r.createContext(o);function i(e){const t=r.useContext(a);return r.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),r.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/384c9e20.830f0bbb.js b/docs/assets/js/384c9e20.830f0bbb.js new file mode 100644 index 00000000..e04a4372 --- /dev/null +++ b/docs/assets/js/384c9e20.830f0bbb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[405],{7655:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>p,frontMatter:()=>i,metadata:()=>r,toc:()=>d});const r=JSON.parse('{"id":"releases/roadmap","title":"Roadmap","description":"Planned and upcoming features for the exporter.","source":"@site/docs/releases/roadmap.md","sourceDirName":"releases","slug":"/releases/roadmap","permalink":"/oracle-db-appdev-monitoring/docs/next/releases/roadmap","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/docs/releases/roadmap.md","tags":[],"version":"current","sidebarPosition":1,"frontMatter":{"title":"Roadmap","sidebar_position":1},"sidebar":"tutorialSidebar","previous":{"title":"Releases","permalink":"/oracle-db-appdev-monitoring/docs/next/category/releases"},"next":{"title":"Changelog","permalink":"/oracle-db-appdev-monitoring/docs/next/releases/changelog"}}');var o=n(4848),a=n(8453);const i={title:"Roadmap",sidebar_position:1},s="Exporter Roadmap",l={},d=[];function c(e){const t={h1:"h1",header:"header",li:"li",p:"p",ul:"ul",...(0,a.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"exporter-roadmap",children:"Exporter Roadmap"})}),"\n",(0,o.jsx)(t.p,{children:"Planned and upcoming features for the exporter."}),"\n",(0,o.jsx)(t.p,{children:"We welcome input on community-driven features you'd like to see supported. Please open an issue in this repository with your suggestions."}),"\n",(0,o.jsx)(t.p,{children:"Currently, we plan to address the following key features:"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsx)(t.li,{children:"Provide default Oracle Exadata metrics"}),"\n",(0,o.jsx)(t.li,{children:"Implement connection storm protection: prevent the exporter from repeatedly connecting when the credentials fail, to prevent a storm of connections causing accounts to be locked across a large number of databases"}),"\n",(0,o.jsx)(t.li,{children:"Provide the option to have the Oracle client outside of the container image, e.g., on a shared volume,"}),"\n",(0,o.jsx)(t.li,{children:"Implement the ability to update the configuration dynamically, i.e., without a restart"}),"\n",(0,o.jsx)(t.li,{children:"Implement support for tracing within the database, e.g., using an execution context ID provide by an external caller"}),"\n",(0,o.jsx)(t.li,{children:"Provide additional pre-built Grafana dashboards,"}),"\n",(0,o.jsx)(t.li,{children:"Integration with Spring Observability, e.g., Micrometer"}),"\n",(0,o.jsx)(t.li,{children:"Provide additional documentation and samples"}),"\n"]})]})}function p(e={}){const{wrapper:t}={...(0,a.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>i,x:()=>s});var r=n(6540);const o={},a=r.createContext(o);function i(e){const t=r.useContext(a);return r.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),r.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/393be207.6daba6a3.js b/docs/assets/js/393be207.6daba6a3.js new file mode 100644 index 00000000..7809a7d9 --- /dev/null +++ b/docs/assets/js/393be207.6daba6a3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[4134],{591:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>p,default:()=>l,frontMatter:()=>s,metadata:()=>a,toc:()=>d});const a=JSON.parse('{"type":"mdx","permalink":"/oracle-db-appdev-monitoring/markdown-page","source":"@site/src/pages/markdown-page.md","title":"Markdown page example","description":"You don\'t need React to write simple standalone pages.","frontMatter":{"title":"Markdown page example"},"unlisted":false}');var o=t(4848),r=t(8453);const s={title:"Markdown page example"},p="Markdown page example",c={},d=[];function i(e){const n={h1:"h1",header:"header",p:"p",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.header,{children:(0,o.jsx)(n.h1,{id:"markdown-page-example",children:"Markdown page example"})}),"\n",(0,o.jsx)(n.p,{children:"You don't need React to write simple standalone pages."})]})}function l(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(i,{...e})}):i(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>p});var a=t(6540);const o={},r=a.createContext(o);function s(e){const n=a.useContext(r);return a.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function p(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),a.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/393be207.fc1e167d.js b/docs/assets/js/393be207.fc1e167d.js deleted file mode 100644 index dc5cc573..00000000 --- a/docs/assets/js/393be207.fc1e167d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[134],{591:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>p,default:()=>l,frontMatter:()=>s,metadata:()=>a,toc:()=>d});const a=JSON.parse('{"type":"mdx","permalink":"/oracle-db-appdev-monitoring/markdown-page","source":"@site/src/pages/markdown-page.md","title":"Markdown page example","description":"You don\'t need React to write simple standalone pages.","frontMatter":{"title":"Markdown page example"},"unlisted":false}');var o=t(4848),r=t(8453);const s={title:"Markdown page example"},p="Markdown page example",c={},d=[];function i(e){const n={h1:"h1",header:"header",p:"p",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.header,{children:(0,o.jsx)(n.h1,{id:"markdown-page-example",children:"Markdown page example"})}),"\n",(0,o.jsx)(n.p,{children:"You don't need React to write simple standalone pages."})]})}function l(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(i,{...e})}):i(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>p});var a=t(6540);const o={},r=a.createContext(o);function s(e){const n=a.useContext(r);return a.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function p(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),a.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/3c57bc2c.e119104c.js b/docs/assets/js/3c57bc2c.e119104c.js new file mode 100644 index 00000000..c965ba40 --- /dev/null +++ b/docs/assets/js/3c57bc2c.e119104c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[529],{2284:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>s,metadata:()=>o,toc:()=>c});const o=JSON.parse('{"id":"getting-started/basics","title":"Installation","description":"In this section you will find information on running the exporter.","source":"@site/versioned_docs/version-2.0.3/getting-started/basics.md","sourceDirName":"getting-started","slug":"/getting-started/basics","permalink":"/oracle-db-appdev-monitoring/docs/getting-started/basics","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/versioned_docs/version-2.0.3/getting-started/basics.md","tags":[],"version":"2.0.3","sidebarPosition":1,"frontMatter":{"title":"Installation","sidebar_position":1},"sidebar":"tutorialSidebar","previous":{"title":"Getting Started","permalink":"/oracle-db-appdev-monitoring/docs/category/getting-started"},"next":{"title":"Default Metrics","permalink":"/oracle-db-appdev-monitoring/docs/getting-started/default-metrics"}}');var a=t(4848),i=t(8453);const s={title:"Installation",sidebar_position:1},r="Installation",l={},c=[{value:"Docker, Podman, etc",id:"docker-podman-etc",level:2},{value:"Oracle Database Free",id:"oracle-database-free",level:3},{value:"Exporter",id:"exporter",level:3},{value:"Simple connection",id:"simple-connection",level:3},{value:"Standalone Binary",id:"standalone-binary",level:2},{value:"Docker Compose",id:"docker-compose",level:3}];function d(e){const n={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.header,{children:(0,a.jsx)(n.h1,{id:"installation",children:"Installation"})}),"\n",(0,a.jsx)(n.p,{children:"In this section you will find information on running the exporter."}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["In a container runtime like ",(0,a.jsx)(n.a,{href:"#docker-podman-etc",children:"Docker, Podman, etc"})]}),"\n",(0,a.jsxs)(n.li,{children:["In a test/demo environment using ",(0,a.jsx)(n.a,{href:"#docker-compose",children:"Docker Compose"})]}),"\n",(0,a.jsxs)(n.li,{children:["In ",(0,a.jsx)(n.a,{href:"/oracle-db-appdev-monitoring/docs/getting-started/kubernetes",children:"Kubernetes"})]}),"\n",(0,a.jsxs)(n.li,{children:["As a ",(0,a.jsx)(n.a,{href:"#standalone-binary",children:"standalone binary"})]}),"\n"]}),"\n",(0,a.jsx)(n.h2,{id:"docker-podman-etc",children:"Docker, Podman, etc"}),"\n",(0,a.jsxs)(n.p,{children:["You can run the exporter in a local container using a container image from ",(0,a.jsx)(n.a,{href:"https://container-registry.oracle.com",children:"Oracle Container Registry"}),'. The container image is available in the "observability-exporter" repository in the "Database" category. No authentication or license presentment/acceptance are required to pull this image from the registry.']}),"\n",(0,a.jsx)(n.h3,{id:"oracle-database-free",children:"Oracle Database Free"}),"\n",(0,a.jsxs)(n.p,{children:["If you need an Oracle Database to test the exporter, you can use this command to start up an instance of ",(0,a.jsx)(n.a,{href:"https://www.oracle.com/database/free/",children:"Oracle Database Free"})," which also requires no authentication or license presentment/acceptance to pull the image."]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"docker run --name free23ai \\\n -d \\\n -p 1521:1521 \\\n -e ORACLE_PASSWORD=Welcome12345 \\\n gvenzl/oracle-free:23.9-slim-faststart\n"})}),"\n",(0,a.jsx)(n.p,{children:'This will pull the image and start up the database with a listener on port 1521. It will also create a pluggable database (a database container) called "FREEPDB1" and will set the admin passwords to the password you specified on this command.'}),"\n",(0,a.jsx)(n.p,{children:"You can tail the logs to see when the database is ready to use:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"docker logs -f free23ai\n\n(look for this message...)\n#########################\nDATABASE IS READY TO USE!\n#########################\n"})}),"\n",(0,a.jsx)(n.p,{children:'To obtain the IP address of the container, which you will need to connect to the database, use this command. Note: depending on your platform and container runtime, you may be able to access the database at "localhost":'}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'docker inspect free23ai | grep IPA\n "SecondaryIPAddresses": null,\n "IPAddress": "172.17.0.2",\n "IPAMConfig": null,\n "IPAddress": "172.17.0.2",\n'})}),"\n",(0,a.jsx)(n.h3,{id:"exporter",children:"Exporter"}),"\n",(0,a.jsx)(n.p,{children:"You need to give the exporter the connection details for the Oracle Database that you want it to run against. You can use a simple connection, or a wallet."}),"\n",(0,a.jsx)(n.h3,{id:"simple-connection",children:"Simple connection"}),"\n",(0,a.jsx)(n.p,{children:"For a simple connection, you will provide the details using these variables:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_USERNAME"})," is the database username, e.g., ",(0,a.jsx)(n.code,{children:"pdbadmin"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_PASSWORD"})," is the password for that user, e.g., ",(0,a.jsx)(n.code,{children:"Welcome12345"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_CONNECT_STRING"})," is the connection string, e.g., ",(0,a.jsx)(n.code,{children:"free23ai:1521/freepdb"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_ROLE"})," (Optional) can be set to ",(0,a.jsx)(n.code,{children:"SYSDBA"}),", ",(0,a.jsx)(n.code,{children:"SYSOPER"}),", ",(0,a.jsx)(n.code,{children:"SYSBACKUP"}),", ",(0,a.jsx)(n.code,{children:"SYSDG"}),", ",(0,a.jsx)(n.code,{children:"SYSKM"}),", ",(0,a.jsx)(n.code,{children:"SYSRAC"})," or ",(0,a.jsx)(n.code,{children:"SYSASM"})," if you want to connect with one of those roles, however Oracle recommends that you connect with the lowest possible privileges and roles necessary for the exporter to run."]}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:"To run the exporter in a container and expose the port, use a command like this, with the appropriate values for the environment variables:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"docker run -it --rm \\\n -e DB_USERNAME=pdbadmin \\\n -e DB_PASSWORD=Welcome12345 \\\n -e DB_CONNECT_STRING=free23ai:1521/freepdb \\\n -p 9161:9161 \\\n container-registry.oracle.com/database/observability-exporter:2.0.2\n"})}),"\n",(0,a.jsx)(n.h2,{id:"standalone-binary",children:"Standalone Binary"}),"\n",(0,a.jsxs)(n.p,{children:["Pre-compiled versions for Linux, ARM and Darwin 64-bit can be found under ",(0,a.jsx)(n.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/releases",children:"releases"}),"."]}),"\n",(0,a.jsxs)(n.p,{children:["In order to run, you'll need the ",(0,a.jsx)(n.a,{href:"http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html",children:"Oracle Instant Client Basic"})," for your operating system. Only the basic version is required for the exporter."]}),"\n",(0,a.jsxs)(n.blockquote,{children:["\n",(0,a.jsxs)(n.p,{children:["NOTE: If you are running the Standalone binary on a Mac ARM platform you must set the variable ",(0,a.jsx)(n.code,{children:"DYLD_LIBRARY_PATH"})," to the location of where the instant client installed. For example ",(0,a.jsx)(n.code,{children:"export DYLD_LIBRARY_PATH=/lib/oracle/instantclient_23_3"}),"."]}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:"The following command line arguments (flags) can be passed to the exporter (the --help flag will show the table below)."}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'Usage of oracledb_exporter:\n --config.file="example-config.yaml"\n File with metrics exporter configuration. (env: CONFIG_FILE)\n --web.telemetry-path="/metrics"\n Path under which to expose metrics. (env: TELEMETRY_PATH)\n --default.metrics="default-metrics.toml"\n File with default metrics in a TOML file. (env: DEFAULT_METRICS)\n --custom.metrics="" Comma separated list of file(s) that contain various custom metrics in a TOML format. (env: CUSTOM_METRICS)\n --query.timeout=5 Query timeout (in seconds). (env: QUERY_TIMEOUT)\n --database.maxIdleConns=0 Number of maximum idle connections in the connection pool. (env: DATABASE_MAXIDLECONNS)\n --database.maxOpenConns=10\n Number of maximum open connections in the connection pool. (env: DATABASE_MAXOPENCONNS)\n --database.poolIncrement=-1\n Connection increment when the connection pool reaches max capacity. (env: DATABASE_POOLINCREMENT)\n --database.poolMaxConnections=-1\n Maximum number of connections in the connection pool. (env: DATABASE_POOLMAXCONNECTIONS)\n --database.poolMinConnections=-1\n Minimum number of connections in the connection pool. (env: DATABASE_POOLMINCONNECTIONS)\n --scrape.interval=0s Interval between each scrape. Default is to scrape on collect requests.\n --log.disable=0 Set to 1 to disable alert logs\n --log.interval=15s Interval between log updates (e.g. 5s).\n --log.destination="/log/alert.log"\n File to output the alert log to. (env: LOG_DESTINATION)\n --web.listen-address=:9161 ...\n Addresses on which to expose metrics and web interface. Repeatable for multiple addresses. Examples: `:9100` or `[::1]:9100` for http, `vsock://:9100` for vsock\n --web.config.file="" Path to configuration file that can enable TLS or authentication. See: https://github.com/prometheus/exporter-toolkit/blob/master/docs/web-configuration.md\n --log.level=info Only log messages with the given severity or above. One of: [debug, info, warn, error]\n --log.format=logfmt Output format of log messages. One of: [logfmt, json]\n --[no-]version Show application version.\n'})}),"\n",(0,a.jsx)(n.p,{children:"You may provide the connection details using these variables:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_USERNAME"})," is the database username, e.g., ",(0,a.jsx)(n.code,{children:"pdbadmin"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_PASSWORD"})," is the password for that user, e.g., ",(0,a.jsx)(n.code,{children:"Welcome12345"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_CONNECT_STRING"})," is the connection string, e.g., ",(0,a.jsx)(n.code,{children:"localhost:1521/freepdb1"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_ROLE"})," (Optional) can be set to ",(0,a.jsx)(n.code,{children:"SYSDBA"})," or ",(0,a.jsx)(n.code,{children:"SYSOPER"})," if you want to connect with one of those roles, however Oracle recommends that you connect with the lowest possible privileges and roles necessary for the exporter to run."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"ORACLE_HOME"})," is the location of the Oracle Instant Client, e.g., ",(0,a.jsx)(n.code,{children:"/lib/oracle/21/client64/lib"}),"."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"TNS_ADMIN"})," is the location of your (unzipped) wallet. The ",(0,a.jsx)(n.code,{children:"DIRECTORY"})," set in the ",(0,a.jsx)(n.code,{children:"sqlnet.ora"})," file must match the path that it will be mounted on inside the container."]}),"\n"]}),"\n",(0,a.jsxs)(n.p,{children:["The following example puts the logfile in the current location with the filename ",(0,a.jsx)(n.code,{children:"alert.log"})," and loads the default matrics file (",(0,a.jsx)(n.code,{children:"default-metrics,toml"}),") from the current location."]}),"\n",(0,a.jsxs)(n.p,{children:["If you prefer to provide configuration via a ",(0,a.jsx)(n.a,{href:"/oracle-db-appdev-monitoring/docs/configuration/config-file",children:"config file"}),", you may do so with the ",(0,a.jsx)(n.code,{children:"--config.file"}),' argument. The use of a config file over command line arguments is preferred. If a config file is not provided, the "default" database connection is managed by command line arguments.']}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"# Example Oracle Database Metrics Exporter Configuration file.\n# Environment variables of the form ${VAR_NAME} will be expanded.\n# If you include a config value that contains a '$' character, escape that '$' with another '$', e.g.,\n# \"$test$pwd\" => \"$$test$$pwd\"\n# Otherwise, the value will be expanded as an environment variable.\n\n# Example Oracle Database Metrics Exporter Configuration file.\n# Environment variables of the form ${VAR_NAME} will be expanded.\n\ndatabases:\n ## Path on which metrics will be served\n # metricsPath: /metrics\n ## Database connection information for the \"default\" database.\n default:\n ## Database username\n username: ${DB_USERNAME}\n ## Database password\n password: ${DB_PASSWORD}\n ## Database password file\n ## If specified, will load the database password from a file.\n # passwordFile: ${DB_PASSWORD_FILE}\n ## Database connection url\n url: localhost:1521/freepdb1\n\n ## Metrics query timeout for this database, in seconds\n queryTimeout: 5\n\n ## Rely on Oracle Database External Authentication by network or OS\n # externalAuth: false\n ## Database role\n # role: SYSDBA\n ## Path to Oracle Database wallet, if using wallet\n # tnsAdmin: /path/to/database/wallet\n\n ### Connection settings:\n ### Either the go-sql or Oracle Database connection pool may be used.\n ### To use the Oracle Database connection pool over the go-sql connection pool,\n ### set maxIdleConns to zero and configure the pool* settings.\n\n ### Connection pooling settings for the go-sql connection pool\n ## Max open connections for this database using go-sql connection pool\n maxOpenConns: 10\n ## Max idle connections for this database using go-sql connection pool\n maxIdleConns: 10\n\n ### Connection pooling settings for the Oracle Database connection pool\n ## Oracle Database connection pool increment.\n # poolIncrement: 1\n ## Oracle Database Connection pool maximum size\n # poolMaxConnections: 15\n ## Oracle Database Connection pool minimum size\n # poolMinConnections: 15\n\n ## Arbitrary labels to add to each metric scraped from this database\n # labels:\n # label_name1: label_value1\n # label_name2: label_value2\n\nmetrics:\n ## How often to scrape metrics. If not provided, metrics will be scraped on request.\n # scrapeInterval: 15s\n ## Path to default metrics file.\n default: default-metrics.toml\n ## Paths to any custom metrics files\n custom:\n - custom-metrics-example/custom-metrics.toml\n\nlog:\n # Path of log file\n destination: /opt/alert.log\n # Interval of log updates\n interval: 15s\n ## Set disable to 1 to disable logging\n # disable: 0\n\n# Optionally configure prometheus webserver\n#web:\n# listenAddresses: [':9161']\n# systemdSocket: true|false\n# configFile: /path/to/webconfigfile\n"})}),"\n",(0,a.jsx)(n.h3,{id:"docker-compose",children:"Docker Compose"}),"\n",(0,a.jsx)(n.p,{children:'If you would like to set up a test environment with the exporter, you can use the provided "Docker Compose" file in this repository which will start an Oracle Database instance, the exporter, Prometheus and Grafana.'}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"cd docker-compose\ndocker-compose up -d\n"})}),"\n",(0,a.jsx)(n.p,{children:"The containers will take a short time to start. The first time, the Oracle container might take a few minutes to start while it creates the database instance, but this is a one-time operation, and subequent restarts will be much faster (a few seconds)."}),"\n",(0,a.jsx)(n.p,{children:"Once the containers are all running, you can access the services using these URLs:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"http://localhost:9161/metrics",children:"Exporter"})}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.a,{href:"http://localhost:9090",children:"Prometheus"}),' - try a query for "oracle".']}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.a,{href:"http://localhost:3000",children:"Grafana"}),' - username is "admin" and password is "grafana". An Oracle Database dashboard is provisioned and configured to use data from the exporter.']}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>r});var o=t(6540);const a={},i=o.createContext(a);function s(e){const n=o.useContext(i);return o.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),o.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/468714db.5f17f508.js b/docs/assets/js/468714db.5f17f508.js new file mode 100644 index 00000000..5cbc7d53 --- /dev/null +++ b/docs/assets/js/468714db.5f17f508.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[2207],{3990:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>u,frontMatter:()=>i,metadata:()=>a,toc:()=>l});const a=JSON.parse('{"id":"configuration/oci-vault","title":"OCI Vault","description":"Securely load database credentials from OCI Vault.","source":"@site/versioned_docs/version-2.0.3/configuration/oci-vault.md","sourceDirName":"configuration","slug":"/configuration/oci-vault","permalink":"/oracle-db-appdev-monitoring/docs/configuration/oci-vault","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/versioned_docs/version-2.0.3/configuration/oci-vault.md","tags":[],"version":"2.0.3","sidebarPosition":6,"frontMatter":{"title":"OCI Vault","sidebar_position":6},"sidebar":"tutorialSidebar","previous":{"title":"Alert Logs","permalink":"/oracle-db-appdev-monitoring/docs/configuration/alert-logs"},"next":{"title":"Azure Vault","permalink":"/oracle-db-appdev-monitoring/docs/configuration/azure-vault"}}');var o=n(4848),r=n(8453);const i={title:"OCI Vault",sidebar_position:6},s="Oracle Cloud Infrastructure (OCI) Vault",c={},l=[{value:"OCI Vault CLI Configuration",id:"oci-vault-cli-configuration",level:3}];function d(e){const t={blockquote:"blockquote",code:"code",h1:"h1",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"oracle-cloud-infrastructure-oci-vault",children:"Oracle Cloud Infrastructure (OCI) Vault"})}),"\n",(0,o.jsx)(t.p,{children:"Securely load database credentials from OCI Vault."}),"\n",(0,o.jsxs)(t.p,{children:["Each database in the config file may be configured to use OCI Vault. To load the database username and/or password from OCI Vault, set the ",(0,o.jsx)(t.code,{children:"vault.oci"})," property to contain the OCI Vault OCID, and secret names for the database username/password:"]}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-yaml",children:"databases:\n mydb:\n vault:\n oci:\n id: <VAULT OCID>\n usernameSecret: <Secret containing DB username>\n passwordSecret: <Secret containing DB password>\n"})}),"\n",(0,o.jsx)(t.h3,{id:"oci-vault-cli-configuration",children:"OCI Vault CLI Configuration"}),"\n",(0,o.jsx)(t.p,{children:"If using the default database with CLI parameters, the exporter will read the username and password from a secret stored in OCI Vault if you set these two environment variables:"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.code,{children:"OCI_VAULT_ID"})," should be set to the OCID of the OCI vault that you wish to use"]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.code,{children:"OCI_VAULT_USERNAME_SECRET"})," should be set to the name of the secret in the OCI vault which contains the database username"]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.code,{children:"OCI_VAULT_PASSWORD_SECRET"})," should be set to the name of the secret in the OCI vault which contains the database password"]}),"\n"]}),"\n",(0,o.jsxs)(t.blockquote,{children:["\n",(0,o.jsxs)(t.p,{children:["Note that the process must be running under a user that has the OCI CLI installed and configured correctly to access the desired tenancy and region. The OCI Profile used is ",(0,o.jsx)(t.code,{children:"DEFAULT"}),"."]}),"\n"]})]})}function u(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>i,x:()=>s});var a=n(6540);const o={},r=a.createContext(o);function i(e){const t=a.useContext(r);return a.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),a.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/488c0ad4.c4e24d7b.js b/docs/assets/js/488c0ad4.c4e24d7b.js new file mode 100644 index 00000000..e115d097 --- /dev/null +++ b/docs/assets/js/488c0ad4.c4e24d7b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[1969],{3672:(e,t,n)=>{n.d(t,{A:()=>r});const r=n.p+"assets/images/exporter-running-against-basedb-8d8d9efd9a0bec0eb44e25f40e1cced0.png"},5833:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>s,metadata:()=>r,toc:()=>l});const r=JSON.parse('{"id":"intro","title":"OpenTelemetry Metrics for Oracle Database","description":"This project aims to provide observability for the Oracle Database so that users can understand performance and diagnose issues easily across applications and database. Over time, this project will provide not just metrics, but also logging and tracing support, and integration into popular frameworks like Spring Boot. The project aims to deliver functionality to support both cloud and on-premises databases, including those running in Kubernetes and containers.","source":"@site/versioned_docs/version-2.0.3/intro.md","sourceDirName":".","slug":"/intro","permalink":"/oracle-db-appdev-monitoring/docs/intro","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/versioned_docs/version-2.0.3/intro.md","tags":[],"version":"2.0.3","sidebarPosition":1,"frontMatter":{"sidebar_position":1},"sidebar":"tutorialSidebar","next":{"title":"Getting Started","permalink":"/oracle-db-appdev-monitoring/docs/category/getting-started"}}');var a=n(4848),o=n(8453);const s={sidebar_position:1},i="OpenTelemetry Metrics for Oracle Database",c={},l=[{value:"Main Features",id:"main-features",level:2}];function d(e){const t={a:"a",blockquote:"blockquote",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,o.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.header,{children:(0,a.jsx)(t.h1,{id:"opentelemetry-metrics-for-oracle-database",children:"OpenTelemetry Metrics for Oracle Database"})}),"\n",(0,a.jsx)(t.p,{children:"This project aims to provide observability for the Oracle Database so that users can understand performance and diagnose issues easily across applications and database. Over time, this project will provide not just metrics, but also logging and tracing support, and integration into popular frameworks like Spring Boot. The project aims to deliver functionality to support both cloud and on-premises databases, including those running in Kubernetes and containers."}),"\n",(0,a.jsxs)(t.p,{children:["Contributions are welcome - please see ",(0,a.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/CONTRIBUTING.md",children:"contributing"}),"."]}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{alt:"Oracle Database Dashboard",src:n(3672).A+"",width:"1256",height:"1460"})}),"\n",(0,a.jsx)(t.h2,{id:"main-features",children:"Main Features"}),"\n",(0,a.jsx)(t.p,{children:"The exporter supports the following main features"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"Exports Oracle Database metrics in standard OTEL/Prometheus format"}),"\n",(0,a.jsx)(t.li,{children:"Works with on-prem, in the cloud, and in Kubernetes, with single instance, clustered, or Autonomous Oracle Database instances"}),"\n",(0,a.jsx)(t.li,{children:"Authenticate with plaintext, TLS, and Oracle Wallet"}),"\n",(0,a.jsx)(t.li,{children:"Secure credentials with Oracle Cloud Infrastructure (OCI) Vault or Azure Vault"}),"\n",(0,a.jsx)(t.li,{children:"Load metrics from one or more databases using a single exporter instance"}),"\n",(0,a.jsx)(t.li,{children:"Export the Prometheus Alert Log in JSON format for easy ingest by log aggregators"}),"\n",(0,a.jsx)(t.li,{children:"Pre-buit AMD64 and ARM64 images provided"}),"\n",(0,a.jsx)(t.li,{children:'Standard, default metrics included "out of the box"'}),"\n",(0,a.jsx)(t.li,{children:"Easily define custom metrics using YAML or TOML"}),"\n",(0,a.jsx)(t.li,{children:"Define the scrape interval, database query timeout, and other parameters on a per-metric, per-database level"}),"\n",(0,a.jsx)(t.li,{children:"Customize the database connection pool using go-sql, Oracle Database connection pools, and works with Database Resident Connection Pools"}),"\n",(0,a.jsxs)(t.li,{children:["Includes a sample ",(0,a.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/docker-compose/grafana",children:"Grafana dashboards"})," for inspiration or customization"]}),"\n"]}),"\n",(0,a.jsxs)(t.p,{children:["From the v1.0 release onwards, this project provides a ",(0,a.jsx)(t.a,{href:"https://prometheus.io/",children:"Prometheus"})," exporter for Oracle Database based in part on a Prometheus exporter created by ",(0,a.jsx)(t.a,{href:"https://github.com/iamseth/oracledb_exporter",children:"Seth Miller"}),". This project includes changes to comply with various Oracle standards and policies, as well as new features."]}),"\n",(0,a.jsxs)(t.blockquote,{children:["\n",(0,a.jsx)(t.p,{children:'Seth has archived his exporter as of Feb 13, 2025 and added a note encouraging people to check out ours instead. We wanted to extend a huge "Thank You!" to Seth for the work he did on that exporter, and his contributions to the Oracle and open source communities!'}),"\n"]})]})}function p(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>s,x:()=>i});var r=n(6540);const a={},o=r.createContext(a);function s(e){const t=r.useContext(o);return r.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/49d0ab44.3162fd79.js b/docs/assets/js/49d0ab44.3162fd79.js deleted file mode 100644 index e0c2b360..00000000 --- a/docs/assets/js/49d0ab44.3162fd79.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[539],{8453:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>s});var a=t(6540);const l={},o=a.createContext(l);function r(e){const n=a.useContext(o);return a.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:r(e.components),a.createElement(o.Provider,{value:n},e.children)}},8705:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>i,contentTitle:()=>s,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>c});const a=JSON.parse('{"id":"configuration/oracle-wallet","title":"Oracle Wallet (mTLS)","description":"For mutual TLS (mTLS) connections, you must use an Oracle Wallet.","source":"@site/docs/configuration/oracle-wallet.md","sourceDirName":"configuration","slug":"/configuration/oracle-wallet","permalink":"/oracle-db-appdev-monitoring/docs/configuration/oracle-wallet","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/docs/configuration/oracle-wallet.md","tags":[],"version":"current","sidebarPosition":4,"frontMatter":{"title":"Oracle Wallet (mTLS)","sidebar_position":4},"sidebar":"tutorialSidebar","previous":{"title":"Multiple Databases","permalink":"/oracle-db-appdev-monitoring/docs/configuration/multiple-databases"},"next":{"title":"Alert Logs","permalink":"/oracle-db-appdev-monitoring/docs/configuration/alert-logs"}}');var l=t(4848),o=t(8453);const r={title:"Oracle Wallet (mTLS)",sidebar_position:4},s="Using a Wallet",i={},c=[{value:"mTLS for multiple databases with Oracle Wallet",id:"mtls-for-multiple-databases-with-oracle-wallet",level:3}];function d(e){const n={code:"code",h1:"h1",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",...(0,o.R)(),...e.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(n.header,{children:(0,l.jsx)(n.h1,{id:"using-a-wallet",children:"Using a Wallet"})}),"\n",(0,l.jsx)(n.p,{children:"For mutual TLS (mTLS) connections, you must use an Oracle Wallet."}),"\n",(0,l.jsx)(n.p,{children:"If you are using Oracle Autonomous Database with mTLS, for example, you can download and unzip the wallet from the Oracle Cloud Infrastructure (OCI) console."}),"\n",(0,l.jsx)(n.p,{children:"To configure the exporter to use an Oracle Wallet,"}),"\n",(0,l.jsxs)(n.ol,{children:["\n",(0,l.jsxs)(n.li,{children:["Set the ",(0,l.jsx)(n.code,{children:"TNS_ADMIN"})," environment variable to the directory containing the unzipped wallet"]}),"\n",(0,l.jsx)(n.li,{children:"Configure your database instance with the appropriate database TNS name:"}),"\n"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-yaml",children:"databases:\n mydb:\n username: admin\n password: <REPLACE ME>\n # TNS Name from wallet tnsnames.ora file, e.g., mydb_high\n url: <TNS Name>\n"})}),"\n",(0,l.jsxs)(n.p,{children:["If you are running the exporter as a container, you can mount the wallet as a volume. For example, mounting the ",(0,l.jsx)(n.code,{children:"./wallet"})," directory to the ",(0,l.jsx)(n.code,{children:"/wallet"})," location:"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"docker run -it --rm \\\n -e DB_USERNAME=pdbadmin \\\n -e DB_PASSWORD=Welcome12345 \\\n -e DB_CONNECT_STRING=devdb_tp \\\n -v ./wallet:/wallet \\\n -p 9161:9161 \\\n container-registry.oracle.com/database/observability-exporter:2.0.2\n"})}),"\n",(0,l.jsx)(n.h3,{id:"mtls-for-multiple-databases-with-oracle-wallet",children:"mTLS for multiple databases with Oracle Wallet"}),"\n",(0,l.jsxs)(n.p,{children:["The Oracle Database Metrics exporter uses ODPI-C, which can only initalize the TNS aliases from a ",(0,l.jsx)(n.code,{children:"tnsnames.ora"}),' file once per process. To work around this, the exporter can be configured to read from a "combined" ',(0,l.jsx)(n.code,{children:"tnsnames.ora"})," file containing all TNS aliases for connections in a multi-database configuration."]}),"\n",(0,l.jsxs)(n.ol,{children:["\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsx)(n.p,{children:"For each database the exporter will connect to, download the corresponding wallet files. If you're using ADB/ATP-S, download the regional wallet instead of the instance wallet if the databases are in the same region."}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:["Copy the TNS aliases the ",(0,l.jsx)(n.code,{children:"tnsnames.ora"})," file from each wallet, and combine them into one file, so all your database service names are in one file together"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:["In the combined ",(0,l.jsx)(n.code,{children:"tnsnames.ora"})," file, and add the following snippet to each TNS alias connection string, to tell the client where the wallet directory is:"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{children:"(security=(MY_WALLET_DIRECTORY=/path/to/this/database/wallet))\n"})}),"\n",(0,l.jsxs)(n.p,{children:["The combined ",(0,l.jsx)(n.code,{children:"tnsnames.ora"})," file, which contains the TNS aliases for both databases, and their corresponding wallet location in the ",(0,l.jsx)(n.code,{children:"security"})," configuration will look something like the following:"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",children:"db1_high = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=adb.****.oraclecloud.com))(connect_data=(service_name=****.adb.oraclecloud.com))(security=(MY_WALLET_DIRECTORY=/wallets/db1)(ssl_server_dn_match=yes)))\n\ndb2_high = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=adb.****.oraclecloud.com))(connect_data=(service_name=****.adb.oraclecloud.com))(security=(MY_WALLET_DIRECTORY=/wallets/db2)(ssl_server_dn_match=yes)))\n"})}),"\n",(0,l.jsxs)(n.ol,{start:"4",children:["\n",(0,l.jsxs)(n.li,{children:["Take wallet files (cwallet.sso, ewallet.p12, & ewallet.pem) for each database, and place them in separate directories. For example, ",(0,l.jsx)(n.code,{children:"db1"})," gets its own directory, ",(0,l.jsx)(n.code,{children:"db2"})," gets its own directory, and so forth."]}),"\n"]}),"\n",(0,l.jsxs)(n.p,{children:["The resulting directory structure should look like the following, with wallet information separate from the combined ",(0,l.jsx)(n.code,{children:"tnsnames.ora"})," file:"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{children:"wallets\n\u251c\u2500\u2500 combined\n\u2502 \u251c\u2500\u2500 sqlnet.ora\n\u2502 \u2514\u2500\u2500 tnsnames.ora // Combined tnsnames.ora\n\u251c\u2500\u2500 db1\n\u2502 \u251c\u2500\u2500 cwallet.sso\n\u2502 \u251c\u2500\u2500 ewallet.p12\n\u2502 \u2514\u2500\u2500 ewallet.pem\n\u2514\u2500\u2500 db2\n\u251c\u2500\u2500 cwallet.sso\n\u251c\u2500\u2500 ewallet.p12\n\u2514\u2500\u2500 ewallet.pem\n"})}),"\n",(0,l.jsxs)(n.ol,{start:"5",children:["\n",(0,l.jsxs)(n.li,{children:["Set the ",(0,l.jsx)(n.code,{children:"TNS_ADMIN"})," environment variable where the exporter is running to the directory containing your combined ",(0,l.jsx)(n.code,{children:"tnsnames.ora"})," file:"]}),"\n"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{children:"export TNS_ADMIN=/wallets/combined\n"})}),"\n",(0,l.jsxs)(n.ol,{start:"6",children:["\n",(0,l.jsxs)(n.li,{children:["Finally, update the exporter configuration file to include the TNS aliases for all databases you will be connecting to. Ensure your database configuration file does not use the ",(0,l.jsx)(n.code,{children:"tnsAdmin"})," property, as we are using the global ",(0,l.jsx)(n.code,{children:"TNS_ADMIN"})," environment variable to point to the combined ",(0,l.jsx)(n.code,{children:"tnsnames.ora"})," file:"]}),"\n"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-yaml",children:"databases:\n db2:\n username: ****\n password: ****\n url: db2_high\n queryTimeout: 5\n maxOpenConns: 10\n maxIdleConns: 10\n db1:\n username: ****\n password: ****\n url: db1_high\n queryTimeout: 5\n maxOpenConns: 10\n maxIdleConns: 10\n"})}),"\n",(0,l.jsx)(n.p,{children:"Then, run the exporter with the config file:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-shell",children:"./oracledb_exporter --config.file=my-config-file.yaml\n"})})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,l.jsx)(n,{...e,children:(0,l.jsx)(d,{...e})}):d(e)}}}]); \ No newline at end of file diff --git a/docs/assets/js/49d0ab44.d41e7e86.js b/docs/assets/js/49d0ab44.d41e7e86.js new file mode 100644 index 00000000..118cbeea --- /dev/null +++ b/docs/assets/js/49d0ab44.d41e7e86.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[8539],{8453:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>s});var a=t(6540);const l={},o=a.createContext(l);function r(e){const n=a.useContext(o);return a.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:r(e.components),a.createElement(o.Provider,{value:n},e.children)}},8705:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>i,contentTitle:()=>s,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>c});const a=JSON.parse('{"id":"configuration/oracle-wallet","title":"Oracle Wallet (mTLS)","description":"For mutual TLS (mTLS) connections, you must use an Oracle Wallet.","source":"@site/docs/configuration/oracle-wallet.md","sourceDirName":"configuration","slug":"/configuration/oracle-wallet","permalink":"/oracle-db-appdev-monitoring/docs/next/configuration/oracle-wallet","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/docs/configuration/oracle-wallet.md","tags":[],"version":"current","sidebarPosition":4,"frontMatter":{"title":"Oracle Wallet (mTLS)","sidebar_position":4},"sidebar":"tutorialSidebar","previous":{"title":"Multiple Databases","permalink":"/oracle-db-appdev-monitoring/docs/next/configuration/multiple-databases"},"next":{"title":"Alert Logs","permalink":"/oracle-db-appdev-monitoring/docs/next/configuration/alert-logs"}}');var l=t(4848),o=t(8453);const r={title:"Oracle Wallet (mTLS)",sidebar_position:4},s="Using a Wallet",i={},c=[{value:"mTLS for multiple databases with Oracle Wallet",id:"mtls-for-multiple-databases-with-oracle-wallet",level:3}];function d(e){const n={code:"code",h1:"h1",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",...(0,o.R)(),...e.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(n.header,{children:(0,l.jsx)(n.h1,{id:"using-a-wallet",children:"Using a Wallet"})}),"\n",(0,l.jsx)(n.p,{children:"For mutual TLS (mTLS) connections, you must use an Oracle Wallet."}),"\n",(0,l.jsx)(n.p,{children:"If you are using Oracle Autonomous Database with mTLS, for example, you can download and unzip the wallet from the Oracle Cloud Infrastructure (OCI) console."}),"\n",(0,l.jsx)(n.p,{children:"To configure the exporter to use an Oracle Wallet,"}),"\n",(0,l.jsxs)(n.ol,{children:["\n",(0,l.jsxs)(n.li,{children:["Set the ",(0,l.jsx)(n.code,{children:"TNS_ADMIN"})," environment variable to the directory containing the unzipped wallet"]}),"\n",(0,l.jsx)(n.li,{children:"Configure your database instance with the appropriate database TNS name:"}),"\n"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-yaml",children:"databases:\n mydb:\n username: admin\n password: <REPLACE ME>\n # TNS Name from wallet tnsnames.ora file, e.g., mydb_high\n url: <TNS Name>\n"})}),"\n",(0,l.jsxs)(n.p,{children:["If you are running the exporter as a container, you can mount the wallet as a volume. For example, mounting the ",(0,l.jsx)(n.code,{children:"./wallet"})," directory to the ",(0,l.jsx)(n.code,{children:"/wallet"})," location:"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"docker run -it --rm \\\n -e DB_USERNAME=pdbadmin \\\n -e DB_PASSWORD=Welcome12345 \\\n -e DB_CONNECT_STRING=devdb_tp \\\n -v ./wallet:/wallet \\\n -p 9161:9161 \\\n container-registry.oracle.com/database/observability-exporter:2.0.2\n"})}),"\n",(0,l.jsx)(n.h3,{id:"mtls-for-multiple-databases-with-oracle-wallet",children:"mTLS for multiple databases with Oracle Wallet"}),"\n",(0,l.jsxs)(n.p,{children:["The Oracle Database Metrics exporter uses ODPI-C, which can only initalize the TNS aliases from a ",(0,l.jsx)(n.code,{children:"tnsnames.ora"}),' file once per process. To work around this, the exporter can be configured to read from a "combined" ',(0,l.jsx)(n.code,{children:"tnsnames.ora"})," file containing all TNS aliases for connections in a multi-database configuration."]}),"\n",(0,l.jsxs)(n.ol,{children:["\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsx)(n.p,{children:"For each database the exporter will connect to, download the corresponding wallet files. If you're using ADB/ATP-S, download the regional wallet instead of the instance wallet if the databases are in the same region."}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:["Copy the TNS aliases the ",(0,l.jsx)(n.code,{children:"tnsnames.ora"})," file from each wallet, and combine them into one file, so all your database service names are in one file together"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:["In the combined ",(0,l.jsx)(n.code,{children:"tnsnames.ora"})," file, and add the following snippet to each TNS alias connection string, to tell the client where the wallet directory is:"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{children:"(security=(MY_WALLET_DIRECTORY=/path/to/this/database/wallet))\n"})}),"\n",(0,l.jsxs)(n.p,{children:["The combined ",(0,l.jsx)(n.code,{children:"tnsnames.ora"})," file, which contains the TNS aliases for both databases, and their corresponding wallet location in the ",(0,l.jsx)(n.code,{children:"security"})," configuration will look something like the following:"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",children:"db1_high = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=adb.****.oraclecloud.com))(connect_data=(service_name=****.adb.oraclecloud.com))(security=(MY_WALLET_DIRECTORY=/wallets/db1)(ssl_server_dn_match=yes)))\n\ndb2_high = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=adb.****.oraclecloud.com))(connect_data=(service_name=****.adb.oraclecloud.com))(security=(MY_WALLET_DIRECTORY=/wallets/db2)(ssl_server_dn_match=yes)))\n"})}),"\n",(0,l.jsxs)(n.ol,{start:"4",children:["\n",(0,l.jsxs)(n.li,{children:["Take wallet files (cwallet.sso, ewallet.p12, & ewallet.pem) for each database, and place them in separate directories. For example, ",(0,l.jsx)(n.code,{children:"db1"})," gets its own directory, ",(0,l.jsx)(n.code,{children:"db2"})," gets its own directory, and so forth."]}),"\n"]}),"\n",(0,l.jsxs)(n.p,{children:["The resulting directory structure should look like the following, with wallet information separate from the combined ",(0,l.jsx)(n.code,{children:"tnsnames.ora"})," file:"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{children:"wallets\n\u251c\u2500\u2500 combined\n\u2502 \u251c\u2500\u2500 sqlnet.ora\n\u2502 \u2514\u2500\u2500 tnsnames.ora // Combined tnsnames.ora\n\u251c\u2500\u2500 db1\n\u2502 \u251c\u2500\u2500 cwallet.sso\n\u2502 \u251c\u2500\u2500 ewallet.p12\n\u2502 \u2514\u2500\u2500 ewallet.pem\n\u2514\u2500\u2500 db2\n\u251c\u2500\u2500 cwallet.sso\n\u251c\u2500\u2500 ewallet.p12\n\u2514\u2500\u2500 ewallet.pem\n"})}),"\n",(0,l.jsxs)(n.ol,{start:"5",children:["\n",(0,l.jsxs)(n.li,{children:["Set the ",(0,l.jsx)(n.code,{children:"TNS_ADMIN"})," environment variable where the exporter is running to the directory containing your combined ",(0,l.jsx)(n.code,{children:"tnsnames.ora"})," file:"]}),"\n"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{children:"export TNS_ADMIN=/wallets/combined\n"})}),"\n",(0,l.jsxs)(n.ol,{start:"6",children:["\n",(0,l.jsxs)(n.li,{children:["Finally, update the exporter configuration file to include the TNS aliases for all databases you will be connecting to. Ensure your database configuration file does not use the ",(0,l.jsx)(n.code,{children:"tnsAdmin"})," property, as we are using the global ",(0,l.jsx)(n.code,{children:"TNS_ADMIN"})," environment variable to point to the combined ",(0,l.jsx)(n.code,{children:"tnsnames.ora"})," file:"]}),"\n"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-yaml",children:"databases:\n db2:\n username: ****\n password: ****\n url: db2_high\n queryTimeout: 5\n maxOpenConns: 10\n maxIdleConns: 10\n db1:\n username: ****\n password: ****\n url: db1_high\n queryTimeout: 5\n maxOpenConns: 10\n maxIdleConns: 10\n"})}),"\n",(0,l.jsx)(n.p,{children:"Then, run the exporter with the config file:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-shell",children:"./oracledb_exporter --config.file=my-config-file.yaml\n"})})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,l.jsx)(n,{...e,children:(0,l.jsx)(d,{...e})}):d(e)}}}]); \ No newline at end of file diff --git a/docs/assets/js/5240f2c1.1c8abb1b.js b/docs/assets/js/5240f2c1.1c8abb1b.js deleted file mode 100644 index 6617f992..00000000 --- a/docs/assets/js/5240f2c1.1c8abb1b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[82],{1632:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>s,metadata:()=>n,toc:()=>l});const n=JSON.parse('{"id":"getting-started/kubernetes","title":"Kubernetes","description":"You can run the exporter in Kubernetes using provided manifests.","source":"@site/docs/getting-started/kubernetes.md","sourceDirName":"getting-started","slug":"/getting-started/kubernetes","permalink":"/oracle-db-appdev-monitoring/docs/getting-started/kubernetes","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/docs/getting-started/kubernetes.md","tags":[],"version":"current","sidebarPosition":3,"frontMatter":{"title":"Kubernetes","sidebar_position":3},"sidebar":"tutorialSidebar","previous":{"title":"Default Metrics","permalink":"/oracle-db-appdev-monitoring/docs/getting-started/default-metrics"},"next":{"title":"Grafana Dashboards","permalink":"/oracle-db-appdev-monitoring/docs/getting-started/grafana-dashboards"}}');var a=r(4848),o=r(8453);const s={title:"Kubernetes",sidebar_position:3},i="Kubernetes",c={},l=[{value:"Create a secret with credentials for connecting to the Oracle Database",id:"create-a-secret-with-credentials-for-connecting-to-the-oracle-database",level:3},{value:"Create a config map for the exporter configuration file (recommended)",id:"create-a-config-map-for-the-exporter-configuration-file-recommended",level:3},{value:"Create a config map for the wallet (optional)",id:"create-a-config-map-for-the-wallet-optional",level:3},{value:"Create a config map for your metrics definition file (optional)",id:"create-a-config-map-for-your-metrics-definition-file-optional",level:3},{value:"Deploy the Oracle Database Observability exporter",id:"deploy-the-oracle-database-observability-exporter",level:3},{value:"Create a Kubernetes service for the exporter",id:"create-a-kubernetes-service-for-the-exporter",level:3},{value:"Create a Kubernetes service monitor",id:"create-a-kubernetes-service-monitor",level:3},{value:"Configure a Prometheus target (optional)",id:"configure-a-prometheus-target-optional",level:3}];function d(e){const t={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h3:"h3",header:"header",p:"p",pre:"pre",...(0,o.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.header,{children:(0,a.jsx)(t.h1,{id:"kubernetes",children:"Kubernetes"})}),"\n",(0,a.jsx)(t.p,{children:"You can run the exporter in Kubernetes using provided manifests."}),"\n",(0,a.jsxs)(t.p,{children:["To run the exporter in Kubernetes, you must complete the following steps. All steps must be completed in the same Kunernetes namespace. The examples below assume you want to use a namespace called ",(0,a.jsx)(t.code,{children:"exporter"}),", you must change the commands if you wish to use a different namespace."]}),"\n",(0,a.jsx)(t.h3,{id:"create-a-secret-with-credentials-for-connecting-to-the-oracle-database",children:"Create a secret with credentials for connecting to the Oracle Database"}),"\n",(0,a.jsxs)(t.p,{children:["Create a secret with the Oracle database user and password that the exporter should use to connect to the database using this command. You must specify the correct user and password for your environment. This example uses ",(0,a.jsx)(t.code,{children:"pdbadmin"})," as the user and ",(0,a.jsx)(t.code,{children:"Welcome12345"})," as the password:"]}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:"kubectl create secret generic db-secret \\\n --from-literal=username=pdbadmin \\\n --from-literal=password=Welcome12345 \\\n -n exporter\n"})}),"\n",(0,a.jsx)(t.h3,{id:"create-a-config-map-for-the-exporter-configuration-file-recommended",children:"Create a config map for the exporter configuration file (recommended)"}),"\n",(0,a.jsx)(t.p,{children:"Create a config map with the exporter configuration file (if you are using one) using this command:"}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:"kubectl create cm metrics-exporter-config \\\n --from-file=metrics-exporter-config.yaml\n"})}),"\n",(0,a.jsxs)(t.blockquote,{children:["\n",(0,a.jsx)(t.p,{children:"NOTE: It is strongly recommended to migrate to the new config file if you are running version 2.0.0 or later."}),"\n"]}),"\n",(0,a.jsx)(t.h3,{id:"create-a-config-map-for-the-wallet-optional",children:"Create a config map for the wallet (optional)"}),"\n",(0,a.jsxs)(t.p,{children:["Create a config map with the wallet (if you are using one) using this command. Run this command in the ",(0,a.jsx)(t.code,{children:"wallet"})," directory you created earlier."]}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:"kubectl create cm db-metrics-tns-admin \\\n --from-file=cwallet.sso \\\n --from-file=ewallet.p12 \\\n --from-file=ewallet.pem \\\n --from-file=keystore.jks \\\n --from-file=ojdbc.properties \\\n --from-file=sqlnet.ora \\\n --from-file=tnsnames.ora \\\n --from-file=truststore.jks \\\n -n exporter\n"})}),"\n",(0,a.jsx)(t.h3,{id:"create-a-config-map-for-your-metrics-definition-file-optional",children:"Create a config map for your metrics definition file (optional)"}),"\n",(0,a.jsxs)(t.p,{children:["If you have defined any ",(0,a.jsx)(t.a,{href:"/oracle-db-appdev-monitoring/docs/configuration/custom-metrics",children:"custom metrics"}),", you must create a config map for the metrics definition file. For example, if you created a configuration file called ",(0,a.jsx)(t.code,{children:"txeventq-metrics.toml"}),", then create the config map with this command:"]}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:"kubectl create cm db-metrics-txeventq-exporter-config \\\n --from-file=txeventq-metrics.toml \\\n -n exporter\n"})}),"\n",(0,a.jsx)(t.h3,{id:"deploy-the-oracle-database-observability-exporter",children:"Deploy the Oracle Database Observability exporter"}),"\n",(0,a.jsxs)(t.p,{children:["A sample Kubernetes manifest is provided ",(0,a.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/kubernetes/metrics-exporter-deployment.yaml",children:"here"}),". You must edit this file to set the namespace you wish to use, the database connect string to use, and if you have any custom metrics, you will need to uncomment and customize some sections in this file."]}),"\n",(0,a.jsx)(t.p,{children:"Once you have made the necessary updates, apply the file to your cluster using this command:"}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:"kubectl apply -f metrics-exporter-deployment.yaml\n"})}),"\n",(0,a.jsx)(t.p,{children:"You can check the deployment was successful and monitor the exporter startup with this command:"}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:"kubectl get pods -n exporter -w\n"})}),"\n",(0,a.jsx)(t.p,{children:"You can view the exporter's logs with this command:"}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:"kubectl logs -f svc/metrics-exporter -n exporter\n"})}),"\n",(0,a.jsx)(t.h3,{id:"create-a-kubernetes-service-for-the-exporter",children:"Create a Kubernetes service for the exporter"}),"\n",(0,a.jsxs)(t.p,{children:["Create a Kubernetes service to allow access to the exporter pod(s). A sample Kubernetes manifest is provided ",(0,a.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/kubernetes/metrics-exporter-service.yaml",children:"here"}),". You may need to customize this file to update the namespace."]}),"\n",(0,a.jsx)(t.p,{children:"Once you have made any necessary udpates, apply the file to your cluster using this command:"}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:"kubectl apply -f metrics-exporter-service.yaml\n"})}),"\n",(0,a.jsx)(t.h3,{id:"create-a-kubernetes-service-monitor",children:"Create a Kubernetes service monitor"}),"\n",(0,a.jsxs)(t.p,{children:["Create a Kubernetes service monitor to tell Prometheus (for example) to collect metrics from the exporter. A sample Kubernetes manifest is provided ",(0,a.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/kubernetes/metrics-service-monitor.yaml",children:"here"}),". You may need to customize this file to update the namespace."]}),"\n",(0,a.jsx)(t.p,{children:"Once you have made any necessary udpates, apply the file to your cluster using this command:"}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:"kubectl apply -f metrics-service-monitor.yaml\n"})}),"\n",(0,a.jsx)(t.h3,{id:"configure-a-prometheus-target-optional",children:"Configure a Prometheus target (optional)"}),"\n",(0,a.jsx)(t.p,{children:"You may need to update your Prometheus configuration to add a target. If so, you can use this example job definition as a guide:"}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-yaml",children:" - job_name: 'oracle-exporter'\n metrics_path: '/metrics'\n scrape_interval: 15s\n scrape_timeout: 10s\n static_configs:\n - targets: \n - metrics-exporter.exporter.svc.cluster.local:9161\n"})})]})}function m(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},8453:(e,t,r)=>{r.d(t,{R:()=>s,x:()=>i});var n=r(6540);const a={},o=n.createContext(a);function s(e){const t=n.useContext(o);return n.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/5240f2c1.7779f2d4.js b/docs/assets/js/5240f2c1.7779f2d4.js new file mode 100644 index 00000000..697e9812 --- /dev/null +++ b/docs/assets/js/5240f2c1.7779f2d4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[5082],{1632:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>s,metadata:()=>n,toc:()=>l});const n=JSON.parse('{"id":"getting-started/kubernetes","title":"Kubernetes","description":"You can run the exporter in Kubernetes using provided manifests.","source":"@site/docs/getting-started/kubernetes.md","sourceDirName":"getting-started","slug":"/getting-started/kubernetes","permalink":"/oracle-db-appdev-monitoring/docs/next/getting-started/kubernetes","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/docs/getting-started/kubernetes.md","tags":[],"version":"current","sidebarPosition":3,"frontMatter":{"title":"Kubernetes","sidebar_position":3},"sidebar":"tutorialSidebar","previous":{"title":"Default Metrics","permalink":"/oracle-db-appdev-monitoring/docs/next/getting-started/default-metrics"},"next":{"title":"Grafana Dashboards","permalink":"/oracle-db-appdev-monitoring/docs/next/getting-started/grafana-dashboards"}}');var a=r(4848),o=r(8453);const s={title:"Kubernetes",sidebar_position:3},i="Kubernetes",c={},l=[{value:"Create a secret with credentials for connecting to the Oracle Database",id:"create-a-secret-with-credentials-for-connecting-to-the-oracle-database",level:3},{value:"Create a config map for the exporter configuration file (recommended)",id:"create-a-config-map-for-the-exporter-configuration-file-recommended",level:3},{value:"Create a config map for the wallet (optional)",id:"create-a-config-map-for-the-wallet-optional",level:3},{value:"Create a config map for your metrics definition file (optional)",id:"create-a-config-map-for-your-metrics-definition-file-optional",level:3},{value:"Deploy the Oracle Database Observability exporter",id:"deploy-the-oracle-database-observability-exporter",level:3},{value:"Create a Kubernetes service for the exporter",id:"create-a-kubernetes-service-for-the-exporter",level:3},{value:"Create a Kubernetes service monitor",id:"create-a-kubernetes-service-monitor",level:3},{value:"Configure a Prometheus target (optional)",id:"configure-a-prometheus-target-optional",level:3}];function d(e){const t={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h3:"h3",header:"header",p:"p",pre:"pre",...(0,o.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.header,{children:(0,a.jsx)(t.h1,{id:"kubernetes",children:"Kubernetes"})}),"\n",(0,a.jsx)(t.p,{children:"You can run the exporter in Kubernetes using provided manifests."}),"\n",(0,a.jsxs)(t.p,{children:["To run the exporter in Kubernetes, you must complete the following steps. All steps must be completed in the same Kunernetes namespace. The examples below assume you want to use a namespace called ",(0,a.jsx)(t.code,{children:"exporter"}),", you must change the commands if you wish to use a different namespace."]}),"\n",(0,a.jsx)(t.h3,{id:"create-a-secret-with-credentials-for-connecting-to-the-oracle-database",children:"Create a secret with credentials for connecting to the Oracle Database"}),"\n",(0,a.jsxs)(t.p,{children:["Create a secret with the Oracle database user and password that the exporter should use to connect to the database using this command. You must specify the correct user and password for your environment. This example uses ",(0,a.jsx)(t.code,{children:"pdbadmin"})," as the user and ",(0,a.jsx)(t.code,{children:"Welcome12345"})," as the password:"]}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:"kubectl create secret generic db-secret \\\n --from-literal=username=pdbadmin \\\n --from-literal=password=Welcome12345 \\\n -n exporter\n"})}),"\n",(0,a.jsx)(t.h3,{id:"create-a-config-map-for-the-exporter-configuration-file-recommended",children:"Create a config map for the exporter configuration file (recommended)"}),"\n",(0,a.jsx)(t.p,{children:"Create a config map with the exporter configuration file (if you are using one) using this command:"}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:"kubectl create cm metrics-exporter-config \\\n --from-file=metrics-exporter-config.yaml\n"})}),"\n",(0,a.jsxs)(t.blockquote,{children:["\n",(0,a.jsx)(t.p,{children:"NOTE: It is strongly recommended to migrate to the new config file if you are running version 2.0.0 or later."}),"\n"]}),"\n",(0,a.jsx)(t.h3,{id:"create-a-config-map-for-the-wallet-optional",children:"Create a config map for the wallet (optional)"}),"\n",(0,a.jsxs)(t.p,{children:["Create a config map with the wallet (if you are using one) using this command. Run this command in the ",(0,a.jsx)(t.code,{children:"wallet"})," directory you created earlier."]}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:"kubectl create cm db-metrics-tns-admin \\\n --from-file=cwallet.sso \\\n --from-file=ewallet.p12 \\\n --from-file=ewallet.pem \\\n --from-file=keystore.jks \\\n --from-file=ojdbc.properties \\\n --from-file=sqlnet.ora \\\n --from-file=tnsnames.ora \\\n --from-file=truststore.jks \\\n -n exporter\n"})}),"\n",(0,a.jsx)(t.h3,{id:"create-a-config-map-for-your-metrics-definition-file-optional",children:"Create a config map for your metrics definition file (optional)"}),"\n",(0,a.jsxs)(t.p,{children:["If you have defined any ",(0,a.jsx)(t.a,{href:"/oracle-db-appdev-monitoring/docs/next/configuration/custom-metrics",children:"custom metrics"}),", you must create a config map for the metrics definition file. For example, if you created a configuration file called ",(0,a.jsx)(t.code,{children:"txeventq-metrics.toml"}),", then create the config map with this command:"]}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:"kubectl create cm db-metrics-txeventq-exporter-config \\\n --from-file=txeventq-metrics.toml \\\n -n exporter\n"})}),"\n",(0,a.jsx)(t.h3,{id:"deploy-the-oracle-database-observability-exporter",children:"Deploy the Oracle Database Observability exporter"}),"\n",(0,a.jsxs)(t.p,{children:["A sample Kubernetes manifest is provided ",(0,a.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/kubernetes/metrics-exporter-deployment.yaml",children:"here"}),". You must edit this file to set the namespace you wish to use, the database connect string to use, and if you have any custom metrics, you will need to uncomment and customize some sections in this file."]}),"\n",(0,a.jsx)(t.p,{children:"Once you have made the necessary updates, apply the file to your cluster using this command:"}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:"kubectl apply -f metrics-exporter-deployment.yaml\n"})}),"\n",(0,a.jsx)(t.p,{children:"You can check the deployment was successful and monitor the exporter startup with this command:"}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:"kubectl get pods -n exporter -w\n"})}),"\n",(0,a.jsx)(t.p,{children:"You can view the exporter's logs with this command:"}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:"kubectl logs -f svc/metrics-exporter -n exporter\n"})}),"\n",(0,a.jsx)(t.h3,{id:"create-a-kubernetes-service-for-the-exporter",children:"Create a Kubernetes service for the exporter"}),"\n",(0,a.jsxs)(t.p,{children:["Create a Kubernetes service to allow access to the exporter pod(s). A sample Kubernetes manifest is provided ",(0,a.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/kubernetes/metrics-exporter-service.yaml",children:"here"}),". You may need to customize this file to update the namespace."]}),"\n",(0,a.jsx)(t.p,{children:"Once you have made any necessary udpates, apply the file to your cluster using this command:"}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:"kubectl apply -f metrics-exporter-service.yaml\n"})}),"\n",(0,a.jsx)(t.h3,{id:"create-a-kubernetes-service-monitor",children:"Create a Kubernetes service monitor"}),"\n",(0,a.jsxs)(t.p,{children:["Create a Kubernetes service monitor to tell Prometheus (for example) to collect metrics from the exporter. A sample Kubernetes manifest is provided ",(0,a.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/kubernetes/metrics-service-monitor.yaml",children:"here"}),". You may need to customize this file to update the namespace."]}),"\n",(0,a.jsx)(t.p,{children:"Once you have made any necessary udpates, apply the file to your cluster using this command:"}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:"kubectl apply -f metrics-service-monitor.yaml\n"})}),"\n",(0,a.jsx)(t.h3,{id:"configure-a-prometheus-target-optional",children:"Configure a Prometheus target (optional)"}),"\n",(0,a.jsx)(t.p,{children:"You may need to update your Prometheus configuration to add a target. If so, you can use this example job definition as a guide:"}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-yaml",children:" - job_name: 'oracle-exporter'\n metrics_path: '/metrics'\n scrape_interval: 15s\n scrape_timeout: 10s\n static_configs:\n - targets: \n - metrics-exporter.exporter.svc.cluster.local:9161\n"})})]})}function m(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},8453:(e,t,r)=>{r.d(t,{R:()=>s,x:()=>i});var n=r(6540);const a={},o=n.createContext(a);function s(e){const t=n.useContext(o);return n.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/5e8a6b04.2d605a88.js b/docs/assets/js/5e8a6b04.2d605a88.js new file mode 100644 index 00000000..91427fe8 --- /dev/null +++ b/docs/assets/js/5e8a6b04.2d605a88.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[8952],{5995:e=>{e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Configuration","description":"How to configure the Oracle Database Metrics Exporter.","slug":"/category/configuration","permalink":"/oracle-db-appdev-monitoring/docs/next/category/configuration","sidebar":"tutorialSidebar","navigation":{"previous":{"title":"Grafana Dashboards","permalink":"/oracle-db-appdev-monitoring/docs/next/getting-started/grafana-dashboards"},"next":{"title":"Exporter Config File","permalink":"/oracle-db-appdev-monitoring/docs/next/configuration/config-file"}}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/5e95c892.0766153a.js b/docs/assets/js/5e95c892.0766153a.js new file mode 100644 index 00000000..926df884 --- /dev/null +++ b/docs/assets/js/5e95c892.0766153a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[9647],{7121:(e,s,r)=>{r.r(s),r.d(s,{default:()=>l});r(6540);var t=r(4164),u=r(7559),a=r(5500),c=r(2831),n=r(1656),i=r(4848);function l(e){return(0,i.jsx)(a.e3,{className:(0,t.A)(u.G.wrapper.docsPages),children:(0,i.jsx)(n.A,{children:(0,c.v)(e.route.routes)})})}}}]); \ No newline at end of file diff --git a/docs/assets/js/5e95c892.0955054f.js b/docs/assets/js/5e95c892.0955054f.js deleted file mode 100644 index bcf888e2..00000000 --- a/docs/assets/js/5e95c892.0955054f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[647],{7121:(e,s,r)=>{r.r(s),r.d(s,{default:()=>l});r(6540);var t=r(4164),u=r(7559),a=r(5500),c=r(2831),n=r(1656),i=r(4848);function l(e){return(0,i.jsx)(a.e3,{className:(0,t.A)(u.G.wrapper.docsPages),children:(0,i.jsx)(n.A,{children:(0,c.v)(e.route.routes)})})}}}]); \ No newline at end of file diff --git a/docs/assets/js/61f1b472.623412d3.js b/docs/assets/js/61f1b472.623412d3.js new file mode 100644 index 00000000..b677a018 --- /dev/null +++ b/docs/assets/js/61f1b472.623412d3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[9666],{2709:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>a,contentTitle:()=>s,default:()=>g,frontMatter:()=>i,metadata:()=>n,toc:()=>c});const n=JSON.parse('{"id":"configuration/alert-logs","title":"Alert Logs","description":"Collect export alert logs with a log ingestion tool.","source":"@site/docs/configuration/alert-logs.md","sourceDirName":"configuration","slug":"/configuration/alert-logs","permalink":"/oracle-db-appdev-monitoring/docs/next/configuration/alert-logs","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/docs/configuration/alert-logs.md","tags":[],"version":"current","sidebarPosition":5,"frontMatter":{"title":"Alert Logs","sidebar_position":5},"sidebar":"tutorialSidebar","previous":{"title":"Oracle Wallet (mTLS)","permalink":"/oracle-db-appdev-monitoring/docs/next/configuration/oracle-wallet"},"next":{"title":"OCI Vault","permalink":"/oracle-db-appdev-monitoring/docs/next/configuration/oci-vault"}}');var r=o(4848),l=o(8453);const i={title:"Alert Logs",sidebar_position:5},s="Alert logs",a={},c=[];function d(e){const t={code:"code",h1:"h1",header:"header",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,l.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"alert-logs",children:"Alert logs"})}),"\n",(0,r.jsx)(t.p,{children:"Collect export alert logs with a log ingestion tool."}),"\n",(0,r.jsx)(t.p,{children:"The exporter exports alert log records as a JSON file suitable for collection by a log ingestion tool like Promtail or FluentBit."}),"\n",(0,r.jsx)(t.p,{children:"Alert logging is configured with the following parameters in the exporter config file:"}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Parameter"}),(0,r.jsx)(t.th,{children:"Description"}),(0,r.jsx)(t.th,{children:"Default"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"log.destination"}),(0,r.jsx)(t.td,{children:"Log file path"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"/log/alert.log"})})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"log.interval"}),(0,r.jsx)(t.td,{children:"Interval to log records"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"15s"})})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"log.disable"}),(0,r.jsxs)(t.td,{children:["Disable logging if set to ",(0,r.jsx)(t.code,{children:"1"})]}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"0"})})]})]})]}),"\n",(0,r.jsx)(t.p,{children:"Example alert log YAML configuration:"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-yaml",children:"log:\n # Path of log file\n destination: /opt/exporter/alert.log\n # Interval of log updates\n interval: 15s\n ## Set disable to 1 to disable logging\n # disable: 0\n"})})]})}function g(e={}){const{wrapper:t}={...(0,l.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},8453:(e,t,o)=>{o.d(t,{R:()=>i,x:()=>s});var n=o(6540);const r={},l=n.createContext(r);function i(e){const t=n.useContext(l);return n.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),n.createElement(l.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/61f1b472.6d4df439.js b/docs/assets/js/61f1b472.6d4df439.js deleted file mode 100644 index 8c0b16e6..00000000 --- a/docs/assets/js/61f1b472.6d4df439.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[666],{2709:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>a,contentTitle:()=>s,default:()=>g,frontMatter:()=>i,metadata:()=>n,toc:()=>c});const n=JSON.parse('{"id":"configuration/alert-logs","title":"Alert Logs","description":"Collect export alert logs with a log ingestion tool.","source":"@site/docs/configuration/alert-logs.md","sourceDirName":"configuration","slug":"/configuration/alert-logs","permalink":"/oracle-db-appdev-monitoring/docs/configuration/alert-logs","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/docs/configuration/alert-logs.md","tags":[],"version":"current","sidebarPosition":5,"frontMatter":{"title":"Alert Logs","sidebar_position":5},"sidebar":"tutorialSidebar","previous":{"title":"Oracle Wallet (mTLS)","permalink":"/oracle-db-appdev-monitoring/docs/configuration/oracle-wallet"},"next":{"title":"OCI Vault","permalink":"/oracle-db-appdev-monitoring/docs/configuration/oci-vault"}}');var r=o(4848),l=o(8453);const i={title:"Alert Logs",sidebar_position:5},s="Alert logs",a={},c=[];function d(e){const t={code:"code",h1:"h1",header:"header",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,l.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"alert-logs",children:"Alert logs"})}),"\n",(0,r.jsx)(t.p,{children:"Collect export alert logs with a log ingestion tool."}),"\n",(0,r.jsx)(t.p,{children:"The exporter exports alert log records as a JSON file suitable for collection by a log ingestion tool like Promtail or FluentBit."}),"\n",(0,r.jsx)(t.p,{children:"Alert logging is configured with the following parameters in the exporter config file:"}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Parameter"}),(0,r.jsx)(t.th,{children:"Description"}),(0,r.jsx)(t.th,{children:"Default"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"log.destination"}),(0,r.jsx)(t.td,{children:"Log file path"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"/log/alert.log"})})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"log.interval"}),(0,r.jsx)(t.td,{children:"Interval to log records"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"15s"})})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"log.disable"}),(0,r.jsxs)(t.td,{children:["Disable logging if set to ",(0,r.jsx)(t.code,{children:"1"})]}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"0"})})]})]})]}),"\n",(0,r.jsx)(t.p,{children:"Example alert log YAML configuration:"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-yaml",children:"log:\n # Path of log file\n destination: /opt/exporter/alert.log\n # Interval of log updates\n interval: 15s\n ## Set disable to 1 to disable logging\n # disable: 0\n"})})]})}function g(e={}){const{wrapper:t}={...(0,l.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},8453:(e,t,o)=>{o.d(t,{R:()=>i,x:()=>s});var n=o(6540);const r={},l=n.createContext(r);function i(e){const t=n.useContext(l);return n.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),n.createElement(l.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/668.a919aaa7.js b/docs/assets/js/668.a919aaa7.js deleted file mode 100644 index 370191cc..00000000 --- a/docs/assets/js/668.a919aaa7.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunksite=self.webpackChunksite||[]).push([[668],{2153:(e,t,n)=>{"use strict";n.d(t,{A:()=>x});n(6540);var s=n(4164),a=n(1312),r=n(7559),i=n(8774);const o={iconEdit:"iconEdit_Z9Sw"};var c=n(4848);function l({className:e,...t}){return(0,c.jsx)("svg",{fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,s.A)(o.iconEdit,e),"aria-hidden":"true",...t,children:(0,c.jsx)("g",{children:(0,c.jsx)("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})})})}function d({editUrl:e}){return(0,c.jsxs)(i.A,{to:e,className:r.G.common.editThisPage,children:[(0,c.jsx)(l,{}),(0,c.jsx)(a.A,{id:"theme.common.editThisPage",description:"The link label to edit the current page",children:"Edit this page"})]})}var u=n(4586);function m(e={}){const{i18n:{currentLocale:t}}=(0,u.A)(),n=function(){const{i18n:{currentLocale:e,localeConfigs:t}}=(0,u.A)();return t[e].calendar}();return new Intl.DateTimeFormat(t,{calendar:n,...e})}function h({lastUpdatedAt:e}){const t=new Date(e),n=m({day:"numeric",month:"short",year:"numeric",timeZone:"UTC"}).format(t);return(0,c.jsx)(a.A,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:(0,c.jsx)("b",{children:(0,c.jsx)("time",{dateTime:t.toISOString(),itemProp:"dateModified",children:n})})},children:" on {date}"})}function f({lastUpdatedBy:e}){return(0,c.jsx)(a.A,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:(0,c.jsx)("b",{children:e})},children:" by {user}"})}function p({lastUpdatedAt:e,lastUpdatedBy:t}){return(0,c.jsxs)("span",{className:r.G.common.lastUpdated,children:[(0,c.jsx)(a.A,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:e?(0,c.jsx)(h,{lastUpdatedAt:e}):"",byUser:t?(0,c.jsx)(f,{lastUpdatedBy:t}):""},children:"Last updated{atDate}{byUser}"}),!1]})}const g={lastUpdated:"lastUpdated_JAkA"};function x({className:e,editUrl:t,lastUpdatedAt:n,lastUpdatedBy:a}){return(0,c.jsxs)("div",{className:(0,s.A)("row",e),children:[(0,c.jsx)("div",{className:"col",children:t&&(0,c.jsx)(d,{editUrl:t})}),(0,c.jsx)("div",{className:(0,s.A)("col",g.lastUpdated),children:(n||a)&&(0,c.jsx)(p,{lastUpdatedAt:n,lastUpdatedBy:a})})]})}},3253:(e,t,n)=>{"use strict";n.d(t,{A:()=>Ie});var s=n(6540),a=n(8453),r=n(5260),i=n(2303),o=n(4164),c=n(5293),l=n(6342);function d(){const{prism:e}=(0,l.p)(),{colorMode:t}=(0,c.G)(),n=e.theme,s=e.darkTheme||n;return"dark"===t?s:n}var u=n(7559),m=n(8426),h=n.n(m),f=n(9532),p=n(4848);const g=/title=(?<quote>["'])(?<title>.*?)\1/,x=/\{(?<range>[\d,-]+)\}/,j={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},v={...j,lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}},b=Object.keys(j);function N(e,t){const n=e.map(e=>{const{start:n,end:s}=v[e];return`(?:${n}\\s*(${t.flatMap(e=>[e.line,e.block?.start,e.block?.end].filter(Boolean)).join("|")})\\s*${s})`}).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function y({showLineNumbers:e,metastring:t}){return"boolean"==typeof e?e?1:void 0:"number"==typeof e?e:function(e){const t=e?.split(" ").find(e=>e.startsWith("showLineNumbers"));if(t){if(t.startsWith("showLineNumbers=")){const e=t.replace("showLineNumbers=","");return parseInt(e,10)}return 1}}(t)}function A(e,t){const{language:n,magicComments:s}=t;if(void 0===n)return{lineClassNames:{},code:e};const a=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return N(["js","jsBlock"],t);case"jsx":case"tsx":return N(["js","jsBlock","jsx"],t);case"html":return N(["js","jsBlock","html"],t);case"python":case"py":case"bash":return N(["bash"],t);case"markdown":case"md":return N(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return N(["tex"],t);case"lua":case"haskell":return N(["lua"],t);case"sql":return N(["lua","jsBlock"],t);case"wasm":return N(["wasm"],t);case"vb":case"vba":case"visual-basic":return N(["vb","rem"],t);case"vbnet":return N(["vbnet","rem"],t);case"batch":return N(["rem"],t);case"basic":return N(["rem","f90"],t);case"fsharp":return N(["js","ml"],t);case"ocaml":case"sml":return N(["ml"],t);case"fortran":return N(["f90"],t);case"cobol":return N(["cobol"],t);default:return N(b,t)}}(n,s),r=e.split(/\r?\n/),i=Object.fromEntries(s.map(e=>[e.className,{start:0,range:""}])),o=Object.fromEntries(s.filter(e=>e.line).map(({className:e,line:t})=>[t,e])),c=Object.fromEntries(s.filter(e=>e.block).map(({className:e,block:t})=>[t.start,e])),l=Object.fromEntries(s.filter(e=>e.block).map(({className:e,block:t})=>[t.end,e]));for(let u=0;u<r.length;){const e=r[u].match(a);if(!e){u+=1;continue}const t=e.slice(1).find(e=>void 0!==e);o[t]?i[o[t]].range+=`${u},`:c[t]?i[c[t]].start=u:l[t]&&(i[l[t]].range+=`${i[l[t]].start}-${u-1},`),r.splice(u,1)}const d={};return Object.entries(i).forEach(([e,{range:t}])=>{h()(t).forEach(t=>{d[t]??=[],d[t].push(e)})}),{code:r.join("\n"),lineClassNames:d}}function C(e,t){const n=e.replace(/\r?\n$/,"");return function(e,{metastring:t,magicComments:n}){if(t&&x.test(t)){const s=t.match(x).groups.range;if(0===n.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${t}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const a=n[0].className,r=h()(s).filter(e=>e>0).map(e=>[e-1,[a]]);return{lineClassNames:Object.fromEntries(r),code:e}}return null}(n,{...t})??A(n,{...t})}function w(e){const t=function(e){return t=e.language??function(e){if(!e)return;const t=e.split(" ").find(e=>e.startsWith("language-"));return t?.replace(/language-/,"")}(e.className)??e.defaultLanguage,t?.toLowerCase()??"text";var t}({language:e.language,defaultLanguage:e.defaultLanguage,className:e.className}),{lineClassNames:n,code:s}=C(e.code,{metastring:e.metastring,magicComments:e.magicComments,language:t}),a=function({className:e,language:t}){return(0,o.A)(e,t&&!e?.includes(`language-${t}`)&&`language-${t}`)}({className:e.className,language:t}),r=(i=e.metastring,(i?.match(g)?.groups.title??"")||e.title);var i;const c=y({showLineNumbers:e.showLineNumbers,metastring:e.metastring});return{codeInput:e.code,code:s,className:a,language:t,title:r,lineNumbersStart:c,lineClassNames:n}}const k=(0,s.createContext)(null);function L({metadata:e,wordWrap:t,children:n}){const a=(0,s.useMemo)(()=>({metadata:e,wordWrap:t}),[e,t]);return(0,p.jsx)(k.Provider,{value:a,children:n})}function B(){const e=(0,s.useContext)(k);if(null===e)throw new f.dV("CodeBlockContextProvider");return e}const E="codeBlockContainer_Ckt0";function T({as:e,...t}){const n=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach(([e,s])=>{const a=t[e];a&&"string"==typeof s&&(n[a]=s)}),n}(d());return(0,p.jsx)(e,{...t,style:n,className:(0,o.A)(t.className,E,u.G.common.codeBlock)})}const H="codeBlock_bY9V",_="codeBlockStandalone_MEMb",M="codeBlockLines_e6Vv",S="codeBlockLinesWithNumbering_o6Pm";function I({children:e,className:t}){return(0,p.jsx)(T,{as:"pre",tabIndex:0,className:(0,o.A)(_,"thin-scrollbar",t),children:(0,p.jsx)("code",{className:M,children:e})})}const U={attributes:!0,characterData:!0,childList:!0,subtree:!0};function z(e,t){const[n,a]=(0,s.useState)(),r=(0,s.useCallback)(()=>{a(e.current?.closest("[role=tabpanel][hidden]"))},[e,a]);(0,s.useEffect)(()=>{r()},[r]),function(e,t,n=U){const a=(0,f._q)(t),r=(0,f.Be)(n);(0,s.useEffect)(()=>{const t=new MutationObserver(a);return e&&t.observe(e,r),()=>t.disconnect()},[e,a,r])}(n,e=>{e.forEach(e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),r())})},{attributes:!0,characterData:!1,childList:!1,subtree:!1})}function R({children:e}){return e}var V=n(1765);function O({line:e,token:t,...n}){return(0,p.jsx)("span",{...n})}const P="codeLine_lJS_",$="codeLineNumber_Tfdd",W="codeLineContent_feaV";function q({line:e,classNames:t,showLineNumbers:n,getLineProps:s,getTokenProps:a}){const r=function(e){const t=1===e.length&&"\n"===e[0].content?e[0]:void 0;return t?[{...t,content:""}]:e}(e),i=s({line:r,className:(0,o.A)(t,n&&P)}),c=r.map((e,t)=>{const n=a({token:e});return(0,p.jsx)(O,{...n,line:r,token:e,children:n.children},t)});return(0,p.jsxs)("span",{...i,children:[n?(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)("span",{className:$}),(0,p.jsx)("span",{className:W,children:c})]}):c,(0,p.jsx)("br",{})]})}const D=s.forwardRef((e,t)=>(0,p.jsx)("pre",{ref:t,tabIndex:0,...e,className:(0,o.A)(e.className,H,"thin-scrollbar")}));function F(e){const{metadata:t}=B();return(0,p.jsx)("code",{...e,className:(0,o.A)(e.className,M,void 0!==t.lineNumbersStart&&S),style:{...e.style,counterReset:void 0===t.lineNumbersStart?void 0:"line-count "+(t.lineNumbersStart-1)}})}function G({className:e}){const{metadata:t,wordWrap:n}=B(),s=d(),{code:a,language:r,lineNumbersStart:i,lineClassNames:c}=t;return(0,p.jsx)(V.f4,{theme:s,code:a,language:r,children:({className:t,style:s,tokens:a,getLineProps:r,getTokenProps:l})=>(0,p.jsx)(D,{ref:n.codeBlockRef,className:(0,o.A)(e,t),style:s,children:(0,p.jsx)(F,{children:a.map((e,t)=>(0,p.jsx)(q,{line:e,getLineProps:r,getTokenProps:l,classNames:c[t],showLineNumbers:void 0!==i},t))})})})}function J({children:e,fallback:t}){return(0,i.A)()?(0,p.jsx)(p.Fragment,{children:e?.()}):t??null}var Z=n(1312);function Y({className:e,...t}){return(0,p.jsx)("button",{type:"button",...t,className:(0,o.A)("clean-btn",e)})}function Q(e){return(0,p.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,p.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})})}function X(e){return(0,p.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,p.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})})}const K={copyButtonCopied:"copyButtonCopied_Vdqa",copyButtonIcons:"copyButtonIcons_IEyt",copyButtonIcon:"copyButtonIcon_TrPX",copyButtonSuccessIcon:"copyButtonSuccessIcon_cVMy"};function ee(e){return e?(0,Z.T)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,Z.T)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"})}function te(){const{metadata:{code:e}}=B(),[t,n]=(0,s.useState)(!1),a=(0,s.useRef)(void 0),r=(0,s.useCallback)(()=>{!function(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"),s=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 a=document.getSelection(),r=a.rangeCount>0&&a.getRangeAt(0);t.append(n),n.select(),n.selectionStart=0,n.selectionEnd=e.length;let i=!1;try{i=document.execCommand("copy")}catch{}n.remove(),r&&(a.removeAllRanges(),a.addRange(r)),s&&s.focus()}(e),n(!0),a.current=window.setTimeout(()=>{n(!1)},1e3)},[e]);return(0,s.useEffect)(()=>()=>window.clearTimeout(a.current),[]),{copyCode:r,isCopied:t}}function ne({className:e}){const{copyCode:t,isCopied:n}=te();return(0,p.jsx)(Y,{"aria-label":ee(n),title:(0,Z.T)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,o.A)(e,K.copyButton,n&&K.copyButtonCopied),onClick:t,children:(0,p.jsxs)("span",{className:K.copyButtonIcons,"aria-hidden":"true",children:[(0,p.jsx)(Q,{className:K.copyButtonIcon}),(0,p.jsx)(X,{className:K.copyButtonSuccessIcon})]})})}function se(e){return(0,p.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,p.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})})}const ae="wordWrapButtonIcon_b1P5",re="wordWrapButtonEnabled_uzNF";function ie({className:e}){const{wordWrap:t}=B();if(!(t.isEnabled||t.isCodeScrollable))return!1;const n=(0,Z.T)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,p.jsx)(Y,{onClick:()=>t.toggle(),className:(0,o.A)(e,t.isEnabled&&re),"aria-label":n,title:n,children:(0,p.jsx)(se,{className:ae,"aria-hidden":"true"})})}const oe="buttonGroup_M5ko";function ce({className:e}){return(0,p.jsx)(J,{children:()=>(0,p.jsxs)("div",{className:(0,o.A)(e,oe),children:[(0,p.jsx)(ie,{}),(0,p.jsx)(ne,{})]})})}const le="codeBlockContent_QJqH",de="codeBlockTitle_OeMC";function ue({className:e}){const{metadata:t}=B();return(0,p.jsxs)(T,{as:"div",className:(0,o.A)(e,t.className),children:[t.title&&(0,p.jsx)("div",{className:de,children:(0,p.jsx)(R,{children:t.title})}),(0,p.jsxs)("div",{className:le,children:[(0,p.jsx)(G,{}),(0,p.jsx)(ce,{})]})]})}function me(e){const t=function(e){const{prism:t}=(0,l.p)();return w({code:e.children,className:e.className,metastring:e.metastring,magicComments:t.magicComments,defaultLanguage:t.defaultLanguage,language:e.language,title:e.title,showLineNumbers:e.showLineNumbers})}(e),n=function(){const[e,t]=(0,s.useState)(!1),[n,a]=(0,s.useState)(!1),r=(0,s.useRef)(null),i=(0,s.useCallback)(()=>{const n=r.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t(e=>!e)},[r,e]),o=(0,s.useCallback)(()=>{const{scrollWidth:e,clientWidth:t}=r.current,n=e>t||r.current.querySelector("code").hasAttribute("style");a(n)},[r]);return z(r,o),(0,s.useEffect)(()=>{o()},[e,o]),(0,s.useEffect)(()=>(window.addEventListener("resize",o,{passive:!0}),()=>{window.removeEventListener("resize",o)}),[o]),{codeBlockRef:r,isEnabled:e,isCodeScrollable:n,toggle:i}}();return(0,p.jsx)(L,{metadata:t,wordWrap:n,children:(0,p.jsx)(ue,{})})}function he({children:e,...t}){const n=(0,i.A)(),a=function(e){return s.Children.toArray(e).some(e=>(0,s.isValidElement)(e))?e:Array.isArray(e)?e.join(""):e}(e),r="string"==typeof a?me:I;return(0,p.jsx)(r,{...t,children:a},String(n))}function fe(e){return(0,p.jsx)("code",{...e})}var pe=n(8774);var ge=n(3427),xe=n(1422);const je="details_lb9f",ve="isBrowser_bmU9",be="collapsibleContent_i85q";function Ne(e){return!!e&&("SUMMARY"===e.tagName||Ne(e.parentElement))}function ye(e,t){return!!e&&(e===t||ye(e.parentElement,t))}function Ae({summary:e,children:t,...n}){(0,ge.A)().collectAnchor(n.id);const a=(0,i.A)(),r=(0,s.useRef)(null),{collapsed:c,setCollapsed:l}=(0,xe.u)({initialState:!n.open}),[d,u]=(0,s.useState)(n.open),m=s.isValidElement(e)?e:(0,p.jsx)("summary",{children:e??"Details"});return(0,p.jsxs)("details",{...n,ref:r,open:d,"data-collapsed":c,className:(0,o.A)(je,a&&ve,n.className),onMouseDown:e=>{Ne(e.target)&&e.detail>1&&e.preventDefault()},onClick:e=>{e.stopPropagation();const t=e.target;Ne(t)&&ye(t,r.current)&&(e.preventDefault(),c?(l(!1),u(!0)):l(!0))},children:[m,(0,p.jsx)(xe.N,{lazy:!1,collapsed:c,onCollapseTransitionEnd:e=>{l(e),u(!e)},children:(0,p.jsx)("div",{className:be,children:t})})]})}const Ce="details_b_Ee";function we({...e}){return(0,p.jsx)(Ae,{...e,className:(0,o.A)("alert alert--info",Ce,e.className)})}function ke(e){const t=s.Children.toArray(e.children),n=t.find(e=>s.isValidElement(e)&&"summary"===e.type),a=(0,p.jsx)(p.Fragment,{children:t.filter(e=>e!==n)});return(0,p.jsx)(we,{...e,summary:n,children:a})}var Le=n(1107);function Be(e){return(0,p.jsx)(Le.A,{...e})}const Ee="containsTaskList_mC6p";function Te(e){if(void 0!==e)return(0,o.A)(e,e?.includes("contains-task-list")&&Ee)}const He="img_ev3q";var _e=n(7293),Me=n(418);const Se={Head:r.A,details:ke,Details:ke,code:function(e){return function(e){return void 0!==e.children&&s.Children.toArray(e.children).every(e=>"string"==typeof e&&!e.includes("\n"))}(e)?(0,p.jsx)(fe,{...e}):(0,p.jsx)(he,{...e})},a:function(e){return(0,p.jsx)(pe.A,{...e})},pre:function(e){return(0,p.jsx)(p.Fragment,{children:e.children})},ul:function(e){return(0,p.jsx)("ul",{...e,className:Te(e.className)})},li:function(e){return(0,ge.A)().collectAnchor(e.id),(0,p.jsx)("li",{...e})},img:function(e){return(0,p.jsx)("img",{decoding:"async",loading:"lazy",...e,className:(t=e.className,(0,o.A)(t,He))});var t},h1:e=>(0,p.jsx)(Be,{as:"h1",...e}),h2:e=>(0,p.jsx)(Be,{as:"h2",...e}),h3:e=>(0,p.jsx)(Be,{as:"h3",...e}),h4:e=>(0,p.jsx)(Be,{as:"h4",...e}),h5:e=>(0,p.jsx)(Be,{as:"h5",...e}),h6:e=>(0,p.jsx)(Be,{as:"h6",...e}),admonition:_e.A,mermaid:Me.A};function Ie({children:e}){return(0,p.jsx)(a.x,{components:Se,children:e})}},5195:(e,t,n)=>{"use strict";n.d(t,{A:()=>p});var s=n(6540),a=n(6342);function r(e){const t=e.map(e=>({...e,parentIndex:-1,children:[]})),n=Array(7).fill(-1);t.forEach((e,t)=>{const s=n.slice(2,e.level);e.parentIndex=Math.max(...s),n[e.level]=t});const s=[];return t.forEach(e=>{const{parentIndex:n,...a}=e;n>=0?t[n].children.push(a):s.push(a)}),s}function i({toc:e,minHeadingLevel:t,maxHeadingLevel:n}){return e.flatMap(e=>{const s=i({toc:e.children,minHeadingLevel:t,maxHeadingLevel:n});return function(e){return e.level>=t&&e.level<=n}(e)?[{...e,children:s}]:s})}function o(e){const t=e.getBoundingClientRect();return t.top===t.bottom?o(e.parentNode):t}function c(e,{anchorTopOffset:t}){const n=e.find(e=>o(e).top>=t);if(n){return function(e){return e.top>0&&e.bottom<window.innerHeight/2}(o(n))?n:e[e.indexOf(n)-1]??null}return e[e.length-1]??null}function l(){const e=(0,s.useRef)(0),{navbar:{hideOnScroll:t}}=(0,a.p)();return(0,s.useEffect)(()=>{e.current=t?0:document.querySelector(".navbar").clientHeight},[t]),e}function d(e){const t=(0,s.useRef)(void 0),n=l();(0,s.useEffect)(()=>{if(!e)return()=>{};const{linkClassName:s,linkActiveClassName:a,minHeadingLevel:r,maxHeadingLevel:i}=e;function o(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(s),o=function({minHeadingLevel:e,maxHeadingLevel:t}){const n=[];for(let s=e;s<=t;s+=1)n.push(`h${s}.anchor`);return Array.from(document.querySelectorAll(n.join()))}({minHeadingLevel:r,maxHeadingLevel:i}),l=c(o,{anchorTopOffset:n.current}),d=e.find(e=>l&&l.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e));e.forEach(e=>{!function(e,n){n?(t.current&&t.current!==e&&t.current.classList.remove(a),e.classList.add(a),t.current=e):e.classList.remove(a)}(e,e===d)})}return document.addEventListener("scroll",o),document.addEventListener("resize",o),o(),()=>{document.removeEventListener("scroll",o),document.removeEventListener("resize",o)}},[e,n])}var u=n(8774),m=n(4848);function h({toc:e,className:t,linkClassName:n,isChild:s}){return e.length?(0,m.jsx)("ul",{className:s?void 0:t,children:e.map(e=>(0,m.jsxs)("li",{children:[(0,m.jsx)(u.A,{to:`#${e.id}`,className:n??void 0,dangerouslySetInnerHTML:{__html:e.value}}),(0,m.jsx)(h,{isChild:!0,toc:e.children,className:t,linkClassName:n})]},e.id))}):null}const f=s.memo(h);function p({toc:e,className:t="table-of-contents table-of-contents__left-border",linkClassName:n="table-of-contents__link",linkActiveClassName:o,minHeadingLevel:c,maxHeadingLevel:l,...u}){const h=(0,a.p)(),p=c??h.tableOfContents.minHeadingLevel,g=l??h.tableOfContents.maxHeadingLevel,x=function({toc:e,minHeadingLevel:t,maxHeadingLevel:n}){return(0,s.useMemo)(()=>i({toc:r(e),minHeadingLevel:t,maxHeadingLevel:n}),[e,t,n])}({toc:e,minHeadingLevel:p,maxHeadingLevel:g});return d((0,s.useMemo)(()=>{if(n&&o)return{linkClassName:n,linkActiveClassName:o,minHeadingLevel:p,maxHeadingLevel:g}},[n,o,p,g])),(0,m.jsx)(f,{toc:x,className:t,linkClassName:n,...u})}},6896:(e,t,n)=>{"use strict";n.d(t,{A:()=>x});n(6540);var s=n(4164),a=n(1312),r=n(5260),i=n(4848);function o(){return(0,i.jsx)(a.A,{id:"theme.contentVisibility.unlistedBanner.title",description:"The unlisted content banner title",children:"Unlisted page"})}function c(){return(0,i.jsx)(a.A,{id:"theme.contentVisibility.unlistedBanner.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function l(){return(0,i.jsx)(r.A,{children:(0,i.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}function d(){return(0,i.jsx)(a.A,{id:"theme.contentVisibility.draftBanner.title",description:"The draft content banner title",children:"Draft page"})}function u(){return(0,i.jsx)(a.A,{id:"theme.contentVisibility.draftBanner.message",description:"The draft content banner message",children:"This page is a draft. It will only be visible in dev and be excluded from the production build."})}var m=n(7559),h=n(7293);function f({className:e}){return(0,i.jsx)(h.A,{type:"caution",title:(0,i.jsx)(d,{}),className:(0,s.A)(e,m.G.common.draftBanner),children:(0,i.jsx)(u,{})})}function p({className:e}){return(0,i.jsx)(h.A,{type:"caution",title:(0,i.jsx)(o,{}),className:(0,s.A)(e,m.G.common.unlistedBanner),children:(0,i.jsx)(c,{})})}function g(e){return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(l,{}),(0,i.jsx)(p,{...e})]})}function x({metadata:e}){const{unlisted:t,frontMatter:n}=e;return(0,i.jsxs)(i.Fragment,{children:[(t||n.unlisted)&&(0,i.jsx)(g,{}),n.draft&&(0,i.jsx)(f,{})]})}},7293:(e,t,n)=>{"use strict";n.d(t,{A:()=>_});var s=n(6540),a=n(4848);function r(e){const{mdxAdmonitionTitle:t,rest:n}=function(e){const t=s.Children.toArray(e),n=t.find(e=>s.isValidElement(e)&&"mdxAdmonitionTitle"===e.type),r=t.filter(e=>e!==n),i=n?.props.children;return{mdxAdmonitionTitle:i,rest:r.length>0?(0,a.jsx)(a.Fragment,{children:r}):null}}(e.children),r=e.title??t;return{...e,...r&&{title:r},children:n}}var i=n(4164),o=n(1312),c=n(7559);const l="admonition_xJq3",d="admonitionHeading_Gvgb",u="admonitionIcon_Rf37",m="admonitionContent_BuS1";function h({type:e,className:t,children:n}){return(0,a.jsx)("div",{className:(0,i.A)(c.G.common.admonition,c.G.common.admonitionType(e),l,t),children:n})}function f({icon:e,title:t}){return(0,a.jsxs)("div",{className:d,children:[(0,a.jsx)("span",{className:u,children:e}),t]})}function p({children:e}){return e?(0,a.jsx)("div",{className:m,children:e}):null}function g(e){const{type:t,icon:n,title:s,children:r,className:i}=e;return(0,a.jsxs)(h,{type:t,className:i,children:[s||n?(0,a.jsx)(f,{title:s,icon:n}):null,(0,a.jsx)(p,{children:r})]})}function x(e){return(0,a.jsx)("svg",{viewBox:"0 0 14 16",...e,children:(0,a.jsx)("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"})})}const j={icon:(0,a.jsx)(x,{}),title:(0,a.jsx)(o.A,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)",children:"note"})};function v(e){return(0,a.jsx)(g,{...j,...e,className:(0,i.A)("alert alert--secondary",e.className),children:e.children})}function b(e){return(0,a.jsx)("svg",{viewBox:"0 0 12 16",...e,children:(0,a.jsx)("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"})})}const N={icon:(0,a.jsx)(b,{}),title:(0,a.jsx)(o.A,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)",children:"tip"})};function y(e){return(0,a.jsx)(g,{...N,...e,className:(0,i.A)("alert alert--success",e.className),children:e.children})}function A(e){return(0,a.jsx)("svg",{viewBox:"0 0 14 16",...e,children:(0,a.jsx)("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"})})}const C={icon:(0,a.jsx)(A,{}),title:(0,a.jsx)(o.A,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)",children:"info"})};function w(e){return(0,a.jsx)(g,{...C,...e,className:(0,i.A)("alert alert--info",e.className),children:e.children})}function k(e){return(0,a.jsx)("svg",{viewBox:"0 0 16 16",...e,children:(0,a.jsx)("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"})})}const L={icon:(0,a.jsx)(k,{}),title:(0,a.jsx)(o.A,{id:"theme.admonition.warning",description:"The default label used for the Warning admonition (:::warning)",children:"warning"})};function B(e){return(0,a.jsx)("svg",{viewBox:"0 0 12 16",...e,children:(0,a.jsx)("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"})})}const E={icon:(0,a.jsx)(B,{}),title:(0,a.jsx)(o.A,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)",children:"danger"})};const T={icon:(0,a.jsx)(k,{}),title:(0,a.jsx)(o.A,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)",children:"caution"})};const H={...{note:v,tip:y,info:w,warning:function(e){return(0,a.jsx)(g,{...L,...e,className:(0,i.A)("alert alert--warning",e.className),children:e.children})},danger:function(e){return(0,a.jsx)(g,{...E,...e,className:(0,i.A)("alert alert--danger",e.className),children:e.children})}},...{secondary:e=>(0,a.jsx)(v,{title:"secondary",...e}),important:e=>(0,a.jsx)(w,{title:"important",...e}),success:e=>(0,a.jsx)(y,{title:"success",...e}),caution:function(e){return(0,a.jsx)(g,{...T,...e,className:(0,i.A)("alert alert--warning",e.className),children:e.children})}}};function _(e){const t=r(e),n=(s=t.type,H[s]||(console.warn(`No admonition component found for admonition type "${s}". Using Info as fallback.`),H.info));var s;return(0,a.jsx)(n,{...t})}},7763:(e,t,n)=>{"use strict";n.d(t,{A:()=>l});n(6540);var s=n(4164),a=n(5195);const r={tableOfContents:"tableOfContents_bqdL",docItemContainer:"docItemContainer_F8PC"};var i=n(4848);const o="table-of-contents__link toc-highlight",c="table-of-contents__link--active";function l({className:e,...t}){return(0,i.jsx)("div",{className:(0,s.A)(r.tableOfContents,"thin-scrollbar",e),children:(0,i.jsx)(a.A,{...t,linkClassName:o,linkActiveClassName:c})})}},8426:(e,t)=>{function n(e){let t,n=[];for(let s of e.split(",").map(e=>e.trim()))if(/^-?\d+$/.test(s))n.push(parseInt(s,10));else if(t=s.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,s,a,r]=t;if(s&&r){s=parseInt(s),r=parseInt(r);const e=s<r?1:-1;"-"!==a&&".."!==a&&"\u2025"!==a||(r+=e);for(let t=s;t!==r;t+=e)n.push(t)}}return n}t.default=n,e.exports=n},8453:(e,t,n)=>{"use strict";n.d(t,{R:()=>i,x:()=>o});var s=n(6540);const a={},r=s.createContext(a);function i(e){const t=s.useContext(r);return s.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),s.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/6a577544.bcbc70ea.js b/docs/assets/js/6a577544.bcbc70ea.js new file mode 100644 index 00000000..39b74fca --- /dev/null +++ b/docs/assets/js/6a577544.bcbc70ea.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[6424],{7248:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>h,frontMatter:()=>s,metadata:()=>r,toc:()=>l});const r=JSON.parse('{"id":"advanced/development","title":"Development","description":"The exporter is a Go program using the Prometheus SDK.","source":"@site/versioned_docs/version-2.0.3/advanced/development.md","sourceDirName":"advanced","slug":"/advanced/development","permalink":"/oracle-db-appdev-monitoring/docs/advanced/development","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/versioned_docs/version-2.0.3/advanced/development.md","tags":[],"version":"2.0.3","sidebarPosition":3,"frontMatter":{"title":"Development","sidebar_position":3},"sidebar":"tutorialSidebar","previous":{"title":"Monitoring TxEventQ","permalink":"/oracle-db-appdev-monitoring/docs/advanced/txeventq"},"next":{"title":"Releases","permalink":"/oracle-db-appdev-monitoring/docs/category/releases"}}');var t=i(4848),o=i(8453);const s={title:"Development",sidebar_position:3},c="Development",a={},l=[{value:"Docker/container build",id:"dockercontainer-build",level:3},{value:"Building Binaries",id:"building-binaries",level:3}];function d(e){const n={a:"a",code:"code",h1:"h1",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"development",children:"Development"})}),"\n",(0,t.jsx)(n.p,{children:"The exporter is a Go program using the Prometheus SDK."}),"\n",(0,t.jsxs)(n.p,{children:["External contributions are welcome, see ",(0,t.jsx)(n.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/CONTRIBUTING.md",children:"CONTRIBUTING"})," for details."]}),"\n",(0,t.jsx)(n.p,{children:"The exporter initialization is as follows:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Parse flags options and configuration properties"}),"\n",(0,t.jsxs)(n.li,{children:["Load the default toml file (",(0,t.jsx)(n.code,{children:"default-metrics.toml"}),") and store each metric in a ",(0,t.jsx)(n.code,{children:"Metric"})," struct"]}),"\n",(0,t.jsx)(n.li,{children:"Load the custom toml file (if a custom toml file is given)"}),"\n",(0,t.jsxs)(n.li,{children:["Create an ",(0,t.jsx)(n.code,{children:"Exporter"})," object"]}),"\n",(0,t.jsx)(n.li,{children:"Register exporter in prometheus library"}),"\n",(0,t.jsx)(n.li,{children:"Launching a web server to handle incoming requests"}),"\n",(0,t.jsx)(n.li,{children:"Attempt connection to any configured Oracle Database servers"}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["These operations are mainly done in the ",(0,t.jsx)(n.code,{children:"main"})," function."]}),"\n",(0,t.jsx)(n.p,{children:"After this initialization phase, the exporter will wait for the arrival of a request."}),"\n",(0,t.jsxs)(n.p,{children:["Each time, it will iterate over the content of the ",(0,t.jsx)(n.code,{children:"metricsToScrape"})," structure (in the function scrape ",(0,t.jsx)(n.code,{children:"func (e * Export) scrape (ch chan <- prometheus.Metric)"}),")."]}),"\n",(0,t.jsxs)(n.p,{children:["For each element (of ",(0,t.jsx)(n.code,{children:"Metric"})," type), a call to the ",(0,t.jsx)(n.code,{children:"ScrapeMetric"})," function will be made which will itself make a call to the ",(0,t.jsx)(n.code,{children:"ScrapeGenericValues"})," function."]}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"ScrapeGenericValues"})," function will read the information from the ",(0,t.jsx)(n.code,{children:"Metric"})," structure and, depending on the parameters, will generate the metrics to return. In particular, it will use the ",(0,t.jsx)(n.code,{children:"GeneratePrometheusMetrics"})," function which will make SQL calls to the database."]}),"\n",(0,t.jsx)(n.h3,{id:"dockercontainer-build",children:"Docker/container build"}),"\n",(0,t.jsx)(n.p,{children:"To build a container image, run the following command:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"make docker\n"})}),"\n",(0,t.jsx)(n.p,{children:"For ARM:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"make docker-arm\n"})}),"\n",(0,t.jsx)(n.h3,{id:"building-binaries",children:"Building Binaries"}),"\n",(0,t.jsx)(n.p,{children:"Run build:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"make go-build\n"})}),"\n",(0,t.jsxs)(n.p,{children:["This will create binaries and archives inside the ",(0,t.jsx)(n.code,{children:"dist"})," folder for the building operating system."]})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},8453:(e,n,i)=>{i.d(n,{R:()=>s,x:()=>c});var r=i(6540);const t={},o=r.createContext(t);function s(e){const n=r.useContext(o);return r.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:s(e.components),r.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/6ad7f408.79deb557.js b/docs/assets/js/6ad7f408.79deb557.js new file mode 100644 index 00000000..40b940cc --- /dev/null +++ b/docs/assets/js/6ad7f408.79deb557.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[9249],{3416:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>a,contentTitle:()=>o,default:()=>h,frontMatter:()=>t,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"releases/changelog","title":"Changelog","description":"List of changes to the exporter.","source":"@site/versioned_docs/version-2.0.3/releases/changelog.md","sourceDirName":"releases","slug":"/releases/changelog","permalink":"/oracle-db-appdev-monitoring/docs/releases/changelog","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/versioned_docs/version-2.0.3/releases/changelog.md","tags":[],"version":"2.0.3","sidebarPosition":2,"frontMatter":{"title":"Changelog","sidebar_position":2},"sidebar":"tutorialSidebar","previous":{"title":"Roadmap","permalink":"/oracle-db-appdev-monitoring/docs/releases/roadmap"}}');var r=i(4848),l=i(8453);const t={title:"Changelog",sidebar_position:2},o="Release Notes",a={},d=[{value:"Version 2.0.3, August 27, 2025",id:"version-203-august-27-2025",level:3},{value:"Version 2.0.2, June 24, 2025",id:"version-202-june-24-2025",level:3},{value:"Version 2.0.1, June 12, 2025",id:"version-201-june-12-2025",level:3},{value:"Version 2.0.0, May 27, 2025",id:"version-200-may-27-2025",level:3},{value:"Version 1.6.1, May 2, 2025",id:"version-161-may-2-2025",level:3},{value:"Version 1.6.0, April 18, 2025",id:"version-160-april-18-2025",level:3},{value:"Version 1.5.5, March 13, 2025",id:"version-155-march-13-2025",level:3},{value:"Version 1.5.4, March 3, 2025",id:"version-154-march-3-2025",level:3},{value:"Version 1.5.3, January 28, 2025",id:"version-153-january-28-2025",level:3},{value:"Version 1.5.2, December 2, 2024",id:"version-152-december-2-2024",level:3},{value:"Version 1.5.1, October 28, 2024",id:"version-151-october-28-2024",level:3},{value:"Version 1.5.0, September 26, 2024",id:"version-150-september-26-2024",level:3},{value:"Version 1.4.0, September 4, 2024",id:"version-140-september-4-2024",level:3},{value:"Version 1.3.1, July 22, 2024",id:"version-131-july-22-2024",level:3},{value:"Version 1.3.0, June 7, 2024",id:"version-130-june-7-2024",level:3},{value:"Version 1.2.1, April 16, 2024",id:"version-121-april-16-2024",level:3},{value:"Version 1.2.0, January 17, 2024",id:"version-120-january-17-2024",level:3},{value:"Version 1.1.1, November 28, 2023",id:"version-111-november-28-2023",level:3},{value:"Version 1.1, October 27, 2023",id:"version-11-october-27-2023",level:3},{value:"Version 1.0, September 13, 2023",id:"version-10-september-13-2023",level:3}];function c(e){const n={a:"a",code:"code",em:"em",h1:"h1",h3:"h3",header:"header",li:"li",p:"p",ul:"ul",...(0,l.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"release-notes",children:"Release Notes"})}),"\n",(0,r.jsx)(n.p,{children:"List of changes to the exporter."}),"\n",(0,r.jsx)(n.h3,{id:"version-203-august-27-2025",children:"Version 2.0.3, August 27, 2025"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Enable configuration of the prometheus webserver from the config file using the ",(0,r.jsx)(n.code,{children:"web"})," prefix."]}),"\n",(0,r.jsx)(n.li,{children:"Allow loading of database password(s) from a file."}),"\n",(0,r.jsx)(n.li,{children:"Fixed a bug where database type (CDB, PDB, etc.) was not reported in certain situations."}),"\n",(0,r.jsxs)(n.li,{children:["Fixed a bug where literal passwords containing the '$' character (in the config file) would be evaluated as environment variables. To use literal passwords with the '$' character, escape the '$' character with a second '$': ",(0,r.jsx)(n.code,{children:"$test$pwd"})," becomes ",(0,r.jsx)(n.code,{children:"$$test$$pwd"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["Fixed a bug when using ",(0,r.jsx)(n.code,{children:"metrics.scrapeInterval"})," combined with per-metric scrape intervals that made the available metrics data set inconsistent."]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/Supporterino",children:"@Supporterino"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/neilschelly",children:"@neilschelly"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/aberinnj",children:"@aberinnj"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/redelang",children:"@redelang"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/qrkop",children:"@qrkop"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/KevDi",children:"@KevDi"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/bomuva",children:"@bomuva"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/anilmoris",children:"@anilmoris"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/Sycri",children:"@Sycri"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/kizuna-lek",children:"@kizuna-lek"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/rfrozza",children:"@rfrozza"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/neilschelly",children:"@neilschelly"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-202-june-24-2025",children:"Version 2.0.2, June 24, 2025"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Fixed a case-sensitive issue with resource name in the default metrics file."}),"\n",(0,r.jsx)(n.li,{children:"Add query timeouts to initial database connections, which could cause the exporter to hang in multi-database configurations"}),"\n",(0,r.jsx)(n.li,{children:"Fix an issue where rapidly acquiring connections could cause the exporter to crash. This was more common in multi-database configurations, due to the increased number of connection pools."}),"\n",(0,r.jsx)(n.li,{children:"Update some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/rfrozza",children:"@rfrozza"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/neilschelly",children:"@neilschelly"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/rafal-szypulka",children:"@rafal-szypulka"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/darkelfit",children:"@darkelfit"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-201-june-12-2025",children:"Version 2.0.1, June 12, 2025"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Use gv$ views instead of v$ views to allow collection of metrics from all instances in a cluster. (In preparation for RAC support)."}),"\n",(0,r.jsx)(n.li,{children:"Update some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-200-may-27-2025",children:"Version 2.0.0, May 27, 2025"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Fixed an issue with ",(0,r.jsx)(n.code,{children:"scrapeinterval"})," that could cause metrics not to be scraped (#172, #176)."]}),"\n",(0,r.jsxs)(n.li,{children:["Added configuration through a YAML file, passed using the ",(0,r.jsx)(n.code,{children:"--config.file"})," command-line argument. Backwards compatibility is maintained for the command-line arguments, through it is recommended to use the configuration file from the 2.0.0 release onward. It is not recommended to use a combination of command-line arguments and the configuration file."]}),"\n",(0,r.jsx)(n.li,{children:"Added support for multiple databases through the configuration file. As many database instances may be specified as needed, which will be scraped concurrently (#89)."}),"\n",(0,r.jsx)(n.li,{children:"Updated provided dashboards."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-161-may-2-2025",children:"Version 1.6.1, May 2, 2025"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Deepak A."}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-160-april-18-2025",children:"Version 1.6.0, April 18, 2025"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Added support for Azure Key Vault (#200)."}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/4Aiur",children:"4Aiur"})," added missing grants for alert log to the demo environment (#207)."]}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Brian, Damian et al."}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/4Aiur",children:"4Aiur"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-155-march-13-2025",children:"Version 1.5.5, March 13, 2025"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/VictorErmakov",children:"@VictorErmakov"})," updated the docker-compose sample with connection pool parameters to avoid fast connect cycling (#191)."]}),"\n",(0,r.jsx)(n.li,{children:"Update default values for connection pool parameters to use go-sql pooling by default to avoid fast connet cycling."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/VictorErmakov",children:"@VictorErmakov"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-154-march-3-2025",children:"Version 1.5.4, March 3, 2025"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Based of this recommendation from ",(0,r.jsx)(n.a,{href:"https://github.com/godror/godror?tab=readme-ov-file#pooling",children:"godror"}),", which relates to the two following items, and in discussion with the ODPI-C team, we have introduced additional parameters to allow you to set connection pool parameters, and have set defaults which will avoid fast connect cycling. It is our expectation that a fix may be produced in the underlying ODPI-C library for the underlying issue. In the mean time, these changes will avoid the conditions under which the error can occur."]}),"\n",(0,r.jsx)(n.li,{children:"Fix malloc error (#177, #181)."}),"\n",(0,r.jsx)(n.li,{children:"Fix intermittent connection issues with ADB-S when exporter is run in a container (#169)."}),"\n",(0,r.jsx)(n.li,{children:"Fix Multiple custom metrics files overwrite one another (#179)."}),"\n",(0,r.jsx)(n.li,{children:"Replace go-kit/log with log/slog, due to upstream changes in prometheus/common."}),"\n",(0,r.jsxs)(n.li,{children:["Add support for additional admin roles, expanding list of options for ",(0,r.jsx)(n.code,{children:"DB_ROLE"})," to ",(0,r.jsx)(n.code,{children:"SYSDBA"}),", ",(0,r.jsx)(n.code,{children:"SYSOPER"}),", ",(0,r.jsx)(n.code,{children:"SYSBACKUP"}),", ",(0,r.jsx)(n.code,{children:"SYSDG"}),", ",(0,r.jsx)(n.code,{children:"SYSKM"}),", ",(0,r.jsx)(n.code,{children:"SYSRAC"})," and ",(0,r.jsx)(n.code,{children:"SYSASM"})," (#180)."]}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/Jman1993",children:"@Jman1993"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/oey",children:"@oey"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/jlembeck06",children:"@jlembeck06"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/Jman1993",children:"@Jman1993"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/PeterP55P",children:"@PeterP55P"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/rlagyu0",children:"@rlagyu0"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/Sycri",children:"@Sycri"})}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Thank you to ",(0,r.jsx)(n.a,{href:"https://github.com/tgulacsi",children:"@tgulacsi"})," for changes in godror (",(0,r.jsx)(n.a,{href:"https://github.com/godror/godror/issues/361",children:"https://github.com/godror/godror/issues/361"}),", ",(0,r.jsx)(n.a,{href:"https://github.com/godror/godror/issues/360",children:"https://github.com/godror/godror/issues/360"}),"), and to ",(0,r.jsx)(n.a,{href:"https://github.com/cjbj",children:"@cjbj"})," and ",(0,r.jsx)(n.a,{href:"https://github.com/sudarshan12s",children:"@sudarshan12s"})," for support and guidance from ODPI-C (",(0,r.jsx)(n.a,{href:"https://github.com/oracle/odpi",children:"https://github.com/oracle/odpi"}),")."]}),"\n",(0,r.jsx)(n.p,{children:"In this release, we also continued some minor code refactoring."}),"\n",(0,r.jsx)(n.h3,{id:"version-153-january-28-2025",children:"Version 1.5.3, January 28, 2025"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.em,{children:"Known issue"}),": This release has a known issue that results in the error message ",(0,r.jsx)(n.code,{children:"malloc(): unsorted double linked list corrupted"}),".\nWe recommend staying on 1.5.2 until a new release with a fix is available. We hope to have a fix by early March."]}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Fix over-zealous supression of errors when ",(0,r.jsx)(n.code,{children:"ignorezeroresult = true"})," (#168)."]}),"\n",(0,r.jsxs)(n.li,{children:["When ",(0,r.jsx)(n.code,{children:"scrapeinterval"})," is set, do first scrape immediately, not after the interval (#166)."]}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/redelang",children:"@redelang"})}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"In this release, we also started some minor code refactoring."}),"\n",(0,r.jsx)(n.h3,{id:"version-152-december-2-2024",children:"Version 1.5.2, December 2, 2024"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Update the metric defintion for tablespace usage to report more accurate temp space usage."}),"\n",(0,r.jsx)(n.li,{children:"Revert InstantClient to 21c version due to ADB connectivity issue."}),"\n",(0,r.jsx)(n.li,{children:"Update documentation to explain how to obtain credentials from a wallet."}),"\n",(0,r.jsx)(n.li,{children:"Fix race condition on err variable in scrape() func (by @valrusu)."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/aureliocirella",children:"@aureliocirella"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/mitoeth",children:"@mitoeth"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/valrusu",children:"@valrusu"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-151-october-28-2024",children:"Version 1.5.1, October 28, 2024"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Added support for using the ",(0,r.jsx)(n.code,{children:"TNS_ADMIN"})," environment variable, which fixes an issue when connecting to Autonomous Database instances using TNS name."]}),"\n",(0,r.jsx)(n.li,{children:"Updated InstantClient to 23ai version for amd64 and latest available 19.24 version for arm64."}),"\n",(0,r.jsxs)(n.li,{children:["Fixed an issue with wrong ",(0,r.jsx)(n.code,{children:"LD_LIBRARY_PATH"})," on some platforms. (#136)"]}),"\n",(0,r.jsxs)(n.li,{children:["Added documentation and an example of using the ",(0,r.jsx)(n.code,{children:"scrapeinterval"})," setting to change the interval at which a certain metric is colected."]}),"\n",(0,r.jsx)(n.li,{children:"Added notes to documentation for extra security parameters needed when using a wallet with Podman."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-150-september-26-2024",children:"Version 1.5.0, September 26, 2024"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Support for running the exporter on ARM processors (darwin and linux)."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n",(0,r.jsx)(n.li,{children:'Updated the "test/demo environment" to use newer version of Oracle Database (23.5.0.24.07) and faster startup.'}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-140-september-4-2024",children:"Version 1.4.0, September 4, 2024"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Allow multiple custom metrics definition files."}),"\n",(0,r.jsx)(n.li,{children:"Allow query timeout per-metric."}),"\n",(0,r.jsx)(n.li,{children:"Allow scrape interval per-metric."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-131-july-22-2024",children:"Version 1.3.1, July 22, 2024"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Alert logs can be disabled by setting parameter ",(0,r.jsx)(n.code,{children:"log.disable"})," to ",(0,r.jsx)(n.code,{children:"1"}),"."]}),"\n",(0,r.jsx)(n.li,{children:"Alert log exporter will stop if it gets three consecutive failures."}),"\n",(0,r.jsx)(n.li,{children:"Updated the list of required permissions."}),"\n",(0,r.jsx)(n.li,{children:"Updated the TxEventQ sample dashboard."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/tux-jochen",children:"@tux-jochen"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-130-june-7-2024",children:"Version 1.3.0, June 7, 2024"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Alert logs can be exported for collection by a log reader like Promtail or FluentBit. Default\noutput to ",(0,r.jsx)(n.code,{children:"/log/alert.log"})," in JSON format."]}),"\n",(0,r.jsx)(n.li,{children:"Provide ability to connect as SYSDBA or SYSOPER by setting DB_ROLE."}),"\n",(0,r.jsx)(n.li,{children:"New default metric is added to report the type of database connected to (CDB or PDB)."}),"\n",(0,r.jsx)(n.li,{children:"New default metrics are added for cache hit ratios."}),"\n",(0,r.jsx)(n.li,{children:"Default metrics updated to suppress spurious warnings in log."}),"\n",(0,r.jsx)(n.li,{children:"Wait class metric updated to use a better query."}),"\n",(0,r.jsx)(n.li,{children:"The sample dashboard is updated to include new metrics."}),"\n",(0,r.jsx)(n.li,{children:"Fixed a bug which prevented periodic freeing of memory."}),"\n",(0,r.jsx)(n.li,{children:"Set CLIENT_INFO to a meaningful value."}),"\n",(0,r.jsx)(n.li,{children:"Update Go toolchain to 1.22.4."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/pioro",children:"@pioro"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/savoir81",children:"@savoir81"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-121-april-16-2024",children:"Version 1.2.1, April 16, 2024"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Accept max idle and open connections settings as parameters."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-120-january-17-2024",children:"Version 1.2.0, January 17, 2024"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Introduced a new feature to periodically restart the process if requested."}),"\n",(0,r.jsx)(n.li,{children:"Introduced a new feature to periodically attempt to free OS memory if requested."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-111-november-28-2023",children:"Version 1.1.1, November 28, 2023"}),"\n",(0,r.jsx)(n.p,{children:"This release just updates some third-party dependencies."}),"\n",(0,r.jsx)(n.h3,{id:"version-11-october-27-2023",children:"Version 1.1, October 27, 2023"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["The query for the standard metric ",(0,r.jsx)(n.code,{children:"wait_class"})," has been updated so that it will work in both container databases\nand pluggable databases, including in Oracle Autonomous Database instances. Note that this query will not return\nany data unless the database instance is under load."]}),"\n",(0,r.jsxs)(n.li,{children:["Support for reading the database password from OCI Vault has been added (see ",(0,r.jsx)(n.a,{href:"/oracle-db-appdev-monitoring/docs/configuration/oci-vault",children:"details"}),")"]}),"\n",(0,r.jsx)(n.li,{children:"Log messages have been improved"}),"\n",(0,r.jsx)(n.li,{children:"Some dependencies have been updated"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-10-september-13-2023",children:"Version 1.0, September 13, 2023"}),"\n",(0,r.jsx)(n.p,{children:"The first production release, v1.0, includes the following features:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["A number of ",(0,r.jsx)(n.a,{href:"/oracle-db-appdev-monitoring/docs/getting-started/default-metrics",children:"standard metrics"})," are exposed,"]}),"\n",(0,r.jsxs)(n.li,{children:["Users can define ",(0,r.jsx)(n.a,{href:"/oracle-db-appdev-monitoring/docs/configuration/custom-metrics",children:"custom metrics"}),","]}),"\n",(0,r.jsx)(n.li,{children:"Oracle regularly reviews third-party licenses and scans the code and images, including transitive/recursive dependencies for issues,"}),"\n",(0,r.jsx)(n.li,{children:"Connection to Oracle can be a basic connection or use an Oracle Wallet and TLS - connection to Oracle Autonomous Database is supported,"}),"\n",(0,r.jsx)(n.li,{children:"Metrics for Oracle Transactional Event Queues are also supported,"}),"\n",(0,r.jsx)(n.li,{children:"A Grafana dashboard is provided for Transactional Event Queues, and"}),"\n",(0,r.jsx)(n.li,{children:"A pre-built container image is provided, based on Oracle Linux, and optimized for size and security."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Note that this exporter uses a different Oracle Database driver which in turn uses code directly written by Oracle to access the database. This driver does require an Oracle client. In this initial release, the client is bundled into the container image, however we intend to make that optional in order to minimize the image size."}),"\n",(0,r.jsx)(n.p,{children:"The interfaces for this version have been kept as close as possible to those of earlier alpha releases in this repository to assist with migration. However, it should be expected that there may be breaking changes in future releases."})]})}function h(e={}){const{wrapper:n}={...(0,l.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},8453:(e,n,i)=>{i.d(n,{R:()=>t,x:()=>o});var s=i(6540);const r={},l=s.createContext(r);function t(e){const n=s.useContext(l);return s.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:t(e.components),s.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/6e6103cc.231b1b1b.js b/docs/assets/js/6e6103cc.231b1b1b.js deleted file mode 100644 index 9b93d984..00000000 --- a/docs/assets/js/6e6103cc.231b1b1b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[926],{67:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>d,contentTitle:()=>_,default:()=>i,frontMatter:()=>o,metadata:()=>s,toc:()=>n});const s=JSON.parse('{"id":"getting-started/default-metrics","title":"Default Metrics","description":"The exporter includes default metrics for Oracle Database, and process-specific metrics on the go runtime.","source":"@site/docs/getting-started/default-metrics.md","sourceDirName":"getting-started","slug":"/getting-started/default-metrics","permalink":"/oracle-db-appdev-monitoring/docs/getting-started/default-metrics","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/docs/getting-started/default-metrics.md","tags":[],"version":"current","sidebarPosition":2,"frontMatter":{"title":"Default Metrics","sidebar_position":2},"sidebar":"tutorialSidebar","previous":{"title":"Installation","permalink":"/oracle-db-appdev-monitoring/docs/getting-started/basics"},"next":{"title":"Kubernetes","permalink":"/oracle-db-appdev-monitoring/docs/getting-started/kubernetes"}}');var r=t(4848),c=t(8453);const o={title:"Default Metrics",sidebar_position:2},_="Default Metrics",d={},n=[];function l(e){const a={a:"a",code:"code",h1:"h1",header:"header",p:"p",pre:"pre",...(0,c.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(a.header,{children:(0,r.jsx)(a.h1,{id:"default-metrics",children:"Default Metrics"})}),"\n",(0,r.jsxs)(a.p,{children:["The exporter includes ",(0,r.jsx)(a.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/collector/default_metrics.toml",children:"default metrics"})," for Oracle Database, and process-specific metrics on the ",(0,r.jsx)(a.code,{children:"go"})," runtime."]}),"\n",(0,r.jsxs)(a.p,{children:["You can find the exporter's metric schema in the ",(0,r.jsx)(a.a,{href:"/oracle-db-appdev-monitoring/docs/configuration/custom-metrics#metric-schema",children:"Custom Metrics configuration"}),"."]}),"\n",(0,r.jsx)(a.p,{children:'The following metrics are included by default. The values given are a sample for a single database, "db1":'}),"\n",(0,r.jsx)(a.pre,{children:(0,r.jsx)(a.code,{className:"language-bash",children:'# HELP oracledb_activity_execute_count Generic counter metric from gv$sysstat view in Oracle.\n# TYPE oracledb_activity_execute_count gauge\noracledb_activity_execute_count{database="db1"} 6.212049e+06\n# HELP oracledb_activity_parse_count_total Generic counter metric from gv$sysstat view in Oracle.\n# TYPE oracledb_activity_parse_count_total gauge\noracledb_activity_parse_count_total{database="db1"} 1.054178e+06\n# HELP oracledb_activity_user_commits Generic counter metric from gv$sysstat view in Oracle.\n# TYPE oracledb_activity_user_commits gauge\noracledb_activity_user_commits{database="db1"} 86538\n# HELP oracledb_activity_user_rollbacks Generic counter metric from gv$sysstat view in Oracle.\n# TYPE oracledb_activity_user_rollbacks gauge\noracledb_activity_user_rollbacks{database="db1"} 18\n# HELP oracledb_db_platform_value Database platform\n# TYPE oracledb_db_platform_value gauge\noracledb_db_platform_value{database="db1",platform_name="Linux OS (AARCH64)"} 1\n# HELP oracledb_db_system_value Database system resources metric\n# TYPE oracledb_db_system_value gauge\noracledb_db_system_value{database="db1",name="cpu_count"} 2\noracledb_db_system_value{database="db1",name="pga_aggregate_limit"} 2.147483648e+09\noracledb_db_system_value{database="db1",name="sga_max_size"} 1.610612736e+09\n# HELP oracledb_dbtype Type of database the exporter is connected to (0=non-CDB, 1=CDB, >1=PDB).\n# TYPE oracledb_dbtype gauge\noracledb_dbtype{database="db1"} 3\n# HELP oracledb_exporter_build_info A metric with a constant \'1\' value labeled by version, revision, branch, goversion from which oracledb_exporter was built, and the goos and goarch for the build.\n# TYPE oracledb_exporter_build_info gauge\noracledb_exporter_build_info{branch="",goarch="arm64",goos="darwin",goversion="go1.24.5",revision="unknown",tags="unknown",version=""} 1\n# HELP oracledb_exporter_last_scrape_duration_seconds Duration of the last scrape of metrics from Oracle DB.\n# TYPE oracledb_exporter_last_scrape_duration_seconds gauge\noracledb_exporter_last_scrape_duration_seconds 0.05714725\n# HELP oracledb_exporter_last_scrape_error Whether the last scrape of metrics from Oracle DB resulted in an error (1 for error, 0 for success).\n# TYPE oracledb_exporter_last_scrape_error gauge\noracledb_exporter_last_scrape_error 0\n# HELP oracledb_exporter_scrapes_total Total number of times Oracle DB was scraped for metrics.\n# TYPE oracledb_exporter_scrapes_total counter\noracledb_exporter_scrapes_total 2\n# HELP oracledb_process_count Gauge metric with count of processes.\n# TYPE oracledb_process_count gauge\noracledb_process_count{database="db1"} 85\n# HELP oracledb_sessions_value Gauge metric with count of sessions by status and type.\n# TYPE oracledb_sessions_value gauge\noracledb_sessions_value{database="db1",status="ACTIVE",type="BACKGROUND"} 61\noracledb_sessions_value{database="db1",status="ACTIVE",type="USER"} 2\noracledb_sessions_value{database="db1",status="INACTIVE",type="USER"} 19\n# HELP oracledb_tablespace_bytes Generic counter metric of tablespaces bytes in Oracle.\n# TYPE oracledb_tablespace_bytes gauge\noracledb_tablespace_bytes{database="db1",tablespace="SYSAUX",type="PERMANENT"} 7.7430784e+08\noracledb_tablespace_bytes{database="db1",tablespace="SYSTEM",type="PERMANENT"} 3.18963712e+08\noracledb_tablespace_bytes{database="db1",tablespace="TEMP",type="TEMPORARY"} 7.340032e+06\noracledb_tablespace_bytes{database="db1",tablespace="UNDOTBS1",type="UNDO"} 2.1364736e+07\noracledb_tablespace_bytes{database="db1",tablespace="USERS",type="PERMANENT"} 7.340032e+06\n# HELP oracledb_tablespace_free Generic counter metric of tablespaces free bytes in Oracle.\n# TYPE oracledb_tablespace_free gauge\noracledb_tablespace_free{database="db1",tablespace="SYSAUX",type="PERMANENT"} 7.5289739264e+10\noracledb_tablespace_free{database="db1",tablespace="SYSTEM",type="PERMANENT"} 7.524491264e+10\noracledb_tablespace_free{database="db1",tablespace="TEMP",type="TEMPORARY"} 1.3631488e+07\noracledb_tablespace_free{database="db1",tablespace="UNDOTBS1",type="UNDO"} 3.518435069952e+13\noracledb_tablespace_free{database="db1",tablespace="USERS",type="PERMANENT"} 3.4352381952e+10\n# HELP oracledb_tablespace_max_bytes Generic counter metric of tablespaces max bytes in Oracle.\n# TYPE oracledb_tablespace_max_bytes gauge\noracledb_tablespace_max_bytes{database="db1",tablespace="SYSAUX",type="PERMANENT"} 7.6064047104e+10\noracledb_tablespace_max_bytes{database="db1",tablespace="SYSTEM",type="PERMANENT"} 7.5563876352e+10\noracledb_tablespace_max_bytes{database="db1",tablespace="TEMP",type="TEMPORARY"} 2.097152e+07\noracledb_tablespace_max_bytes{database="db1",tablespace="UNDOTBS1",type="UNDO"} 3.5184372064256e+13\noracledb_tablespace_max_bytes{database="db1",tablespace="USERS",type="PERMANENT"} 3.4359721984e+10\n# HELP oracledb_tablespace_used_percent Gauge metric showing as a percentage of how much of the tablespace has been used.\n# TYPE oracledb_tablespace_used_percent gauge\noracledb_tablespace_used_percent{database="db1",tablespace="SYSAUX",type="PERMANENT"} 1.0179682379262742\noracledb_tablespace_used_percent{database="db1",tablespace="SYSTEM",type="PERMANENT"} 0.4221113677574824\noracledb_tablespace_used_percent{database="db1",tablespace="TEMP",type="TEMPORARY"} 0.35\noracledb_tablespace_used_percent{database="db1",tablespace="UNDOTBS1",type="UNDO"} 6.072223190734319e-05\noracledb_tablespace_used_percent{database="db1",tablespace="USERS",type="PERMANENT"} 0.021362314873845517\n# HELP oracledb_top_sql_elapsed SQL statement elapsed time running\n# TYPE oracledb_top_sql_elapsed gauge\noracledb_top_sql_elapsed{database="db1",sql_id="0npm6czzaj44m",sql_text="SELECT idx_objn FROM vecsys.vector$index WHERE JSON_VAL"} 6.118614\noracledb_top_sql_elapsed{database="db1",sql_id="0sbbcuruzd66f",sql_text="select /*+ rule */ bucket_cnt, row_cnt, cache_cnt, null"} 1.538687\noracledb_top_sql_elapsed{database="db1",sql_id="121ffmrc95v7g",sql_text="select i.obj#,i.ts#,i.file#,i.block#,i.intcols,i.type#,"} 2.200984\noracledb_top_sql_elapsed{database="db1",sql_id="61znfd8fvgha6",sql_text="SELECT new.sql_seq, old.plan_hash_value, sqlset_row(ne"} 2.628263\noracledb_top_sql_elapsed{database="db1",sql_id="68dw2nt8wtunk",sql_text="select originating_timestamp, module_id, execution_cont"} 2.296924\noracledb_top_sql_elapsed{database="db1",sql_id="9bd61v53p81sk",sql_text="begin prvt_hdm.auto_execute( :dbid , :inst_num , :end_s"} 1.67611\noracledb_top_sql_elapsed{database="db1",sql_id="aba13jkkk3fts",sql_text="SELECT idx_objn, json_value(IDX_SPARE2, \'$.counter\') FR"} 3.010397\noracledb_top_sql_elapsed{database="db1",sql_id="afcz0dh295hzp",sql_text=" SELECT /*+ first_rows(1) */ sql_id, force_matching_sig"} 2.246092\noracledb_top_sql_elapsed{database="db1",sql_id="ampw9ddqufjd3",sql_text="begin /*KAPI:capture*/ dbms_auto_index_internal.capture"} 4.102646\noracledb_top_sql_elapsed{database="db1",sql_id="avzy19hxu6gg4",sql_text="SELECT VALUE(P) FROM TABLE(DBMS_SQLTUNE.SELECT_CURSOR_C"} 2.564301\noracledb_top_sql_elapsed{database="db1",sql_id="b39m8n96gxk7c",sql_text="call dbms_autotask_prvt.run_autotask ( :0,:1 )"} 4.418653\noracledb_top_sql_elapsed{database="db1",sql_id="bj9ajtpfh9f41",sql_text=" declare purge_scn "} 6.425015\noracledb_top_sql_elapsed{database="db1",sql_id="bq819r502v7u2",sql_text="select originating_timestamp, module_id, execution_cont"} 3.676572\noracledb_top_sql_elapsed{database="db1",sql_id="ddrfu7d7hbkym",sql_text=" select count(1), partition_id "} 1.870379\noracledb_top_sql_elapsed{database="db1",sql_id="f6w8rqdkx0bnv",sql_text="SELECT * FROM ( SELECT /*+ ordered use_nl(o c cu h) ind"} 1.895947\n# HELP oracledb_up Whether the Oracle database server is up.\n# TYPE oracledb_up gauge\noracledb_up{database="db1"} 1\n# HELP oracledb_wait_time_administrative counter metric from system_wait_class view in Oracle.\n# TYPE oracledb_wait_time_administrative counter\noracledb_wait_time_administrative{database="db1"} 0\n# HELP oracledb_wait_time_application counter metric from system_wait_class view in Oracle.\n# TYPE oracledb_wait_time_application counter\noracledb_wait_time_application{database="db1"} 0.73\n# HELP oracledb_wait_time_commit counter metric from system_wait_class view in Oracle.\n# TYPE oracledb_wait_time_commit counter\noracledb_wait_time_commit{database="db1"} 0.17\n# HELP oracledb_wait_time_concurrency counter metric from system_wait_class view in Oracle.\n# TYPE oracledb_wait_time_concurrency counter\noracledb_wait_time_concurrency{database="db1"} 6.8\n# HELP oracledb_wait_time_configuration counter metric from system_wait_class view in Oracle.\n# TYPE oracledb_wait_time_configuration counter\noracledb_wait_time_configuration{database="db1"} 19.71\n# HELP oracledb_wait_time_network counter metric from system_wait_class view in Oracle.\n# TYPE oracledb_wait_time_network counter\noracledb_wait_time_network{database="db1"} 0.29\n# HELP oracledb_wait_time_other counter metric from system_wait_class view in Oracle.\n# TYPE oracledb_wait_time_other counter\noracledb_wait_time_other{database="db1"} 6.02\n# HELP oracledb_wait_time_scheduler counter metric from system_wait_class view in Oracle.\n# TYPE oracledb_wait_time_scheduler counter\noracledb_wait_time_scheduler{database="db1"} 4.01\n# HELP oracledb_wait_time_system_io counter metric from system_wait_class view in Oracle.\n# TYPE oracledb_wait_time_system_io counter\noracledb_wait_time_system_io{database="db1"} 0.13\n# HELP oracledb_wait_time_user_io counter metric from system_wait_class view in Oracle.\n# TYPE oracledb_wait_time_user_io counter\noracledb_wait_time_user_io{database="db1"} 12.38\n'})})]})}function i(e={}){const{wrapper:a}={...(0,c.R)(),...e.components};return a?(0,r.jsx)(a,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},8453:(e,a,t)=>{t.d(a,{R:()=>o,x:()=>_});var s=t(6540);const r={},c=s.createContext(r);function o(e){const a=s.useContext(c);return s.useMemo(function(){return"function"==typeof e?e(a):{...a,...e}},[a,e])}function _(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),s.createElement(c.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/6e6103cc.817fcf37.js b/docs/assets/js/6e6103cc.817fcf37.js new file mode 100644 index 00000000..13b3d2d7 --- /dev/null +++ b/docs/assets/js/6e6103cc.817fcf37.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[9926],{67:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>n,contentTitle:()=>_,default:()=>i,frontMatter:()=>o,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"getting-started/default-metrics","title":"Default Metrics","description":"The exporter includes default metrics for Oracle Database, and process-specific metrics on the go runtime.","source":"@site/docs/getting-started/default-metrics.md","sourceDirName":"getting-started","slug":"/getting-started/default-metrics","permalink":"/oracle-db-appdev-monitoring/docs/next/getting-started/default-metrics","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/docs/getting-started/default-metrics.md","tags":[],"version":"current","sidebarPosition":2,"frontMatter":{"title":"Default Metrics","sidebar_position":2},"sidebar":"tutorialSidebar","previous":{"title":"Installation","permalink":"/oracle-db-appdev-monitoring/docs/next/getting-started/basics"},"next":{"title":"Kubernetes","permalink":"/oracle-db-appdev-monitoring/docs/next/getting-started/kubernetes"}}');var r=t(4848),c=t(8453);const o={title:"Default Metrics",sidebar_position:2},_="Default Metrics",n={},d=[];function l(e){const a={a:"a",code:"code",h1:"h1",header:"header",p:"p",pre:"pre",...(0,c.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(a.header,{children:(0,r.jsx)(a.h1,{id:"default-metrics",children:"Default Metrics"})}),"\n",(0,r.jsxs)(a.p,{children:["The exporter includes ",(0,r.jsx)(a.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/collector/default_metrics.toml",children:"default metrics"})," for Oracle Database, and process-specific metrics on the ",(0,r.jsx)(a.code,{children:"go"})," runtime."]}),"\n",(0,r.jsxs)(a.p,{children:["You can find the exporter's metric schema in the ",(0,r.jsx)(a.a,{href:"/oracle-db-appdev-monitoring/docs/next/configuration/custom-metrics#metric-schema",children:"Custom Metrics configuration"}),"."]}),"\n",(0,r.jsx)(a.p,{children:'The following metrics are included by default. The values given are a sample for a single database, "db1":'}),"\n",(0,r.jsx)(a.pre,{children:(0,r.jsx)(a.code,{className:"language-bash",children:'# HELP oracledb_activity_execute_count Generic counter metric from gv$sysstat view in Oracle.\n# TYPE oracledb_activity_execute_count gauge\noracledb_activity_execute_count{database="db1"} 6.212049e+06\n# HELP oracledb_activity_parse_count_total Generic counter metric from gv$sysstat view in Oracle.\n# TYPE oracledb_activity_parse_count_total gauge\noracledb_activity_parse_count_total{database="db1"} 1.054178e+06\n# HELP oracledb_activity_user_commits Generic counter metric from gv$sysstat view in Oracle.\n# TYPE oracledb_activity_user_commits gauge\noracledb_activity_user_commits{database="db1"} 86538\n# HELP oracledb_activity_user_rollbacks Generic counter metric from gv$sysstat view in Oracle.\n# TYPE oracledb_activity_user_rollbacks gauge\noracledb_activity_user_rollbacks{database="db1"} 18\n# HELP oracledb_db_platform_value Database platform\n# TYPE oracledb_db_platform_value gauge\noracledb_db_platform_value{database="db1",platform_name="Linux OS (AARCH64)"} 1\n# HELP oracledb_db_system_value Database system resources metric\n# TYPE oracledb_db_system_value gauge\noracledb_db_system_value{database="db1",name="cpu_count"} 2\noracledb_db_system_value{database="db1",name="pga_aggregate_limit"} 2.147483648e+09\noracledb_db_system_value{database="db1",name="sga_max_size"} 1.610612736e+09\n# HELP oracledb_dbtype Type of database the exporter is connected to (0=non-CDB, 1=CDB, >1=PDB).\n# TYPE oracledb_dbtype gauge\noracledb_dbtype{database="db1"} 3\n# HELP oracledb_exporter_build_info A metric with a constant \'1\' value labeled by version, revision, branch, goversion from which oracledb_exporter was built, and the goos and goarch for the build.\n# TYPE oracledb_exporter_build_info gauge\noracledb_exporter_build_info{branch="",goarch="arm64",goos="darwin",goversion="go1.24.5",revision="unknown",tags="unknown",version=""} 1\n# HELP oracledb_exporter_last_scrape_duration_seconds Duration of the last scrape of metrics from Oracle DB.\n# TYPE oracledb_exporter_last_scrape_duration_seconds gauge\noracledb_exporter_last_scrape_duration_seconds 0.05714725\n# HELP oracledb_exporter_last_scrape_error Whether the last scrape of metrics from Oracle DB resulted in an error (1 for error, 0 for success).\n# TYPE oracledb_exporter_last_scrape_error gauge\noracledb_exporter_last_scrape_error 0\n# HELP oracledb_exporter_scrapes_total Total number of times Oracle DB was scraped for metrics.\n# TYPE oracledb_exporter_scrapes_total counter\noracledb_exporter_scrapes_total 2\n# HELP oracledb_process_count Gauge metric with count of processes.\n# TYPE oracledb_process_count gauge\noracledb_process_count{database="db1"} 85\n# HELP oracledb_sessions_value Gauge metric with count of sessions by status and type.\n# TYPE oracledb_sessions_value gauge\noracledb_sessions_value{database="db1",status="ACTIVE",type="BACKGROUND"} 61\noracledb_sessions_value{database="db1",status="ACTIVE",type="USER"} 2\noracledb_sessions_value{database="db1",status="INACTIVE",type="USER"} 19\n# HELP oracledb_tablespace_bytes Generic counter metric of tablespaces bytes in Oracle.\n# TYPE oracledb_tablespace_bytes gauge\noracledb_tablespace_bytes{database="db1",tablespace="SYSAUX",type="PERMANENT"} 7.7430784e+08\noracledb_tablespace_bytes{database="db1",tablespace="SYSTEM",type="PERMANENT"} 3.18963712e+08\noracledb_tablespace_bytes{database="db1",tablespace="TEMP",type="TEMPORARY"} 7.340032e+06\noracledb_tablespace_bytes{database="db1",tablespace="UNDOTBS1",type="UNDO"} 2.1364736e+07\noracledb_tablespace_bytes{database="db1",tablespace="USERS",type="PERMANENT"} 7.340032e+06\n# HELP oracledb_tablespace_free Generic counter metric of tablespaces free bytes in Oracle.\n# TYPE oracledb_tablespace_free gauge\noracledb_tablespace_free{database="db1",tablespace="SYSAUX",type="PERMANENT"} 7.5289739264e+10\noracledb_tablespace_free{database="db1",tablespace="SYSTEM",type="PERMANENT"} 7.524491264e+10\noracledb_tablespace_free{database="db1",tablespace="TEMP",type="TEMPORARY"} 1.3631488e+07\noracledb_tablespace_free{database="db1",tablespace="UNDOTBS1",type="UNDO"} 3.518435069952e+13\noracledb_tablespace_free{database="db1",tablespace="USERS",type="PERMANENT"} 3.4352381952e+10\n# HELP oracledb_tablespace_max_bytes Generic counter metric of tablespaces max bytes in Oracle.\n# TYPE oracledb_tablespace_max_bytes gauge\noracledb_tablespace_max_bytes{database="db1",tablespace="SYSAUX",type="PERMANENT"} 7.6064047104e+10\noracledb_tablespace_max_bytes{database="db1",tablespace="SYSTEM",type="PERMANENT"} 7.5563876352e+10\noracledb_tablespace_max_bytes{database="db1",tablespace="TEMP",type="TEMPORARY"} 2.097152e+07\noracledb_tablespace_max_bytes{database="db1",tablespace="UNDOTBS1",type="UNDO"} 3.5184372064256e+13\noracledb_tablespace_max_bytes{database="db1",tablespace="USERS",type="PERMANENT"} 3.4359721984e+10\n# HELP oracledb_tablespace_used_percent Gauge metric showing as a percentage of how much of the tablespace has been used.\n# TYPE oracledb_tablespace_used_percent gauge\noracledb_tablespace_used_percent{database="db1",tablespace="SYSAUX",type="PERMANENT"} 1.0179682379262742\noracledb_tablespace_used_percent{database="db1",tablespace="SYSTEM",type="PERMANENT"} 0.4221113677574824\noracledb_tablespace_used_percent{database="db1",tablespace="TEMP",type="TEMPORARY"} 0.35\noracledb_tablespace_used_percent{database="db1",tablespace="UNDOTBS1",type="UNDO"} 6.072223190734319e-05\noracledb_tablespace_used_percent{database="db1",tablespace="USERS",type="PERMANENT"} 0.021362314873845517\n# HELP oracledb_top_sql_elapsed SQL statement elapsed time running\n# TYPE oracledb_top_sql_elapsed gauge\noracledb_top_sql_elapsed{database="db1",sql_id="0npm6czzaj44m",sql_text="SELECT idx_objn FROM vecsys.vector$index WHERE JSON_VAL"} 6.118614\noracledb_top_sql_elapsed{database="db1",sql_id="0sbbcuruzd66f",sql_text="select /*+ rule */ bucket_cnt, row_cnt, cache_cnt, null"} 1.538687\noracledb_top_sql_elapsed{database="db1",sql_id="121ffmrc95v7g",sql_text="select i.obj#,i.ts#,i.file#,i.block#,i.intcols,i.type#,"} 2.200984\noracledb_top_sql_elapsed{database="db1",sql_id="61znfd8fvgha6",sql_text="SELECT new.sql_seq, old.plan_hash_value, sqlset_row(ne"} 2.628263\noracledb_top_sql_elapsed{database="db1",sql_id="68dw2nt8wtunk",sql_text="select originating_timestamp, module_id, execution_cont"} 2.296924\noracledb_top_sql_elapsed{database="db1",sql_id="9bd61v53p81sk",sql_text="begin prvt_hdm.auto_execute( :dbid , :inst_num , :end_s"} 1.67611\noracledb_top_sql_elapsed{database="db1",sql_id="aba13jkkk3fts",sql_text="SELECT idx_objn, json_value(IDX_SPARE2, \'$.counter\') FR"} 3.010397\noracledb_top_sql_elapsed{database="db1",sql_id="afcz0dh295hzp",sql_text=" SELECT /*+ first_rows(1) */ sql_id, force_matching_sig"} 2.246092\noracledb_top_sql_elapsed{database="db1",sql_id="ampw9ddqufjd3",sql_text="begin /*KAPI:capture*/ dbms_auto_index_internal.capture"} 4.102646\noracledb_top_sql_elapsed{database="db1",sql_id="avzy19hxu6gg4",sql_text="SELECT VALUE(P) FROM TABLE(DBMS_SQLTUNE.SELECT_CURSOR_C"} 2.564301\noracledb_top_sql_elapsed{database="db1",sql_id="b39m8n96gxk7c",sql_text="call dbms_autotask_prvt.run_autotask ( :0,:1 )"} 4.418653\noracledb_top_sql_elapsed{database="db1",sql_id="bj9ajtpfh9f41",sql_text=" declare purge_scn "} 6.425015\noracledb_top_sql_elapsed{database="db1",sql_id="bq819r502v7u2",sql_text="select originating_timestamp, module_id, execution_cont"} 3.676572\noracledb_top_sql_elapsed{database="db1",sql_id="ddrfu7d7hbkym",sql_text=" select count(1), partition_id "} 1.870379\noracledb_top_sql_elapsed{database="db1",sql_id="f6w8rqdkx0bnv",sql_text="SELECT * FROM ( SELECT /*+ ordered use_nl(o c cu h) ind"} 1.895947\n# HELP oracledb_up Whether the Oracle database server is up.\n# TYPE oracledb_up gauge\noracledb_up{database="db1"} 1\n# HELP oracledb_wait_time_administrative counter metric from system_wait_class view in Oracle.\n# TYPE oracledb_wait_time_administrative counter\noracledb_wait_time_administrative{database="db1"} 0\n# HELP oracledb_wait_time_application counter metric from system_wait_class view in Oracle.\n# TYPE oracledb_wait_time_application counter\noracledb_wait_time_application{database="db1"} 0.73\n# HELP oracledb_wait_time_commit counter metric from system_wait_class view in Oracle.\n# TYPE oracledb_wait_time_commit counter\noracledb_wait_time_commit{database="db1"} 0.17\n# HELP oracledb_wait_time_concurrency counter metric from system_wait_class view in Oracle.\n# TYPE oracledb_wait_time_concurrency counter\noracledb_wait_time_concurrency{database="db1"} 6.8\n# HELP oracledb_wait_time_configuration counter metric from system_wait_class view in Oracle.\n# TYPE oracledb_wait_time_configuration counter\noracledb_wait_time_configuration{database="db1"} 19.71\n# HELP oracledb_wait_time_network counter metric from system_wait_class view in Oracle.\n# TYPE oracledb_wait_time_network counter\noracledb_wait_time_network{database="db1"} 0.29\n# HELP oracledb_wait_time_other counter metric from system_wait_class view in Oracle.\n# TYPE oracledb_wait_time_other counter\noracledb_wait_time_other{database="db1"} 6.02\n# HELP oracledb_wait_time_scheduler counter metric from system_wait_class view in Oracle.\n# TYPE oracledb_wait_time_scheduler counter\noracledb_wait_time_scheduler{database="db1"} 4.01\n# HELP oracledb_wait_time_system_io counter metric from system_wait_class view in Oracle.\n# TYPE oracledb_wait_time_system_io counter\noracledb_wait_time_system_io{database="db1"} 0.13\n# HELP oracledb_wait_time_user_io counter metric from system_wait_class view in Oracle.\n# TYPE oracledb_wait_time_user_io counter\noracledb_wait_time_user_io{database="db1"} 12.38\n'})})]})}function i(e={}){const{wrapper:a}={...(0,c.R)(),...e.components};return a?(0,r.jsx)(a,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},8453:(e,a,t)=>{t.d(a,{R:()=>o,x:()=>_});var s=t(6540);const r={},c=s.createContext(r);function o(e){const a=s.useContext(c);return s.useMemo(function(){return"function"==typeof e?e(a):{...a,...e}},[a,e])}function _(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),s.createElement(c.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/6f6f2b68.116500b3.js b/docs/assets/js/6f6f2b68.116500b3.js deleted file mode 100644 index f0fdd86a..00000000 --- a/docs/assets/js/6f6f2b68.116500b3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[233],{5902:e=>{e.exports=JSON.parse('{"version":{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"OpenTelemetry Metrics for Oracle Database","href":"/oracle-db-appdev-monitoring/docs/intro","docId":"intro","unlisted":false},{"type":"category","label":"Getting Started","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Installation","href":"/oracle-db-appdev-monitoring/docs/getting-started/basics","docId":"getting-started/basics","unlisted":false},{"type":"link","label":"Default Metrics","href":"/oracle-db-appdev-monitoring/docs/getting-started/default-metrics","docId":"getting-started/default-metrics","unlisted":false},{"type":"link","label":"Kubernetes","href":"/oracle-db-appdev-monitoring/docs/getting-started/kubernetes","docId":"getting-started/kubernetes","unlisted":false},{"type":"link","label":"Grafana Dashboards","href":"/oracle-db-appdev-monitoring/docs/getting-started/grafana-dashboards","docId":"getting-started/grafana-dashboards","unlisted":false}],"href":"/oracle-db-appdev-monitoring/docs/category/getting-started"},{"type":"category","label":"Configuration","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Exporter Config File","href":"/oracle-db-appdev-monitoring/docs/configuration/config-file","docId":"configuration/config-file","unlisted":false},{"type":"link","label":"Custom Metrics","href":"/oracle-db-appdev-monitoring/docs/configuration/custom-metrics","docId":"configuration/custom-metrics","unlisted":false},{"type":"link","label":"Multiple Databases","href":"/oracle-db-appdev-monitoring/docs/configuration/multiple-databases","docId":"configuration/multiple-databases","unlisted":false},{"type":"link","label":"Oracle Wallet (mTLS)","href":"/oracle-db-appdev-monitoring/docs/configuration/oracle-wallet","docId":"configuration/oracle-wallet","unlisted":false},{"type":"link","label":"Alert Logs","href":"/oracle-db-appdev-monitoring/docs/configuration/alert-logs","docId":"configuration/alert-logs","unlisted":false},{"type":"link","label":"OCI Vault","href":"/oracle-db-appdev-monitoring/docs/configuration/oci-vault","docId":"configuration/oci-vault","unlisted":false},{"type":"link","label":"Azure Vault","href":"/oracle-db-appdev-monitoring/docs/configuration/azure-vault","docId":"configuration/azure-vault","unlisted":false}],"href":"/oracle-db-appdev-monitoring/docs/category/configuration"},{"type":"category","label":"Advanced","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Configuring the Go Runtime","href":"/oracle-db-appdev-monitoring/docs/advanced/go-runtime","docId":"advanced/go-runtime","unlisted":false},{"type":"link","label":"Monitoring TxEventQ","href":"/oracle-db-appdev-monitoring/docs/advanced/txeventq","docId":"advanced/txeventq","unlisted":false},{"type":"link","label":"Development","href":"/oracle-db-appdev-monitoring/docs/advanced/development","docId":"advanced/development","unlisted":false}],"href":"/oracle-db-appdev-monitoring/docs/category/advanced"},{"type":"category","label":"Releases","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Roadmap","href":"/oracle-db-appdev-monitoring/docs/releases/roadmap","docId":"releases/roadmap","unlisted":false},{"type":"link","label":"Changelog","href":"/oracle-db-appdev-monitoring/docs/releases/changelog","docId":"releases/changelog","unlisted":false}],"href":"/oracle-db-appdev-monitoring/docs/category/releases"}]},"docs":{"advanced/development":{"id":"advanced/development","title":"Development","description":"The exporter is a Go program using the Prometheus SDK.","sidebar":"tutorialSidebar"},"advanced/go-runtime":{"id":"advanced/go-runtime","title":"Configuring the Go Runtime","description":"If you are running in an environment with limited memory, or you are running a large number of exporters, you may want to control the exporter\'s usage of memory.","sidebar":"tutorialSidebar"},"advanced/txeventq":{"id":"advanced/txeventq","title":"Monitoring TxEventQ","description":"Oracle Transactional Event Queues (\\"TxEventQ\\") is a fault-tolerant, scalable, real-time messaging backbone offered by converged Oracle Database that allows you to build an enterprise-class event-driven architectures.","sidebar":"tutorialSidebar"},"configuration/alert-logs":{"id":"configuration/alert-logs","title":"Alert Logs","description":"Collect export alert logs with a log ingestion tool.","sidebar":"tutorialSidebar"},"configuration/azure-vault":{"id":"configuration/azure-vault","title":"Azure Vault","description":"Securely load database credentials from Azure Vault.","sidebar":"tutorialSidebar"},"configuration/config-file":{"id":"configuration/config-file","title":"Exporter Config File","description":"The recommended way to configure the exporter is with the --config.file argument, specifying a YAML configuration file.","sidebar":"tutorialSidebar"},"configuration/custom-metrics":{"id":"configuration/custom-metrics","title":"Custom Metrics","description":"The exporter allows definition of arbitrary custom metrics in one or more TOML or YAML files.","sidebar":"tutorialSidebar"},"configuration/multiple-databases":{"id":"configuration/multiple-databases","title":"Multiple Databases","description":"The exporter may be configured to scrape as many databases as needed.","sidebar":"tutorialSidebar"},"configuration/oci-vault":{"id":"configuration/oci-vault","title":"OCI Vault","description":"Securely load database credentials from OCI Vault.","sidebar":"tutorialSidebar"},"configuration/oracle-wallet":{"id":"configuration/oracle-wallet","title":"Oracle Wallet (mTLS)","description":"For mutual TLS (mTLS) connections, you must use an Oracle Wallet.","sidebar":"tutorialSidebar"},"getting-started/basics":{"id":"getting-started/basics","title":"Installation","description":"In this section you will find information on running the exporter.","sidebar":"tutorialSidebar"},"getting-started/default-metrics":{"id":"getting-started/default-metrics","title":"Default Metrics","description":"The exporter includes default metrics for Oracle Database, and process-specific metrics on the go runtime.","sidebar":"tutorialSidebar"},"getting-started/grafana-dashboards":{"id":"getting-started/grafana-dashboards","title":"Grafana Dashboards","description":"Sample Grafana dashboards are included with the exporter.","sidebar":"tutorialSidebar"},"getting-started/kubernetes":{"id":"getting-started/kubernetes","title":"Kubernetes","description":"You can run the exporter in Kubernetes using provided manifests.","sidebar":"tutorialSidebar"},"intro":{"id":"intro","title":"OpenTelemetry Metrics for Oracle Database","description":"This project aims to provide observability for the Oracle Database so that users can understand performance and diagnose issues easily across applications and database. Over time, this project will provide not just metrics, but also logging and tracing support, and integration into popular frameworks like Spring Boot. The project aims to deliver functionality to support both cloud and on-premises databases, including those running in Kubernetes and containers.","sidebar":"tutorialSidebar"},"releases/changelog":{"id":"releases/changelog","title":"Changelog","description":"List of upcoming and historic changes to the exporter.","sidebar":"tutorialSidebar"},"releases/roadmap":{"id":"releases/roadmap","title":"Roadmap","description":"Planned and upcoming features for the exporter.","sidebar":"tutorialSidebar"}}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/6f6f2b68.8ad1a530.js b/docs/assets/js/6f6f2b68.8ad1a530.js new file mode 100644 index 00000000..dc4ecd02 --- /dev/null +++ b/docs/assets/js/6f6f2b68.8ad1a530.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[6233],{5902:e=>{e.exports=JSON.parse('{"version":{"pluginId":"default","version":"2.0.3","label":"2.0.3","banner":null,"badge":true,"noIndex":false,"className":"docs-version-2.0.3","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"OpenTelemetry Metrics for Oracle Database","href":"/oracle-db-appdev-monitoring/docs/intro","docId":"intro","unlisted":false},{"type":"category","label":"Getting Started","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Installation","href":"/oracle-db-appdev-monitoring/docs/getting-started/basics","docId":"getting-started/basics","unlisted":false},{"type":"link","label":"Default Metrics","href":"/oracle-db-appdev-monitoring/docs/getting-started/default-metrics","docId":"getting-started/default-metrics","unlisted":false},{"type":"link","label":"Kubernetes","href":"/oracle-db-appdev-monitoring/docs/getting-started/kubernetes","docId":"getting-started/kubernetes","unlisted":false},{"type":"link","label":"Grafana Dashboards","href":"/oracle-db-appdev-monitoring/docs/getting-started/grafana-dashboards","docId":"getting-started/grafana-dashboards","unlisted":false}],"href":"/oracle-db-appdev-monitoring/docs/category/getting-started"},{"type":"category","label":"Configuration","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Exporter Config File","href":"/oracle-db-appdev-monitoring/docs/configuration/config-file","docId":"configuration/config-file","unlisted":false},{"type":"link","label":"Custom Metrics","href":"/oracle-db-appdev-monitoring/docs/configuration/custom-metrics","docId":"configuration/custom-metrics","unlisted":false},{"type":"link","label":"Multiple Databases","href":"/oracle-db-appdev-monitoring/docs/configuration/multiple-databases","docId":"configuration/multiple-databases","unlisted":false},{"type":"link","label":"Oracle Wallet (mTLS)","href":"/oracle-db-appdev-monitoring/docs/configuration/oracle-wallet","docId":"configuration/oracle-wallet","unlisted":false},{"type":"link","label":"Alert Logs","href":"/oracle-db-appdev-monitoring/docs/configuration/alert-logs","docId":"configuration/alert-logs","unlisted":false},{"type":"link","label":"OCI Vault","href":"/oracle-db-appdev-monitoring/docs/configuration/oci-vault","docId":"configuration/oci-vault","unlisted":false},{"type":"link","label":"Azure Vault","href":"/oracle-db-appdev-monitoring/docs/configuration/azure-vault","docId":"configuration/azure-vault","unlisted":false}],"href":"/oracle-db-appdev-monitoring/docs/category/configuration"},{"type":"category","label":"Advanced","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Configuring the Go Runtime","href":"/oracle-db-appdev-monitoring/docs/advanced/go-runtime","docId":"advanced/go-runtime","unlisted":false},{"type":"link","label":"Monitoring TxEventQ","href":"/oracle-db-appdev-monitoring/docs/advanced/txeventq","docId":"advanced/txeventq","unlisted":false},{"type":"link","label":"Development","href":"/oracle-db-appdev-monitoring/docs/advanced/development","docId":"advanced/development","unlisted":false}],"href":"/oracle-db-appdev-monitoring/docs/category/advanced"},{"type":"category","label":"Releases","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Roadmap","href":"/oracle-db-appdev-monitoring/docs/releases/roadmap","docId":"releases/roadmap","unlisted":false},{"type":"link","label":"Changelog","href":"/oracle-db-appdev-monitoring/docs/releases/changelog","docId":"releases/changelog","unlisted":false}],"href":"/oracle-db-appdev-monitoring/docs/category/releases"}]},"docs":{"advanced/development":{"id":"advanced/development","title":"Development","description":"The exporter is a Go program using the Prometheus SDK.","sidebar":"tutorialSidebar"},"advanced/go-runtime":{"id":"advanced/go-runtime","title":"Configuring the Go Runtime","description":"If you are running in an environment with limited memory, or you are running a large number of exporters, you may want to control the exporter\'s usage of memory.","sidebar":"tutorialSidebar"},"advanced/txeventq":{"id":"advanced/txeventq","title":"Monitoring TxEventQ","description":"Oracle Transactional Event Queues (\\"TxEventQ\\") is a fault-tolerant, scalable, real-time messaging backbone offered by converged Oracle Database that allows you to build an enterprise-class event-driven architectures.","sidebar":"tutorialSidebar"},"configuration/alert-logs":{"id":"configuration/alert-logs","title":"Alert Logs","description":"Collect export alert logs with a log ingestion tool.","sidebar":"tutorialSidebar"},"configuration/azure-vault":{"id":"configuration/azure-vault","title":"Azure Vault","description":"Securely load database credentials from Azure Vault.","sidebar":"tutorialSidebar"},"configuration/config-file":{"id":"configuration/config-file","title":"Exporter Config File","description":"The recommended way to configure the exporter is with the --config.file argument, specifying a YAML configuration file.","sidebar":"tutorialSidebar"},"configuration/custom-metrics":{"id":"configuration/custom-metrics","title":"Custom Metrics","description":"The exporter allows definition of arbitrary custom metrics in one or more TOML or YAML files.","sidebar":"tutorialSidebar"},"configuration/multiple-databases":{"id":"configuration/multiple-databases","title":"Multiple Databases","description":"The exporter may be configured to scrape as many databases as needed.","sidebar":"tutorialSidebar"},"configuration/oci-vault":{"id":"configuration/oci-vault","title":"OCI Vault","description":"Securely load database credentials from OCI Vault.","sidebar":"tutorialSidebar"},"configuration/oracle-wallet":{"id":"configuration/oracle-wallet","title":"Oracle Wallet (mTLS)","description":"For mutual TLS (mTLS) connections, you must use an Oracle Wallet.","sidebar":"tutorialSidebar"},"getting-started/basics":{"id":"getting-started/basics","title":"Installation","description":"In this section you will find information on running the exporter.","sidebar":"tutorialSidebar"},"getting-started/default-metrics":{"id":"getting-started/default-metrics","title":"Default Metrics","description":"The exporter includes default metrics for Oracle Database, and process-specific metrics on the go runtime.","sidebar":"tutorialSidebar"},"getting-started/grafana-dashboards":{"id":"getting-started/grafana-dashboards","title":"Grafana Dashboards","description":"Sample Grafana dashboards are included with the exporter.","sidebar":"tutorialSidebar"},"getting-started/kubernetes":{"id":"getting-started/kubernetes","title":"Kubernetes","description":"You can run the exporter in Kubernetes using provided manifests.","sidebar":"tutorialSidebar"},"intro":{"id":"intro","title":"OpenTelemetry Metrics for Oracle Database","description":"This project aims to provide observability for the Oracle Database so that users can understand performance and diagnose issues easily across applications and database. Over time, this project will provide not just metrics, but also logging and tracing support, and integration into popular frameworks like Spring Boot. The project aims to deliver functionality to support both cloud and on-premises databases, including those running in Kubernetes and containers.","sidebar":"tutorialSidebar"},"releases/changelog":{"id":"releases/changelog","title":"Changelog","description":"List of changes to the exporter.","sidebar":"tutorialSidebar"},"releases/roadmap":{"id":"releases/roadmap","title":"Roadmap","description":"Planned and upcoming features for the exporter.","sidebar":"tutorialSidebar"}}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/7569d55b.5f9fbe1f.js b/docs/assets/js/7569d55b.5f9fbe1f.js new file mode 100644 index 00000000..6d9f70e7 --- /dev/null +++ b/docs/assets/js/7569d55b.5f9fbe1f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[5524],{759:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>r,contentTitle:()=>l,default:()=>m,frontMatter:()=>i,metadata:()=>t,toc:()=>c});const t=JSON.parse('{"id":"configuration/multiple-databases","title":"Multiple Databases","description":"The exporter may be configured to scrape as many databases as needed.","source":"@site/versioned_docs/version-2.0.3/configuration/multiple-databases.md","sourceDirName":"configuration","slug":"/configuration/multiple-databases","permalink":"/oracle-db-appdev-monitoring/docs/configuration/multiple-databases","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/versioned_docs/version-2.0.3/configuration/multiple-databases.md","tags":[],"version":"2.0.3","sidebarPosition":3,"frontMatter":{"title":"Multiple Databases","sidebar_position":3},"sidebar":"tutorialSidebar","previous":{"title":"Custom Metrics","permalink":"/oracle-db-appdev-monitoring/docs/configuration/custom-metrics"},"next":{"title":"Oracle Wallet (mTLS)","permalink":"/oracle-db-appdev-monitoring/docs/configuration/oracle-wallet"}}');var o=a(4848),s=a(8453);const i={title:"Multiple Databases",sidebar_position:3},l="Scraping Multiple Databases",r={},c=[{value:"Only scraping metrics from specific databases",id:"only-scraping-metrics-from-specific-databases",level:3}];function d(e){const n={a:"a",code:"code",h1:"h1",h3:"h3",header:"header",p:"p",pre:"pre",...(0,s.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.header,{children:(0,o.jsx)(n.h1,{id:"scraping-multiple-databases",children:"Scraping Multiple Databases"})}),"\n",(0,o.jsx)(n.p,{children:"The exporter may be configured to scrape as many databases as needed."}),"\n",(0,o.jsx)(n.p,{children:"You may scrape as many databases as needed by defining named database configurations in the config file."}),"\n",(0,o.jsxs)(n.p,{children:["If you're connecting to multiple databases using mTLS, see ",(0,o.jsx)(n.a,{href:"/oracle-db-appdev-monitoring/docs/configuration/oracle-wallet#mtls-for-multiple-databases-with-oracle-wallet",children:"mTLS for multiple databases with Oracle Wallet"})]}),"\n",(0,o.jsx)(n.p,{children:'The following settings configure the exporter to scrape multiple databases, "db1", and "db2", simultaneously:'}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:"# Example Oracle Database Metrics Exporter Configuration file.\n# Environment variables of the form ${VAR_NAME} will be expanded.\n\ndatabases:\n ## Path on which metrics will be served\n # metricsPath: /metrics\n\n ## As many named database configurations may be defined as needed.\n ## It is recommended to define your database config in the config file, rather than using CLI arguments.\n\n ## Database connection information for the \"db1\" database.\n db1:\n ## Database username\n username: ${DB1_USERNAME}\n ## Database password\n password: ${DB1_PASSWORD}\n ## Database connection url\n url: localhost:1521/freepdb1\n\n ## Metrics query timeout for this database, in seconds\n queryTimeout: 5\n\n ## Rely on Oracle Database External Authentication by network or OS\n # externalAuth: false\n ## Database role\n # role: SYSDBA\n ## Path to Oracle Database wallet, if using wallet\n # tnsAdmin: /path/to/database/wallet\n\n ### Connection settings:\n ### Either the go-sql or Oracle Database connection pool may be used.\n ### To use the Oracle Database connection pool over the go-sql connection pool,\n ### set maxIdleConns to zero and configure the pool* settings.\n\n ### Connection pooling settings for the go-sql connection pool\n ## Max open connections for this database using go-sql connection pool\n maxOpenConns: 10\n ## Max idle connections for this database using go-sql connection pool\n maxIdleConns: 10\n\n ### Connection pooling settings for the Oracle Database connection pool\n ## Oracle Database connection pool increment.\n # poolIncrement: 1\n ## Oracle Database Connection pool maximum size\n # poolMaxConnections: 15\n ## Oracle Database Connection pool minimum size\n # poolMinConnections: 15\n\n ### Arbitrary labels to add to each metric scraped from this database\n ## Any labels configured for one database will be added to metrics from\n ## every database, because the same metric names must always have the same\n ## full labelset. If the label isn't set for a particular database, then it\n ## will just be set to an empty string.\n # labels:\n # label_name1: label_value1\n # label_name2: label_value2\n\n db2:\n ## Database username\n username: ${DB2_USERNAME}\n ## Database password\n password: ${DB2_PASSWORD}\n ## Database connection url\n url: localhost:1522/freepdb1\n\n ## Metrics query timeout for this database, in seconds\n queryTimeout: 5\n\n ## Rely on Oracle Database External Authentication by network or OS\n # externalAuth: false\n ## Database role\n # role: SYSDBA\n ## Path to Oracle Database wallet, if using wallet\n # tnsAdmin: /path/to/database/wallet\n\n ### Connection settings:\n ### Either the go-sql or Oracle Database connection pool may be used.\n ### To use the Oracle Database connection pool over the go-sql connection pool,\n ### set maxIdleConns to zero and configure the pool* settings.\n\n ### Connection pooling settings for the go-sql connection pool\n ## Max open connections for this database using go-sql connection pool\n maxOpenConns: 10\n ## Max idle connections for this database using go-sql connection pool\n maxIdleConns: 10\n\n ### Connection pooling settings for the Oracle Database connection pool\n ## Oracle Database connection pool increment.\n # poolIncrement: 1\n ## Oracle Database Connection pool maximum size\n # poolMaxConnections: 15\n ## Oracle Database Connection pool minimum size\n # poolMinConnections: 15\n\n ### Arbitrary labels to add to each metric scraped from this database\n ## Any labels configured for one database will be added to metrics from\n ## every database, because the same metric names must always have the same\n ## full labelset. If the label isn't set for a particular database, then it\n ## will just be set to an empty string.\n # labels:\n # label_name1: label_value1\n # label_name2: label_value2\n"})}),"\n",(0,o.jsx)(n.h3,{id:"only-scraping-metrics-from-specific-databases",children:"Only scraping metrics from specific databases"}),"\n",(0,o.jsxs)(n.p,{children:["By default, metrics are scraped from every connected database. To expose only certain metrics on specific databases, configure the ",(0,o.jsx)(n.code,{children:"databases"}),' property of a metric. The following metric definition will only be scraped from databases "db2" and "db3":']}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-toml",children:'[[metric]]\ncontext = "db_platform"\nlabels = [ "platform_name" ]\nmetricsdesc = { value = "Database platform" }\nrequest = \'\'\'\nSELECT platform_name, 1 as value FROM gv$database\n\'\'\'\ndatabases = [ "db2", "db3" ]\n'})}),"\n",(0,o.jsxs)(n.p,{children:["If the ",(0,o.jsx)(n.code,{children:"databases"})," array is empty or not provided for a metric, that metric will be scraped from all connected databases."]})]})}function m(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},8453:(e,n,a)=>{a.d(n,{R:()=>i,x:()=>l});var t=a(6540);const o={},s=t.createContext(o);function i(e){const n=t.useContext(s);return t.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/85a0f18d.23b1b3b5.js b/docs/assets/js/85a0f18d.23b1b3b5.js deleted file mode 100644 index 7b36dff3..00000000 --- a/docs/assets/js/85a0f18d.23b1b3b5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[918],{5405:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>a,toc:()=>c});const a=JSON.parse('{"id":"configuration/azure-vault","title":"Azure Vault","description":"Securely load database credentials from Azure Vault.","source":"@site/docs/configuration/azure-vault.md","sourceDirName":"configuration","slug":"/configuration/azure-vault","permalink":"/oracle-db-appdev-monitoring/docs/configuration/azure-vault","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/docs/configuration/azure-vault.md","tags":[],"version":"current","sidebarPosition":7,"frontMatter":{"title":"Azure Vault","sidebar_position":7},"sidebar":"tutorialSidebar","previous":{"title":"OCI Vault","permalink":"/oracle-db-appdev-monitoring/docs/configuration/oci-vault"},"next":{"title":"Advanced","permalink":"/oracle-db-appdev-monitoring/docs/category/advanced"}}');var r=n(4848),i=n(8453);const o={title:"Azure Vault",sidebar_position:7},s="Azure Vault",u={},c=[{value:"Authentication",id:"authentication",level:3},{value:"Azure Vault CLI Configuration (without exporter config file)",id:"azure-vault-cli-configuration-without-exporter-config-file",level:3}];function l(e){const t={a:"a",code:"code",h1:"h1",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"azure-vault",children:"Azure Vault"})}),"\n",(0,r.jsx)(t.p,{children:"Securely load database credentials from Azure Vault."}),"\n",(0,r.jsxs)(t.p,{children:["Each database in the config file may be configured to use Azure Vault. To load the database username and/or password from Azure Vault, set the ",(0,r.jsx)(t.code,{children:"vault.azure"})," property to contain the Azure Vault ID, and secret names for the database username/password:"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-yaml",children:"databases:\n mydb:\n vault:\n azure:\n id: <VAULT ID>\n usernameSecret: <Secret containing DB username>\n passwordSecret: <Secret containing DB password>\n"})}),"\n",(0,r.jsx)(t.h3,{id:"authentication",children:"Authentication"}),"\n",(0,r.jsxs)(t.p,{children:["If you are running the exporter outside Azure, we recommend using ",(0,r.jsx)(t.a,{href:"https://learn.microsoft.com/en-us/azure/developer/go/sdk/authentication/authentication-on-premises-apps",children:"application service principal"}),"."]}),"\n",(0,r.jsxs)(t.p,{children:["If you are running the exporter inside Azure, we recommend using a ",(0,r.jsx)(t.a,{href:"https://learn.microsoft.com/en-us/azure/developer/go/sdk/authentication/authentication-azure-hosted-apps",children:"managed identity"}),"."]}),"\n",(0,r.jsx)(t.p,{children:"You should set the following additional environment variables to allow the exporter to authenticate to Azure:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"AZURE_TENANT_ID"})," should be set to your tenant ID"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"AZURE_CLIENT_ID"})," should be set to the client ID to authenticate to Azure"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"AZURE_CLIENT_SECRET"})," should be set to the client secret to authenticate to Azure"]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"azure-vault-cli-configuration-without-exporter-config-file",children:"Azure Vault CLI Configuration (without exporter config file)"}),"\n",(0,r.jsx)(t.p,{children:"If using the default database with CLI parameters, the exporter will read the database username and password from secrets stored in Azure Key Vault if you set these environment variables:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"AZ_VAULT_ID"})," should be set to the ID of the Azure Key Vault that you wish to use"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"AZ_VAULT_USERNAME_SECRET"})," should be set to the name of the secret in the Azure Key Vault which contains the database username"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"AZ_VAULT_PASSWORD_SECRET"})," should be set to the name of the secret in the Azure Key Vault which contains the database password"]}),"\n"]})]})}function d(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>o,x:()=>s});var a=n(6540);const r={},i=a.createContext(r);function o(e){const t=a.useContext(i);return a.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),a.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/85a0f18d.3710d60b.js b/docs/assets/js/85a0f18d.3710d60b.js new file mode 100644 index 00000000..36bd1fc0 --- /dev/null +++ b/docs/assets/js/85a0f18d.3710d60b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[8918],{5405:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>a,toc:()=>c});const a=JSON.parse('{"id":"configuration/azure-vault","title":"Azure Vault","description":"Securely load database credentials from Azure Vault.","source":"@site/docs/configuration/azure-vault.md","sourceDirName":"configuration","slug":"/configuration/azure-vault","permalink":"/oracle-db-appdev-monitoring/docs/next/configuration/azure-vault","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/docs/configuration/azure-vault.md","tags":[],"version":"current","sidebarPosition":7,"frontMatter":{"title":"Azure Vault","sidebar_position":7},"sidebar":"tutorialSidebar","previous":{"title":"OCI Vault","permalink":"/oracle-db-appdev-monitoring/docs/next/configuration/oci-vault"},"next":{"title":"Advanced","permalink":"/oracle-db-appdev-monitoring/docs/next/category/advanced"}}');var r=n(4848),i=n(8453);const o={title:"Azure Vault",sidebar_position:7},s="Azure Vault",u={},c=[{value:"Authentication",id:"authentication",level:3},{value:"Azure Vault CLI Configuration (without exporter config file)",id:"azure-vault-cli-configuration-without-exporter-config-file",level:3}];function l(e){const t={a:"a",code:"code",h1:"h1",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"azure-vault",children:"Azure Vault"})}),"\n",(0,r.jsx)(t.p,{children:"Securely load database credentials from Azure Vault."}),"\n",(0,r.jsxs)(t.p,{children:["Each database in the config file may be configured to use Azure Vault. To load the database username and/or password from Azure Vault, set the ",(0,r.jsx)(t.code,{children:"vault.azure"})," property to contain the Azure Vault ID, and secret names for the database username/password:"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-yaml",children:"databases:\n mydb:\n vault:\n azure:\n id: <VAULT ID>\n usernameSecret: <Secret containing DB username>\n passwordSecret: <Secret containing DB password>\n"})}),"\n",(0,r.jsx)(t.h3,{id:"authentication",children:"Authentication"}),"\n",(0,r.jsxs)(t.p,{children:["If you are running the exporter outside Azure, we recommend using ",(0,r.jsx)(t.a,{href:"https://learn.microsoft.com/en-us/azure/developer/go/sdk/authentication/authentication-on-premises-apps",children:"application service principal"}),"."]}),"\n",(0,r.jsxs)(t.p,{children:["If you are running the exporter inside Azure, we recommend using a ",(0,r.jsx)(t.a,{href:"https://learn.microsoft.com/en-us/azure/developer/go/sdk/authentication/authentication-azure-hosted-apps",children:"managed identity"}),"."]}),"\n",(0,r.jsx)(t.p,{children:"You should set the following additional environment variables to allow the exporter to authenticate to Azure:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"AZURE_TENANT_ID"})," should be set to your tenant ID"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"AZURE_CLIENT_ID"})," should be set to the client ID to authenticate to Azure"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"AZURE_CLIENT_SECRET"})," should be set to the client secret to authenticate to Azure"]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"azure-vault-cli-configuration-without-exporter-config-file",children:"Azure Vault CLI Configuration (without exporter config file)"}),"\n",(0,r.jsx)(t.p,{children:"If using the default database with CLI parameters, the exporter will read the database username and password from secrets stored in Azure Key Vault if you set these environment variables:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"AZ_VAULT_ID"})," should be set to the ID of the Azure Key Vault that you wish to use"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"AZ_VAULT_USERNAME_SECRET"})," should be set to the name of the secret in the Azure Key Vault which contains the database username"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"AZ_VAULT_PASSWORD_SECRET"})," should be set to the name of the secret in the Azure Key Vault which contains the database password"]}),"\n"]})]})}function d(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>o,x:()=>s});var a=n(6540);const r={},i=a.createContext(r);function o(e){const t=a.useContext(i);return a.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),a.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/867ce809.3f108176.js b/docs/assets/js/867ce809.3f108176.js new file mode 100644 index 00000000..fdcda1ad --- /dev/null +++ b/docs/assets/js/867ce809.3f108176.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[4705],{8595:e=>{e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Configuration","description":"How to configure the Oracle Database Metrics Exporter.","slug":"/category/configuration","permalink":"/oracle-db-appdev-monitoring/docs/category/configuration","sidebar":"tutorialSidebar","navigation":{"previous":{"title":"Grafana Dashboards","permalink":"/oracle-db-appdev-monitoring/docs/getting-started/grafana-dashboards"},"next":{"title":"Exporter Config File","permalink":"/oracle-db-appdev-monitoring/docs/configuration/config-file"}}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/867ce809.fdf6483f.js b/docs/assets/js/867ce809.fdf6483f.js deleted file mode 100644 index 65f3e70d..00000000 --- a/docs/assets/js/867ce809.fdf6483f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[705],{8595:e=>{e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Configuration","description":"How to configure the Oracle Database Metrics Exporter.","slug":"/category/configuration","permalink":"/oracle-db-appdev-monitoring/docs/category/configuration","sidebar":"tutorialSidebar","navigation":{"previous":{"title":"Grafana Dashboards","permalink":"/oracle-db-appdev-monitoring/docs/getting-started/grafana-dashboards"},"next":{"title":"Exporter Config File","permalink":"/oracle-db-appdev-monitoring/docs/configuration/config-file"}}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/8be1f15d.b28ab2e6.js b/docs/assets/js/8be1f15d.b28ab2e6.js new file mode 100644 index 00000000..477b95f8 --- /dev/null +++ b/docs/assets/js/8be1f15d.b28ab2e6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[4323],{3571:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>a,toc:()=>c});const a=JSON.parse('{"id":"configuration/azure-vault","title":"Azure Vault","description":"Securely load database credentials from Azure Vault.","source":"@site/versioned_docs/version-2.0.3/configuration/azure-vault.md","sourceDirName":"configuration","slug":"/configuration/azure-vault","permalink":"/oracle-db-appdev-monitoring/docs/configuration/azure-vault","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/versioned_docs/version-2.0.3/configuration/azure-vault.md","tags":[],"version":"2.0.3","sidebarPosition":7,"frontMatter":{"title":"Azure Vault","sidebar_position":7},"sidebar":"tutorialSidebar","previous":{"title":"OCI Vault","permalink":"/oracle-db-appdev-monitoring/docs/configuration/oci-vault"},"next":{"title":"Advanced","permalink":"/oracle-db-appdev-monitoring/docs/category/advanced"}}');var r=n(4848),i=n(8453);const o={title:"Azure Vault",sidebar_position:7},s="Azure Vault",u={},c=[{value:"Authentication",id:"authentication",level:3},{value:"Azure Vault CLI Configuration (without exporter config file)",id:"azure-vault-cli-configuration-without-exporter-config-file",level:3}];function l(e){const t={a:"a",code:"code",h1:"h1",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"azure-vault",children:"Azure Vault"})}),"\n",(0,r.jsx)(t.p,{children:"Securely load database credentials from Azure Vault."}),"\n",(0,r.jsxs)(t.p,{children:["Each database in the config file may be configured to use Azure Vault. To load the database username and/or password from Azure Vault, set the ",(0,r.jsx)(t.code,{children:"vault.azure"})," property to contain the Azure Vault ID, and secret names for the database username/password:"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-yaml",children:"databases:\n mydb:\n vault:\n azure:\n id: <VAULT ID>\n usernameSecret: <Secret containing DB username>\n passwordSecret: <Secret containing DB password>\n"})}),"\n",(0,r.jsx)(t.h3,{id:"authentication",children:"Authentication"}),"\n",(0,r.jsxs)(t.p,{children:["If you are running the exporter outside Azure, we recommend using ",(0,r.jsx)(t.a,{href:"https://learn.microsoft.com/en-us/azure/developer/go/sdk/authentication/authentication-on-premises-apps",children:"application service principal"}),"."]}),"\n",(0,r.jsxs)(t.p,{children:["If you are running the exporter inside Azure, we recommend using a ",(0,r.jsx)(t.a,{href:"https://learn.microsoft.com/en-us/azure/developer/go/sdk/authentication/authentication-azure-hosted-apps",children:"managed identity"}),"."]}),"\n",(0,r.jsx)(t.p,{children:"You should set the following additional environment variables to allow the exporter to authenticate to Azure:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"AZURE_TENANT_ID"})," should be set to your tenant ID"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"AZURE_CLIENT_ID"})," should be set to the client ID to authenticate to Azure"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"AZURE_CLIENT_SECRET"})," should be set to the client secret to authenticate to Azure"]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"azure-vault-cli-configuration-without-exporter-config-file",children:"Azure Vault CLI Configuration (without exporter config file)"}),"\n",(0,r.jsx)(t.p,{children:"If using the default database with CLI parameters, the exporter will read the database username and password from secrets stored in Azure Key Vault if you set these environment variables:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"AZ_VAULT_ID"})," should be set to the ID of the Azure Key Vault that you wish to use"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"AZ_VAULT_USERNAME_SECRET"})," should be set to the name of the secret in the Azure Key Vault which contains the database username"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"AZ_VAULT_PASSWORD_SECRET"})," should be set to the name of the secret in the Azure Key Vault which contains the database password"]}),"\n"]})]})}function d(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>o,x:()=>s});var a=n(6540);const r={},i=a.createContext(r);function o(e){const t=a.useContext(i);return a.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),a.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/9419d97c.9d1606f1.js b/docs/assets/js/9419d97c.9d1606f1.js new file mode 100644 index 00000000..f4e86754 --- /dev/null +++ b/docs/assets/js/9419d97c.9d1606f1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[7213],{5760:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>o,toc:()=>c});const o=JSON.parse('{"id":"advanced/go-runtime","title":"Configuring the Go Runtime","description":"If you are running in an environment with limited memory, or you are running a large number of exporters, you may want to control the exporter\'s usage of memory.","source":"@site/versioned_docs/version-2.0.3/advanced/go-runtime.md","sourceDirName":"advanced","slug":"/advanced/go-runtime","permalink":"/oracle-db-appdev-monitoring/docs/advanced/go-runtime","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/versioned_docs/version-2.0.3/advanced/go-runtime.md","tags":[],"version":"2.0.3","sidebarPosition":1,"frontMatter":{"title":"Configuring the Go Runtime","sidebar_position":1},"sidebar":"tutorialSidebar","previous":{"title":"Advanced","permalink":"/oracle-db-appdev-monitoring/docs/category/advanced"},"next":{"title":"Monitoring TxEventQ","permalink":"/oracle-db-appdev-monitoring/docs/advanced/txeventq"}}');var r=n(4848),i=n(8453);const s={title:"Configuring the Go Runtime",sidebar_position:1},a="Exporter Go Runtime",d={},c=[];function l(e){const t={a:"a",code:"code",h1:"h1",header:"header",li:"li",p:"p",ul:"ul",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"exporter-go-runtime",children:"Exporter Go Runtime"})}),"\n",(0,r.jsx)(t.p,{children:"If you are running in an environment with limited memory, or you are running a large number of exporters, you may want to control the exporter's usage of memory."}),"\n",(0,r.jsx)(t.p,{children:"Under normal circumstances, the exporter process will retain OS memory that was used by the Go garbage collector but is no longer needed, in case it may be needed again in the future, unless the host OS is under memory pressure. The result of this behavior (which is the normal behavior of the Go runtime) is that the resident set size will not decrease until the host OS memory is almost all used. Under most circumstances, this will not cause any issues, but if you are in an environment where you need to conserve memory, the following options are provided:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["You may set the ",(0,r.jsx)(t.code,{children:"FREE_INTERVAL"})," environment variable to a Go ",(0,r.jsx)(t.a,{href:"https://pkg.go.dev/maze.io/x/duration",children:"duration string"}),", e.g., ",(0,r.jsx)(t.code,{children:"60s"})," and run the exporter in debug mode by setting the ",(0,r.jsx)(t.code,{children:"GODEBUG"})," environment variable to a value including ",(0,r.jsx)(t.code,{children:"madvdontneed=1"}),", e.g., ",(0,r.jsx)(t.code,{children:"GODEBUG=gctrace=1,madvdontneed=1"}),". The exporter will call the ",(0,r.jsx)(t.a,{href:"https://pkg.go.dev/runtime/debug#FreeOSMemory",children:"FreeOSMemory()"})," at the specified interval. This tells the Go runtime to attempt to release memory which is no longer needed. Please note that this does not guarantee that the memory will be released to the OS, but over time you should see the RSS shrink sooner than without these settings."]}),"\n",(0,r.jsxs)(t.li,{children:["You may set the ",(0,r.jsx)(t.code,{children:"RESTART_INTERVAL"})," environment variable to a Go ",(0,r.jsx)(t.a,{href:"https://pkg.go.dev/maze.io/x/duration",children:"duration string"}),", e.g., ",(0,r.jsx)(t.code,{children:"10m"}),". The exporter will restart its own process at the specified iterval (by calling the OS ",(0,r.jsx)(t.code,{children:"exec"})," syscall). As no new process is created, the process identifier (PID) does not change, but the machine code, data, heap, and stack of the process are replaced by those of the new program (source: ",(0,r.jsx)(t.a,{href:"https://en.wikipedia.org/wiki/Exec_(system_call)",children:"Wikipedia"}),"). This has the side effect of freeing the resident set, so that it will return to its original size."]}),"\n",(0,r.jsxs)(t.li,{children:["In addition to these, you may also set ",(0,r.jsx)(t.code,{children:"GOMAXPROCS"}),", ",(0,r.jsx)(t.code,{children:"GOGC"}),", and ",(0,r.jsx)(t.code,{children:"GOMEMLIMIT"})," (see ",(0,r.jsx)(t.a,{href:"https://pkg.go.dev/runtime#hdr-Environment_Variables",children:"documentation"}),") to further limit the amount of resources that the Go runtime may use."]}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>s,x:()=>a});var o=n(6540);const r={},i=o.createContext(r);function s(e){const t=o.useContext(i);return o.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),o.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/a7456010.25370a92.js b/docs/assets/js/a7456010.25370a92.js deleted file mode 100644 index 56393a11..00000000 --- a/docs/assets/js/a7456010.25370a92.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[235],{8552:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-pages","id":"default"}')}}]); \ No newline at end of file diff --git a/docs/assets/js/a7456010.8bd40a5b.js b/docs/assets/js/a7456010.8bd40a5b.js new file mode 100644 index 00000000..1041bbae --- /dev/null +++ b/docs/assets/js/a7456010.8bd40a5b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[1235],{8552:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-pages","id":"default"}')}}]); \ No newline at end of file diff --git a/docs/assets/js/a7901124.1486562b.js b/docs/assets/js/a7901124.1486562b.js new file mode 100644 index 00000000..59b65847 --- /dev/null +++ b/docs/assets/js/a7901124.1486562b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[1152],{844:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>s,metadata:()=>n,toc:()=>l});const n=JSON.parse('{"id":"getting-started/kubernetes","title":"Kubernetes","description":"You can run the exporter in Kubernetes using provided manifests.","source":"@site/versioned_docs/version-2.0.3/getting-started/kubernetes.md","sourceDirName":"getting-started","slug":"/getting-started/kubernetes","permalink":"/oracle-db-appdev-monitoring/docs/getting-started/kubernetes","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/versioned_docs/version-2.0.3/getting-started/kubernetes.md","tags":[],"version":"2.0.3","sidebarPosition":3,"frontMatter":{"title":"Kubernetes","sidebar_position":3},"sidebar":"tutorialSidebar","previous":{"title":"Default Metrics","permalink":"/oracle-db-appdev-monitoring/docs/getting-started/default-metrics"},"next":{"title":"Grafana Dashboards","permalink":"/oracle-db-appdev-monitoring/docs/getting-started/grafana-dashboards"}}');var a=r(4848),o=r(8453);const s={title:"Kubernetes",sidebar_position:3},i="Kubernetes",c={},l=[{value:"Create a secret with credentials for connecting to the Oracle Database",id:"create-a-secret-with-credentials-for-connecting-to-the-oracle-database",level:3},{value:"Create a config map for the exporter configuration file (recommended)",id:"create-a-config-map-for-the-exporter-configuration-file-recommended",level:3},{value:"Create a config map for the wallet (optional)",id:"create-a-config-map-for-the-wallet-optional",level:3},{value:"Create a config map for your metrics definition file (optional)",id:"create-a-config-map-for-your-metrics-definition-file-optional",level:3},{value:"Deploy the Oracle Database Observability exporter",id:"deploy-the-oracle-database-observability-exporter",level:3},{value:"Create a Kubernetes service for the exporter",id:"create-a-kubernetes-service-for-the-exporter",level:3},{value:"Create a Kubernetes service monitor",id:"create-a-kubernetes-service-monitor",level:3},{value:"Configure a Prometheus target (optional)",id:"configure-a-prometheus-target-optional",level:3}];function d(e){const t={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h3:"h3",header:"header",p:"p",pre:"pre",...(0,o.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.header,{children:(0,a.jsx)(t.h1,{id:"kubernetes",children:"Kubernetes"})}),"\n",(0,a.jsx)(t.p,{children:"You can run the exporter in Kubernetes using provided manifests."}),"\n",(0,a.jsxs)(t.p,{children:["To run the exporter in Kubernetes, you must complete the following steps. All steps must be completed in the same Kunernetes namespace. The examples below assume you want to use a namespace called ",(0,a.jsx)(t.code,{children:"exporter"}),", you must change the commands if you wish to use a different namespace."]}),"\n",(0,a.jsx)(t.h3,{id:"create-a-secret-with-credentials-for-connecting-to-the-oracle-database",children:"Create a secret with credentials for connecting to the Oracle Database"}),"\n",(0,a.jsxs)(t.p,{children:["Create a secret with the Oracle database user and password that the exporter should use to connect to the database using this command. You must specify the correct user and password for your environment. This example uses ",(0,a.jsx)(t.code,{children:"pdbadmin"})," as the user and ",(0,a.jsx)(t.code,{children:"Welcome12345"})," as the password:"]}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:"kubectl create secret generic db-secret \\\n --from-literal=username=pdbadmin \\\n --from-literal=password=Welcome12345 \\\n -n exporter\n"})}),"\n",(0,a.jsx)(t.h3,{id:"create-a-config-map-for-the-exporter-configuration-file-recommended",children:"Create a config map for the exporter configuration file (recommended)"}),"\n",(0,a.jsx)(t.p,{children:"Create a config map with the exporter configuration file (if you are using one) using this command:"}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:"kubectl create cm metrics-exporter-config \\\n --from-file=metrics-exporter-config.yaml\n"})}),"\n",(0,a.jsxs)(t.blockquote,{children:["\n",(0,a.jsx)(t.p,{children:"NOTE: It is strongly recommended to migrate to the new config file if you are running version 2.0.0 or later."}),"\n"]}),"\n",(0,a.jsx)(t.h3,{id:"create-a-config-map-for-the-wallet-optional",children:"Create a config map for the wallet (optional)"}),"\n",(0,a.jsxs)(t.p,{children:["Create a config map with the wallet (if you are using one) using this command. Run this command in the ",(0,a.jsx)(t.code,{children:"wallet"})," directory you created earlier."]}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:"kubectl create cm db-metrics-tns-admin \\\n --from-file=cwallet.sso \\\n --from-file=ewallet.p12 \\\n --from-file=ewallet.pem \\\n --from-file=keystore.jks \\\n --from-file=ojdbc.properties \\\n --from-file=sqlnet.ora \\\n --from-file=tnsnames.ora \\\n --from-file=truststore.jks \\\n -n exporter\n"})}),"\n",(0,a.jsx)(t.h3,{id:"create-a-config-map-for-your-metrics-definition-file-optional",children:"Create a config map for your metrics definition file (optional)"}),"\n",(0,a.jsxs)(t.p,{children:["If you have defined any ",(0,a.jsx)(t.a,{href:"/oracle-db-appdev-monitoring/docs/configuration/custom-metrics",children:"custom metrics"}),", you must create a config map for the metrics definition file. For example, if you created a configuration file called ",(0,a.jsx)(t.code,{children:"txeventq-metrics.toml"}),", then create the config map with this command:"]}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:"kubectl create cm db-metrics-txeventq-exporter-config \\\n --from-file=txeventq-metrics.toml \\\n -n exporter\n"})}),"\n",(0,a.jsx)(t.h3,{id:"deploy-the-oracle-database-observability-exporter",children:"Deploy the Oracle Database Observability exporter"}),"\n",(0,a.jsxs)(t.p,{children:["A sample Kubernetes manifest is provided ",(0,a.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/kubernetes/metrics-exporter-deployment.yaml",children:"here"}),". You must edit this file to set the namespace you wish to use, the database connect string to use, and if you have any custom metrics, you will need to uncomment and customize some sections in this file."]}),"\n",(0,a.jsx)(t.p,{children:"Once you have made the necessary updates, apply the file to your cluster using this command:"}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:"kubectl apply -f metrics-exporter-deployment.yaml\n"})}),"\n",(0,a.jsx)(t.p,{children:"You can check the deployment was successful and monitor the exporter startup with this command:"}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:"kubectl get pods -n exporter -w\n"})}),"\n",(0,a.jsx)(t.p,{children:"You can view the exporter's logs with this command:"}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:"kubectl logs -f svc/metrics-exporter -n exporter\n"})}),"\n",(0,a.jsx)(t.h3,{id:"create-a-kubernetes-service-for-the-exporter",children:"Create a Kubernetes service for the exporter"}),"\n",(0,a.jsxs)(t.p,{children:["Create a Kubernetes service to allow access to the exporter pod(s). A sample Kubernetes manifest is provided ",(0,a.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/kubernetes/metrics-exporter-service.yaml",children:"here"}),". You may need to customize this file to update the namespace."]}),"\n",(0,a.jsx)(t.p,{children:"Once you have made any necessary udpates, apply the file to your cluster using this command:"}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:"kubectl apply -f metrics-exporter-service.yaml\n"})}),"\n",(0,a.jsx)(t.h3,{id:"create-a-kubernetes-service-monitor",children:"Create a Kubernetes service monitor"}),"\n",(0,a.jsxs)(t.p,{children:["Create a Kubernetes service monitor to tell Prometheus (for example) to collect metrics from the exporter. A sample Kubernetes manifest is provided ",(0,a.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/kubernetes/metrics-service-monitor.yaml",children:"here"}),". You may need to customize this file to update the namespace."]}),"\n",(0,a.jsx)(t.p,{children:"Once you have made any necessary udpates, apply the file to your cluster using this command:"}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:"kubectl apply -f metrics-service-monitor.yaml\n"})}),"\n",(0,a.jsx)(t.h3,{id:"configure-a-prometheus-target-optional",children:"Configure a Prometheus target (optional)"}),"\n",(0,a.jsx)(t.p,{children:"You may need to update your Prometheus configuration to add a target. If so, you can use this example job definition as a guide:"}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-yaml",children:" - job_name: 'oracle-exporter'\n metrics_path: '/metrics'\n scrape_interval: 15s\n scrape_timeout: 10s\n static_configs:\n - targets: \n - metrics-exporter.exporter.svc.cluster.local:9161\n"})})]})}function m(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},8453:(e,t,r)=>{r.d(t,{R:()=>s,x:()=>i});var n=r(6540);const a={},o=n.createContext(a);function s(e){const t=n.useContext(o);return n.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/a7bd4aaa.2ca06876.js b/docs/assets/js/a7bd4aaa.2ca06876.js deleted file mode 100644 index 805b3828..00000000 --- a/docs/assets/js/a7bd4aaa.2ca06876.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[98],{1723:(n,e,s)=>{s.r(e),s.d(e,{default:()=>d});s(6540);var r=s(5500);function t(n,e){return`docs-${n}-${e}`}var o=s(3025),i=s(2831),c=s(1463),u=s(4848);function a(n){const{version:e}=n;return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(c.A,{version:e.version,tag:t(e.pluginId,e.version)}),(0,u.jsx)(r.be,{children:e.noIndex&&(0,u.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})]})}function l(n){const{version:e,route:s}=n;return(0,u.jsx)(r.e3,{className:e.className,children:(0,u.jsx)(o.n,{version:e,children:(0,i.v)(s.routes)})})}function d(n){return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(a,{...n}),(0,u.jsx)(l,{...n})]})}}}]); \ No newline at end of file diff --git a/docs/assets/js/a7bd4aaa.8e47733e.js b/docs/assets/js/a7bd4aaa.8e47733e.js new file mode 100644 index 00000000..e3ed196b --- /dev/null +++ b/docs/assets/js/a7bd4aaa.8e47733e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[7098],{1723:(n,e,s)=>{s.r(e),s.d(e,{default:()=>d});s(6540);var r=s(5500);function t(n,e){return`docs-${n}-${e}`}var o=s(3025),i=s(2831),c=s(1463),u=s(4848);function a(n){const{version:e}=n;return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(c.A,{version:e.version,tag:t(e.pluginId,e.version)}),(0,u.jsx)(r.be,{children:e.noIndex&&(0,u.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})]})}function l(n){const{version:e,route:s}=n;return(0,u.jsx)(r.e3,{className:e.className,children:(0,u.jsx)(o.n,{version:e,children:(0,i.v)(s.routes)})})}function d(n){return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(a,{...n}),(0,u.jsx)(l,{...n})]})}}}]); \ No newline at end of file diff --git a/docs/assets/js/a7f4dc0a.b6021f3c.js b/docs/assets/js/a7f4dc0a.b6021f3c.js deleted file mode 100644 index 5a608548..00000000 --- a/docs/assets/js/a7f4dc0a.b6021f3c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[359],{7092:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>o,toc:()=>c});const o=JSON.parse('{"id":"advanced/go-runtime","title":"Configuring the Go Runtime","description":"If you are running in an environment with limited memory, or you are running a large number of exporters, you may want to control the exporter\'s usage of memory.","source":"@site/docs/advanced/go-runtime.md","sourceDirName":"advanced","slug":"/advanced/go-runtime","permalink":"/oracle-db-appdev-monitoring/docs/advanced/go-runtime","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/docs/advanced/go-runtime.md","tags":[],"version":"current","sidebarPosition":1,"frontMatter":{"title":"Configuring the Go Runtime","sidebar_position":1},"sidebar":"tutorialSidebar","previous":{"title":"Advanced","permalink":"/oracle-db-appdev-monitoring/docs/category/advanced"},"next":{"title":"Monitoring TxEventQ","permalink":"/oracle-db-appdev-monitoring/docs/advanced/txeventq"}}');var r=n(4848),i=n(8453);const s={title:"Configuring the Go Runtime",sidebar_position:1},a="Exporter Go Runtime",d={},c=[];function l(e){const t={a:"a",code:"code",h1:"h1",header:"header",li:"li",p:"p",ul:"ul",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"exporter-go-runtime",children:"Exporter Go Runtime"})}),"\n",(0,r.jsx)(t.p,{children:"If you are running in an environment with limited memory, or you are running a large number of exporters, you may want to control the exporter's usage of memory."}),"\n",(0,r.jsx)(t.p,{children:"Under normal circumstances, the exporter process will retain OS memory that was used by the Go garbage collector but is no longer needed, in case it may be needed again in the future, unless the host OS is under memory pressure. The result of this behavior (which is the normal behavior of the Go runtime) is that the resident set size will not decrease until the host OS memory is almost all used. Under most circumstances, this will not cause any issues, but if you are in an environment where you need to conserve memory, the following options are provided:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["You may set the ",(0,r.jsx)(t.code,{children:"FREE_INTERVAL"})," environment variable to a Go ",(0,r.jsx)(t.a,{href:"https://pkg.go.dev/maze.io/x/duration",children:"duration string"}),", e.g., ",(0,r.jsx)(t.code,{children:"60s"})," and run the exporter in debug mode by setting the ",(0,r.jsx)(t.code,{children:"GODEBUG"})," environment variable to a value including ",(0,r.jsx)(t.code,{children:"madvdontneed=1"}),", e.g., ",(0,r.jsx)(t.code,{children:"GODEBUG=gctrace=1,madvdontneed=1"}),". The exporter will call the ",(0,r.jsx)(t.a,{href:"https://pkg.go.dev/runtime/debug#FreeOSMemory",children:"FreeOSMemory()"})," at the specified interval. This tells the Go runtime to attempt to release memory which is no longer needed. Please note that this does not guarantee that the memory will be released to the OS, but over time you should see the RSS shrink sooner than without these settings."]}),"\n",(0,r.jsxs)(t.li,{children:["You may set the ",(0,r.jsx)(t.code,{children:"RESTART_INTERVAL"})," environment variable to a Go ",(0,r.jsx)(t.a,{href:"https://pkg.go.dev/maze.io/x/duration",children:"duration string"}),", e.g., ",(0,r.jsx)(t.code,{children:"10m"}),". The exporter will restart its own process at the specified iterval (by calling the OS ",(0,r.jsx)(t.code,{children:"exec"})," syscall). As no new process is created, the process identifier (PID) does not change, but the machine code, data, heap, and stack of the process are replaced by those of the new program (source: ",(0,r.jsx)(t.a,{href:"https://en.wikipedia.org/wiki/Exec_(system_call)",children:"Wikipedia"}),"). This has the side effect of freeing the resident set, so that it will return to its original size."]}),"\n",(0,r.jsxs)(t.li,{children:["In addition to these, you may also set ",(0,r.jsx)(t.code,{children:"GOMAXPROCS"}),", ",(0,r.jsx)(t.code,{children:"GOGC"}),", and ",(0,r.jsx)(t.code,{children:"GOMEMLIMIT"})," (see ",(0,r.jsx)(t.a,{href:"https://pkg.go.dev/runtime#hdr-Environment_Variables",children:"documentation"}),") to further limit the amount of resources that the Go runtime may use."]}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>s,x:()=>a});var o=n(6540);const r={},i=o.createContext(r);function s(e){const t=o.useContext(i);return o.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),o.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/a7f4dc0a.fab1aab9.js b/docs/assets/js/a7f4dc0a.fab1aab9.js new file mode 100644 index 00000000..e1cc7c5f --- /dev/null +++ b/docs/assets/js/a7f4dc0a.fab1aab9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[7359],{7092:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>o,toc:()=>c});const o=JSON.parse('{"id":"advanced/go-runtime","title":"Configuring the Go Runtime","description":"If you are running in an environment with limited memory, or you are running a large number of exporters, you may want to control the exporter\'s usage of memory.","source":"@site/docs/advanced/go-runtime.md","sourceDirName":"advanced","slug":"/advanced/go-runtime","permalink":"/oracle-db-appdev-monitoring/docs/next/advanced/go-runtime","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/docs/advanced/go-runtime.md","tags":[],"version":"current","sidebarPosition":1,"frontMatter":{"title":"Configuring the Go Runtime","sidebar_position":1},"sidebar":"tutorialSidebar","previous":{"title":"Advanced","permalink":"/oracle-db-appdev-monitoring/docs/next/category/advanced"},"next":{"title":"Monitoring TxEventQ","permalink":"/oracle-db-appdev-monitoring/docs/next/advanced/txeventq"}}');var r=n(4848),i=n(8453);const s={title:"Configuring the Go Runtime",sidebar_position:1},a="Exporter Go Runtime",d={},c=[];function l(e){const t={a:"a",code:"code",h1:"h1",header:"header",li:"li",p:"p",ul:"ul",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"exporter-go-runtime",children:"Exporter Go Runtime"})}),"\n",(0,r.jsx)(t.p,{children:"If you are running in an environment with limited memory, or you are running a large number of exporters, you may want to control the exporter's usage of memory."}),"\n",(0,r.jsx)(t.p,{children:"Under normal circumstances, the exporter process will retain OS memory that was used by the Go garbage collector but is no longer needed, in case it may be needed again in the future, unless the host OS is under memory pressure. The result of this behavior (which is the normal behavior of the Go runtime) is that the resident set size will not decrease until the host OS memory is almost all used. Under most circumstances, this will not cause any issues, but if you are in an environment where you need to conserve memory, the following options are provided:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["You may set the ",(0,r.jsx)(t.code,{children:"FREE_INTERVAL"})," environment variable to a Go ",(0,r.jsx)(t.a,{href:"https://pkg.go.dev/maze.io/x/duration",children:"duration string"}),", e.g., ",(0,r.jsx)(t.code,{children:"60s"})," and run the exporter in debug mode by setting the ",(0,r.jsx)(t.code,{children:"GODEBUG"})," environment variable to a value including ",(0,r.jsx)(t.code,{children:"madvdontneed=1"}),", e.g., ",(0,r.jsx)(t.code,{children:"GODEBUG=gctrace=1,madvdontneed=1"}),". The exporter will call the ",(0,r.jsx)(t.a,{href:"https://pkg.go.dev/runtime/debug#FreeOSMemory",children:"FreeOSMemory()"})," at the specified interval. This tells the Go runtime to attempt to release memory which is no longer needed. Please note that this does not guarantee that the memory will be released to the OS, but over time you should see the RSS shrink sooner than without these settings."]}),"\n",(0,r.jsxs)(t.li,{children:["You may set the ",(0,r.jsx)(t.code,{children:"RESTART_INTERVAL"})," environment variable to a Go ",(0,r.jsx)(t.a,{href:"https://pkg.go.dev/maze.io/x/duration",children:"duration string"}),", e.g., ",(0,r.jsx)(t.code,{children:"10m"}),". The exporter will restart its own process at the specified iterval (by calling the OS ",(0,r.jsx)(t.code,{children:"exec"})," syscall). As no new process is created, the process identifier (PID) does not change, but the machine code, data, heap, and stack of the process are replaced by those of the new program (source: ",(0,r.jsx)(t.a,{href:"https://en.wikipedia.org/wiki/Exec_(system_call)",children:"Wikipedia"}),"). This has the side effect of freeing the resident set, so that it will return to its original size."]}),"\n",(0,r.jsxs)(t.li,{children:["In addition to these, you may also set ",(0,r.jsx)(t.code,{children:"GOMAXPROCS"}),", ",(0,r.jsx)(t.code,{children:"GOGC"}),", and ",(0,r.jsx)(t.code,{children:"GOMEMLIMIT"})," (see ",(0,r.jsx)(t.a,{href:"https://pkg.go.dev/runtime#hdr-Environment_Variables",children:"documentation"}),") to further limit the amount of resources that the Go runtime may use."]}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>s,x:()=>a});var o=n(6540);const r={},i=o.createContext(r);function s(e){const t=o.useContext(i);return o.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),o.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/a94703ab.0527b935.js b/docs/assets/js/a94703ab.0527b935.js new file mode 100644 index 00000000..2a4fde80 --- /dev/null +++ b/docs/assets/js/a94703ab.0527b935.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[9048],{1377:(e,t,n)=>{n.r(t),n.d(t,{default:()=>pe});var a=n(6540),o=n(4164),i=n(5500),s=n(7559),r=n(4718),c=n(609),l=n(1312),d=n(3104),u=n(5062);const m={backToTopButton:"backToTopButton_sjWU",backToTopButtonShow:"backToTopButtonShow_xfvO"};var b=n(4848);function h(){const{shown:e,scrollToTop:t}=function({threshold:e}){const[t,n]=(0,a.useState)(!1),o=(0,a.useRef)(!1),{startScroll:i,cancelScroll:s}=(0,d.gk)();return(0,d.Mq)(({scrollY:t},a)=>{const i=a?.scrollY;i&&(o.current?o.current=!1:t>=i?(s(),n(!1)):t<e?n(!1):t+window.innerHeight<document.documentElement.scrollHeight&&n(!0))}),(0,u.$)(e=>{e.location.hash&&(o.current=!0,n(!1))}),{shown:t,scrollToTop:()=>i(0)}}({threshold:300});return(0,b.jsx)("button",{"aria-label":(0,l.T)({id:"theme.BackToTopButton.buttonAriaLabel",message:"Scroll back to top",description:"The ARIA label for the back to top button"}),className:(0,o.A)("clean-btn",s.G.common.backToTopButton,m.backToTopButton,e&&m.backToTopButtonShow),type:"button",onClick:t})}var p=n(3109),x=n(6347),f=n(4581),j=n(6342),v=n(3465);function _(e){return(0,b.jsx)("svg",{width:"20",height:"20","aria-hidden":"true",...e,children:(0,b.jsxs)("g",{fill:"#7a7a7a",children:[(0,b.jsx)("path",{d:"M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"}),(0,b.jsx)("path",{d:"M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"})]})})}const g="collapseSidebarButton_PEFL",A="collapseSidebarButtonIcon_kv0_";function C({onClick:e}){return(0,b.jsx)("button",{type:"button",title:(0,l.T)({id:"theme.docs.sidebar.collapseButtonTitle",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),"aria-label":(0,l.T)({id:"theme.docs.sidebar.collapseButtonAriaLabel",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),className:(0,o.A)("button button--secondary button--outline",g),onClick:e,children:(0,b.jsx)(_,{className:A})})}var k=n(5041),S=n(9532);const T=Symbol("EmptyContext"),N=a.createContext(T);function I({children:e}){const[t,n]=(0,a.useState)(null),o=(0,a.useMemo)(()=>({expandedItem:t,setExpandedItem:n}),[t]);return(0,b.jsx)(N.Provider,{value:o,children:e})}var y=n(1422),B=n(9169),w=n(8774),L=n(2303);function E({collapsed:e,categoryLabel:t,onClick:n}){return(0,b.jsx)("button",{"aria-label":e?(0,l.T)({id:"theme.DocSidebarItem.expandCategoryAriaLabel",message:"Expand sidebar category '{label}'",description:"The ARIA label to expand the sidebar category"},{label:t}):(0,l.T)({id:"theme.DocSidebarItem.collapseCategoryAriaLabel",message:"Collapse sidebar category '{label}'",description:"The ARIA label to collapse the sidebar category"},{label:t}),"aria-expanded":!e,type:"button",className:"clean-btn menu__caret",onClick:n})}function M({item:e,onItemClick:t,activePath:n,level:i,index:c,...l}){const{items:d,label:u,collapsible:m,className:h,href:p}=e,{docs:{sidebar:{autoCollapseCategories:x}}}=(0,j.p)(),f=function(e){const t=(0,L.A)();return(0,a.useMemo)(()=>e.href&&!e.linkUnlisted?e.href:!t&&e.collapsible?(0,r.Nr)(e):void 0,[e,t])}(e),v=(0,r.w8)(e,n),_=(0,B.ys)(p,n),{collapsed:g,setCollapsed:A}=(0,y.u)({initialState:()=>!!m&&(!v&&e.collapsed)}),{expandedItem:C,setExpandedItem:k}=function(){const e=(0,a.useContext)(N);if(e===T)throw new S.dV("DocSidebarItemsExpandedStateProvider");return e}(),I=(e=!g)=>{k(e?null:c),A(e)};return function({isActive:e,collapsed:t,updateCollapsed:n}){const o=(0,S.ZC)(e);(0,a.useEffect)(()=>{e&&!o&&t&&n(!1)},[e,o,t,n])}({isActive:v,collapsed:g,updateCollapsed:I}),(0,a.useEffect)(()=>{m&&null!=C&&C!==c&&x&&A(!0)},[m,C,c,A,x]),(0,b.jsxs)("li",{className:(0,o.A)(s.G.docs.docSidebarItemCategory,s.G.docs.docSidebarItemCategoryLevel(i),"menu__list-item",{"menu__list-item--collapsed":g},h),children:[(0,b.jsxs)("div",{className:(0,o.A)("menu__list-item-collapsible",{"menu__list-item-collapsible--active":_}),children:[(0,b.jsx)(w.A,{className:(0,o.A)("menu__link",{"menu__link--sublist":m,"menu__link--sublist-caret":!p&&m,"menu__link--active":v}),onClick:m?n=>{t?.(e),p?_?(n.preventDefault(),I()):I(!1):(n.preventDefault(),I())}:()=>{t?.(e)},"aria-current":_?"page":void 0,role:m&&!p?"button":void 0,"aria-expanded":m&&!p?!g:void 0,href:m?f??"#":f,...l,children:u}),p&&m&&(0,b.jsx)(E,{collapsed:g,categoryLabel:u,onClick:e=>{e.preventDefault(),I()}})]}),(0,b.jsx)(y.N,{lazy:!0,as:"ul",className:"menu__list",collapsed:g,children:(0,b.jsx)(V,{items:d,tabIndex:g?-1:0,onItemClick:t,activePath:n,level:i+1})})]})}var H=n(6654),G=n(3186);const P="menuExternalLink_NmtK";function R({item:e,onItemClick:t,activePath:n,level:a,index:i,...c}){const{href:l,label:d,className:u,autoAddBaseUrl:m}=e,h=(0,r.w8)(e,n),p=(0,H.A)(l);return(0,b.jsx)("li",{className:(0,o.A)(s.G.docs.docSidebarItemLink,s.G.docs.docSidebarItemLinkLevel(a),"menu__list-item",u),children:(0,b.jsxs)(w.A,{className:(0,o.A)("menu__link",!p&&P,{"menu__link--active":h}),autoAddBaseUrl:m,"aria-current":h?"page":void 0,to:l,...p&&{onClick:t?()=>t(e):void 0},...c,children:[d,!p&&(0,b.jsx)(G.A,{})]})},d)}const W="menuHtmlItem_M9Kj";function D({item:e,level:t,index:n}){const{value:a,defaultStyle:i,className:r}=e;return(0,b.jsx)("li",{className:(0,o.A)(s.G.docs.docSidebarItemLink,s.G.docs.docSidebarItemLinkLevel(t),i&&[W,"menu__list-item"],r),dangerouslySetInnerHTML:{__html:a}},n)}function F({item:e,...t}){switch(e.type){case"category":return(0,b.jsx)(M,{item:e,...t});case"html":return(0,b.jsx)(D,{item:e,...t});default:return(0,b.jsx)(R,{item:e,...t})}}function U({items:e,...t}){const n=(0,r.Y)(e,t.activePath);return(0,b.jsx)(I,{children:n.map((e,n)=>(0,b.jsx)(F,{item:e,index:n,...t},n))})}const V=(0,a.memo)(U),Y="menu_SIkG",K="menuWithAnnouncementBar_GW3s";function z({path:e,sidebar:t,className:n}){const i=function(){const{isActive:e}=(0,k.M)(),[t,n]=(0,a.useState)(e);return(0,d.Mq)(({scrollY:t})=>{e&&n(0===t)},[e]),e&&t}();return(0,b.jsx)("nav",{"aria-label":(0,l.T)({id:"theme.docs.sidebar.navAriaLabel",message:"Docs sidebar",description:"The ARIA label for the sidebar navigation"}),className:(0,o.A)("menu thin-scrollbar",Y,i&&K,n),children:(0,b.jsx)("ul",{className:(0,o.A)(s.G.docs.docSidebarMenu,"menu__list"),children:(0,b.jsx)(V,{items:t,activePath:e,level:1})})})}const q="sidebar_njMd",O="sidebarWithHideableNavbar_wUlq",J="sidebarHidden_VK0M",Q="sidebarLogo_isFc";function X({path:e,sidebar:t,onCollapse:n,isHidden:a}){const{navbar:{hideOnScroll:i},docs:{sidebar:{hideable:s}}}=(0,j.p)();return(0,b.jsxs)("div",{className:(0,o.A)(q,i&&O,a&&J),children:[i&&(0,b.jsx)(v.A,{tabIndex:-1,className:Q}),(0,b.jsx)(z,{path:e,sidebar:t}),s&&(0,b.jsx)(C,{onClick:n})]})}const Z=a.memo(X);var $=n(5600),ee=n(9876);const te=({sidebar:e,path:t})=>{const n=(0,ee.M)();return(0,b.jsx)("ul",{className:(0,o.A)(s.G.docs.docSidebarMenu,"menu__list"),children:(0,b.jsx)(V,{items:e,activePath:t,onItemClick:e=>{"category"===e.type&&e.href&&n.toggle(),"link"===e.type&&n.toggle()},level:1})})};function ne(e){return(0,b.jsx)($.GX,{component:te,props:e})}const ae=a.memo(ne);function oe(e){const t=(0,f.l)(),n="desktop"===t||"ssr"===t,a="mobile"===t;return(0,b.jsxs)(b.Fragment,{children:[n&&(0,b.jsx)(Z,{...e}),a&&(0,b.jsx)(ae,{...e})]})}const ie={expandButton:"expandButton_TmdG",expandButtonIcon:"expandButtonIcon_i1dp"};function se({toggleSidebar:e}){return(0,b.jsx)("div",{className:ie.expandButton,title:(0,l.T)({id:"theme.docs.sidebar.expandButtonTitle",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),"aria-label":(0,l.T)({id:"theme.docs.sidebar.expandButtonAriaLabel",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),tabIndex:0,role:"button",onKeyDown:e,onClick:e,children:(0,b.jsx)(_,{className:ie.expandButtonIcon})})}const re={docSidebarContainer:"docSidebarContainer_YfHR",docSidebarContainerHidden:"docSidebarContainerHidden_DPk8",sidebarViewport:"sidebarViewport_aRkj"};function ce({children:e}){const t=(0,c.t)();return(0,b.jsx)(a.Fragment,{children:e},t?.name??"noSidebar")}function le({sidebar:e,hiddenSidebarContainer:t,setHiddenSidebarContainer:n}){const{pathname:i}=(0,x.zy)(),[r,c]=(0,a.useState)(!1),l=(0,a.useCallback)(()=>{r&&c(!1),!r&&(0,p.O)()&&c(!0),n(e=>!e)},[n,r]);return(0,b.jsx)("aside",{className:(0,o.A)(s.G.docs.docSidebarContainer,re.docSidebarContainer,t&&re.docSidebarContainerHidden),onTransitionEnd:e=>{e.currentTarget.classList.contains(re.docSidebarContainer)&&t&&c(!0)},children:(0,b.jsx)(ce,{children:(0,b.jsxs)("div",{className:(0,o.A)(re.sidebarViewport,r&&re.sidebarViewportHidden),children:[(0,b.jsx)(oe,{sidebar:e,path:i,onCollapse:l,isHidden:r}),r&&(0,b.jsx)(se,{toggleSidebar:l})]})})})}const de={docMainContainer:"docMainContainer_TBSr",docMainContainerEnhanced:"docMainContainerEnhanced_lQrH",docItemWrapperEnhanced:"docItemWrapperEnhanced_JWYK"};function ue({hiddenSidebarContainer:e,children:t}){const n=(0,c.t)();return(0,b.jsx)("main",{className:(0,o.A)(de.docMainContainer,(e||!n)&&de.docMainContainerEnhanced),children:(0,b.jsx)("div",{className:(0,o.A)("container padding-top--md padding-bottom--lg",de.docItemWrapper,e&&de.docItemWrapperEnhanced),children:t})})}const me={docRoot:"docRoot_UBD9",docsWrapper:"docsWrapper_hBAB"};function be({children:e}){const t=(0,c.t)(),[n,o]=(0,a.useState)(!1);return(0,b.jsxs)("div",{className:me.docsWrapper,children:[(0,b.jsx)(h,{}),(0,b.jsxs)("div",{className:me.docRoot,children:[t&&(0,b.jsx)(le,{sidebar:t.items,hiddenSidebarContainer:n,setHiddenSidebarContainer:o}),(0,b.jsx)(ue,{hiddenSidebarContainer:n,children:e})]})]})}var he=n(3363);function pe(e){const t=(0,r.B5)(e);if(!t)return(0,b.jsx)(he.A,{});const{docElement:n,sidebarName:a,sidebarItems:l}=t;return(0,b.jsx)(i.e3,{className:(0,o.A)(s.G.page.docsDocPage),children:(0,b.jsx)(c.V,{name:a,items:l,children:(0,b.jsx)(be,{children:n})})})}},3363:(e,t,n)=>{n.d(t,{A:()=>r});n(6540);var a=n(4164),o=n(1312),i=n(1107),s=n(4848);function r({className:e}){return(0,s.jsx)("main",{className:(0,a.A)("container margin-vert--xl",e),children:(0,s.jsx)("div",{className:"row",children:(0,s.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,s.jsx)(i.A,{as:"h1",className:"hero__title",children:(0,s.jsx)(o.A,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,s.jsx)("p",{children:(0,s.jsx)(o.A,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,s.jsx)("p",{children:(0,s.jsx)(o.A,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})})]})})})}}}]); \ No newline at end of file diff --git a/docs/assets/js/a94703ab.643e6934.js b/docs/assets/js/a94703ab.643e6934.js deleted file mode 100644 index f12d49f6..00000000 --- a/docs/assets/js/a94703ab.643e6934.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[48],{1377:(e,t,n)=>{n.r(t),n.d(t,{default:()=>pe});var a=n(6540),o=n(4164),i=n(5500),s=n(7559),r=n(4718),c=n(609),l=n(1312),d=n(3104),u=n(5062);const m={backToTopButton:"backToTopButton_sjWU",backToTopButtonShow:"backToTopButtonShow_xfvO"};var b=n(4848);function h(){const{shown:e,scrollToTop:t}=function({threshold:e}){const[t,n]=(0,a.useState)(!1),o=(0,a.useRef)(!1),{startScroll:i,cancelScroll:s}=(0,d.gk)();return(0,d.Mq)(({scrollY:t},a)=>{const i=a?.scrollY;i&&(o.current?o.current=!1:t>=i?(s(),n(!1)):t<e?n(!1):t+window.innerHeight<document.documentElement.scrollHeight&&n(!0))}),(0,u.$)(e=>{e.location.hash&&(o.current=!0,n(!1))}),{shown:t,scrollToTop:()=>i(0)}}({threshold:300});return(0,b.jsx)("button",{"aria-label":(0,l.T)({id:"theme.BackToTopButton.buttonAriaLabel",message:"Scroll back to top",description:"The ARIA label for the back to top button"}),className:(0,o.A)("clean-btn",s.G.common.backToTopButton,m.backToTopButton,e&&m.backToTopButtonShow),type:"button",onClick:t})}var p=n(3109),x=n(6347),f=n(4581),j=n(6342),v=n(3465);function _(e){return(0,b.jsx)("svg",{width:"20",height:"20","aria-hidden":"true",...e,children:(0,b.jsxs)("g",{fill:"#7a7a7a",children:[(0,b.jsx)("path",{d:"M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"}),(0,b.jsx)("path",{d:"M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"})]})})}const g="collapseSidebarButton_PEFL",A="collapseSidebarButtonIcon_kv0_";function C({onClick:e}){return(0,b.jsx)("button",{type:"button",title:(0,l.T)({id:"theme.docs.sidebar.collapseButtonTitle",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),"aria-label":(0,l.T)({id:"theme.docs.sidebar.collapseButtonAriaLabel",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),className:(0,o.A)("button button--secondary button--outline",g),onClick:e,children:(0,b.jsx)(_,{className:A})})}var k=n(5041),S=n(9532);const T=Symbol("EmptyContext"),N=a.createContext(T);function I({children:e}){const[t,n]=(0,a.useState)(null),o=(0,a.useMemo)(()=>({expandedItem:t,setExpandedItem:n}),[t]);return(0,b.jsx)(N.Provider,{value:o,children:e})}var y=n(1422),B=n(9169),w=n(8774),L=n(2303);function E({collapsed:e,categoryLabel:t,onClick:n}){return(0,b.jsx)("button",{"aria-label":e?(0,l.T)({id:"theme.DocSidebarItem.expandCategoryAriaLabel",message:"Expand sidebar category '{label}'",description:"The ARIA label to expand the sidebar category"},{label:t}):(0,l.T)({id:"theme.DocSidebarItem.collapseCategoryAriaLabel",message:"Collapse sidebar category '{label}'",description:"The ARIA label to collapse the sidebar category"},{label:t}),"aria-expanded":!e,type:"button",className:"clean-btn menu__caret",onClick:n})}function M({item:e,onItemClick:t,activePath:n,level:i,index:c,...l}){const{items:d,label:u,collapsible:m,className:h,href:p}=e,{docs:{sidebar:{autoCollapseCategories:x}}}=(0,j.p)(),f=function(e){const t=(0,L.A)();return(0,a.useMemo)(()=>e.href&&!e.linkUnlisted?e.href:!t&&e.collapsible?(0,r.Nr)(e):void 0,[e,t])}(e),v=(0,r.w8)(e,n),_=(0,B.ys)(p,n),{collapsed:g,setCollapsed:A}=(0,y.u)({initialState:()=>!!m&&(!v&&e.collapsed)}),{expandedItem:C,setExpandedItem:k}=function(){const e=(0,a.useContext)(N);if(e===T)throw new S.dV("DocSidebarItemsExpandedStateProvider");return e}(),I=(e=!g)=>{k(e?null:c),A(e)};return function({isActive:e,collapsed:t,updateCollapsed:n}){const o=(0,S.ZC)(e);(0,a.useEffect)(()=>{e&&!o&&t&&n(!1)},[e,o,t,n])}({isActive:v,collapsed:g,updateCollapsed:I}),(0,a.useEffect)(()=>{m&&null!=C&&C!==c&&x&&A(!0)},[m,C,c,A,x]),(0,b.jsxs)("li",{className:(0,o.A)(s.G.docs.docSidebarItemCategory,s.G.docs.docSidebarItemCategoryLevel(i),"menu__list-item",{"menu__list-item--collapsed":g},h),children:[(0,b.jsxs)("div",{className:(0,o.A)("menu__list-item-collapsible",{"menu__list-item-collapsible--active":_}),children:[(0,b.jsx)(w.A,{className:(0,o.A)("menu__link",{"menu__link--sublist":m,"menu__link--sublist-caret":!p&&m,"menu__link--active":v}),onClick:m?n=>{t?.(e),p?_?(n.preventDefault(),I()):I(!1):(n.preventDefault(),I())}:()=>{t?.(e)},"aria-current":_?"page":void 0,role:m&&!p?"button":void 0,"aria-expanded":m&&!p?!g:void 0,href:m?f??"#":f,...l,children:u}),p&&m&&(0,b.jsx)(E,{collapsed:g,categoryLabel:u,onClick:e=>{e.preventDefault(),I()}})]}),(0,b.jsx)(y.N,{lazy:!0,as:"ul",className:"menu__list",collapsed:g,children:(0,b.jsx)(V,{items:d,tabIndex:g?-1:0,onItemClick:t,activePath:n,level:i+1})})]})}var H=n(6654),G=n(3186);const P="menuExternalLink_NmtK";function R({item:e,onItemClick:t,activePath:n,level:a,index:i,...c}){const{href:l,label:d,className:u,autoAddBaseUrl:m}=e,h=(0,r.w8)(e,n),p=(0,H.A)(l);return(0,b.jsx)("li",{className:(0,o.A)(s.G.docs.docSidebarItemLink,s.G.docs.docSidebarItemLinkLevel(a),"menu__list-item",u),children:(0,b.jsxs)(w.A,{className:(0,o.A)("menu__link",!p&&P,{"menu__link--active":h}),autoAddBaseUrl:m,"aria-current":h?"page":void 0,to:l,...p&&{onClick:t?()=>t(e):void 0},...c,children:[d,!p&&(0,b.jsx)(G.A,{})]})},d)}const W="menuHtmlItem_M9Kj";function D({item:e,level:t,index:n}){const{value:a,defaultStyle:i,className:r}=e;return(0,b.jsx)("li",{className:(0,o.A)(s.G.docs.docSidebarItemLink,s.G.docs.docSidebarItemLinkLevel(t),i&&[W,"menu__list-item"],r),dangerouslySetInnerHTML:{__html:a}},n)}function F({item:e,...t}){switch(e.type){case"category":return(0,b.jsx)(M,{item:e,...t});case"html":return(0,b.jsx)(D,{item:e,...t});default:return(0,b.jsx)(R,{item:e,...t})}}function U({items:e,...t}){const n=(0,r.Y)(e,t.activePath);return(0,b.jsx)(I,{children:n.map((e,n)=>(0,b.jsx)(F,{item:e,index:n,...t},n))})}const V=(0,a.memo)(U),Y="menu_SIkG",K="menuWithAnnouncementBar_GW3s";function z({path:e,sidebar:t,className:n}){const i=function(){const{isActive:e}=(0,k.M)(),[t,n]=(0,a.useState)(e);return(0,d.Mq)(({scrollY:t})=>{e&&n(0===t)},[e]),e&&t}();return(0,b.jsx)("nav",{"aria-label":(0,l.T)({id:"theme.docs.sidebar.navAriaLabel",message:"Docs sidebar",description:"The ARIA label for the sidebar navigation"}),className:(0,o.A)("menu thin-scrollbar",Y,i&&K,n),children:(0,b.jsx)("ul",{className:(0,o.A)(s.G.docs.docSidebarMenu,"menu__list"),children:(0,b.jsx)(V,{items:t,activePath:e,level:1})})})}const q="sidebar_njMd",O="sidebarWithHideableNavbar_wUlq",J="sidebarHidden_VK0M",Q="sidebarLogo_isFc";function X({path:e,sidebar:t,onCollapse:n,isHidden:a}){const{navbar:{hideOnScroll:i},docs:{sidebar:{hideable:s}}}=(0,j.p)();return(0,b.jsxs)("div",{className:(0,o.A)(q,i&&O,a&&J),children:[i&&(0,b.jsx)(v.A,{tabIndex:-1,className:Q}),(0,b.jsx)(z,{path:e,sidebar:t}),s&&(0,b.jsx)(C,{onClick:n})]})}const Z=a.memo(X);var $=n(5600),ee=n(9876);const te=({sidebar:e,path:t})=>{const n=(0,ee.M)();return(0,b.jsx)("ul",{className:(0,o.A)(s.G.docs.docSidebarMenu,"menu__list"),children:(0,b.jsx)(V,{items:e,activePath:t,onItemClick:e=>{"category"===e.type&&e.href&&n.toggle(),"link"===e.type&&n.toggle()},level:1})})};function ne(e){return(0,b.jsx)($.GX,{component:te,props:e})}const ae=a.memo(ne);function oe(e){const t=(0,f.l)(),n="desktop"===t||"ssr"===t,a="mobile"===t;return(0,b.jsxs)(b.Fragment,{children:[n&&(0,b.jsx)(Z,{...e}),a&&(0,b.jsx)(ae,{...e})]})}const ie={expandButton:"expandButton_TmdG",expandButtonIcon:"expandButtonIcon_i1dp"};function se({toggleSidebar:e}){return(0,b.jsx)("div",{className:ie.expandButton,title:(0,l.T)({id:"theme.docs.sidebar.expandButtonTitle",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),"aria-label":(0,l.T)({id:"theme.docs.sidebar.expandButtonAriaLabel",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),tabIndex:0,role:"button",onKeyDown:e,onClick:e,children:(0,b.jsx)(_,{className:ie.expandButtonIcon})})}const re={docSidebarContainer:"docSidebarContainer_YfHR",docSidebarContainerHidden:"docSidebarContainerHidden_DPk8",sidebarViewport:"sidebarViewport_aRkj"};function ce({children:e}){const t=(0,c.t)();return(0,b.jsx)(a.Fragment,{children:e},t?.name??"noSidebar")}function le({sidebar:e,hiddenSidebarContainer:t,setHiddenSidebarContainer:n}){const{pathname:i}=(0,x.zy)(),[r,c]=(0,a.useState)(!1),l=(0,a.useCallback)(()=>{r&&c(!1),!r&&(0,p.O)()&&c(!0),n(e=>!e)},[n,r]);return(0,b.jsx)("aside",{className:(0,o.A)(s.G.docs.docSidebarContainer,re.docSidebarContainer,t&&re.docSidebarContainerHidden),onTransitionEnd:e=>{e.currentTarget.classList.contains(re.docSidebarContainer)&&t&&c(!0)},children:(0,b.jsx)(ce,{children:(0,b.jsxs)("div",{className:(0,o.A)(re.sidebarViewport,r&&re.sidebarViewportHidden),children:[(0,b.jsx)(oe,{sidebar:e,path:i,onCollapse:l,isHidden:r}),r&&(0,b.jsx)(se,{toggleSidebar:l})]})})})}const de={docMainContainer:"docMainContainer_TBSr",docMainContainerEnhanced:"docMainContainerEnhanced_lQrH",docItemWrapperEnhanced:"docItemWrapperEnhanced_JWYK"};function ue({hiddenSidebarContainer:e,children:t}){const n=(0,c.t)();return(0,b.jsx)("main",{className:(0,o.A)(de.docMainContainer,(e||!n)&&de.docMainContainerEnhanced),children:(0,b.jsx)("div",{className:(0,o.A)("container padding-top--md padding-bottom--lg",de.docItemWrapper,e&&de.docItemWrapperEnhanced),children:t})})}const me={docRoot:"docRoot_UBD9",docsWrapper:"docsWrapper_hBAB"};function be({children:e}){const t=(0,c.t)(),[n,o]=(0,a.useState)(!1);return(0,b.jsxs)("div",{className:me.docsWrapper,children:[(0,b.jsx)(h,{}),(0,b.jsxs)("div",{className:me.docRoot,children:[t&&(0,b.jsx)(le,{sidebar:t.items,hiddenSidebarContainer:n,setHiddenSidebarContainer:o}),(0,b.jsx)(ue,{hiddenSidebarContainer:n,children:e})]})]})}var he=n(3363);function pe(e){const t=(0,r.B5)(e);if(!t)return(0,b.jsx)(he.A,{});const{docElement:n,sidebarName:a,sidebarItems:l}=t;return(0,b.jsx)(i.e3,{className:(0,o.A)(s.G.page.docsDocPage),children:(0,b.jsx)(c.V,{name:a,items:l,children:(0,b.jsx)(be,{children:n})})})}},3363:(e,t,n)=>{n.d(t,{A:()=>r});n(6540);var a=n(4164),o=n(1312),i=n(1107),s=n(4848);function r({className:e}){return(0,s.jsx)("main",{className:(0,a.A)("container margin-vert--xl",e),children:(0,s.jsx)("div",{className:"row",children:(0,s.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,s.jsx)(i.A,{as:"h1",className:"hero__title",children:(0,s.jsx)(o.A,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,s.jsx)("p",{children:(0,s.jsx)(o.A,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,s.jsx)("p",{children:(0,s.jsx)(o.A,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})})]})})})}}}]); \ No newline at end of file diff --git a/docs/assets/js/a989571e.01007baf.js b/docs/assets/js/a989571e.01007baf.js deleted file mode 100644 index 40f49c4b..00000000 --- a/docs/assets/js/a989571e.01007baf.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[898],{5892:e=>{e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Advanced","description":"Advanced configuration.","slug":"/category/advanced","permalink":"/oracle-db-appdev-monitoring/docs/category/advanced","sidebar":"tutorialSidebar","navigation":{"previous":{"title":"Azure Vault","permalink":"/oracle-db-appdev-monitoring/docs/configuration/azure-vault"},"next":{"title":"Configuring the Go Runtime","permalink":"/oracle-db-appdev-monitoring/docs/advanced/go-runtime"}}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/a989571e.754a5e4f.js b/docs/assets/js/a989571e.754a5e4f.js new file mode 100644 index 00000000..079f4de4 --- /dev/null +++ b/docs/assets/js/a989571e.754a5e4f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[6898],{5892:e=>{e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Advanced","description":"Advanced configuration.","slug":"/category/advanced","permalink":"/oracle-db-appdev-monitoring/docs/category/advanced","sidebar":"tutorialSidebar","navigation":{"previous":{"title":"Azure Vault","permalink":"/oracle-db-appdev-monitoring/docs/configuration/azure-vault"},"next":{"title":"Configuring the Go Runtime","permalink":"/oracle-db-appdev-monitoring/docs/advanced/go-runtime"}}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/ab01181e.bd6e5167.js b/docs/assets/js/ab01181e.bd6e5167.js new file mode 100644 index 00000000..c5eef3c2 --- /dev/null +++ b/docs/assets/js/ab01181e.bd6e5167.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[170],{3859:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>l,contentTitle:()=>s,default:()=>f,frontMatter:()=>r,metadata:()=>t,toc:()=>c});const t=JSON.parse('{"id":"configuration/config-file","title":"Exporter Config File","description":"The recommended way to configure the exporter is with the --config.file argument, specifying a YAML configuration file.","source":"@site/versioned_docs/version-2.0.3/configuration/config-file.md","sourceDirName":"configuration","slug":"/configuration/config-file","permalink":"/oracle-db-appdev-monitoring/docs/configuration/config-file","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/versioned_docs/version-2.0.3/configuration/config-file.md","tags":[],"version":"2.0.3","sidebarPosition":1,"frontMatter":{"title":"Exporter Config File","sidebar_position":1},"sidebar":"tutorialSidebar","previous":{"title":"Configuration","permalink":"/oracle-db-appdev-monitoring/docs/category/configuration"},"next":{"title":"Custom Metrics","permalink":"/oracle-db-appdev-monitoring/docs/configuration/custom-metrics"}}');var i=o(4848),a=o(8453);const r={title:"Exporter Config File",sidebar_position:1},s="Exporter Config File",l={},c=[{value:"Config file in a container image",id:"config-file-in-a-container-image",level:3}];function d(e){const n={code:"code",h1:"h1",h3:"h3",header:"header",p:"p",pre:"pre",...(0,a.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"exporter-config-file",children:"Exporter Config File"})}),"\n",(0,i.jsxs)(n.p,{children:["The recommended way to configure the exporter is with the ",(0,i.jsx)(n.code,{children:"--config.file"})," argument, specifying a YAML configuration file."]}),"\n",(0,i.jsx)(n.p,{children:"The configuration file contains the following options:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"# Example Oracle Database Metrics Exporter Configuration file.\n# Environment variables of the form ${VAR_NAME} will be expanded.\n# If you include a config value that contains a '$' character, escape that '$' with another '$', e.g.,\n# \"$test$pwd\" => \"$$test$$pwd\"\n# Otherwise, the value will be expanded as an environment variable.\n\n# Example Oracle Database Metrics Exporter Configuration file.\n# Environment variables of the form ${VAR_NAME} will be expanded.\n\ndatabases:\n ## Path on which metrics will be served\n # metricsPath: /metrics\n ## Database connection information for the \"default\" database.\n default:\n ## Database username\n username: ${DB_USERNAME}\n ## Database password\n password: ${DB_PASSWORD}\n ## Database password file\n ## If specified, will load the database password from a file.\n # passwordFile: ${DB_PASSWORD_FILE}\n ## Database connection url\n url: localhost:1521/freepdb1\n\n ## Metrics query timeout for this database, in seconds\n queryTimeout: 5\n\n ## Rely on Oracle Database External Authentication by network or OS\n # externalAuth: false\n ## Database role\n # role: SYSDBA\n ## Path to Oracle Database wallet, if using wallet\n # tnsAdmin: /path/to/database/wallet\n\n ### Connection settings:\n ### Either the go-sql or Oracle Database connection pool may be used.\n ### To use the Oracle Database connection pool over the go-sql connection pool,\n ### set maxIdleConns to zero and configure the pool* settings.\n\n ### Connection pooling settings for the go-sql connection pool\n ## Max open connections for this database using go-sql connection pool\n maxOpenConns: 10\n ## Max idle connections for this database using go-sql connection pool\n maxIdleConns: 10\n\n ### Connection pooling settings for the Oracle Database connection pool\n ## Oracle Database connection pool increment.\n # poolIncrement: 1\n ## Oracle Database Connection pool maximum size\n # poolMaxConnections: 15\n ## Oracle Database Connection pool minimum size\n # poolMinConnections: 15\n\n ## Arbitrary labels to add to each metric scraped from this database\n # labels:\n # label_name1: label_value1\n # label_name2: label_value2\n\nmetrics:\n ## How often to scrape metrics. If not provided, metrics will be scraped on request.\n # scrapeInterval: 15s\n ## Path to default metrics file.\n default: default-metrics.toml\n ## Paths to any custom metrics files\n custom:\n - custom-metrics-example/custom-metrics.toml\n\nlog:\n # Path of log file\n destination: /opt/alert.log\n # Interval of log updates\n interval: 15s\n ## Set disable to 1 to disable logging\n # disable: 0\n\n# Optionally configure prometheus webserver\n#web:\n# listenAddresses: [':9161']\n# systemdSocket: true|false\n# configFile: /path/to/webconfigfile\n"})}),"\n",(0,i.jsx)(n.h3,{id:"config-file-in-a-container-image",children:"Config file in a container image"}),"\n",(0,i.jsx)(n.p,{children:"To add your custom config file to a container image, you can layer the base exporter image and include that config:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-Dockerfile",children:'FROM container-registry.oracle.com/database/observability-exporter:2.0.2\nCOPY my-exporter-config.yaml /\nENTRYPOINT ["/oracledb_exporter", "--config.file", "/my-exporter-config.yaml"]\n'})})]})}function f(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},8453:(e,n,o)=>{o.d(n,{R:()=>r,x:()=>s});var t=o(6540);const i={},a=t.createContext(i);function r(e){const n=t.useContext(a);return t.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/aba21aa0.6827c32a.js b/docs/assets/js/aba21aa0.6827c32a.js new file mode 100644 index 00000000..08475dfb --- /dev/null +++ b/docs/assets/js/aba21aa0.6827c32a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[5742],{7093:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]); \ No newline at end of file diff --git a/docs/assets/js/aba21aa0.ef5bd9e3.js b/docs/assets/js/aba21aa0.ef5bd9e3.js deleted file mode 100644 index 79d230c8..00000000 --- a/docs/assets/js/aba21aa0.ef5bd9e3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[742],{7093:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]); \ No newline at end of file diff --git a/docs/assets/js/af966633.0bc25fd8.js b/docs/assets/js/af966633.0bc25fd8.js deleted file mode 100644 index cd7d592a..00000000 --- a/docs/assets/js/af966633.0bc25fd8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[173],{1035:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>s,metadata:()=>o,toc:()=>c});const o=JSON.parse('{"id":"getting-started/basics","title":"Installation","description":"In this section you will find information on running the exporter.","source":"@site/docs/getting-started/basics.md","sourceDirName":"getting-started","slug":"/getting-started/basics","permalink":"/oracle-db-appdev-monitoring/docs/getting-started/basics","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/docs/getting-started/basics.md","tags":[],"version":"current","sidebarPosition":1,"frontMatter":{"title":"Installation","sidebar_position":1},"sidebar":"tutorialSidebar","previous":{"title":"Getting Started","permalink":"/oracle-db-appdev-monitoring/docs/category/getting-started"},"next":{"title":"Default Metrics","permalink":"/oracle-db-appdev-monitoring/docs/getting-started/default-metrics"}}');var a=t(4848),i=t(8453);const s={title:"Installation",sidebar_position:1},r="Installation",l={},c=[{value:"Docker, Podman, etc",id:"docker-podman-etc",level:2},{value:"Oracle Database Free",id:"oracle-database-free",level:3},{value:"Exporter",id:"exporter",level:3},{value:"Simple connection",id:"simple-connection",level:3},{value:"Standalone Binary",id:"standalone-binary",level:2},{value:"Docker Compose",id:"docker-compose",level:3}];function d(e){const n={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.header,{children:(0,a.jsx)(n.h1,{id:"installation",children:"Installation"})}),"\n",(0,a.jsx)(n.p,{children:"In this section you will find information on running the exporter."}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["In a container runtime like ",(0,a.jsx)(n.a,{href:"#docker-podman-etc",children:"Docker, Podman, etc"})]}),"\n",(0,a.jsxs)(n.li,{children:["In a test/demo environment using ",(0,a.jsx)(n.a,{href:"#docker-compose",children:"Docker Compose"})]}),"\n",(0,a.jsxs)(n.li,{children:["In ",(0,a.jsx)(n.a,{href:"/oracle-db-appdev-monitoring/docs/getting-started/kubernetes",children:"Kubernetes"})]}),"\n",(0,a.jsxs)(n.li,{children:["As a ",(0,a.jsx)(n.a,{href:"#standalone-binary",children:"standalone binary"})]}),"\n"]}),"\n",(0,a.jsx)(n.h2,{id:"docker-podman-etc",children:"Docker, Podman, etc"}),"\n",(0,a.jsxs)(n.p,{children:["You can run the exporter in a local container using a container image from ",(0,a.jsx)(n.a,{href:"https://container-registry.oracle.com",children:"Oracle Container Registry"}),'. The container image is available in the "observability-exporter" repository in the "Database" category. No authentication or license presentment/acceptance are required to pull this image from the registry.']}),"\n",(0,a.jsx)(n.h3,{id:"oracle-database-free",children:"Oracle Database Free"}),"\n",(0,a.jsxs)(n.p,{children:["If you need an Oracle Database to test the exporter, you can use this command to start up an instance of ",(0,a.jsx)(n.a,{href:"https://www.oracle.com/database/free/",children:"Oracle Database Free"})," which also requires no authentication or license presentment/acceptance to pull the image."]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"docker run --name free23ai \\\n -d \\\n -p 1521:1521 \\\n -e ORACLE_PASSWORD=Welcome12345 \\\n gvenzl/oracle-free:23.9-slim-faststart\n"})}),"\n",(0,a.jsx)(n.p,{children:'This will pull the image and start up the database with a listener on port 1521. It will also create a pluggable database (a database container) called "FREEPDB1" and will set the admin passwords to the password you specified on this command.'}),"\n",(0,a.jsx)(n.p,{children:"You can tail the logs to see when the database is ready to use:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"docker logs -f free23ai\n\n(look for this message...)\n#########################\nDATABASE IS READY TO USE!\n#########################\n"})}),"\n",(0,a.jsx)(n.p,{children:'To obtain the IP address of the container, which you will need to connect to the database, use this command. Note: depending on your platform and container runtime, you may be able to access the database at "localhost":'}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'docker inspect free23ai | grep IPA\n "SecondaryIPAddresses": null,\n "IPAddress": "172.17.0.2",\n "IPAMConfig": null,\n "IPAddress": "172.17.0.2",\n'})}),"\n",(0,a.jsx)(n.h3,{id:"exporter",children:"Exporter"}),"\n",(0,a.jsx)(n.p,{children:"You need to give the exporter the connection details for the Oracle Database that you want it to run against. You can use a simple connection, or a wallet."}),"\n",(0,a.jsx)(n.h3,{id:"simple-connection",children:"Simple connection"}),"\n",(0,a.jsx)(n.p,{children:"For a simple connection, you will provide the details using these variables:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_USERNAME"})," is the database username, e.g., ",(0,a.jsx)(n.code,{children:"pdbadmin"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_PASSWORD"})," is the password for that user, e.g., ",(0,a.jsx)(n.code,{children:"Welcome12345"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_CONNECT_STRING"})," is the connection string, e.g., ",(0,a.jsx)(n.code,{children:"free23ai:1521/freepdb"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_ROLE"})," (Optional) can be set to ",(0,a.jsx)(n.code,{children:"SYSDBA"}),", ",(0,a.jsx)(n.code,{children:"SYSOPER"}),", ",(0,a.jsx)(n.code,{children:"SYSBACKUP"}),", ",(0,a.jsx)(n.code,{children:"SYSDG"}),", ",(0,a.jsx)(n.code,{children:"SYSKM"}),", ",(0,a.jsx)(n.code,{children:"SYSRAC"})," or ",(0,a.jsx)(n.code,{children:"SYSASM"})," if you want to connect with one of those roles, however Oracle recommends that you connect with the lowest possible privileges and roles necessary for the exporter to run."]}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:"To run the exporter in a container and expose the port, use a command like this, with the appropriate values for the environment variables:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"docker run -it --rm \\\n -e DB_USERNAME=pdbadmin \\\n -e DB_PASSWORD=Welcome12345 \\\n -e DB_CONNECT_STRING=free23ai:1521/freepdb \\\n -p 9161:9161 \\\n container-registry.oracle.com/database/observability-exporter:2.0.2\n"})}),"\n",(0,a.jsx)(n.h2,{id:"standalone-binary",children:"Standalone Binary"}),"\n",(0,a.jsxs)(n.p,{children:["Pre-compiled versions for Linux, ARM and Darwin 64-bit can be found under ",(0,a.jsx)(n.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/releases",children:"releases"}),"."]}),"\n",(0,a.jsxs)(n.p,{children:["In order to run, you'll need the ",(0,a.jsx)(n.a,{href:"http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html",children:"Oracle Instant Client Basic"})," for your operating system. Only the basic version is required for the exporter."]}),"\n",(0,a.jsxs)(n.blockquote,{children:["\n",(0,a.jsxs)(n.p,{children:["NOTE: If you are running the Standalone binary on a Mac ARM platform you must set the variable ",(0,a.jsx)(n.code,{children:"DYLD_LIBRARY_PATH"})," to the location of where the instant client installed. For example ",(0,a.jsx)(n.code,{children:"export DYLD_LIBRARY_PATH=/lib/oracle/instantclient_23_3"}),"."]}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:"The following command line arguments (flags) can be passed to the exporter (the --help flag will show the table below)."}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'Usage of oracledb_exporter:\n --config.file="example-config.yaml"\n File with metrics exporter configuration. (env: CONFIG_FILE)\n --web.telemetry-path="/metrics"\n Path under which to expose metrics. (env: TELEMETRY_PATH)\n --default.metrics="default-metrics.toml"\n File with default metrics in a TOML file. (env: DEFAULT_METRICS)\n --custom.metrics="" Comma separated list of file(s) that contain various custom metrics in a TOML format. (env: CUSTOM_METRICS)\n --query.timeout=5 Query timeout (in seconds). (env: QUERY_TIMEOUT)\n --database.maxIdleConns=0 Number of maximum idle connections in the connection pool. (env: DATABASE_MAXIDLECONNS)\n --database.maxOpenConns=10\n Number of maximum open connections in the connection pool. (env: DATABASE_MAXOPENCONNS)\n --database.poolIncrement=-1\n Connection increment when the connection pool reaches max capacity. (env: DATABASE_POOLINCREMENT)\n --database.poolMaxConnections=-1\n Maximum number of connections in the connection pool. (env: DATABASE_POOLMAXCONNECTIONS)\n --database.poolMinConnections=-1\n Minimum number of connections in the connection pool. (env: DATABASE_POOLMINCONNECTIONS)\n --scrape.interval=0s Interval between each scrape. Default is to scrape on collect requests.\n --log.disable=0 Set to 1 to disable alert logs\n --log.interval=15s Interval between log updates (e.g. 5s).\n --log.destination="/log/alert.log"\n File to output the alert log to. (env: LOG_DESTINATION)\n --web.listen-address=:9161 ...\n Addresses on which to expose metrics and web interface. Repeatable for multiple addresses. Examples: `:9100` or `[::1]:9100` for http, `vsock://:9100` for vsock\n --web.config.file="" Path to configuration file that can enable TLS or authentication. See: https://github.com/prometheus/exporter-toolkit/blob/master/docs/web-configuration.md\n --log.level=info Only log messages with the given severity or above. One of: [debug, info, warn, error]\n --log.format=logfmt Output format of log messages. One of: [logfmt, json]\n --[no-]version Show application version.\n'})}),"\n",(0,a.jsx)(n.p,{children:"You may provide the connection details using these variables:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_USERNAME"})," is the database username, e.g., ",(0,a.jsx)(n.code,{children:"pdbadmin"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_PASSWORD"})," is the password for that user, e.g., ",(0,a.jsx)(n.code,{children:"Welcome12345"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_CONNECT_STRING"})," is the connection string, e.g., ",(0,a.jsx)(n.code,{children:"localhost:1521/freepdb1"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_ROLE"})," (Optional) can be set to ",(0,a.jsx)(n.code,{children:"SYSDBA"})," or ",(0,a.jsx)(n.code,{children:"SYSOPER"})," if you want to connect with one of those roles, however Oracle recommends that you connect with the lowest possible privileges and roles necessary for the exporter to run."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"ORACLE_HOME"})," is the location of the Oracle Instant Client, e.g., ",(0,a.jsx)(n.code,{children:"/lib/oracle/21/client64/lib"}),"."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"TNS_ADMIN"})," is the location of your (unzipped) wallet. The ",(0,a.jsx)(n.code,{children:"DIRECTORY"})," set in the ",(0,a.jsx)(n.code,{children:"sqlnet.ora"})," file must match the path that it will be mounted on inside the container."]}),"\n"]}),"\n",(0,a.jsxs)(n.p,{children:["The following example puts the logfile in the current location with the filename ",(0,a.jsx)(n.code,{children:"alert.log"})," and loads the default matrics file (",(0,a.jsx)(n.code,{children:"default-metrics,toml"}),") from the current location."]}),"\n",(0,a.jsxs)(n.p,{children:["If you prefer to provide configuration via a ",(0,a.jsx)(n.a,{href:"/oracle-db-appdev-monitoring/docs/configuration/config-file",children:"config file"}),", you may do so with the ",(0,a.jsx)(n.code,{children:"--config.file"}),' argument. The use of a config file over command line arguments is preferred. If a config file is not provided, the "default" database connection is managed by command line arguments.']}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"# Example Oracle Database Metrics Exporter Configuration file.\n# Environment variables of the form ${VAR_NAME} will be expanded.\n# If you include a config value that contains a '$' character, escape that '$' with another '$', e.g.,\n# \"$test$pwd\" => \"$$test$$pwd\"\n# Otherwise, the value will be expanded as an environment variable.\n\n# Example Oracle Database Metrics Exporter Configuration file.\n# Environment variables of the form ${VAR_NAME} will be expanded.\n\ndatabases:\n ## Path on which metrics will be served\n # metricsPath: /metrics\n ## Database connection information for the \"default\" database.\n default:\n ## Database username\n username: ${DB_USERNAME}\n ## Database password\n password: ${DB_PASSWORD}\n ## Database password file\n ## If specified, will load the database password from a file.\n # passwordFile: ${DB_PASSWORD_FILE}\n ## Database connection url\n url: localhost:1521/freepdb1\n\n ## Metrics query timeout for this database, in seconds\n queryTimeout: 5\n\n ## Rely on Oracle Database External Authentication by network or OS\n # externalAuth: false\n ## Database role\n # role: SYSDBA\n ## Path to Oracle Database wallet, if using wallet\n # tnsAdmin: /path/to/database/wallet\n\n ### Connection settings:\n ### Either the go-sql or Oracle Database connection pool may be used.\n ### To use the Oracle Database connection pool over the go-sql connection pool,\n ### set maxIdleConns to zero and configure the pool* settings.\n\n ### Connection pooling settings for the go-sql connection pool\n ## Max open connections for this database using go-sql connection pool\n maxOpenConns: 10\n ## Max idle connections for this database using go-sql connection pool\n maxIdleConns: 10\n\n ### Connection pooling settings for the Oracle Database connection pool\n ## Oracle Database connection pool increment.\n # poolIncrement: 1\n ## Oracle Database Connection pool maximum size\n # poolMaxConnections: 15\n ## Oracle Database Connection pool minimum size\n # poolMinConnections: 15\n\n ## Arbitrary labels to add to each metric scraped from this database\n # labels:\n # label_name1: label_value1\n # label_name2: label_value2\n\nmetrics:\n ## How often to scrape metrics. If not provided, metrics will be scraped on request.\n # scrapeInterval: 15s\n ## Path to default metrics file.\n default: default-metrics.toml\n ## Paths to any custom metrics files\n custom:\n - custom-metrics-example/custom-metrics.toml\n\nlog:\n # Path of log file\n destination: /opt/alert.log\n # Interval of log updates\n interval: 15s\n ## Set disable to 1 to disable logging\n # disable: 0\n\n# Optionally configure prometheus webserver\n#web:\n# listenAddresses: [':9161']\n# systemdSocket: true|false\n# configFile: /path/to/webconfigfile\n"})}),"\n",(0,a.jsx)(n.h3,{id:"docker-compose",children:"Docker Compose"}),"\n",(0,a.jsx)(n.p,{children:'If you would like to set up a test environment with the exporter, you can use the provided "Docker Compose" file in this repository which will start an Oracle Database instance, the exporter, Prometheus and Grafana.'}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"cd docker-compose\ndocker-compose up -d\n"})}),"\n",(0,a.jsx)(n.p,{children:"The containers will take a short time to start. The first time, the Oracle container might take a few minutes to start while it creates the database instance, but this is a one-time operation, and subequent restarts will be much faster (a few seconds)."}),"\n",(0,a.jsx)(n.p,{children:"Once the containers are all running, you can access the services using these URLs:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"http://localhost:9161/metrics",children:"Exporter"})}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.a,{href:"http://localhost:9090",children:"Prometheus"}),' - try a query for "oracle".']}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.a,{href:"http://localhost:3000",children:"Grafana"}),' - username is "admin" and password is "grafana". An Oracle Database dashboard is provisioned and configured to use data from the exporter.']}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>r});var o=t(6540);const a={},i=o.createContext(a);function s(e){const n=o.useContext(i);return o.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),o.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/af966633.d7133a46.js b/docs/assets/js/af966633.d7133a46.js new file mode 100644 index 00000000..d08bbec7 --- /dev/null +++ b/docs/assets/js/af966633.d7133a46.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[2173],{1035:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>s,metadata:()=>o,toc:()=>c});const o=JSON.parse('{"id":"getting-started/basics","title":"Installation","description":"In this section you will find information on running the exporter.","source":"@site/docs/getting-started/basics.md","sourceDirName":"getting-started","slug":"/getting-started/basics","permalink":"/oracle-db-appdev-monitoring/docs/next/getting-started/basics","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/docs/getting-started/basics.md","tags":[],"version":"current","sidebarPosition":1,"frontMatter":{"title":"Installation","sidebar_position":1},"sidebar":"tutorialSidebar","previous":{"title":"Getting Started","permalink":"/oracle-db-appdev-monitoring/docs/next/category/getting-started"},"next":{"title":"Default Metrics","permalink":"/oracle-db-appdev-monitoring/docs/next/getting-started/default-metrics"}}');var a=t(4848),i=t(8453);const s={title:"Installation",sidebar_position:1},r="Installation",l={},c=[{value:"Docker, Podman, etc",id:"docker-podman-etc",level:2},{value:"Oracle Database Free",id:"oracle-database-free",level:3},{value:"Exporter",id:"exporter",level:3},{value:"Simple connection",id:"simple-connection",level:3},{value:"Standalone Binary",id:"standalone-binary",level:2},{value:"Docker Compose",id:"docker-compose",level:3}];function d(e){const n={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.header,{children:(0,a.jsx)(n.h1,{id:"installation",children:"Installation"})}),"\n",(0,a.jsx)(n.p,{children:"In this section you will find information on running the exporter."}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["In a container runtime like ",(0,a.jsx)(n.a,{href:"#docker-podman-etc",children:"Docker, Podman, etc"})]}),"\n",(0,a.jsxs)(n.li,{children:["In a test/demo environment using ",(0,a.jsx)(n.a,{href:"#docker-compose",children:"Docker Compose"})]}),"\n",(0,a.jsxs)(n.li,{children:["In ",(0,a.jsx)(n.a,{href:"/oracle-db-appdev-monitoring/docs/next/getting-started/kubernetes",children:"Kubernetes"})]}),"\n",(0,a.jsxs)(n.li,{children:["As a ",(0,a.jsx)(n.a,{href:"#standalone-binary",children:"standalone binary"})]}),"\n"]}),"\n",(0,a.jsx)(n.h2,{id:"docker-podman-etc",children:"Docker, Podman, etc"}),"\n",(0,a.jsxs)(n.p,{children:["You can run the exporter in a local container using a container image from ",(0,a.jsx)(n.a,{href:"https://container-registry.oracle.com",children:"Oracle Container Registry"}),'. The container image is available in the "observability-exporter" repository in the "Database" category. No authentication or license presentment/acceptance are required to pull this image from the registry.']}),"\n",(0,a.jsx)(n.h3,{id:"oracle-database-free",children:"Oracle Database Free"}),"\n",(0,a.jsxs)(n.p,{children:["If you need an Oracle Database to test the exporter, you can use this command to start up an instance of ",(0,a.jsx)(n.a,{href:"https://www.oracle.com/database/free/",children:"Oracle Database Free"})," which also requires no authentication or license presentment/acceptance to pull the image."]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"docker run --name free23ai \\\n -d \\\n -p 1521:1521 \\\n -e ORACLE_PASSWORD=Welcome12345 \\\n gvenzl/oracle-free:23.9-slim-faststart\n"})}),"\n",(0,a.jsx)(n.p,{children:'This will pull the image and start up the database with a listener on port 1521. It will also create a pluggable database (a database container) called "FREEPDB1" and will set the admin passwords to the password you specified on this command.'}),"\n",(0,a.jsx)(n.p,{children:"You can tail the logs to see when the database is ready to use:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"docker logs -f free23ai\n\n(look for this message...)\n#########################\nDATABASE IS READY TO USE!\n#########################\n"})}),"\n",(0,a.jsx)(n.p,{children:'To obtain the IP address of the container, which you will need to connect to the database, use this command. Note: depending on your platform and container runtime, you may be able to access the database at "localhost":'}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'docker inspect free23ai | grep IPA\n "SecondaryIPAddresses": null,\n "IPAddress": "172.17.0.2",\n "IPAMConfig": null,\n "IPAddress": "172.17.0.2",\n'})}),"\n",(0,a.jsx)(n.h3,{id:"exporter",children:"Exporter"}),"\n",(0,a.jsx)(n.p,{children:"You need to give the exporter the connection details for the Oracle Database that you want it to run against. You can use a simple connection, or a wallet."}),"\n",(0,a.jsx)(n.h3,{id:"simple-connection",children:"Simple connection"}),"\n",(0,a.jsx)(n.p,{children:"For a simple connection, you will provide the details using these variables:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_USERNAME"})," is the database username, e.g., ",(0,a.jsx)(n.code,{children:"pdbadmin"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_PASSWORD"})," is the password for that user, e.g., ",(0,a.jsx)(n.code,{children:"Welcome12345"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_CONNECT_STRING"})," is the connection string, e.g., ",(0,a.jsx)(n.code,{children:"free23ai:1521/freepdb"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_ROLE"})," (Optional) can be set to ",(0,a.jsx)(n.code,{children:"SYSDBA"}),", ",(0,a.jsx)(n.code,{children:"SYSOPER"}),", ",(0,a.jsx)(n.code,{children:"SYSBACKUP"}),", ",(0,a.jsx)(n.code,{children:"SYSDG"}),", ",(0,a.jsx)(n.code,{children:"SYSKM"}),", ",(0,a.jsx)(n.code,{children:"SYSRAC"})," or ",(0,a.jsx)(n.code,{children:"SYSASM"})," if you want to connect with one of those roles, however Oracle recommends that you connect with the lowest possible privileges and roles necessary for the exporter to run."]}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:"To run the exporter in a container and expose the port, use a command like this, with the appropriate values for the environment variables:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"docker run -it --rm \\\n -e DB_USERNAME=pdbadmin \\\n -e DB_PASSWORD=Welcome12345 \\\n -e DB_CONNECT_STRING=free23ai:1521/freepdb \\\n -p 9161:9161 \\\n container-registry.oracle.com/database/observability-exporter:2.0.2\n"})}),"\n",(0,a.jsx)(n.h2,{id:"standalone-binary",children:"Standalone Binary"}),"\n",(0,a.jsxs)(n.p,{children:["Pre-compiled versions for Linux, ARM and Darwin 64-bit can be found under ",(0,a.jsx)(n.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/releases",children:"releases"}),"."]}),"\n",(0,a.jsxs)(n.p,{children:["In order to run, you'll need the ",(0,a.jsx)(n.a,{href:"http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html",children:"Oracle Instant Client Basic"})," for your operating system. Only the basic version is required for the exporter."]}),"\n",(0,a.jsxs)(n.blockquote,{children:["\n",(0,a.jsxs)(n.p,{children:["NOTE: If you are running the Standalone binary on a Mac ARM platform you must set the variable ",(0,a.jsx)(n.code,{children:"DYLD_LIBRARY_PATH"})," to the location of where the instant client installed. For example ",(0,a.jsx)(n.code,{children:"export DYLD_LIBRARY_PATH=/lib/oracle/instantclient_23_3"}),"."]}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:"The following command line arguments (flags) can be passed to the exporter (the --help flag will show the table below)."}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'Usage of oracledb_exporter:\n --config.file="example-config.yaml"\n File with metrics exporter configuration. (env: CONFIG_FILE)\n --web.telemetry-path="/metrics"\n Path under which to expose metrics. (env: TELEMETRY_PATH)\n --default.metrics="default-metrics.toml"\n File with default metrics in a TOML file. (env: DEFAULT_METRICS)\n --custom.metrics="" Comma separated list of file(s) that contain various custom metrics in a TOML format. (env: CUSTOM_METRICS)\n --query.timeout=5 Query timeout (in seconds). (env: QUERY_TIMEOUT)\n --database.maxIdleConns=0 Number of maximum idle connections in the connection pool. (env: DATABASE_MAXIDLECONNS)\n --database.maxOpenConns=10\n Number of maximum open connections in the connection pool. (env: DATABASE_MAXOPENCONNS)\n --database.poolIncrement=-1\n Connection increment when the connection pool reaches max capacity. (env: DATABASE_POOLINCREMENT)\n --database.poolMaxConnections=-1\n Maximum number of connections in the connection pool. (env: DATABASE_POOLMAXCONNECTIONS)\n --database.poolMinConnections=-1\n Minimum number of connections in the connection pool. (env: DATABASE_POOLMINCONNECTIONS)\n --scrape.interval=0s Interval between each scrape. Default is to scrape on collect requests.\n --log.disable=0 Set to 1 to disable alert logs\n --log.interval=15s Interval between log updates (e.g. 5s).\n --log.destination="/log/alert.log"\n File to output the alert log to. (env: LOG_DESTINATION)\n --web.listen-address=:9161 ...\n Addresses on which to expose metrics and web interface. Repeatable for multiple addresses. Examples: `:9100` or `[::1]:9100` for http, `vsock://:9100` for vsock\n --web.config.file="" Path to configuration file that can enable TLS or authentication. See: https://github.com/prometheus/exporter-toolkit/blob/master/docs/web-configuration.md\n --log.level=info Only log messages with the given severity or above. One of: [debug, info, warn, error]\n --log.format=logfmt Output format of log messages. One of: [logfmt, json]\n --[no-]version Show application version.\n'})}),"\n",(0,a.jsx)(n.p,{children:"You may provide the connection details using these variables:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_USERNAME"})," is the database username, e.g., ",(0,a.jsx)(n.code,{children:"pdbadmin"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_PASSWORD"})," is the password for that user, e.g., ",(0,a.jsx)(n.code,{children:"Welcome12345"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_CONNECT_STRING"})," is the connection string, e.g., ",(0,a.jsx)(n.code,{children:"localhost:1521/freepdb1"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_ROLE"})," (Optional) can be set to ",(0,a.jsx)(n.code,{children:"SYSDBA"})," or ",(0,a.jsx)(n.code,{children:"SYSOPER"})," if you want to connect with one of those roles, however Oracle recommends that you connect with the lowest possible privileges and roles necessary for the exporter to run."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"ORACLE_HOME"})," is the location of the Oracle Instant Client, e.g., ",(0,a.jsx)(n.code,{children:"/lib/oracle/21/client64/lib"}),"."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"TNS_ADMIN"})," is the location of your (unzipped) wallet. The ",(0,a.jsx)(n.code,{children:"DIRECTORY"})," set in the ",(0,a.jsx)(n.code,{children:"sqlnet.ora"})," file must match the path that it will be mounted on inside the container."]}),"\n"]}),"\n",(0,a.jsxs)(n.p,{children:["The following example puts the logfile in the current location with the filename ",(0,a.jsx)(n.code,{children:"alert.log"})," and loads the default matrics file (",(0,a.jsx)(n.code,{children:"default-metrics,toml"}),") from the current location."]}),"\n",(0,a.jsxs)(n.p,{children:["If you prefer to provide configuration via a ",(0,a.jsx)(n.a,{href:"/oracle-db-appdev-monitoring/docs/next/configuration/config-file",children:"config file"}),", you may do so with the ",(0,a.jsx)(n.code,{children:"--config.file"}),' argument. The use of a config file over command line arguments is preferred. If a config file is not provided, the "default" database connection is managed by command line arguments.']}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"# Example Oracle Database Metrics Exporter Configuration file.\n# Environment variables of the form ${VAR_NAME} will be expanded.\n# If you include a config value that contains a '$' character, escape that '$' with another '$', e.g.,\n# \"$test$pwd\" => \"$$test$$pwd\"\n# Otherwise, the value will be expanded as an environment variable.\n\n# Example Oracle Database Metrics Exporter Configuration file.\n# Environment variables of the form ${VAR_NAME} will be expanded.\n\ndatabases:\n ## Path on which metrics will be served\n # metricsPath: /metrics\n ## Database connection information for the \"default\" database.\n default:\n ## Database username\n username: ${DB_USERNAME}\n ## Database password\n password: ${DB_PASSWORD}\n ## Database password file\n ## If specified, will load the database password from a file.\n # passwordFile: ${DB_PASSWORD_FILE}\n ## Database connection url\n url: localhost:1521/freepdb1\n\n ## Metrics query timeout for this database, in seconds\n queryTimeout: 5\n\n ## Rely on Oracle Database External Authentication by network or OS\n # externalAuth: false\n ## Database role\n # role: SYSDBA\n ## Path to Oracle Database wallet, if using wallet\n # tnsAdmin: /path/to/database/wallet\n\n ### Connection settings:\n ### Either the go-sql or Oracle Database connection pool may be used.\n ### To use the Oracle Database connection pool over the go-sql connection pool,\n ### set maxIdleConns to zero and configure the pool* settings.\n\n ### Connection pooling settings for the go-sql connection pool\n ## Max open connections for this database using go-sql connection pool\n maxOpenConns: 10\n ## Max idle connections for this database using go-sql connection pool\n maxIdleConns: 10\n\n ### Connection pooling settings for the Oracle Database connection pool\n ## Oracle Database connection pool increment.\n # poolIncrement: 1\n ## Oracle Database Connection pool maximum size\n # poolMaxConnections: 15\n ## Oracle Database Connection pool minimum size\n # poolMinConnections: 15\n\n ## Arbitrary labels to add to each metric scraped from this database\n # labels:\n # label_name1: label_value1\n # label_name2: label_value2\n\nmetrics:\n ## How often to scrape metrics. If not provided, metrics will be scraped on request.\n # scrapeInterval: 15s\n ## Path to default metrics file.\n default: default-metrics.toml\n ## Paths to any custom metrics files\n custom:\n - custom-metrics-example/custom-metrics.toml\n\nlog:\n # Path of log file\n destination: /opt/alert.log\n # Interval of log updates\n interval: 15s\n ## Set disable to 1 to disable logging\n # disable: 0\n\n# Optionally configure prometheus webserver\n#web:\n# listenAddresses: [':9161']\n# systemdSocket: true|false\n# configFile: /path/to/webconfigfile\n"})}),"\n",(0,a.jsx)(n.h3,{id:"docker-compose",children:"Docker Compose"}),"\n",(0,a.jsx)(n.p,{children:'If you would like to set up a test environment with the exporter, you can use the provided "Docker Compose" file in this repository which will start an Oracle Database instance, the exporter, Prometheus and Grafana.'}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"cd docker-compose\ndocker-compose up -d\n"})}),"\n",(0,a.jsx)(n.p,{children:"The containers will take a short time to start. The first time, the Oracle container might take a few minutes to start while it creates the database instance, but this is a one-time operation, and subequent restarts will be much faster (a few seconds)."}),"\n",(0,a.jsx)(n.p,{children:"Once the containers are all running, you can access the services using these URLs:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"http://localhost:9161/metrics",children:"Exporter"})}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.a,{href:"http://localhost:9090",children:"Prometheus"}),' - try a query for "oracle".']}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.a,{href:"http://localhost:3000",children:"Grafana"}),' - username is "admin" and password is "grafana". An Oracle Database dashboard is provisioned and configured to use data from the exporter.']}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>r});var o=t(6540);const a={},i=o.createContext(a);function s(e){const n=o.useContext(i);return o.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),o.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/b8d4edc5.8eabd942.js b/docs/assets/js/b8d4edc5.8eabd942.js new file mode 100644 index 00000000..b136c08a --- /dev/null +++ b/docs/assets/js/b8d4edc5.8eabd942.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[9434],{2736:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>s,contentTitle:()=>a,default:()=>h,frontMatter:()=>c,metadata:()=>t,toc:()=>l});const t=JSON.parse('{"id":"advanced/development","title":"Development","description":"The exporter is a Go program using the Prometheus SDK.","source":"@site/docs/advanced/development.md","sourceDirName":"advanced","slug":"/advanced/development","permalink":"/oracle-db-appdev-monitoring/docs/next/advanced/development","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/docs/advanced/development.md","tags":[],"version":"current","sidebarPosition":3,"frontMatter":{"title":"Development","sidebar_position":3},"sidebar":"tutorialSidebar","previous":{"title":"Monitoring TxEventQ","permalink":"/oracle-db-appdev-monitoring/docs/next/advanced/txeventq"},"next":{"title":"Releases","permalink":"/oracle-db-appdev-monitoring/docs/next/category/releases"}}');var r=i(4848),o=i(8453);const c={title:"Development",sidebar_position:3},a="Development",s={},l=[{value:"Docker/container build",id:"dockercontainer-build",level:3},{value:"Building Binaries",id:"building-binaries",level:3}];function d(e){const n={a:"a",code:"code",h1:"h1",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"development",children:"Development"})}),"\n",(0,r.jsx)(n.p,{children:"The exporter is a Go program using the Prometheus SDK."}),"\n",(0,r.jsxs)(n.p,{children:["External contributions are welcome, see ",(0,r.jsx)(n.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/CONTRIBUTING.md",children:"CONTRIBUTING"})," for details."]}),"\n",(0,r.jsx)(n.p,{children:"The exporter initialization is as follows:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Parse flags options and configuration properties"}),"\n",(0,r.jsxs)(n.li,{children:["Load the default toml file (",(0,r.jsx)(n.code,{children:"default-metrics.toml"}),") and store each metric in a ",(0,r.jsx)(n.code,{children:"Metric"})," struct"]}),"\n",(0,r.jsx)(n.li,{children:"Load the custom toml file (if a custom toml file is given)"}),"\n",(0,r.jsxs)(n.li,{children:["Create an ",(0,r.jsx)(n.code,{children:"Exporter"})," object"]}),"\n",(0,r.jsx)(n.li,{children:"Register exporter in prometheus library"}),"\n",(0,r.jsx)(n.li,{children:"Launching a web server to handle incoming requests"}),"\n",(0,r.jsx)(n.li,{children:"Attempt connection to any configured Oracle Database servers"}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["These operations are mainly done in the ",(0,r.jsx)(n.code,{children:"main"})," function."]}),"\n",(0,r.jsx)(n.p,{children:"After this initialization phase, the exporter will wait for the arrival of a request."}),"\n",(0,r.jsxs)(n.p,{children:["Each time, it will iterate over the content of the ",(0,r.jsx)(n.code,{children:"metricsToScrape"})," structure (in the function scrape ",(0,r.jsx)(n.code,{children:"func (e * Export) scrape (ch chan <- prometheus.Metric)"}),")."]}),"\n",(0,r.jsxs)(n.p,{children:["For each element (of ",(0,r.jsx)(n.code,{children:"Metric"})," type), a call to the ",(0,r.jsx)(n.code,{children:"ScrapeMetric"})," function will be made which will itself make a call to the ",(0,r.jsx)(n.code,{children:"ScrapeGenericValues"})," function."]}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"ScrapeGenericValues"})," function will read the information from the ",(0,r.jsx)(n.code,{children:"Metric"})," structure and, depending on the parameters, will generate the metrics to return. In particular, it will use the ",(0,r.jsx)(n.code,{children:"GeneratePrometheusMetrics"})," function which will make SQL calls to the database."]}),"\n",(0,r.jsx)(n.h3,{id:"dockercontainer-build",children:"Docker/container build"}),"\n",(0,r.jsx)(n.p,{children:"To build a container image, run the following command:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"make docker\n"})}),"\n",(0,r.jsx)(n.p,{children:"For ARM:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"make docker-arm\n"})}),"\n",(0,r.jsx)(n.h3,{id:"building-binaries",children:"Building Binaries"}),"\n",(0,r.jsx)(n.p,{children:"Run build:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"make go-build\n"})}),"\n",(0,r.jsxs)(n.p,{children:["This will create binaries and archives inside the ",(0,r.jsx)(n.code,{children:"dist"})," folder for the building operating system."]})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},8453:(e,n,i)=>{i.d(n,{R:()=>c,x:()=>a});var t=i(6540);const r={},o=t.createContext(r);function c(e){const n=t.useContext(o);return t.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:c(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/b8d4edc5.c60980e4.js b/docs/assets/js/b8d4edc5.c60980e4.js deleted file mode 100644 index e0eeb8ca..00000000 --- a/docs/assets/js/b8d4edc5.c60980e4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[434],{2736:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>s,contentTitle:()=>a,default:()=>h,frontMatter:()=>c,metadata:()=>t,toc:()=>l});const t=JSON.parse('{"id":"advanced/development","title":"Development","description":"The exporter is a Go program using the Prometheus SDK.","source":"@site/docs/advanced/development.md","sourceDirName":"advanced","slug":"/advanced/development","permalink":"/oracle-db-appdev-monitoring/docs/advanced/development","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/docs/advanced/development.md","tags":[],"version":"current","sidebarPosition":3,"frontMatter":{"title":"Development","sidebar_position":3},"sidebar":"tutorialSidebar","previous":{"title":"Monitoring TxEventQ","permalink":"/oracle-db-appdev-monitoring/docs/advanced/txeventq"},"next":{"title":"Releases","permalink":"/oracle-db-appdev-monitoring/docs/category/releases"}}');var r=i(4848),o=i(8453);const c={title:"Development",sidebar_position:3},a="Development",s={},l=[{value:"Docker/container build",id:"dockercontainer-build",level:3},{value:"Building Binaries",id:"building-binaries",level:3}];function d(e){const n={a:"a",code:"code",h1:"h1",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"development",children:"Development"})}),"\n",(0,r.jsx)(n.p,{children:"The exporter is a Go program using the Prometheus SDK."}),"\n",(0,r.jsxs)(n.p,{children:["External contributions are welcome, see ",(0,r.jsx)(n.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/CONTRIBUTING.md",children:"CONTRIBUTING"})," for details."]}),"\n",(0,r.jsx)(n.p,{children:"The exporter initialization is as follows:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Parse flags options and configuration properties"}),"\n",(0,r.jsxs)(n.li,{children:["Load the default toml file (",(0,r.jsx)(n.code,{children:"default-metrics.toml"}),") and store each metric in a ",(0,r.jsx)(n.code,{children:"Metric"})," struct"]}),"\n",(0,r.jsx)(n.li,{children:"Load the custom toml file (if a custom toml file is given)"}),"\n",(0,r.jsxs)(n.li,{children:["Create an ",(0,r.jsx)(n.code,{children:"Exporter"})," object"]}),"\n",(0,r.jsx)(n.li,{children:"Register exporter in prometheus library"}),"\n",(0,r.jsx)(n.li,{children:"Launching a web server to handle incoming requests"}),"\n",(0,r.jsx)(n.li,{children:"Attempt connection to any configured Oracle Database servers"}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["These operations are mainly done in the ",(0,r.jsx)(n.code,{children:"main"})," function."]}),"\n",(0,r.jsx)(n.p,{children:"After this initialization phase, the exporter will wait for the arrival of a request."}),"\n",(0,r.jsxs)(n.p,{children:["Each time, it will iterate over the content of the ",(0,r.jsx)(n.code,{children:"metricsToScrape"})," structure (in the function scrape ",(0,r.jsx)(n.code,{children:"func (e * Export) scrape (ch chan <- prometheus.Metric)"}),")."]}),"\n",(0,r.jsxs)(n.p,{children:["For each element (of ",(0,r.jsx)(n.code,{children:"Metric"})," type), a call to the ",(0,r.jsx)(n.code,{children:"ScrapeMetric"})," function will be made which will itself make a call to the ",(0,r.jsx)(n.code,{children:"ScrapeGenericValues"})," function."]}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"ScrapeGenericValues"})," function will read the information from the ",(0,r.jsx)(n.code,{children:"Metric"})," structure and, depending on the parameters, will generate the metrics to return. In particular, it will use the ",(0,r.jsx)(n.code,{children:"GeneratePrometheusMetrics"})," function which will make SQL calls to the database."]}),"\n",(0,r.jsx)(n.h3,{id:"dockercontainer-build",children:"Docker/container build"}),"\n",(0,r.jsx)(n.p,{children:"To build a container image, run the following command:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"make docker\n"})}),"\n",(0,r.jsx)(n.p,{children:"For ARM:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"make docker-arm\n"})}),"\n",(0,r.jsx)(n.h3,{id:"building-binaries",children:"Building Binaries"}),"\n",(0,r.jsx)(n.p,{children:"Run build:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"make go-build\n"})}),"\n",(0,r.jsxs)(n.p,{children:["This will create binaries and archives inside the ",(0,r.jsx)(n.code,{children:"dist"})," folder for the building operating system."]})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},8453:(e,n,i)=>{i.d(n,{R:()=>c,x:()=>a});var t=i(6540);const r={},o=t.createContext(r);function c(e){const n=t.useContext(o);return t.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:c(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/c4e87715.b14dd93f.js b/docs/assets/js/c4e87715.b14dd93f.js new file mode 100644 index 00000000..e4d09c96 --- /dev/null +++ b/docs/assets/js/c4e87715.b14dd93f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[4353],{9199:e=>{e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Advanced","description":"Advanced configuration.","slug":"/category/advanced","permalink":"/oracle-db-appdev-monitoring/docs/next/category/advanced","sidebar":"tutorialSidebar","navigation":{"previous":{"title":"Azure Vault","permalink":"/oracle-db-appdev-monitoring/docs/next/configuration/azure-vault"},"next":{"title":"Configuring the Go Runtime","permalink":"/oracle-db-appdev-monitoring/docs/next/advanced/go-runtime"}}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/c539bf3f.1cf406ef.js b/docs/assets/js/c539bf3f.1cf406ef.js new file mode 100644 index 00000000..c1c93cbd --- /dev/null +++ b/docs/assets/js/c539bf3f.1cf406ef.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[9100],{1432:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>a,contentTitle:()=>o,default:()=>h,frontMatter:()=>l,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"releases/changelog","title":"Changelog","description":"List of upcoming and historic changes to the exporter.","source":"@site/docs/releases/changelog.md","sourceDirName":"releases","slug":"/releases/changelog","permalink":"/oracle-db-appdev-monitoring/docs/next/releases/changelog","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/docs/releases/changelog.md","tags":[],"version":"current","sidebarPosition":2,"frontMatter":{"title":"Changelog","sidebar_position":2},"sidebar":"tutorialSidebar","previous":{"title":"Roadmap","permalink":"/oracle-db-appdev-monitoring/docs/next/releases/roadmap"}}');var r=i(4848),t=i(8453);const l={title:"Changelog",sidebar_position:2},o="Release Notes",a={},d=[{value:"Next, in-development",id:"next-in-development",level:3},{value:"Version 2.0.3, August 27, 2025",id:"version-203-august-27-2025",level:3},{value:"Version 2.0.2, June 24, 2025",id:"version-202-june-24-2025",level:3},{value:"Version 2.0.1, June 12, 2025",id:"version-201-june-12-2025",level:3},{value:"Version 2.0.0, May 27, 2025",id:"version-200-may-27-2025",level:3},{value:"Version 1.6.1, May 2, 2025",id:"version-161-may-2-2025",level:3},{value:"Version 1.6.0, April 18, 2025",id:"version-160-april-18-2025",level:3},{value:"Version 1.5.5, March 13, 2025",id:"version-155-march-13-2025",level:3},{value:"Version 1.5.4, March 3, 2025",id:"version-154-march-3-2025",level:3},{value:"Version 1.5.3, January 28, 2025",id:"version-153-january-28-2025",level:3},{value:"Version 1.5.2, December 2, 2024",id:"version-152-december-2-2024",level:3},{value:"Version 1.5.1, October 28, 2024",id:"version-151-october-28-2024",level:3},{value:"Version 1.5.0, September 26, 2024",id:"version-150-september-26-2024",level:3},{value:"Version 1.4.0, September 4, 2024",id:"version-140-september-4-2024",level:3},{value:"Version 1.3.1, July 22, 2024",id:"version-131-july-22-2024",level:3},{value:"Version 1.3.0, June 7, 2024",id:"version-130-june-7-2024",level:3},{value:"Version 1.2.1, April 16, 2024",id:"version-121-april-16-2024",level:3},{value:"Version 1.2.0, January 17, 2024",id:"version-120-january-17-2024",level:3},{value:"Version 1.1.1, November 28, 2023",id:"version-111-november-28-2023",level:3},{value:"Version 1.1, October 27, 2023",id:"version-11-october-27-2023",level:3},{value:"Version 1.0, September 13, 2023",id:"version-10-september-13-2023",level:3}];function c(e){const n={a:"a",code:"code",em:"em",h1:"h1",h3:"h3",header:"header",li:"li",p:"p",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"release-notes",children:"Release Notes"})}),"\n",(0,r.jsx)(n.p,{children:"List of upcoming and historic changes to the exporter."}),"\n",(0,r.jsx)(n.h3,{id:"next-in-development",children:"Next, in-development"}),"\n",(0,r.jsx)(n.p,{children:"Our current priorities are support for Exadata metrics. We expect to address these in an upcoming release."}),"\n",(0,r.jsx)(n.h3,{id:"version-203-august-27-2025",children:"Version 2.0.3, August 27, 2025"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Enable configuration of the prometheus webserver from the config file using the ",(0,r.jsx)(n.code,{children:"web"})," prefix."]}),"\n",(0,r.jsx)(n.li,{children:"Allow loading of database password(s) from a file."}),"\n",(0,r.jsx)(n.li,{children:"Fixed a bug where database type (CDB, PDB, etc.) was not reported in certain situations."}),"\n",(0,r.jsxs)(n.li,{children:["Fixed a bug where literal passwords containing the '$' character (in the config file) would be evaluated as environment variables. To use literal passwords with the '$' character, escape the '$' character with a second '$': ",(0,r.jsx)(n.code,{children:"$test$pwd"})," becomes ",(0,r.jsx)(n.code,{children:"$$test$$pwd"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["Fixed a bug when using ",(0,r.jsx)(n.code,{children:"metrics.scrapeInterval"})," combined with per-metric scrape intervals that made the available metrics data set inconsistent."]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/Supporterino",children:"@Supporterino"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/neilschelly",children:"@neilschelly"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/aberinnj",children:"@aberinnj"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/redelang",children:"@redelang"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/qrkop",children:"@qrkop"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/KevDi",children:"@KevDi"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/bomuva",children:"@bomuva"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/anilmoris",children:"@anilmoris"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/Sycri",children:"@Sycri"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/kizuna-lek",children:"@kizuna-lek"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/rfrozza",children:"@rfrozza"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/neilschelly",children:"@neilschelly"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-202-june-24-2025",children:"Version 2.0.2, June 24, 2025"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Fixed a case-sensitive issue with resource name in the default metrics file."}),"\n",(0,r.jsx)(n.li,{children:"Add query timeouts to initial database connections, which could cause the exporter to hang in multi-database configurations"}),"\n",(0,r.jsx)(n.li,{children:"Fix an issue where rapidly acquiring connections could cause the exporter to crash. This was more common in multi-database configurations, due to the increased number of connection pools."}),"\n",(0,r.jsx)(n.li,{children:"Update some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/rfrozza",children:"@rfrozza"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/neilschelly",children:"@neilschelly"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/rafal-szypulka",children:"@rafal-szypulka"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/darkelfit",children:"@darkelfit"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-201-june-12-2025",children:"Version 2.0.1, June 12, 2025"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Use gv$ views instead of v$ views to allow collection of metrics from all instances in a cluster. (In preparation for RAC support)."}),"\n",(0,r.jsx)(n.li,{children:"Update some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-200-may-27-2025",children:"Version 2.0.0, May 27, 2025"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Fixed an issue with ",(0,r.jsx)(n.code,{children:"scrapeinterval"})," that could cause metrics not to be scraped (#172, #176)."]}),"\n",(0,r.jsxs)(n.li,{children:["Added configuration through a YAML file, passed using the ",(0,r.jsx)(n.code,{children:"--config.file"})," command-line argument. Backwards compatibility is maintained for the command-line arguments, through it is recommended to use the configuration file from the 2.0.0 release onward. It is not recommended to use a combination of command-line arguments and the configuration file."]}),"\n",(0,r.jsx)(n.li,{children:"Added support for multiple databases through the configuration file. As many database instances may be specified as needed, which will be scraped concurrently (#89)."}),"\n",(0,r.jsx)(n.li,{children:"Updated provided dashboards."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-161-may-2-2025",children:"Version 1.6.1, May 2, 2025"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Deepak A."}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-160-april-18-2025",children:"Version 1.6.0, April 18, 2025"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Added support for Azure Key Vault (#200)."}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/4Aiur",children:"4Aiur"})," added missing grants for alert log to the demo environment (#207)."]}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Brian, Damian et al."}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/4Aiur",children:"4Aiur"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-155-march-13-2025",children:"Version 1.5.5, March 13, 2025"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/VictorErmakov",children:"@VictorErmakov"})," updated the docker-compose sample with connection pool parameters to avoid fast connect cycling (#191)."]}),"\n",(0,r.jsx)(n.li,{children:"Update default values for connection pool parameters to use go-sql pooling by default to avoid fast connet cycling."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/VictorErmakov",children:"@VictorErmakov"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-154-march-3-2025",children:"Version 1.5.4, March 3, 2025"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Based of this recommendation from ",(0,r.jsx)(n.a,{href:"https://github.com/godror/godror?tab=readme-ov-file#pooling",children:"godror"}),", which relates to the two following items, and in discussion with the ODPI-C team, we have introduced additional parameters to allow you to set connection pool parameters, and have set defaults which will avoid fast connect cycling. It is our expectation that a fix may be produced in the underlying ODPI-C library for the underlying issue. In the mean time, these changes will avoid the conditions under which the error can occur."]}),"\n",(0,r.jsx)(n.li,{children:"Fix malloc error (#177, #181)."}),"\n",(0,r.jsx)(n.li,{children:"Fix intermittent connection issues with ADB-S when exporter is run in a container (#169)."}),"\n",(0,r.jsx)(n.li,{children:"Fix Multiple custom metrics files overwrite one another (#179)."}),"\n",(0,r.jsx)(n.li,{children:"Replace go-kit/log with log/slog, due to upstream changes in prometheus/common."}),"\n",(0,r.jsxs)(n.li,{children:["Add support for additional admin roles, expanding list of options for ",(0,r.jsx)(n.code,{children:"DB_ROLE"})," to ",(0,r.jsx)(n.code,{children:"SYSDBA"}),", ",(0,r.jsx)(n.code,{children:"SYSOPER"}),", ",(0,r.jsx)(n.code,{children:"SYSBACKUP"}),", ",(0,r.jsx)(n.code,{children:"SYSDG"}),", ",(0,r.jsx)(n.code,{children:"SYSKM"}),", ",(0,r.jsx)(n.code,{children:"SYSRAC"})," and ",(0,r.jsx)(n.code,{children:"SYSASM"})," (#180)."]}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/Jman1993",children:"@Jman1993"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/oey",children:"@oey"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/jlembeck06",children:"@jlembeck06"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/Jman1993",children:"@Jman1993"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/PeterP55P",children:"@PeterP55P"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/rlagyu0",children:"@rlagyu0"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/Sycri",children:"@Sycri"})}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Thank you to ",(0,r.jsx)(n.a,{href:"https://github.com/tgulacsi",children:"@tgulacsi"})," for changes in godror (",(0,r.jsx)(n.a,{href:"https://github.com/godror/godror/issues/361",children:"https://github.com/godror/godror/issues/361"}),", ",(0,r.jsx)(n.a,{href:"https://github.com/godror/godror/issues/360",children:"https://github.com/godror/godror/issues/360"}),"), and to ",(0,r.jsx)(n.a,{href:"https://github.com/cjbj",children:"@cjbj"})," and ",(0,r.jsx)(n.a,{href:"https://github.com/sudarshan12s",children:"@sudarshan12s"})," for support and guidance from ODPI-C (",(0,r.jsx)(n.a,{href:"https://github.com/oracle/odpi",children:"https://github.com/oracle/odpi"}),")."]}),"\n",(0,r.jsx)(n.p,{children:"In this release, we also continued some minor code refactoring."}),"\n",(0,r.jsx)(n.h3,{id:"version-153-january-28-2025",children:"Version 1.5.3, January 28, 2025"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.em,{children:"Known issue"}),": This release has a known issue that results in the error message ",(0,r.jsx)(n.code,{children:"malloc(): unsorted double linked list corrupted"}),".\nWe recommend staying on 1.5.2 until a new release with a fix is available. We hope to have a fix by early March."]}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Fix over-zealous supression of errors when ",(0,r.jsx)(n.code,{children:"ignorezeroresult = true"})," (#168)."]}),"\n",(0,r.jsxs)(n.li,{children:["When ",(0,r.jsx)(n.code,{children:"scrapeinterval"})," is set, do first scrape immediately, not after the interval (#166)."]}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/redelang",children:"@redelang"})}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"In this release, we also started some minor code refactoring."}),"\n",(0,r.jsx)(n.h3,{id:"version-152-december-2-2024",children:"Version 1.5.2, December 2, 2024"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Update the metric defintion for tablespace usage to report more accurate temp space usage."}),"\n",(0,r.jsx)(n.li,{children:"Revert InstantClient to 21c version due to ADB connectivity issue."}),"\n",(0,r.jsx)(n.li,{children:"Update documentation to explain how to obtain credentials from a wallet."}),"\n",(0,r.jsx)(n.li,{children:"Fix race condition on err variable in scrape() func (by @valrusu)."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/aureliocirella",children:"@aureliocirella"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/mitoeth",children:"@mitoeth"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/valrusu",children:"@valrusu"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-151-october-28-2024",children:"Version 1.5.1, October 28, 2024"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Added support for using the ",(0,r.jsx)(n.code,{children:"TNS_ADMIN"})," environment variable, which fixes an issue when connecting to Autonomous Database instances using TNS name."]}),"\n",(0,r.jsx)(n.li,{children:"Updated InstantClient to 23ai version for amd64 and latest available 19.24 version for arm64."}),"\n",(0,r.jsxs)(n.li,{children:["Fixed an issue with wrong ",(0,r.jsx)(n.code,{children:"LD_LIBRARY_PATH"})," on some platforms. (#136)"]}),"\n",(0,r.jsxs)(n.li,{children:["Added documentation and an example of using the ",(0,r.jsx)(n.code,{children:"scrapeinterval"})," setting to change the interval at which a certain metric is colected."]}),"\n",(0,r.jsx)(n.li,{children:"Added notes to documentation for extra security parameters needed when using a wallet with Podman."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-150-september-26-2024",children:"Version 1.5.0, September 26, 2024"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Support for running the exporter on ARM processors (darwin and linux)."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n",(0,r.jsx)(n.li,{children:'Updated the "test/demo environment" to use newer version of Oracle Database (23.5.0.24.07) and faster startup.'}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-140-september-4-2024",children:"Version 1.4.0, September 4, 2024"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Allow multiple custom metrics definition files."}),"\n",(0,r.jsx)(n.li,{children:"Allow query timeout per-metric."}),"\n",(0,r.jsx)(n.li,{children:"Allow scrape interval per-metric."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-131-july-22-2024",children:"Version 1.3.1, July 22, 2024"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Alert logs can be disabled by setting parameter ",(0,r.jsx)(n.code,{children:"log.disable"})," to ",(0,r.jsx)(n.code,{children:"1"}),"."]}),"\n",(0,r.jsx)(n.li,{children:"Alert log exporter will stop if it gets three consecutive failures."}),"\n",(0,r.jsx)(n.li,{children:"Updated the list of required permissions."}),"\n",(0,r.jsx)(n.li,{children:"Updated the TxEventQ sample dashboard."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/tux-jochen",children:"@tux-jochen"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-130-june-7-2024",children:"Version 1.3.0, June 7, 2024"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Alert logs can be exported for collection by a log reader like Promtail or FluentBit. Default\noutput to ",(0,r.jsx)(n.code,{children:"/log/alert.log"})," in JSON format."]}),"\n",(0,r.jsx)(n.li,{children:"Provide ability to connect as SYSDBA or SYSOPER by setting DB_ROLE."}),"\n",(0,r.jsx)(n.li,{children:"New default metric is added to report the type of database connected to (CDB or PDB)."}),"\n",(0,r.jsx)(n.li,{children:"New default metrics are added for cache hit ratios."}),"\n",(0,r.jsx)(n.li,{children:"Default metrics updated to suppress spurious warnings in log."}),"\n",(0,r.jsx)(n.li,{children:"Wait class metric updated to use a better query."}),"\n",(0,r.jsx)(n.li,{children:"The sample dashboard is updated to include new metrics."}),"\n",(0,r.jsx)(n.li,{children:"Fixed a bug which prevented periodic freeing of memory."}),"\n",(0,r.jsx)(n.li,{children:"Set CLIENT_INFO to a meaningful value."}),"\n",(0,r.jsx)(n.li,{children:"Update Go toolchain to 1.22.4."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/pioro",children:"@pioro"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/savoir81",children:"@savoir81"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-121-april-16-2024",children:"Version 1.2.1, April 16, 2024"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Accept max idle and open connections settings as parameters."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-120-january-17-2024",children:"Version 1.2.0, January 17, 2024"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Introduced a new feature to periodically restart the process if requested."}),"\n",(0,r.jsx)(n.li,{children:"Introduced a new feature to periodically attempt to free OS memory if requested."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-111-november-28-2023",children:"Version 1.1.1, November 28, 2023"}),"\n",(0,r.jsx)(n.p,{children:"This release just updates some third-party dependencies."}),"\n",(0,r.jsx)(n.h3,{id:"version-11-october-27-2023",children:"Version 1.1, October 27, 2023"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["The query for the standard metric ",(0,r.jsx)(n.code,{children:"wait_class"})," has been updated so that it will work in both container databases\nand pluggable databases, including in Oracle Autonomous Database instances. Note that this query will not return\nany data unless the database instance is under load."]}),"\n",(0,r.jsxs)(n.li,{children:["Support for reading the database password from OCI Vault has been added (see ",(0,r.jsx)(n.a,{href:"/oracle-db-appdev-monitoring/docs/next/configuration/oci-vault",children:"details"}),")"]}),"\n",(0,r.jsx)(n.li,{children:"Log messages have been improved"}),"\n",(0,r.jsx)(n.li,{children:"Some dependencies have been updated"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-10-september-13-2023",children:"Version 1.0, September 13, 2023"}),"\n",(0,r.jsx)(n.p,{children:"The first production release, v1.0, includes the following features:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["A number of ",(0,r.jsx)(n.a,{href:"/oracle-db-appdev-monitoring/docs/next/getting-started/default-metrics",children:"standard metrics"})," are exposed,"]}),"\n",(0,r.jsxs)(n.li,{children:["Users can define ",(0,r.jsx)(n.a,{href:"/oracle-db-appdev-monitoring/docs/next/configuration/custom-metrics",children:"custom metrics"}),","]}),"\n",(0,r.jsx)(n.li,{children:"Oracle regularly reviews third-party licenses and scans the code and images, including transitive/recursive dependencies for issues,"}),"\n",(0,r.jsx)(n.li,{children:"Connection to Oracle can be a basic connection or use an Oracle Wallet and TLS - connection to Oracle Autonomous Database is supported,"}),"\n",(0,r.jsx)(n.li,{children:"Metrics for Oracle Transactional Event Queues are also supported,"}),"\n",(0,r.jsx)(n.li,{children:"A Grafana dashboard is provided for Transactional Event Queues, and"}),"\n",(0,r.jsx)(n.li,{children:"A pre-built container image is provided, based on Oracle Linux, and optimized for size and security."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Note that this exporter uses a different Oracle Database driver which in turn uses code directly written by Oracle to access the database. This driver does require an Oracle client. In this initial release, the client is bundled into the container image, however we intend to make that optional in order to minimize the image size."}),"\n",(0,r.jsx)(n.p,{children:"The interfaces for this version have been kept as close as possible to those of earlier alpha releases in this repository to assist with migration. However, it should be expected that there may be breaking changes in future releases."})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},8453:(e,n,i)=>{i.d(n,{R:()=>l,x:()=>o});var s=i(6540);const r={},t=s.createContext(r);function l(e){const n=s.useContext(t);return s.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/c539bf3f.35853f87.js b/docs/assets/js/c539bf3f.35853f87.js deleted file mode 100644 index 7f837ac4..00000000 --- a/docs/assets/js/c539bf3f.35853f87.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[100],{1432:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>a,contentTitle:()=>o,default:()=>h,frontMatter:()=>l,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"releases/changelog","title":"Changelog","description":"List of upcoming and historic changes to the exporter.","source":"@site/docs/releases/changelog.md","sourceDirName":"releases","slug":"/releases/changelog","permalink":"/oracle-db-appdev-monitoring/docs/releases/changelog","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/docs/releases/changelog.md","tags":[],"version":"current","sidebarPosition":2,"frontMatter":{"title":"Changelog","sidebar_position":2},"sidebar":"tutorialSidebar","previous":{"title":"Roadmap","permalink":"/oracle-db-appdev-monitoring/docs/releases/roadmap"}}');var r=i(4848),t=i(8453);const l={title:"Changelog",sidebar_position:2},o="Release Notes",a={},d=[{value:"Next, in-development",id:"next-in-development",level:3},{value:"Version 2.0.2, June 24, 2025",id:"version-202-june-24-2025",level:3},{value:"Version 2.0.1, June 12, 2025",id:"version-201-june-12-2025",level:3},{value:"Version 2.0.0, May 27, 2025",id:"version-200-may-27-2025",level:3},{value:"Version 1.6.1, May 2, 2025",id:"version-161-may-2-2025",level:3},{value:"Version 1.6.0, April 18, 2025",id:"version-160-april-18-2025",level:3},{value:"Version 1.5.5, March 13, 2025",id:"version-155-march-13-2025",level:3},{value:"Version 1.5.4, March 3, 2025",id:"version-154-march-3-2025",level:3},{value:"Version 1.5.3, January 28, 2025",id:"version-153-january-28-2025",level:3},{value:"Version 1.5.2, December 2, 2024",id:"version-152-december-2-2024",level:3},{value:"Version 1.5.1, October 28, 2024",id:"version-151-october-28-2024",level:3},{value:"Version 1.5.0, September 26, 2024",id:"version-150-september-26-2024",level:3},{value:"Version 1.4.0, September 4, 2024",id:"version-140-september-4-2024",level:3},{value:"Version 1.3.1, July 22, 2024",id:"version-131-july-22-2024",level:3},{value:"Version 1.3.0, June 7, 2024",id:"version-130-june-7-2024",level:3},{value:"Version 1.2.1, April 16, 2024",id:"version-121-april-16-2024",level:3},{value:"Version 1.2.0, January 17, 2024",id:"version-120-january-17-2024",level:3},{value:"Version 1.1.1, November 28, 2023",id:"version-111-november-28-2023",level:3},{value:"Version 1.1, October 27, 2023",id:"version-11-october-27-2023",level:3},{value:"Version 1.0, September 13, 2023",id:"version-10-september-13-2023",level:3}];function c(e){const n={a:"a",code:"code",em:"em",h1:"h1",h3:"h3",header:"header",li:"li",p:"p",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"release-notes",children:"Release Notes"})}),"\n",(0,r.jsx)(n.p,{children:"List of upcoming and historic changes to the exporter."}),"\n",(0,r.jsx)(n.h3,{id:"next-in-development",children:"Next, in-development"}),"\n",(0,r.jsx)(n.p,{children:"Our current priorities are support for Exadata metrics. We expect to address these in an upcoming release."}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Enable configuration of the prometheus webserver from the config file using the ",(0,r.jsx)(n.code,{children:"web"})," prefix."]}),"\n",(0,r.jsx)(n.li,{children:"Allow loading of database password(s) from a file."}),"\n",(0,r.jsx)(n.li,{children:"Fixed a bug where database type (CDB, PDB, etc.) was not reported in certain situations."}),"\n",(0,r.jsxs)(n.li,{children:["Fixed a bug where literal passwords containing the '$' character (in the config file) would be evaluated as environment variables. To use literal passwords with the '$' character, escape the '$' character with a second '$': ",(0,r.jsx)(n.code,{children:"$test$pwd"})," becomes ",(0,r.jsx)(n.code,{children:"$$test$$pwd"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["Fixed a bug when using ",(0,r.jsx)(n.code,{children:"metrics.scrapeInterval"})," combined with per-metric scrape intervals that made the available metrics data set inconsistent."]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/Supporterino",children:"@Supporterino"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/neilschelly",children:"@neilschelly"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/aberinnj",children:"@aberinnj"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/redelang",children:"@redelang"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/qrkop",children:"@qrkop"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/KevDi",children:"@KevDi"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/bomuva",children:"@bomuva"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/anilmoris",children:"@anilmoris"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/Sycri",children:"@Sycri"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/kizuna-lek",children:"@kizuna-lek"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/rfrozza",children:"@rfrozza"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/neilschelly",children:"@neilschelly"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-202-june-24-2025",children:"Version 2.0.2, June 24, 2025"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Fixed a case-sensitive issue with resource name in the default metrics file."}),"\n",(0,r.jsx)(n.li,{children:"Add query timeouts to initial database connections, which could cause the exporter to hang in multi-database configurations"}),"\n",(0,r.jsx)(n.li,{children:"Fix an issue where rapidly acquiring connections could cause the exporter to crash. This was more common in multi-database configurations, due to the increased number of connection pools."}),"\n",(0,r.jsx)(n.li,{children:"Update some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/rfrozza",children:"@rfrozza"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/neilschelly",children:"@neilschelly"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/rafal-szypulka",children:"@rafal-szypulka"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/darkelfit",children:"@darkelfit"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-201-june-12-2025",children:"Version 2.0.1, June 12, 2025"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Use gv$ views instead of v$ views to allow collection of metrics from all instances in a cluster. (In preparation for RAC support)."}),"\n",(0,r.jsx)(n.li,{children:"Update some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-200-may-27-2025",children:"Version 2.0.0, May 27, 2025"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Fixed an issue with ",(0,r.jsx)(n.code,{children:"scrapeinterval"})," that could cause metrics not to be scraped (#172, #176)."]}),"\n",(0,r.jsxs)(n.li,{children:["Added configuration through a YAML file, passed using the ",(0,r.jsx)(n.code,{children:"--config.file"})," command-line argument. Backwards compatibility is maintained for the command-line arguments, through it is recommended to use the configuration file from the 2.0.0 release onward. It is not recommended to use a combination of command-line arguments and the configuration file."]}),"\n",(0,r.jsx)(n.li,{children:"Added support for multiple databases through the configuration file. As many database instances may be specified as needed, which will be scraped concurrently (#89)."}),"\n",(0,r.jsx)(n.li,{children:"Updated provided dashboards."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-161-may-2-2025",children:"Version 1.6.1, May 2, 2025"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Deepak A."}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-160-april-18-2025",children:"Version 1.6.0, April 18, 2025"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Added support for Azure Key Vault (#200)."}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/4Aiur",children:"4Aiur"})," added missing grants for alert log to the demo environment (#207)."]}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Brian, Damian et al."}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/4Aiur",children:"4Aiur"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-155-march-13-2025",children:"Version 1.5.5, March 13, 2025"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/VictorErmakov",children:"@VictorErmakov"})," updated the docker-compose sample with connection pool parameters to avoid fast connect cycling (#191)."]}),"\n",(0,r.jsx)(n.li,{children:"Update default values for connection pool parameters to use go-sql pooling by default to avoid fast connet cycling."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/VictorErmakov",children:"@VictorErmakov"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-154-march-3-2025",children:"Version 1.5.4, March 3, 2025"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Based of this recommendation from ",(0,r.jsx)(n.a,{href:"https://github.com/godror/godror?tab=readme-ov-file#pooling",children:"godror"}),", which relates to the two following items, and in discussion with the ODPI-C team, we have introduced additional parameters to allow you to set connection pool parameters, and have set defaults which will avoid fast connect cycling. It is our expectation that a fix may be produced in the underlying ODPI-C library for the underlying issue. In the mean time, these changes will avoid the conditions under which the error can occur."]}),"\n",(0,r.jsx)(n.li,{children:"Fix malloc error (#177, #181)."}),"\n",(0,r.jsx)(n.li,{children:"Fix intermittent connection issues with ADB-S when exporter is run in a container (#169)."}),"\n",(0,r.jsx)(n.li,{children:"Fix Multiple custom metrics files overwrite one another (#179)."}),"\n",(0,r.jsx)(n.li,{children:"Replace go-kit/log with log/slog, due to upstream changes in prometheus/common."}),"\n",(0,r.jsxs)(n.li,{children:["Add support for additional admin roles, expanding list of options for ",(0,r.jsx)(n.code,{children:"DB_ROLE"})," to ",(0,r.jsx)(n.code,{children:"SYSDBA"}),", ",(0,r.jsx)(n.code,{children:"SYSOPER"}),", ",(0,r.jsx)(n.code,{children:"SYSBACKUP"}),", ",(0,r.jsx)(n.code,{children:"SYSDG"}),", ",(0,r.jsx)(n.code,{children:"SYSKM"}),", ",(0,r.jsx)(n.code,{children:"SYSRAC"})," and ",(0,r.jsx)(n.code,{children:"SYSASM"})," (#180)."]}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/Jman1993",children:"@Jman1993"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/oey",children:"@oey"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/jlembeck06",children:"@jlembeck06"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/Jman1993",children:"@Jman1993"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/PeterP55P",children:"@PeterP55P"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/rlagyu0",children:"@rlagyu0"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/Sycri",children:"@Sycri"})}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Thank you to ",(0,r.jsx)(n.a,{href:"https://github.com/tgulacsi",children:"@tgulacsi"})," for changes in godror (",(0,r.jsx)(n.a,{href:"https://github.com/godror/godror/issues/361",children:"https://github.com/godror/godror/issues/361"}),", ",(0,r.jsx)(n.a,{href:"https://github.com/godror/godror/issues/360",children:"https://github.com/godror/godror/issues/360"}),"), and to ",(0,r.jsx)(n.a,{href:"https://github.com/cjbj",children:"@cjbj"})," and ",(0,r.jsx)(n.a,{href:"https://github.com/sudarshan12s",children:"@sudarshan12s"})," for support and guidance from ODPI-C (",(0,r.jsx)(n.a,{href:"https://github.com/oracle/odpi",children:"https://github.com/oracle/odpi"}),")."]}),"\n",(0,r.jsx)(n.p,{children:"In this release, we also continued some minor code refactoring."}),"\n",(0,r.jsx)(n.h3,{id:"version-153-january-28-2025",children:"Version 1.5.3, January 28, 2025"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.em,{children:"Known issue"}),": This release has a known issue that results in the error message ",(0,r.jsx)(n.code,{children:"malloc(): unsorted double linked list corrupted"}),".\nWe recommend staying on 1.5.2 until a new release with a fix is available. We hope to have a fix by early March."]}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Fix over-zealous supression of errors when ",(0,r.jsx)(n.code,{children:"ignorezeroresult = true"})," (#168)."]}),"\n",(0,r.jsxs)(n.li,{children:["When ",(0,r.jsx)(n.code,{children:"scrapeinterval"})," is set, do first scrape immediately, not after the interval (#166)."]}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/redelang",children:"@redelang"})}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"In this release, we also started some minor code refactoring."}),"\n",(0,r.jsx)(n.h3,{id:"version-152-december-2-2024",children:"Version 1.5.2, December 2, 2024"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Update the metric defintion for tablespace usage to report more accurate temp space usage."}),"\n",(0,r.jsx)(n.li,{children:"Revert InstantClient to 21c version due to ADB connectivity issue."}),"\n",(0,r.jsx)(n.li,{children:"Update documentation to explain how to obtain credentials from a wallet."}),"\n",(0,r.jsx)(n.li,{children:"Fix race condition on err variable in scrape() func (by @valrusu)."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/aureliocirella",children:"@aureliocirella"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/mitoeth",children:"@mitoeth"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/valrusu",children:"@valrusu"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-151-october-28-2024",children:"Version 1.5.1, October 28, 2024"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Added support for using the ",(0,r.jsx)(n.code,{children:"TNS_ADMIN"})," environment variable, which fixes an issue when connecting to Autonomous Database instances using TNS name."]}),"\n",(0,r.jsx)(n.li,{children:"Updated InstantClient to 23ai version for amd64 and latest available 19.24 version for arm64."}),"\n",(0,r.jsxs)(n.li,{children:["Fixed an issue with wrong ",(0,r.jsx)(n.code,{children:"LD_LIBRARY_PATH"})," on some platforms. (#136)"]}),"\n",(0,r.jsxs)(n.li,{children:["Added documentation and an example of using the ",(0,r.jsx)(n.code,{children:"scrapeinterval"})," setting to change the interval at which a certain metric is colected."]}),"\n",(0,r.jsx)(n.li,{children:"Added notes to documentation for extra security parameters needed when using a wallet with Podman."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-150-september-26-2024",children:"Version 1.5.0, September 26, 2024"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Support for running the exporter on ARM processors (darwin and linux)."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n",(0,r.jsx)(n.li,{children:'Updated the "test/demo environment" to use newer version of Oracle Database (23.5.0.24.07) and faster startup.'}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-140-september-4-2024",children:"Version 1.4.0, September 4, 2024"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Allow multiple custom metrics definition files."}),"\n",(0,r.jsx)(n.li,{children:"Allow query timeout per-metric."}),"\n",(0,r.jsx)(n.li,{children:"Allow scrape interval per-metric."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-131-july-22-2024",children:"Version 1.3.1, July 22, 2024"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Alert logs can be disabled by setting parameter ",(0,r.jsx)(n.code,{children:"log.disable"})," to ",(0,r.jsx)(n.code,{children:"1"}),"."]}),"\n",(0,r.jsx)(n.li,{children:"Alert log exporter will stop if it gets three consecutive failures."}),"\n",(0,r.jsx)(n.li,{children:"Updated the list of required permissions."}),"\n",(0,r.jsx)(n.li,{children:"Updated the TxEventQ sample dashboard."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/tux-jochen",children:"@tux-jochen"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-130-june-7-2024",children:"Version 1.3.0, June 7, 2024"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Alert logs can be exported for collection by a log reader like Promtail or FluentBit. Default\noutput to ",(0,r.jsx)(n.code,{children:"/log/alert.log"})," in JSON format."]}),"\n",(0,r.jsx)(n.li,{children:"Provide ability to connect as SYSDBA or SYSOPER by setting DB_ROLE."}),"\n",(0,r.jsx)(n.li,{children:"New default metric is added to report the type of database connected to (CDB or PDB)."}),"\n",(0,r.jsx)(n.li,{children:"New default metrics are added for cache hit ratios."}),"\n",(0,r.jsx)(n.li,{children:"Default metrics updated to suppress spurious warnings in log."}),"\n",(0,r.jsx)(n.li,{children:"Wait class metric updated to use a better query."}),"\n",(0,r.jsx)(n.li,{children:"The sample dashboard is updated to include new metrics."}),"\n",(0,r.jsx)(n.li,{children:"Fixed a bug which prevented periodic freeing of memory."}),"\n",(0,r.jsx)(n.li,{children:"Set CLIENT_INFO to a meaningful value."}),"\n",(0,r.jsx)(n.li,{children:"Update Go toolchain to 1.22.4."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/pioro",children:"@pioro"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/savoir81",children:"@savoir81"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-121-april-16-2024",children:"Version 1.2.1, April 16, 2024"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Accept max idle and open connections settings as parameters."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-120-january-17-2024",children:"Version 1.2.0, January 17, 2024"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Introduced a new feature to periodically restart the process if requested."}),"\n",(0,r.jsx)(n.li,{children:"Introduced a new feature to periodically attempt to free OS memory if requested."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-111-november-28-2023",children:"Version 1.1.1, November 28, 2023"}),"\n",(0,r.jsx)(n.p,{children:"This release just updates some third-party dependencies."}),"\n",(0,r.jsx)(n.h3,{id:"version-11-october-27-2023",children:"Version 1.1, October 27, 2023"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["The query for the standard metric ",(0,r.jsx)(n.code,{children:"wait_class"})," has been updated so that it will work in both container databases\nand pluggable databases, including in Oracle Autonomous Database instances. Note that this query will not return\nany data unless the database instance is under load."]}),"\n",(0,r.jsxs)(n.li,{children:["Support for reading the database password from OCI Vault has been added (see ",(0,r.jsx)(n.a,{href:"/oracle-db-appdev-monitoring/docs/configuration/oci-vault",children:"details"}),")"]}),"\n",(0,r.jsx)(n.li,{children:"Log messages have been improved"}),"\n",(0,r.jsx)(n.li,{children:"Some dependencies have been updated"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-10-september-13-2023",children:"Version 1.0, September 13, 2023"}),"\n",(0,r.jsx)(n.p,{children:"The first production release, v1.0, includes the following features:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["A number of ",(0,r.jsx)(n.a,{href:"/oracle-db-appdev-monitoring/docs/getting-started/default-metrics",children:"standard metrics"})," are exposed,"]}),"\n",(0,r.jsxs)(n.li,{children:["Users can define ",(0,r.jsx)(n.a,{href:"/oracle-db-appdev-monitoring/docs/configuration/custom-metrics",children:"custom metrics"}),","]}),"\n",(0,r.jsx)(n.li,{children:"Oracle regularly reviews third-party licenses and scans the code and images, including transitive/recursive dependencies for issues,"}),"\n",(0,r.jsx)(n.li,{children:"Connection to Oracle can be a basic connection or use an Oracle Wallet and TLS - connection to Oracle Autonomous Database is supported,"}),"\n",(0,r.jsx)(n.li,{children:"Metrics for Oracle Transactional Event Queues are also supported,"}),"\n",(0,r.jsx)(n.li,{children:"A Grafana dashboard is provided for Transactional Event Queues, and"}),"\n",(0,r.jsx)(n.li,{children:"A pre-built container image is provided, based on Oracle Linux, and optimized for size and security."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Note that this exporter uses a different Oracle Database driver which in turn uses code directly written by Oracle to access the database. This driver does require an Oracle client. In this initial release, the client is bundled into the container image, however we intend to make that optional in order to minimize the image size."}),"\n",(0,r.jsx)(n.p,{children:"The interfaces for this version have been kept as close as possible to those of earlier alpha releases in this repository to assist with migration. However, it should be expected that there may be breaking changes in future releases."})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},8453:(e,n,i)=>{i.d(n,{R:()=>l,x:()=>o});var s=i(6540);const r={},t=s.createContext(r);function l(e){const n=s.useContext(t);return s.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/cf0dfdd1.1f08fe6e.js b/docs/assets/js/cf0dfdd1.1f08fe6e.js new file mode 100644 index 00000000..22ac9d6c --- /dev/null +++ b/docs/assets/js/cf0dfdd1.1f08fe6e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[6235],{6330:e=>{e.exports=JSON.parse('{"version":{"pluginId":"default","version":"current","label":"Next","banner":"unreleased","badge":true,"noIndex":false,"className":"docs-version-current","isLast":false,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"OpenTelemetry Metrics for Oracle Database","href":"/oracle-db-appdev-monitoring/docs/next/intro","docId":"intro","unlisted":false},{"type":"category","label":"Getting Started","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Installation","href":"/oracle-db-appdev-monitoring/docs/next/getting-started/basics","docId":"getting-started/basics","unlisted":false},{"type":"link","label":"Default Metrics","href":"/oracle-db-appdev-monitoring/docs/next/getting-started/default-metrics","docId":"getting-started/default-metrics","unlisted":false},{"type":"link","label":"Kubernetes","href":"/oracle-db-appdev-monitoring/docs/next/getting-started/kubernetes","docId":"getting-started/kubernetes","unlisted":false},{"type":"link","label":"Grafana Dashboards","href":"/oracle-db-appdev-monitoring/docs/next/getting-started/grafana-dashboards","docId":"getting-started/grafana-dashboards","unlisted":false}],"href":"/oracle-db-appdev-monitoring/docs/next/category/getting-started"},{"type":"category","label":"Configuration","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Exporter Config File","href":"/oracle-db-appdev-monitoring/docs/next/configuration/config-file","docId":"configuration/config-file","unlisted":false},{"type":"link","label":"Custom Metrics","href":"/oracle-db-appdev-monitoring/docs/next/configuration/custom-metrics","docId":"configuration/custom-metrics","unlisted":false},{"type":"link","label":"Multiple Databases","href":"/oracle-db-appdev-monitoring/docs/next/configuration/multiple-databases","docId":"configuration/multiple-databases","unlisted":false},{"type":"link","label":"Oracle Wallet (mTLS)","href":"/oracle-db-appdev-monitoring/docs/next/configuration/oracle-wallet","docId":"configuration/oracle-wallet","unlisted":false},{"type":"link","label":"Alert Logs","href":"/oracle-db-appdev-monitoring/docs/next/configuration/alert-logs","docId":"configuration/alert-logs","unlisted":false},{"type":"link","label":"OCI Vault","href":"/oracle-db-appdev-monitoring/docs/next/configuration/oci-vault","docId":"configuration/oci-vault","unlisted":false},{"type":"link","label":"Azure Vault","href":"/oracle-db-appdev-monitoring/docs/next/configuration/azure-vault","docId":"configuration/azure-vault","unlisted":false}],"href":"/oracle-db-appdev-monitoring/docs/next/category/configuration"},{"type":"category","label":"Advanced","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Configuring the Go Runtime","href":"/oracle-db-appdev-monitoring/docs/next/advanced/go-runtime","docId":"advanced/go-runtime","unlisted":false},{"type":"link","label":"Monitoring TxEventQ","href":"/oracle-db-appdev-monitoring/docs/next/advanced/txeventq","docId":"advanced/txeventq","unlisted":false},{"type":"link","label":"Development","href":"/oracle-db-appdev-monitoring/docs/next/advanced/development","docId":"advanced/development","unlisted":false}],"href":"/oracle-db-appdev-monitoring/docs/next/category/advanced"},{"type":"category","label":"Releases","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Roadmap","href":"/oracle-db-appdev-monitoring/docs/next/releases/roadmap","docId":"releases/roadmap","unlisted":false},{"type":"link","label":"Changelog","href":"/oracle-db-appdev-monitoring/docs/next/releases/changelog","docId":"releases/changelog","unlisted":false}],"href":"/oracle-db-appdev-monitoring/docs/next/category/releases"}]},"docs":{"advanced/development":{"id":"advanced/development","title":"Development","description":"The exporter is a Go program using the Prometheus SDK.","sidebar":"tutorialSidebar"},"advanced/go-runtime":{"id":"advanced/go-runtime","title":"Configuring the Go Runtime","description":"If you are running in an environment with limited memory, or you are running a large number of exporters, you may want to control the exporter\'s usage of memory.","sidebar":"tutorialSidebar"},"advanced/txeventq":{"id":"advanced/txeventq","title":"Monitoring TxEventQ","description":"Oracle Transactional Event Queues (\\"TxEventQ\\") is a fault-tolerant, scalable, real-time messaging backbone offered by converged Oracle Database that allows you to build an enterprise-class event-driven architectures.","sidebar":"tutorialSidebar"},"configuration/alert-logs":{"id":"configuration/alert-logs","title":"Alert Logs","description":"Collect export alert logs with a log ingestion tool.","sidebar":"tutorialSidebar"},"configuration/azure-vault":{"id":"configuration/azure-vault","title":"Azure Vault","description":"Securely load database credentials from Azure Vault.","sidebar":"tutorialSidebar"},"configuration/config-file":{"id":"configuration/config-file","title":"Exporter Config File","description":"The recommended way to configure the exporter is with the --config.file argument, specifying a YAML configuration file.","sidebar":"tutorialSidebar"},"configuration/custom-metrics":{"id":"configuration/custom-metrics","title":"Custom Metrics","description":"The exporter allows definition of arbitrary custom metrics in one or more TOML or YAML files.","sidebar":"tutorialSidebar"},"configuration/multiple-databases":{"id":"configuration/multiple-databases","title":"Multiple Databases","description":"The exporter may be configured to scrape as many databases as needed.","sidebar":"tutorialSidebar"},"configuration/oci-vault":{"id":"configuration/oci-vault","title":"OCI Vault","description":"Securely load database credentials from OCI Vault.","sidebar":"tutorialSidebar"},"configuration/oracle-wallet":{"id":"configuration/oracle-wallet","title":"Oracle Wallet (mTLS)","description":"For mutual TLS (mTLS) connections, you must use an Oracle Wallet.","sidebar":"tutorialSidebar"},"getting-started/basics":{"id":"getting-started/basics","title":"Installation","description":"In this section you will find information on running the exporter.","sidebar":"tutorialSidebar"},"getting-started/default-metrics":{"id":"getting-started/default-metrics","title":"Default Metrics","description":"The exporter includes default metrics for Oracle Database, and process-specific metrics on the go runtime.","sidebar":"tutorialSidebar"},"getting-started/grafana-dashboards":{"id":"getting-started/grafana-dashboards","title":"Grafana Dashboards","description":"Sample Grafana dashboards are included with the exporter.","sidebar":"tutorialSidebar"},"getting-started/kubernetes":{"id":"getting-started/kubernetes","title":"Kubernetes","description":"You can run the exporter in Kubernetes using provided manifests.","sidebar":"tutorialSidebar"},"intro":{"id":"intro","title":"OpenTelemetry Metrics for Oracle Database","description":"This project aims to provide observability for the Oracle Database so that users can understand performance and diagnose issues easily across applications and database. Over time, this project will provide not just metrics, but also logging and tracing support, and integration into popular frameworks like Spring Boot. The project aims to deliver functionality to support both cloud and on-premises databases, including those running in Kubernetes and containers.","sidebar":"tutorialSidebar"},"releases/changelog":{"id":"releases/changelog","title":"Changelog","description":"List of upcoming and historic changes to the exporter.","sidebar":"tutorialSidebar"},"releases/roadmap":{"id":"releases/roadmap","title":"Roadmap","description":"Planned and upcoming features for the exporter.","sidebar":"tutorialSidebar"}}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/d72bb23b.1e9dae26.js b/docs/assets/js/d72bb23b.1e9dae26.js deleted file mode 100644 index e297bee2..00000000 --- a/docs/assets/js/d72bb23b.1e9dae26.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[919],{7177:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>r,contentTitle:()=>l,default:()=>m,frontMatter:()=>i,metadata:()=>t,toc:()=>c});const t=JSON.parse('{"id":"configuration/multiple-databases","title":"Multiple Databases","description":"The exporter may be configured to scrape as many databases as needed.","source":"@site/docs/configuration/multiple-databases.md","sourceDirName":"configuration","slug":"/configuration/multiple-databases","permalink":"/oracle-db-appdev-monitoring/docs/configuration/multiple-databases","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/docs/configuration/multiple-databases.md","tags":[],"version":"current","sidebarPosition":3,"frontMatter":{"title":"Multiple Databases","sidebar_position":3},"sidebar":"tutorialSidebar","previous":{"title":"Custom Metrics","permalink":"/oracle-db-appdev-monitoring/docs/configuration/custom-metrics"},"next":{"title":"Oracle Wallet (mTLS)","permalink":"/oracle-db-appdev-monitoring/docs/configuration/oracle-wallet"}}');var o=a(4848),s=a(8453);const i={title:"Multiple Databases",sidebar_position:3},l="Scraping Multiple Databases",r={},c=[{value:"Only scraping metrics from specific databases",id:"only-scraping-metrics-from-specific-databases",level:3}];function d(e){const n={a:"a",code:"code",h1:"h1",h3:"h3",header:"header",p:"p",pre:"pre",...(0,s.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.header,{children:(0,o.jsx)(n.h1,{id:"scraping-multiple-databases",children:"Scraping Multiple Databases"})}),"\n",(0,o.jsx)(n.p,{children:"The exporter may be configured to scrape as many databases as needed."}),"\n",(0,o.jsx)(n.p,{children:"You may scrape as many databases as needed by defining named database configurations in the config file."}),"\n",(0,o.jsxs)(n.p,{children:["If you're connecting to multiple databases using mTLS, see ",(0,o.jsx)(n.a,{href:"/oracle-db-appdev-monitoring/docs/configuration/oracle-wallet#mtls-for-multiple-databases-with-oracle-wallet",children:"mTLS for multiple databases with Oracle Wallet"})]}),"\n",(0,o.jsx)(n.p,{children:'The following settings configure the exporter to scrape multiple databases, "db1", and "db2", simultaneously:'}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:"# Example Oracle Database Metrics Exporter Configuration file.\n# Environment variables of the form ${VAR_NAME} will be expanded.\n\ndatabases:\n ## Path on which metrics will be served\n # metricsPath: /metrics\n\n ## As many named database configurations may be defined as needed.\n ## It is recommended to define your database config in the config file, rather than using CLI arguments.\n\n ## Database connection information for the \"db1\" database.\n db1:\n ## Database username\n username: ${DB1_USERNAME}\n ## Database password\n password: ${DB1_PASSWORD}\n ## Database connection url\n url: localhost:1521/freepdb1\n\n ## Metrics query timeout for this database, in seconds\n queryTimeout: 5\n\n ## Rely on Oracle Database External Authentication by network or OS\n # externalAuth: false\n ## Database role\n # role: SYSDBA\n ## Path to Oracle Database wallet, if using wallet\n # tnsAdmin: /path/to/database/wallet\n\n ### Connection settings:\n ### Either the go-sql or Oracle Database connection pool may be used.\n ### To use the Oracle Database connection pool over the go-sql connection pool,\n ### set maxIdleConns to zero and configure the pool* settings.\n\n ### Connection pooling settings for the go-sql connection pool\n ## Max open connections for this database using go-sql connection pool\n maxOpenConns: 10\n ## Max idle connections for this database using go-sql connection pool\n maxIdleConns: 10\n\n ### Connection pooling settings for the Oracle Database connection pool\n ## Oracle Database connection pool increment.\n # poolIncrement: 1\n ## Oracle Database Connection pool maximum size\n # poolMaxConnections: 15\n ## Oracle Database Connection pool minimum size\n # poolMinConnections: 15\n\n ### Arbitrary labels to add to each metric scraped from this database\n ## Any labels configured for one database will be added to metrics from\n ## every database, because the same metric names must always have the same\n ## full labelset. If the label isn't set for a particular database, then it\n ## will just be set to an empty string.\n # labels:\n # label_name1: label_value1\n # label_name2: label_value2\n\n db2:\n ## Database username\n username: ${DB2_USERNAME}\n ## Database password\n password: ${DB2_PASSWORD}\n ## Database connection url\n url: localhost:1522/freepdb1\n\n ## Metrics query timeout for this database, in seconds\n queryTimeout: 5\n\n ## Rely on Oracle Database External Authentication by network or OS\n # externalAuth: false\n ## Database role\n # role: SYSDBA\n ## Path to Oracle Database wallet, if using wallet\n # tnsAdmin: /path/to/database/wallet\n\n ### Connection settings:\n ### Either the go-sql or Oracle Database connection pool may be used.\n ### To use the Oracle Database connection pool over the go-sql connection pool,\n ### set maxIdleConns to zero and configure the pool* settings.\n\n ### Connection pooling settings for the go-sql connection pool\n ## Max open connections for this database using go-sql connection pool\n maxOpenConns: 10\n ## Max idle connections for this database using go-sql connection pool\n maxIdleConns: 10\n\n ### Connection pooling settings for the Oracle Database connection pool\n ## Oracle Database connection pool increment.\n # poolIncrement: 1\n ## Oracle Database Connection pool maximum size\n # poolMaxConnections: 15\n ## Oracle Database Connection pool minimum size\n # poolMinConnections: 15\n\n ### Arbitrary labels to add to each metric scraped from this database\n ## Any labels configured for one database will be added to metrics from\n ## every database, because the same metric names must always have the same\n ## full labelset. If the label isn't set for a particular database, then it\n ## will just be set to an empty string.\n # labels:\n # label_name1: label_value1\n # label_name2: label_value2\n"})}),"\n",(0,o.jsx)(n.h3,{id:"only-scraping-metrics-from-specific-databases",children:"Only scraping metrics from specific databases"}),"\n",(0,o.jsxs)(n.p,{children:["By default, metrics are scraped from every connected database. To expose only certain metrics on specific databases, configure the ",(0,o.jsx)(n.code,{children:"databases"}),' property of a metric. The following metric definition will only be scraped from databases "db2" and "db3":']}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-toml",children:'[[metric]]\ncontext = "db_platform"\nlabels = [ "platform_name" ]\nmetricsdesc = { value = "Database platform" }\nrequest = \'\'\'\nSELECT platform_name, 1 as value FROM gv$database\n\'\'\'\ndatabases = [ "db2", "db3" ]\n'})}),"\n",(0,o.jsxs)(n.p,{children:["If the ",(0,o.jsx)(n.code,{children:"databases"})," array is empty or not provided for a metric, that metric will be scraped from all connected databases."]})]})}function m(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},8453:(e,n,a)=>{a.d(n,{R:()=>i,x:()=>l});var t=a(6540);const o={},s=t.createContext(o);function i(e){const n=t.useContext(s);return t.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/d72bb23b.80f5a95a.js b/docs/assets/js/d72bb23b.80f5a95a.js new file mode 100644 index 00000000..367296f4 --- /dev/null +++ b/docs/assets/js/d72bb23b.80f5a95a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[1919],{7177:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>r,contentTitle:()=>l,default:()=>m,frontMatter:()=>i,metadata:()=>t,toc:()=>c});const t=JSON.parse('{"id":"configuration/multiple-databases","title":"Multiple Databases","description":"The exporter may be configured to scrape as many databases as needed.","source":"@site/docs/configuration/multiple-databases.md","sourceDirName":"configuration","slug":"/configuration/multiple-databases","permalink":"/oracle-db-appdev-monitoring/docs/next/configuration/multiple-databases","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/docs/configuration/multiple-databases.md","tags":[],"version":"current","sidebarPosition":3,"frontMatter":{"title":"Multiple Databases","sidebar_position":3},"sidebar":"tutorialSidebar","previous":{"title":"Custom Metrics","permalink":"/oracle-db-appdev-monitoring/docs/next/configuration/custom-metrics"},"next":{"title":"Oracle Wallet (mTLS)","permalink":"/oracle-db-appdev-monitoring/docs/next/configuration/oracle-wallet"}}');var o=a(4848),s=a(8453);const i={title:"Multiple Databases",sidebar_position:3},l="Scraping Multiple Databases",r={},c=[{value:"Only scraping metrics from specific databases",id:"only-scraping-metrics-from-specific-databases",level:3}];function d(e){const n={a:"a",code:"code",h1:"h1",h3:"h3",header:"header",p:"p",pre:"pre",...(0,s.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.header,{children:(0,o.jsx)(n.h1,{id:"scraping-multiple-databases",children:"Scraping Multiple Databases"})}),"\n",(0,o.jsx)(n.p,{children:"The exporter may be configured to scrape as many databases as needed."}),"\n",(0,o.jsx)(n.p,{children:"You may scrape as many databases as needed by defining named database configurations in the config file."}),"\n",(0,o.jsxs)(n.p,{children:["If you're connecting to multiple databases using mTLS, see ",(0,o.jsx)(n.a,{href:"/oracle-db-appdev-monitoring/docs/next/configuration/oracle-wallet#mtls-for-multiple-databases-with-oracle-wallet",children:"mTLS for multiple databases with Oracle Wallet"})]}),"\n",(0,o.jsx)(n.p,{children:'The following settings configure the exporter to scrape multiple databases, "db1", and "db2", simultaneously:'}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:"# Example Oracle Database Metrics Exporter Configuration file.\n# Environment variables of the form ${VAR_NAME} will be expanded.\n\ndatabases:\n ## Path on which metrics will be served\n # metricsPath: /metrics\n\n ## As many named database configurations may be defined as needed.\n ## It is recommended to define your database config in the config file, rather than using CLI arguments.\n\n ## Database connection information for the \"db1\" database.\n db1:\n ## Database username\n username: ${DB1_USERNAME}\n ## Database password\n password: ${DB1_PASSWORD}\n ## Database connection url\n url: localhost:1521/freepdb1\n\n ## Metrics query timeout for this database, in seconds\n queryTimeout: 5\n\n ## Rely on Oracle Database External Authentication by network or OS\n # externalAuth: false\n ## Database role\n # role: SYSDBA\n ## Path to Oracle Database wallet, if using wallet\n # tnsAdmin: /path/to/database/wallet\n\n ### Connection settings:\n ### Either the go-sql or Oracle Database connection pool may be used.\n ### To use the Oracle Database connection pool over the go-sql connection pool,\n ### set maxIdleConns to zero and configure the pool* settings.\n\n ### Connection pooling settings for the go-sql connection pool\n ## Max open connections for this database using go-sql connection pool\n maxOpenConns: 10\n ## Max idle connections for this database using go-sql connection pool\n maxIdleConns: 10\n\n ### Connection pooling settings for the Oracle Database connection pool\n ## Oracle Database connection pool increment.\n # poolIncrement: 1\n ## Oracle Database Connection pool maximum size\n # poolMaxConnections: 15\n ## Oracle Database Connection pool minimum size\n # poolMinConnections: 15\n\n ### Arbitrary labels to add to each metric scraped from this database\n ## Any labels configured for one database will be added to metrics from\n ## every database, because the same metric names must always have the same\n ## full labelset. If the label isn't set for a particular database, then it\n ## will just be set to an empty string.\n # labels:\n # label_name1: label_value1\n # label_name2: label_value2\n\n db2:\n ## Database username\n username: ${DB2_USERNAME}\n ## Database password\n password: ${DB2_PASSWORD}\n ## Database connection url\n url: localhost:1522/freepdb1\n\n ## Metrics query timeout for this database, in seconds\n queryTimeout: 5\n\n ## Rely on Oracle Database External Authentication by network or OS\n # externalAuth: false\n ## Database role\n # role: SYSDBA\n ## Path to Oracle Database wallet, if using wallet\n # tnsAdmin: /path/to/database/wallet\n\n ### Connection settings:\n ### Either the go-sql or Oracle Database connection pool may be used.\n ### To use the Oracle Database connection pool over the go-sql connection pool,\n ### set maxIdleConns to zero and configure the pool* settings.\n\n ### Connection pooling settings for the go-sql connection pool\n ## Max open connections for this database using go-sql connection pool\n maxOpenConns: 10\n ## Max idle connections for this database using go-sql connection pool\n maxIdleConns: 10\n\n ### Connection pooling settings for the Oracle Database connection pool\n ## Oracle Database connection pool increment.\n # poolIncrement: 1\n ## Oracle Database Connection pool maximum size\n # poolMaxConnections: 15\n ## Oracle Database Connection pool minimum size\n # poolMinConnections: 15\n\n ### Arbitrary labels to add to each metric scraped from this database\n ## Any labels configured for one database will be added to metrics from\n ## every database, because the same metric names must always have the same\n ## full labelset. If the label isn't set for a particular database, then it\n ## will just be set to an empty string.\n # labels:\n # label_name1: label_value1\n # label_name2: label_value2\n"})}),"\n",(0,o.jsx)(n.h3,{id:"only-scraping-metrics-from-specific-databases",children:"Only scraping metrics from specific databases"}),"\n",(0,o.jsxs)(n.p,{children:["By default, metrics are scraped from every connected database. To expose only certain metrics on specific databases, configure the ",(0,o.jsx)(n.code,{children:"databases"}),' property of a metric. The following metric definition will only be scraped from databases "db2" and "db3":']}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-toml",children:'[[metric]]\ncontext = "db_platform"\nlabels = [ "platform_name" ]\nmetricsdesc = { value = "Database platform" }\nrequest = \'\'\'\nSELECT platform_name, 1 as value FROM gv$database\n\'\'\'\ndatabases = [ "db2", "db3" ]\n'})}),"\n",(0,o.jsxs)(n.p,{children:["If the ",(0,o.jsx)(n.code,{children:"databases"})," array is empty or not provided for a metric, that metric will be scraped from all connected databases."]})]})}function m(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},8453:(e,n,a)=>{a.d(n,{R:()=>i,x:()=>l});var t=a(6540);const o={},s=t.createContext(o);function i(e){const n=t.useContext(s);return t.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/d94a41cc.bc85db5c.js b/docs/assets/js/d94a41cc.bc85db5c.js deleted file mode 100644 index 7d0c21f4..00000000 --- a/docs/assets/js/d94a41cc.bc85db5c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[580],{6358:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>l,contentTitle:()=>s,default:()=>f,frontMatter:()=>r,metadata:()=>t,toc:()=>c});const t=JSON.parse('{"id":"configuration/config-file","title":"Exporter Config File","description":"The recommended way to configure the exporter is with the --config.file argument, specifying a YAML configuration file.","source":"@site/docs/configuration/config-file.md","sourceDirName":"configuration","slug":"/configuration/config-file","permalink":"/oracle-db-appdev-monitoring/docs/configuration/config-file","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/docs/configuration/config-file.md","tags":[],"version":"current","sidebarPosition":1,"frontMatter":{"title":"Exporter Config File","sidebar_position":1},"sidebar":"tutorialSidebar","previous":{"title":"Configuration","permalink":"/oracle-db-appdev-monitoring/docs/category/configuration"},"next":{"title":"Custom Metrics","permalink":"/oracle-db-appdev-monitoring/docs/configuration/custom-metrics"}}');var i=o(4848),a=o(8453);const r={title:"Exporter Config File",sidebar_position:1},s="Exporter Config File",l={},c=[{value:"Config file in a container image",id:"config-file-in-a-container-image",level:3}];function d(e){const n={code:"code",h1:"h1",h3:"h3",header:"header",p:"p",pre:"pre",...(0,a.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"exporter-config-file",children:"Exporter Config File"})}),"\n",(0,i.jsxs)(n.p,{children:["The recommended way to configure the exporter is with the ",(0,i.jsx)(n.code,{children:"--config.file"})," argument, specifying a YAML configuration file."]}),"\n",(0,i.jsx)(n.p,{children:"The configuration file contains the following options:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"# Example Oracle Database Metrics Exporter Configuration file.\n# Environment variables of the form ${VAR_NAME} will be expanded.\n# If you include a config value that contains a '$' character, escape that '$' with another '$', e.g.,\n# \"$test$pwd\" => \"$$test$$pwd\"\n# Otherwise, the value will be expanded as an environment variable.\n\n# Example Oracle Database Metrics Exporter Configuration file.\n# Environment variables of the form ${VAR_NAME} will be expanded.\n\ndatabases:\n ## Path on which metrics will be served\n # metricsPath: /metrics\n ## Database connection information for the \"default\" database.\n default:\n ## Database username\n username: ${DB_USERNAME}\n ## Database password\n password: ${DB_PASSWORD}\n ## Database password file\n ## If specified, will load the database password from a file.\n # passwordFile: ${DB_PASSWORD_FILE}\n ## Database connection url\n url: localhost:1521/freepdb1\n\n ## Metrics query timeout for this database, in seconds\n queryTimeout: 5\n\n ## Rely on Oracle Database External Authentication by network or OS\n # externalAuth: false\n ## Database role\n # role: SYSDBA\n ## Path to Oracle Database wallet, if using wallet\n # tnsAdmin: /path/to/database/wallet\n\n ### Connection settings:\n ### Either the go-sql or Oracle Database connection pool may be used.\n ### To use the Oracle Database connection pool over the go-sql connection pool,\n ### set maxIdleConns to zero and configure the pool* settings.\n\n ### Connection pooling settings for the go-sql connection pool\n ## Max open connections for this database using go-sql connection pool\n maxOpenConns: 10\n ## Max idle connections for this database using go-sql connection pool\n maxIdleConns: 10\n\n ### Connection pooling settings for the Oracle Database connection pool\n ## Oracle Database connection pool increment.\n # poolIncrement: 1\n ## Oracle Database Connection pool maximum size\n # poolMaxConnections: 15\n ## Oracle Database Connection pool minimum size\n # poolMinConnections: 15\n\n ## Arbitrary labels to add to each metric scraped from this database\n # labels:\n # label_name1: label_value1\n # label_name2: label_value2\n\nmetrics:\n ## How often to scrape metrics. If not provided, metrics will be scraped on request.\n # scrapeInterval: 15s\n ## Path to default metrics file.\n default: default-metrics.toml\n ## Paths to any custom metrics files\n custom:\n - custom-metrics-example/custom-metrics.toml\n\nlog:\n # Path of log file\n destination: /opt/alert.log\n # Interval of log updates\n interval: 15s\n ## Set disable to 1 to disable logging\n # disable: 0\n\n# Optionally configure prometheus webserver\n#web:\n# listenAddresses: [':9161']\n# systemdSocket: true|false\n# configFile: /path/to/webconfigfile\n"})}),"\n",(0,i.jsx)(n.h3,{id:"config-file-in-a-container-image",children:"Config file in a container image"}),"\n",(0,i.jsx)(n.p,{children:"To add your custom config file to a container image, you can layer the base exporter image and include that config:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-Dockerfile",children:'FROM container-registry.oracle.com/database/observability-exporter:2.0.2\nCOPY my-exporter-config.yaml /\nENTRYPOINT ["/oracledb_exporter", "--config.file", "/my-exporter-config.yaml"]\n'})})]})}function f(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},8453:(e,n,o)=>{o.d(n,{R:()=>r,x:()=>s});var t=o(6540);const i={},a=t.createContext(i);function r(e){const n=t.useContext(a);return t.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/d94a41cc.cf627fef.js b/docs/assets/js/d94a41cc.cf627fef.js new file mode 100644 index 00000000..3cc4d16e --- /dev/null +++ b/docs/assets/js/d94a41cc.cf627fef.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[4580],{6358:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>l,contentTitle:()=>s,default:()=>f,frontMatter:()=>r,metadata:()=>t,toc:()=>c});const t=JSON.parse('{"id":"configuration/config-file","title":"Exporter Config File","description":"The recommended way to configure the exporter is with the --config.file argument, specifying a YAML configuration file.","source":"@site/docs/configuration/config-file.md","sourceDirName":"configuration","slug":"/configuration/config-file","permalink":"/oracle-db-appdev-monitoring/docs/next/configuration/config-file","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/docs/configuration/config-file.md","tags":[],"version":"current","sidebarPosition":1,"frontMatter":{"title":"Exporter Config File","sidebar_position":1},"sidebar":"tutorialSidebar","previous":{"title":"Configuration","permalink":"/oracle-db-appdev-monitoring/docs/next/category/configuration"},"next":{"title":"Custom Metrics","permalink":"/oracle-db-appdev-monitoring/docs/next/configuration/custom-metrics"}}');var i=o(4848),a=o(8453);const r={title:"Exporter Config File",sidebar_position:1},s="Exporter Config File",l={},c=[{value:"Config file in a container image",id:"config-file-in-a-container-image",level:3}];function d(e){const n={code:"code",h1:"h1",h3:"h3",header:"header",p:"p",pre:"pre",...(0,a.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"exporter-config-file",children:"Exporter Config File"})}),"\n",(0,i.jsxs)(n.p,{children:["The recommended way to configure the exporter is with the ",(0,i.jsx)(n.code,{children:"--config.file"})," argument, specifying a YAML configuration file."]}),"\n",(0,i.jsx)(n.p,{children:"The configuration file contains the following options:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"# Example Oracle Database Metrics Exporter Configuration file.\n# Environment variables of the form ${VAR_NAME} will be expanded.\n# If you include a config value that contains a '$' character, escape that '$' with another '$', e.g.,\n# \"$test$pwd\" => \"$$test$$pwd\"\n# Otherwise, the value will be expanded as an environment variable.\n\n# Example Oracle Database Metrics Exporter Configuration file.\n# Environment variables of the form ${VAR_NAME} will be expanded.\n\ndatabases:\n ## Path on which metrics will be served\n # metricsPath: /metrics\n ## Database connection information for the \"default\" database.\n default:\n ## Database username\n username: ${DB_USERNAME}\n ## Database password\n password: ${DB_PASSWORD}\n ## Database password file\n ## If specified, will load the database password from a file.\n # passwordFile: ${DB_PASSWORD_FILE}\n ## Database connection url\n url: localhost:1521/freepdb1\n\n ## Metrics query timeout for this database, in seconds\n queryTimeout: 5\n\n ## Rely on Oracle Database External Authentication by network or OS\n # externalAuth: false\n ## Database role\n # role: SYSDBA\n ## Path to Oracle Database wallet, if using wallet\n # tnsAdmin: /path/to/database/wallet\n\n ### Connection settings:\n ### Either the go-sql or Oracle Database connection pool may be used.\n ### To use the Oracle Database connection pool over the go-sql connection pool,\n ### set maxIdleConns to zero and configure the pool* settings.\n\n ### Connection pooling settings for the go-sql connection pool\n ## Max open connections for this database using go-sql connection pool\n maxOpenConns: 10\n ## Max idle connections for this database using go-sql connection pool\n maxIdleConns: 10\n\n ### Connection pooling settings for the Oracle Database connection pool\n ## Oracle Database connection pool increment.\n # poolIncrement: 1\n ## Oracle Database Connection pool maximum size\n # poolMaxConnections: 15\n ## Oracle Database Connection pool minimum size\n # poolMinConnections: 15\n\n ## Arbitrary labels to add to each metric scraped from this database\n # labels:\n # label_name1: label_value1\n # label_name2: label_value2\n\nmetrics:\n ## How often to scrape metrics. If not provided, metrics will be scraped on request.\n # scrapeInterval: 15s\n ## Path to default metrics file.\n default: default-metrics.toml\n ## Paths to any custom metrics files\n custom:\n - custom-metrics-example/custom-metrics.toml\n\nlog:\n # Path of log file\n destination: /opt/alert.log\n # Interval of log updates\n interval: 15s\n ## Set disable to 1 to disable logging\n # disable: 0\n\n# Optionally configure prometheus webserver\n#web:\n# listenAddresses: [':9161']\n# systemdSocket: true|false\n# configFile: /path/to/webconfigfile\n"})}),"\n",(0,i.jsx)(n.h3,{id:"config-file-in-a-container-image",children:"Config file in a container image"}),"\n",(0,i.jsx)(n.p,{children:"To add your custom config file to a container image, you can layer the base exporter image and include that config:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-Dockerfile",children:'FROM container-registry.oracle.com/database/observability-exporter:2.0.2\nCOPY my-exporter-config.yaml /\nENTRYPOINT ["/oracledb_exporter", "--config.file", "/my-exporter-config.yaml"]\n'})})]})}function f(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},8453:(e,n,o)=>{o.d(n,{R:()=>r,x:()=>s});var t=o(6540);const i={},a=t.createContext(i);function r(e){const n=t.useContext(a);return t.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/dac61621.2f9dd97b.js b/docs/assets/js/dac61621.2f9dd97b.js deleted file mode 100644 index 6512d135..00000000 --- a/docs/assets/js/dac61621.2f9dd97b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[199],{2336:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>d,frontMatter:()=>i,metadata:()=>a,toc:()=>l});const a=JSON.parse('{"id":"configuration/oci-vault","title":"OCI Vault","description":"Securely load database credentials from OCI Vault.","source":"@site/docs/configuration/oci-vault.md","sourceDirName":"configuration","slug":"/configuration/oci-vault","permalink":"/oracle-db-appdev-monitoring/docs/configuration/oci-vault","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/docs/configuration/oci-vault.md","tags":[],"version":"current","sidebarPosition":6,"frontMatter":{"title":"OCI Vault","sidebar_position":6},"sidebar":"tutorialSidebar","previous":{"title":"Alert Logs","permalink":"/oracle-db-appdev-monitoring/docs/configuration/alert-logs"},"next":{"title":"Azure Vault","permalink":"/oracle-db-appdev-monitoring/docs/configuration/azure-vault"}}');var o=n(4848),r=n(8453);const i={title:"OCI Vault",sidebar_position:6},s="Oracle Cloud Infrastructure (OCI) Vault",c={},l=[{value:"OCI Vault CLI Configuration",id:"oci-vault-cli-configuration",level:3}];function u(e){const t={blockquote:"blockquote",code:"code",h1:"h1",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"oracle-cloud-infrastructure-oci-vault",children:"Oracle Cloud Infrastructure (OCI) Vault"})}),"\n",(0,o.jsx)(t.p,{children:"Securely load database credentials from OCI Vault."}),"\n",(0,o.jsxs)(t.p,{children:["Each database in the config file may be configured to use OCI Vault. To load the database username and/or password from OCI Vault, set the ",(0,o.jsx)(t.code,{children:"vault.oci"})," property to contain the OCI Vault OCID, and secret names for the database username/password:"]}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-yaml",children:"databases:\n mydb:\n vault:\n oci:\n id: <VAULT OCID>\n usernameSecret: <Secret containing DB username>\n passwordSecret: <Secret containing DB password>\n"})}),"\n",(0,o.jsx)(t.h3,{id:"oci-vault-cli-configuration",children:"OCI Vault CLI Configuration"}),"\n",(0,o.jsx)(t.p,{children:"If using the default database with CLI parameters, the exporter will read the username and password from a secret stored in OCI Vault if you set these two environment variables:"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.code,{children:"OCI_VAULT_ID"})," should be set to the OCID of the OCI vault that you wish to use"]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.code,{children:"OCI_VAULT_USERNAME_SECRET"})," should be set to the name of the secret in the OCI vault which contains the database username"]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.code,{children:"OCI_VAULT_PASSWORD_SECRET"})," should be set to the name of the secret in the OCI vault which contains the database password"]}),"\n"]}),"\n",(0,o.jsxs)(t.blockquote,{children:["\n",(0,o.jsxs)(t.p,{children:["Note that the process must be running under a user that has the OCI CLI installed and configured correctly to access the desired tenancy and region. The OCI Profile used is ",(0,o.jsx)(t.code,{children:"DEFAULT"}),"."]}),"\n"]})]})}function d(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(u,{...e})}):u(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>i,x:()=>s});var a=n(6540);const o={},r=a.createContext(o);function i(e){const t=a.useContext(r);return a.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),a.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/dac61621.9472896f.js b/docs/assets/js/dac61621.9472896f.js new file mode 100644 index 00000000..945fcb43 --- /dev/null +++ b/docs/assets/js/dac61621.9472896f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[2199],{2336:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>d,frontMatter:()=>i,metadata:()=>a,toc:()=>l});const a=JSON.parse('{"id":"configuration/oci-vault","title":"OCI Vault","description":"Securely load database credentials from OCI Vault.","source":"@site/docs/configuration/oci-vault.md","sourceDirName":"configuration","slug":"/configuration/oci-vault","permalink":"/oracle-db-appdev-monitoring/docs/next/configuration/oci-vault","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/docs/configuration/oci-vault.md","tags":[],"version":"current","sidebarPosition":6,"frontMatter":{"title":"OCI Vault","sidebar_position":6},"sidebar":"tutorialSidebar","previous":{"title":"Alert Logs","permalink":"/oracle-db-appdev-monitoring/docs/next/configuration/alert-logs"},"next":{"title":"Azure Vault","permalink":"/oracle-db-appdev-monitoring/docs/next/configuration/azure-vault"}}');var o=n(4848),r=n(8453);const i={title:"OCI Vault",sidebar_position:6},s="Oracle Cloud Infrastructure (OCI) Vault",c={},l=[{value:"OCI Vault CLI Configuration",id:"oci-vault-cli-configuration",level:3}];function u(e){const t={blockquote:"blockquote",code:"code",h1:"h1",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"oracle-cloud-infrastructure-oci-vault",children:"Oracle Cloud Infrastructure (OCI) Vault"})}),"\n",(0,o.jsx)(t.p,{children:"Securely load database credentials from OCI Vault."}),"\n",(0,o.jsxs)(t.p,{children:["Each database in the config file may be configured to use OCI Vault. To load the database username and/or password from OCI Vault, set the ",(0,o.jsx)(t.code,{children:"vault.oci"})," property to contain the OCI Vault OCID, and secret names for the database username/password:"]}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-yaml",children:"databases:\n mydb:\n vault:\n oci:\n id: <VAULT OCID>\n usernameSecret: <Secret containing DB username>\n passwordSecret: <Secret containing DB password>\n"})}),"\n",(0,o.jsx)(t.h3,{id:"oci-vault-cli-configuration",children:"OCI Vault CLI Configuration"}),"\n",(0,o.jsx)(t.p,{children:"If using the default database with CLI parameters, the exporter will read the username and password from a secret stored in OCI Vault if you set these two environment variables:"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.code,{children:"OCI_VAULT_ID"})," should be set to the OCID of the OCI vault that you wish to use"]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.code,{children:"OCI_VAULT_USERNAME_SECRET"})," should be set to the name of the secret in the OCI vault which contains the database username"]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.code,{children:"OCI_VAULT_PASSWORD_SECRET"})," should be set to the name of the secret in the OCI vault which contains the database password"]}),"\n"]}),"\n",(0,o.jsxs)(t.blockquote,{children:["\n",(0,o.jsxs)(t.p,{children:["Note that the process must be running under a user that has the OCI CLI installed and configured correctly to access the desired tenancy and region. The OCI Profile used is ",(0,o.jsx)(t.code,{children:"DEFAULT"}),"."]}),"\n"]})]})}function d(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(u,{...e})}):u(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>i,x:()=>s});var a=n(6540);const o={},r=a.createContext(o);function i(e){const t=a.useContext(r);return a.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),a.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/e0c86ee0.0cf62a46.js b/docs/assets/js/e0c86ee0.0cf62a46.js new file mode 100644 index 00000000..c27006f9 --- /dev/null +++ b/docs/assets/js/e0c86ee0.0cf62a46.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[8089],{3128:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>r,metadata:()=>a,toc:()=>d});const a=JSON.parse('{"id":"advanced/txeventq","title":"Monitoring TxEventQ","description":"Oracle Transactional Event Queues (\\"TxEventQ\\") is a fault-tolerant, scalable, real-time messaging backbone offered by converged Oracle Database that allows you to build an enterprise-class event-driven architectures.","source":"@site/versioned_docs/version-2.0.3/advanced/txeventq.md","sourceDirName":"advanced","slug":"/advanced/txeventq","permalink":"/oracle-db-appdev-monitoring/docs/advanced/txeventq","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/versioned_docs/version-2.0.3/advanced/txeventq.md","tags":[],"version":"2.0.3","sidebarPosition":2,"frontMatter":{"title":"Monitoring TxEventQ","sidebar_position":2},"sidebar":"tutorialSidebar","previous":{"title":"Configuring the Go Runtime","permalink":"/oracle-db-appdev-monitoring/docs/advanced/go-runtime"},"next":{"title":"Development","permalink":"/oracle-db-appdev-monitoring/docs/advanced/development"}}');var s=n(4848),o=n(8453);const r={title:"Monitoring TxEventQ",sidebar_position:2},i="Monitoring Transactional Event Queues",c={},d=[{value:"How to create some traffic with PL/SQL",id:"how-to-create-some-traffic-with-plsql",level:3},{value:"How to create some traffic with Java (Spring Boot)",id:"how-to-create-some-traffic-with-java-spring-boot",level:3},{value:"Metrics definitions",id:"metrics-definitions",level:3},{value:"Additional database permissions",id:"additional-database-permissions",level:3},{value:"Grafana dashboard",id:"grafana-dashboard",level:3}];function l(e){const t={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h3:"h3",header:"header",img:"img",p:"p",pre:"pre",...(0,o.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"monitoring-transactional-event-queues",children:"Monitoring Transactional Event Queues"})}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.a,{href:"https://docs.oracle.com/en/database/oracle/oracle-database/23/adque/index.html",children:"Oracle Transactional Event Queues"}),' ("TxEventQ") is a fault-tolerant, scalable, real-time messaging backbone offered by converged Oracle Database that allows you to build an enterprise-class event-driven architectures.']}),"\n",(0,s.jsx)(t.p,{children:"Access to the real-time broker, producer, and consumer metrics in a single dashboard and receiving alerts for issues allows teams to understand the state of their system."}),"\n",(0,s.jsx)(t.p,{children:"The exporter includes a set of metrics for monitoring TxEventQ and a pre-built Grafana dashboard."}),"\n",(0,s.jsxs)(t.blockquote,{children:["\n",(0,s.jsx)(t.p,{children:"Note: The metrics are written for Oracle Database 21c or later."}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"how-to-create-some-traffic-with-plsql",children:"How to create some traffic with PL/SQL"}),"\n",(0,s.jsx)(t.p,{children:"If you need to create a topic to monitor, you can use these statements to create and start a topic, and create a subscriber:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-sql",children:"declare\n subscriber sys.aq$_agent;\nbegin\n -- create the topic\n dbms_aqadm.create_transactional_event_queue(\n queue_name => 'my_topic',\n multiple_consumers => true -- true makes a pub/sub topic\n );\n\n -- start the topic\n dbms_aqadm.start_queue(\n queue_name => 'my_topic'\n );\n\n -- create a subscriber\n dbms_aqadm.add_subscriber(\n queue_name => 'my_teq',\n subscriber => sys.aq$_agent(\n 'my_subscriber', -- the subscriber name\n null, -- address, only used for notifications\n 0 -- protocol\n ),\n rule => 'correlation = ''my_subscriber'''\n );\nend;\n"})}),"\n",(0,s.jsx)(t.p,{children:"You can produce a message with these commands:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-sql",children:"declare\n enqueue_options dbms_aq.enqueue_options_t;\n message_properties dbms_aq.message_properties_t;\n message_handle raw(16);\n message SYS.AQ$_JMS_TEXT_MESSAGE;\nbegin\n -- create the message payload\n message := SYS.AQ$_JMS_TEXT_MESSAGE.construct;\n message.set_text('{\"orderid\": 12345, \"username\": \"Jessica Smith\"}');\n\n -- set the consumer name\n message_properties.correlation := 'my_subscriber';\n\n -- enqueue the message\n dbms_aq.enqueue(\n queue_name => 'my_topic',\n enqueue_options => enqueue_options,\n message_properties => message_properties,\n payload => message,\n msgid => message_handle);\n\n -- commit the transaction\n commit;\nend;\n"})}),"\n",(0,s.jsx)(t.h3,{id:"how-to-create-some-traffic-with-java-spring-boot",children:"How to create some traffic with Java (Spring Boot)"}),"\n",(0,s.jsxs)(t.p,{children:["A simple load generator is provided in ",(0,s.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/docker-compose/txeventq-load",children:"this directory"})," which you can use to create some traffic so you can experiment with the sample dashboard."]}),"\n",(0,s.jsxs)(t.p,{children:["To run the sample, first update ",(0,s.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/docker-compose/txeventq-load/src/main/resources/application.yaml",children:"application.yaml"})," with the correct IP address for your database, then start the application as follows:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"mvn spring-boot:run\n"})}),"\n",(0,s.jsx)(t.p,{children:"The application will create ten queues names TOPIC_0 through TOPIC_9 and randomly produce and consume messages on those queues. The example dashboard shown below was monitoring traffic produced using this application."}),"\n",(0,s.jsx)(t.h3,{id:"metrics-definitions",children:"Metrics definitions"}),"\n",(0,s.jsxs)(t.p,{children:["The metrics definitions are provided in ",(0,s.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/custom-metrics-example/txeventq-metrics.toml",children:"this file"}),". You need to provide this file to the exporter, e.g., by adding it to your container image, or creating a Kubernetes config map containing the file and mounting that config map as a volume in your deployment. You also need to set the ",(0,s.jsx)(t.code,{children:"CUSTOM_METRICS"})," environment variable to the location of this file."]}),"\n",(0,s.jsx)(t.h3,{id:"additional-database-permissions",children:"Additional database permissions"}),"\n",(0,s.jsx)(t.p,{children:'The database user that the exporter uses to connect to the database will also need additional permissions, which can be granted with these statements. This example assumes the exporter connects with the username "exporter":'}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-sql",children:"grant execute on dbms_aq to exporter;\ngrant execute on dbms_aqadm to exporter;\ngrant execute on dbms_aqin to exporter;\ngrant execute on dbms_aqjms_internal to exporter;\ngrant execute on dbms_teqk to exporter;\ngrant execute on DBMS_RESOURCE_MANAGER to exporter;\ngrant select_catalog_role to exporter;\ngrant select on sys.aq$_queue_shards to exporter;\ngrant select on user_queue_partition_assignment_table to exporter;\n"})}),"\n",(0,s.jsx)(t.h3,{id:"grafana-dashboard",children:"Grafana dashboard"}),"\n",(0,s.jsxs)(t.p,{children:["A Grafana dashboard for Transactional Event Queues is provided ",(0,s.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/docker-compose/grafana/dashboards/txeventq.json",children:"in this file"}),". This can be imported into your Grafana environment. Choose the Prometheus datasource that is collecting metrics from the exporter."]}),"\n",(0,s.jsxs)(t.blockquote,{children:["\n",(0,s.jsx)(t.p,{children:"Note: You may not see any activity on the dashboard unless there are clients producing and consuming messages from topics."}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"The dashboard will look like this:"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"Oracle Database Dashboard",src:n(7242).A+"",width:"1893",height:"1487"})})]})}function m(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},7242:(e,t,n)=>{n.d(t,{A:()=>a});const a=n.p+"assets/images/txeventq-dashboard-v2-880ceab000b0e8c267e0eedf322350d4.png"},8453:(e,t,n)=>{n.d(t,{R:()=>r,x:()=>i});var a=n(6540);const s={},o=a.createContext(s);function r(e){const t=a.useContext(o);return a.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),a.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/f36aa3f3.da1bf05b.js b/docs/assets/js/f36aa3f3.da1bf05b.js new file mode 100644 index 00000000..132b1729 --- /dev/null +++ b/docs/assets/js/f36aa3f3.da1bf05b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[5808],{943:e=>{e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Releases","description":"Information on the exporter releases, changelog, and roadmap.","slug":"/category/releases","permalink":"/oracle-db-appdev-monitoring/docs/next/category/releases","sidebar":"tutorialSidebar","navigation":{"previous":{"title":"Development","permalink":"/oracle-db-appdev-monitoring/docs/next/advanced/development"},"next":{"title":"Roadmap","permalink":"/oracle-db-appdev-monitoring/docs/next/releases/roadmap"}}}}')}}]); \ No newline at end of file diff --git a/docs/assets/js/f6de67f9.85db75b5.js b/docs/assets/js/f6de67f9.85db75b5.js new file mode 100644 index 00000000..06a53647 --- /dev/null +++ b/docs/assets/js/f6de67f9.85db75b5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[2900],{2127:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>i,contentTitle:()=>s,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>c});const a=JSON.parse('{"id":"configuration/oracle-wallet","title":"Oracle Wallet (mTLS)","description":"For mutual TLS (mTLS) connections, you must use an Oracle Wallet.","source":"@site/versioned_docs/version-2.0.3/configuration/oracle-wallet.md","sourceDirName":"configuration","slug":"/configuration/oracle-wallet","permalink":"/oracle-db-appdev-monitoring/docs/configuration/oracle-wallet","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/versioned_docs/version-2.0.3/configuration/oracle-wallet.md","tags":[],"version":"2.0.3","sidebarPosition":4,"frontMatter":{"title":"Oracle Wallet (mTLS)","sidebar_position":4},"sidebar":"tutorialSidebar","previous":{"title":"Multiple Databases","permalink":"/oracle-db-appdev-monitoring/docs/configuration/multiple-databases"},"next":{"title":"Alert Logs","permalink":"/oracle-db-appdev-monitoring/docs/configuration/alert-logs"}}');var o=t(4848),l=t(8453);const r={title:"Oracle Wallet (mTLS)",sidebar_position:4},s="Using a Wallet",i={},c=[{value:"mTLS for multiple databases with Oracle Wallet",id:"mtls-for-multiple-databases-with-oracle-wallet",level:3}];function d(e){const n={code:"code",h1:"h1",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",...(0,l.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.header,{children:(0,o.jsx)(n.h1,{id:"using-a-wallet",children:"Using a Wallet"})}),"\n",(0,o.jsx)(n.p,{children:"For mutual TLS (mTLS) connections, you must use an Oracle Wallet."}),"\n",(0,o.jsx)(n.p,{children:"If you are using Oracle Autonomous Database with mTLS, for example, you can download and unzip the wallet from the Oracle Cloud Infrastructure (OCI) console."}),"\n",(0,o.jsx)(n.p,{children:"To configure the exporter to use an Oracle Wallet,"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["Set the ",(0,o.jsx)(n.code,{children:"TNS_ADMIN"})," environment variable to the directory containing the unzipped wallet"]}),"\n",(0,o.jsx)(n.li,{children:"Configure your database instance with the appropriate database TNS name:"}),"\n"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:"databases:\n mydb:\n username: admin\n password: <REPLACE ME>\n # TNS Name from wallet tnsnames.ora file, e.g., mydb_high\n url: <TNS Name>\n"})}),"\n",(0,o.jsxs)(n.p,{children:["If you are running the exporter as a container, you can mount the wallet as a volume. For example, mounting the ",(0,o.jsx)(n.code,{children:"./wallet"})," directory to the ",(0,o.jsx)(n.code,{children:"/wallet"})," location:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"docker run -it --rm \\\n -e DB_USERNAME=pdbadmin \\\n -e DB_PASSWORD=Welcome12345 \\\n -e DB_CONNECT_STRING=devdb_tp \\\n -v ./wallet:/wallet \\\n -p 9161:9161 \\\n container-registry.oracle.com/database/observability-exporter:2.0.2\n"})}),"\n",(0,o.jsx)(n.h3,{id:"mtls-for-multiple-databases-with-oracle-wallet",children:"mTLS for multiple databases with Oracle Wallet"}),"\n",(0,o.jsxs)(n.p,{children:["The Oracle Database Metrics exporter uses ODPI-C, which can only initalize the TNS aliases from a ",(0,o.jsx)(n.code,{children:"tnsnames.ora"}),' file once per process. To work around this, the exporter can be configured to read from a "combined" ',(0,o.jsx)(n.code,{children:"tnsnames.ora"})," file containing all TNS aliases for connections in a multi-database configuration."]}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"For each database the exporter will connect to, download the corresponding wallet files. If you're using ADB/ATP-S, download the regional wallet instead of the instance wallet if the databases are in the same region."}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Copy the TNS aliases the ",(0,o.jsx)(n.code,{children:"tnsnames.ora"})," file from each wallet, and combine them into one file, so all your database service names are in one file together"]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["In the combined ",(0,o.jsx)(n.code,{children:"tnsnames.ora"})," file, and add the following snippet to each TNS alias connection string, to tell the client where the wallet directory is:"]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{children:"(security=(MY_WALLET_DIRECTORY=/path/to/this/database/wallet))\n"})}),"\n",(0,o.jsxs)(n.p,{children:["The combined ",(0,o.jsx)(n.code,{children:"tnsnames.ora"})," file, which contains the TNS aliases for both databases, and their corresponding wallet location in the ",(0,o.jsx)(n.code,{children:"security"})," configuration will look something like the following:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-sql",children:"db1_high = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=adb.****.oraclecloud.com))(connect_data=(service_name=****.adb.oraclecloud.com))(security=(MY_WALLET_DIRECTORY=/wallets/db1)(ssl_server_dn_match=yes)))\n\ndb2_high = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=adb.****.oraclecloud.com))(connect_data=(service_name=****.adb.oraclecloud.com))(security=(MY_WALLET_DIRECTORY=/wallets/db2)(ssl_server_dn_match=yes)))\n"})}),"\n",(0,o.jsxs)(n.ol,{start:"4",children:["\n",(0,o.jsxs)(n.li,{children:["Take wallet files (cwallet.sso, ewallet.p12, & ewallet.pem) for each database, and place them in separate directories. For example, ",(0,o.jsx)(n.code,{children:"db1"})," gets its own directory, ",(0,o.jsx)(n.code,{children:"db2"})," gets its own directory, and so forth."]}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:["The resulting directory structure should look like the following, with wallet information separate from the combined ",(0,o.jsx)(n.code,{children:"tnsnames.ora"})," file:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{children:"wallets\n\u251c\u2500\u2500 combined\n\u2502 \u251c\u2500\u2500 sqlnet.ora\n\u2502 \u2514\u2500\u2500 tnsnames.ora // Combined tnsnames.ora\n\u251c\u2500\u2500 db1\n\u2502 \u251c\u2500\u2500 cwallet.sso\n\u2502 \u251c\u2500\u2500 ewallet.p12\n\u2502 \u2514\u2500\u2500 ewallet.pem\n\u2514\u2500\u2500 db2\n\u251c\u2500\u2500 cwallet.sso\n\u251c\u2500\u2500 ewallet.p12\n\u2514\u2500\u2500 ewallet.pem\n"})}),"\n",(0,o.jsxs)(n.ol,{start:"5",children:["\n",(0,o.jsxs)(n.li,{children:["Set the ",(0,o.jsx)(n.code,{children:"TNS_ADMIN"})," environment variable where the exporter is running to the directory containing your combined ",(0,o.jsx)(n.code,{children:"tnsnames.ora"})," file:"]}),"\n"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{children:"export TNS_ADMIN=/wallets/combined\n"})}),"\n",(0,o.jsxs)(n.ol,{start:"6",children:["\n",(0,o.jsxs)(n.li,{children:["Finally, update the exporter configuration file to include the TNS aliases for all databases you will be connecting to. Ensure your database configuration file does not use the ",(0,o.jsx)(n.code,{children:"tnsAdmin"})," property, as we are using the global ",(0,o.jsx)(n.code,{children:"TNS_ADMIN"})," environment variable to point to the combined ",(0,o.jsx)(n.code,{children:"tnsnames.ora"})," file:"]}),"\n"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:"databases:\n db2:\n username: ****\n password: ****\n url: db2_high\n queryTimeout: 5\n maxOpenConns: 10\n maxIdleConns: 10\n db1:\n username: ****\n password: ****\n url: db1_high\n queryTimeout: 5\n maxOpenConns: 10\n maxIdleConns: 10\n"})}),"\n",(0,o.jsx)(n.p,{children:"Then, run the exporter with the config file:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-shell",children:"./oracledb_exporter --config.file=my-config-file.yaml\n"})})]})}function h(e={}){const{wrapper:n}={...(0,l.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>s});var a=t(6540);const o={},l=a.createContext(o);function r(e){const n=a.useContext(l);return a.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),a.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/f7d2b7bf.0e65ba99.js b/docs/assets/js/f7d2b7bf.0e65ba99.js new file mode 100644 index 00000000..5c7c2f75 --- /dev/null +++ b/docs/assets/js/f7d2b7bf.0e65ba99.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[5173],{8453:(e,t,r)=>{r.d(t,{R:()=>l,x:()=>a});var n=r(6540);const s={},i=n.createContext(s);function l(e){const t=n.useContext(i);return n.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),n.createElement(i.Provider,{value:t},e.children)}},9012:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>m,frontMatter:()=>l,metadata:()=>n,toc:()=>o});const n=JSON.parse('{"id":"configuration/custom-metrics","title":"Custom Metrics","description":"The exporter allows definition of arbitrary custom metrics in one or more TOML or YAML files.","source":"@site/versioned_docs/version-2.0.3/configuration/custom-metrics.md","sourceDirName":"configuration","slug":"/configuration/custom-metrics","permalink":"/oracle-db-appdev-monitoring/docs/configuration/custom-metrics","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/versioned_docs/version-2.0.3/configuration/custom-metrics.md","tags":[],"version":"2.0.3","sidebarPosition":2,"frontMatter":{"title":"Custom Metrics","sidebar_position":2},"sidebar":"tutorialSidebar","previous":{"title":"Exporter Config File","permalink":"/oracle-db-appdev-monitoring/docs/configuration/config-file"},"next":{"title":"Multiple Databases","permalink":"/oracle-db-appdev-monitoring/docs/configuration/multiple-databases"}}');var s=r(4848),i=r(8453);const l={title:"Custom Metrics",sidebar_position:2},a="Custom Metrics",c={},o=[{value:"Metric Schema",id:"metric-schema",level:3},{value:"Example Metric Definition",id:"example-metric-definition",level:3},{value:"Customize metrics in a container image",id:"customize-metrics-in-a-container-image",level:3}];function d(e){const t={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h3:"h3",header:"header",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"custom-metrics",children:"Custom Metrics"})}),"\n",(0,s.jsx)(t.p,{children:"The exporter allows definition of arbitrary custom metrics in one or more TOML or YAML files."}),"\n",(0,s.jsxs)(t.p,{children:["To specify custom metrics files\nexporter, use the ",(0,s.jsx)(t.code,{children:"metrics"})," configuration in the ",(0,s.jsx)(t.a,{href:"/oracle-db-appdev-monitoring/docs/configuration/config-file",children:"config file"}),":"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-yaml",children:"metrics:\n ## How often to scrape metrics. If not provided, metrics will be scraped on request.\n # scrapeInterval: 15s\n ## Path to default metrics file.\n default: default-metrics.toml\n ## Paths to any custom metrics files (TOML or YAML)\n custom:\n - custom-metrics-example/custom-metrics.toml\n"})}),"\n",(0,s.jsxs)(t.p,{children:["You may also use ",(0,s.jsx)(t.code,{children:"--custom.metrics"})," flag followed by a comma separated list of TOML or YAML files, or export ",(0,s.jsx)(t.code,{children:"CUSTOM_METRICS"})," variable environment (",(0,s.jsx)(t.code,{children:"export CUSTOM_METRICS=my-custom-metrics.toml,my-other-custom-metrics.toml"}),")"]}),"\n",(0,s.jsx)(t.h3,{id:"metric-schema",children:"Metric Schema"}),"\n",(0,s.jsxs)(t.p,{children:["Metrics files must contain a series of ",(0,s.jsx)(t.code,{children:"[[metric]]"})," definitions, in TOML, or the equivalent definition in a YAML file. Each metric definition must follow the exporter's metric schema:"]}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Field Name"}),(0,s.jsx)(t.th,{children:"Description"}),(0,s.jsx)(t.th,{children:"Type"}),(0,s.jsx)(t.th,{children:"Required"}),(0,s.jsx)(t.th,{children:"Default"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"context"}),(0,s.jsx)(t.td,{children:"Metric context, used to build metric FQN"}),(0,s.jsx)(t.td,{children:"String"}),(0,s.jsx)(t.td,{children:"Yes"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"labels"}),(0,s.jsx)(t.td,{children:"Metric labels, which must match column names in the query. Any column that is not a label will be parsed as a metric"}),(0,s.jsx)(t.td,{children:"Array of Strings"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"metricsdesc"}),(0,s.jsx)(t.td,{children:"Mapping between field(s) in the request and comment(s)"}),(0,s.jsx)(t.td,{children:"Dictionary of Strings"}),(0,s.jsx)(t.td,{children:"Yes"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"metricstype"}),(0,s.jsxs)(t.td,{children:["Mapping between field(s) in the request and ",(0,s.jsx)(t.a,{href:"https://prometheus.io/docs/concepts/metric_types/",children:"Prometheus metric types"})]}),(0,s.jsx)(t.td,{children:"Dictionary of Strings"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"metricsbuckets"}),(0,s.jsxs)(t.td,{children:["Split ",(0,s.jsx)(t.a,{href:"https://prometheus.io/docs/concepts/metric_types/#histogram",children:"histogram"})," metric types into buckets based on value (",(0,s.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/custom-metrics-example/metric-histogram-example.toml",children:"example"}),")"]}),(0,s.jsx)(t.td,{children:"Dictionary of String dictionaries"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"fieldtoappend"}),(0,s.jsx)(t.td,{children:"Field from the request to append to the metric FQN"}),(0,s.jsx)(t.td,{children:"String"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"request"}),(0,s.jsx)(t.td,{children:"Oracle database query to run for metrics scraping"}),(0,s.jsx)(t.td,{children:"String"}),(0,s.jsx)(t.td,{children:"Yes"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"ignorezeroresult"}),(0,s.jsx)(t.td,{children:"Whether or not an error will be printed if the request does not return any results"}),(0,s.jsx)(t.td,{children:"Boolean"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{children:"false"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"querytimeout"}),(0,s.jsx)(t.td,{children:"Oracle Database query timeout duration, e.g., 300ms, 0.5h"}),(0,s.jsx)(t.td,{children:"String duration"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{children:"Value of query.timeout in seconds"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"scrapeinterval"}),(0,s.jsx)(t.td,{children:"Custom metric scrape interval, used if scrape.interval is provided, otherwise metrics are always scraped on request."}),(0,s.jsx)(t.td,{children:"String duration"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"databases"}),(0,s.jsx)(t.td,{children:"Optional array of databases to scrape from. If not specified, the metric is scraped from all databases."}),(0,s.jsx)(t.td,{children:"Array of Strings"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{})]})]})]}),"\n",(0,s.jsx)(t.h3,{id:"example-metric-definition",children:"Example Metric Definition"}),"\n",(0,s.jsx)(t.p,{children:"Here's a simple example of a metric definition:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-toml",children:'[[metric]]\ncontext = "test"\nrequest = "SELECT 1 as value_1, 2 as value_2 FROM DUAL"\nmetricsdesc = { value_1 = "Simple example returning always 1.", value_2 = "Same but returning always 2." }\n'})}),"\n",(0,s.jsxs)(t.blockquote,{children:["\n",(0,s.jsxs)(t.p,{children:["NOTE: Do not add a semicolon (",(0,s.jsx)(t.code,{children:";"}),") at the end of the SQL queries."]}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"This file produce the following entries in the exporter:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-text",children:"# HELP oracledb_test_value_1 Simple example returning always 1.\n# TYPE oracledb_test_value_1 gauge\noracledb_test_value_1 1\n# HELP oracledb_test_value_2 Same but returning always 2.\n# TYPE oracledb_test_value_2 gauge\noracledb_test_value_2 2\n"})}),"\n",(0,s.jsxs)(t.p,{children:["You can also provide labels using ",(0,s.jsx)(t.code,{children:"labels"})," field. Here's an example providing two metrics, with and without labels:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-toml",children:'[[metric]]\ncontext = "context_no_label"\nrequest = "SELECT 1 as value_1, 2 as value_2 FROM DUAL"\nmetricsdesc = { value_1 = "Simple example returning always 1.", value_2 = "Same but returning always 2." }\n\n[[metric]]\ncontext = "context_with_labels"\nlabels = [ "label_1", "label_2" ]\nrequest = "SELECT 1 as value_1, 2 as value_2, \'First label\' as label_1, \'Second label\' as label_2 FROM DUAL"\nmetricsdesc = { value_1 = "Simple example returning always 1.", value_2 = "Same but returning always 2." }\n'})}),"\n",(0,s.jsx)(t.p,{children:"This TOML file produces the following result:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-text",children:'# HELP oracledb_context_no_label_value_1 Simple example returning always 1.\n# TYPE oracledb_context_no_label_value_1 gauge\noracledb_context_no_label_value_1 1\n# HELP oracledb_context_no_label_value_2 Same but returning always 2.\n# TYPE oracledb_context_no_label_value_2 gauge\noracledb_context_no_label_value_2 2\n# HELP oracledb_context_with_labels_value_1 Simple example returning always 1.\n# TYPE oracledb_context_with_labels_value_1 gauge\noracledb_context_with_labels_value_1{label_1="First label",label_2="Second label"} 1\n# HELP oracledb_context_with_labels_value_2 Same but returning always 2.\n# TYPE oracledb_context_with_labels_value_2 gauge\noracledb_context_with_labels_value_2{label_1="First label",label_2="Second label"} 2\n'})}),"\n",(0,s.jsxs)(t.p,{children:["Last, you can set metric type using ",(0,s.jsx)(t.strong,{children:"metricstype"})," field."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-toml",children:'[[metric]]\ncontext = "context_with_labels"\nlabels = [ "label_1", "label_2" ]\nrequest = "SELECT 1 as value_1, 2 as value_2, \'First label\' as label_1, \'Second label\' as label_2 FROM DUAL"\nmetricsdesc = { value_1 = "Simple example returning always 1 as counter.", value_2 = "Same but returning always 2 as gauge." }\n# Can be counter or gauge (default)\nmetricstype = { value_1 = "counter" }\n'})}),"\n",(0,s.jsx)(t.p,{children:"This TOML file will produce the following result:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-text",children:"# HELP oracledb_test_value_1 Simple test example returning always 1 as counter.\n# TYPE oracledb_test_value_1 counter\noracledb_test_value_1 1\n# HELP oracledb_test_value_2 Same test but returning always 2 as gauge.\n# TYPE oracledb_test_value_2 gauge\noracledb_test_value_2 2\n"})}),"\n",(0,s.jsxs)(t.p,{children:["You can find ",(0,s.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/custom-metrics-example/custom-metrics.toml",children:"working examples"})," of custom metrics for slow queries, big queries and top 100 tables.\nAn example of ",(0,s.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/custom-metrics-example/txeventq-metrics.toml",children:"custom metrics for Transacational Event Queues"})," is also provided."]}),"\n",(0,s.jsx)(t.h3,{id:"customize-metrics-in-a-container-image",children:"Customize metrics in a container image"}),"\n",(0,s.jsxs)(t.p,{children:["If you run the exporter as a container image and want to include your custom metrics in the image itself, you can use the following example ",(0,s.jsx)(t.code,{children:"Dockerfile"})," to create a new image:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-Dockerfile",children:'FROM container-registry.oracle.com/database/observability-exporter:2.0.2\nCOPY custom-metrics.toml /\nENTRYPOINT ["/oracledb_exporter", "--custom.metrics", "/custom-metrics.toml"]\n'})})]})}function m(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}}}]); \ No newline at end of file diff --git a/docs/assets/js/fcc612c9.2600ed97.js b/docs/assets/js/fcc612c9.2600ed97.js new file mode 100644 index 00000000..d3cade33 --- /dev/null +++ b/docs/assets/js/fcc612c9.2600ed97.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[1636],{381:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>d,contentTitle:()=>i,default:()=>l,frontMatter:()=>o,metadata:()=>r,toc:()=>c});const r=JSON.parse('{"id":"getting-started/grafana-dashboards","title":"Grafana Dashboards","description":"Sample Grafana dashboards are included with the exporter.","source":"@site/versioned_docs/version-2.0.3/getting-started/grafana-dashboards.md","sourceDirName":"getting-started","slug":"/getting-started/grafana-dashboards","permalink":"/oracle-db-appdev-monitoring/docs/getting-started/grafana-dashboards","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/versioned_docs/version-2.0.3/getting-started/grafana-dashboards.md","tags":[],"version":"2.0.3","sidebarPosition":4,"frontMatter":{"title":"Grafana Dashboards","sidebar_position":4},"sidebar":"tutorialSidebar","previous":{"title":"Kubernetes","permalink":"/oracle-db-appdev-monitoring/docs/getting-started/kubernetes"},"next":{"title":"Configuration","permalink":"/oracle-db-appdev-monitoring/docs/category/configuration"}}');var s=t(4848),n=t(8453);const o={title:"Grafana Dashboards",sidebar_position:4},i="Grafana Dashboards",d={},c=[];function h(e){const a={a:"a",h1:"h1",header:"header",img:"img",p:"p",...(0,n.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(a.header,{children:(0,s.jsx)(a.h1,{id:"grafana-dashboards",children:"Grafana Dashboards"})}),"\n",(0,s.jsx)(a.p,{children:"Sample Grafana dashboards are included with the exporter."}),"\n",(0,s.jsxs)(a.p,{children:["A sample Grafana dashboard definition is provided ",(0,s.jsx)(a.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/docker-compose/grafana/dashboards",children:"in this directory"}),". You can import these dashboards into your Grafana instance, and set it to use the Prometheus datasource that you have defined for the Prometheus instance that is collecting metrics from the exporter."]}),"\n",(0,s.jsx)(a.p,{children:"The dashboard shows some basic information, as shown below:"}),"\n",(0,s.jsx)(a.p,{children:(0,s.jsx)(a.img,{alt:"Oracle Database Dashboard",src:t(2162).A+"",width:"1904",height:"1203"})})]})}function l(e={}){const{wrapper:a}={...(0,n.R)(),...e.components};return a?(0,s.jsx)(a,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},2162:(e,a,t)=>{t.d(a,{A:()=>r});const r=t.p+"assets/images/oracledb-dashboard-cac23ad464ac40e39bf6348f688daa1d.png"},8453:(e,a,t)=>{t.d(a,{R:()=>o,x:()=>i});var r=t(6540);const s={},n=r.createContext(s);function o(e){const a=r.useContext(n);return r.useMemo(function(){return"function"==typeof e?e(a):{...a,...e}},[a,e])}function i(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),r.createElement(n.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/main.7870a9cd.js b/docs/assets/js/main.7870a9cd.js new file mode 100644 index 00000000..8a89e6aa --- /dev/null +++ b/docs/assets/js/main.7870a9cd.js @@ -0,0 +1,2 @@ +/*! For license information please see main.7870a9cd.js.LICENSE.txt */ +(self.webpackChunksite=self.webpackChunksite||[]).push([[8792],{115:e=>{var t="undefined"!=typeof Element,n="function"==typeof Map,r="function"==typeof Set,o="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function a(e,i){if(e===i)return!0;if(e&&i&&"object"==typeof e&&"object"==typeof i){if(e.constructor!==i.constructor)return!1;var l,s,c,u;if(Array.isArray(e)){if((l=e.length)!=i.length)return!1;for(s=l;0!==s--;)if(!a(e[s],i[s]))return!1;return!0}if(n&&e instanceof Map&&i instanceof Map){if(e.size!==i.size)return!1;for(u=e.entries();!(s=u.next()).done;)if(!i.has(s.value[0]))return!1;for(u=e.entries();!(s=u.next()).done;)if(!a(s.value[1],i.get(s.value[0])))return!1;return!0}if(r&&e instanceof Set&&i instanceof Set){if(e.size!==i.size)return!1;for(u=e.entries();!(s=u.next()).done;)if(!i.has(s.value[0]))return!1;return!0}if(o&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(i)){if((l=e.length)!=i.length)return!1;for(s=l;0!==s--;)if(e[s]!==i[s])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((l=(c=Object.keys(e)).length)!==Object.keys(i).length)return!1;for(s=l;0!==s--;)if(!Object.prototype.hasOwnProperty.call(i,c[s]))return!1;if(t&&e instanceof Element)return!1;for(s=l;0!==s--;)if(("_owner"!==c[s]&&"__v"!==c[s]&&"__o"!==c[s]||!e.$$typeof)&&!a(e[c[s]],i[c[s]]))return!1;return!0}return e!=e&&i!=i}e.exports=function(e,t){try{return a(e,t)}catch(n){if((n.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw n}}},119:(e,t,n)=>{"use strict";n.r(t)},205:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(6540);const o=n(8193).A.canUseDOM?r.useLayoutEffect:r.useEffect},253:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=function e(t){if(t.cause)return[t,...e(t.cause)];return[t]}},311:e=>{"use strict";e.exports=function(e,t,n,r,o,a,i,l){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,o,a,i,l],u=0;(s=new Error(t.replace(/%s/g,function(){return c[u++]}))).name="Invariant Violation"}throw s.framesToPop=1,s}}},418:(e,t,n)=>{"use strict";n.d(t,{A:()=>r});const r=()=>null},440:(e,t,n)=>{"use strict";t.rA=t.Ks=void 0;const r=n(1635);var o=n(2983);Object.defineProperty(t,"Ks",{enumerable:!0,get:function(){return r.__importDefault(o).default}});var a=n(2566);var i=n(253);Object.defineProperty(t,"rA",{enumerable:!0,get:function(){return i.getErrorCausalChain}})},545:(e,t,n)=>{"use strict";n.d(t,{mg:()=>J,vd:()=>G});var r=n(6540),o=n(5556),a=n.n(o),i=n(115),l=n.n(i),s=n(311),c=n.n(s),u=n(2833),d=n.n(u);function p(){return p=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},p.apply(this,arguments)}function f(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,m(e,t)}function m(e,t){return m=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},m(e,t)}function g(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t.indexOf(n=a[r])>=0||(o[n]=e[n]);return o}var h={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},b={rel:["amphtml","canonical","alternate"]},y={type:["application/ld+json"]},v={charset:"",name:["robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]},w=Object.keys(h).map(function(e){return h[e]}),k={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},x=Object.keys(k).reduce(function(e,t){return e[k[t]]=t,e},{}),S=function(e,t){for(var n=e.length-1;n>=0;n-=1){var r=e[n];if(Object.prototype.hasOwnProperty.call(r,t))return r[t]}return null},E=function(e){var t=S(e,h.TITLE),n=S(e,"titleTemplate");if(Array.isArray(t)&&(t=t.join("")),n&&t)return n.replace(/%s/g,function(){return t});var r=S(e,"defaultTitle");return t||r||void 0},_=function(e){return S(e,"onChangeClientState")||function(){}},C=function(e,t){return t.filter(function(t){return void 0!==t[e]}).map(function(t){return t[e]}).reduce(function(e,t){return p({},e,t)},{})},A=function(e,t){return t.filter(function(e){return void 0!==e[h.BASE]}).map(function(e){return e[h.BASE]}).reverse().reduce(function(t,n){if(!t.length)for(var r=Object.keys(n),o=0;o<r.length;o+=1){var a=r[o].toLowerCase();if(-1!==e.indexOf(a)&&n[a])return t.concat(n)}return t},[])},T=function(e,t,n){var r={};return n.filter(function(t){return!!Array.isArray(t[e])||(void 0!==t[e]&&console&&"function"==typeof console.warn&&console.warn("Helmet: "+e+' should be of type "Array". Instead found type "'+typeof t[e]+'"'),!1)}).map(function(t){return t[e]}).reverse().reduce(function(e,n){var o={};n.filter(function(e){for(var n,a=Object.keys(e),i=0;i<a.length;i+=1){var l=a[i],s=l.toLowerCase();-1===t.indexOf(s)||"rel"===n&&"canonical"===e[n].toLowerCase()||"rel"===s&&"stylesheet"===e[s].toLowerCase()||(n=s),-1===t.indexOf(l)||"innerHTML"!==l&&"cssText"!==l&&"itemprop"!==l||(n=l)}if(!n||!e[n])return!1;var c=e[n].toLowerCase();return r[n]||(r[n]={}),o[n]||(o[n]={}),!r[n][c]&&(o[n][c]=!0,!0)}).reverse().forEach(function(t){return e.push(t)});for(var a=Object.keys(o),i=0;i<a.length;i+=1){var l=a[i],s=p({},r[l],o[l]);r[l]=s}return e},[]).reverse()},j=function(e,t){if(Array.isArray(e)&&e.length)for(var n=0;n<e.length;n+=1)if(e[n][t])return!0;return!1},P=function(e){return Array.isArray(e)?e.join(""):e},N=function(e,t){return Array.isArray(e)?e.reduce(function(e,n){return function(e,t){for(var n=Object.keys(e),r=0;r<n.length;r+=1)if(t[n[r]]&&t[n[r]].includes(e[n[r]]))return!0;return!1}(n,t)?e.priority.push(n):e.default.push(n),e},{priority:[],default:[]}):{default:e}},L=function(e,t){var n;return p({},e,((n={})[t]=void 0,n))},O=[h.NOSCRIPT,h.SCRIPT,h.STYLE],R=function(e,t){return void 0===t&&(t=!0),!1===t?String(e):String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")},D=function(e){return Object.keys(e).reduce(function(t,n){var r=void 0!==e[n]?n+'="'+e[n]+'"':""+n;return t?t+" "+r:r},"")},F=function(e,t){return void 0===t&&(t={}),Object.keys(e).reduce(function(t,n){return t[k[n]||n]=e[n],t},t)},I=function(e,t){return t.map(function(t,n){var o,a=((o={key:n})["data-rh"]=!0,o);return Object.keys(t).forEach(function(e){var n=k[e]||e;"innerHTML"===n||"cssText"===n?a.dangerouslySetInnerHTML={__html:t.innerHTML||t.cssText}:a[n]=t[e]}),r.createElement(e,a)})},M=function(e,t,n){switch(e){case h.TITLE:return{toComponent:function(){return n=t.titleAttributes,(o={key:e=t.title})["data-rh"]=!0,a=F(n,o),[r.createElement(h.TITLE,a,e)];var e,n,o,a},toString:function(){return function(e,t,n,r){var o=D(n),a=P(t);return o?"<"+e+' data-rh="true" '+o+">"+R(a,r)+"</"+e+">":"<"+e+' data-rh="true">'+R(a,r)+"</"+e+">"}(e,t.title,t.titleAttributes,n)}};case"bodyAttributes":case"htmlAttributes":return{toComponent:function(){return F(t)},toString:function(){return D(t)}};default:return{toComponent:function(){return I(e,t)},toString:function(){return function(e,t,n){return t.reduce(function(t,r){var o=Object.keys(r).filter(function(e){return!("innerHTML"===e||"cssText"===e)}).reduce(function(e,t){var o=void 0===r[t]?t:t+'="'+R(r[t],n)+'"';return e?e+" "+o:o},""),a=r.innerHTML||r.cssText||"",i=-1===O.indexOf(e);return t+"<"+e+' data-rh="true" '+o+(i?"/>":">"+a+"</"+e+">")},"")}(e,t,n)}}}},z=function(e){var t=e.baseTag,n=e.bodyAttributes,r=e.encode,o=e.htmlAttributes,a=e.noscriptTags,i=e.styleTags,l=e.title,s=void 0===l?"":l,c=e.titleAttributes,u=e.linkTags,d=e.metaTags,p=e.scriptTags,f={toComponent:function(){},toString:function(){return""}};if(e.prioritizeSeoTags){var m=function(e){var t=e.linkTags,n=e.scriptTags,r=e.encode,o=N(e.metaTags,v),a=N(t,b),i=N(n,y);return{priorityMethods:{toComponent:function(){return[].concat(I(h.META,o.priority),I(h.LINK,a.priority),I(h.SCRIPT,i.priority))},toString:function(){return M(h.META,o.priority,r)+" "+M(h.LINK,a.priority,r)+" "+M(h.SCRIPT,i.priority,r)}},metaTags:o.default,linkTags:a.default,scriptTags:i.default}}(e);f=m.priorityMethods,u=m.linkTags,d=m.metaTags,p=m.scriptTags}return{priority:f,base:M(h.BASE,t,r),bodyAttributes:M("bodyAttributes",n,r),htmlAttributes:M("htmlAttributes",o,r),link:M(h.LINK,u,r),meta:M(h.META,d,r),noscript:M(h.NOSCRIPT,a,r),script:M(h.SCRIPT,p,r),style:M(h.STYLE,i,r),title:M(h.TITLE,{title:s,titleAttributes:c},r)}},B=[],$=function(e,t){var n=this;void 0===t&&(t="undefined"!=typeof document),this.instances=[],this.value={setHelmet:function(e){n.context.helmet=e},helmetInstances:{get:function(){return n.canUseDOM?B:n.instances},add:function(e){(n.canUseDOM?B:n.instances).push(e)},remove:function(e){var t=(n.canUseDOM?B:n.instances).indexOf(e);(n.canUseDOM?B:n.instances).splice(t,1)}}},this.context=e,this.canUseDOM=t,t||(e.helmet=z({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))},U=r.createContext({}),q=a().shape({setHelmet:a().func,helmetInstances:a().shape({get:a().func,add:a().func,remove:a().func})}),H="undefined"!=typeof document,G=function(e){function t(n){var r;return(r=e.call(this,n)||this).helmetData=new $(r.props.context,t.canUseDOM),r}return f(t,e),t.prototype.render=function(){return r.createElement(U.Provider,{value:this.helmetData.value},this.props.children)},t}(r.Component);G.canUseDOM=H,G.propTypes={context:a().shape({helmet:a().shape()}),children:a().node.isRequired},G.defaultProps={context:{}},G.displayName="HelmetProvider";var V=function(e,t){var n,r=document.head||document.querySelector(h.HEAD),o=r.querySelectorAll(e+"[data-rh]"),a=[].slice.call(o),i=[];return t&&t.length&&t.forEach(function(t){var r=document.createElement(e);for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&("innerHTML"===o?r.innerHTML=t.innerHTML:"cssText"===o?r.styleSheet?r.styleSheet.cssText=t.cssText:r.appendChild(document.createTextNode(t.cssText)):r.setAttribute(o,void 0===t[o]?"":t[o]));r.setAttribute("data-rh","true"),a.some(function(e,t){return n=t,r.isEqualNode(e)})?a.splice(n,1):i.push(r)}),a.forEach(function(e){return e.parentNode.removeChild(e)}),i.forEach(function(e){return r.appendChild(e)}),{oldTags:a,newTags:i}},W=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var r=n.getAttribute("data-rh"),o=r?r.split(","):[],a=[].concat(o),i=Object.keys(t),l=0;l<i.length;l+=1){var s=i[l],c=t[s]||"";n.getAttribute(s)!==c&&n.setAttribute(s,c),-1===o.indexOf(s)&&o.push(s);var u=a.indexOf(s);-1!==u&&a.splice(u,1)}for(var d=a.length-1;d>=0;d-=1)n.removeAttribute(a[d]);o.length===a.length?n.removeAttribute("data-rh"):n.getAttribute("data-rh")!==i.join(",")&&n.setAttribute("data-rh",i.join(","))}},Q=function(e,t){var n=e.baseTag,r=e.htmlAttributes,o=e.linkTags,a=e.metaTags,i=e.noscriptTags,l=e.onChangeClientState,s=e.scriptTags,c=e.styleTags,u=e.title,d=e.titleAttributes;W(h.BODY,e.bodyAttributes),W(h.HTML,r),function(e,t){void 0!==e&&document.title!==e&&(document.title=P(e)),W(h.TITLE,t)}(u,d);var p={baseTag:V(h.BASE,n),linkTags:V(h.LINK,o),metaTags:V(h.META,a),noscriptTags:V(h.NOSCRIPT,i),scriptTags:V(h.SCRIPT,s),styleTags:V(h.STYLE,c)},f={},m={};Object.keys(p).forEach(function(e){var t=p[e],n=t.newTags,r=t.oldTags;n.length&&(f[e]=n),r.length&&(m[e]=p[e].oldTags)}),t&&t(),l(e,f,m)},K=null,Y=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).rendered=!1,t}f(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!d()(e,this.props)},n.componentDidUpdate=function(){this.emitChange()},n.componentWillUnmount=function(){this.props.context.helmetInstances.remove(this),this.emitChange()},n.emitChange=function(){var e,t,n=this.props.context,r=n.setHelmet,o=null,a=(e=n.helmetInstances.get().map(function(e){var t=p({},e.props);return delete t.context,t}),{baseTag:A(["href"],e),bodyAttributes:C("bodyAttributes",e),defer:S(e,"defer"),encode:S(e,"encodeSpecialCharacters"),htmlAttributes:C("htmlAttributes",e),linkTags:T(h.LINK,["rel","href"],e),metaTags:T(h.META,["name","charset","http-equiv","property","itemprop"],e),noscriptTags:T(h.NOSCRIPT,["innerHTML"],e),onChangeClientState:_(e),scriptTags:T(h.SCRIPT,["src","innerHTML"],e),styleTags:T(h.STYLE,["cssText"],e),title:E(e),titleAttributes:C("titleAttributes",e),prioritizeSeoTags:j(e,"prioritizeSeoTags")});G.canUseDOM?(t=a,K&&cancelAnimationFrame(K),t.defer?K=requestAnimationFrame(function(){Q(t,function(){K=null})}):(Q(t),K=null)):z&&(o=z(a)),r(o)},n.init=function(){this.rendered||(this.rendered=!0,this.props.context.helmetInstances.add(this),this.emitChange())},n.render=function(){return this.init(),null},t}(r.Component);Y.propTypes={context:q.isRequired},Y.displayName="HelmetDispatcher";var X=["children"],Z=["children"],J=function(e){function t(){return e.apply(this,arguments)||this}f(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!l()(L(this.props,"helmetData"),L(e,"helmetData"))},n.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case h.SCRIPT:case h.NOSCRIPT:return{innerHTML:t};case h.STYLE:return{cssText:t};default:throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")}},n.flattenArrayTypeChildren=function(e){var t,n=e.child,r=e.arrayTypeChildren;return p({},r,((t={})[n.type]=[].concat(r[n.type]||[],[p({},e.newChildProps,this.mapNestedChildrenToProps(n,e.nestedChildren))]),t))},n.mapObjectTypeChildren=function(e){var t,n,r=e.child,o=e.newProps,a=e.newChildProps,i=e.nestedChildren;switch(r.type){case h.TITLE:return p({},o,((t={})[r.type]=i,t.titleAttributes=p({},a),t));case h.BODY:return p({},o,{bodyAttributes:p({},a)});case h.HTML:return p({},o,{htmlAttributes:p({},a)});default:return p({},o,((n={})[r.type]=p({},a),n))}},n.mapArrayTypeChildrenToProps=function(e,t){var n=p({},t);return Object.keys(e).forEach(function(t){var r;n=p({},n,((r={})[t]=e[t],r))}),n},n.warnOnInvalidChildren=function(e,t){return c()(w.some(function(t){return e.type===t}),"function"==typeof e.type?"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.":"Only elements types "+w.join(", ")+" are allowed. Helmet does not support rendering <"+e.type+"> elements. Refer to our API for more information."),c()(!t||"string"==typeof t||Array.isArray(t)&&!t.some(function(e){return"string"!=typeof e}),"Helmet expects a string as a child of <"+e.type+">. Did you forget to wrap your children in braces? ( <"+e.type+">{``}</"+e.type+"> ) Refer to our API for more information."),!0},n.mapChildrenToProps=function(e,t){var n=this,o={};return r.Children.forEach(e,function(e){if(e&&e.props){var r=e.props,a=r.children,i=g(r,X),l=Object.keys(i).reduce(function(e,t){return e[x[t]||t]=i[t],e},{}),s=e.type;switch("symbol"==typeof s?s=s.toString():n.warnOnInvalidChildren(e,a),s){case h.FRAGMENT:t=n.mapChildrenToProps(a,t);break;case h.LINK:case h.META:case h.NOSCRIPT:case h.SCRIPT:case h.STYLE:o=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:o,newChildProps:l,nestedChildren:a});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:l,nestedChildren:a})}}}),this.mapArrayTypeChildrenToProps(o,t)},n.render=function(){var e=this.props,t=e.children,n=g(e,Z),o=p({},n),a=n.helmetData;return t&&(o=this.mapChildrenToProps(t,o)),!a||a instanceof $||(a=new $(a.context,a.instances)),a?r.createElement(Y,p({},o,{context:a.value,helmetData:void 0})):r.createElement(U.Consumer,null,function(e){return r.createElement(Y,p({},o,{context:e}))})},t}(r.Component);J.propTypes={base:a().object,bodyAttributes:a().object,children:a().oneOfType([a().arrayOf(a().node),a().node]),defaultTitle:a().string,defer:a().bool,encodeSpecialCharacters:a().bool,htmlAttributes:a().object,link:a().arrayOf(a().object),meta:a().arrayOf(a().object),noscript:a().arrayOf(a().object),onChangeClientState:a().func,script:a().arrayOf(a().object),style:a().arrayOf(a().object),title:a().string,titleAttributes:a().object,titleTemplate:a().string,prioritizeSeoTags:a().bool,helmetData:a().object},J.defaultProps={defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1},J.displayName="Helmet"},609:(e,t,n)=>{"use strict";n.d(t,{V:()=>s,t:()=>c});var r=n(6540),o=n(9532),a=n(4848);const i=Symbol("EmptyContext"),l=r.createContext(i);function s({children:e,name:t,items:n}){const o=(0,r.useMemo)(()=>t&&n?{name:t,items:n}:null,[t,n]);return(0,a.jsx)(l.Provider,{value:o,children:e})}function c(){const e=(0,r.useContext)(l);if(e===i)throw new o.dV("DocsSidebarProvider");return e}},679:(e,t,n)=>{"use strict";n.d(t,{Wf:()=>c});n(6540);const r=JSON.parse('{"N":"localStorage","M":""}'),o=r.N;function a({key:e,oldValue:t,newValue:n,storage:r}){if(t===n)return;const o=document.createEvent("StorageEvent");o.initStorageEvent("storage",!1,!1,e,t,n,window.location.href,r),window.dispatchEvent(o)}function i(e=o){if("undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,l||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),l=!0),null}var t}let l=!1;const s={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function c(e,t){const n=`${e}${r.M}`;if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(n);const o=i(t?.persistence);return null===o?s:{get:()=>{try{return o.getItem(n)}catch(e){return console.error(`Docusaurus storage error, can't get key=${n}`,e),null}},set:e=>{try{const t=o.getItem(n);o.setItem(n,e),a({key:n,oldValue:t,newValue:e,storage:o})}catch(t){console.error(`Docusaurus storage error, can't set ${n}=${e}`,t)}},del:()=>{try{const e=o.getItem(n);o.removeItem(n),a({key:n,oldValue:e,newValue:null,storage:o})}catch(e){console.error(`Docusaurus storage error, can't delete key=${n}`,e)}},listen:e=>{try{const t=t=>{t.storageArea===o&&t.key===n&&e(t)};return window.addEventListener("storage",t),()=>window.removeEventListener("storage",t)}catch(t){return console.error(`Docusaurus storage error, can't listen for changes of key=${n}`,t),()=>{}}}}}},961:(e,t,n)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(6221)},1043:(e,t,n)=>{"use strict";n.r(t)},1107:(e,t,n)=>{"use strict";n.d(t,{A:()=>u});n(6540);var r=n(4164),o=n(1312),a=n(6342),i=n(8774),l=n(3427);const s={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};var c=n(4848);function u({as:e,id:t,...n}){const u=(0,l.A)(),{navbar:{hideOnScroll:d}}=(0,a.p)();if("h1"===e||!t)return(0,c.jsx)(e,{...n,id:void 0});u.collectAnchor(t);const p=(0,o.T)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof n.children?n.children:t});return(0,c.jsxs)(e,{...n,className:(0,r.A)("anchor",d?s.anchorWithHideOnScrollNavbar:s.anchorWithStickyNavbar,n.className),id:t,children:[n.children,(0,c.jsx)(i.A,{className:"hash-link",to:`#${t}`,"aria-label":p,title:p,children:"\u200b"})]})}},1122:(e,t,n)=>{"use strict";n.d(t,{A:()=>u});var r=n(6540),o=n(4164),a=n(2303),i=n(5293);const l={themedComponent:"themedComponent_mlkZ","themedComponent--light":"themedComponent--light_NVdE","themedComponent--dark":"themedComponent--dark_xIcU"};var s=n(4848);function c({className:e,children:t}){const n=(0,a.A)(),{colorMode:c}=(0,i.G)();return(0,s.jsx)(s.Fragment,{children:(n?"dark"===c?["dark"]:["light"]:["light","dark"]).map(n=>{const a=t({theme:n,className:(0,o.A)(e,l.themedComponent,l[`themedComponent--${n}`])});return(0,s.jsx)(r.Fragment,{children:a},n)})})}function u(e){const{sources:t,className:n,alt:r,...o}=e;return(0,s.jsx)(c,{className:n,children:({theme:e,className:n})=>(0,s.jsx)("img",{src:t[e],alt:r,className:n,...o})})}},1247:(e,t,n)=>{"use strict";var r=n(9982),o=n(6540),a=n(961);function i(e){var t="https://react.dev/errors/"+e;if(1<arguments.length){t+="?args[]="+encodeURIComponent(arguments[1]);for(var n=2;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n])}return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function l(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType)}function s(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{!!(4098&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function c(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function u(e){if(s(e)!==e)throw Error(i(188))}function d(e){var t=e.tag;if(5===t||26===t||27===t||6===t)return e;for(e=e.child;null!==e;){if(null!==(t=d(e)))return t;e=e.sibling}return null}var p=Object.assign,f=Symbol.for("react.element"),m=Symbol.for("react.transitional.element"),g=Symbol.for("react.portal"),h=Symbol.for("react.fragment"),b=Symbol.for("react.strict_mode"),y=Symbol.for("react.profiler"),v=Symbol.for("react.provider"),w=Symbol.for("react.consumer"),k=Symbol.for("react.context"),x=Symbol.for("react.forward_ref"),S=Symbol.for("react.suspense"),E=Symbol.for("react.suspense_list"),_=Symbol.for("react.memo"),C=Symbol.for("react.lazy");Symbol.for("react.scope");var A=Symbol.for("react.activity");Symbol.for("react.legacy_hidden"),Symbol.for("react.tracing_marker");var T=Symbol.for("react.memo_cache_sentinel");Symbol.for("react.view_transition");var j=Symbol.iterator;function P(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=j&&e[j]||e["@@iterator"])?e:null}var N=Symbol.for("react.client.reference");function L(e){if(null==e)return null;if("function"==typeof e)return e.$$typeof===N?null:e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case h:return"Fragment";case y:return"Profiler";case b:return"StrictMode";case S:return"Suspense";case E:return"SuspenseList";case A:return"Activity"}if("object"==typeof e)switch(e.$$typeof){case g:return"Portal";case k:return(e.displayName||"Context")+".Provider";case w:return(e._context.displayName||"Context")+".Consumer";case x:var t=e.render;return(e=e.displayName)||(e=""!==(e=t.displayName||t.name||"")?"ForwardRef("+e+")":"ForwardRef"),e;case _:return null!==(t=e.displayName||null)?t:L(e.type)||"Memo";case C:t=e._payload,e=e._init;try{return L(e(t))}catch(n){}}return null}var O=Array.isArray,R=o.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,D=a.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,F={pending:!1,data:null,method:null,action:null},I=[],M=-1;function z(e){return{current:e}}function B(e){0>M||(e.current=I[M],I[M]=null,M--)}function $(e,t){M++,I[M]=e.current,e.current=t}var U=z(null),q=z(null),H=z(null),G=z(null);function V(e,t){switch($(H,t),$(q,e),$(U,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?od(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)e=ad(t=od(t),e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}B(U),$(U,e)}function W(){B(U),B(q),B(H)}function Q(e){null!==e.memoizedState&&$(G,e);var t=U.current,n=ad(t,e.type);t!==n&&($(q,e),$(U,n))}function K(e){q.current===e&&(B(U),B(q)),G.current===e&&(B(G),Qd._currentValue=F)}var Y=Object.prototype.hasOwnProperty,X=r.unstable_scheduleCallback,Z=r.unstable_cancelCallback,J=r.unstable_shouldYield,ee=r.unstable_requestPaint,te=r.unstable_now,ne=r.unstable_getCurrentPriorityLevel,re=r.unstable_ImmediatePriority,oe=r.unstable_UserBlockingPriority,ae=r.unstable_NormalPriority,ie=r.unstable_LowPriority,le=r.unstable_IdlePriority,se=r.log,ce=r.unstable_setDisableYieldValue,ue=null,de=null;function pe(e){if("function"==typeof se&&ce(e),de&&"function"==typeof de.setStrictMode)try{de.setStrictMode(ue,e)}catch(t){}}var fe=Math.clz32?Math.clz32:function(e){return 0===(e>>>=0)?32:31-(me(e)/ge|0)|0},me=Math.log,ge=Math.LN2;var he=256,be=4194304;function ye(e){var t=42&e;if(0!==t)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return 4194048&e;case 4194304:case 8388608:case 16777216:case 33554432:return 62914560&e;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function ve(e,t,n){var r=e.pendingLanes;if(0===r)return 0;var o=0,a=e.suspendedLanes,i=e.pingedLanes;e=e.warmLanes;var l=134217727&r;return 0!==l?0!==(r=l&~a)?o=ye(r):0!==(i&=l)?o=ye(i):n||0!==(n=l&~e)&&(o=ye(n)):0!==(l=r&~a)?o=ye(l):0!==i?o=ye(i):n||0!==(n=r&~e)&&(o=ye(n)),0===o?0:0!==t&&t!==o&&0===(t&a)&&((a=o&-o)>=(n=t&-t)||32===a&&4194048&n)?t:o}function we(e,t){return 0===(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)}function ke(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;default:return-1}}function xe(){var e=he;return!(4194048&(he<<=1))&&(he=256),e}function Se(){var e=be;return!(62914560&(be<<=1))&&(be=4194304),e}function Ee(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function _e(e,t){e.pendingLanes|=t,268435456!==t&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function Ce(e,t,n){e.pendingLanes|=t,e.suspendedLanes&=~t;var r=31-fe(t);e.entangledLanes|=t,e.entanglements[r]=1073741824|e.entanglements[r]|4194090&n}function Ae(e,t){var n=e.entangledLanes|=t;for(e=e.entanglements;n;){var r=31-fe(n),o=1<<r;o&t|e[r]&t&&(e[r]|=t),n&=~o}}function Te(e){switch(e){case 2:e=1;break;case 8:e=4;break;case 32:e=16;break;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:e=128;break;case 268435456:e=134217728;break;default:e=0}return e}function je(e){return 2<(e&=-e)?8<e?134217727&e?32:268435456:8:2}function Pe(){var e=D.p;return 0!==e?e:void 0===(e=window.event)?32:cp(e.type)}var Ne=Math.random().toString(36).slice(2),Le="__reactFiber$"+Ne,Oe="__reactProps$"+Ne,Re="__reactContainer$"+Ne,De="__reactEvents$"+Ne,Fe="__reactListeners$"+Ne,Ie="__reactHandles$"+Ne,Me="__reactResources$"+Ne,ze="__reactMarker$"+Ne;function Be(e){delete e[Le],delete e[Oe],delete e[De],delete e[Fe],delete e[Ie]}function $e(e){var t=e[Le];if(t)return t;for(var n=e.parentNode;n;){if(t=n[Re]||n[Le]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=vd(e);null!==e;){if(n=e[Le])return n;e=vd(e)}return t}n=(e=n).parentNode}return null}function Ue(e){if(e=e[Le]||e[Re]){var t=e.tag;if(5===t||6===t||13===t||26===t||27===t||3===t)return e}return null}function qe(e){var t=e.tag;if(5===t||26===t||27===t||6===t)return e.stateNode;throw Error(i(33))}function He(e){var t=e[Me];return t||(t=e[Me]={hoistableStyles:new Map,hoistableScripts:new Map}),t}function Ge(e){e[ze]=!0}var Ve=new Set,We={};function Qe(e,t){Ke(e,t),Ke(e+"Capture",t)}function Ke(e,t){for(We[e]=t,e=0;e<t.length;e++)Ve.add(t[e])}var Ye,Xe,Ze=RegExp("^[: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][: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]*$"),Je={},et={};function tt(e,t,n){if(o=t,Y.call(et,o)||!Y.call(Je,o)&&(Ze.test(o)?et[o]=!0:(Je[o]=!0,0)))if(null===n)e.removeAttribute(t);else{switch(typeof n){case"undefined":case"function":case"symbol":return void e.removeAttribute(t);case"boolean":var r=t.toLowerCase().slice(0,5);if("data-"!==r&&"aria-"!==r)return void e.removeAttribute(t)}e.setAttribute(t,""+n)}var o}function nt(e,t,n){if(null===n)e.removeAttribute(t);else{switch(typeof n){case"undefined":case"function":case"symbol":case"boolean":return void e.removeAttribute(t)}e.setAttribute(t,""+n)}}function rt(e,t,n,r){if(null===r)e.removeAttribute(n);else{switch(typeof r){case"undefined":case"function":case"symbol":case"boolean":return void e.removeAttribute(n)}e.setAttributeNS(t,n,""+r)}}function ot(e){if(void 0===Ye)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);Ye=t&&t[1]||"",Xe=-1<n.stack.indexOf("\n at")?" (<anonymous>)":-1<n.stack.indexOf("@")?"@unknown:0:0":""}return"\n"+Ye+e+Xe}var at=!1;function it(e,t){if(!e||at)return"";at=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{var r={DetermineComponentFrameRoot:function(){try{if(t){var n=function(){throw Error()};if(Object.defineProperty(n.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(n,[])}catch(o){var r=o}Reflect.construct(e,[],n)}else{try{n.call()}catch(a){r=a}e.call(n.prototype)}}else{try{throw Error()}catch(i){r=i}(n=e())&&"function"==typeof n.catch&&n.catch(function(){})}}catch(l){if(l&&r&&"string"==typeof l.stack)return[l.stack,r.stack]}return[null,null]}};r.DetermineComponentFrameRoot.displayName="DetermineComponentFrameRoot";var o=Object.getOwnPropertyDescriptor(r.DetermineComponentFrameRoot,"name");o&&o.configurable&&Object.defineProperty(r.DetermineComponentFrameRoot,"name",{value:"DetermineComponentFrameRoot"});var a=r.DetermineComponentFrameRoot(),i=a[0],l=a[1];if(i&&l){var s=i.split("\n"),c=l.split("\n");for(o=r=0;r<s.length&&!s[r].includes("DetermineComponentFrameRoot");)r++;for(;o<c.length&&!c[o].includes("DetermineComponentFrameRoot");)o++;if(r===s.length||o===c.length)for(r=s.length-1,o=c.length-1;1<=r&&0<=o&&s[r]!==c[o];)o--;for(;1<=r&&0<=o;r--,o--)if(s[r]!==c[o]){if(1!==r||1!==o)do{if(r--,0>--o||s[r]!==c[o]){var u="\n"+s[r].replace(" at new "," at ");return e.displayName&&u.includes("<anonymous>")&&(u=u.replace("<anonymous>",e.displayName)),u}}while(1<=r&&0<=o);break}}}finally{at=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:"")?ot(n):""}function lt(e){switch(e.tag){case 26:case 27:case 5:return ot(e.type);case 16:return ot("Lazy");case 13:return ot("Suspense");case 19:return ot("SuspenseList");case 0:case 15:return it(e.type,!1);case 11:return it(e.type.render,!1);case 1:return it(e.type,!0);case 31:return ot("Activity");default:return""}}function st(e){try{var t="";do{t+=lt(e),e=e.return}while(e);return t}catch(n){return"\nError generating stack: "+n.message+"\n"+n.stack}}function ct(e){switch(typeof e){case"bigint":case"boolean":case"number":case"string":case"undefined":case"object":return e;default:return""}}function ut(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function dt(e){e._valueTracker||(e._valueTracker=function(e){var t=ut(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var o=n.get,a=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){r=""+e,a.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function pt(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=ut(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function ft(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}var mt=/[\n"\\]/g;function gt(e){return e.replace(mt,function(e){return"\\"+e.charCodeAt(0).toString(16)+" "})}function ht(e,t,n,r,o,a,i,l){e.name="",null!=i&&"function"!=typeof i&&"symbol"!=typeof i&&"boolean"!=typeof i?e.type=i:e.removeAttribute("type"),null!=t?"number"===i?(0===t&&""===e.value||e.value!=t)&&(e.value=""+ct(t)):e.value!==""+ct(t)&&(e.value=""+ct(t)):"submit"!==i&&"reset"!==i||e.removeAttribute("value"),null!=t?yt(e,i,ct(t)):null!=n?yt(e,i,ct(n)):null!=r&&e.removeAttribute("value"),null==o&&null!=a&&(e.defaultChecked=!!a),null!=o&&(e.checked=o&&"function"!=typeof o&&"symbol"!=typeof o),null!=l&&"function"!=typeof l&&"symbol"!=typeof l&&"boolean"!=typeof l?e.name=""+ct(l):e.removeAttribute("name")}function bt(e,t,n,r,o,a,i,l){if(null!=a&&"function"!=typeof a&&"symbol"!=typeof a&&"boolean"!=typeof a&&(e.type=a),null!=t||null!=n){if(("submit"===a||"reset"===a)&&null==t)return;n=null!=n?""+ct(n):"",t=null!=t?""+ct(t):n,l||t===e.value||(e.value=t),e.defaultValue=t}r="function"!=typeof(r=null!=r?r:o)&&"symbol"!=typeof r&&!!r,e.checked=l?e.checked:!!r,e.defaultChecked=!!r,null!=i&&"function"!=typeof i&&"symbol"!=typeof i&&"boolean"!=typeof i&&(e.name=i)}function yt(e,t,n){"number"===t&&ft(e.ownerDocument)===e||e.defaultValue===""+n||(e.defaultValue=""+n)}function vt(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o<n.length;o++)t["$"+n[o]]=!0;for(n=0;n<e.length;n++)o=t.hasOwnProperty("$"+e[n].value),e[n].selected!==o&&(e[n].selected=o),o&&r&&(e[n].defaultSelected=!0)}else{for(n=""+ct(n),t=null,o=0;o<e.length;o++){if(e[o].value===n)return e[o].selected=!0,void(r&&(e[o].defaultSelected=!0));null!==t||e[o].disabled||(t=e[o])}null!==t&&(t.selected=!0)}}function wt(e,t,n){null==t||((t=""+ct(t))!==e.value&&(e.value=t),null!=n)?e.defaultValue=null!=n?""+ct(n):"":e.defaultValue!==t&&(e.defaultValue=t)}function kt(e,t,n,r){if(null==t){if(null!=r){if(null!=n)throw Error(i(92));if(O(r)){if(1<r.length)throw Error(i(93));r=r[0]}n=r}null==n&&(n=""),t=n}n=ct(t),e.defaultValue=n,(r=e.textContent)===n&&""!==r&&null!==r&&(e.value=r)}function xt(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var St=new Set("animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp".split(" "));function Et(e,t,n){var r=0===t.indexOf("--");null==n||"boolean"==typeof n||""===n?r?e.setProperty(t,""):"float"===t?e.cssFloat="":e[t]="":r?e.setProperty(t,n):"number"!=typeof n||0===n||St.has(t)?"float"===t?e.cssFloat=n:e[t]=(""+n).trim():e[t]=n+"px"}function _t(e,t,n){if(null!=t&&"object"!=typeof t)throw Error(i(62));if(e=e.style,null!=n){for(var r in n)!n.hasOwnProperty(r)||null!=t&&t.hasOwnProperty(r)||(0===r.indexOf("--")?e.setProperty(r,""):"float"===r?e.cssFloat="":e[r]="");for(var o in t)r=t[o],t.hasOwnProperty(o)&&n[o]!==r&&Et(e,o,r)}else for(var a in t)t.hasOwnProperty(a)&&Et(e,a,t[a])}function Ct(e){if(-1===e.indexOf("-"))return!1;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var At=new Map([["acceptCharset","accept-charset"],["htmlFor","for"],["httpEquiv","http-equiv"],["crossOrigin","crossorigin"],["accentHeight","accent-height"],["alignmentBaseline","alignment-baseline"],["arabicForm","arabic-form"],["baselineShift","baseline-shift"],["capHeight","cap-height"],["clipPath","clip-path"],["clipRule","clip-rule"],["colorInterpolation","color-interpolation"],["colorInterpolationFilters","color-interpolation-filters"],["colorProfile","color-profile"],["colorRendering","color-rendering"],["dominantBaseline","dominant-baseline"],["enableBackground","enable-background"],["fillOpacity","fill-opacity"],["fillRule","fill-rule"],["floodColor","flood-color"],["floodOpacity","flood-opacity"],["fontFamily","font-family"],["fontSize","font-size"],["fontSizeAdjust","font-size-adjust"],["fontStretch","font-stretch"],["fontStyle","font-style"],["fontVariant","font-variant"],["fontWeight","font-weight"],["glyphName","glyph-name"],["glyphOrientationHorizontal","glyph-orientation-horizontal"],["glyphOrientationVertical","glyph-orientation-vertical"],["horizAdvX","horiz-adv-x"],["horizOriginX","horiz-origin-x"],["imageRendering","image-rendering"],["letterSpacing","letter-spacing"],["lightingColor","lighting-color"],["markerEnd","marker-end"],["markerMid","marker-mid"],["markerStart","marker-start"],["overlinePosition","overline-position"],["overlineThickness","overline-thickness"],["paintOrder","paint-order"],["panose-1","panose-1"],["pointerEvents","pointer-events"],["renderingIntent","rendering-intent"],["shapeRendering","shape-rendering"],["stopColor","stop-color"],["stopOpacity","stop-opacity"],["strikethroughPosition","strikethrough-position"],["strikethroughThickness","strikethrough-thickness"],["strokeDasharray","stroke-dasharray"],["strokeDashoffset","stroke-dashoffset"],["strokeLinecap","stroke-linecap"],["strokeLinejoin","stroke-linejoin"],["strokeMiterlimit","stroke-miterlimit"],["strokeOpacity","stroke-opacity"],["strokeWidth","stroke-width"],["textAnchor","text-anchor"],["textDecoration","text-decoration"],["textRendering","text-rendering"],["transformOrigin","transform-origin"],["underlinePosition","underline-position"],["underlineThickness","underline-thickness"],["unicodeBidi","unicode-bidi"],["unicodeRange","unicode-range"],["unitsPerEm","units-per-em"],["vAlphabetic","v-alphabetic"],["vHanging","v-hanging"],["vIdeographic","v-ideographic"],["vMathematical","v-mathematical"],["vectorEffect","vector-effect"],["vertAdvY","vert-adv-y"],["vertOriginX","vert-origin-x"],["vertOriginY","vert-origin-y"],["wordSpacing","word-spacing"],["writingMode","writing-mode"],["xmlnsXlink","xmlns:xlink"],["xHeight","x-height"]]),Tt=/^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i;function jt(e){return Tt.test(""+e)?"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')":e}var Pt=null;function Nt(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var Lt=null,Ot=null;function Rt(e){var t=Ue(e);if(t&&(e=t.stateNode)){var n=e[Oe]||null;e:switch(e=t.stateNode,t.type){case"input":if(ht(e,n.value,n.defaultValue,n.defaultValue,n.checked,n.defaultChecked,n.type,n.name),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll('input[name="'+gt(""+t)+'"][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var o=r[Oe]||null;if(!o)throw Error(i(90));ht(r,o.value,o.defaultValue,o.defaultValue,o.checked,o.defaultChecked,o.type,o.name)}}for(t=0;t<n.length;t++)(r=n[t]).form===e.form&&pt(r)}break e;case"textarea":wt(e,n.value,n.defaultValue);break e;case"select":null!=(t=n.value)&&vt(e,!!n.multiple,t,!1)}}}var Dt=!1;function Ft(e,t,n){if(Dt)return e(t,n);Dt=!0;try{return e(t)}finally{if(Dt=!1,(null!==Lt||null!==Ot)&&($c(),Lt&&(t=Lt,e=Ot,Ot=Lt=null,Rt(t),e)))for(t=0;t<e.length;t++)Rt(e[t])}}function It(e,t){var n=e.stateNode;if(null===n)return null;var r=n[Oe]||null;if(null===r)return null;n=r[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(r=!r.disabled)||(r=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!r;break e;default:e=!1}if(e)return null;if(n&&"function"!=typeof n)throw Error(i(231,t,typeof n));return n}var Mt=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),zt=!1;if(Mt)try{var Bt={};Object.defineProperty(Bt,"passive",{get:function(){zt=!0}}),window.addEventListener("test",Bt,Bt),window.removeEventListener("test",Bt,Bt)}catch(Op){zt=!1}var $t=null,Ut=null,qt=null;function Ht(){if(qt)return qt;var e,t,n=Ut,r=n.length,o="value"in $t?$t.value:$t.textContent,a=o.length;for(e=0;e<r&&n[e]===o[e];e++);var i=r-e;for(t=1;t<=i&&n[r-t]===o[a-t];t++);return qt=o.slice(e,1<t?1-t:void 0)}function Gt(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function Vt(){return!0}function Wt(){return!1}function Qt(e){function t(t,n,r,o,a){for(var i in this._reactName=t,this._targetInst=r,this.type=n,this.nativeEvent=o,this.target=a,this.currentTarget=null,e)e.hasOwnProperty(i)&&(t=e[i],this[i]=t?t(o):o[i]);return this.isDefaultPrevented=(null!=o.defaultPrevented?o.defaultPrevented:!1===o.returnValue)?Vt:Wt,this.isPropagationStopped=Wt,this}return p(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=Vt)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=Vt)},persist:function(){},isPersistent:Vt}),t}var Kt,Yt,Xt,Zt={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},Jt=Qt(Zt),en=p({},Zt,{view:0,detail:0}),tn=Qt(en),nn=p({},en,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:mn,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==Xt&&(Xt&&"mousemove"===e.type?(Kt=e.screenX-Xt.screenX,Yt=e.screenY-Xt.screenY):Yt=Kt=0,Xt=e),Kt)},movementY:function(e){return"movementY"in e?e.movementY:Yt}}),rn=Qt(nn),on=Qt(p({},nn,{dataTransfer:0})),an=Qt(p({},en,{relatedTarget:0})),ln=Qt(p({},Zt,{animationName:0,elapsedTime:0,pseudoElement:0})),sn=Qt(p({},Zt,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}})),cn=Qt(p({},Zt,{data:0})),un={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},dn={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},pn={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function fn(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=pn[e])&&!!t[e]}function mn(){return fn}var gn=Qt(p({},en,{key:function(e){if(e.key){var t=un[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=Gt(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?dn[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:mn,charCode:function(e){return"keypress"===e.type?Gt(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?Gt(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}})),hn=Qt(p({},nn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),bn=Qt(p({},en,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:mn})),yn=Qt(p({},Zt,{propertyName:0,elapsedTime:0,pseudoElement:0})),vn=Qt(p({},nn,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0})),wn=Qt(p({},Zt,{newState:0,oldState:0})),kn=[9,13,27,32],xn=Mt&&"CompositionEvent"in window,Sn=null;Mt&&"documentMode"in document&&(Sn=document.documentMode);var En=Mt&&"TextEvent"in window&&!Sn,_n=Mt&&(!xn||Sn&&8<Sn&&11>=Sn),Cn=String.fromCharCode(32),An=!1;function Tn(e,t){switch(e){case"keyup":return-1!==kn.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function jn(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var Pn=!1;var Nn={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Ln(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!Nn[e.type]:"textarea"===t}function On(e,t,n,r){Lt?Ot?Ot.push(r):Ot=[r]:Lt=r,0<(t=Hu(t,"onChange")).length&&(n=new Jt("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var Rn=null,Dn=null;function Fn(e){Fu(e,0)}function In(e){if(pt(qe(e)))return e}function Mn(e,t){if("change"===e)return t}var zn=!1;if(Mt){var Bn;if(Mt){var $n="oninput"in document;if(!$n){var Un=document.createElement("div");Un.setAttribute("oninput","return;"),$n="function"==typeof Un.oninput}Bn=$n}else Bn=!1;zn=Bn&&(!document.documentMode||9<document.documentMode)}function qn(){Rn&&(Rn.detachEvent("onpropertychange",Hn),Dn=Rn=null)}function Hn(e){if("value"===e.propertyName&&In(Dn)){var t=[];On(t,Dn,e,Nt(e)),Ft(Fn,t)}}function Gn(e,t,n){"focusin"===e?(qn(),Dn=n,(Rn=t).attachEvent("onpropertychange",Hn)):"focusout"===e&&qn()}function Vn(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return In(Dn)}function Wn(e,t){if("click"===e)return In(t)}function Qn(e,t){if("input"===e||"change"===e)return In(t)}var Kn="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t};function Yn(e,t){if(Kn(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++){var o=n[r];if(!Y.call(t,o)||!Kn(e[o],t[o]))return!1}return!0}function Xn(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function Zn(e,t){var n,r=Xn(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=Xn(r)}}function Jn(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?Jn(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function er(e){for(var t=ft((e=null!=e&&null!=e.ownerDocument&&null!=e.ownerDocument.defaultView?e.ownerDocument.defaultView:window).document);t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(r){n=!1}if(!n)break;t=ft((e=t.contentWindow).document)}return t}function tr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}var nr=Mt&&"documentMode"in document&&11>=document.documentMode,rr=null,or=null,ar=null,ir=!1;function lr(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;ir||null==rr||rr!==ft(r)||("selectionStart"in(r=rr)&&tr(r)?r={start:r.selectionStart,end:r.selectionEnd}:r={anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},ar&&Yn(ar,r)||(ar=r,0<(r=Hu(or,"onSelect")).length&&(t=new Jt("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=rr)))}function sr(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var cr={animationend:sr("Animation","AnimationEnd"),animationiteration:sr("Animation","AnimationIteration"),animationstart:sr("Animation","AnimationStart"),transitionrun:sr("Transition","TransitionRun"),transitionstart:sr("Transition","TransitionStart"),transitioncancel:sr("Transition","TransitionCancel"),transitionend:sr("Transition","TransitionEnd")},ur={},dr={};function pr(e){if(ur[e])return ur[e];if(!cr[e])return e;var t,n=cr[e];for(t in n)if(n.hasOwnProperty(t)&&t in dr)return ur[e]=n[t];return e}Mt&&(dr=document.createElement("div").style,"AnimationEvent"in window||(delete cr.animationend.animation,delete cr.animationiteration.animation,delete cr.animationstart.animation),"TransitionEvent"in window||delete cr.transitionend.transition);var fr=pr("animationend"),mr=pr("animationiteration"),gr=pr("animationstart"),hr=pr("transitionrun"),br=pr("transitionstart"),yr=pr("transitioncancel"),vr=pr("transitionend"),wr=new Map,kr="abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");function xr(e,t){wr.set(e,t),Qe(t,[e])}kr.push("scrollEnd");var Sr=new WeakMap;function Er(e,t){if("object"==typeof e&&null!==e){var n=Sr.get(e);return void 0!==n?n:(t={value:e,source:t,stack:st(t)},Sr.set(e,t),t)}return{value:e,source:t,stack:st(t)}}var _r=[],Cr=0,Ar=0;function Tr(){for(var e=Cr,t=Ar=Cr=0;t<e;){var n=_r[t];_r[t++]=null;var r=_r[t];_r[t++]=null;var o=_r[t];_r[t++]=null;var a=_r[t];if(_r[t++]=null,null!==r&&null!==o){var i=r.pending;null===i?o.next=o:(o.next=i.next,i.next=o),r.pending=o}0!==a&&Lr(n,o,a)}}function jr(e,t,n,r){_r[Cr++]=e,_r[Cr++]=t,_r[Cr++]=n,_r[Cr++]=r,Ar|=r,e.lanes|=r,null!==(e=e.alternate)&&(e.lanes|=r)}function Pr(e,t,n,r){return jr(e,t,n,r),Or(e)}function Nr(e,t){return jr(e,null,null,t),Or(e)}function Lr(e,t,n){e.lanes|=n;var r=e.alternate;null!==r&&(r.lanes|=n);for(var o=!1,a=e.return;null!==a;)a.childLanes|=n,null!==(r=a.alternate)&&(r.childLanes|=n),22===a.tag&&(null===(e=a.stateNode)||1&e._visibility||(o=!0)),e=a,a=a.return;return 3===e.tag?(a=e.stateNode,o&&null!==t&&(o=31-fe(n),null===(r=(e=a.hiddenUpdates)[o])?e[o]=[t]:r.push(t),t.lane=536870912|n),a):null}function Or(e){if(50<Lc)throw Lc=0,Oc=null,Error(i(185));for(var t=e.return;null!==t;)t=(e=t).return;return 3===e.tag?e.stateNode:null}var Rr={};function Dr(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.refCleanup=this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Fr(e,t,n,r){return new Dr(e,t,n,r)}function Ir(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Mr(e,t){var n=e.alternate;return null===n?((n=Fr(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=65011712&e.flags,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n.refCleanup=e.refCleanup,n}function zr(e,t){e.flags&=65011714;var n=e.alternate;return null===n?(e.childLanes=0,e.lanes=t,e.child=null,e.subtreeFlags=0,e.memoizedProps=null,e.memoizedState=null,e.updateQueue=null,e.dependencies=null,e.stateNode=null):(e.childLanes=n.childLanes,e.lanes=n.lanes,e.child=n.child,e.subtreeFlags=0,e.deletions=null,e.memoizedProps=n.memoizedProps,e.memoizedState=n.memoizedState,e.updateQueue=n.updateQueue,e.type=n.type,t=n.dependencies,e.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext}),e}function Br(e,t,n,r,o,a){var l=0;if(r=e,"function"==typeof e)Ir(e)&&(l=1);else if("string"==typeof e)l=function(e,t,n){if(1===n||null!=t.itemProp)return!1;switch(e){case"meta":case"title":return!0;case"style":if("string"!=typeof t.precedence||"string"!=typeof t.href||""===t.href)break;return!0;case"link":if("string"!=typeof t.rel||"string"!=typeof t.href||""===t.href||t.onLoad||t.onError)break;return"stylesheet"!==t.rel||(e=t.disabled,"string"==typeof t.precedence&&null==e);case"script":if(t.async&&"function"!=typeof t.async&&"symbol"!=typeof t.async&&!t.onLoad&&!t.onError&&t.src&&"string"==typeof t.src)return!0}return!1}(e,n,U.current)?26:"html"===e||"head"===e||"body"===e?27:5;else e:switch(e){case A:return(e=Fr(31,n,t,o)).elementType=A,e.lanes=a,e;case h:return $r(n.children,o,a,t);case b:l=8,o|=24;break;case y:return(e=Fr(12,n,t,2|o)).elementType=y,e.lanes=a,e;case S:return(e=Fr(13,n,t,o)).elementType=S,e.lanes=a,e;case E:return(e=Fr(19,n,t,o)).elementType=E,e.lanes=a,e;default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case v:case k:l=10;break e;case w:l=9;break e;case x:l=11;break e;case _:l=14;break e;case C:l=16,r=null;break e}l=29,n=Error(i(130,null===e?"null":typeof e,"")),r=null}return(t=Fr(l,n,t,o)).elementType=e,t.type=r,t.lanes=a,t}function $r(e,t,n,r){return(e=Fr(7,e,r,t)).lanes=n,e}function Ur(e,t,n){return(e=Fr(6,e,null,t)).lanes=n,e}function qr(e,t,n){return(t=Fr(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}var Hr=[],Gr=0,Vr=null,Wr=0,Qr=[],Kr=0,Yr=null,Xr=1,Zr="";function Jr(e,t){Hr[Gr++]=Wr,Hr[Gr++]=Vr,Vr=e,Wr=t}function eo(e,t,n){Qr[Kr++]=Xr,Qr[Kr++]=Zr,Qr[Kr++]=Yr,Yr=e;var r=Xr;e=Zr;var o=32-fe(r)-1;r&=~(1<<o),n+=1;var a=32-fe(t)+o;if(30<a){var i=o-o%5;a=(r&(1<<i)-1).toString(32),r>>=i,o-=i,Xr=1<<32-fe(t)+o|n<<o|r,Zr=a+e}else Xr=1<<a|n<<o|r,Zr=e}function to(e){null!==e.return&&(Jr(e,1),eo(e,1,0))}function no(e){for(;e===Vr;)Vr=Hr[--Gr],Hr[Gr]=null,Wr=Hr[--Gr],Hr[Gr]=null;for(;e===Yr;)Yr=Qr[--Kr],Qr[Kr]=null,Zr=Qr[--Kr],Qr[Kr]=null,Xr=Qr[--Kr],Qr[Kr]=null}var ro=null,oo=null,ao=!1,io=null,lo=!1,so=Error(i(519));function co(e){throw ho(Er(Error(i(418,"")),e)),so}function uo(e){var t=e.stateNode,n=e.type,r=e.memoizedProps;switch(t[Le]=e,t[Oe]=r,n){case"dialog":Iu("cancel",t),Iu("close",t);break;case"iframe":case"object":case"embed":Iu("load",t);break;case"video":case"audio":for(n=0;n<Ru.length;n++)Iu(Ru[n],t);break;case"source":Iu("error",t);break;case"img":case"image":case"link":Iu("error",t),Iu("load",t);break;case"details":Iu("toggle",t);break;case"input":Iu("invalid",t),bt(t,r.value,r.defaultValue,r.checked,r.defaultChecked,r.type,r.name,!0),dt(t);break;case"select":Iu("invalid",t);break;case"textarea":Iu("invalid",t),kt(t,r.value,r.defaultValue,r.children),dt(t)}"string"!=typeof(n=r.children)&&"number"!=typeof n&&"bigint"!=typeof n||t.textContent===""+n||!0===r.suppressHydrationWarning||Yu(t.textContent,n)?(null!=r.popover&&(Iu("beforetoggle",t),Iu("toggle",t)),null!=r.onScroll&&Iu("scroll",t),null!=r.onScrollEnd&&Iu("scrollend",t),null!=r.onClick&&(t.onclick=Xu),t=!0):t=!1,t||co(e)}function po(e){for(ro=e.return;ro;)switch(ro.tag){case 5:case 13:return void(lo=!1);case 27:case 3:return void(lo=!0);default:ro=ro.return}}function fo(e){if(e!==ro)return!1;if(!ao)return po(e),ao=!0,!1;var t,n=e.tag;if((t=3!==n&&27!==n)&&((t=5===n)&&(t=!("form"!==(t=e.type)&&"button"!==t)||id(e.type,e.memoizedProps)),t=!t),t&&oo&&co(e),po(e),13===n){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(i(317));e:{for(e=e.nextSibling,n=0;e;){if(8===e.nodeType)if("/$"===(t=e.data)){if(0===n){oo=bd(e.nextSibling);break e}n--}else"$"!==t&&"$!"!==t&&"$?"!==t||n++;e=e.nextSibling}oo=null}}else 27===n?(n=oo,fd(e.type)?(e=yd,yd=null,oo=e):oo=n):oo=ro?bd(e.stateNode.nextSibling):null;return!0}function mo(){oo=ro=null,ao=!1}function go(){var e=io;return null!==e&&(null===vc?vc=e:vc.push.apply(vc,e),io=null),e}function ho(e){null===io?io=[e]:io.push(e)}var bo=z(null),yo=null,vo=null;function wo(e,t,n){$(bo,t._currentValue),t._currentValue=n}function ko(e){e._currentValue=bo.current,B(bo)}function xo(e,t,n){for(;null!==e;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,null!==r&&(r.childLanes|=t)):null!==r&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function So(e,t,n,r){var o=e.child;for(null!==o&&(o.return=e);null!==o;){var a=o.dependencies;if(null!==a){var l=o.child;a=a.firstContext;e:for(;null!==a;){var s=a;a=o;for(var c=0;c<t.length;c++)if(s.context===t[c]){a.lanes|=n,null!==(s=a.alternate)&&(s.lanes|=n),xo(a.return,n,e),r||(l=null);break e}a=s.next}}else if(18===o.tag){if(null===(l=o.return))throw Error(i(341));l.lanes|=n,null!==(a=l.alternate)&&(a.lanes|=n),xo(l,n,e),l=null}else l=o.child;if(null!==l)l.return=o;else for(l=o;null!==l;){if(l===e){l=null;break}if(null!==(o=l.sibling)){o.return=l.return,l=o;break}l=l.return}o=l}}function Eo(e,t,n,r){e=null;for(var o=t,a=!1;null!==o;){if(!a)if(524288&o.flags)a=!0;else if(262144&o.flags)break;if(10===o.tag){var l=o.alternate;if(null===l)throw Error(i(387));if(null!==(l=l.memoizedProps)){var s=o.type;Kn(o.pendingProps.value,l.value)||(null!==e?e.push(s):e=[s])}}else if(o===G.current){if(null===(l=o.alternate))throw Error(i(387));l.memoizedState.memoizedState!==o.memoizedState.memoizedState&&(null!==e?e.push(Qd):e=[Qd])}o=o.return}null!==e&&So(t,e,n,r),t.flags|=262144}function _o(e){for(e=e.firstContext;null!==e;){if(!Kn(e.context._currentValue,e.memoizedValue))return!0;e=e.next}return!1}function Co(e){yo=e,vo=null,null!==(e=e.dependencies)&&(e.firstContext=null)}function Ao(e){return jo(yo,e)}function To(e,t){return null===yo&&Co(e),jo(e,t)}function jo(e,t){var n=t._currentValue;if(t={context:t,memoizedValue:n,next:null},null===vo){if(null===e)throw Error(i(308));vo=t,e.dependencies={lanes:0,firstContext:t},e.flags|=524288}else vo=vo.next=t;return n}var Po="undefined"!=typeof AbortController?AbortController:function(){var e=[],t=this.signal={aborted:!1,addEventListener:function(t,n){e.push(n)}};this.abort=function(){t.aborted=!0,e.forEach(function(e){return e()})}},No=r.unstable_scheduleCallback,Lo=r.unstable_NormalPriority,Oo={$$typeof:k,Consumer:null,Provider:null,_currentValue:null,_currentValue2:null,_threadCount:0};function Ro(){return{controller:new Po,data:new Map,refCount:0}}function Do(e){e.refCount--,0===e.refCount&&No(Lo,function(){e.controller.abort()})}var Fo=null,Io=0,Mo=0,zo=null;function Bo(){if(0===--Io&&null!==Fo){null!==zo&&(zo.status="fulfilled");var e=Fo;Fo=null,Mo=0,zo=null;for(var t=0;t<e.length;t++)(0,e[t])()}}var $o=R.S;R.S=function(e,t){"object"==typeof t&&null!==t&&"function"==typeof t.then&&function(e,t){if(null===Fo){var n=Fo=[];Io=0,Mo=ju(),zo={status:"pending",value:void 0,then:function(e){n.push(e)}}}Io++,t.then(Bo,Bo)}(0,t),null!==$o&&$o(e,t)};var Uo=z(null);function qo(){var e=Uo.current;return null!==e?e:rc.pooledCache}function Ho(e,t){$(Uo,null===t?Uo.current:t.pool)}function Go(){var e=qo();return null===e?null:{parent:Oo._currentValue,pool:e}}var Vo=Error(i(460)),Wo=Error(i(474)),Qo=Error(i(542)),Ko={then:function(){}};function Yo(e){return"fulfilled"===(e=e.status)||"rejected"===e}function Xo(){}function Zo(e,t,n){switch(void 0===(n=e[n])?e.push(t):n!==t&&(t.then(Xo,Xo),t=n),t.status){case"fulfilled":return t.value;case"rejected":throw ta(e=t.reason),e;default:if("string"==typeof t.status)t.then(Xo,Xo);else{if(null!==(e=rc)&&100<e.shellSuspendCounter)throw Error(i(482));(e=t).status="pending",e.then(function(e){if("pending"===t.status){var n=t;n.status="fulfilled",n.value=e}},function(e){if("pending"===t.status){var n=t;n.status="rejected",n.reason=e}})}switch(t.status){case"fulfilled":return t.value;case"rejected":throw ta(e=t.reason),e}throw Jo=t,Vo}}var Jo=null;function ea(){if(null===Jo)throw Error(i(459));var e=Jo;return Jo=null,e}function ta(e){if(e===Vo||e===Qo)throw Error(i(483))}var na=!1;function ra(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function oa(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function aa(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function ia(e,t,n){var r=e.updateQueue;if(null===r)return null;if(r=r.shared,2&nc){var o=r.pending;return null===o?t.next=t:(t.next=o.next,o.next=t),r.pending=t,t=Or(e),Lr(e,null,n),t}return jr(e,r,t,n),Or(e)}function la(e,t,n){if(null!==(t=t.updateQueue)&&(t=t.shared,4194048&n)){var r=t.lanes;n|=r&=e.pendingLanes,t.lanes=n,Ae(e,n)}}function sa(e,t){var n=e.updateQueue,r=e.alternate;if(null!==r&&n===(r=r.updateQueue)){var o=null,a=null;if(null!==(n=n.firstBaseUpdate)){do{var i={lane:n.lane,tag:n.tag,payload:n.payload,callback:null,next:null};null===a?o=a=i:a=a.next=i,n=n.next}while(null!==n);null===a?o=a=t:a=a.next=t}else o=a=t;return n={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:a,shared:r.shared,callbacks:r.callbacks},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}var ca=!1;function ua(){if(ca){if(null!==zo)throw zo}}function da(e,t,n,r){ca=!1;var o=e.updateQueue;na=!1;var a=o.firstBaseUpdate,i=o.lastBaseUpdate,l=o.shared.pending;if(null!==l){o.shared.pending=null;var s=l,c=s.next;s.next=null,null===i?a=c:i.next=c,i=s;var u=e.alternate;null!==u&&((l=(u=u.updateQueue).lastBaseUpdate)!==i&&(null===l?u.firstBaseUpdate=c:l.next=c,u.lastBaseUpdate=s))}if(null!==a){var d=o.baseState;for(i=0,u=c=s=null,l=a;;){var f=-536870913&l.lane,m=f!==l.lane;if(m?(ac&f)===f:(r&f)===f){0!==f&&f===Mo&&(ca=!0),null!==u&&(u=u.next={lane:0,tag:l.tag,payload:l.payload,callback:null,next:null});e:{var g=e,h=l;f=t;var b=n;switch(h.tag){case 1:if("function"==typeof(g=h.payload)){d=g.call(b,d,f);break e}d=g;break e;case 3:g.flags=-65537&g.flags|128;case 0:if(null==(f="function"==typeof(g=h.payload)?g.call(b,d,f):g))break e;d=p({},d,f);break e;case 2:na=!0}}null!==(f=l.callback)&&(e.flags|=64,m&&(e.flags|=8192),null===(m=o.callbacks)?o.callbacks=[f]:m.push(f))}else m={lane:f,tag:l.tag,payload:l.payload,callback:l.callback,next:null},null===u?(c=u=m,s=d):u=u.next=m,i|=f;if(null===(l=l.next)){if(null===(l=o.shared.pending))break;l=(m=l).next,m.next=null,o.lastBaseUpdate=m,o.shared.pending=null}}null===u&&(s=d),o.baseState=s,o.firstBaseUpdate=c,o.lastBaseUpdate=u,null===a&&(o.shared.lanes=0),fc|=i,e.lanes=i,e.memoizedState=d}}function pa(e,t){if("function"!=typeof e)throw Error(i(191,e));e.call(t)}function fa(e,t){var n=e.callbacks;if(null!==n)for(e.callbacks=null,e=0;e<n.length;e++)pa(n[e],t)}var ma=z(null),ga=z(0);function ha(e,t){$(ga,e=dc),$(ma,t),dc=e|t.baseLanes}function ba(){$(ga,dc),$(ma,ma.current)}function ya(){dc=ga.current,B(ma),B(ga)}var va=0,wa=null,ka=null,xa=null,Sa=!1,Ea=!1,_a=!1,Ca=0,Aa=0,Ta=null,ja=0;function Pa(){throw Error(i(321))}function Na(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!Kn(e[n],t[n]))return!1;return!0}function La(e,t,n,r,o,a){return va=a,wa=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,R.H=null===e||null===e.memoizedState?Vi:Wi,_a=!1,a=n(r,o),_a=!1,Ea&&(a=Ra(t,n,r,o)),Oa(e),a}function Oa(e){R.H=Gi;var t=null!==ka&&null!==ka.next;if(va=0,xa=ka=wa=null,Sa=!1,Aa=0,Ta=null,t)throw Error(i(300));null===e||Al||null!==(e=e.dependencies)&&_o(e)&&(Al=!0)}function Ra(e,t,n,r){wa=e;var o=0;do{if(Ea&&(Ta=null),Aa=0,Ea=!1,25<=o)throw Error(i(301));if(o+=1,xa=ka=null,null!=e.updateQueue){var a=e.updateQueue;a.lastEffect=null,a.events=null,a.stores=null,null!=a.memoCache&&(a.memoCache.index=0)}R.H=Qi,a=t(n,r)}while(Ea);return a}function Da(){var e=R.H,t=e.useState()[0];return t="function"==typeof t.then?$a(t):t,e=e.useState()[0],(null!==ka?ka.memoizedState:null)!==e&&(wa.flags|=1024),t}function Fa(){var e=0!==Ca;return Ca=0,e}function Ia(e,t,n){t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~n}function Ma(e){if(Sa){for(e=e.memoizedState;null!==e;){var t=e.queue;null!==t&&(t.pending=null),e=e.next}Sa=!1}va=0,xa=ka=wa=null,Ea=!1,Aa=Ca=0,Ta=null}function za(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===xa?wa.memoizedState=xa=e:xa=xa.next=e,xa}function Ba(){if(null===ka){var e=wa.alternate;e=null!==e?e.memoizedState:null}else e=ka.next;var t=null===xa?wa.memoizedState:xa.next;if(null!==t)xa=t,ka=e;else{if(null===e){if(null===wa.alternate)throw Error(i(467));throw Error(i(310))}e={memoizedState:(ka=e).memoizedState,baseState:ka.baseState,baseQueue:ka.baseQueue,queue:ka.queue,next:null},null===xa?wa.memoizedState=xa=e:xa=xa.next=e}return xa}function $a(e){var t=Aa;return Aa+=1,null===Ta&&(Ta=[]),e=Zo(Ta,e,t),t=wa,null===(null===xa?t.memoizedState:xa.next)&&(t=t.alternate,R.H=null===t||null===t.memoizedState?Vi:Wi),e}function Ua(e){if(null!==e&&"object"==typeof e){if("function"==typeof e.then)return $a(e);if(e.$$typeof===k)return Ao(e)}throw Error(i(438,String(e)))}function qa(e){var t=null,n=wa.updateQueue;if(null!==n&&(t=n.memoCache),null==t){var r=wa.alternate;null!==r&&(null!==(r=r.updateQueue)&&(null!=(r=r.memoCache)&&(t={data:r.data.map(function(e){return e.slice()}),index:0})))}if(null==t&&(t={data:[],index:0}),null===n&&(n={lastEffect:null,events:null,stores:null,memoCache:null},wa.updateQueue=n),n.memoCache=t,void 0===(n=t.data[t.index]))for(n=t.data[t.index]=Array(e),r=0;r<e;r++)n[r]=T;return t.index++,n}function Ha(e,t){return"function"==typeof t?t(e):t}function Ga(e){return Va(Ba(),ka,e)}function Va(e,t,n){var r=e.queue;if(null===r)throw Error(i(311));r.lastRenderedReducer=n;var o=e.baseQueue,a=r.pending;if(null!==a){if(null!==o){var l=o.next;o.next=a.next,a.next=l}t.baseQueue=o=a,r.pending=null}if(a=e.baseState,null===o)e.memoizedState=a;else{var s=l=null,c=null,u=t=o.next,d=!1;do{var p=-536870913&u.lane;if(p!==u.lane?(ac&p)===p:(va&p)===p){var f=u.revertLane;if(0===f)null!==c&&(c=c.next={lane:0,revertLane:0,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null}),p===Mo&&(d=!0);else{if((va&f)===f){u=u.next,f===Mo&&(d=!0);continue}p={lane:0,revertLane:u.revertLane,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null},null===c?(s=c=p,l=a):c=c.next=p,wa.lanes|=f,fc|=f}p=u.action,_a&&n(a,p),a=u.hasEagerState?u.eagerState:n(a,p)}else f={lane:p,revertLane:u.revertLane,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null},null===c?(s=c=f,l=a):c=c.next=f,wa.lanes|=p,fc|=p;u=u.next}while(null!==u&&u!==t);if(null===c?l=a:c.next=s,!Kn(a,e.memoizedState)&&(Al=!0,d&&null!==(n=zo)))throw n;e.memoizedState=a,e.baseState=l,e.baseQueue=c,r.lastRenderedState=a}return null===o&&(r.lanes=0),[e.memoizedState,r.dispatch]}function Wa(e){var t=Ba(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,a=t.memoizedState;if(null!==o){n.pending=null;var l=o=o.next;do{a=e(a,l.action),l=l.next}while(l!==o);Kn(a,t.memoizedState)||(Al=!0),t.memoizedState=a,null===t.baseQueue&&(t.baseState=a),n.lastRenderedState=a}return[a,r]}function Qa(e,t,n){var r=wa,o=Ba(),a=ao;if(a){if(void 0===n)throw Error(i(407));n=n()}else n=t();var l=!Kn((ka||o).memoizedState,n);if(l&&(o.memoizedState=n,Al=!0),o=o.queue,bi(2048,8,Xa.bind(null,r,o,e),[e]),o.getSnapshot!==t||l||null!==xa&&1&xa.memoizedState.tag){if(r.flags|=2048,mi(9,{destroy:void 0,resource:void 0},Ya.bind(null,r,o,n,t),null),null===rc)throw Error(i(349));a||124&va||Ka(r,t,n)}return n}function Ka(e,t,n){e.flags|=16384,e={getSnapshot:t,value:n},null===(t=wa.updateQueue)?(t={lastEffect:null,events:null,stores:null,memoCache:null},wa.updateQueue=t,t.stores=[e]):null===(n=t.stores)?t.stores=[e]:n.push(e)}function Ya(e,t,n,r){t.value=n,t.getSnapshot=r,Za(t)&&Ja(e)}function Xa(e,t,n){return n(function(){Za(t)&&Ja(e)})}function Za(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!Kn(e,n)}catch(r){return!0}}function Ja(e){var t=Nr(e,2);null!==t&&Fc(t,e,2)}function ei(e){var t=za();if("function"==typeof e){var n=e;if(e=n(),_a){pe(!0);try{n()}finally{pe(!1)}}}return t.memoizedState=t.baseState=e,t.queue={pending:null,lanes:0,dispatch:null,lastRenderedReducer:Ha,lastRenderedState:e},t}function ti(e,t,n,r){return e.baseState=n,Va(e,ka,"function"==typeof r?r:Ha)}function ni(e,t,n,r,o){if(Ui(e))throw Error(i(485));if(null!==(e=t.action)){var a={payload:o,action:e,next:null,isTransition:!0,status:"pending",value:null,reason:null,listeners:[],then:function(e){a.listeners.push(e)}};null!==R.T?n(!0):a.isTransition=!1,r(a),null===(n=t.pending)?(a.next=t.pending=a,ri(t,a)):(a.next=n.next,t.pending=n.next=a)}}function ri(e,t){var n=t.action,r=t.payload,o=e.state;if(t.isTransition){var a=R.T,i={};R.T=i;try{var l=n(o,r),s=R.S;null!==s&&s(i,l),oi(e,t,l)}catch(c){ii(e,t,c)}finally{R.T=a}}else try{oi(e,t,a=n(o,r))}catch(u){ii(e,t,u)}}function oi(e,t,n){null!==n&&"object"==typeof n&&"function"==typeof n.then?n.then(function(n){ai(e,t,n)},function(n){return ii(e,t,n)}):ai(e,t,n)}function ai(e,t,n){t.status="fulfilled",t.value=n,li(t),e.state=n,null!==(t=e.pending)&&((n=t.next)===t?e.pending=null:(n=n.next,t.next=n,ri(e,n)))}function ii(e,t,n){var r=e.pending;if(e.pending=null,null!==r){r=r.next;do{t.status="rejected",t.reason=n,li(t),t=t.next}while(t!==r)}e.action=null}function li(e){e=e.listeners;for(var t=0;t<e.length;t++)(0,e[t])()}function si(e,t){return t}function ci(e,t){if(ao){var n=rc.formState;if(null!==n){e:{var r=wa;if(ao){if(oo){t:{for(var o=oo,a=lo;8!==o.nodeType;){if(!a){o=null;break t}if(null===(o=bd(o.nextSibling))){o=null;break t}}o="F!"===(a=o.data)||"F"===a?o:null}if(o){oo=bd(o.nextSibling),r="F!"===o.data;break e}}co(r)}r=!1}r&&(t=n[0])}}return(n=za()).memoizedState=n.baseState=t,r={pending:null,lanes:0,dispatch:null,lastRenderedReducer:si,lastRenderedState:t},n.queue=r,n=zi.bind(null,wa,r),r.dispatch=n,r=ei(!1),a=$i.bind(null,wa,!1,r.queue),o={state:t,dispatch:null,action:e,pending:null},(r=za()).queue=o,n=ni.bind(null,wa,o,a,n),o.dispatch=n,r.memoizedState=e,[t,n,!1]}function ui(e){return di(Ba(),ka,e)}function di(e,t,n){if(t=Va(e,t,si)[0],e=Ga(Ha)[0],"object"==typeof t&&null!==t&&"function"==typeof t.then)try{var r=$a(t)}catch(i){if(i===Vo)throw Qo;throw i}else r=t;var o=(t=Ba()).queue,a=o.dispatch;return n!==t.memoizedState&&(wa.flags|=2048,mi(9,{destroy:void 0,resource:void 0},pi.bind(null,o,n),null)),[r,a,e]}function pi(e,t){e.action=t}function fi(e){var t=Ba(),n=ka;if(null!==n)return di(t,n,e);Ba(),t=t.memoizedState;var r=(n=Ba()).queue.dispatch;return n.memoizedState=e,[t,r,!1]}function mi(e,t,n,r){return e={tag:e,create:n,deps:r,inst:t,next:null},null===(t=wa.updateQueue)&&(t={lastEffect:null,events:null,stores:null,memoCache:null},wa.updateQueue=t),null===(n=t.lastEffect)?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e),e}function gi(){return Ba().memoizedState}function hi(e,t,n,r){var o=za();r=void 0===r?null:r,wa.flags|=e,o.memoizedState=mi(1|t,{destroy:void 0,resource:void 0},n,r)}function bi(e,t,n,r){var o=Ba();r=void 0===r?null:r;var a=o.memoizedState.inst;null!==ka&&null!==r&&Na(r,ka.memoizedState.deps)?o.memoizedState=mi(t,a,n,r):(wa.flags|=e,o.memoizedState=mi(1|t,a,n,r))}function yi(e,t){hi(8390656,8,e,t)}function vi(e,t){bi(2048,8,e,t)}function wi(e,t){return bi(4,2,e,t)}function ki(e,t){return bi(4,4,e,t)}function xi(e,t){if("function"==typeof t){e=e();var n=t(e);return function(){"function"==typeof n?n():t(null)}}if(null!=t)return e=e(),t.current=e,function(){t.current=null}}function Si(e,t,n){n=null!=n?n.concat([e]):null,bi(4,4,xi.bind(null,t,e),n)}function Ei(){}function _i(e,t){var n=Ba();t=void 0===t?null:t;var r=n.memoizedState;return null!==t&&Na(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function Ci(e,t){var n=Ba();t=void 0===t?null:t;var r=n.memoizedState;if(null!==t&&Na(t,r[1]))return r[0];if(r=e(),_a){pe(!0);try{e()}finally{pe(!1)}}return n.memoizedState=[r,t],r}function Ai(e,t,n){return void 0===n||1073741824&va?e.memoizedState=t:(e.memoizedState=n,e=Dc(),wa.lanes|=e,fc|=e,n)}function Ti(e,t,n,r){return Kn(n,t)?n:null!==ma.current?(e=Ai(e,n,r),Kn(e,t)||(Al=!0),e):42&va?(e=Dc(),wa.lanes|=e,fc|=e,t):(Al=!0,e.memoizedState=n)}function ji(e,t,n,r,o){var a=D.p;D.p=0!==a&&8>a?a:8;var i,l,s,c=R.T,u={};R.T=u,$i(e,!1,t,n);try{var d=o(),p=R.S;if(null!==p&&p(u,d),null!==d&&"object"==typeof d&&"function"==typeof d.then)Bi(e,t,(i=r,l=[],s={status:"pending",value:null,reason:null,then:function(e){l.push(e)}},d.then(function(){s.status="fulfilled",s.value=i;for(var e=0;e<l.length;e++)(0,l[e])(i)},function(e){for(s.status="rejected",s.reason=e,e=0;e<l.length;e++)(0,l[e])(void 0)}),s),Rc());else Bi(e,t,r,Rc())}catch(f){Bi(e,t,{then:function(){},status:"rejected",reason:f},Rc())}finally{D.p=a,R.T=c}}function Pi(){}function Ni(e,t,n,r){if(5!==e.tag)throw Error(i(476));var o=Li(e).queue;ji(e,o,t,F,null===n?Pi:function(){return Oi(e),n(r)})}function Li(e){var t=e.memoizedState;if(null!==t)return t;var n={};return(t={memoizedState:F,baseState:F,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Ha,lastRenderedState:F},next:null}).next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Ha,lastRenderedState:n},next:null},e.memoizedState=t,null!==(e=e.alternate)&&(e.memoizedState=t),t}function Oi(e){Bi(e,Li(e).next.queue,{},Rc())}function Ri(){return Ao(Qd)}function Di(){return Ba().memoizedState}function Fi(){return Ba().memoizedState}function Ii(e){for(var t=e.return;null!==t;){switch(t.tag){case 24:case 3:var n=Rc(),r=ia(t,e=aa(n),n);return null!==r&&(Fc(r,t,n),la(r,t,n)),t={cache:Ro()},void(e.payload=t)}t=t.return}}function Mi(e,t,n){var r=Rc();n={lane:r,revertLane:0,action:n,hasEagerState:!1,eagerState:null,next:null},Ui(e)?qi(t,n):null!==(n=Pr(e,t,n,r))&&(Fc(n,e,r),Hi(n,t,r))}function zi(e,t,n){Bi(e,t,n,Rc())}function Bi(e,t,n,r){var o={lane:r,revertLane:0,action:n,hasEagerState:!1,eagerState:null,next:null};if(Ui(e))qi(t,o);else{var a=e.alternate;if(0===e.lanes&&(null===a||0===a.lanes)&&null!==(a=t.lastRenderedReducer))try{var i=t.lastRenderedState,l=a(i,n);if(o.hasEagerState=!0,o.eagerState=l,Kn(l,i))return jr(e,t,o,0),null===rc&&Tr(),!1}catch(s){}if(null!==(n=Pr(e,t,o,r)))return Fc(n,e,r),Hi(n,t,r),!0}return!1}function $i(e,t,n,r){if(r={lane:2,revertLane:ju(),action:r,hasEagerState:!1,eagerState:null,next:null},Ui(e)){if(t)throw Error(i(479))}else null!==(t=Pr(e,n,r,2))&&Fc(t,e,2)}function Ui(e){var t=e.alternate;return e===wa||null!==t&&t===wa}function qi(e,t){Ea=Sa=!0;var n=e.pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Hi(e,t,n){if(4194048&n){var r=t.lanes;n|=r&=e.pendingLanes,t.lanes=n,Ae(e,n)}}var Gi={readContext:Ao,use:Ua,useCallback:Pa,useContext:Pa,useEffect:Pa,useImperativeHandle:Pa,useLayoutEffect:Pa,useInsertionEffect:Pa,useMemo:Pa,useReducer:Pa,useRef:Pa,useState:Pa,useDebugValue:Pa,useDeferredValue:Pa,useTransition:Pa,useSyncExternalStore:Pa,useId:Pa,useHostTransitionStatus:Pa,useFormState:Pa,useActionState:Pa,useOptimistic:Pa,useMemoCache:Pa,useCacheRefresh:Pa},Vi={readContext:Ao,use:Ua,useCallback:function(e,t){return za().memoizedState=[e,void 0===t?null:t],e},useContext:Ao,useEffect:yi,useImperativeHandle:function(e,t,n){n=null!=n?n.concat([e]):null,hi(4194308,4,xi.bind(null,t,e),n)},useLayoutEffect:function(e,t){return hi(4194308,4,e,t)},useInsertionEffect:function(e,t){hi(4,2,e,t)},useMemo:function(e,t){var n=za();t=void 0===t?null:t;var r=e();if(_a){pe(!0);try{e()}finally{pe(!1)}}return n.memoizedState=[r,t],r},useReducer:function(e,t,n){var r=za();if(void 0!==n){var o=n(t);if(_a){pe(!0);try{n(t)}finally{pe(!1)}}}else o=t;return r.memoizedState=r.baseState=o,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:o},r.queue=e,e=e.dispatch=Mi.bind(null,wa,e),[r.memoizedState,e]},useRef:function(e){return e={current:e},za().memoizedState=e},useState:function(e){var t=(e=ei(e)).queue,n=zi.bind(null,wa,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:Ei,useDeferredValue:function(e,t){return Ai(za(),e,t)},useTransition:function(){var e=ei(!1);return e=ji.bind(null,wa,e.queue,!0,!1),za().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var r=wa,o=za();if(ao){if(void 0===n)throw Error(i(407));n=n()}else{if(n=t(),null===rc)throw Error(i(349));124&ac||Ka(r,t,n)}o.memoizedState=n;var a={value:n,getSnapshot:t};return o.queue=a,yi(Xa.bind(null,r,a,e),[e]),r.flags|=2048,mi(9,{destroy:void 0,resource:void 0},Ya.bind(null,r,a,n,t),null),n},useId:function(){var e=za(),t=rc.identifierPrefix;if(ao){var n=Zr;t="\xab"+t+"R"+(n=(Xr&~(1<<32-fe(Xr)-1)).toString(32)+n),0<(n=Ca++)&&(t+="H"+n.toString(32)),t+="\xbb"}else t="\xab"+t+"r"+(n=ja++).toString(32)+"\xbb";return e.memoizedState=t},useHostTransitionStatus:Ri,useFormState:ci,useActionState:ci,useOptimistic:function(e){var t=za();t.memoizedState=t.baseState=e;var n={pending:null,lanes:0,dispatch:null,lastRenderedReducer:null,lastRenderedState:null};return t.queue=n,t=$i.bind(null,wa,!0,n),n.dispatch=t,[e,t]},useMemoCache:qa,useCacheRefresh:function(){return za().memoizedState=Ii.bind(null,wa)}},Wi={readContext:Ao,use:Ua,useCallback:_i,useContext:Ao,useEffect:vi,useImperativeHandle:Si,useInsertionEffect:wi,useLayoutEffect:ki,useMemo:Ci,useReducer:Ga,useRef:gi,useState:function(){return Ga(Ha)},useDebugValue:Ei,useDeferredValue:function(e,t){return Ti(Ba(),ka.memoizedState,e,t)},useTransition:function(){var e=Ga(Ha)[0],t=Ba().memoizedState;return["boolean"==typeof e?e:$a(e),t]},useSyncExternalStore:Qa,useId:Di,useHostTransitionStatus:Ri,useFormState:ui,useActionState:ui,useOptimistic:function(e,t){return ti(Ba(),0,e,t)},useMemoCache:qa,useCacheRefresh:Fi},Qi={readContext:Ao,use:Ua,useCallback:_i,useContext:Ao,useEffect:vi,useImperativeHandle:Si,useInsertionEffect:wi,useLayoutEffect:ki,useMemo:Ci,useReducer:Wa,useRef:gi,useState:function(){return Wa(Ha)},useDebugValue:Ei,useDeferredValue:function(e,t){var n=Ba();return null===ka?Ai(n,e,t):Ti(n,ka.memoizedState,e,t)},useTransition:function(){var e=Wa(Ha)[0],t=Ba().memoizedState;return["boolean"==typeof e?e:$a(e),t]},useSyncExternalStore:Qa,useId:Di,useHostTransitionStatus:Ri,useFormState:fi,useActionState:fi,useOptimistic:function(e,t){var n=Ba();return null!==ka?ti(n,0,e,t):(n.baseState=e,[e,n.queue.dispatch])},useMemoCache:qa,useCacheRefresh:Fi},Ki=null,Yi=0;function Xi(e){var t=Yi;return Yi+=1,null===Ki&&(Ki=[]),Zo(Ki,e,t)}function Zi(e,t){t=t.props.ref,e.ref=void 0!==t?t:null}function Ji(e,t){if(t.$$typeof===f)throw Error(i(525));throw e=Object.prototype.toString.call(t),Error(i(31,"[object Object]"===e?"object with keys {"+Object.keys(t).join(", ")+"}":e))}function el(e){return(0,e._init)(e._payload)}function tl(e){function t(t,n){if(e){var r=t.deletions;null===r?(t.deletions=[n],t.flags|=16):r.push(n)}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e){for(var t=new Map;null!==e;)null!==e.key?t.set(e.key,e):t.set(e.index,e),e=e.sibling;return t}function o(e,t){return(e=Mr(e,t)).index=0,e.sibling=null,e}function a(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.flags|=67108866,n):r:(t.flags|=67108866,n):(t.flags|=1048576,n)}function l(t){return e&&null===t.alternate&&(t.flags|=67108866),t}function s(e,t,n,r){return null===t||6!==t.tag?((t=Ur(n,e.mode,r)).return=e,t):((t=o(t,n)).return=e,t)}function c(e,t,n,r){var a=n.type;return a===h?d(e,t,n.props.children,r,n.key):null!==t&&(t.elementType===a||"object"==typeof a&&null!==a&&a.$$typeof===C&&el(a)===t.type)?(Zi(t=o(t,n.props),n),t.return=e,t):(Zi(t=Br(n.type,n.key,n.props,null,e.mode,r),n),t.return=e,t)}function u(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=qr(n,e.mode,r)).return=e,t):((t=o(t,n.children||[])).return=e,t)}function d(e,t,n,r,a){return null===t||7!==t.tag?((t=$r(n,e.mode,r,a)).return=e,t):((t=o(t,n)).return=e,t)}function p(e,t,n){if("string"==typeof t&&""!==t||"number"==typeof t||"bigint"==typeof t)return(t=Ur(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case m:return Zi(n=Br(t.type,t.key,t.props,null,e.mode,n),t),n.return=e,n;case g:return(t=qr(t,e.mode,n)).return=e,t;case C:return p(e,t=(0,t._init)(t._payload),n)}if(O(t)||P(t))return(t=$r(t,e.mode,n,null)).return=e,t;if("function"==typeof t.then)return p(e,Xi(t),n);if(t.$$typeof===k)return p(e,To(e,t),n);Ji(e,t)}return null}function f(e,t,n,r){var o=null!==t?t.key:null;if("string"==typeof n&&""!==n||"number"==typeof n||"bigint"==typeof n)return null!==o?null:s(e,t,""+n,r);if("object"==typeof n&&null!==n){switch(n.$$typeof){case m:return n.key===o?c(e,t,n,r):null;case g:return n.key===o?u(e,t,n,r):null;case C:return f(e,t,n=(o=n._init)(n._payload),r)}if(O(n)||P(n))return null!==o?null:d(e,t,n,r,null);if("function"==typeof n.then)return f(e,t,Xi(n),r);if(n.$$typeof===k)return f(e,t,To(e,n),r);Ji(e,n)}return null}function b(e,t,n,r,o){if("string"==typeof r&&""!==r||"number"==typeof r||"bigint"==typeof r)return s(t,e=e.get(n)||null,""+r,o);if("object"==typeof r&&null!==r){switch(r.$$typeof){case m:return c(t,e=e.get(null===r.key?n:r.key)||null,r,o);case g:return u(t,e=e.get(null===r.key?n:r.key)||null,r,o);case C:return b(e,t,n,r=(0,r._init)(r._payload),o)}if(O(r)||P(r))return d(t,e=e.get(n)||null,r,o,null);if("function"==typeof r.then)return b(e,t,n,Xi(r),o);if(r.$$typeof===k)return b(e,t,n,To(t,r),o);Ji(t,r)}return null}function y(s,c,u,d){if("object"==typeof u&&null!==u&&u.type===h&&null===u.key&&(u=u.props.children),"object"==typeof u&&null!==u){switch(u.$$typeof){case m:e:{for(var v=u.key;null!==c;){if(c.key===v){if((v=u.type)===h){if(7===c.tag){n(s,c.sibling),(d=o(c,u.props.children)).return=s,s=d;break e}}else if(c.elementType===v||"object"==typeof v&&null!==v&&v.$$typeof===C&&el(v)===c.type){n(s,c.sibling),Zi(d=o(c,u.props),u),d.return=s,s=d;break e}n(s,c);break}t(s,c),c=c.sibling}u.type===h?((d=$r(u.props.children,s.mode,d,u.key)).return=s,s=d):(Zi(d=Br(u.type,u.key,u.props,null,s.mode,d),u),d.return=s,s=d)}return l(s);case g:e:{for(v=u.key;null!==c;){if(c.key===v){if(4===c.tag&&c.stateNode.containerInfo===u.containerInfo&&c.stateNode.implementation===u.implementation){n(s,c.sibling),(d=o(c,u.children||[])).return=s,s=d;break e}n(s,c);break}t(s,c),c=c.sibling}(d=qr(u,s.mode,d)).return=s,s=d}return l(s);case C:return y(s,c,u=(v=u._init)(u._payload),d)}if(O(u))return function(o,i,l,s){for(var c=null,u=null,d=i,m=i=0,g=null;null!==d&&m<l.length;m++){d.index>m?(g=d,d=null):g=d.sibling;var h=f(o,d,l[m],s);if(null===h){null===d&&(d=g);break}e&&d&&null===h.alternate&&t(o,d),i=a(h,i,m),null===u?c=h:u.sibling=h,u=h,d=g}if(m===l.length)return n(o,d),ao&&Jr(o,m),c;if(null===d){for(;m<l.length;m++)null!==(d=p(o,l[m],s))&&(i=a(d,i,m),null===u?c=d:u.sibling=d,u=d);return ao&&Jr(o,m),c}for(d=r(d);m<l.length;m++)null!==(g=b(d,o,m,l[m],s))&&(e&&null!==g.alternate&&d.delete(null===g.key?m:g.key),i=a(g,i,m),null===u?c=g:u.sibling=g,u=g);return e&&d.forEach(function(e){return t(o,e)}),ao&&Jr(o,m),c}(s,c,u,d);if(P(u)){if("function"!=typeof(v=P(u)))throw Error(i(150));return function(o,l,s,c){if(null==s)throw Error(i(151));for(var u=null,d=null,m=l,g=l=0,h=null,y=s.next();null!==m&&!y.done;g++,y=s.next()){m.index>g?(h=m,m=null):h=m.sibling;var v=f(o,m,y.value,c);if(null===v){null===m&&(m=h);break}e&&m&&null===v.alternate&&t(o,m),l=a(v,l,g),null===d?u=v:d.sibling=v,d=v,m=h}if(y.done)return n(o,m),ao&&Jr(o,g),u;if(null===m){for(;!y.done;g++,y=s.next())null!==(y=p(o,y.value,c))&&(l=a(y,l,g),null===d?u=y:d.sibling=y,d=y);return ao&&Jr(o,g),u}for(m=r(m);!y.done;g++,y=s.next())null!==(y=b(m,o,g,y.value,c))&&(e&&null!==y.alternate&&m.delete(null===y.key?g:y.key),l=a(y,l,g),null===d?u=y:d.sibling=y,d=y);return e&&m.forEach(function(e){return t(o,e)}),ao&&Jr(o,g),u}(s,c,u=v.call(u),d)}if("function"==typeof u.then)return y(s,c,Xi(u),d);if(u.$$typeof===k)return y(s,c,To(s,u),d);Ji(s,u)}return"string"==typeof u&&""!==u||"number"==typeof u||"bigint"==typeof u?(u=""+u,null!==c&&6===c.tag?(n(s,c.sibling),(d=o(c,u)).return=s,s=d):(n(s,c),(d=Ur(u,s.mode,d)).return=s,s=d),l(s)):n(s,c)}return function(e,t,n,r){try{Yi=0;var o=y(e,t,n,r);return Ki=null,o}catch(i){if(i===Vo||i===Qo)throw i;var a=Fr(29,i,null,e.mode);return a.lanes=r,a.return=e,a}}}var nl=tl(!0),rl=tl(!1),ol=z(null),al=null;function il(e){var t=e.alternate;$(ul,1&ul.current),$(ol,e),null===al&&(null===t||null!==ma.current||null!==t.memoizedState)&&(al=e)}function ll(e){if(22===e.tag){if($(ul,ul.current),$(ol,e),null===al){var t=e.alternate;null!==t&&null!==t.memoizedState&&(al=e)}}else sl()}function sl(){$(ul,ul.current),$(ol,ol.current)}function cl(e){B(ol),al===e&&(al=null),B(ul)}var ul=z(0);function dl(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||hd(n)))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(128&t.flags)return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}function pl(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:p({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var fl={enqueueSetState:function(e,t,n){e=e._reactInternals;var r=Rc(),o=aa(r);o.payload=t,null!=n&&(o.callback=n),null!==(t=ia(e,o,r))&&(Fc(t,e,r),la(t,e,r))},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=Rc(),o=aa(r);o.tag=1,o.payload=t,null!=n&&(o.callback=n),null!==(t=ia(e,o,r))&&(Fc(t,e,r),la(t,e,r))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=Rc(),r=aa(n);r.tag=2,null!=t&&(r.callback=t),null!==(t=ia(e,r,n))&&(Fc(t,e,n),la(t,e,n))}};function ml(e,t,n,r,o,a,i){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,a,i):!t.prototype||!t.prototype.isPureReactComponent||(!Yn(n,r)||!Yn(o,a))}function gl(e,t,n,r){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&fl.enqueueReplaceState(t,t.state,null)}function hl(e,t){var n=t;if("ref"in t)for(var r in n={},t)"ref"!==r&&(n[r]=t[r]);if(e=e.defaultProps)for(var o in n===t&&(n=p({},n)),e)void 0===n[o]&&(n[o]=e[o]);return n}var bl="function"==typeof reportError?reportError:function(e){if("object"==typeof window&&"function"==typeof window.ErrorEvent){var t=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:"object"==typeof e&&null!==e&&"string"==typeof e.message?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if("object"==typeof process&&"function"==typeof process.emit)return void process.emit("uncaughtException",e);console.error(e)};function yl(e){bl(e)}function vl(e){console.error(e)}function wl(e){bl(e)}function kl(e,t){try{(0,e.onUncaughtError)(t.value,{componentStack:t.stack})}catch(n){setTimeout(function(){throw n})}}function xl(e,t,n){try{(0,e.onCaughtError)(n.value,{componentStack:n.stack,errorBoundary:1===t.tag?t.stateNode:null})}catch(r){setTimeout(function(){throw r})}}function Sl(e,t,n){return(n=aa(n)).tag=3,n.payload={element:null},n.callback=function(){kl(e,t)},n}function El(e){return(e=aa(e)).tag=3,e}function _l(e,t,n,r){var o=n.type.getDerivedStateFromError;if("function"==typeof o){var a=r.value;e.payload=function(){return o(a)},e.callback=function(){xl(t,n,r)}}var i=n.stateNode;null!==i&&"function"==typeof i.componentDidCatch&&(e.callback=function(){xl(t,n,r),"function"!=typeof o&&(null===Ec?Ec=new Set([this]):Ec.add(this));var e=r.stack;this.componentDidCatch(r.value,{componentStack:null!==e?e:""})})}var Cl=Error(i(461)),Al=!1;function Tl(e,t,n,r){t.child=null===e?rl(t,null,n,r):nl(t,e.child,n,r)}function jl(e,t,n,r,o){n=n.render;var a=t.ref;if("ref"in r){var i={};for(var l in r)"ref"!==l&&(i[l]=r[l])}else i=r;return Co(t),r=La(e,t,n,i,a,o),l=Fa(),null===e||Al?(ao&&l&&to(t),t.flags|=1,Tl(e,t,r,o),t.child):(Ia(e,t,o),Kl(e,t,o))}function Pl(e,t,n,r,o){if(null===e){var a=n.type;return"function"!=typeof a||Ir(a)||void 0!==a.defaultProps||null!==n.compare?((e=Br(n.type,null,r,t,t.mode,o)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=a,Nl(e,t,a,r,o))}if(a=e.child,!Yl(e,o)){var i=a.memoizedProps;if((n=null!==(n=n.compare)?n:Yn)(i,r)&&e.ref===t.ref)return Kl(e,t,o)}return t.flags|=1,(e=Mr(a,r)).ref=t.ref,e.return=t,t.child=e}function Nl(e,t,n,r,o){if(null!==e){var a=e.memoizedProps;if(Yn(a,r)&&e.ref===t.ref){if(Al=!1,t.pendingProps=r=a,!Yl(e,o))return t.lanes=e.lanes,Kl(e,t,o);131072&e.flags&&(Al=!0)}}return Dl(e,t,n,r,o)}function Ll(e,t,n){var r=t.pendingProps,o=r.children,a=null!==e?e.memoizedState:null;if("hidden"===r.mode){if(128&t.flags){if(r=null!==a?a.baseLanes|n:n,null!==e){for(o=t.child=e.child,a=0;null!==o;)a=a|o.lanes|o.childLanes,o=o.sibling;t.childLanes=a&~r}else t.childLanes=0,t.child=null;return Ol(e,t,r,n)}if(!(536870912&n))return t.lanes=t.childLanes=536870912,Ol(e,t,null!==a?a.baseLanes|n:n,n);t.memoizedState={baseLanes:0,cachePool:null},null!==e&&Ho(0,null!==a?a.cachePool:null),null!==a?ha(t,a):ba(),ll(t)}else null!==a?(Ho(0,a.cachePool),ha(t,a),sl(),t.memoizedState=null):(null!==e&&Ho(0,null),ba(),sl());return Tl(e,t,o,n),t.child}function Ol(e,t,n,r){var o=qo();return o=null===o?null:{parent:Oo._currentValue,pool:o},t.memoizedState={baseLanes:n,cachePool:o},null!==e&&Ho(0,null),ba(),ll(t),null!==e&&Eo(e,t,r,!0),null}function Rl(e,t){var n=t.ref;if(null===n)null!==e&&null!==e.ref&&(t.flags|=4194816);else{if("function"!=typeof n&&"object"!=typeof n)throw Error(i(284));null!==e&&e.ref===n||(t.flags|=4194816)}}function Dl(e,t,n,r,o){return Co(t),n=La(e,t,n,r,void 0,o),r=Fa(),null===e||Al?(ao&&r&&to(t),t.flags|=1,Tl(e,t,n,o),t.child):(Ia(e,t,o),Kl(e,t,o))}function Fl(e,t,n,r,o,a){return Co(t),t.updateQueue=null,n=Ra(t,r,n,o),Oa(e),r=Fa(),null===e||Al?(ao&&r&&to(t),t.flags|=1,Tl(e,t,n,a),t.child):(Ia(e,t,a),Kl(e,t,a))}function Il(e,t,n,r,o){if(Co(t),null===t.stateNode){var a=Rr,i=n.contextType;"object"==typeof i&&null!==i&&(a=Ao(i)),a=new n(r,a),t.memoizedState=null!==a.state&&void 0!==a.state?a.state:null,a.updater=fl,t.stateNode=a,a._reactInternals=t,(a=t.stateNode).props=r,a.state=t.memoizedState,a.refs={},ra(t),i=n.contextType,a.context="object"==typeof i&&null!==i?Ao(i):Rr,a.state=t.memoizedState,"function"==typeof(i=n.getDerivedStateFromProps)&&(pl(t,n,i,r),a.state=t.memoizedState),"function"==typeof n.getDerivedStateFromProps||"function"==typeof a.getSnapshotBeforeUpdate||"function"!=typeof a.UNSAFE_componentWillMount&&"function"!=typeof a.componentWillMount||(i=a.state,"function"==typeof a.componentWillMount&&a.componentWillMount(),"function"==typeof a.UNSAFE_componentWillMount&&a.UNSAFE_componentWillMount(),i!==a.state&&fl.enqueueReplaceState(a,a.state,null),da(t,r,a,o),ua(),a.state=t.memoizedState),"function"==typeof a.componentDidMount&&(t.flags|=4194308),r=!0}else if(null===e){a=t.stateNode;var l=t.memoizedProps,s=hl(n,l);a.props=s;var c=a.context,u=n.contextType;i=Rr,"object"==typeof u&&null!==u&&(i=Ao(u));var d=n.getDerivedStateFromProps;u="function"==typeof d||"function"==typeof a.getSnapshotBeforeUpdate,l=t.pendingProps!==l,u||"function"!=typeof a.UNSAFE_componentWillReceiveProps&&"function"!=typeof a.componentWillReceiveProps||(l||c!==i)&&gl(t,a,r,i),na=!1;var p=t.memoizedState;a.state=p,da(t,r,a,o),ua(),c=t.memoizedState,l||p!==c||na?("function"==typeof d&&(pl(t,n,d,r),c=t.memoizedState),(s=na||ml(t,n,s,r,p,c,i))?(u||"function"!=typeof a.UNSAFE_componentWillMount&&"function"!=typeof a.componentWillMount||("function"==typeof a.componentWillMount&&a.componentWillMount(),"function"==typeof a.UNSAFE_componentWillMount&&a.UNSAFE_componentWillMount()),"function"==typeof a.componentDidMount&&(t.flags|=4194308)):("function"==typeof a.componentDidMount&&(t.flags|=4194308),t.memoizedProps=r,t.memoizedState=c),a.props=r,a.state=c,a.context=i,r=s):("function"==typeof a.componentDidMount&&(t.flags|=4194308),r=!1)}else{a=t.stateNode,oa(e,t),u=hl(n,i=t.memoizedProps),a.props=u,d=t.pendingProps,p=a.context,c=n.contextType,s=Rr,"object"==typeof c&&null!==c&&(s=Ao(c)),(c="function"==typeof(l=n.getDerivedStateFromProps)||"function"==typeof a.getSnapshotBeforeUpdate)||"function"!=typeof a.UNSAFE_componentWillReceiveProps&&"function"!=typeof a.componentWillReceiveProps||(i!==d||p!==s)&&gl(t,a,r,s),na=!1,p=t.memoizedState,a.state=p,da(t,r,a,o),ua();var f=t.memoizedState;i!==d||p!==f||na||null!==e&&null!==e.dependencies&&_o(e.dependencies)?("function"==typeof l&&(pl(t,n,l,r),f=t.memoizedState),(u=na||ml(t,n,u,r,p,f,s)||null!==e&&null!==e.dependencies&&_o(e.dependencies))?(c||"function"!=typeof a.UNSAFE_componentWillUpdate&&"function"!=typeof a.componentWillUpdate||("function"==typeof a.componentWillUpdate&&a.componentWillUpdate(r,f,s),"function"==typeof a.UNSAFE_componentWillUpdate&&a.UNSAFE_componentWillUpdate(r,f,s)),"function"==typeof a.componentDidUpdate&&(t.flags|=4),"function"==typeof a.getSnapshotBeforeUpdate&&(t.flags|=1024)):("function"!=typeof a.componentDidUpdate||i===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof a.getSnapshotBeforeUpdate||i===e.memoizedProps&&p===e.memoizedState||(t.flags|=1024),t.memoizedProps=r,t.memoizedState=f),a.props=r,a.state=f,a.context=s,r=u):("function"!=typeof a.componentDidUpdate||i===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof a.getSnapshotBeforeUpdate||i===e.memoizedProps&&p===e.memoizedState||(t.flags|=1024),r=!1)}return a=r,Rl(e,t),r=!!(128&t.flags),a||r?(a=t.stateNode,n=r&&"function"!=typeof n.getDerivedStateFromError?null:a.render(),t.flags|=1,null!==e&&r?(t.child=nl(t,e.child,null,o),t.child=nl(t,null,n,o)):Tl(e,t,n,o),t.memoizedState=a.state,e=t.child):e=Kl(e,t,o),e}function Ml(e,t,n,r){return mo(),t.flags|=256,Tl(e,t,n,r),t.child}var zl={dehydrated:null,treeContext:null,retryLane:0,hydrationErrors:null};function Bl(e){return{baseLanes:e,cachePool:Go()}}function $l(e,t,n){return e=null!==e?e.childLanes&~n:0,t&&(e|=hc),e}function Ul(e,t,n){var r,o=t.pendingProps,a=!1,l=!!(128&t.flags);if((r=l)||(r=(null===e||null!==e.memoizedState)&&!!(2&ul.current)),r&&(a=!0,t.flags&=-129),r=!!(32&t.flags),t.flags&=-33,null===e){if(ao){if(a?il(t):sl(),ao){var s,c=oo;if(s=c){e:{for(s=c,c=lo;8!==s.nodeType;){if(!c){c=null;break e}if(null===(s=bd(s.nextSibling))){c=null;break e}}c=s}null!==c?(t.memoizedState={dehydrated:c,treeContext:null!==Yr?{id:Xr,overflow:Zr}:null,retryLane:536870912,hydrationErrors:null},(s=Fr(18,null,null,0)).stateNode=c,s.return=t,t.child=s,ro=t,oo=null,s=!0):s=!1}s||co(t)}if(null!==(c=t.memoizedState)&&null!==(c=c.dehydrated))return hd(c)?t.lanes=32:t.lanes=536870912,null;cl(t)}return c=o.children,o=o.fallback,a?(sl(),c=Hl({mode:"hidden",children:c},a=t.mode),o=$r(o,a,n,null),c.return=t,o.return=t,c.sibling=o,t.child=c,(a=t.child).memoizedState=Bl(n),a.childLanes=$l(e,r,n),t.memoizedState=zl,o):(il(t),ql(t,c))}if(null!==(s=e.memoizedState)&&null!==(c=s.dehydrated)){if(l)256&t.flags?(il(t),t.flags&=-257,t=Gl(e,t,n)):null!==t.memoizedState?(sl(),t.child=e.child,t.flags|=128,t=null):(sl(),a=o.fallback,c=t.mode,o=Hl({mode:"visible",children:o.children},c),(a=$r(a,c,n,null)).flags|=2,o.return=t,a.return=t,o.sibling=a,t.child=o,nl(t,e.child,null,n),(o=t.child).memoizedState=Bl(n),o.childLanes=$l(e,r,n),t.memoizedState=zl,t=a);else if(il(t),hd(c)){if(r=c.nextSibling&&c.nextSibling.dataset)var u=r.dgst;r=u,(o=Error(i(419))).stack="",o.digest=r,ho({value:o,source:null,stack:null}),t=Gl(e,t,n)}else if(Al||Eo(e,t,n,!1),r=0!==(n&e.childLanes),Al||r){if(null!==(r=rc)&&(0!==(o=0!==((o=42&(o=n&-n)?1:Te(o))&(r.suspendedLanes|n))?0:o)&&o!==s.retryLane))throw s.retryLane=o,Nr(e,o),Fc(r,e,o),Cl;"$?"===c.data||Wc(),t=Gl(e,t,n)}else"$?"===c.data?(t.flags|=192,t.child=e.child,t=null):(e=s.treeContext,oo=bd(c.nextSibling),ro=t,ao=!0,io=null,lo=!1,null!==e&&(Qr[Kr++]=Xr,Qr[Kr++]=Zr,Qr[Kr++]=Yr,Xr=e.id,Zr=e.overflow,Yr=t),(t=ql(t,o.children)).flags|=4096);return t}return a?(sl(),a=o.fallback,c=t.mode,u=(s=e.child).sibling,(o=Mr(s,{mode:"hidden",children:o.children})).subtreeFlags=65011712&s.subtreeFlags,null!==u?a=Mr(u,a):(a=$r(a,c,n,null)).flags|=2,a.return=t,o.return=t,o.sibling=a,t.child=o,o=a,a=t.child,null===(c=e.child.memoizedState)?c=Bl(n):(null!==(s=c.cachePool)?(u=Oo._currentValue,s=s.parent!==u?{parent:u,pool:u}:s):s=Go(),c={baseLanes:c.baseLanes|n,cachePool:s}),a.memoizedState=c,a.childLanes=$l(e,r,n),t.memoizedState=zl,o):(il(t),e=(n=e.child).sibling,(n=Mr(n,{mode:"visible",children:o.children})).return=t,n.sibling=null,null!==e&&(null===(r=t.deletions)?(t.deletions=[e],t.flags|=16):r.push(e)),t.child=n,t.memoizedState=null,n)}function ql(e,t){return(t=Hl({mode:"visible",children:t},e.mode)).return=e,e.child=t}function Hl(e,t){return(e=Fr(22,e,null,t)).lanes=0,e.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null},e}function Gl(e,t,n){return nl(t,e.child,null,n),(e=ql(t,t.pendingProps.children)).flags|=2,t.memoizedState=null,e}function Vl(e,t,n){e.lanes|=t;var r=e.alternate;null!==r&&(r.lanes|=t),xo(e.return,t,n)}function Wl(e,t,n,r,o){var a=e.memoizedState;null===a?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:o}:(a.isBackwards=t,a.rendering=null,a.renderingStartTime=0,a.last=r,a.tail=n,a.tailMode=o)}function Ql(e,t,n){var r=t.pendingProps,o=r.revealOrder,a=r.tail;if(Tl(e,t,r.children,n),2&(r=ul.current))r=1&r|2,t.flags|=128;else{if(null!==e&&128&e.flags)e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&Vl(e,n,t);else if(19===e.tag)Vl(e,n,t);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}switch($(ul,r),o){case"forwards":for(n=t.child,o=null;null!==n;)null!==(e=n.alternate)&&null===dl(e)&&(o=n),n=n.sibling;null===(n=o)?(o=t.child,t.child=null):(o=n.sibling,n.sibling=null),Wl(t,!1,o,n,a);break;case"backwards":for(n=null,o=t.child,t.child=null;null!==o;){if(null!==(e=o.alternate)&&null===dl(e)){t.child=o;break}e=o.sibling,o.sibling=n,n=o,o=e}Wl(t,!0,n,null,a);break;case"together":Wl(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function Kl(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),fc|=t.lanes,0===(n&t.childLanes)){if(null===e)return null;if(Eo(e,t,n,!1),0===(n&t.childLanes))return null}if(null!==e&&t.child!==e.child)throw Error(i(153));if(null!==t.child){for(n=Mr(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Mr(e,e.pendingProps)).return=t;n.sibling=null}return t.child}function Yl(e,t){return 0!==(e.lanes&t)||!(null===(e=e.dependencies)||!_o(e))}function Xl(e,t,n){if(null!==e)if(e.memoizedProps!==t.pendingProps)Al=!0;else{if(!(Yl(e,n)||128&t.flags))return Al=!1,function(e,t,n){switch(t.tag){case 3:V(t,t.stateNode.containerInfo),wo(0,Oo,e.memoizedState.cache),mo();break;case 27:case 5:Q(t);break;case 4:V(t,t.stateNode.containerInfo);break;case 10:wo(0,t.type,t.memoizedProps.value);break;case 13:var r=t.memoizedState;if(null!==r)return null!==r.dehydrated?(il(t),t.flags|=128,null):0!==(n&t.child.childLanes)?Ul(e,t,n):(il(t),null!==(e=Kl(e,t,n))?e.sibling:null);il(t);break;case 19:var o=!!(128&e.flags);if((r=0!==(n&t.childLanes))||(Eo(e,t,n,!1),r=0!==(n&t.childLanes)),o){if(r)return Ql(e,t,n);t.flags|=128}if(null!==(o=t.memoizedState)&&(o.rendering=null,o.tail=null,o.lastEffect=null),$(ul,ul.current),r)break;return null;case 22:case 23:return t.lanes=0,Ll(e,t,n);case 24:wo(0,Oo,e.memoizedState.cache)}return Kl(e,t,n)}(e,t,n);Al=!!(131072&e.flags)}else Al=!1,ao&&1048576&t.flags&&eo(t,Wr,t.index);switch(t.lanes=0,t.tag){case 16:e:{e=t.pendingProps;var r=t.elementType,o=r._init;if(r=o(r._payload),t.type=r,"function"!=typeof r){if(null!=r){if((o=r.$$typeof)===x){t.tag=11,t=jl(null,t,r,e,n);break e}if(o===_){t.tag=14,t=Pl(null,t,r,e,n);break e}}throw t=L(r)||r,Error(i(306,t,""))}Ir(r)?(e=hl(r,e),t.tag=1,t=Il(null,t,r,e,n)):(t.tag=0,t=Dl(null,t,r,e,n))}return t;case 0:return Dl(e,t,t.type,t.pendingProps,n);case 1:return Il(e,t,r=t.type,o=hl(r,t.pendingProps),n);case 3:e:{if(V(t,t.stateNode.containerInfo),null===e)throw Error(i(387));r=t.pendingProps;var a=t.memoizedState;o=a.element,oa(e,t),da(t,r,null,n);var l=t.memoizedState;if(r=l.cache,wo(0,Oo,r),r!==a.cache&&So(t,[Oo],n,!0),ua(),r=l.element,a.isDehydrated){if(a={element:r,isDehydrated:!1,cache:l.cache},t.updateQueue.baseState=a,t.memoizedState=a,256&t.flags){t=Ml(e,t,r,n);break e}if(r!==o){ho(o=Er(Error(i(424)),t)),t=Ml(e,t,r,n);break e}if(9===(e=t.stateNode.containerInfo).nodeType)e=e.body;else e="HTML"===e.nodeName?e.ownerDocument.body:e;for(oo=bd(e.firstChild),ro=t,ao=!0,io=null,lo=!0,n=rl(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|4096,n=n.sibling}else{if(mo(),r===o){t=Kl(e,t,n);break e}Tl(e,t,r,n)}t=t.child}return t;case 26:return Rl(e,t),null===e?(n=Td(t.type,null,t.pendingProps,null))?t.memoizedState=n:ao||(n=t.type,e=t.pendingProps,(r=rd(H.current).createElement(n))[Le]=t,r[Oe]=e,ed(r,n,e),Ge(r),t.stateNode=r):t.memoizedState=Td(t.type,e.memoizedProps,t.pendingProps,e.memoizedState),null;case 27:return Q(t),null===e&&ao&&(r=t.stateNode=wd(t.type,t.pendingProps,H.current),ro=t,lo=!0,o=oo,fd(t.type)?(yd=o,oo=bd(r.firstChild)):oo=o),Tl(e,t,t.pendingProps.children,n),Rl(e,t),null===e&&(t.flags|=4194304),t.child;case 5:return null===e&&ao&&((o=r=oo)&&(null!==(r=function(e,t,n,r){for(;1===e.nodeType;){var o=n;if(e.nodeName.toLowerCase()!==t.toLowerCase()){if(!r&&("INPUT"!==e.nodeName||"hidden"!==e.type))break}else if(r){if(!e[ze])switch(t){case"meta":if(!e.hasAttribute("itemprop"))break;return e;case"link":if("stylesheet"===(a=e.getAttribute("rel"))&&e.hasAttribute("data-precedence"))break;if(a!==o.rel||e.getAttribute("href")!==(null==o.href||""===o.href?null:o.href)||e.getAttribute("crossorigin")!==(null==o.crossOrigin?null:o.crossOrigin)||e.getAttribute("title")!==(null==o.title?null:o.title))break;return e;case"style":if(e.hasAttribute("data-precedence"))break;return e;case"script":if(((a=e.getAttribute("src"))!==(null==o.src?null:o.src)||e.getAttribute("type")!==(null==o.type?null:o.type)||e.getAttribute("crossorigin")!==(null==o.crossOrigin?null:o.crossOrigin))&&a&&e.hasAttribute("async")&&!e.hasAttribute("itemprop"))break;return e;default:return e}}else{if("input"!==t||"hidden"!==e.type)return e;var a=null==o.name?null:""+o.name;if("hidden"===o.type&&e.getAttribute("name")===a)return e}if(null===(e=bd(e.nextSibling)))break}return null}(r,t.type,t.pendingProps,lo))?(t.stateNode=r,ro=t,oo=bd(r.firstChild),lo=!1,o=!0):o=!1),o||co(t)),Q(t),o=t.type,a=t.pendingProps,l=null!==e?e.memoizedProps:null,r=a.children,id(o,a)?r=null:null!==l&&id(o,l)&&(t.flags|=32),null!==t.memoizedState&&(o=La(e,t,Da,null,null,n),Qd._currentValue=o),Rl(e,t),Tl(e,t,r,n),t.child;case 6:return null===e&&ao&&((e=n=oo)&&(null!==(n=function(e,t,n){if(""===t)return null;for(;3!==e.nodeType;){if((1!==e.nodeType||"INPUT"!==e.nodeName||"hidden"!==e.type)&&!n)return null;if(null===(e=bd(e.nextSibling)))return null}return e}(n,t.pendingProps,lo))?(t.stateNode=n,ro=t,oo=null,e=!0):e=!1),e||co(t)),null;case 13:return Ul(e,t,n);case 4:return V(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=nl(t,null,r,n):Tl(e,t,r,n),t.child;case 11:return jl(e,t,t.type,t.pendingProps,n);case 7:return Tl(e,t,t.pendingProps,n),t.child;case 8:case 12:return Tl(e,t,t.pendingProps.children,n),t.child;case 10:return r=t.pendingProps,wo(0,t.type,r.value),Tl(e,t,r.children,n),t.child;case 9:return o=t.type._context,r=t.pendingProps.children,Co(t),r=r(o=Ao(o)),t.flags|=1,Tl(e,t,r,n),t.child;case 14:return Pl(e,t,t.type,t.pendingProps,n);case 15:return Nl(e,t,t.type,t.pendingProps,n);case 19:return Ql(e,t,n);case 31:return r=t.pendingProps,n=t.mode,r={mode:r.mode,children:r.children},null===e?((n=Hl(r,n)).ref=t.ref,t.child=n,n.return=t,t=n):((n=Mr(e.child,r)).ref=t.ref,t.child=n,n.return=t,t=n),t;case 22:return Ll(e,t,n);case 24:return Co(t),r=Ao(Oo),null===e?(null===(o=qo())&&(o=rc,a=Ro(),o.pooledCache=a,a.refCount++,null!==a&&(o.pooledCacheLanes|=n),o=a),t.memoizedState={parent:r,cache:o},ra(t),wo(0,Oo,o)):(0!==(e.lanes&n)&&(oa(e,t),da(t,null,null,n),ua()),o=e.memoizedState,a=t.memoizedState,o.parent!==r?(o={parent:r,cache:r},t.memoizedState=o,0===t.lanes&&(t.memoizedState=t.updateQueue.baseState=o),wo(0,Oo,r)):(r=a.cache,wo(0,Oo,r),r!==o.cache&&So(t,[Oo],n,!0))),Tl(e,t,t.pendingProps.children,n),t.child;case 29:throw t.pendingProps}throw Error(i(156,t.tag))}function Zl(e){e.flags|=4}function Jl(e,t){if("stylesheet"!==t.type||4&t.state.loading)e.flags&=-16777217;else if(e.flags|=16777216,!$d(t)){if(null!==(t=ol.current)&&((4194048&ac)===ac?null!==al:(62914560&ac)!==ac&&!(536870912&ac)||t!==al))throw Jo=Ko,Wo;e.flags|=8192}}function es(e,t){null!==t&&(e.flags|=4),16384&e.flags&&(t=22!==e.tag?Se():536870912,e.lanes|=t,bc|=t)}function ts(e,t){if(!ao)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function ns(e){var t=null!==e.alternate&&e.alternate.child===e.child,n=0,r=0;if(t)for(var o=e.child;null!==o;)n|=o.lanes|o.childLanes,r|=65011712&o.subtreeFlags,r|=65011712&o.flags,o.return=e,o=o.sibling;else for(o=e.child;null!==o;)n|=o.lanes|o.childLanes,r|=o.subtreeFlags,r|=o.flags,o.return=e,o=o.sibling;return e.subtreeFlags|=r,e.childLanes=n,t}function rs(e,t,n){var r=t.pendingProps;switch(no(t),t.tag){case 31:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:case 1:return ns(t),null;case 3:return n=t.stateNode,r=null,null!==e&&(r=e.memoizedState.cache),t.memoizedState.cache!==r&&(t.flags|=2048),ko(Oo),W(),n.pendingContext&&(n.context=n.pendingContext,n.pendingContext=null),null!==e&&null!==e.child||(fo(t)?Zl(t):null===e||e.memoizedState.isDehydrated&&!(256&t.flags)||(t.flags|=1024,go())),ns(t),null;case 26:return n=t.memoizedState,null===e?(Zl(t),null!==n?(ns(t),Jl(t,n)):(ns(t),t.flags&=-16777217)):n?n!==e.memoizedState?(Zl(t),ns(t),Jl(t,n)):(ns(t),t.flags&=-16777217):(e.memoizedProps!==r&&Zl(t),ns(t),t.flags&=-16777217),null;case 27:K(t),n=H.current;var o=t.type;if(null!==e&&null!=t.stateNode)e.memoizedProps!==r&&Zl(t);else{if(!r){if(null===t.stateNode)throw Error(i(166));return ns(t),null}e=U.current,fo(t)?uo(t):(e=wd(o,r,n),t.stateNode=e,Zl(t))}return ns(t),null;case 5:if(K(t),n=t.type,null!==e&&null!=t.stateNode)e.memoizedProps!==r&&Zl(t);else{if(!r){if(null===t.stateNode)throw Error(i(166));return ns(t),null}if(e=U.current,fo(t))uo(t);else{switch(o=rd(H.current),e){case 1:e=o.createElementNS("http://www.w3.org/2000/svg",n);break;case 2:e=o.createElementNS("http://www.w3.org/1998/Math/MathML",n);break;default:switch(n){case"svg":e=o.createElementNS("http://www.w3.org/2000/svg",n);break;case"math":e=o.createElementNS("http://www.w3.org/1998/Math/MathML",n);break;case"script":(e=o.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild);break;case"select":e="string"==typeof r.is?o.createElement("select",{is:r.is}):o.createElement("select"),r.multiple?e.multiple=!0:r.size&&(e.size=r.size);break;default:e="string"==typeof r.is?o.createElement(n,{is:r.is}):o.createElement(n)}}e[Le]=t,e[Oe]=r;e:for(o=t.child;null!==o;){if(5===o.tag||6===o.tag)e.appendChild(o.stateNode);else if(4!==o.tag&&27!==o.tag&&null!==o.child){o.child.return=o,o=o.child;continue}if(o===t)break e;for(;null===o.sibling;){if(null===o.return||o.return===t)break e;o=o.return}o.sibling.return=o.return,o=o.sibling}t.stateNode=e;e:switch(ed(e,n,r),n){case"button":case"input":case"select":case"textarea":e=!!r.autoFocus;break e;case"img":e=!0;break e;default:e=!1}e&&Zl(t)}}return ns(t),t.flags&=-16777217,null;case 6:if(e&&null!=t.stateNode)e.memoizedProps!==r&&Zl(t);else{if("string"!=typeof r&&null===t.stateNode)throw Error(i(166));if(e=H.current,fo(t)){if(e=t.stateNode,n=t.memoizedProps,r=null,null!==(o=ro))switch(o.tag){case 27:case 5:r=o.memoizedProps}e[Le]=t,(e=!!(e.nodeValue===n||null!==r&&!0===r.suppressHydrationWarning||Yu(e.nodeValue,n)))||co(t)}else(e=rd(e).createTextNode(r))[Le]=t,t.stateNode=e}return ns(t),null;case 13:if(r=t.memoizedState,null===e||null!==e.memoizedState&&null!==e.memoizedState.dehydrated){if(o=fo(t),null!==r&&null!==r.dehydrated){if(null===e){if(!o)throw Error(i(318));if(!(o=null!==(o=t.memoizedState)?o.dehydrated:null))throw Error(i(317));o[Le]=t}else mo(),!(128&t.flags)&&(t.memoizedState=null),t.flags|=4;ns(t),o=!1}else o=go(),null!==e&&null!==e.memoizedState&&(e.memoizedState.hydrationErrors=o),o=!0;if(!o)return 256&t.flags?(cl(t),t):(cl(t),null)}if(cl(t),128&t.flags)return t.lanes=n,t;if(n=null!==r,e=null!==e&&null!==e.memoizedState,n){o=null,null!==(r=t.child).alternate&&null!==r.alternate.memoizedState&&null!==r.alternate.memoizedState.cachePool&&(o=r.alternate.memoizedState.cachePool.pool);var a=null;null!==r.memoizedState&&null!==r.memoizedState.cachePool&&(a=r.memoizedState.cachePool.pool),a!==o&&(r.flags|=2048)}return n!==e&&n&&(t.child.flags|=8192),es(t,t.updateQueue),ns(t),null;case 4:return W(),null===e&&Bu(t.stateNode.containerInfo),ns(t),null;case 10:return ko(t.type),ns(t),null;case 19:if(B(ul),null===(o=t.memoizedState))return ns(t),null;if(r=!!(128&t.flags),null===(a=o.rendering))if(r)ts(o,!1);else{if(0!==pc||null!==e&&128&e.flags)for(e=t.child;null!==e;){if(null!==(a=dl(e))){for(t.flags|=128,ts(o,!1),e=a.updateQueue,t.updateQueue=e,es(t,e),t.subtreeFlags=0,e=n,n=t.child;null!==n;)zr(n,e),n=n.sibling;return $(ul,1&ul.current|2),t.child}e=e.sibling}null!==o.tail&&te()>xc&&(t.flags|=128,r=!0,ts(o,!1),t.lanes=4194304)}else{if(!r)if(null!==(e=dl(a))){if(t.flags|=128,r=!0,e=e.updateQueue,t.updateQueue=e,es(t,e),ts(o,!0),null===o.tail&&"hidden"===o.tailMode&&!a.alternate&&!ao)return ns(t),null}else 2*te()-o.renderingStartTime>xc&&536870912!==n&&(t.flags|=128,r=!0,ts(o,!1),t.lanes=4194304);o.isBackwards?(a.sibling=t.child,t.child=a):(null!==(e=o.last)?e.sibling=a:t.child=a,o.last=a)}return null!==o.tail?(t=o.tail,o.rendering=t,o.tail=t.sibling,o.renderingStartTime=te(),t.sibling=null,e=ul.current,$(ul,r?1&e|2:1&e),t):(ns(t),null);case 22:case 23:return cl(t),ya(),r=null!==t.memoizedState,null!==e?null!==e.memoizedState!==r&&(t.flags|=8192):r&&(t.flags|=8192),r?!!(536870912&n)&&!(128&t.flags)&&(ns(t),6&t.subtreeFlags&&(t.flags|=8192)):ns(t),null!==(n=t.updateQueue)&&es(t,n.retryQueue),n=null,null!==e&&null!==e.memoizedState&&null!==e.memoizedState.cachePool&&(n=e.memoizedState.cachePool.pool),r=null,null!==t.memoizedState&&null!==t.memoizedState.cachePool&&(r=t.memoizedState.cachePool.pool),r!==n&&(t.flags|=2048),null!==e&&B(Uo),null;case 24:return n=null,null!==e&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),ko(Oo),ns(t),null;case 25:case 30:return null}throw Error(i(156,t.tag))}function os(e,t){switch(no(t),t.tag){case 1:return 65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 3:return ko(Oo),W(),65536&(e=t.flags)&&!(128&e)?(t.flags=-65537&e|128,t):null;case 26:case 27:case 5:return K(t),null;case 13:if(cl(t),null!==(e=t.memoizedState)&&null!==e.dehydrated){if(null===t.alternate)throw Error(i(340));mo()}return 65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 19:return B(ul),null;case 4:return W(),null;case 10:return ko(t.type),null;case 22:case 23:return cl(t),ya(),null!==e&&B(Uo),65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 24:return ko(Oo),null;default:return null}}function as(e,t){switch(no(t),t.tag){case 3:ko(Oo),W();break;case 26:case 27:case 5:K(t);break;case 4:W();break;case 13:cl(t);break;case 19:B(ul);break;case 10:ko(t.type);break;case 22:case 23:cl(t),ya(),null!==e&&B(Uo);break;case 24:ko(Oo)}}function is(e,t){try{var n=t.updateQueue,r=null!==n?n.lastEffect:null;if(null!==r){var o=r.next;n=o;do{if((n.tag&e)===e){r=void 0;var a=n.create,i=n.inst;r=a(),i.destroy=r}n=n.next}while(n!==o)}}catch(l){uu(t,t.return,l)}}function ls(e,t,n){try{var r=t.updateQueue,o=null!==r?r.lastEffect:null;if(null!==o){var a=o.next;r=a;do{if((r.tag&e)===e){var i=r.inst,l=i.destroy;if(void 0!==l){i.destroy=void 0,o=t;var s=n,c=l;try{c()}catch(u){uu(o,s,u)}}}r=r.next}while(r!==a)}}catch(u){uu(t,t.return,u)}}function ss(e){var t=e.updateQueue;if(null!==t){var n=e.stateNode;try{fa(t,n)}catch(r){uu(e,e.return,r)}}}function cs(e,t,n){n.props=hl(e.type,e.memoizedProps),n.state=e.memoizedState;try{n.componentWillUnmount()}catch(r){uu(e,t,r)}}function us(e,t){try{var n=e.ref;if(null!==n){switch(e.tag){case 26:case 27:case 5:var r=e.stateNode;break;default:r=e.stateNode}"function"==typeof n?e.refCleanup=n(r):n.current=r}}catch(o){uu(e,t,o)}}function ds(e,t){var n=e.ref,r=e.refCleanup;if(null!==n)if("function"==typeof r)try{r()}catch(o){uu(e,t,o)}finally{e.refCleanup=null,null!=(e=e.alternate)&&(e.refCleanup=null)}else if("function"==typeof n)try{n(null)}catch(a){uu(e,t,a)}else n.current=null}function ps(e){var t=e.type,n=e.memoizedProps,r=e.stateNode;try{e:switch(t){case"button":case"input":case"select":case"textarea":n.autoFocus&&r.focus();break e;case"img":n.src?r.src=n.src:n.srcSet&&(r.srcset=n.srcSet)}}catch(o){uu(e,e.return,o)}}function fs(e,t,n){try{var r=e.stateNode;!function(e,t,n,r){switch(t){case"div":case"span":case"svg":case"path":case"a":case"g":case"p":case"li":break;case"input":var o=null,a=null,l=null,s=null,c=null,u=null,d=null;for(m in n){var p=n[m];if(n.hasOwnProperty(m)&&null!=p)switch(m){case"checked":case"value":break;case"defaultValue":c=p;default:r.hasOwnProperty(m)||Zu(e,t,m,null,r,p)}}for(var f in r){var m=r[f];if(p=n[f],r.hasOwnProperty(f)&&(null!=m||null!=p))switch(f){case"type":a=m;break;case"name":o=m;break;case"checked":u=m;break;case"defaultChecked":d=m;break;case"value":l=m;break;case"defaultValue":s=m;break;case"children":case"dangerouslySetInnerHTML":if(null!=m)throw Error(i(137,t));break;default:m!==p&&Zu(e,t,f,m,r,p)}}return void ht(e,l,s,c,u,d,a,o);case"select":for(a in m=l=s=f=null,n)if(c=n[a],n.hasOwnProperty(a)&&null!=c)switch(a){case"value":break;case"multiple":m=c;default:r.hasOwnProperty(a)||Zu(e,t,a,null,r,c)}for(o in r)if(a=r[o],c=n[o],r.hasOwnProperty(o)&&(null!=a||null!=c))switch(o){case"value":f=a;break;case"defaultValue":s=a;break;case"multiple":l=a;default:a!==c&&Zu(e,t,o,a,r,c)}return t=s,n=l,r=m,void(null!=f?vt(e,!!n,f,!1):!!r!=!!n&&(null!=t?vt(e,!!n,t,!0):vt(e,!!n,n?[]:"",!1)));case"textarea":for(s in m=f=null,n)if(o=n[s],n.hasOwnProperty(s)&&null!=o&&!r.hasOwnProperty(s))switch(s){case"value":case"children":break;default:Zu(e,t,s,null,r,o)}for(l in r)if(o=r[l],a=n[l],r.hasOwnProperty(l)&&(null!=o||null!=a))switch(l){case"value":f=o;break;case"defaultValue":m=o;break;case"children":break;case"dangerouslySetInnerHTML":if(null!=o)throw Error(i(91));break;default:o!==a&&Zu(e,t,l,o,r,a)}return void wt(e,f,m);case"option":for(var g in n)if(f=n[g],n.hasOwnProperty(g)&&null!=f&&!r.hasOwnProperty(g))if("selected"===g)e.selected=!1;else Zu(e,t,g,null,r,f);for(c in r)if(f=r[c],m=n[c],r.hasOwnProperty(c)&&f!==m&&(null!=f||null!=m))if("selected"===c)e.selected=f&&"function"!=typeof f&&"symbol"!=typeof f;else Zu(e,t,c,f,r,m);return;case"img":case"link":case"area":case"base":case"br":case"col":case"embed":case"hr":case"keygen":case"meta":case"param":case"source":case"track":case"wbr":case"menuitem":for(var h in n)f=n[h],n.hasOwnProperty(h)&&null!=f&&!r.hasOwnProperty(h)&&Zu(e,t,h,null,r,f);for(u in r)if(f=r[u],m=n[u],r.hasOwnProperty(u)&&f!==m&&(null!=f||null!=m))switch(u){case"children":case"dangerouslySetInnerHTML":if(null!=f)throw Error(i(137,t));break;default:Zu(e,t,u,f,r,m)}return;default:if(Ct(t)){for(var b in n)f=n[b],n.hasOwnProperty(b)&&void 0!==f&&!r.hasOwnProperty(b)&&Ju(e,t,b,void 0,r,f);for(d in r)f=r[d],m=n[d],!r.hasOwnProperty(d)||f===m||void 0===f&&void 0===m||Ju(e,t,d,f,r,m);return}}for(var y in n)f=n[y],n.hasOwnProperty(y)&&null!=f&&!r.hasOwnProperty(y)&&Zu(e,t,y,null,r,f);for(p in r)f=r[p],m=n[p],!r.hasOwnProperty(p)||f===m||null==f&&null==m||Zu(e,t,p,f,r,m)}(r,e.type,n,t),r[Oe]=t}catch(o){uu(e,e.return,o)}}function ms(e){return 5===e.tag||3===e.tag||26===e.tag||27===e.tag&&fd(e.type)||4===e.tag}function gs(e){e:for(;;){for(;null===e.sibling;){if(null===e.return||ms(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;5!==e.tag&&6!==e.tag&&18!==e.tag;){if(27===e.tag&&fd(e.type))continue e;if(2&e.flags)continue e;if(null===e.child||4===e.tag)continue e;e.child.return=e,e=e.child}if(!(2&e.flags))return e.stateNode}}function hs(e,t,n){var r=e.tag;if(5===r||6===r)e=e.stateNode,t?(9===n.nodeType?n.body:"HTML"===n.nodeName?n.ownerDocument.body:n).insertBefore(e,t):((t=9===n.nodeType?n.body:"HTML"===n.nodeName?n.ownerDocument.body:n).appendChild(e),null!=(n=n._reactRootContainer)||null!==t.onclick||(t.onclick=Xu));else if(4!==r&&(27===r&&fd(e.type)&&(n=e.stateNode,t=null),null!==(e=e.child)))for(hs(e,t,n),e=e.sibling;null!==e;)hs(e,t,n),e=e.sibling}function bs(e,t,n){var r=e.tag;if(5===r||6===r)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&(27===r&&fd(e.type)&&(n=e.stateNode),null!==(e=e.child)))for(bs(e,t,n),e=e.sibling;null!==e;)bs(e,t,n),e=e.sibling}function ys(e){var t=e.stateNode,n=e.memoizedProps;try{for(var r=e.type,o=t.attributes;o.length;)t.removeAttributeNode(o[0]);ed(t,r,n),t[Le]=e,t[Oe]=n}catch(a){uu(e,e.return,a)}}var vs=!1,ws=!1,ks=!1,xs="function"==typeof WeakSet?WeakSet:Set,Ss=null;function Es(e,t,n){var r=n.flags;switch(n.tag){case 0:case 11:case 15:Is(e,n),4&r&&is(5,n);break;case 1:if(Is(e,n),4&r)if(e=n.stateNode,null===t)try{e.componentDidMount()}catch(i){uu(n,n.return,i)}else{var o=hl(n.type,t.memoizedProps);t=t.memoizedState;try{e.componentDidUpdate(o,t,e.__reactInternalSnapshotBeforeUpdate)}catch(l){uu(n,n.return,l)}}64&r&&ss(n),512&r&&us(n,n.return);break;case 3:if(Is(e,n),64&r&&null!==(e=n.updateQueue)){if(t=null,null!==n.child)switch(n.child.tag){case 27:case 5:case 1:t=n.child.stateNode}try{fa(e,t)}catch(i){uu(n,n.return,i)}}break;case 27:null===t&&4&r&&ys(n);case 26:case 5:Is(e,n),null===t&&4&r&&ps(n),512&r&&us(n,n.return);break;case 12:Is(e,n);break;case 13:Is(e,n),4&r&&Ps(e,n),64&r&&(null!==(e=n.memoizedState)&&(null!==(e=e.dehydrated)&&function(e,t){var n=e.ownerDocument;if("$?"!==e.data||"complete"===n.readyState)t();else{var r=function(){t(),n.removeEventListener("DOMContentLoaded",r)};n.addEventListener("DOMContentLoaded",r),e._reactRetry=r}}(e,n=mu.bind(null,n))));break;case 22:if(!(r=null!==n.memoizedState||vs)){t=null!==t&&null!==t.memoizedState||ws,o=vs;var a=ws;vs=r,(ws=t)&&!a?zs(e,n,!!(8772&n.subtreeFlags)):Is(e,n),vs=o,ws=a}break;case 30:break;default:Is(e,n)}}function _s(e){var t=e.alternate;null!==t&&(e.alternate=null,_s(t)),e.child=null,e.deletions=null,e.sibling=null,5===e.tag&&(null!==(t=e.stateNode)&&Be(t)),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}var Cs=null,As=!1;function Ts(e,t,n){for(n=n.child;null!==n;)js(e,t,n),n=n.sibling}function js(e,t,n){if(de&&"function"==typeof de.onCommitFiberUnmount)try{de.onCommitFiberUnmount(ue,n)}catch(a){}switch(n.tag){case 26:ws||ds(n,t),Ts(e,t,n),n.memoizedState?n.memoizedState.count--:n.stateNode&&(n=n.stateNode).parentNode.removeChild(n);break;case 27:ws||ds(n,t);var r=Cs,o=As;fd(n.type)&&(Cs=n.stateNode,As=!1),Ts(e,t,n),kd(n.stateNode),Cs=r,As=o;break;case 5:ws||ds(n,t);case 6:if(r=Cs,o=As,Cs=null,Ts(e,t,n),As=o,null!==(Cs=r))if(As)try{(9===Cs.nodeType?Cs.body:"HTML"===Cs.nodeName?Cs.ownerDocument.body:Cs).removeChild(n.stateNode)}catch(i){uu(n,t,i)}else try{Cs.removeChild(n.stateNode)}catch(i){uu(n,t,i)}break;case 18:null!==Cs&&(As?(md(9===(e=Cs).nodeType?e.body:"HTML"===e.nodeName?e.ownerDocument.body:e,n.stateNode),Ap(e)):md(Cs,n.stateNode));break;case 4:r=Cs,o=As,Cs=n.stateNode.containerInfo,As=!0,Ts(e,t,n),Cs=r,As=o;break;case 0:case 11:case 14:case 15:ws||ls(2,n,t),ws||ls(4,n,t),Ts(e,t,n);break;case 1:ws||(ds(n,t),"function"==typeof(r=n.stateNode).componentWillUnmount&&cs(n,t,r)),Ts(e,t,n);break;case 21:Ts(e,t,n);break;case 22:ws=(r=ws)||null!==n.memoizedState,Ts(e,t,n),ws=r;break;default:Ts(e,t,n)}}function Ps(e,t){if(null===t.memoizedState&&(null!==(e=t.alternate)&&(null!==(e=e.memoizedState)&&null!==(e=e.dehydrated))))try{Ap(e)}catch(n){uu(t,t.return,n)}}function Ns(e,t){var n=function(e){switch(e.tag){case 13:case 19:var t=e.stateNode;return null===t&&(t=e.stateNode=new xs),t;case 22:return null===(t=(e=e.stateNode)._retryCache)&&(t=e._retryCache=new xs),t;default:throw Error(i(435,e.tag))}}(e);t.forEach(function(t){var r=gu.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))})}function Ls(e,t){var n=t.deletions;if(null!==n)for(var r=0;r<n.length;r++){var o=n[r],a=e,l=t,s=l;e:for(;null!==s;){switch(s.tag){case 27:if(fd(s.type)){Cs=s.stateNode,As=!1;break e}break;case 5:Cs=s.stateNode,As=!1;break e;case 3:case 4:Cs=s.stateNode.containerInfo,As=!0;break e}s=s.return}if(null===Cs)throw Error(i(160));js(a,l,o),Cs=null,As=!1,null!==(a=o.alternate)&&(a.return=null),o.return=null}if(13878&t.subtreeFlags)for(t=t.child;null!==t;)Rs(t,e),t=t.sibling}var Os=null;function Rs(e,t){var n=e.alternate,r=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:Ls(t,e),Ds(e),4&r&&(ls(3,e,e.return),is(3,e),ls(5,e,e.return));break;case 1:Ls(t,e),Ds(e),512&r&&(ws||null===n||ds(n,n.return)),64&r&&vs&&(null!==(e=e.updateQueue)&&(null!==(r=e.callbacks)&&(n=e.shared.hiddenCallbacks,e.shared.hiddenCallbacks=null===n?r:n.concat(r))));break;case 26:var o=Os;if(Ls(t,e),Ds(e),512&r&&(ws||null===n||ds(n,n.return)),4&r){var a=null!==n?n.memoizedState:null;if(r=e.memoizedState,null===n)if(null===r)if(null===e.stateNode){e:{r=e.type,n=e.memoizedProps,o=o.ownerDocument||o;t:switch(r){case"title":(!(a=o.getElementsByTagName("title")[0])||a[ze]||a[Le]||"http://www.w3.org/2000/svg"===a.namespaceURI||a.hasAttribute("itemprop"))&&(a=o.createElement(r),o.head.insertBefore(a,o.querySelector("head > title"))),ed(a,r,n),a[Le]=e,Ge(a),r=a;break e;case"link":var l=zd("link","href",o).get(r+(n.href||""));if(l)for(var s=0;s<l.length;s++)if((a=l[s]).getAttribute("href")===(null==n.href||""===n.href?null:n.href)&&a.getAttribute("rel")===(null==n.rel?null:n.rel)&&a.getAttribute("title")===(null==n.title?null:n.title)&&a.getAttribute("crossorigin")===(null==n.crossOrigin?null:n.crossOrigin)){l.splice(s,1);break t}ed(a=o.createElement(r),r,n),o.head.appendChild(a);break;case"meta":if(l=zd("meta","content",o).get(r+(n.content||"")))for(s=0;s<l.length;s++)if((a=l[s]).getAttribute("content")===(null==n.content?null:""+n.content)&&a.getAttribute("name")===(null==n.name?null:n.name)&&a.getAttribute("property")===(null==n.property?null:n.property)&&a.getAttribute("http-equiv")===(null==n.httpEquiv?null:n.httpEquiv)&&a.getAttribute("charset")===(null==n.charSet?null:n.charSet)){l.splice(s,1);break t}ed(a=o.createElement(r),r,n),o.head.appendChild(a);break;default:throw Error(i(468,r))}a[Le]=e,Ge(a),r=a}e.stateNode=r}else Bd(o,e.type,e.stateNode);else e.stateNode=Rd(o,r,e.memoizedProps);else a!==r?(null===a?null!==n.stateNode&&(n=n.stateNode).parentNode.removeChild(n):a.count--,null===r?Bd(o,e.type,e.stateNode):Rd(o,r,e.memoizedProps)):null===r&&null!==e.stateNode&&fs(e,e.memoizedProps,n.memoizedProps)}break;case 27:Ls(t,e),Ds(e),512&r&&(ws||null===n||ds(n,n.return)),null!==n&&4&r&&fs(e,e.memoizedProps,n.memoizedProps);break;case 5:if(Ls(t,e),Ds(e),512&r&&(ws||null===n||ds(n,n.return)),32&e.flags){o=e.stateNode;try{xt(o,"")}catch(m){uu(e,e.return,m)}}4&r&&null!=e.stateNode&&fs(e,o=e.memoizedProps,null!==n?n.memoizedProps:o),1024&r&&(ks=!0);break;case 6:if(Ls(t,e),Ds(e),4&r){if(null===e.stateNode)throw Error(i(162));r=e.memoizedProps,n=e.stateNode;try{n.nodeValue=r}catch(m){uu(e,e.return,m)}}break;case 3:if(Md=null,o=Os,Os=Ed(t.containerInfo),Ls(t,e),Os=o,Ds(e),4&r&&null!==n&&n.memoizedState.isDehydrated)try{Ap(t.containerInfo)}catch(m){uu(e,e.return,m)}ks&&(ks=!1,Fs(e));break;case 4:r=Os,Os=Ed(e.stateNode.containerInfo),Ls(t,e),Ds(e),Os=r;break;case 12:default:Ls(t,e),Ds(e);break;case 13:Ls(t,e),Ds(e),8192&e.child.flags&&null!==e.memoizedState!=(null!==n&&null!==n.memoizedState)&&(kc=te()),4&r&&(null!==(r=e.updateQueue)&&(e.updateQueue=null,Ns(e,r)));break;case 22:o=null!==e.memoizedState;var c=null!==n&&null!==n.memoizedState,u=vs,d=ws;if(vs=u||o,ws=d||c,Ls(t,e),ws=d,vs=u,Ds(e),8192&r)e:for(t=e.stateNode,t._visibility=o?-2&t._visibility:1|t._visibility,o&&(null===n||c||vs||ws||Ms(e)),n=null,t=e;;){if(5===t.tag||26===t.tag){if(null===n){c=n=t;try{if(a=c.stateNode,o)"function"==typeof(l=a.style).setProperty?l.setProperty("display","none","important"):l.display="none";else{s=c.stateNode;var p=c.memoizedProps.style,f=null!=p&&p.hasOwnProperty("display")?p.display:null;s.style.display=null==f||"boolean"==typeof f?"":(""+f).trim()}}catch(m){uu(c,c.return,m)}}}else if(6===t.tag){if(null===n){c=t;try{c.stateNode.nodeValue=o?"":c.memoizedProps}catch(m){uu(c,c.return,m)}}}else if((22!==t.tag&&23!==t.tag||null===t.memoizedState||t===e)&&null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break e;for(;null===t.sibling;){if(null===t.return||t.return===e)break e;n===t&&(n=null),t=t.return}n===t&&(n=null),t.sibling.return=t.return,t=t.sibling}4&r&&(null!==(r=e.updateQueue)&&(null!==(n=r.retryQueue)&&(r.retryQueue=null,Ns(e,n))));break;case 19:Ls(t,e),Ds(e),4&r&&(null!==(r=e.updateQueue)&&(e.updateQueue=null,Ns(e,r)));case 30:case 21:}}function Ds(e){var t=e.flags;if(2&t){try{for(var n,r=e.return;null!==r;){if(ms(r)){n=r;break}r=r.return}if(null==n)throw Error(i(160));switch(n.tag){case 27:var o=n.stateNode;bs(e,gs(e),o);break;case 5:var a=n.stateNode;32&n.flags&&(xt(a,""),n.flags&=-33),bs(e,gs(e),a);break;case 3:case 4:var l=n.stateNode.containerInfo;hs(e,gs(e),l);break;default:throw Error(i(161))}}catch(s){uu(e,e.return,s)}e.flags&=-3}4096&t&&(e.flags&=-4097)}function Fs(e){if(1024&e.subtreeFlags)for(e=e.child;null!==e;){var t=e;Fs(t),5===t.tag&&1024&t.flags&&t.stateNode.reset(),e=e.sibling}}function Is(e,t){if(8772&t.subtreeFlags)for(t=t.child;null!==t;)Es(e,t.alternate,t),t=t.sibling}function Ms(e){for(e=e.child;null!==e;){var t=e;switch(t.tag){case 0:case 11:case 14:case 15:ls(4,t,t.return),Ms(t);break;case 1:ds(t,t.return);var n=t.stateNode;"function"==typeof n.componentWillUnmount&&cs(t,t.return,n),Ms(t);break;case 27:kd(t.stateNode);case 26:case 5:ds(t,t.return),Ms(t);break;case 22:null===t.memoizedState&&Ms(t);break;default:Ms(t)}e=e.sibling}}function zs(e,t,n){for(n=n&&!!(8772&t.subtreeFlags),t=t.child;null!==t;){var r=t.alternate,o=e,a=t,i=a.flags;switch(a.tag){case 0:case 11:case 15:zs(o,a,n),is(4,a);break;case 1:if(zs(o,a,n),"function"==typeof(o=(r=a).stateNode).componentDidMount)try{o.componentDidMount()}catch(c){uu(r,r.return,c)}if(null!==(o=(r=a).updateQueue)){var l=r.stateNode;try{var s=o.shared.hiddenCallbacks;if(null!==s)for(o.shared.hiddenCallbacks=null,o=0;o<s.length;o++)pa(s[o],l)}catch(c){uu(r,r.return,c)}}n&&64&i&&ss(a),us(a,a.return);break;case 27:ys(a);case 26:case 5:zs(o,a,n),n&&null===r&&4&i&&ps(a),us(a,a.return);break;case 12:zs(o,a,n);break;case 13:zs(o,a,n),n&&4&i&&Ps(o,a);break;case 22:null===a.memoizedState&&zs(o,a,n),us(a,a.return);break;case 30:break;default:zs(o,a,n)}t=t.sibling}}function Bs(e,t){var n=null;null!==e&&null!==e.memoizedState&&null!==e.memoizedState.cachePool&&(n=e.memoizedState.cachePool.pool),e=null,null!==t.memoizedState&&null!==t.memoizedState.cachePool&&(e=t.memoizedState.cachePool.pool),e!==n&&(null!=e&&e.refCount++,null!=n&&Do(n))}function $s(e,t){e=null,null!==t.alternate&&(e=t.alternate.memoizedState.cache),(t=t.memoizedState.cache)!==e&&(t.refCount++,null!=e&&Do(e))}function Us(e,t,n,r){if(10256&t.subtreeFlags)for(t=t.child;null!==t;)qs(e,t,n,r),t=t.sibling}function qs(e,t,n,r){var o=t.flags;switch(t.tag){case 0:case 11:case 15:Us(e,t,n,r),2048&o&&is(9,t);break;case 1:case 13:default:Us(e,t,n,r);break;case 3:Us(e,t,n,r),2048&o&&(e=null,null!==t.alternate&&(e=t.alternate.memoizedState.cache),(t=t.memoizedState.cache)!==e&&(t.refCount++,null!=e&&Do(e)));break;case 12:if(2048&o){Us(e,t,n,r),e=t.stateNode;try{var a=t.memoizedProps,i=a.id,l=a.onPostCommit;"function"==typeof l&&l(i,null===t.alternate?"mount":"update",e.passiveEffectDuration,-0)}catch(s){uu(t,t.return,s)}}else Us(e,t,n,r);break;case 23:break;case 22:a=t.stateNode,i=t.alternate,null!==t.memoizedState?2&a._visibility?Us(e,t,n,r):Gs(e,t):2&a._visibility?Us(e,t,n,r):(a._visibility|=2,Hs(e,t,n,r,!!(10256&t.subtreeFlags))),2048&o&&Bs(i,t);break;case 24:Us(e,t,n,r),2048&o&&$s(t.alternate,t)}}function Hs(e,t,n,r,o){for(o=o&&!!(10256&t.subtreeFlags),t=t.child;null!==t;){var a=e,i=t,l=n,s=r,c=i.flags;switch(i.tag){case 0:case 11:case 15:Hs(a,i,l,s,o),is(8,i);break;case 23:break;case 22:var u=i.stateNode;null!==i.memoizedState?2&u._visibility?Hs(a,i,l,s,o):Gs(a,i):(u._visibility|=2,Hs(a,i,l,s,o)),o&&2048&c&&Bs(i.alternate,i);break;case 24:Hs(a,i,l,s,o),o&&2048&c&&$s(i.alternate,i);break;default:Hs(a,i,l,s,o)}t=t.sibling}}function Gs(e,t){if(10256&t.subtreeFlags)for(t=t.child;null!==t;){var n=e,r=t,o=r.flags;switch(r.tag){case 22:Gs(n,r),2048&o&&Bs(r.alternate,r);break;case 24:Gs(n,r),2048&o&&$s(r.alternate,r);break;default:Gs(n,r)}t=t.sibling}}var Vs=8192;function Ws(e){if(e.subtreeFlags&Vs)for(e=e.child;null!==e;)Qs(e),e=e.sibling}function Qs(e){switch(e.tag){case 26:Ws(e),e.flags&Vs&&null!==e.memoizedState&&function(e,t,n){if(null===Ud)throw Error(i(475));var r=Ud;if(!("stylesheet"!==t.type||"string"==typeof n.media&&!1===matchMedia(n.media).matches||4&t.state.loading)){if(null===t.instance){var o=jd(n.href),a=e.querySelector(Pd(o));if(a)return null!==(e=a._p)&&"object"==typeof e&&"function"==typeof e.then&&(r.count++,r=Hd.bind(r),e.then(r,r)),t.state.loading|=4,t.instance=a,void Ge(a);a=e.ownerDocument||e,n=Nd(n),(o=xd.get(o))&&Fd(n,o),Ge(a=a.createElement("link"));var l=a;l._p=new Promise(function(e,t){l.onload=e,l.onerror=t}),ed(a,"link",n),t.instance=a}null===r.stylesheets&&(r.stylesheets=new Map),r.stylesheets.set(t,e),(e=t.state.preload)&&!(3&t.state.loading)&&(r.count++,t=Hd.bind(r),e.addEventListener("load",t),e.addEventListener("error",t))}}(Os,e.memoizedState,e.memoizedProps);break;case 5:default:Ws(e);break;case 3:case 4:var t=Os;Os=Ed(e.stateNode.containerInfo),Ws(e),Os=t;break;case 22:null===e.memoizedState&&(null!==(t=e.alternate)&&null!==t.memoizedState?(t=Vs,Vs=16777216,Ws(e),Vs=t):Ws(e))}}function Ks(e){var t=e.alternate;if(null!==t&&null!==(e=t.child)){t.child=null;do{t=e.sibling,e.sibling=null,e=t}while(null!==e)}}function Ys(e){var t=e.deletions;if(16&e.flags){if(null!==t)for(var n=0;n<t.length;n++){var r=t[n];Ss=r,Js(r,e)}Ks(e)}if(10256&e.subtreeFlags)for(e=e.child;null!==e;)Xs(e),e=e.sibling}function Xs(e){switch(e.tag){case 0:case 11:case 15:Ys(e),2048&e.flags&&ls(9,e,e.return);break;case 3:case 12:default:Ys(e);break;case 22:var t=e.stateNode;null!==e.memoizedState&&2&t._visibility&&(null===e.return||13!==e.return.tag)?(t._visibility&=-3,Zs(e)):Ys(e)}}function Zs(e){var t=e.deletions;if(16&e.flags){if(null!==t)for(var n=0;n<t.length;n++){var r=t[n];Ss=r,Js(r,e)}Ks(e)}for(e=e.child;null!==e;){switch((t=e).tag){case 0:case 11:case 15:ls(8,t,t.return),Zs(t);break;case 22:2&(n=t.stateNode)._visibility&&(n._visibility&=-3,Zs(t));break;default:Zs(t)}e=e.sibling}}function Js(e,t){for(;null!==Ss;){var n=Ss;switch(n.tag){case 0:case 11:case 15:ls(8,n,t);break;case 23:case 22:if(null!==n.memoizedState&&null!==n.memoizedState.cachePool){var r=n.memoizedState.cachePool.pool;null!=r&&r.refCount++}break;case 24:Do(n.memoizedState.cache)}if(null!==(r=n.child))r.return=n,Ss=r;else e:for(n=e;null!==Ss;){var o=(r=Ss).sibling,a=r.return;if(_s(r),r===n){Ss=null;break e}if(null!==o){o.return=a,Ss=o;break e}Ss=a}}}var ec={getCacheForType:function(e){var t=Ao(Oo),n=t.data.get(e);return void 0===n&&(n=e(),t.data.set(e,n)),n}},tc="function"==typeof WeakMap?WeakMap:Map,nc=0,rc=null,oc=null,ac=0,ic=0,lc=null,sc=!1,cc=!1,uc=!1,dc=0,pc=0,fc=0,mc=0,gc=0,hc=0,bc=0,yc=null,vc=null,wc=!1,kc=0,xc=1/0,Sc=null,Ec=null,_c=0,Cc=null,Ac=null,Tc=0,jc=0,Pc=null,Nc=null,Lc=0,Oc=null;function Rc(){if(2&nc&&0!==ac)return ac&-ac;if(null!==R.T){return 0!==Mo?Mo:ju()}return Pe()}function Dc(){0===hc&&(hc=536870912&ac&&!ao?536870912:xe());var e=ol.current;return null!==e&&(e.flags|=32),hc}function Fc(e,t,n){(e!==rc||2!==ic&&9!==ic)&&null===e.cancelPendingCommit||(qc(e,0),Bc(e,ac,hc,!1)),_e(e,n),2&nc&&e===rc||(e===rc&&(!(2&nc)&&(mc|=n),4===pc&&Bc(e,ac,hc,!1)),xu(e))}function Ic(e,t,n){if(6&nc)throw Error(i(327));for(var r=!n&&!(124&t)&&0===(t&e.expiredLanes)||we(e,t),o=r?function(e,t){var n=nc;nc|=2;var r=Gc(),o=Vc();rc!==e||ac!==t?(Sc=null,xc=te()+500,qc(e,t)):cc=we(e,t);e:for(;;)try{if(0!==ic&&null!==oc){t=oc;var a=lc;t:switch(ic){case 1:ic=0,lc=null,Jc(e,t,a,1);break;case 2:case 9:if(Yo(a)){ic=0,lc=null,Zc(t);break}t=function(){2!==ic&&9!==ic||rc!==e||(ic=7),xu(e)},a.then(t,t);break e;case 3:ic=7;break e;case 4:ic=5;break e;case 7:Yo(a)?(ic=0,lc=null,Zc(t)):(ic=0,lc=null,Jc(e,t,a,7));break;case 5:var l=null;switch(oc.tag){case 26:l=oc.memoizedState;case 5:case 27:var s=oc;if(!l||$d(l)){ic=0,lc=null;var c=s.sibling;if(null!==c)oc=c;else{var u=s.return;null!==u?(oc=u,eu(u)):oc=null}break t}}ic=0,lc=null,Jc(e,t,a,5);break;case 6:ic=0,lc=null,Jc(e,t,a,6);break;case 8:Uc(),pc=6;break e;default:throw Error(i(462))}}Yc();break}catch(d){Hc(e,d)}return vo=yo=null,R.H=r,R.A=o,nc=n,null!==oc?0:(rc=null,ac=0,Tr(),pc)}(e,t):Qc(e,t,!0),a=r;;){if(0===o){cc&&!r&&Bc(e,t,0,!1);break}if(n=e.current.alternate,!a||zc(n)){if(2===o){if(a=t,e.errorRecoveryDisabledLanes&a)var l=0;else l=0!==(l=-536870913&e.pendingLanes)?l:536870912&l?536870912:0;if(0!==l){t=l;e:{var s=e;o=yc;var c=s.current.memoizedState.isDehydrated;if(c&&(qc(s,l).flags|=256),2!==(l=Qc(s,l,!1))){if(uc&&!c){s.errorRecoveryDisabledLanes|=a,mc|=a,o=4;break e}a=vc,vc=o,null!==a&&(null===vc?vc=a:vc.push.apply(vc,a))}o=l}if(a=!1,2!==o)continue}}if(1===o){qc(e,0),Bc(e,t,0,!0);break}e:{switch(r=e,a=o){case 0:case 1:throw Error(i(345));case 4:if((4194048&t)!==t)break;case 6:Bc(r,t,hc,!sc);break e;case 2:vc=null;break;case 3:case 5:break;default:throw Error(i(329))}if((62914560&t)===t&&10<(o=kc+300-te())){if(Bc(r,t,hc,!sc),0!==ve(r,0,!0))break e;r.timeoutHandle=sd(Mc.bind(null,r,n,vc,Sc,wc,t,hc,mc,bc,sc,a,2,-0,0),o)}else Mc(r,n,vc,Sc,wc,t,hc,mc,bc,sc,a,0,-0,0)}break}o=Qc(e,t,!1),a=!1}xu(e)}function Mc(e,t,n,r,o,a,l,s,c,u,d,p,f,m){if(e.timeoutHandle=-1,(8192&(p=t.subtreeFlags)||!(16785408&~p))&&(Ud={stylesheets:null,count:0,unsuspend:qd},Qs(t),null!==(p=function(){if(null===Ud)throw Error(i(475));var e=Ud;return e.stylesheets&&0===e.count&&Vd(e,e.stylesheets),0<e.count?function(t){var n=setTimeout(function(){if(e.stylesheets&&Vd(e,e.stylesheets),e.unsuspend){var t=e.unsuspend;e.unsuspend=null,t()}},6e4);return e.unsuspend=t,function(){e.unsuspend=null,clearTimeout(n)}}:null}())))return e.cancelPendingCommit=p(nu.bind(null,e,t,a,n,r,o,l,s,c,d,1,f,m)),void Bc(e,a,l,!u);nu(e,t,a,n,r,o,l,s,c)}function zc(e){for(var t=e;;){var n=t.tag;if((0===n||11===n||15===n)&&16384&t.flags&&(null!==(n=t.updateQueue)&&null!==(n=n.stores)))for(var r=0;r<n.length;r++){var o=n[r],a=o.getSnapshot;o=o.value;try{if(!Kn(a(),o))return!1}catch(i){return!1}}if(n=t.child,16384&t.subtreeFlags&&null!==n)n.return=t,t=n;else{if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return!0;t=t.return}t.sibling.return=t.return,t=t.sibling}}return!0}function Bc(e,t,n,r){t&=~gc,t&=~mc,e.suspendedLanes|=t,e.pingedLanes&=~t,r&&(e.warmLanes|=t),r=e.expirationTimes;for(var o=t;0<o;){var a=31-fe(o),i=1<<a;r[a]=-1,o&=~i}0!==n&&Ce(e,n,t)}function $c(){return!!(6&nc)||(Su(0,!1),!1)}function Uc(){if(null!==oc){if(0===ic)var e=oc.return;else vo=yo=null,Ma(e=oc),Ki=null,Yi=0,e=oc;for(;null!==e;)as(e.alternate,e),e=e.return;oc=null}}function qc(e,t){var n=e.timeoutHandle;-1!==n&&(e.timeoutHandle=-1,cd(n)),null!==(n=e.cancelPendingCommit)&&(e.cancelPendingCommit=null,n()),Uc(),rc=e,oc=n=Mr(e.current,null),ac=t,ic=0,lc=null,sc=!1,cc=we(e,t),uc=!1,bc=hc=gc=mc=fc=pc=0,vc=yc=null,wc=!1,8&t&&(t|=32&t);var r=e.entangledLanes;if(0!==r)for(e=e.entanglements,r&=t;0<r;){var o=31-fe(r),a=1<<o;t|=e[o],r&=~a}return dc=t,Tr(),n}function Hc(e,t){wa=null,R.H=Gi,t===Vo||t===Qo?(t=ea(),ic=3):t===Wo?(t=ea(),ic=4):ic=t===Cl?8:null!==t&&"object"==typeof t&&"function"==typeof t.then?6:1,lc=t,null===oc&&(pc=1,kl(e,Er(t,e.current)))}function Gc(){var e=R.H;return R.H=Gi,null===e?Gi:e}function Vc(){var e=R.A;return R.A=ec,e}function Wc(){pc=4,sc||(4194048&ac)!==ac&&null!==ol.current||(cc=!0),!(134217727&fc)&&!(134217727&mc)||null===rc||Bc(rc,ac,hc,!1)}function Qc(e,t,n){var r=nc;nc|=2;var o=Gc(),a=Vc();rc===e&&ac===t||(Sc=null,qc(e,t)),t=!1;var i=pc;e:for(;;)try{if(0!==ic&&null!==oc){var l=oc,s=lc;switch(ic){case 8:Uc(),i=6;break e;case 3:case 2:case 9:case 6:null===ol.current&&(t=!0);var c=ic;if(ic=0,lc=null,Jc(e,l,s,c),n&&cc){i=0;break e}break;default:c=ic,ic=0,lc=null,Jc(e,l,s,c)}}Kc(),i=pc;break}catch(u){Hc(e,u)}return t&&e.shellSuspendCounter++,vo=yo=null,nc=r,R.H=o,R.A=a,null===oc&&(rc=null,ac=0,Tr()),i}function Kc(){for(;null!==oc;)Xc(oc)}function Yc(){for(;null!==oc&&!J();)Xc(oc)}function Xc(e){var t=Xl(e.alternate,e,dc);e.memoizedProps=e.pendingProps,null===t?eu(e):oc=t}function Zc(e){var t=e,n=t.alternate;switch(t.tag){case 15:case 0:t=Fl(n,t,t.pendingProps,t.type,void 0,ac);break;case 11:t=Fl(n,t,t.pendingProps,t.type.render,t.ref,ac);break;case 5:Ma(t);default:as(n,t),t=Xl(n,t=oc=zr(t,dc),dc)}e.memoizedProps=e.pendingProps,null===t?eu(e):oc=t}function Jc(e,t,n,r){vo=yo=null,Ma(t),Ki=null,Yi=0;var o=t.return;try{if(function(e,t,n,r,o){if(n.flags|=32768,null!==r&&"object"==typeof r&&"function"==typeof r.then){if(null!==(t=n.alternate)&&Eo(t,n,o,!0),null!==(n=ol.current)){switch(n.tag){case 13:return null===al?Wc():null===n.alternate&&0===pc&&(pc=3),n.flags&=-257,n.flags|=65536,n.lanes=o,r===Ko?n.flags|=16384:(null===(t=n.updateQueue)?n.updateQueue=new Set([r]):t.add(r),du(e,r,o)),!1;case 22:return n.flags|=65536,r===Ko?n.flags|=16384:(null===(t=n.updateQueue)?(t={transitions:null,markerInstances:null,retryQueue:new Set([r])},n.updateQueue=t):null===(n=t.retryQueue)?t.retryQueue=new Set([r]):n.add(r),du(e,r,o)),!1}throw Error(i(435,n.tag))}return du(e,r,o),Wc(),!1}if(ao)return null!==(t=ol.current)?(!(65536&t.flags)&&(t.flags|=256),t.flags|=65536,t.lanes=o,r!==so&&ho(Er(e=Error(i(422),{cause:r}),n))):(r!==so&&ho(Er(t=Error(i(423),{cause:r}),n)),(e=e.current.alternate).flags|=65536,o&=-o,e.lanes|=o,r=Er(r,n),sa(e,o=Sl(e.stateNode,r,o)),4!==pc&&(pc=2)),!1;var a=Error(i(520),{cause:r});if(a=Er(a,n),null===yc?yc=[a]:yc.push(a),4!==pc&&(pc=2),null===t)return!0;r=Er(r,n),n=t;do{switch(n.tag){case 3:return n.flags|=65536,e=o&-o,n.lanes|=e,sa(n,e=Sl(n.stateNode,r,e)),!1;case 1:if(t=n.type,a=n.stateNode,!(128&n.flags||"function"!=typeof t.getDerivedStateFromError&&(null===a||"function"!=typeof a.componentDidCatch||null!==Ec&&Ec.has(a))))return n.flags|=65536,o&=-o,n.lanes|=o,_l(o=El(o),e,n,r),sa(n,o),!1}n=n.return}while(null!==n);return!1}(e,o,t,n,ac))return pc=1,kl(e,Er(n,e.current)),void(oc=null)}catch(a){if(null!==o)throw oc=o,a;return pc=1,kl(e,Er(n,e.current)),void(oc=null)}32768&t.flags?(ao||1===r?e=!0:cc||536870912&ac?e=!1:(sc=e=!0,(2===r||9===r||3===r||6===r)&&(null!==(r=ol.current)&&13===r.tag&&(r.flags|=16384))),tu(t,e)):eu(t)}function eu(e){var t=e;do{if(32768&t.flags)return void tu(t,sc);e=t.return;var n=rs(t.alternate,t,dc);if(null!==n)return void(oc=n);if(null!==(t=t.sibling))return void(oc=t);oc=t=e}while(null!==t);0===pc&&(pc=5)}function tu(e,t){do{var n=os(e.alternate,e);if(null!==n)return n.flags&=32767,void(oc=n);if(null!==(n=e.return)&&(n.flags|=32768,n.subtreeFlags=0,n.deletions=null),!t&&null!==(e=e.sibling))return void(oc=e);oc=e=n}while(null!==e);pc=6,oc=null}function nu(e,t,n,r,o,a,l,s,c){e.cancelPendingCommit=null;do{lu()}while(0!==_c);if(6&nc)throw Error(i(327));if(null!==t){if(t===e.current)throw Error(i(177));if(a=t.lanes|t.childLanes,function(e,t,n,r,o,a){var i=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var l=e.entanglements,s=e.expirationTimes,c=e.hiddenUpdates;for(n=i&~n;0<n;){var u=31-fe(n),d=1<<u;l[u]=0,s[u]=-1;var p=c[u];if(null!==p)for(c[u]=null,u=0;u<p.length;u++){var f=p[u];null!==f&&(f.lane&=-536870913)}n&=~d}0!==r&&Ce(e,r,0),0!==a&&0===o&&0!==e.tag&&(e.suspendedLanes|=a&~(i&~t))}(e,n,a|=Ar,l,s,c),e===rc&&(oc=rc=null,ac=0),Ac=t,Cc=e,Tc=n,jc=a,Pc=o,Nc=r,10256&t.subtreeFlags||10256&t.flags?(e.callbackNode=null,e.callbackPriority=0,X(ae,function(){return su(),null})):(e.callbackNode=null,e.callbackPriority=0),r=!!(13878&t.flags),13878&t.subtreeFlags||r){r=R.T,R.T=null,o=D.p,D.p=2,l=nc,nc|=4;try{!function(e,t){if(e=e.containerInfo,td=np,tr(e=er(e))){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{var r=(n=(n=e.ownerDocument)&&n.defaultView||window).getSelection&&n.getSelection();if(r&&0!==r.rangeCount){n=r.anchorNode;var o=r.anchorOffset,a=r.focusNode;r=r.focusOffset;try{n.nodeType,a.nodeType}catch(h){n=null;break e}var l=0,s=-1,c=-1,u=0,d=0,p=e,f=null;t:for(;;){for(var m;p!==n||0!==o&&3!==p.nodeType||(s=l+o),p!==a||0!==r&&3!==p.nodeType||(c=l+r),3===p.nodeType&&(l+=p.nodeValue.length),null!==(m=p.firstChild);)f=p,p=m;for(;;){if(p===e)break t;if(f===n&&++u===o&&(s=l),f===a&&++d===r&&(c=l),null!==(m=p.nextSibling))break;f=(p=f).parentNode}p=m}n=-1===s||-1===c?null:{start:s,end:c}}else n=null}n=n||{start:0,end:0}}else n=null;for(nd={focusedElem:e,selectionRange:n},np=!1,Ss=t;null!==Ss;)if(e=(t=Ss).child,1024&t.subtreeFlags&&null!==e)e.return=t,Ss=e;else for(;null!==Ss;){switch(a=(t=Ss).alternate,e=t.flags,t.tag){case 0:case 11:case 15:case 5:case 26:case 27:case 6:case 4:case 17:break;case 1:if(1024&e&&null!==a){e=void 0,n=t,o=a.memoizedProps,a=a.memoizedState,r=n.stateNode;try{var g=hl(n.type,o,(n.elementType,n.type));e=r.getSnapshotBeforeUpdate(g,a),r.__reactInternalSnapshotBeforeUpdate=e}catch(b){uu(n,n.return,b)}}break;case 3:if(1024&e)if(9===(n=(e=t.stateNode.containerInfo).nodeType))gd(e);else if(1===n)switch(e.nodeName){case"HEAD":case"HTML":case"BODY":gd(e);break;default:e.textContent=""}break;default:if(1024&e)throw Error(i(163))}if(null!==(e=t.sibling)){e.return=t.return,Ss=e;break}Ss=t.return}}(e,t)}finally{nc=l,D.p=o,R.T=r}}_c=1,ru(),ou(),au()}}function ru(){if(1===_c){_c=0;var e=Cc,t=Ac,n=!!(13878&t.flags);if(13878&t.subtreeFlags||n){n=R.T,R.T=null;var r=D.p;D.p=2;var o=nc;nc|=4;try{Rs(t,e);var a=nd,i=er(e.containerInfo),l=a.focusedElem,s=a.selectionRange;if(i!==l&&l&&l.ownerDocument&&Jn(l.ownerDocument.documentElement,l)){if(null!==s&&tr(l)){var c=s.start,u=s.end;if(void 0===u&&(u=c),"selectionStart"in l)l.selectionStart=c,l.selectionEnd=Math.min(u,l.value.length);else{var d=l.ownerDocument||document,p=d&&d.defaultView||window;if(p.getSelection){var f=p.getSelection(),m=l.textContent.length,g=Math.min(s.start,m),h=void 0===s.end?g:Math.min(s.end,m);!f.extend&&g>h&&(i=h,h=g,g=i);var b=Zn(l,g),y=Zn(l,h);if(b&&y&&(1!==f.rangeCount||f.anchorNode!==b.node||f.anchorOffset!==b.offset||f.focusNode!==y.node||f.focusOffset!==y.offset)){var v=d.createRange();v.setStart(b.node,b.offset),f.removeAllRanges(),g>h?(f.addRange(v),f.extend(y.node,y.offset)):(v.setEnd(y.node,y.offset),f.addRange(v))}}}}for(d=[],f=l;f=f.parentNode;)1===f.nodeType&&d.push({element:f,left:f.scrollLeft,top:f.scrollTop});for("function"==typeof l.focus&&l.focus(),l=0;l<d.length;l++){var w=d[l];w.element.scrollLeft=w.left,w.element.scrollTop=w.top}}np=!!td,nd=td=null}finally{nc=o,D.p=r,R.T=n}}e.current=t,_c=2}}function ou(){if(2===_c){_c=0;var e=Cc,t=Ac,n=!!(8772&t.flags);if(8772&t.subtreeFlags||n){n=R.T,R.T=null;var r=D.p;D.p=2;var o=nc;nc|=4;try{Es(e,t.alternate,t)}finally{nc=o,D.p=r,R.T=n}}_c=3}}function au(){if(4===_c||3===_c){_c=0,ee();var e=Cc,t=Ac,n=Tc,r=Nc;10256&t.subtreeFlags||10256&t.flags?_c=5:(_c=0,Ac=Cc=null,iu(e,e.pendingLanes));var o=e.pendingLanes;if(0===o&&(Ec=null),je(n),t=t.stateNode,de&&"function"==typeof de.onCommitFiberRoot)try{de.onCommitFiberRoot(ue,t,void 0,!(128&~t.current.flags))}catch(s){}if(null!==r){t=R.T,o=D.p,D.p=2,R.T=null;try{for(var a=e.onRecoverableError,i=0;i<r.length;i++){var l=r[i];a(l.value,{componentStack:l.stack})}}finally{R.T=t,D.p=o}}3&Tc&&lu(),xu(e),o=e.pendingLanes,4194090&n&&42&o?e===Oc?Lc++:(Lc=0,Oc=e):Lc=0,Su(0,!1)}}function iu(e,t){0===(e.pooledCacheLanes&=t)&&(null!=(t=e.pooledCache)&&(e.pooledCache=null,Do(t)))}function lu(e){return ru(),ou(),au(),su()}function su(){if(5!==_c)return!1;var e=Cc,t=jc;jc=0;var n=je(Tc),r=R.T,o=D.p;try{D.p=32>n?32:n,R.T=null,n=Pc,Pc=null;var a=Cc,l=Tc;if(_c=0,Ac=Cc=null,Tc=0,6&nc)throw Error(i(331));var s=nc;if(nc|=4,Xs(a.current),qs(a,a.current,l,n),nc=s,Su(0,!1),de&&"function"==typeof de.onPostCommitFiberRoot)try{de.onPostCommitFiberRoot(ue,a)}catch(c){}return!0}finally{D.p=o,R.T=r,iu(e,t)}}function cu(e,t,n){t=Er(n,t),null!==(e=ia(e,t=Sl(e.stateNode,t,2),2))&&(_e(e,2),xu(e))}function uu(e,t,n){if(3===e.tag)cu(e,e,n);else for(;null!==t;){if(3===t.tag){cu(t,e,n);break}if(1===t.tag){var r=t.stateNode;if("function"==typeof t.type.getDerivedStateFromError||"function"==typeof r.componentDidCatch&&(null===Ec||!Ec.has(r))){e=Er(n,e),null!==(r=ia(t,n=El(2),2))&&(_l(n,r,t,e),_e(r,2),xu(r));break}}t=t.return}}function du(e,t,n){var r=e.pingCache;if(null===r){r=e.pingCache=new tc;var o=new Set;r.set(t,o)}else void 0===(o=r.get(t))&&(o=new Set,r.set(t,o));o.has(n)||(uc=!0,o.add(n),e=pu.bind(null,e,t,n),t.then(e,e))}function pu(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,rc===e&&(ac&n)===n&&(4===pc||3===pc&&(62914560&ac)===ac&&300>te()-kc?!(2&nc)&&qc(e,0):gc|=n,bc===ac&&(bc=0)),xu(e)}function fu(e,t){0===t&&(t=Se()),null!==(e=Nr(e,t))&&(_e(e,t),xu(e))}function mu(e){var t=e.memoizedState,n=0;null!==t&&(n=t.retryLane),fu(e,n)}function gu(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,o=e.memoizedState;null!==o&&(n=o.retryLane);break;case 19:r=e.stateNode;break;case 22:r=e.stateNode._retryCache;break;default:throw Error(i(314))}null!==r&&r.delete(t),fu(e,n)}var hu=null,bu=null,yu=!1,vu=!1,wu=!1,ku=0;function xu(e){e!==bu&&null===e.next&&(null===bu?hu=bu=e:bu=bu.next=e),vu=!0,yu||(yu=!0,dd(function(){6&nc?X(re,Eu):_u()}))}function Su(e,t){if(!wu&&vu){wu=!0;do{for(var n=!1,r=hu;null!==r;){if(!t)if(0!==e){var o=r.pendingLanes;if(0===o)var a=0;else{var i=r.suspendedLanes,l=r.pingedLanes;a=(1<<31-fe(42|e)+1)-1,a=201326741&(a&=o&~(i&~l))?201326741&a|1:a?2|a:0}0!==a&&(n=!0,Tu(r,a))}else a=ac,!(3&(a=ve(r,r===rc?a:0,null!==r.cancelPendingCommit||-1!==r.timeoutHandle)))||we(r,a)||(n=!0,Tu(r,a));r=r.next}}while(n);wu=!1}}function Eu(){_u()}function _u(){vu=yu=!1;var e=0;0!==ku&&(function(){var e=window.event;if(e&&"popstate"===e.type)return e!==ld&&(ld=e,!0);return ld=null,!1}()&&(e=ku),ku=0);for(var t=te(),n=null,r=hu;null!==r;){var o=r.next,a=Cu(r,t);0===a?(r.next=null,null===n?hu=o:n.next=o,null===o&&(bu=n)):(n=r,(0!==e||3&a)&&(vu=!0)),r=o}Su(e,!1)}function Cu(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,o=e.expirationTimes,a=-62914561&e.pendingLanes;0<a;){var i=31-fe(a),l=1<<i,s=o[i];-1===s?0!==(l&n)&&0===(l&r)||(o[i]=ke(l,t)):s<=t&&(e.expiredLanes|=l),a&=~l}if(n=ac,n=ve(e,e===(t=rc)?n:0,null!==e.cancelPendingCommit||-1!==e.timeoutHandle),r=e.callbackNode,0===n||e===t&&(2===ic||9===ic)||null!==e.cancelPendingCommit)return null!==r&&null!==r&&Z(r),e.callbackNode=null,e.callbackPriority=0;if(!(3&n)||we(e,n)){if((t=n&-n)===e.callbackPriority)return t;switch(null!==r&&Z(r),je(n)){case 2:case 8:n=oe;break;case 32:default:n=ae;break;case 268435456:n=le}return r=Au.bind(null,e),n=X(n,r),e.callbackPriority=t,e.callbackNode=n,t}return null!==r&&null!==r&&Z(r),e.callbackPriority=2,e.callbackNode=null,2}function Au(e,t){if(0!==_c&&5!==_c)return e.callbackNode=null,e.callbackPriority=0,null;var n=e.callbackNode;if(lu()&&e.callbackNode!==n)return null;var r=ac;return 0===(r=ve(e,e===rc?r:0,null!==e.cancelPendingCommit||-1!==e.timeoutHandle))?null:(Ic(e,r,t),Cu(e,te()),null!=e.callbackNode&&e.callbackNode===n?Au.bind(null,e):null)}function Tu(e,t){if(lu())return null;Ic(e,t,!0)}function ju(){return 0===ku&&(ku=xe()),ku}function Pu(e){return null==e||"symbol"==typeof e||"boolean"==typeof e?null:"function"==typeof e?e:jt(""+e)}function Nu(e,t){var n=t.ownerDocument.createElement("input");return n.name=t.name,n.value=t.value,e.id&&n.setAttribute("form",e.id),t.parentNode.insertBefore(n,t),e=new FormData(e),n.parentNode.removeChild(n),e}for(var Lu=0;Lu<kr.length;Lu++){var Ou=kr[Lu];xr(Ou.toLowerCase(),"on"+(Ou[0].toUpperCase()+Ou.slice(1)))}xr(fr,"onAnimationEnd"),xr(mr,"onAnimationIteration"),xr(gr,"onAnimationStart"),xr("dblclick","onDoubleClick"),xr("focusin","onFocus"),xr("focusout","onBlur"),xr(hr,"onTransitionRun"),xr(br,"onTransitionStart"),xr(yr,"onTransitionCancel"),xr(vr,"onTransitionEnd"),Ke("onMouseEnter",["mouseout","mouseover"]),Ke("onMouseLeave",["mouseout","mouseover"]),Ke("onPointerEnter",["pointerout","pointerover"]),Ke("onPointerLeave",["pointerout","pointerover"]),Qe("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),Qe("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),Qe("onBeforeInput",["compositionend","keypress","textInput","paste"]),Qe("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),Qe("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),Qe("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var Ru="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Du=new Set("beforetoggle cancel close invalid load scroll scrollend toggle".split(" ").concat(Ru));function Fu(e,t){t=!!(4&t);for(var n=0;n<e.length;n++){var r=e[n],o=r.event;r=r.listeners;e:{var a=void 0;if(t)for(var i=r.length-1;0<=i;i--){var l=r[i],s=l.instance,c=l.currentTarget;if(l=l.listener,s!==a&&o.isPropagationStopped())break e;a=l,o.currentTarget=c;try{a(o)}catch(u){bl(u)}o.currentTarget=null,a=s}else for(i=0;i<r.length;i++){if(s=(l=r[i]).instance,c=l.currentTarget,l=l.listener,s!==a&&o.isPropagationStopped())break e;a=l,o.currentTarget=c;try{a(o)}catch(u){bl(u)}o.currentTarget=null,a=s}}}}function Iu(e,t){var n=t[De];void 0===n&&(n=t[De]=new Set);var r=e+"__bubble";n.has(r)||($u(t,e,2,!1),n.add(r))}function Mu(e,t,n){var r=0;t&&(r|=4),$u(n,e,r,t)}var zu="_reactListening"+Math.random().toString(36).slice(2);function Bu(e){if(!e[zu]){e[zu]=!0,Ve.forEach(function(t){"selectionchange"!==t&&(Du.has(t)||Mu(t,!1,e),Mu(t,!0,e))});var t=9===e.nodeType?e:e.ownerDocument;null===t||t[zu]||(t[zu]=!0,Mu("selectionchange",!1,t))}}function $u(e,t,n,r){switch(cp(t)){case 2:var o=rp;break;case 8:o=op;break;default:o=ap}n=o.bind(null,t,n,e),o=void 0,!zt||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(o=!0),r?void 0!==o?e.addEventListener(t,n,{capture:!0,passive:o}):e.addEventListener(t,n,!0):void 0!==o?e.addEventListener(t,n,{passive:o}):e.addEventListener(t,n,!1)}function Uu(e,t,n,r,o){var a=r;if(!(1&t||2&t||null===r))e:for(;;){if(null===r)return;var i=r.tag;if(3===i||4===i){var l=r.stateNode.containerInfo;if(l===o)break;if(4===i)for(i=r.return;null!==i;){var c=i.tag;if((3===c||4===c)&&i.stateNode.containerInfo===o)return;i=i.return}for(;null!==l;){if(null===(i=$e(l)))return;if(5===(c=i.tag)||6===c||26===c||27===c){r=a=i;continue e}l=l.parentNode}}r=r.return}Ft(function(){var r=a,o=Nt(n),i=[];e:{var l=wr.get(e);if(void 0!==l){var c=Jt,u=e;switch(e){case"keypress":if(0===Gt(n))break e;case"keydown":case"keyup":c=gn;break;case"focusin":u="focus",c=an;break;case"focusout":u="blur",c=an;break;case"beforeblur":case"afterblur":c=an;break;case"click":if(2===n.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":c=rn;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":c=on;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":c=bn;break;case fr:case mr:case gr:c=ln;break;case vr:c=yn;break;case"scroll":case"scrollend":c=tn;break;case"wheel":c=vn;break;case"copy":case"cut":case"paste":c=sn;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":c=hn;break;case"toggle":case"beforetoggle":c=wn}var d=!!(4&t),p=!d&&("scroll"===e||"scrollend"===e),f=d?null!==l?l+"Capture":null:l;d=[];for(var m,g=r;null!==g;){var h=g;if(m=h.stateNode,5!==(h=h.tag)&&26!==h&&27!==h||null===m||null===f||null!=(h=It(g,f))&&d.push(qu(g,h,m)),p)break;g=g.return}0<d.length&&(l=new c(l,u,null,n,o),i.push({event:l,listeners:d}))}}if(!(7&t)){if(c="mouseout"===e||"pointerout"===e,(!(l="mouseover"===e||"pointerover"===e)||n===Pt||!(u=n.relatedTarget||n.fromElement)||!$e(u)&&!u[Re])&&(c||l)&&(l=o.window===o?o:(l=o.ownerDocument)?l.defaultView||l.parentWindow:window,c?(c=r,null!==(u=(u=n.relatedTarget||n.toElement)?$e(u):null)&&(p=s(u),d=u.tag,u!==p||5!==d&&27!==d&&6!==d)&&(u=null)):(c=null,u=r),c!==u)){if(d=rn,h="onMouseLeave",f="onMouseEnter",g="mouse","pointerout"!==e&&"pointerover"!==e||(d=hn,h="onPointerLeave",f="onPointerEnter",g="pointer"),p=null==c?l:qe(c),m=null==u?l:qe(u),(l=new d(h,g+"leave",c,n,o)).target=p,l.relatedTarget=m,h=null,$e(o)===r&&((d=new d(f,g+"enter",u,n,o)).target=m,d.relatedTarget=p,h=d),p=h,c&&u)e:{for(f=u,g=0,m=d=c;m;m=Gu(m))g++;for(m=0,h=f;h;h=Gu(h))m++;for(;0<g-m;)d=Gu(d),g--;for(;0<m-g;)f=Gu(f),m--;for(;g--;){if(d===f||null!==f&&d===f.alternate)break e;d=Gu(d),f=Gu(f)}d=null}else d=null;null!==c&&Vu(i,l,c,d,!1),null!==u&&null!==p&&Vu(i,p,u,d,!0)}if("select"===(c=(l=r?qe(r):window).nodeName&&l.nodeName.toLowerCase())||"input"===c&&"file"===l.type)var b=Mn;else if(Ln(l))if(zn)b=Qn;else{b=Vn;var y=Gn}else!(c=l.nodeName)||"input"!==c.toLowerCase()||"checkbox"!==l.type&&"radio"!==l.type?r&&Ct(r.elementType)&&(b=Mn):b=Wn;switch(b&&(b=b(e,r))?On(i,b,n,o):(y&&y(e,l,r),"focusout"===e&&r&&"number"===l.type&&null!=r.memoizedProps.value&&yt(l,"number",l.value)),y=r?qe(r):window,e){case"focusin":(Ln(y)||"true"===y.contentEditable)&&(rr=y,or=r,ar=null);break;case"focusout":ar=or=rr=null;break;case"mousedown":ir=!0;break;case"contextmenu":case"mouseup":case"dragend":ir=!1,lr(i,n,o);break;case"selectionchange":if(nr)break;case"keydown":case"keyup":lr(i,n,o)}var v;if(xn)e:{switch(e){case"compositionstart":var w="onCompositionStart";break e;case"compositionend":w="onCompositionEnd";break e;case"compositionupdate":w="onCompositionUpdate";break e}w=void 0}else Pn?Tn(e,n)&&(w="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(w="onCompositionStart");w&&(_n&&"ko"!==n.locale&&(Pn||"onCompositionStart"!==w?"onCompositionEnd"===w&&Pn&&(v=Ht()):(Ut="value"in($t=o)?$t.value:$t.textContent,Pn=!0)),0<(y=Hu(r,w)).length&&(w=new cn(w,e,null,n,o),i.push({event:w,listeners:y}),v?w.data=v:null!==(v=jn(n))&&(w.data=v))),(v=En?function(e,t){switch(e){case"compositionend":return jn(t);case"keypress":return 32!==t.which?null:(An=!0,Cn);case"textInput":return(e=t.data)===Cn&&An?null:e;default:return null}}(e,n):function(e,t){if(Pn)return"compositionend"===e||!xn&&Tn(e,t)?(e=Ht(),qt=Ut=$t=null,Pn=!1,e):null;switch(e){case"paste":default:return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return _n&&"ko"!==t.locale?null:t.data}}(e,n))&&(0<(w=Hu(r,"onBeforeInput")).length&&(y=new cn("onBeforeInput","beforeinput",null,n,o),i.push({event:y,listeners:w}),y.data=v)),function(e,t,n,r,o){if("submit"===t&&n&&n.stateNode===o){var a=Pu((o[Oe]||null).action),i=r.submitter;i&&null!==(t=(t=i[Oe]||null)?Pu(t.formAction):i.getAttribute("formAction"))&&(a=t,i=null);var l=new Jt("action","action",null,r,o);e.push({event:l,listeners:[{instance:null,listener:function(){if(r.defaultPrevented){if(0!==ku){var e=i?Nu(o,i):new FormData(o);Ni(n,{pending:!0,data:e,method:o.method,action:a},null,e)}}else"function"==typeof a&&(l.preventDefault(),e=i?Nu(o,i):new FormData(o),Ni(n,{pending:!0,data:e,method:o.method,action:a},a,e))},currentTarget:o}]})}}(i,e,r,n,o)}Fu(i,t)})}function qu(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Hu(e,t){for(var n=t+"Capture",r=[];null!==e;){var o=e,a=o.stateNode;if(5!==(o=o.tag)&&26!==o&&27!==o||null===a||(null!=(o=It(e,n))&&r.unshift(qu(e,o,a)),null!=(o=It(e,t))&&r.push(qu(e,o,a))),3===e.tag)return r;e=e.return}return[]}function Gu(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag&&27!==e.tag);return e||null}function Vu(e,t,n,r,o){for(var a=t._reactName,i=[];null!==n&&n!==r;){var l=n,s=l.alternate,c=l.stateNode;if(l=l.tag,null!==s&&s===r)break;5!==l&&26!==l&&27!==l||null===c||(s=c,o?null!=(c=It(n,a))&&i.unshift(qu(n,c,s)):o||null!=(c=It(n,a))&&i.push(qu(n,c,s))),n=n.return}0!==i.length&&e.push({event:t,listeners:i})}var Wu=/\r\n?/g,Qu=/\u0000|\uFFFD/g;function Ku(e){return("string"==typeof e?e:""+e).replace(Wu,"\n").replace(Qu,"")}function Yu(e,t){return t=Ku(t),Ku(e)===t}function Xu(){}function Zu(e,t,n,r,o,a){switch(n){case"children":"string"==typeof r?"body"===t||"textarea"===t&&""===r||xt(e,r):("number"==typeof r||"bigint"==typeof r)&&"body"!==t&&xt(e,""+r);break;case"className":nt(e,"class",r);break;case"tabIndex":nt(e,"tabindex",r);break;case"dir":case"role":case"viewBox":case"width":case"height":nt(e,n,r);break;case"style":_t(e,r,a);break;case"data":if("object"!==t){nt(e,"data",r);break}case"src":case"href":if(""===r&&("a"!==t||"href"!==n)){e.removeAttribute(n);break}if(null==r||"function"==typeof r||"symbol"==typeof r||"boolean"==typeof r){e.removeAttribute(n);break}r=jt(""+r),e.setAttribute(n,r);break;case"action":case"formAction":if("function"==typeof r){e.setAttribute(n,"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')");break}if("function"==typeof a&&("formAction"===n?("input"!==t&&Zu(e,t,"name",o.name,o,null),Zu(e,t,"formEncType",o.formEncType,o,null),Zu(e,t,"formMethod",o.formMethod,o,null),Zu(e,t,"formTarget",o.formTarget,o,null)):(Zu(e,t,"encType",o.encType,o,null),Zu(e,t,"method",o.method,o,null),Zu(e,t,"target",o.target,o,null))),null==r||"symbol"==typeof r||"boolean"==typeof r){e.removeAttribute(n);break}r=jt(""+r),e.setAttribute(n,r);break;case"onClick":null!=r&&(e.onclick=Xu);break;case"onScroll":null!=r&&Iu("scroll",e);break;case"onScrollEnd":null!=r&&Iu("scrollend",e);break;case"dangerouslySetInnerHTML":if(null!=r){if("object"!=typeof r||!("__html"in r))throw Error(i(61));if(null!=(n=r.__html)){if(null!=o.children)throw Error(i(60));e.innerHTML=n}}break;case"multiple":e.multiple=r&&"function"!=typeof r&&"symbol"!=typeof r;break;case"muted":e.muted=r&&"function"!=typeof r&&"symbol"!=typeof r;break;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"defaultValue":case"defaultChecked":case"innerHTML":case"ref":case"autoFocus":break;case"xlinkHref":if(null==r||"function"==typeof r||"boolean"==typeof r||"symbol"==typeof r){e.removeAttribute("xlink:href");break}n=jt(""+r),e.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",n);break;case"contentEditable":case"spellCheck":case"draggable":case"value":case"autoReverse":case"externalResourcesRequired":case"focusable":case"preserveAlpha":null!=r&&"function"!=typeof r&&"symbol"!=typeof r?e.setAttribute(n,""+r):e.removeAttribute(n);break;case"inert":case"allowFullScreen":case"async":case"autoPlay":case"controls":case"default":case"defer":case"disabled":case"disablePictureInPicture":case"disableRemotePlayback":case"formNoValidate":case"hidden":case"loop":case"noModule":case"noValidate":case"open":case"playsInline":case"readOnly":case"required":case"reversed":case"scoped":case"seamless":case"itemScope":r&&"function"!=typeof r&&"symbol"!=typeof r?e.setAttribute(n,""):e.removeAttribute(n);break;case"capture":case"download":!0===r?e.setAttribute(n,""):!1!==r&&null!=r&&"function"!=typeof r&&"symbol"!=typeof r?e.setAttribute(n,r):e.removeAttribute(n);break;case"cols":case"rows":case"size":case"span":null!=r&&"function"!=typeof r&&"symbol"!=typeof r&&!isNaN(r)&&1<=r?e.setAttribute(n,r):e.removeAttribute(n);break;case"rowSpan":case"start":null==r||"function"==typeof r||"symbol"==typeof r||isNaN(r)?e.removeAttribute(n):e.setAttribute(n,r);break;case"popover":Iu("beforetoggle",e),Iu("toggle",e),tt(e,"popover",r);break;case"xlinkActuate":rt(e,"http://www.w3.org/1999/xlink","xlink:actuate",r);break;case"xlinkArcrole":rt(e,"http://www.w3.org/1999/xlink","xlink:arcrole",r);break;case"xlinkRole":rt(e,"http://www.w3.org/1999/xlink","xlink:role",r);break;case"xlinkShow":rt(e,"http://www.w3.org/1999/xlink","xlink:show",r);break;case"xlinkTitle":rt(e,"http://www.w3.org/1999/xlink","xlink:title",r);break;case"xlinkType":rt(e,"http://www.w3.org/1999/xlink","xlink:type",r);break;case"xmlBase":rt(e,"http://www.w3.org/XML/1998/namespace","xml:base",r);break;case"xmlLang":rt(e,"http://www.w3.org/XML/1998/namespace","xml:lang",r);break;case"xmlSpace":rt(e,"http://www.w3.org/XML/1998/namespace","xml:space",r);break;case"is":tt(e,"is",r);break;case"innerText":case"textContent":break;default:(!(2<n.length)||"o"!==n[0]&&"O"!==n[0]||"n"!==n[1]&&"N"!==n[1])&&tt(e,n=At.get(n)||n,r)}}function Ju(e,t,n,r,o,a){switch(n){case"style":_t(e,r,a);break;case"dangerouslySetInnerHTML":if(null!=r){if("object"!=typeof r||!("__html"in r))throw Error(i(61));if(null!=(n=r.__html)){if(null!=o.children)throw Error(i(60));e.innerHTML=n}}break;case"children":"string"==typeof r?xt(e,r):("number"==typeof r||"bigint"==typeof r)&&xt(e,""+r);break;case"onScroll":null!=r&&Iu("scroll",e);break;case"onScrollEnd":null!=r&&Iu("scrollend",e);break;case"onClick":null!=r&&(e.onclick=Xu);break;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"innerHTML":case"ref":case"innerText":case"textContent":break;default:We.hasOwnProperty(n)||("o"!==n[0]||"n"!==n[1]||(o=n.endsWith("Capture"),t=n.slice(2,o?n.length-7:void 0),"function"==typeof(a=null!=(a=e[Oe]||null)?a[n]:null)&&e.removeEventListener(t,a,o),"function"!=typeof r)?n in e?e[n]=r:!0===r?e.setAttribute(n,""):tt(e,n,r):("function"!=typeof a&&null!==a&&(n in e?e[n]=null:e.hasAttribute(n)&&e.removeAttribute(n)),e.addEventListener(t,r,o)))}}function ed(e,t,n){switch(t){case"div":case"span":case"svg":case"path":case"a":case"g":case"p":case"li":break;case"img":Iu("error",e),Iu("load",e);var r,o=!1,a=!1;for(r in n)if(n.hasOwnProperty(r)){var l=n[r];if(null!=l)switch(r){case"src":o=!0;break;case"srcSet":a=!0;break;case"children":case"dangerouslySetInnerHTML":throw Error(i(137,t));default:Zu(e,t,r,l,n,null)}}return a&&Zu(e,t,"srcSet",n.srcSet,n,null),void(o&&Zu(e,t,"src",n.src,n,null));case"input":Iu("invalid",e);var s=r=l=a=null,c=null,u=null;for(o in n)if(n.hasOwnProperty(o)){var d=n[o];if(null!=d)switch(o){case"name":a=d;break;case"type":l=d;break;case"checked":c=d;break;case"defaultChecked":u=d;break;case"value":r=d;break;case"defaultValue":s=d;break;case"children":case"dangerouslySetInnerHTML":if(null!=d)throw Error(i(137,t));break;default:Zu(e,t,o,d,n,null)}}return bt(e,r,s,c,u,l,a,!1),void dt(e);case"select":for(a in Iu("invalid",e),o=l=r=null,n)if(n.hasOwnProperty(a)&&null!=(s=n[a]))switch(a){case"value":r=s;break;case"defaultValue":l=s;break;case"multiple":o=s;default:Zu(e,t,a,s,n,null)}return t=r,n=l,e.multiple=!!o,void(null!=t?vt(e,!!o,t,!1):null!=n&&vt(e,!!o,n,!0));case"textarea":for(l in Iu("invalid",e),r=a=o=null,n)if(n.hasOwnProperty(l)&&null!=(s=n[l]))switch(l){case"value":o=s;break;case"defaultValue":a=s;break;case"children":r=s;break;case"dangerouslySetInnerHTML":if(null!=s)throw Error(i(91));break;default:Zu(e,t,l,s,n,null)}return kt(e,o,a,r),void dt(e);case"option":for(c in n)if(n.hasOwnProperty(c)&&null!=(o=n[c]))if("selected"===c)e.selected=o&&"function"!=typeof o&&"symbol"!=typeof o;else Zu(e,t,c,o,n,null);return;case"dialog":Iu("beforetoggle",e),Iu("toggle",e),Iu("cancel",e),Iu("close",e);break;case"iframe":case"object":Iu("load",e);break;case"video":case"audio":for(o=0;o<Ru.length;o++)Iu(Ru[o],e);break;case"image":Iu("error",e),Iu("load",e);break;case"details":Iu("toggle",e);break;case"embed":case"source":case"link":Iu("error",e),Iu("load",e);case"area":case"base":case"br":case"col":case"hr":case"keygen":case"meta":case"param":case"track":case"wbr":case"menuitem":for(u in n)if(n.hasOwnProperty(u)&&null!=(o=n[u]))switch(u){case"children":case"dangerouslySetInnerHTML":throw Error(i(137,t));default:Zu(e,t,u,o,n,null)}return;default:if(Ct(t)){for(d in n)n.hasOwnProperty(d)&&(void 0!==(o=n[d])&&Ju(e,t,d,o,n,void 0));return}}for(s in n)n.hasOwnProperty(s)&&(null!=(o=n[s])&&Zu(e,t,s,o,n,null))}var td=null,nd=null;function rd(e){return 9===e.nodeType?e:e.ownerDocument}function od(e){switch(e){case"http://www.w3.org/2000/svg":return 1;case"http://www.w3.org/1998/Math/MathML":return 2;default:return 0}}function ad(e,t){if(0===e)switch(t){case"svg":return 1;case"math":return 2;default:return 0}return 1===e&&"foreignObject"===t?0:e}function id(e,t){return"textarea"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"bigint"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var ld=null;var sd="function"==typeof setTimeout?setTimeout:void 0,cd="function"==typeof clearTimeout?clearTimeout:void 0,ud="function"==typeof Promise?Promise:void 0,dd="function"==typeof queueMicrotask?queueMicrotask:void 0!==ud?function(e){return ud.resolve(null).then(e).catch(pd)}:sd;function pd(e){setTimeout(function(){throw e})}function fd(e){return"head"===e}function md(e,t){var n=t,r=0,o=0;do{var a=n.nextSibling;if(e.removeChild(n),a&&8===a.nodeType)if("/$"===(n=a.data)){if(0<r&&8>r){n=r;var i=e.ownerDocument;if(1&n&&kd(i.documentElement),2&n&&kd(i.body),4&n)for(kd(n=i.head),i=n.firstChild;i;){var l=i.nextSibling,s=i.nodeName;i[ze]||"SCRIPT"===s||"STYLE"===s||"LINK"===s&&"stylesheet"===i.rel.toLowerCase()||n.removeChild(i),i=l}}if(0===o)return e.removeChild(a),void Ap(t);o--}else"$"===n||"$?"===n||"$!"===n?o++:r=n.charCodeAt(0)-48;else r=0;n=a}while(n);Ap(t)}function gd(e){var t=e.firstChild;for(t&&10===t.nodeType&&(t=t.nextSibling);t;){var n=t;switch(t=t.nextSibling,n.nodeName){case"HTML":case"HEAD":case"BODY":gd(n),Be(n);continue;case"SCRIPT":case"STYLE":continue;case"LINK":if("stylesheet"===n.rel.toLowerCase())continue}e.removeChild(n)}}function hd(e){return"$!"===e.data||"$?"===e.data&&"complete"===e.ownerDocument.readyState}function bd(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break;if(8===t){if("$"===(t=e.data)||"$!"===t||"$?"===t||"F!"===t||"F"===t)break;if("/$"===t)return null}}return e}var yd=null;function vd(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if("$"===n||"$!"===n||"$?"===n){if(0===t)return e;t--}else"/$"===n&&t++}e=e.previousSibling}return null}function wd(e,t,n){switch(t=rd(n),e){case"html":if(!(e=t.documentElement))throw Error(i(452));return e;case"head":if(!(e=t.head))throw Error(i(453));return e;case"body":if(!(e=t.body))throw Error(i(454));return e;default:throw Error(i(451))}}function kd(e){for(var t=e.attributes;t.length;)e.removeAttributeNode(t[0]);Be(e)}var xd=new Map,Sd=new Set;function Ed(e){return"function"==typeof e.getRootNode?e.getRootNode():9===e.nodeType?e:e.ownerDocument}var _d=D.d;D.d={f:function(){var e=_d.f(),t=$c();return e||t},r:function(e){var t=Ue(e);null!==t&&5===t.tag&&"form"===t.type?Oi(t):_d.r(e)},D:function(e){_d.D(e),Ad("dns-prefetch",e,null)},C:function(e,t){_d.C(e,t),Ad("preconnect",e,t)},L:function(e,t,n){_d.L(e,t,n);var r=Cd;if(r&&e&&t){var o='link[rel="preload"][as="'+gt(t)+'"]';"image"===t&&n&&n.imageSrcSet?(o+='[imagesrcset="'+gt(n.imageSrcSet)+'"]',"string"==typeof n.imageSizes&&(o+='[imagesizes="'+gt(n.imageSizes)+'"]')):o+='[href="'+gt(e)+'"]';var a=o;switch(t){case"style":a=jd(e);break;case"script":a=Ld(e)}xd.has(a)||(e=p({rel:"preload",href:"image"===t&&n&&n.imageSrcSet?void 0:e,as:t},n),xd.set(a,e),null!==r.querySelector(o)||"style"===t&&r.querySelector(Pd(a))||"script"===t&&r.querySelector(Od(a))||(ed(t=r.createElement("link"),"link",e),Ge(t),r.head.appendChild(t)))}},m:function(e,t){_d.m(e,t);var n=Cd;if(n&&e){var r=t&&"string"==typeof t.as?t.as:"script",o='link[rel="modulepreload"][as="'+gt(r)+'"][href="'+gt(e)+'"]',a=o;switch(r){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":a=Ld(e)}if(!xd.has(a)&&(e=p({rel:"modulepreload",href:e},t),xd.set(a,e),null===n.querySelector(o))){switch(r){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(n.querySelector(Od(a)))return}ed(r=n.createElement("link"),"link",e),Ge(r),n.head.appendChild(r)}}},X:function(e,t){_d.X(e,t);var n=Cd;if(n&&e){var r=He(n).hoistableScripts,o=Ld(e),a=r.get(o);a||((a=n.querySelector(Od(o)))||(e=p({src:e,async:!0},t),(t=xd.get(o))&&Id(e,t),Ge(a=n.createElement("script")),ed(a,"link",e),n.head.appendChild(a)),a={type:"script",instance:a,count:1,state:null},r.set(o,a))}},S:function(e,t,n){_d.S(e,t,n);var r=Cd;if(r&&e){var o=He(r).hoistableStyles,a=jd(e);t=t||"default";var i=o.get(a);if(!i){var l={loading:0,preload:null};if(i=r.querySelector(Pd(a)))l.loading=5;else{e=p({rel:"stylesheet",href:e,"data-precedence":t},n),(n=xd.get(a))&&Fd(e,n);var s=i=r.createElement("link");Ge(s),ed(s,"link",e),s._p=new Promise(function(e,t){s.onload=e,s.onerror=t}),s.addEventListener("load",function(){l.loading|=1}),s.addEventListener("error",function(){l.loading|=2}),l.loading|=4,Dd(i,t,r)}i={type:"stylesheet",instance:i,count:1,state:l},o.set(a,i)}}},M:function(e,t){_d.M(e,t);var n=Cd;if(n&&e){var r=He(n).hoistableScripts,o=Ld(e),a=r.get(o);a||((a=n.querySelector(Od(o)))||(e=p({src:e,async:!0,type:"module"},t),(t=xd.get(o))&&Id(e,t),Ge(a=n.createElement("script")),ed(a,"link",e),n.head.appendChild(a)),a={type:"script",instance:a,count:1,state:null},r.set(o,a))}}};var Cd="undefined"==typeof document?null:document;function Ad(e,t,n){var r=Cd;if(r&&"string"==typeof t&&t){var o=gt(t);o='link[rel="'+e+'"][href="'+o+'"]',"string"==typeof n&&(o+='[crossorigin="'+n+'"]'),Sd.has(o)||(Sd.add(o),e={rel:e,crossOrigin:n,href:t},null===r.querySelector(o)&&(ed(t=r.createElement("link"),"link",e),Ge(t),r.head.appendChild(t)))}}function Td(e,t,n,r){var o,a,l,s,c=(c=H.current)?Ed(c):null;if(!c)throw Error(i(446));switch(e){case"meta":case"title":return null;case"style":return"string"==typeof n.precedence&&"string"==typeof n.href?(t=jd(n.href),(r=(n=He(c).hoistableStyles).get(t))||(r={type:"style",instance:null,count:0,state:null},n.set(t,r)),r):{type:"void",instance:null,count:0,state:null};case"link":if("stylesheet"===n.rel&&"string"==typeof n.href&&"string"==typeof n.precedence){e=jd(n.href);var u=He(c).hoistableStyles,d=u.get(e);if(d||(c=c.ownerDocument||c,d={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},u.set(e,d),(u=c.querySelector(Pd(e)))&&!u._p&&(d.instance=u,d.state.loading=5),xd.has(e)||(n={rel:"preload",as:"style",href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},xd.set(e,n),u||(o=c,a=e,l=n,s=d.state,o.querySelector('link[rel="preload"][as="style"]['+a+"]")?s.loading=1:(a=o.createElement("link"),s.preload=a,a.addEventListener("load",function(){return s.loading|=1}),a.addEventListener("error",function(){return s.loading|=2}),ed(a,"link",l),Ge(a),o.head.appendChild(a))))),t&&null===r)throw Error(i(528,""));return d}if(t&&null!==r)throw Error(i(529,""));return null;case"script":return t=n.async,"string"==typeof(n=n.src)&&t&&"function"!=typeof t&&"symbol"!=typeof t?(t=Ld(n),(r=(n=He(c).hoistableScripts).get(t))||(r={type:"script",instance:null,count:0,state:null},n.set(t,r)),r):{type:"void",instance:null,count:0,state:null};default:throw Error(i(444,e))}}function jd(e){return'href="'+gt(e)+'"'}function Pd(e){return'link[rel="stylesheet"]['+e+"]"}function Nd(e){return p({},e,{"data-precedence":e.precedence,precedence:null})}function Ld(e){return'[src="'+gt(e)+'"]'}function Od(e){return"script[async]"+e}function Rd(e,t,n){if(t.count++,null===t.instance)switch(t.type){case"style":var r=e.querySelector('style[data-href~="'+gt(n.href)+'"]');if(r)return t.instance=r,Ge(r),r;var o=p({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return Ge(r=(e.ownerDocument||e).createElement("style")),ed(r,"style",o),Dd(r,n.precedence,e),t.instance=r;case"stylesheet":o=jd(n.href);var a=e.querySelector(Pd(o));if(a)return t.state.loading|=4,t.instance=a,Ge(a),a;r=Nd(n),(o=xd.get(o))&&Fd(r,o),Ge(a=(e.ownerDocument||e).createElement("link"));var l=a;return l._p=new Promise(function(e,t){l.onload=e,l.onerror=t}),ed(a,"link",r),t.state.loading|=4,Dd(a,n.precedence,e),t.instance=a;case"script":return a=Ld(n.src),(o=e.querySelector(Od(a)))?(t.instance=o,Ge(o),o):(r=n,(o=xd.get(a))&&Id(r=p({},n),o),Ge(o=(e=e.ownerDocument||e).createElement("script")),ed(o,"link",r),e.head.appendChild(o),t.instance=o);case"void":return null;default:throw Error(i(443,t.type))}else"stylesheet"===t.type&&!(4&t.state.loading)&&(r=t.instance,t.state.loading|=4,Dd(r,n.precedence,e));return t.instance}function Dd(e,t,n){for(var r=n.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),o=r.length?r[r.length-1]:null,a=o,i=0;i<r.length;i++){var l=r[i];if(l.dataset.precedence===t)a=l;else if(a!==o)break}a?a.parentNode.insertBefore(e,a.nextSibling):(t=9===n.nodeType?n.head:n).insertBefore(e,t.firstChild)}function Fd(e,t){null==e.crossOrigin&&(e.crossOrigin=t.crossOrigin),null==e.referrerPolicy&&(e.referrerPolicy=t.referrerPolicy),null==e.title&&(e.title=t.title)}function Id(e,t){null==e.crossOrigin&&(e.crossOrigin=t.crossOrigin),null==e.referrerPolicy&&(e.referrerPolicy=t.referrerPolicy),null==e.integrity&&(e.integrity=t.integrity)}var Md=null;function zd(e,t,n){if(null===Md){var r=new Map,o=Md=new Map;o.set(n,r)}else(r=(o=Md).get(n))||(r=new Map,o.set(n,r));if(r.has(e))return r;for(r.set(e,null),n=n.getElementsByTagName(e),o=0;o<n.length;o++){var a=n[o];if(!(a[ze]||a[Le]||"link"===e&&"stylesheet"===a.getAttribute("rel"))&&"http://www.w3.org/2000/svg"!==a.namespaceURI){var i=a.getAttribute(t)||"";i=e+i;var l=r.get(i);l?l.push(a):r.set(i,[a])}}return r}function Bd(e,t,n){(e=e.ownerDocument||e).head.insertBefore(n,"title"===t?e.querySelector("head > title"):null)}function $d(e){return!!("stylesheet"!==e.type||3&e.state.loading)}var Ud=null;function qd(){}function Hd(){if(this.count--,0===this.count)if(this.stylesheets)Vd(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}var Gd=null;function Vd(e,t){e.stylesheets=null,null!==e.unsuspend&&(e.count++,Gd=new Map,t.forEach(Wd,e),Gd=null,Hd.call(e))}function Wd(e,t){if(!(4&t.state.loading)){var n=Gd.get(e);if(n)var r=n.get(null);else{n=new Map,Gd.set(e,n);for(var o=e.querySelectorAll("link[data-precedence],style[data-precedence]"),a=0;a<o.length;a++){var i=o[a];"LINK"!==i.nodeName&&"not all"===i.getAttribute("media")||(n.set(i.dataset.precedence,i),r=i)}r&&n.set(null,r)}i=(o=t.instance).getAttribute("data-precedence"),(a=n.get(i)||r)===r&&n.set(null,o),n.set(i,o),this.count++,r=Hd.bind(this),o.addEventListener("load",r),o.addEventListener("error",r),a?a.parentNode.insertBefore(o,a.nextSibling):(e=9===e.nodeType?e.head:e).insertBefore(o,e.firstChild),t.state.loading|=4}}var Qd={$$typeof:k,Provider:null,Consumer:null,_currentValue:F,_currentValue2:F,_threadCount:0};function Kd(e,t,n,r,o,a,i,l){this.tag=1,this.containerInfo=e,this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.next=this.pendingContext=this.context=this.cancelPendingCommit=null,this.callbackPriority=0,this.expirationTimes=Ee(-1),this.entangledLanes=this.shellSuspendCounter=this.errorRecoveryDisabledLanes=this.expiredLanes=this.warmLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Ee(0),this.hiddenUpdates=Ee(null),this.identifierPrefix=r,this.onUncaughtError=o,this.onCaughtError=a,this.onRecoverableError=i,this.pooledCache=null,this.pooledCacheLanes=0,this.formState=l,this.incompleteTransitions=new Map}function Yd(e,t,n,r,o,a,i,l,s,c,u,d){return e=new Kd(e,t,n,i,l,s,c,d),t=1,!0===a&&(t|=24),a=Fr(3,null,null,t),e.current=a,a.stateNode=e,(t=Ro()).refCount++,e.pooledCache=t,t.refCount++,a.memoizedState={element:r,isDehydrated:n,cache:t},ra(a),e}function Xd(e){return e?e=Rr:Rr}function Zd(e,t,n,r,o,a){o=Xd(o),null===r.context?r.context=o:r.pendingContext=o,(r=aa(t)).payload={element:n},null!==(a=void 0===a?null:a)&&(r.callback=a),null!==(n=ia(e,r,t))&&(Fc(n,0,t),la(n,e,t))}function Jd(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function ep(e,t){Jd(e,t),(e=e.alternate)&&Jd(e,t)}function tp(e){if(13===e.tag){var t=Nr(e,67108864);null!==t&&Fc(t,0,67108864),ep(e,67108864)}}var np=!0;function rp(e,t,n,r){var o=R.T;R.T=null;var a=D.p;try{D.p=2,ap(e,t,n,r)}finally{D.p=a,R.T=o}}function op(e,t,n,r){var o=R.T;R.T=null;var a=D.p;try{D.p=8,ap(e,t,n,r)}finally{D.p=a,R.T=o}}function ap(e,t,n,r){if(np){var o=ip(r);if(null===o)Uu(e,t,r,lp,n),yp(e,r);else if(function(e,t,n,r,o){switch(t){case"focusin":return dp=vp(dp,e,t,n,r,o),!0;case"dragenter":return pp=vp(pp,e,t,n,r,o),!0;case"mouseover":return fp=vp(fp,e,t,n,r,o),!0;case"pointerover":var a=o.pointerId;return mp.set(a,vp(mp.get(a)||null,e,t,n,r,o)),!0;case"gotpointercapture":return a=o.pointerId,gp.set(a,vp(gp.get(a)||null,e,t,n,r,o)),!0}return!1}(o,e,t,n,r))r.stopPropagation();else if(yp(e,r),4&t&&-1<bp.indexOf(e)){for(;null!==o;){var a=Ue(o);if(null!==a)switch(a.tag){case 3:if((a=a.stateNode).current.memoizedState.isDehydrated){var i=ye(a.pendingLanes);if(0!==i){var l=a;for(l.pendingLanes|=2,l.entangledLanes|=2;i;){var s=1<<31-fe(i);l.entanglements[1]|=s,i&=~s}xu(a),!(6&nc)&&(xc=te()+500,Su(0,!1))}}break;case 13:null!==(l=Nr(a,2))&&Fc(l,0,2),$c(),ep(a,2)}if(null===(a=ip(r))&&Uu(e,t,r,lp,n),a===o)break;o=a}null!==o&&r.stopPropagation()}else Uu(e,t,r,null,n)}}function ip(e){return sp(e=Nt(e))}var lp=null;function sp(e){if(lp=null,null!==(e=$e(e))){var t=s(e);if(null===t)e=null;else{var n=t.tag;if(13===n){if(null!==(e=c(t)))return e;e=null}else if(3===n){if(t.stateNode.current.memoizedState.isDehydrated)return 3===t.tag?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null)}}return lp=e,null}function cp(e){switch(e){case"beforetoggle":case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"toggle":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 2;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 8;case"message":switch(ne()){case re:return 2;case oe:return 8;case ae:case ie:return 32;case le:return 268435456;default:return 32}default:return 32}}var up=!1,dp=null,pp=null,fp=null,mp=new Map,gp=new Map,hp=[],bp="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset".split(" ");function yp(e,t){switch(e){case"focusin":case"focusout":dp=null;break;case"dragenter":case"dragleave":pp=null;break;case"mouseover":case"mouseout":fp=null;break;case"pointerover":case"pointerout":mp.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":gp.delete(t.pointerId)}}function vp(e,t,n,r,o,a){return null===e||e.nativeEvent!==a?(e={blockedOn:t,domEventName:n,eventSystemFlags:r,nativeEvent:a,targetContainers:[o]},null!==t&&(null!==(t=Ue(t))&&tp(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,null!==o&&-1===t.indexOf(o)&&t.push(o),e)}function wp(e){var t=$e(e.target);if(null!==t){var n=s(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=c(n)))return e.blockedOn=t,void function(e,t){var n=D.p;try{return D.p=e,t()}finally{D.p=n}}(e.priority,function(){if(13===n.tag){var e=Rc();e=Te(e);var t=Nr(n,e);null!==t&&Fc(t,0,e),ep(n,e)}})}else if(3===t&&n.stateNode.current.memoizedState.isDehydrated)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function kp(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=ip(e.nativeEvent);if(null!==n)return null!==(t=Ue(n))&&tp(t),e.blockedOn=n,!1;var r=new(n=e.nativeEvent).constructor(n.type,n);Pt=r,n.target.dispatchEvent(r),Pt=null,t.shift()}return!0}function xp(e,t,n){kp(e)&&n.delete(t)}function Sp(){up=!1,null!==dp&&kp(dp)&&(dp=null),null!==pp&&kp(pp)&&(pp=null),null!==fp&&kp(fp)&&(fp=null),mp.forEach(xp),gp.forEach(xp)}function Ep(e,t){e.blockedOn===t&&(e.blockedOn=null,up||(up=!0,r.unstable_scheduleCallback(r.unstable_NormalPriority,Sp)))}var _p=null;function Cp(e){_p!==e&&(_p=e,r.unstable_scheduleCallback(r.unstable_NormalPriority,function(){_p===e&&(_p=null);for(var t=0;t<e.length;t+=3){var n=e[t],r=e[t+1],o=e[t+2];if("function"!=typeof r){if(null===sp(r||n))continue;break}var a=Ue(n);null!==a&&(e.splice(t,3),t-=3,Ni(a,{pending:!0,data:o,method:n.method,action:r},r,o))}}))}function Ap(e){function t(t){return Ep(t,e)}null!==dp&&Ep(dp,e),null!==pp&&Ep(pp,e),null!==fp&&Ep(fp,e),mp.forEach(t),gp.forEach(t);for(var n=0;n<hp.length;n++){var r=hp[n];r.blockedOn===e&&(r.blockedOn=null)}for(;0<hp.length&&null===(n=hp[0]).blockedOn;)wp(n),null===n.blockedOn&&hp.shift();if(null!=(n=(e.ownerDocument||e).$$reactFormReplay))for(r=0;r<n.length;r+=3){var o=n[r],a=n[r+1],i=o[Oe]||null;if("function"==typeof a)i||Cp(n);else if(i){var l=null;if(a&&a.hasAttribute("formAction")){if(o=a,i=a[Oe]||null)l=i.formAction;else if(null!==sp(o))continue}else l=i.action;"function"==typeof l?n[r+1]=l:(n.splice(r,3),r-=3),Cp(n)}}}function Tp(e){this._internalRoot=e}function jp(e){this._internalRoot=e}jp.prototype.render=Tp.prototype.render=function(e){var t=this._internalRoot;if(null===t)throw Error(i(409));Zd(t.current,Rc(),e,t,null,null)},jp.prototype.unmount=Tp.prototype.unmount=function(){var e=this._internalRoot;if(null!==e){this._internalRoot=null;var t=e.containerInfo;Zd(e.current,2,null,e,null,null),$c(),t[Re]=null}},jp.prototype.unstable_scheduleHydration=function(e){if(e){var t=Pe();e={blockedOn:null,target:e,priority:t};for(var n=0;n<hp.length&&0!==t&&t<hp[n].priority;n++);hp.splice(n,0,e),0===n&&wp(e)}};var Pp=o.version;if("19.1.1"!==Pp)throw Error(i(527,Pp,"19.1.1"));D.findDOMNode=function(e){var t=e._reactInternals;if(void 0===t){if("function"==typeof e.render)throw Error(i(188));throw e=Object.keys(e).join(","),Error(i(268,e))}return e=function(e){var t=e.alternate;if(!t){if(null===(t=s(e)))throw Error(i(188));return t!==e?null:e}for(var n=e,r=t;;){var o=n.return;if(null===o)break;var a=o.alternate;if(null===a){if(null!==(r=o.return)){n=r;continue}break}if(o.child===a.child){for(a=o.child;a;){if(a===n)return u(o),e;if(a===r)return u(o),t;a=a.sibling}throw Error(i(188))}if(n.return!==r.return)n=o,r=a;else{for(var l=!1,c=o.child;c;){if(c===n){l=!0,n=o,r=a;break}if(c===r){l=!0,r=o,n=a;break}c=c.sibling}if(!l){for(c=a.child;c;){if(c===n){l=!0,n=a,r=o;break}if(c===r){l=!0,r=a,n=o;break}c=c.sibling}if(!l)throw Error(i(189))}}if(n.alternate!==r)throw Error(i(190))}if(3!==n.tag)throw Error(i(188));return n.stateNode.current===n?e:t}(t),e=null===(e=null!==e?d(e):null)?null:e.stateNode};var Np={bundleType:0,version:"19.1.1",rendererPackageName:"react-dom",currentDispatcherRef:R,reconcilerVersion:"19.1.1"};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var Lp=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!Lp.isDisabled&&Lp.supportsFiber)try{ue=Lp.inject(Np),de=Lp}catch(Rp){}}t.createRoot=function(e,t){if(!l(e))throw Error(i(299));var n=!1,r="",o=yl,a=vl,s=wl;return null!=t&&(!0===t.unstable_strictMode&&(n=!0),void 0!==t.identifierPrefix&&(r=t.identifierPrefix),void 0!==t.onUncaughtError&&(o=t.onUncaughtError),void 0!==t.onCaughtError&&(a=t.onCaughtError),void 0!==t.onRecoverableError&&(s=t.onRecoverableError),void 0!==t.unstable_transitionCallbacks&&t.unstable_transitionCallbacks),t=Yd(e,1,!1,null,0,n,r,o,a,s,0,null),e[Re]=t.current,Bu(e),new Tp(t)},t.hydrateRoot=function(e,t,n){if(!l(e))throw Error(i(299));var r=!1,o="",a=yl,s=vl,c=wl,u=null;return null!=n&&(!0===n.unstable_strictMode&&(r=!0),void 0!==n.identifierPrefix&&(o=n.identifierPrefix),void 0!==n.onUncaughtError&&(a=n.onUncaughtError),void 0!==n.onCaughtError&&(s=n.onCaughtError),void 0!==n.onRecoverableError&&(c=n.onRecoverableError),void 0!==n.unstable_transitionCallbacks&&n.unstable_transitionCallbacks,void 0!==n.formState&&(u=n.formState)),(t=Yd(e,1,!0,t,0,r,o,a,s,c,0,u)).context=Xd(null),n=t.current,(o=aa(r=Te(r=Rc()))).callback=null,ia(n,o,r),n=r,t.current.lanes=n,_e(t,n),xu(t),e[Re]=t.current,Bu(e),new jp(t)},t.version="19.1.1"},1312:(e,t,n)=>{"use strict";n.d(t,{A:()=>c,T:()=>s});var r=n(6540),o=n(4848);function a(e,t){const n=e.split(/(\{\w+\})/).map((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e});return n.some(e=>(0,r.isValidElement)(e))?n.map((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e).filter(e=>""!==e):n.join("")}var i=n(2654);function l({id:e,message:t}){if(void 0===e&&void 0===t)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return i[e??t]??t??e}function s({message:e,id:t},n){return a(l({message:e,id:t}),n)}function c({children:e,id:t,values:n}){if(e&&"string"!=typeof e)throw console.warn("Illegal <Translate> children",e),new Error("The Docusaurus <Translate> component only accept simple string values");const r=l({message:e,id:t});return(0,o.jsx)(o.Fragment,{children:a(r,n)})}},1422:(e,t,n)=>{"use strict";n.d(t,{N:()=>g,u:()=>s});var r=n(6540),o=n(205),a=n(3109),i=n(4848);const l="ease-in-out";function s({initialState:e}){const[t,n]=(0,r.useState)(e??!1),o=(0,r.useCallback)(()=>{n(e=>!e)},[]);return{collapsed:t,setCollapsed:n,toggleCollapsed:o}}const c={display:"none",overflow:"hidden",height:"0px"},u={display:"block",overflow:"visible",height:"auto"};function d(e,t){const n=t?c:u;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function p({collapsibleRef:e,collapsed:t,animation:n}){const o=(0,r.useRef)(!1);(0,r.useEffect)(()=>{const r=e.current;function i(){const e=r.scrollHeight,t=n?.duration??function(e){if((0,a.O)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(e);return{transition:`height ${t}ms ${n?.easing??l}`,height:`${e}px`}}function s(){const e=i();r.style.transition=e.transition,r.style.height=e.height}if(!o.current)return d(r,t),void(o.current=!0);return r.style.willChange="height",function(){const e=requestAnimationFrame(()=>{t?(s(),requestAnimationFrame(()=>{r.style.height=c.height,r.style.overflow=c.overflow})):(r.style.display="block",requestAnimationFrame(()=>{s()}))});return()=>cancelAnimationFrame(e)}()},[e,t,n])}function f({as:e="div",collapsed:t,children:n,animation:o,onCollapseTransitionEnd:a,className:l}){const s=(0,r.useRef)(null);return p({collapsibleRef:s,collapsed:t,animation:o}),(0,i.jsx)(e,{ref:s,onTransitionEnd:e=>{"height"===e.propertyName&&(d(s.current,t),a?.(t))},className:l,children:n})}function m({collapsed:e,...t}){const[n,a]=(0,r.useState)(!e),[l,s]=(0,r.useState)(e);return(0,o.A)(()=>{e||a(!0)},[e]),(0,o.A)(()=>{n&&s(e)},[n,e]),n?(0,i.jsx)(f,{...t,collapsed:l}):null}function g({lazy:e,...t}){const n=e?m:f;return(0,i.jsx)(n,{...t})}},1463:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});n(6540);var r=n(5260),o=n(4848);function a({locale:e,version:t,tag:n}){const a=e;return(0,o.jsxs)(r.A,{children:[e&&(0,o.jsx)("meta",{name:"docusaurus_locale",content:e}),t&&(0,o.jsx)("meta",{name:"docusaurus_version",content:t}),n&&(0,o.jsx)("meta",{name:"docusaurus_tag",content:n}),a&&(0,o.jsx)("meta",{name:"docsearch:language",content:a}),t&&(0,o.jsx)("meta",{name:"docsearch:version",content:t}),n&&(0,o.jsx)("meta",{name:"docsearch:docusaurus_tag",content:n})]})}},1513:(e,t,n)=>{"use strict";n.d(t,{zR:()=>w,TM:()=>C,yJ:()=>f,sC:()=>T,AO:()=>p});var r=n(8168);function o(e){return"/"===e.charAt(0)}function a(e,t){for(var n=t,r=n+1,o=e.length;r<o;n+=1,r+=1)e[n]=e[r];e.pop()}const i=function(e,t){void 0===t&&(t="");var n,r=e&&e.split("/")||[],i=t&&t.split("/")||[],l=e&&o(e),s=t&&o(t),c=l||s;if(e&&o(e)?i=r:r.length&&(i.pop(),i=i.concat(r)),!i.length)return"/";if(i.length){var u=i[i.length-1];n="."===u||".."===u||""===u}else n=!1;for(var d=0,p=i.length;p>=0;p--){var f=i[p];"."===f?a(i,p):".."===f?(a(i,p),d++):d&&(a(i,p),d--)}if(!c)for(;d--;d)i.unshift("..");!c||""===i[0]||i[0]&&o(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var l=n(1561);function s(e){return"/"===e.charAt(0)?e:"/"+e}function c(e){return"/"===e.charAt(0)?e.substr(1):e}function u(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 d(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 f(e,t,n,o){var a;"string"==typeof e?(a=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var a=t.indexOf("?");return-1!==a&&(n=t.substr(a),t=t.substr(0,a)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),a.state=t):(void 0===(a=(0,r.A)({},e)).pathname&&(a.pathname=""),a.search?"?"!==a.search.charAt(0)&&(a.search="?"+a.search):a.search="",a.hash?"#"!==a.hash.charAt(0)&&(a.hash="#"+a.hash):a.hash="",void 0!==t&&void 0===a.state&&(a.state=t));try{a.pathname=decodeURI(a.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+a.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(a.key=n),o?a.pathname?"/"!==a.pathname.charAt(0)&&(a.pathname=i(a.pathname,o.pathname)):a.pathname=o.pathname:a.pathname||(a.pathname="/"),a}function m(){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 a="function"==typeof e?e(t,n):e;"string"==typeof a?"function"==typeof r?r(a,o):o(!0):o(!1!==a)}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;r<e;r++)n[r]=arguments[r];t.forEach(function(e){return e.apply(void 0,n)})}}}var g=!("undefined"==typeof window||!window.document||!window.document.createElement);function h(e,t){t(window.confirm(e))}var b="popstate",y="hashchange";function v(){try{return window.history.state||{}}catch(e){return{}}}function w(e){void 0===e&&(e={}),g||(0,l.A)(!1);var t,n=window.history,o=(-1===(t=window.navigator.userAgent).indexOf("Android 2.")&&-1===t.indexOf("Android 4.0")||-1===t.indexOf("Mobile Safari")||-1!==t.indexOf("Chrome")||-1!==t.indexOf("Windows Phone"))&&window.history&&"pushState"in window.history,a=!(-1===window.navigator.userAgent.indexOf("Trident")),i=e,c=i.forceRefresh,w=void 0!==c&&c,k=i.getUserConfirmation,x=void 0===k?h:k,S=i.keyLength,E=void 0===S?6:S,_=e.basename?d(s(e.basename)):"";function C(e){var t=e||{},n=t.key,r=t.state,o=window.location,a=o.pathname+o.search+o.hash;return _&&(a=u(a,_)),f(a,r,n)}function A(){return Math.random().toString(36).substr(2,E)}var T=m();function j(e){(0,r.A)($,e),$.length=n.length,T.notifyListeners($.location,$.action)}function P(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")})(e)||O(C(e.state))}function N(){O(C(v()))}var L=!1;function O(e){if(L)L=!1,j();else{T.confirmTransitionTo(e,"POP",x,function(t){t?j({action:"POP",location:e}):function(e){var t=$.location,n=D.indexOf(t.key);-1===n&&(n=0);var r=D.indexOf(e.key);-1===r&&(r=0);var o=n-r;o&&(L=!0,I(o))}(e)})}}var R=C(v()),D=[R.key];function F(e){return _+p(e)}function I(e){n.go(e)}var M=0;function z(e){1===(M+=e)&&1===e?(window.addEventListener(b,P),a&&window.addEventListener(y,N)):0===M&&(window.removeEventListener(b,P),a&&window.removeEventListener(y,N))}var B=!1;var $={length:n.length,action:"POP",location:R,createHref:F,push:function(e,t){var r="PUSH",a=f(e,t,A(),$.location);T.confirmTransitionTo(a,r,x,function(e){if(e){var t=F(a),i=a.key,l=a.state;if(o)if(n.pushState({key:i,state:l},null,t),w)window.location.href=t;else{var s=D.indexOf($.location.key),c=D.slice(0,s+1);c.push(a.key),D=c,j({action:r,location:a})}else window.location.href=t}})},replace:function(e,t){var r="REPLACE",a=f(e,t,A(),$.location);T.confirmTransitionTo(a,r,x,function(e){if(e){var t=F(a),i=a.key,l=a.state;if(o)if(n.replaceState({key:i,state:l},null,t),w)window.location.replace(t);else{var s=D.indexOf($.location.key);-1!==s&&(D[s]=a.key),j({action:r,location:a})}else window.location.replace(t)}})},go:I,goBack:function(){I(-1)},goForward:function(){I(1)},block:function(e){void 0===e&&(e=!1);var t=T.setPrompt(e);return B||(z(1),B=!0),function(){return B&&(B=!1,z(-1)),t()}},listen:function(e){var t=T.appendListener(e);return z(1),function(){z(-1),t()}}};return $}var k="hashchange",x={hashbang:{encodePath:function(e){return"!"===e.charAt(0)?e:"!/"+c(e)},decodePath:function(e){return"!"===e.charAt(0)?e.substr(1):e}},noslash:{encodePath:c,decodePath:s},slash:{encodePath:s,decodePath:s}};function S(e){var t=e.indexOf("#");return-1===t?e:e.slice(0,t)}function E(){var e=window.location.href,t=e.indexOf("#");return-1===t?"":e.substring(t+1)}function _(e){window.location.replace(S(window.location.href)+"#"+e)}function C(e){void 0===e&&(e={}),g||(0,l.A)(!1);var t=window.history,n=(window.navigator.userAgent.indexOf("Firefox"),e),o=n.getUserConfirmation,a=void 0===o?h:o,i=n.hashType,c=void 0===i?"slash":i,b=e.basename?d(s(e.basename)):"",y=x[c],v=y.encodePath,w=y.decodePath;function C(){var e=w(E());return b&&(e=u(e,b)),f(e)}var A=m();function T(e){(0,r.A)(B,e),B.length=t.length,A.notifyListeners(B.location,B.action)}var j=!1,P=null;function N(){var e,t,n=E(),r=v(n);if(n!==r)_(r);else{var o=C(),i=B.location;if(!j&&(t=o,(e=i).pathname===t.pathname&&e.search===t.search&&e.hash===t.hash))return;if(P===p(o))return;P=null,function(e){if(j)j=!1,T();else{var t="POP";A.confirmTransitionTo(e,t,a,function(n){n?T({action:t,location:e}):function(e){var t=B.location,n=D.lastIndexOf(p(t));-1===n&&(n=0);var r=D.lastIndexOf(p(e));-1===r&&(r=0);var o=n-r;o&&(j=!0,F(o))}(e)})}}(o)}}var L=E(),O=v(L);L!==O&&_(O);var R=C(),D=[p(R)];function F(e){t.go(e)}var I=0;function M(e){1===(I+=e)&&1===e?window.addEventListener(k,N):0===I&&window.removeEventListener(k,N)}var z=!1;var B={length:t.length,action:"POP",location:R,createHref:function(e){var t=document.querySelector("base"),n="";return t&&t.getAttribute("href")&&(n=S(window.location.href)),n+"#"+v(b+p(e))},push:function(e,t){var n="PUSH",r=f(e,void 0,void 0,B.location);A.confirmTransitionTo(r,n,a,function(e){if(e){var t=p(r),o=v(b+t);if(E()!==o){P=t,function(e){window.location.hash=e}(o);var a=D.lastIndexOf(p(B.location)),i=D.slice(0,a+1);i.push(t),D=i,T({action:n,location:r})}else T()}})},replace:function(e,t){var n="REPLACE",r=f(e,void 0,void 0,B.location);A.confirmTransitionTo(r,n,a,function(e){if(e){var t=p(r),o=v(b+t);E()!==o&&(P=t,_(o));var a=D.indexOf(p(B.location));-1!==a&&(D[a]=t),T({action:n,location:r})}})},go:F,goBack:function(){F(-1)},goForward:function(){F(1)},block:function(e){void 0===e&&(e=!1);var t=A.setPrompt(e);return z||(M(1),z=!0),function(){return z&&(z=!1,M(-1)),t()}},listen:function(e){var t=A.appendListener(e);return M(1),function(){M(-1),t()}}};return B}function A(e,t,n){return Math.min(Math.max(e,t),n)}function T(e){void 0===e&&(e={});var t=e,n=t.getUserConfirmation,o=t.initialEntries,a=void 0===o?["/"]:o,i=t.initialIndex,l=void 0===i?0:i,s=t.keyLength,c=void 0===s?6:s,u=m();function d(e){(0,r.A)(w,e),w.length=w.entries.length,u.notifyListeners(w.location,w.action)}function g(){return Math.random().toString(36).substr(2,c)}var h=A(l,0,a.length-1),b=a.map(function(e){return f(e,void 0,"string"==typeof e?g():e.key||g())}),y=p;function v(e){var t=A(w.index+e,0,w.entries.length-1),r=w.entries[t];u.confirmTransitionTo(r,"POP",n,function(e){e?d({action:"POP",location:r,index:t}):d()})}var w={length:b.length,action:"POP",location:b[h],index:h,entries:b,createHref:y,push:function(e,t){var r="PUSH",o=f(e,t,g(),w.location);u.confirmTransitionTo(o,r,n,function(e){if(e){var t=w.index+1,n=w.entries.slice(0);n.length>t?n.splice(t,n.length-t,o):n.push(o),d({action:r,location:o,index:t,entries:n})}})},replace:function(e,t){var r="REPLACE",o=f(e,t,g(),w.location);u.confirmTransitionTo(o,r,n,function(e){e&&(w.entries[w.index]=o,d({action:r,location:o}))})},go:v,goBack:function(){v(-1)},goForward:function(){v(1)},canGo:function(e){var t=w.index+e;return t>=0&&t<w.entries.length},block:function(e){return void 0===e&&(e=!1),u.setPrompt(e)},listen:function(e){return u.appendListener(e)}};return w}},1561:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var r=!0,o="Invariant failed";function a(e,t){if(!e){if(r)throw new Error(o);var n="function"==typeof t?t():t,a=n?"".concat(o,": ").concat(n):o;throw new Error(a)}}},1635:(e,t,n)=>{"use strict";n.r(t),n.d(t,{__addDisposableResource:()=>D,__assign:()=>a,__asyncDelegator:()=>_,__asyncGenerator:()=>E,__asyncValues:()=>C,__await:()=>S,__awaiter:()=>m,__classPrivateFieldGet:()=>L,__classPrivateFieldIn:()=>R,__classPrivateFieldSet:()=>O,__createBinding:()=>h,__decorate:()=>l,__disposeResources:()=>I,__esDecorate:()=>c,__exportStar:()=>b,__extends:()=>o,__generator:()=>g,__importDefault:()=>N,__importStar:()=>P,__makeTemplateObject:()=>A,__metadata:()=>f,__param:()=>s,__propKey:()=>d,__read:()=>v,__rest:()=>i,__rewriteRelativeImportExtension:()=>M,__runInitializers:()=>u,__setFunctionName:()=>p,__spread:()=>w,__spreadArray:()=>x,__spreadArrays:()=>k,__values:()=>y,default:()=>z});var r=function(e,t){return r=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])},r(e,t)};function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var a=function(){return a=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},a.apply(this,arguments)};function i(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<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n}function l(e,t,n,r){var o,a=arguments.length,i=a<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)i=Reflect.decorate(e,t,n,r);else for(var l=e.length-1;l>=0;l--)(o=e[l])&&(i=(a<3?o(i):a>3?o(t,n,i):o(t,n))||i);return a>3&&i&&Object.defineProperty(t,n,i),i}function s(e,t){return function(n,r){t(n,r,e)}}function c(e,t,n,r,o,a){function i(e){if(void 0!==e&&"function"!=typeof e)throw new TypeError("Function expected");return e}for(var l,s=r.kind,c="getter"===s?"get":"setter"===s?"set":"value",u=!t&&e?r.static?e:e.prototype:null,d=t||(u?Object.getOwnPropertyDescriptor(u,r.name):{}),p=!1,f=n.length-1;f>=0;f--){var m={};for(var g in r)m[g]="access"===g?{}:r[g];for(var g in r.access)m.access[g]=r.access[g];m.addInitializer=function(e){if(p)throw new TypeError("Cannot add initializers after decoration has completed");a.push(i(e||null))};var h=(0,n[f])("accessor"===s?{get:d.get,set:d.set}:d[c],m);if("accessor"===s){if(void 0===h)continue;if(null===h||"object"!=typeof h)throw new TypeError("Object expected");(l=i(h.get))&&(d.get=l),(l=i(h.set))&&(d.set=l),(l=i(h.init))&&o.unshift(l)}else(l=i(h))&&("field"===s?o.unshift(l):d[c]=l)}u&&Object.defineProperty(u,r.name,d),p=!0}function u(e,t,n){for(var r=arguments.length>2,o=0;o<t.length;o++)n=r?t[o].call(e,n):t[o].call(e);return r?n:void 0}function d(e){return"symbol"==typeof e?e:"".concat(e)}function p(e,t,n){return"symbol"==typeof t&&(t=t.description?"[".concat(t.description,"]"):""),Object.defineProperty(e,"name",{configurable:!0,value:n?"".concat(n," ",t):t})}function f(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)}function m(e,t,n,r){return new(n||(n=Promise))(function(o,a){function i(e){try{s(r.next(e))}catch(t){a(t)}}function l(e){try{s(r.throw(e))}catch(t){a(t)}}function s(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(i,l)}s((r=r.apply(e,t||[])).next())})}function g(e,t){var n,r,o,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},i=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return i.next=l(0),i.throw=l(1),i.return=l(2),"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function l(l){return function(s){return function(l){if(n)throw new TypeError("Generator is already executing.");for(;i&&(i=0,l[0]&&(a=0)),a;)try{if(n=1,r&&(o=2&l[0]?r.return:l[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,l[1])).done)return o;switch(r=0,o&&(l=[2&l[0],o.value]),l[0]){case 0:case 1:o=l;break;case 4:return a.label++,{value:l[1],done:!1};case 5:a.label++,r=l[1],l=[0];continue;case 7:l=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==l[0]&&2!==l[0])){a=0;continue}if(3===l[0]&&(!o||l[1]>o[0]&&l[1]<o[3])){a.label=l[1];break}if(6===l[0]&&a.label<o[1]){a.label=o[1],o=l;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(l);break}o[2]&&a.ops.pop(),a.trys.pop();continue}l=t.call(e,a)}catch(s){l=[6,s],r=0}finally{n=o=0}if(5&l[0])throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}([l,s])}}}var h=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]};function b(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||h(t,e,n)}function y(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function v(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,a=n.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(r=a.next()).done;)i.push(r.value)}catch(l){o={error:l}}finally{try{r&&!r.done&&(n=a.return)&&n.call(a)}finally{if(o)throw o.error}}return i}function w(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(v(arguments[t]));return e}function k(){for(var e=0,t=0,n=arguments.length;t<n;t++)e+=arguments[t].length;var r=Array(e),o=0;for(t=0;t<n;t++)for(var a=arguments[t],i=0,l=a.length;i<l;i++,o++)r[o]=a[i];return r}function x(e,t,n){if(n||2===arguments.length)for(var r,o=0,a=t.length;o<a;o++)!r&&o in t||(r||(r=Array.prototype.slice.call(t,0,o)),r[o]=t[o]);return e.concat(r||Array.prototype.slice.call(t))}function S(e){return this instanceof S?(this.v=e,this):new S(e)}function E(e,t,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var r,o=n.apply(e,t||[]),a=[];return r=Object.create(("function"==typeof AsyncIterator?AsyncIterator:Object).prototype),i("next"),i("throw"),i("return",function(e){return function(t){return Promise.resolve(t).then(e,c)}}),r[Symbol.asyncIterator]=function(){return this},r;function i(e,t){o[e]&&(r[e]=function(t){return new Promise(function(n,r){a.push([e,t,n,r])>1||l(e,t)})},t&&(r[e]=t(r[e])))}function l(e,t){try{(n=o[e](t)).value instanceof S?Promise.resolve(n.value.v).then(s,c):u(a[0][2],n)}catch(r){u(a[0][3],r)}var n}function s(e){l("next",e)}function c(e){l("throw",e)}function u(e,t){e(t),a.shift(),a.length&&l(a[0][0],a[0][1])}}function _(e){var t,n;return t={},r("next"),r("throw",function(e){throw e}),r("return"),t[Symbol.iterator]=function(){return this},t;function r(r,o){t[r]=e[r]?function(t){return(n=!n)?{value:S(e[r](t)),done:!1}:o?o(t):t}:o}}function C(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t,n=e[Symbol.asyncIterator];return n?n.call(e):(e=y(e),t={},r("next"),r("throw"),r("return"),t[Symbol.asyncIterator]=function(){return this},t);function r(n){t[n]=e[n]&&function(t){return new Promise(function(r,o){(function(e,t,n,r){Promise.resolve(r).then(function(t){e({value:t,done:n})},t)})(r,o,(t=e[n](t)).done,t.value)})}}}function A(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e}var T=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},j=function(e){return j=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},j(e)};function P(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=j(e),r=0;r<n.length;r++)"default"!==n[r]&&h(t,e,n[r]);return T(t,e),t}function N(e){return e&&e.__esModule?e:{default:e}}function L(e,t,n,r){if("a"===n&&!r)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?r:"a"===n?r.call(e):r?r.value:t.get(e)}function O(e,t,n,r,o){if("m"===r)throw new TypeError("Private method is not writable");if("a"===r&&!o)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!o:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===r?o.call(e,n):o?o.value=n:t.set(e,n),n}function R(e,t){if(null===t||"object"!=typeof t&&"function"!=typeof t)throw new TypeError("Cannot use 'in' operator on non-object");return"function"==typeof e?t===e:e.has(t)}function D(e,t,n){if(null!=t){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object expected.");var r,o;if(n){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");r=t[Symbol.asyncDispose]}if(void 0===r){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");r=t[Symbol.dispose],n&&(o=r)}if("function"!=typeof r)throw new TypeError("Object not disposable.");o&&(r=function(){try{o.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:r,async:n})}else n&&e.stack.push({async:!0});return t}var F="function"==typeof SuppressedError?SuppressedError:function(e,t,n){var r=new Error(n);return r.name="SuppressedError",r.error=e,r.suppressed=t,r};function I(e){function t(t){e.error=e.hasError?new F(t,e.error,"An error was suppressed during disposal."):t,e.hasError=!0}var n,r=0;return function o(){for(;n=e.stack.pop();)try{if(!n.async&&1===r)return r=0,e.stack.push(n),Promise.resolve().then(o);if(n.dispose){var a=n.dispose.call(n.value);if(n.async)return r|=2,Promise.resolve(a).then(o,function(e){return t(e),o()})}else r|=1}catch(i){t(i)}if(1===r)return e.hasError?Promise.reject(e.error):Promise.resolve();if(e.hasError)throw e.error}()}function M(e,t){return"string"==typeof e&&/^\.\.?\//.test(e)?e.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i,function(e,n,r,o,a){return n?t?".jsx":".js":!r||o&&a?r+o+"."+a.toLowerCase()+"js":e}):e}const z={__extends:o,__assign:a,__rest:i,__decorate:l,__param:s,__esDecorate:c,__runInitializers:u,__propKey:d,__setFunctionName:p,__metadata:f,__awaiter:m,__generator:g,__createBinding:h,__exportStar:b,__values:y,__read:v,__spread:w,__spreadArrays:k,__spreadArray:x,__await:S,__asyncGenerator:E,__asyncDelegator:_,__asyncValues:C,__makeTemplateObject:A,__importStar:P,__importDefault:N,__classPrivateFieldGet:L,__classPrivateFieldSet:O,__classPrivateFieldIn:R,__addDisposableResource:D,__disposeResources:I,__rewriteRelativeImportExtension:M}},1656:(e,t,n)=>{"use strict";n.d(t,{A:()=>At});var r=n(6540),o=n(4164),a=n(7489),i=n(5500),l=n(6347),s=n(1312),c=n(5062),u=n(4848);const d="__docusaurus_skipToContent_fallback";function p(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function f(){const e=(0,r.useRef)(null),{action:t}=(0,l.W6)(),n=(0,r.useCallback)(e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&p(t)},[]);return(0,c.$)(({location:n})=>{e.current&&!n.hash&&"PUSH"===t&&p(e.current)}),{containerRef:e,onClick:n}}const m=(0,s.T)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function g(e){const t=e.children??m,{containerRef:n,onClick:r}=f();return(0,u.jsx)("div",{ref:n,role:"region","aria-label":m,children:(0,u.jsx)("a",{...e,href:`#${d}`,onClick:r,children:t})})}var h=n(7559),b=n(4090);const y={skipToContent:"skipToContent_fXgn"};function v(){return(0,u.jsx)(g,{className:y.skipToContent})}var w=n(6342),k=n(5041);function x({width:e=21,height:t=21,color:n="currentColor",strokeWidth:r=1.2,className:o,...a}){return(0,u.jsx)("svg",{viewBox:"0 0 15 15",width:e,height:t,...a,children:(0,u.jsx)("g",{stroke:n,strokeWidth:r,children:(0,u.jsx)("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})})})}const S={closeButton:"closeButton_CVFx"};function E(e){return(0,u.jsx)("button",{type:"button","aria-label":(0,s.T)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"}),...e,className:(0,o.A)("clean-btn close",S.closeButton,e.className),children:(0,u.jsx)(x,{width:14,height:14,strokeWidth:3.1})})}const _={content:"content_knG7"};function C(e){const{announcementBar:t}=(0,w.p)(),{content:n}=t;return(0,u.jsx)("div",{...e,className:(0,o.A)(_.content,e.className),dangerouslySetInnerHTML:{__html:n}})}const A={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function T(){const{announcementBar:e}=(0,w.p)(),{isActive:t,close:n}=(0,k.M)();if(!t)return null;const{backgroundColor:r,textColor:a,isCloseable:i}=e;return(0,u.jsxs)("div",{className:(0,o.A)(h.G.announcementBar.container,A.announcementBar),style:{backgroundColor:r,color:a},role:"banner",children:[i&&(0,u.jsx)("div",{className:A.announcementBarPlaceholder}),(0,u.jsx)(C,{className:A.announcementBarContent}),i&&(0,u.jsx)(E,{onClick:n,className:A.announcementBarClose})]})}var j=n(9876),P=n(3104);var N=n(9532),L=n(5600);const O=r.createContext(null);function R({children:e}){const t=function(){const e=(0,j.M)(),t=(0,L.YL)(),[n,o]=(0,r.useState)(!1),a=null!==t.component,i=(0,N.ZC)(a);return(0,r.useEffect)(()=>{a&&!i&&o(!0)},[a,i]),(0,r.useEffect)(()=>{a?e.shown||o(!0):o(!1)},[e.shown,a]),(0,r.useMemo)(()=>[n,o],[n])}();return(0,u.jsx)(O.Provider,{value:t,children:e})}function D(e){if(e.component){const t=e.component;return(0,u.jsx)(t,{...e.props})}}function F(){const e=(0,r.useContext)(O);if(!e)throw new N.dV("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,o=(0,r.useCallback)(()=>n(!1),[n]),a=(0,L.YL)();return(0,r.useMemo)(()=>({shown:t,hide:o,content:D(a)}),[o,a,t])}function I(e){return parseInt(r.version.split(".")[0],10)<19?{inert:e?"":void 0}:{inert:e}}function M({children:e,inert:t}){return(0,u.jsx)("div",{className:(0,o.A)(h.G.layout.navbar.mobileSidebar.panel,"navbar-sidebar__item menu"),...I(t),children:e})}function z({header:e,primaryMenu:t,secondaryMenu:n}){const{shown:r}=F();return(0,u.jsxs)("div",{className:(0,o.A)(h.G.layout.navbar.mobileSidebar.container,"navbar-sidebar"),children:[e,(0,u.jsxs)("div",{className:(0,o.A)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":r}),children:[(0,u.jsx)(M,{inert:r,children:t}),(0,u.jsx)(M,{inert:!r,children:n})]})]})}var B=n(5293),$=n(2303);function U(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"})})}function q(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"})})}function H(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"m12 21c4.971 0 9-4.029 9-9s-4.029-9-9-9-9 4.029-9 9 4.029 9 9 9zm4.95-13.95c1.313 1.313 2.05 3.093 2.05 4.95s-0.738 3.637-2.05 4.95c-1.313 1.313-3.093 2.05-4.95 2.05v-14c1.857 0 3.637 0.737 4.95 2.05z"})})}const G="toggle_vylO",V="toggleButton_gllP",W="toggleIcon_g3eP",Q="systemToggleIcon_QzmC",K="lightToggleIcon_pyhR",Y="darkToggleIcon_wfgR",X="toggleButtonDisabled_aARS";function Z(e){switch(e){case null:return(0,s.T)({message:"system mode",id:"theme.colorToggle.ariaLabel.mode.system",description:"The name for the system color mode"});case"light":return(0,s.T)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"});case"dark":return(0,s.T)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"});default:throw new Error(`unexpected color mode ${e}`)}}function J(e){return(0,s.T)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the color mode toggle"},{mode:Z(e)})}function ee(){return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(U,{"aria-hidden":!0,className:(0,o.A)(W,K)}),(0,u.jsx)(q,{"aria-hidden":!0,className:(0,o.A)(W,Y)}),(0,u.jsx)(H,{"aria-hidden":!0,className:(0,o.A)(W,Q)})]})}function te({className:e,buttonClassName:t,respectPrefersColorScheme:n,value:r,onChange:a}){const i=(0,$.A)();return(0,u.jsx)("div",{className:(0,o.A)(G,e),children:(0,u.jsx)("button",{className:(0,o.A)("clean-btn",V,!i&&X,t),type:"button",onClick:()=>a(function(e,t){if(!t)return"dark"===e?"light":"dark";switch(e){case null:return"light";case"light":return"dark";case"dark":return null;default:throw new Error(`unexpected color mode ${e}`)}}(r,n)),disabled:!i,title:Z(r),"aria-label":J(r),children:(0,u.jsx)(ee,{})})})}const ne=r.memo(te),re={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function oe({className:e}){const t=(0,w.p)().navbar.style,{disableSwitch:n,respectPrefersColorScheme:r}=(0,w.p)().colorMode,{colorModeChoice:o,setColorMode:a}=(0,B.G)();return n?null:(0,u.jsx)(ne,{className:e,buttonClassName:"dark"===t?re.darkNavbarColorModeToggle:void 0,respectPrefersColorScheme:r,value:o,onChange:a})}var ae=n(3465);function ie(){return(0,u.jsx)(ae.A,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function le(){const e=(0,j.M)();return(0,u.jsx)("button",{type:"button","aria-label":(0,s.T)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle(),children:(0,u.jsx)(x,{color:"var(--ifm-color-emphasis-600)"})})}function se(){return(0,u.jsxs)("div",{className:"navbar-sidebar__brand",children:[(0,u.jsx)(ie,{}),(0,u.jsx)(oe,{className:"margin-right--md"}),(0,u.jsx)(le,{})]})}var ce=n(8774),ue=n(6025),de=n(6654);function pe(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var fe=n(3186);function me({activeBasePath:e,activeBaseRegex:t,to:n,href:r,label:o,html:a,isDropdownLink:i,prependBaseUrlToHref:l,...s}){const c=(0,ue.Ay)(n),d=(0,ue.Ay)(e),p=(0,ue.Ay)(r,{forcePrependBaseUrl:!0}),f=o&&r&&!(0,de.A)(r),m=a?{dangerouslySetInnerHTML:{__html:a}}:{children:(0,u.jsxs)(u.Fragment,{children:[o,f&&(0,u.jsx)(fe.A,{...i&&{width:12,height:12}})]})};return r?(0,u.jsx)(ce.A,{href:l?p:r,...s,...m}):(0,u.jsx)(ce.A,{to:c,isNavLink:!0,...(e||t)&&{isActive:(e,n)=>t?pe(t,n.pathname):n.pathname.startsWith(d)},...s,...m})}function ge({className:e,isDropdownItem:t,...n}){return(0,u.jsx)("li",{className:"menu__list-item",children:(0,u.jsx)(me,{className:(0,o.A)("menu__link",e),...n})})}function he({className:e,isDropdownItem:t=!1,...n}){const r=(0,u.jsx)(me,{className:(0,o.A)(t?"dropdown__link":"navbar__item navbar__link",e),isDropdownLink:t,...n});return t?(0,u.jsx)("li",{children:r}):r}function be({mobile:e=!1,position:t,...n}){const r=e?ge:he;return(0,u.jsx)(r,{...n,activeClassName:n.activeClassName??(e?"menu__link--active":"navbar__link--active")})}var ye=n(1422),ve=n(9169),we=n(4586);const ke="dropdownNavbarItemMobile_J0Sd";function xe(e,t){return e.some(e=>function(e,t){return!!(0,ve.ys)(e.to,t)||!!pe(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t))}function Se({collapsed:e,onClick:t}){return(0,u.jsx)("button",{"aria-label":e?(0,s.T)({id:"theme.navbar.mobileDropdown.collapseButton.expandAriaLabel",message:"Expand the dropdown",description:"The ARIA label of the button to expand the mobile dropdown navbar item"}):(0,s.T)({id:"theme.navbar.mobileDropdown.collapseButton.collapseAriaLabel",message:"Collapse the dropdown",description:"The ARIA label of the button to collapse the mobile dropdown navbar item"}),"aria-expanded":!e,type:"button",className:"clean-btn menu__caret",onClick:t})}function Ee({items:e,className:t,position:n,onClick:a,...i}){const s=function(){const{siteConfig:{baseUrl:e}}=(0,we.A)(),{pathname:t}=(0,l.zy)();return t.replace(e,"/")}(),c=(0,ve.ys)(i.to,s),d=xe(e,s),{collapsed:p,toggleCollapsed:f}=function({active:e}){const{collapsed:t,toggleCollapsed:n,setCollapsed:o}=(0,ye.u)({initialState:()=>!e});return(0,r.useEffect)(()=>{e&&o(!1)},[e,o]),{collapsed:t,toggleCollapsed:n}}({active:c||d}),m=i.to?void 0:"#";return(0,u.jsxs)("li",{className:(0,o.A)("menu__list-item",{"menu__list-item--collapsed":p}),children:[(0,u.jsxs)("div",{className:(0,o.A)("menu__list-item-collapsible",{"menu__list-item-collapsible--active":c}),children:[(0,u.jsx)(me,{role:"button",className:(0,o.A)(ke,"menu__link menu__link--sublist",t),href:m,...i,onClick:e=>{"#"===m&&e.preventDefault(),f()},children:i.children??i.label}),(0,u.jsx)(Se,{collapsed:p,onClick:e=>{e.preventDefault(),f()}})]}),(0,u.jsx)(ye.N,{lazy:!0,as:"ul",className:"menu__list",collapsed:p,children:e.map((e,t)=>(0,r.createElement)(ze,{mobile:!0,isDropdownItem:!0,onClick:a,activeClassName:"menu__link--active",...e,key:t}))})]})}function _e({items:e,position:t,className:n,onClick:a,...i}){const l=(0,r.useRef)(null),[s,c]=(0,r.useState)(!1);return(0,r.useEffect)(()=>{const e=e=>{l.current&&!l.current.contains(e.target)&&c(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}},[l]),(0,u.jsxs)("div",{ref:l,className:(0,o.A)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===t,"dropdown--show":s}),children:[(0,u.jsx)(me,{"aria-haspopup":"true","aria-expanded":s,role:"button",href:i.to?void 0:"#",className:(0,o.A)("navbar__link",n),...i,onClick:i.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),c(!s))},children:i.children??i.label}),(0,u.jsx)("ul",{className:"dropdown__menu",children:e.map((e,t)=>(0,r.createElement)(ze,{isDropdownItem:!0,activeClassName:"dropdown__link--active",...e,key:t}))})]})}function Ce({mobile:e=!1,...t}){const n=e?Ee:_e;return(0,u.jsx)(n,{...t})}var Ae=n(2131);function Te({width:e=20,height:t=20,...n}){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:e,height:t,"aria-hidden":!0,...n,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"})})}const je="iconLanguage_nlXk";var Pe=n(418);const Ne={navbarSearchContainer:"navbarSearchContainer_Bca1"};function Le({children:e,className:t}){return(0,u.jsx)("div",{className:(0,o.A)(t,Ne.navbarSearchContainer),children:e})}var Oe=n(4070),Re=n(4718);var De=n(3886);function Fe({docsPluginId:e,configs:t}){return function(e,t){if(t){const n=new Map(e.map(e=>[e.name,e])),r=(t,r)=>{const o=n.get(t);if(!o)throw new Error(`No docs version exist for name '${t}', please verify your 'docsVersionDropdown' navbar item versions config.\nAvailable version names:\n- ${e.map(e=>`${e.name}`).join("\n- ")}`);return{version:o,label:r?.label??o.label}};return Array.isArray(t)?t.map(e=>r(e,void 0)):Object.entries(t).map(([e,t])=>r(e,t))}return e.map(e=>({version:e,label:e.label}))}((0,Oe.jh)(e),t)}function Ie(e,t){return t.alternateDocVersions[e.name]??function(e){return e.docs.find(t=>t.id===e.mainDocId)}(e)}const Me={default:be,localeDropdown:function({mobile:e,dropdownItemsBefore:t,dropdownItemsAfter:n,queryString:r="",...o}){const{i18n:{currentLocale:a,locales:i,localeConfigs:c}}=(0,we.A)(),d=(0,Ae.o)(),{search:p,hash:f}=(0,l.zy)(),m=[...t,...i.map(t=>{const n=`${`pathname://${d.createUrl({locale:t,fullyQualified:!1})}`}${p}${f}${r}`;return{label:c[t].label,lang:c[t].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:t===a?e?"menu__link--active":"dropdown__link--active":""}}),...n],g=e?(0,s.T)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):c[a].label;return(0,u.jsx)(Ce,{...o,mobile:e,label:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(Te,{className:je}),g]}),items:m})},search:function({mobile:e,className:t}){return e?null:(0,u.jsx)(Le,{className:t,children:(0,u.jsx)(Pe.A,{})})},dropdown:Ce,html:function({value:e,className:t,mobile:n=!1,isDropdownItem:r=!1}){const a=r?"li":"div";return(0,u.jsx)(a,{className:(0,o.A)({navbar__item:!n&&!r,"menu__list-item":n},t),dangerouslySetInnerHTML:{__html:e}})},doc:function({docId:e,label:t,docsPluginId:n,...r}){const{activeDoc:o}=(0,Oe.zK)(n),a=(0,Re.QB)(e,n),i=o?.path===a?.path;return null===a||a.unlisted&&!i?null:(0,u.jsx)(be,{exact:!0,...r,isActive:()=>i||!!o?.sidebar&&o.sidebar===a.sidebar,label:t??a.id,to:a.path})},docSidebar:function({sidebarId:e,label:t,docsPluginId:n,...r}){const{activeDoc:o}=(0,Oe.zK)(n),a=(0,Re.fW)(e,n).link;if(!a)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${e}" doesn't have anything to be linked to.`);return(0,u.jsx)(be,{exact:!0,...r,isActive:()=>o?.sidebar===e,label:t??a.label,to:a.path})},docsVersion:function({label:e,to:t,docsPluginId:n,...r}){const o=(0,Re.Vd)(n)[0],a=e??o.label,i=t??(e=>e.docs.find(t=>t.id===e.mainDocId))(o).path;return(0,u.jsx)(be,{...r,label:a,to:i})},docsVersionDropdown:function({mobile:e,docsPluginId:t,dropdownActiveClassDisabled:n,dropdownItemsBefore:r,dropdownItemsAfter:o,versions:a,...i}){const{search:c,hash:d}=(0,l.zy)(),p=(0,Oe.zK)(t),{savePreferredVersionName:f}=(0,De.g1)(t),m=Fe({docsPluginId:t,configs:a}),g=function({docsPluginId:e,versionItems:t}){return(0,Re.Vd)(e).map(e=>t.find(t=>t.version===e)).filter(e=>void 0!==e)[0]??t[0]}({docsPluginId:t,versionItems:m}),h=[...r,...m.map(function({version:e,label:t}){return{label:t,to:`${Ie(e,p).path}${c}${d}`,isActive:()=>e===p.activeVersion,onClick:()=>f(e.name)}}),...o],b=e&&h.length>1?(0,s.T)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):g.label,y=e&&h.length>1?void 0:Ie(g.version,p).path;return h.length<=1?(0,u.jsx)(be,{...i,mobile:e,label:b,to:y,isActive:n?()=>!1:void 0}):(0,u.jsx)(Ce,{...i,mobile:e,label:b,to:y,items:h,isActive:n?()=>!1:void 0})}};function ze({type:e,...t}){const n=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(e,t),r=Me[n];if(!r)throw new Error(`No NavbarItem component found for type "${e}".`);return(0,u.jsx)(r,{...t})}function Be(){const e=(0,j.M)(),t=(0,w.p)().navbar.items;return(0,u.jsx)("ul",{className:"menu__list",children:t.map((t,n)=>(0,r.createElement)(ze,{mobile:!0,...t,onClick:()=>e.toggle(),key:n}))})}function $e(e){return(0,u.jsx)("button",{...e,type:"button",className:"clean-btn navbar-sidebar__back",children:(0,u.jsx)(s.A,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)",children:"\u2190 Back to main menu"})})}function Ue(){const e=0===(0,w.p)().navbar.items.length,t=F();return(0,u.jsxs)(u.Fragment,{children:[!e&&(0,u.jsx)($e,{onClick:()=>t.hide()}),t.content]})}function qe(){const e=(0,j.M)();return function(e=!0){(0,r.useEffect)(()=>(document.body.style.overflow=e?"hidden":"visible",()=>{document.body.style.overflow="visible"}),[e])}(e.shown),e.shouldRender?(0,u.jsx)(z,{header:(0,u.jsx)(se,{}),primaryMenu:(0,u.jsx)(Be,{}),secondaryMenu:(0,u.jsx)(Ue,{})}):null}const He={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Ge(e){return(0,u.jsx)("div",{role:"presentation",...e,className:(0,o.A)("navbar-sidebar__backdrop",e.className)})}function Ve({children:e}){const{navbar:{hideOnScroll:t,style:n}}=(0,w.p)(),a=(0,j.M)(),{navbarRef:i,isNavbarVisible:l}=function(e){const[t,n]=(0,r.useState)(e),o=(0,r.useRef)(!1),a=(0,r.useRef)(0),i=(0,r.useCallback)(e=>{null!==e&&(a.current=e.getBoundingClientRect().height)},[]);return(0,P.Mq)(({scrollY:t},r)=>{if(!e)return;if(t<a.current)return void n(!0);if(o.current)return void(o.current=!1);const i=r?.scrollY,l=document.documentElement.scrollHeight-a.current,s=window.innerHeight;i&&t>=i?n(!1):t+s<l&&n(!0)}),(0,c.$)(t=>{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return o.current=!0,void n(!1);n(!0)}),{navbarRef:i,isNavbarVisible:t}}(t);return(0,u.jsxs)("nav",{ref:i,"aria-label":(0,s.T)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,o.A)(h.G.layout.navbar.container,"navbar","navbar--fixed-top",t&&[He.navbarHideable,!l&&He.navbarHidden],{"navbar--dark":"dark"===n,"navbar--primary":"primary"===n,"navbar-sidebar--show":a.shown}),children:[e,(0,u.jsx)(Ge,{onClick:a.toggle}),(0,u.jsx)(qe,{})]})}var We=n(440);const Qe={errorBoundaryError:"errorBoundaryError_a6uf",errorBoundaryFallback:"errorBoundaryFallback_VBag"};function Ke(e){return(0,u.jsx)("button",{type:"button",...e,children:(0,u.jsx)(s.A,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error",children:"Try again"})})}function Ye({error:e}){const t=(0,We.rA)(e).map(e=>e.message).join("\n\nCause:\n");return(0,u.jsx)("p",{className:Qe.errorBoundaryError,children:t})}class Xe extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const Ze="right";function Je({width:e=30,height:t=30,className:n,...r}){return(0,u.jsx)("svg",{className:n,width:e,height:t,viewBox:"0 0 30 30","aria-hidden":"true",...r,children:(0,u.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"})})}function et(){const{toggle:e,shown:t}=(0,j.M)();return(0,u.jsx)("button",{onClick:e,"aria-label":(0,s.T)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button",children:(0,u.jsx)(Je,{})})}const tt={colorModeToggle:"colorModeToggle_DEke"};function nt({items:e}){return(0,u.jsx)(u.Fragment,{children:e.map((e,t)=>(0,u.jsx)(Xe,{onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t}),children:(0,u.jsx)(ze,{...e})},t))})}function rt({left:e,right:t}){return(0,u.jsxs)("div",{className:"navbar__inner",children:[(0,u.jsx)("div",{className:(0,o.A)(h.G.layout.navbar.containerLeft,"navbar__items"),children:e}),(0,u.jsx)("div",{className:(0,o.A)(h.G.layout.navbar.containerRight,"navbar__items navbar__items--right"),children:t})]})}function ot(){const e=(0,j.M)(),t=(0,w.p)().navbar.items,[n,r]=function(e){function t(e){return"left"===(e.position??Ze)}return[e.filter(t),e.filter(e=>!t(e))]}(t),o=t.find(e=>"search"===e.type);return(0,u.jsx)(rt,{left:(0,u.jsxs)(u.Fragment,{children:[!e.disabled&&(0,u.jsx)(et,{}),(0,u.jsx)(ie,{}),(0,u.jsx)(nt,{items:n})]}),right:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(nt,{items:r}),(0,u.jsx)(oe,{className:tt.colorModeToggle}),!o&&(0,u.jsx)(Le,{children:(0,u.jsx)(Pe.A,{})})]})})}function at(){return(0,u.jsx)(Ve,{children:(0,u.jsx)(ot,{})})}function it({item:e}){const{to:t,href:n,label:r,prependBaseUrlToHref:a,className:i,...l}=e,s=(0,ue.Ay)(t),c=(0,ue.Ay)(n,{forcePrependBaseUrl:!0});return(0,u.jsxs)(ce.A,{className:(0,o.A)("footer__link-item",i),...n?{href:a?c:n}:{to:s},...l,children:[r,n&&!(0,de.A)(n)&&(0,u.jsx)(fe.A,{})]})}function lt({item:e}){return e.html?(0,u.jsx)("li",{className:(0,o.A)("footer__item",e.className),dangerouslySetInnerHTML:{__html:e.html}}):(0,u.jsx)("li",{className:"footer__item",children:(0,u.jsx)(it,{item:e})},e.href??e.to)}function st({column:e}){return(0,u.jsxs)("div",{className:(0,o.A)(h.G.layout.footer.column,"col footer__col",e.className),children:[(0,u.jsx)("div",{className:"footer__title",children:e.title}),(0,u.jsx)("ul",{className:"footer__items clean-list",children:e.items.map((e,t)=>(0,u.jsx)(lt,{item:e},t))})]})}function ct({columns:e}){return(0,u.jsx)("div",{className:"row footer__links",children:e.map((e,t)=>(0,u.jsx)(st,{column:e},t))})}function ut(){return(0,u.jsx)("span",{className:"footer__link-separator",children:"\xb7"})}function dt({item:e}){return e.html?(0,u.jsx)("span",{className:(0,o.A)("footer__link-item",e.className),dangerouslySetInnerHTML:{__html:e.html}}):(0,u.jsx)(it,{item:e})}function pt({links:e}){return(0,u.jsx)("div",{className:"footer__links text--center",children:(0,u.jsx)("div",{className:"footer__links",children:e.map((t,n)=>(0,u.jsxs)(r.Fragment,{children:[(0,u.jsx)(dt,{item:t}),e.length!==n+1&&(0,u.jsx)(ut,{})]},n))})})}function ft({links:e}){return function(e){return"title"in e[0]}(e)?(0,u.jsx)(ct,{columns:e}):(0,u.jsx)(pt,{links:e})}var mt=n(1122);const gt="footerLogoLink_BH7S";function ht({logo:e}){const{withBaseUrl:t}=(0,ue.hH)(),n={light:t(e.src),dark:t(e.srcDark??e.src)};return(0,u.jsx)(mt.A,{className:(0,o.A)("footer__logo",e.className),alt:e.alt,sources:n,width:e.width,height:e.height,style:e.style})}function bt({logo:e}){return e.href?(0,u.jsx)(ce.A,{href:e.href,className:gt,target:e.target,children:(0,u.jsx)(ht,{logo:e})}):(0,u.jsx)(ht,{logo:e})}function yt({copyright:e}){return(0,u.jsx)("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:e}})}function vt({style:e,links:t,logo:n,copyright:r}){return(0,u.jsx)("footer",{className:(0,o.A)(h.G.layout.footer.container,"footer",{"footer--dark":"dark"===e}),children:(0,u.jsxs)("div",{className:"container container-fluid",children:[t,(n||r)&&(0,u.jsxs)("div",{className:"footer__bottom text--center",children:[n&&(0,u.jsx)("div",{className:"margin-bottom--sm",children:n}),r]})]})})}function wt(){const{footer:e}=(0,w.p)();if(!e)return null;const{copyright:t,links:n,logo:r,style:o}=e;return(0,u.jsx)(vt,{style:o,links:n&&n.length>0&&(0,u.jsx)(ft,{links:n}),logo:r&&(0,u.jsx)(bt,{logo:r}),copyright:t&&(0,u.jsx)(yt,{copyright:t})})}const kt=r.memo(wt),xt=(0,N.fM)([B.a,k.o,P.Tv,De.VQ,i.Jx,function({children:e}){return(0,u.jsx)(L.y_,{children:(0,u.jsx)(j.e,{children:(0,u.jsx)(R,{children:e})})})}]);function St({children:e}){return(0,u.jsx)(xt,{children:e})}var Et=n(1107);function _t({error:e,tryAgain:t}){return(0,u.jsx)("main",{className:"container margin-vert--xl",children:(0,u.jsx)("div",{className:"row",children:(0,u.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,u.jsx)(Et.A,{as:"h1",className:"hero__title",children:(0,u.jsx)(s.A,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed",children:"This page crashed."})}),(0,u.jsx)("div",{className:"margin-vert--lg",children:(0,u.jsx)(Ke,{onClick:t,className:"button button--primary shadow--lw"})}),(0,u.jsx)("hr",{}),(0,u.jsx)("div",{className:"margin-vert--md",children:(0,u.jsx)(Ye,{error:e})})]})})})}const Ct={mainWrapper:"mainWrapper_z2l0"};function At(e){const{children:t,noFooter:n,wrapperClassName:r,title:l,description:s}=e;return(0,b.J)(),(0,u.jsxs)(St,{children:[(0,u.jsx)(i.be,{title:l,description:s}),(0,u.jsx)(v,{}),(0,u.jsx)(T,{}),(0,u.jsx)(at,{}),(0,u.jsx)("div",{id:d,className:(0,o.A)(h.G.layout.main.container,h.G.wrapper.main,Ct.mainWrapper,r),children:(0,u.jsx)(a.A,{fallback:e=>(0,u.jsx)(_t,{...e}),children:t})}),!n&&(0,u.jsx)(kt,{})]})}},1765:(e,t,n)=>{"use strict";n.d(t,{My:()=>A,f4:()=>ne});var r,o,a,i,l,s,c,u=n(6540),d=n(4164),p=Object.create,f=Object.defineProperty,m=Object.defineProperties,g=Object.getOwnPropertyDescriptor,h=Object.getOwnPropertyDescriptors,b=Object.getOwnPropertyNames,y=Object.getOwnPropertySymbols,v=Object.getPrototypeOf,w=Object.prototype.hasOwnProperty,k=Object.prototype.propertyIsEnumerable,x=(e,t,n)=>t in e?f(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,S=(e,t)=>{for(var n in t||(t={}))w.call(t,n)&&x(e,n,t[n]);if(y)for(var n of y(t))k.call(t,n)&&x(e,n,t[n]);return e},E=(e,t)=>m(e,h(t)),_=(e,t)=>{var n={};for(var r in e)w.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&y)for(var r of y(e))t.indexOf(r)<0&&k.call(e,r)&&(n[r]=e[r]);return n},C=(r={"../../node_modules/.pnpm/prismjs@1.29.0_patch_hash=vrxx3pzkik6jpmgpayxfjunetu/node_modules/prismjs/prism.js"(e,t){var n=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof o?new o(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++t}),e.__id},clone:function e(t,n){var o,a;switch(n=n||{},r.util.type(t)){case"Object":if(a=r.util.objId(t),n[a])return n[a];for(var i in o={},n[a]=o,t)t.hasOwnProperty(i)&&(o[i]=e(t[i],n));return o;case"Array":return a=r.util.objId(t),n[a]?n[a]:(o=[],n[a]=o,t.forEach(function(t,r){o[r]=e(t,n)}),o);default:return t}},getLanguage:function(t){for(;t;){var n=e.exec(t.className);if(n)return n[1].toLowerCase();t=t.parentElement}return"none"},setLanguage:function(t,n){t.className=t.className.replace(RegExp(e,"gi"),""),t.classList.add("language-"+n)},isActive:function(e,t,n){for(var r="no-"+t;e;){var o=e.classList;if(o.contains(t))return!0;if(o.contains(r))return!1;e=e.parentElement}return!!n}},languages:{plain:n,plaintext:n,text:n,txt:n,extend:function(e,t){var n=r.util.clone(r.languages[e]);for(var o in t)n[o]=t[o];return n},insertBefore:function(e,t,n,o){var a=(o=o||r.languages)[e],i={};for(var l in a)if(a.hasOwnProperty(l)){if(l==t)for(var s in n)n.hasOwnProperty(s)&&(i[s]=n[s]);n.hasOwnProperty(l)||(i[l]=a[l])}var c=o[e];return o[e]=i,r.languages.DFS(r.languages,function(t,n){n===c&&t!=e&&(this[t]=i)}),i},DFS:function e(t,n,o,a){a=a||{};var i=r.util.objId;for(var l in t)if(t.hasOwnProperty(l)){n.call(t,l,t[l],o||l);var s=t[l],c=r.util.type(s);"Object"!==c||a[i(s)]?"Array"!==c||a[i(s)]||(a[i(s)]=!0,e(s,n,l,a)):(a[i(s)]=!0,e(s,n,null,a))}}},plugins:{},highlight:function(e,t,n){var a={code:e,grammar:t,language:n};if(r.hooks.run("before-tokenize",a),!a.grammar)throw new Error('The language "'+a.language+'" has no grammar.');return a.tokens=r.tokenize(a.code,a.grammar),r.hooks.run("after-tokenize",a),o.stringify(r.util.encode(a.tokens),a.language)},tokenize:function(e,t){var n=t.rest;if(n){for(var r in n)t[r]=n[r];delete t.rest}var o=new l;return s(o,o.head,e),i(e,o,t,o.head,0),function(e){for(var t=[],n=e.head.next;n!==e.tail;)t.push(n.value),n=n.next;return t}(o)},hooks:{all:{},add:function(e,t){var n=r.hooks.all;n[e]=n[e]||[],n[e].push(t)},run:function(e,t){var n=r.hooks.all[e];if(n&&n.length)for(var o,a=0;o=n[a++];)o(t)}},Token:o};function o(e,t,n,r){this.type=e,this.content=t,this.alias=n,this.length=0|(r||"").length}function a(e,t,n,r){e.lastIndex=t;var o=e.exec(n);if(o&&r&&o[1]){var a=o[1].length;o.index+=a,o[0]=o[0].slice(a)}return o}function i(e,t,n,l,u,d){for(var p in n)if(n.hasOwnProperty(p)&&n[p]){var f=n[p];f=Array.isArray(f)?f:[f];for(var m=0;m<f.length;++m){if(d&&d.cause==p+","+m)return;var g=f[m],h=g.inside,b=!!g.lookbehind,y=!!g.greedy,v=g.alias;if(y&&!g.pattern.global){var w=g.pattern.toString().match(/[imsuy]*$/)[0];g.pattern=RegExp(g.pattern.source,w+"g")}for(var k=g.pattern||g,x=l.next,S=u;x!==t.tail&&!(d&&S>=d.reach);S+=x.value.length,x=x.next){var E=x.value;if(t.length>e.length)return;if(!(E instanceof o)){var _,C=1;if(y){if(!(_=a(k,S,e,b))||_.index>=e.length)break;var A=_.index,T=_.index+_[0].length,j=S;for(j+=x.value.length;A>=j;)j+=(x=x.next).value.length;if(S=j-=x.value.length,x.value instanceof o)continue;for(var P=x;P!==t.tail&&(j<T||"string"==typeof P.value);P=P.next)C++,j+=P.value.length;C--,E=e.slice(S,j),_.index-=S}else if(!(_=a(k,0,E,b)))continue;A=_.index;var N=_[0],L=E.slice(0,A),O=E.slice(A+N.length),R=S+E.length;d&&R>d.reach&&(d.reach=R);var D=x.prev;if(L&&(D=s(t,D,L),S+=L.length),c(t,D,C),x=s(t,D,new o(p,h?r.tokenize(N,h):N,v,N)),O&&s(t,x,O),C>1){var F={cause:p+","+m,reach:R};i(e,t,n,x.prev,S,F),d&&F.reach>d.reach&&(d.reach=F.reach)}}}}}}function l(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function s(e,t,n){var r=t.next,o={value:n,prev:t,next:r};return t.next=o,r.prev=o,e.length++,o}function c(e,t,n){for(var r=t.next,o=0;o<n&&r!==e.tail;o++)r=r.next;t.next=r,r.prev=t,e.length-=o}return o.stringify=function e(t,n){if("string"==typeof t)return t;if(Array.isArray(t)){var o="";return t.forEach(function(t){o+=e(t,n)}),o}var a={type:t.type,content:e(t.content,n),tag:"span",classes:["token",t.type],attributes:{},language:n},i=t.alias;i&&(Array.isArray(i)?Array.prototype.push.apply(a.classes,i):a.classes.push(i)),r.hooks.run("wrap",a);var l="";for(var s in a.attributes)l+=" "+s+'="'+(a.attributes[s]||"").replace(/"/g,""")+'"';return"<"+a.tag+' class="'+a.classes.join(" ")+'"'+l+">"+a.content+"</"+a.tag+">"},r}();t.exports=n,n.default=n}},function(){return o||(0,r[b(r)[0]])((o={exports:{}}).exports,o),o.exports}),A=((e,t,n)=>(n=null!=e?p(v(e)):{},((e,t,n,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let o of b(t))w.call(e,o)||o===n||f(e,o,{get:()=>t[o],enumerable:!(r=g(t,o))||r.enumerable});return e})(!t&&e&&e.__esModule?n:f(n,"default",{value:e,enumerable:!0}),e)))(C());A.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},A.languages.markup.tag.inside["attr-value"].inside.entity=A.languages.markup.entity,A.languages.markup.doctype.inside["internal-subset"].inside=A.languages.markup,A.hooks.add("wrap",function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))}),Object.defineProperty(A.languages.markup.tag,"addInlined",{value:function(e,t){var n;(t=((n=((n={})["language-"+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:A.languages[t]},n.cdata=/^<!\[CDATA\[|\]\]>$/i,{"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:n}}))["language-"+t]={pattern:/[\s\S]+/,inside:A.languages[t]},{}))[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,function(){return e}),"i"),lookbehind:!0,greedy:!0,inside:n},A.languages.insertBefore("markup","cdata",t)}}),Object.defineProperty(A.languages.markup.tag,"addAttribute",{value:function(e,t){A.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:A.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),A.languages.html=A.languages.markup,A.languages.mathml=A.languages.markup,A.languages.svg=A.languages.markup,A.languages.xml=A.languages.extend("markup",{}),A.languages.ssml=A.languages.xml,A.languages.atom=A.languages.xml,A.languages.rss=A.languages.xml,a=A,i={pattern:/\\[\\(){}[\]^$+*?|.]/,alias:"escape"},s="(?:[^\\\\-]|"+(l=/\\(?:x[\da-fA-F]{2}|u[\da-fA-F]{4}|u\{[\da-fA-F]+\}|0[0-7]{0,2}|[123][0-7]{2}|c[a-zA-Z]|.)/).source+")",s=RegExp(s+"-"+s),c={pattern:/(<|')[^<>']+(?=[>']$)/,lookbehind:!0,alias:"variable"},a.languages.regex={"char-class":{pattern:/((?:^|[^\\])(?:\\\\)*)\[(?:[^\\\]]|\\[\s\S])*\]/,lookbehind:!0,inside:{"char-class-negation":{pattern:/(^\[)\^/,lookbehind:!0,alias:"operator"},"char-class-punctuation":{pattern:/^\[|\]$/,alias:"punctuation"},range:{pattern:s,inside:{escape:l,"range-punctuation":{pattern:/-/,alias:"operator"}}},"special-escape":i,"char-set":{pattern:/\\[wsd]|\\p\{[^{}]+\}/i,alias:"class-name"},escape:l}},"special-escape":i,"char-set":{pattern:/\.|\\[wsd]|\\p\{[^{}]+\}/i,alias:"class-name"},backreference:[{pattern:/\\(?![123][0-7]{2})[1-9]/,alias:"keyword"},{pattern:/\\k<[^<>']+>/,alias:"keyword",inside:{"group-name":c}}],anchor:{pattern:/[$^]|\\[ABbGZz]/,alias:"function"},escape:l,group:[{pattern:/\((?:\?(?:<[^<>']+>|'[^<>']+'|[>:]|<?[=!]|[idmnsuxU]+(?:-[idmnsuxU]+)?:?))?/,alias:"punctuation",inside:{"group-name":c}},{pattern:/\)/,alias:"punctuation"}],quantifier:{pattern:/(?:[+*?]|\{\d+(?:,\d*)?\})[?+]?/,alias:"number"},alternation:{pattern:/\|/,alias:"keyword"}},A.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},A.languages.javascript=A.languages.extend("clike",{"class-name":[A.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),A.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,A.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:A.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:A.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:A.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:A.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:A.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),A.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:A.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),A.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),A.languages.markup&&(A.languages.markup.tag.addInlined("script","javascript"),A.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),A.languages.js=A.languages.javascript,A.languages.actionscript=A.languages.extend("javascript",{keyword:/\b(?:as|break|case|catch|class|const|default|delete|do|dynamic|each|else|extends|final|finally|for|function|get|if|implements|import|in|include|instanceof|interface|internal|is|namespace|native|new|null|override|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|use|var|void|while|with)\b/,operator:/\+\+|--|(?:[+\-*\/%^]|&&?|\|\|?|<<?|>>?>?|[!=]=?)=?|[~?@]/}),A.languages.actionscript["class-name"].alias="function",delete A.languages.actionscript.parameter,delete A.languages.actionscript["literal-property"],A.languages.markup&&A.languages.insertBefore("actionscript","string",{xml:{pattern:/(^|[^.])<\/?\w+(?:\s+[^\s>\/=]+=("|')(?:\\[\s\S]|(?!\2)[^\\])*\2)*\s*\/?>/,lookbehind:!0,inside:A.languages.markup}}),function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(A),function(e){var t=e.languages.javadoclike={parameter:{pattern:/(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*@(?:arg|arguments|param)\s+)\w+/m,lookbehind:!0},keyword:{pattern:/(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*|\{)@[a-z][a-zA-Z-]+\b/m,lookbehind:!0},punctuation:/[{}]/};Object.defineProperty(t,"addSupport",{value:function(t,n){(t="string"==typeof t?[t]:t).forEach(function(t){var r=function(e){e.inside||(e.inside={}),e.inside.rest=n},o="doc-comment";if(a=e.languages[t]){var a,i=a[o];if((i=i||(a=e.languages.insertBefore(t,"comment",{"doc-comment":{pattern:/(^|[^\\])\/\*\*[^/][\s\S]*?(?:\*\/|$)/,lookbehind:!0,alias:"comment"}}))[o])instanceof RegExp&&(i=a[o]={pattern:i}),Array.isArray(i))for(var l=0,s=i.length;l<s;l++)i[l]instanceof RegExp&&(i[l]={pattern:i[l]}),r(i[l]);else r(i)}})}}),t.addSupport(["java","javascript","php"],t)}(A),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;(t=(e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+t.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css,e.languages.markup))&&(t.tag.addInlined("style","css"),t.tag.addAttribute("style","css"))}(A),function(e){var t=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,n=(t=(e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+t.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[t,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}}),{pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0}),{pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0});e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|RebeccaPurple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,number:n})}(A),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",o=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-]<PLAIN>)(?:[ \t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*/.source.replace(/<PLAIN>/g,function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source}),a=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<<prop>>[ \t]+)?)(?:<<value>>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<<prop>>/g,function(){return r}).replace(/<<value>>/g,function(){return e});return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<<prop>>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<<prop>>/g,function(){return r})),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<<prop>>[ \t]+)?)<<key>>(?=\s*:\s)/.source.replace(/<<prop>>/g,function(){return r}).replace(/<<key>>/g,function(){return"(?:"+o+"|"+a+")"})),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(a),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(A),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(/<inner>/g,function(){return t}),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,o=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,function(){return r}),a=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source,i=(e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+o+a+"(?:"+o+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+o+a+")(?:"+o+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+o+")"+a+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+o+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\b|\*\*(?:(?!\*)<inner>|\*(?:(?!\*)<inner>)+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\b|\*(?:(?!\*)<inner>|\*\*(?:(?!\*)<inner>)+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~)<inner>)+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\])<inner>)+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\])<inner>)+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach(function(t){["url","bold","italic","strike","code-snippet"].forEach(function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])})}),e.hooks.add("after-tokenize",function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n<r;n++){var o,a=t[n];"code"!==a.type?e(a.content):(o=a.content[1],a=a.content[3],o&&a&&"code-language"===o.type&&"code-block"===a.type&&"string"==typeof o.content&&(o=o.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),o="language-"+(o=(/[a-z][\w-]*/i.exec(o)||[""])[0].toLowerCase()),a.alias?"string"==typeof a.alias?a.alias=[a.alias,o]:a.alias.push(o):a.alias=[o]))}}(e.tokens)}),e.hooks.add("wrap",function(t){if("code-block"===t.type){for(var n="",r=0,o=t.classes.length;r<o;r++){var a=t.classes[r];if(a=/language-(.+)/.exec(a)){n=a[1];break}}var c,u=e.languages[n];u?t.content=e.highlight(t.content.replace(i,"").replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,function(e,t){var n;return"#"===(t=t.toLowerCase())[0]?(n="x"===t[1]?parseInt(t.slice(2),16):Number(t.slice(1)),s(n)):l[t]||e}),u,n):n&&"none"!==n&&e.plugins.autoloader&&(c="md-"+(new Date).valueOf()+"-"+Math.floor(1e16*Math.random()),t.attributes.id=c,e.plugins.autoloader.loadLanguages(n,function(){var t=document.getElementById(c);t&&(t.innerHTML=e.highlight(t.textContent,e.languages[n],n))}))}}),RegExp(e.languages.markup.tag.pattern.source,"gi")),l={amp:"&",lt:"<",gt:">",quot:'"'},s=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(A),A.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:A.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},A.hooks.add("after-tokenize",function(e){if("graphql"===e.language)for(var t=e.tokens.filter(function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type}),n=0;n<t.length;){var r=t[n++];if("keyword"===r.type&&"mutation"===r.content){var o=[];if(d(["definition-mutation","punctuation"])&&"("===u(1).content){n+=2;var a=p(/^\($/,/^\)$/);if(-1===a)continue;for(;n<a;n++){var i=u(0);"variable"===i.type&&(f(i,"variable-input"),o.push(i.content))}n=a+1}if(d(["punctuation","property-query"])&&"{"===u(0).content&&(n++,f(u(0),"property-mutation"),0<o.length)){var l=p(/^\{$/,/^\}$/);if(-1!==l)for(var s=n;s<l;s++){var c=t[s];"variable"===c.type&&0<=o.indexOf(c.content)&&f(c,"variable-input")}}}}function u(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n<e.length;n++){var r=u(n+t);if(!r||r.type!==e[n])return}return 1}function p(e,r){for(var o=1,a=n;a<t.length;a++){var i=t[a],l=i.content;if("punctuation"===i.type&&"string"==typeof l)if(e.test(l))o++;else if(r.test(l)&&0===--o)return a}return-1}function f(e,t){var n=e.alias;n?Array.isArray(n)||(e.alias=n=[n]):e.alias=n=[],n.push(t)}}),A.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,o=r.inside["interpolation-punctuation"],a=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function l(t,n,r){return t={code:t,grammar:n,language:r},e.hooks.run("before-tokenize",t),t.tokens=e.tokenize(t.code,t.grammar),e.hooks.run("after-tokenize",t),t.tokens}function s(t,n,i){var s=e.tokenize(t,{interpolation:{pattern:RegExp(a),lookbehind:!0}}),c=0,u={},d=(s=l(s.map(function(e){if("string"==typeof e)return e;var n,r;for(e=e.content;-1!==t.indexOf((r=c++,n="___"+i.toUpperCase()+"_"+r+"___")););return u[n]=e,n}).join(""),n,i),Object.keys(u));return c=0,function t(n){for(var a=0;a<n.length;a++){if(c>=d.length)return;var i,s,p,f,m,g,h,b=n[a];"string"==typeof b||"string"==typeof b.content?(i=d[c],-1!==(h=(g="string"==typeof b?b:b.content).indexOf(i))&&(++c,s=g.substring(0,h),m=u[i],p=void 0,(f={})["interpolation-punctuation"]=o,3===(f=e.tokenize(m,f)).length&&((p=[1,1]).push.apply(p,l(f[1],e.languages.javascript,"javascript")),f.splice.apply(f,p)),p=new e.Token("interpolation",f,r.alias,m),f=g.substring(h+i.length),m=[],s&&m.push(s),m.push(p),f&&(t(g=[f]),m.push.apply(m,g)),"string"==typeof b?(n.splice.apply(n,[a,1].concat(m)),a+=m.length-1):b.content=m)):(h=b.content,Array.isArray(h)?t(h):t([h]))}}(s),new e.Token(i,s,"language-"+i,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var c={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function u(e){return"string"==typeof e?e:Array.isArray(e)?e.map(u).join(""):u(e.content)}e.hooks.add("after-tokenize",function(t){t.language in c&&function t(n){for(var r=0,o=n.length;r<o;r++){var a,i,l,c=n[r];"string"!=typeof c&&(a=c.content,Array.isArray(a)?"template-string"===c.type?(c=a[1],3===a.length&&"string"!=typeof c&&"embedded-code"===c.type&&(i=u(c),c=c.alias,c=Array.isArray(c)?c[0]:c,l=e.languages[c])&&(a[1]=s(i,l,c))):t(a):"string"!=typeof a&&t([a]))}}(t.tokens)})}(A),function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(A),function(e){var t=e.languages.javascript,n=/\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})+\}/.source,r="(@(?:arg|argument|param|property)\\s+(?:"+n+"\\s+)?)";e.languages.jsdoc=e.languages.extend("javadoclike",{parameter:{pattern:RegExp(r+/(?:(?!\s)[$\w\xA0-\uFFFF.])+(?=\s|$)/.source),lookbehind:!0,inside:{punctuation:/\./}}}),e.languages.insertBefore("jsdoc","keyword",{"optional-parameter":{pattern:RegExp(r+/\[(?:(?!\s)[$\w\xA0-\uFFFF.])+(?:=[^[\]]+)?\](?=\s|$)/.source),lookbehind:!0,inside:{parameter:{pattern:/(^\[)[$\w\xA0-\uFFFF\.]+/,lookbehind:!0,inside:{punctuation:/\./}},code:{pattern:/(=)[\s\S]*(?=\]$)/,lookbehind:!0,inside:t,alias:"language-javascript"},punctuation:/[=[\]]/}},"class-name":[{pattern:RegExp(/(@(?:augments|class|extends|interface|memberof!?|template|this|typedef)\s+(?:<TYPE>\s+)?)[A-Z]\w*(?:\.[A-Z]\w*)*/.source.replace(/<TYPE>/g,function(){return n})),lookbehind:!0,inside:{punctuation:/\./}},{pattern:RegExp("(@[a-z]+\\s+)"+n),lookbehind:!0,inside:{string:t.string,number:t.number,boolean:t.boolean,keyword:e.languages.typescript.keyword,operator:/=>|\.\.\.|[&|?:*]/,punctuation:/[.,;=<>{}()[\]]/}}],example:{pattern:/(@example\s+(?!\s))(?:[^@\s]|\s+(?!\s))+?(?=\s*(?:\*\s*)?(?:@\w|\*\/))/,lookbehind:!0,inside:{code:{pattern:/^([\t ]*(?:\*\s*)?)\S.*$/m,lookbehind:!0,inside:t,alias:"language-javascript"}}}}),e.languages.javadoclike.addSupport("javascript",e.languages.jsdoc)}(A),function(e){e.languages.flow=e.languages.extend("javascript",{}),e.languages.insertBefore("flow","keyword",{type:[{pattern:/\b(?:[Bb]oolean|Function|[Nn]umber|[Ss]tring|[Ss]ymbol|any|mixed|null|void)\b/,alias:"class-name"}]}),e.languages.flow["function-variable"].pattern=/(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=\s*(?:function\b|(?:\([^()]*\)(?:\s*:\s*\w+)?|(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/i,delete e.languages.flow.parameter,e.languages.insertBefore("flow","operator",{"flow-punctuation":{pattern:/\{\||\|\}/,alias:"punctuation"}}),Array.isArray(e.languages.flow.keyword)||(e.languages.flow.keyword=[e.languages.flow.keyword]),e.languages.flow.keyword.unshift({pattern:/(^|[^$]\b)(?:Class|declare|opaque|type)\b(?!\$)/,lookbehind:!0},{pattern:/(^|[^$]\B)\$(?:Diff|Enum|Exact|Keys|ObjMap|PropertyType|Record|Shape|Subtype|Supertype|await)\b(?!\$)/,lookbehind:!0})}(A),A.languages.n4js=A.languages.extend("javascript",{keyword:/\b(?:Array|any|boolean|break|case|catch|class|const|constructor|continue|debugger|declare|default|delete|do|else|enum|export|extends|false|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|module|new|null|number|package|private|protected|public|return|set|static|string|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\b/}),A.languages.insertBefore("n4js","constant",{annotation:{pattern:/@+\w+/,alias:"operator"}}),A.languages.n4jsd=A.languages.n4js,function(e){function t(e,t){return RegExp(e.replace(/<ID>/g,function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source}),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:<ID>(?:\s*,\s*(?:\*\s*as\s+<ID>|\{[^{}]*\}))?|\*\s*as\s+<ID>|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+<ID>)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?<ID>/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r<n.length;r++){var o=n[r],a=e.languages.javascript[o];o=(a="RegExp"===e.util.type(a)?e.languages.javascript[o]={pattern:a}:a).inside||{};(a.inside=o)["maybe-class-name"]=/^[A-Z][\s\S]*/}}(A),function(e){var t=e.util.clone(e.languages.javascript),n=/(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source,r=/(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source,o=/(?:\{<S>*\.{3}(?:[^{}]|<BRACES>)*\})/.source;function a(e,t){return e=e.replace(/<S>/g,function(){return n}).replace(/<BRACES>/g,function(){return r}).replace(/<SPREAD>/g,function(){return o}),RegExp(e,t)}function i(t){for(var n=[],r=0;r<t.length;r++){var o=t[r],a=!1;"string"!=typeof o&&("tag"===o.type&&o.content[0]&&"tag"===o.content[0].type?"</"===o.content[0].content[0].content?0<n.length&&n[n.length-1].tagName===l(o.content[0].content[1])&&n.pop():"/>"!==o.content[o.content.length-1].content&&n.push({tagName:l(o.content[0].content[1]),openedBraces:0}):0<n.length&&"punctuation"===o.type&&"{"===o.content?n[n.length-1].openedBraces++:0<n.length&&0<n[n.length-1].openedBraces&&"punctuation"===o.type&&"}"===o.content?n[n.length-1].openedBraces--:a=!0),(a||"string"==typeof o)&&0<n.length&&0===n[n.length-1].openedBraces&&(a=l(o),r<t.length-1&&("string"==typeof t[r+1]||"plain-text"===t[r+1].type)&&(a+=l(t[r+1]),t.splice(r+1,1)),0<r&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(a=l(t[r-1])+a,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",a,null,a)),o.content&&"string"!=typeof o.content&&i(o.content)}}o=a(o).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=a(/<\/?(?:[\w.:-]+(?:<S>+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|<BRACES>))?|<SPREAD>))*<S>*\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:a(/<SPREAD>/.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:a(/=<BRACES>/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var l=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(l).join(""):""};e.hooks.add("after-tokenize",function(e){"jsx"!==e.language&&"tsx"!==e.language||i(e.tokens)})}(A),function(e){var t=e.util.clone(e.languages.typescript);(t=(e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"],e.languages.tsx.tag)).pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+t.pattern.source+")",t.pattern.flags),t.lookbehind=!0}(A),A.languages.swift={comment:{pattern:/(^|[^\\:])(?:\/\/.*|\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:[^*]|\*(?!\/))*\*\/)*\*\/)/,lookbehind:!0,greedy:!0},"string-literal":[{pattern:RegExp(/(^|[^"#])/.source+"(?:"+/"(?:\\(?:\((?:[^()]|\([^()]*\))*\)|\r\n|[^(])|[^\\\r\n"])*"/.source+"|"+/"""(?:\\(?:\((?:[^()]|\([^()]*\))*\)|[^(])|[^\\"]|"(?!""))*"""/.source+")"+/(?!["#])/.source),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\\($/,alias:"punctuation"},punctuation:/\\(?=[\r\n])/,string:/[\s\S]+/}},{pattern:RegExp(/(^|[^"#])(#+)/.source+"(?:"+/"(?:\\(?:#+\((?:[^()]|\([^()]*\))*\)|\r\n|[^#])|[^\\\r\n])*?"/.source+"|"+/"""(?:\\(?:#+\((?:[^()]|\([^()]*\))*\)|[^#])|[^\\])*?"""/.source+")\\2"),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\#+\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\#+\($/,alias:"punctuation"},string:/[\s\S]+/}}],directive:{pattern:RegExp(/#/.source+"(?:"+/(?:elseif|if)\b/.source+"(?:[ \t]*"+/(?:![ \t]*)?(?:\b\w+\b(?:[ \t]*\((?:[^()]|\([^()]*\))*\))?|\((?:[^()]|\([^()]*\))*\))(?:[ \t]*(?:&&|\|\|))?/.source+")+|"+/(?:else|endif)\b/.source+")"),alias:"property",inside:{"directive-name":/^#\w+/,boolean:/\b(?:false|true)\b/,number:/\b\d+(?:\.\d+)*\b/,operator:/!|&&|\|\||[<>]=?/,punctuation:/[(),]/}},literal:{pattern:/#(?:colorLiteral|column|dsohandle|file(?:ID|Literal|Path)?|function|imageLiteral|line)\b/,alias:"constant"},"other-directive":{pattern:/#\w+\b/,alias:"property"},attribute:{pattern:/@\w+/,alias:"atrule"},"function-definition":{pattern:/(\bfunc\s+)\w+/,lookbehind:!0,alias:"function"},label:{pattern:/\b(break|continue)\s+\w+|\b[a-zA-Z_]\w*(?=\s*:\s*(?:for|repeat|while)\b)/,lookbehind:!0,alias:"important"},keyword:/\b(?:Any|Protocol|Self|Type|actor|as|assignment|associatedtype|associativity|async|await|break|case|catch|class|continue|convenience|default|defer|deinit|didSet|do|dynamic|else|enum|extension|fallthrough|fileprivate|final|for|func|get|guard|higherThan|if|import|in|indirect|infix|init|inout|internal|is|isolated|lazy|left|let|lowerThan|mutating|none|nonisolated|nonmutating|open|operator|optional|override|postfix|precedencegroup|prefix|private|protocol|public|repeat|required|rethrows|return|right|safe|self|set|some|static|struct|subscript|super|switch|throw|throws|try|typealias|unowned|unsafe|var|weak|where|while|willSet)\b/,boolean:/\b(?:false|true)\b/,nil:{pattern:/\bnil\b/,alias:"constant"},"short-argument":/\$\d+\b/,omit:{pattern:/\b_\b/,alias:"keyword"},number:/\b(?:[\d_]+(?:\.[\de_]+)?|0x[a-f0-9_]+(?:\.[a-f0-9p_]+)?|0b[01_]+|0o[0-7_]+)\b/i,"class-name":/\b[A-Z](?:[A-Z_\d]*[a-z]\w*)?\b/,function:/\b[a-z_]\w*(?=\s*\()/i,constant:/\b(?:[A-Z_]{2,}|k[A-Z][A-Za-z_]+)\b/,operator:/[-+*/%=!<>&|^~?]+|\.[.\-+*/%=!<>&|^~?]+/,punctuation:/[{}[\]();,.:\\]/},A.languages.swift["string-literal"].forEach(function(e){e.inside.interpolation.inside=A.languages.swift}),function(e){e.languages.kotlin=e.languages.extend("clike",{keyword:{pattern:/(^|[^.])\b(?:abstract|actual|annotation|as|break|by|catch|class|companion|const|constructor|continue|crossinline|data|do|dynamic|else|enum|expect|external|final|finally|for|fun|get|if|import|in|infix|init|inline|inner|interface|internal|is|lateinit|noinline|null|object|open|operator|out|override|package|private|protected|public|reified|return|sealed|set|super|suspend|tailrec|this|throw|to|try|typealias|val|var|vararg|when|where|while)\b/,lookbehind:!0},function:[{pattern:/(?:`[^\r\n`]+`|\b\w+)(?=\s*\()/,greedy:!0},{pattern:/(\.)(?:`[^\r\n`]+`|\w+)(?=\s*\{)/,lookbehind:!0,greedy:!0}],number:/\b(?:0[xX][\da-fA-F]+(?:_[\da-fA-F]+)*|0[bB][01]+(?:_[01]+)*|\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?[fFL]?)\b/,operator:/\+[+=]?|-[-=>]?|==?=?|!(?:!|==?)?|[\/*%<>]=?|[?:]:?|\.\.|&&|\|\||\b(?:and|inv|or|shl|shr|ushr|xor)\b/}),delete e.languages.kotlin["class-name"];var t={"interpolation-punctuation":{pattern:/^\$\{?|\}$/,alias:"punctuation"},expression:{pattern:/[\s\S]+/,inside:e.languages.kotlin}};e.languages.insertBefore("kotlin","string",{"string-literal":[{pattern:/"""(?:[^$]|\$(?:(?!\{)|\{[^{}]*\}))*?"""/,alias:"multiline",inside:{interpolation:{pattern:/\$(?:[a-z_]\w*|\{[^{}]*\})/i,inside:t},string:/[\s\S]+/}},{pattern:/"(?:[^"\\\r\n$]|\\.|\$(?:(?!\{)|\{[^{}]*\}))*"/,alias:"singleline",inside:{interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$(?:[a-z_]\w*|\{[^{}]*\})/i,lookbehind:!0,inside:t},string:/[\s\S]+/}}],char:{pattern:/'(?:[^'\\\r\n]|\\(?:.|u[a-fA-F0-9]{0,4}))'/,greedy:!0}}),delete e.languages.kotlin.string,e.languages.insertBefore("kotlin","keyword",{annotation:{pattern:/\B@(?:\w+:)?(?:[A-Z]\w*|\[[^\]]+\])/,alias:"builtin"}}),e.languages.insertBefore("kotlin","function",{label:{pattern:/\b\w+@|@\w+\b/,alias:"symbol"}}),e.languages.kt=e.languages.kotlin,e.languages.kts=e.languages.kotlin}(A),A.languages.c=A.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),A.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),A.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},A.languages.c.string],char:A.languages.c.char,comment:A.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:A.languages.c}}}}),A.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete A.languages.c.boolean,A.languages.objectivec=A.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete A.languages.objectivec["class-name"],A.languages.objc=A.languages.objectivec,A.languages.reason=A.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),A.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete A.languages.reason.function,function(e){for(var t=/\/\*(?:[^*/]|\*(?!\/)|\/(?!\*)|<self>)*\*\//.source,n=0;n<2;n++)t=t.replace(/<self>/g,function(){return t});t=t.replace(/<self>/g,function(){return/[^\s\S]/.source}),e.languages.rust={comment:[{pattern:RegExp(/(^|[^\\])/.source+t),lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/b?"(?:\\[\s\S]|[^\\"])*"|b?r(#*)"(?:[^"]|"(?!\1))*"\1/,greedy:!0},char:{pattern:/b?'(?:\\(?:x[0-7][\da-fA-F]|u\{(?:[\da-fA-F]_*){1,6}\}|.)|[^\\\r\n\t'])'/,greedy:!0},attribute:{pattern:/#!?\[(?:[^\[\]"]|"(?:\\[\s\S]|[^\\"])*")*\]/,greedy:!0,alias:"attr-name",inside:{string:null}},"closure-params":{pattern:/([=(,:]\s*|\bmove\s*)\|[^|]*\||\|[^|]*\|(?=\s*(?:\{|->))/,lookbehind:!0,greedy:!0,inside:{"closure-punctuation":{pattern:/^\||\|$/,alias:"punctuation"},rest:null}},"lifetime-annotation":{pattern:/'\w+/,alias:"symbol"},"fragment-specifier":{pattern:/(\$\w+:)[a-z]+/,lookbehind:!0,alias:"punctuation"},variable:/\$\w+/,"function-definition":{pattern:/(\bfn\s+)\w+/,lookbehind:!0,alias:"function"},"type-definition":{pattern:/(\b(?:enum|struct|trait|type|union)\s+)\w+/,lookbehind:!0,alias:"class-name"},"module-declaration":[{pattern:/(\b(?:crate|mod)\s+)[a-z][a-z_\d]*/,lookbehind:!0,alias:"namespace"},{pattern:/(\b(?:crate|self|super)\s*)::\s*[a-z][a-z_\d]*\b(?:\s*::(?:\s*[a-z][a-z_\d]*\s*::)*)?/,lookbehind:!0,alias:"namespace",inside:{punctuation:/::/}}],keyword:[/\b(?:Self|abstract|as|async|await|become|box|break|const|continue|crate|do|dyn|else|enum|extern|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|override|priv|pub|ref|return|self|static|struct|super|trait|try|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/,/\b(?:bool|char|f(?:32|64)|[ui](?:8|16|32|64|128|size)|str)\b/],function:/\b[a-z_]\w*(?=\s*(?:::\s*<|\())/,macro:{pattern:/\b\w+!/,alias:"property"},constant:/\b[A-Z_][A-Z_\d]+\b/,"class-name":/\b[A-Z]\w*\b/,namespace:{pattern:/(?:\b[a-z][a-z_\d]*\s*::\s*)*\b[a-z][a-z_\d]*\s*::(?!\s*<)/,inside:{punctuation:/::/}},number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(?:(?:\d(?:_?\d)*)?\.)?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)(?:_?(?:f32|f64|[iu](?:8|16|32|64|size)?))?\b/,boolean:/\b(?:false|true)\b/,punctuation:/->|\.\.=|\.{1,3}|::|[{}[\];(),:]/,operator:/[-+*\/%!^]=?|=[=>]?|&[&=]?|\|[|=]?|<<?=?|>>?=?|[@?]/},e.languages.rust["closure-params"].inside.rest=e.languages.rust,e.languages.rust.attribute.inside.string=e.languages.rust.string}(A),A.languages.go=A.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),A.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete A.languages.go["class-name"],function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g,function(){return t.source});e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g,function(){return t.source})),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g,function(){return n})+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(A),A.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},A.languages.python["string-interpolation"].inside.interpolation.inside.rest=A.languages.python,A.languages.py=A.languages.python,A.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},A.languages.webmanifest=A.languages.json;((e,t)=>{for(var n in t)f(e,n,{get:t[n],enumerable:!0})})({},{dracula:()=>T,duotoneDark:()=>j,duotoneLight:()=>P,github:()=>N,gruvboxMaterialDark:()=>Q,gruvboxMaterialLight:()=>K,jettwaveDark:()=>H,jettwaveLight:()=>G,nightOwl:()=>L,nightOwlLight:()=>O,oceanicNext:()=>F,okaidia:()=>I,oneDark:()=>V,oneLight:()=>W,palenight:()=>M,shadesOfPurple:()=>z,synthwave84:()=>B,ultramin:()=>$,vsDark:()=>U,vsLight:()=>q});var T={plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},j={plain:{backgroundColor:"#2a2734",color:"#9a86fd"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#6c6783"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#e09142"}},{types:["property","function"],style:{color:"#9a86fd"}},{types:["tag-id","selector","atrule-id"],style:{color:"#eeebff"}},{types:["attr-name"],style:{color:"#c4b9fe"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","atrule","placeholder","variable"],style:{color:"#ffcc99"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#c4b9fe"}}]},P={plain:{backgroundColor:"#faf8f5",color:"#728fcb"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#b6ad9a"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#063289"}},{types:["property","function"],style:{color:"#b29762"}},{types:["tag-id","selector","atrule-id"],style:{color:"#2d2006"}},{types:["attr-name"],style:{color:"#896724"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","atrule"],style:{color:"#728fcb"}},{types:["placeholder","variable"],style:{color:"#93abdc"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#896724"}}]},N={plain:{color:"#393A34",backgroundColor:"#f6f8fa"},styles:[{types:["comment","prolog","doctype","cdata"],style:{color:"#999988",fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}},{types:["string","attr-value"],style:{color:"#e3116c"}},{types:["punctuation","operator"],style:{color:"#393A34"}},{types:["entity","url","symbol","number","boolean","variable","constant","property","regex","inserted"],style:{color:"#36acaa"}},{types:["atrule","keyword","attr-name","selector"],style:{color:"#00a4db"}},{types:["function","deleted","tag"],style:{color:"#d73a49"}},{types:["function-variable"],style:{color:"#6f42c1"}},{types:["tag","selector","keyword"],style:{color:"#00009f"}}]},L={plain:{color:"#d6deeb",backgroundColor:"#011627"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)",fontStyle:"italic"}},{types:["inserted","attr-name"],style:{color:"rgb(173, 219, 103)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(99, 119, 119)",fontStyle:"italic"}},{types:["string","url"],style:{color:"rgb(173, 219, 103)"}},{types:["variable"],style:{color:"rgb(214, 222, 235)"}},{types:["number"],style:{color:"rgb(247, 140, 108)"}},{types:["builtin","char","constant","function"],style:{color:"rgb(130, 170, 255)"}},{types:["punctuation"],style:{color:"rgb(199, 146, 234)"}},{types:["selector","doctype"],style:{color:"rgb(199, 146, 234)",fontStyle:"italic"}},{types:["class-name"],style:{color:"rgb(255, 203, 139)"}},{types:["tag","operator","keyword"],style:{color:"rgb(127, 219, 202)"}},{types:["boolean"],style:{color:"rgb(255, 88, 116)"}},{types:["property"],style:{color:"rgb(128, 203, 196)"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)"}}]},O={plain:{color:"#403f53",backgroundColor:"#FBFBFB"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)",fontStyle:"italic"}},{types:["inserted","attr-name"],style:{color:"rgb(72, 118, 214)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(152, 159, 177)",fontStyle:"italic"}},{types:["string","builtin","char","constant","url"],style:{color:"rgb(72, 118, 214)"}},{types:["variable"],style:{color:"rgb(201, 103, 101)"}},{types:["number"],style:{color:"rgb(170, 9, 130)"}},{types:["punctuation"],style:{color:"rgb(153, 76, 195)"}},{types:["function","selector","doctype"],style:{color:"rgb(153, 76, 195)",fontStyle:"italic"}},{types:["class-name"],style:{color:"rgb(17, 17, 17)"}},{types:["tag"],style:{color:"rgb(153, 76, 195)"}},{types:["operator","property","keyword","namespace"],style:{color:"rgb(12, 150, 155)"}},{types:["boolean"],style:{color:"rgb(188, 84, 84)"}}]},R="#c5a5c5",D="#8dc891",F={plain:{backgroundColor:"#282c34",color:"#ffffff"},styles:[{types:["attr-name"],style:{color:R}},{types:["attr-value"],style:{color:D}},{types:["comment","block-comment","prolog","doctype","cdata","shebang"],style:{color:"#999999"}},{types:["property","number","function-name","constant","symbol","deleted"],style:{color:"#5a9bcf"}},{types:["boolean"],style:{color:"#ff8b50"}},{types:["tag"],style:{color:"#fc929e"}},{types:["string"],style:{color:D}},{types:["punctuation"],style:{color:D}},{types:["selector","char","builtin","inserted"],style:{color:"#D8DEE9"}},{types:["function"],style:{color:"#79b6f2"}},{types:["operator","entity","url","variable"],style:{color:"#d7deea"}},{types:["keyword"],style:{color:R}},{types:["atrule","class-name"],style:{color:"#FAC863"}},{types:["important"],style:{fontWeight:"400"}},{types:["bold"],style:{fontWeight:"bold"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}}]},I={plain:{color:"#f8f8f2",backgroundColor:"#272822"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"#f92672",fontStyle:"italic"}},{types:["inserted"],style:{color:"rgb(173, 219, 103)",fontStyle:"italic"}},{types:["comment"],style:{color:"#8292a2",fontStyle:"italic"}},{types:["string","url"],style:{color:"#a6e22e"}},{types:["variable"],style:{color:"#f8f8f2"}},{types:["number"],style:{color:"#ae81ff"}},{types:["builtin","char","constant","function","class-name"],style:{color:"#e6db74"}},{types:["punctuation"],style:{color:"#f8f8f2"}},{types:["selector","doctype"],style:{color:"#a6e22e",fontStyle:"italic"}},{types:["tag","operator","keyword"],style:{color:"#66d9ef"}},{types:["boolean"],style:{color:"#ae81ff"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)",opacity:.7}},{types:["tag","property"],style:{color:"#f92672"}},{types:["attr-name"],style:{color:"#a6e22e !important"}},{types:["doctype"],style:{color:"#8292a2"}},{types:["rule"],style:{color:"#e6db74"}}]},M={plain:{color:"#bfc7d5",backgroundColor:"#292d3e"},styles:[{types:["comment"],style:{color:"rgb(105, 112, 152)",fontStyle:"italic"}},{types:["string","inserted"],style:{color:"rgb(195, 232, 141)"}},{types:["number"],style:{color:"rgb(247, 140, 108)"}},{types:["builtin","char","constant","function"],style:{color:"rgb(130, 170, 255)"}},{types:["punctuation","selector"],style:{color:"rgb(199, 146, 234)"}},{types:["variable"],style:{color:"rgb(191, 199, 213)"}},{types:["class-name","attr-name"],style:{color:"rgb(255, 203, 107)"}},{types:["tag","deleted"],style:{color:"rgb(255, 85, 114)"}},{types:["operator"],style:{color:"rgb(137, 221, 255)"}},{types:["boolean"],style:{color:"rgb(255, 88, 116)"}},{types:["keyword"],style:{fontStyle:"italic"}},{types:["doctype"],style:{color:"rgb(199, 146, 234)",fontStyle:"italic"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)"}},{types:["url"],style:{color:"rgb(221, 221, 221)"}}]},z={plain:{color:"#9EFEFF",backgroundColor:"#2D2A55"},styles:[{types:["changed"],style:{color:"rgb(255, 238, 128)"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)"}},{types:["inserted"],style:{color:"rgb(173, 219, 103)"}},{types:["comment"],style:{color:"rgb(179, 98, 255)",fontStyle:"italic"}},{types:["punctuation"],style:{color:"rgb(255, 255, 255)"}},{types:["constant"],style:{color:"rgb(255, 98, 140)"}},{types:["string","url"],style:{color:"rgb(165, 255, 144)"}},{types:["variable"],style:{color:"rgb(255, 238, 128)"}},{types:["number","boolean"],style:{color:"rgb(255, 98, 140)"}},{types:["attr-name"],style:{color:"rgb(255, 180, 84)"}},{types:["keyword","operator","property","namespace","tag","selector","doctype"],style:{color:"rgb(255, 157, 0)"}},{types:["builtin","char","constant","function","class-name"],style:{color:"rgb(250, 208, 0)"}}]},B={plain:{backgroundColor:"linear-gradient(to bottom, #2a2139 75%, #34294f)",backgroundImage:"#34294f",color:"#f92aad",textShadow:"0 0 2px #100c0f, 0 0 5px #dc078e33, 0 0 10px #fff3"},styles:[{types:["comment","block-comment","prolog","doctype","cdata"],style:{color:"#495495",fontStyle:"italic"}},{types:["punctuation"],style:{color:"#ccc"}},{types:["tag","attr-name","namespace","number","unit","hexcode","deleted"],style:{color:"#e2777a"}},{types:["property","selector"],style:{color:"#72f1b8",textShadow:"0 0 2px #100c0f, 0 0 10px #257c5575, 0 0 35px #21272475"}},{types:["function-name"],style:{color:"#6196cc"}},{types:["boolean","selector-id","function"],style:{color:"#fdfdfd",textShadow:"0 0 2px #001716, 0 0 3px #03edf975, 0 0 5px #03edf975, 0 0 8px #03edf975"}},{types:["class-name","maybe-class-name","builtin"],style:{color:"#fff5f6",textShadow:"0 0 2px #000, 0 0 10px #fc1f2c75, 0 0 5px #fc1f2c75, 0 0 25px #fc1f2c75"}},{types:["constant","symbol"],style:{color:"#f92aad",textShadow:"0 0 2px #100c0f, 0 0 5px #dc078e33, 0 0 10px #fff3"}},{types:["important","atrule","keyword","selector-class"],style:{color:"#f4eee4",textShadow:"0 0 2px #393a33, 0 0 8px #f39f0575, 0 0 2px #f39f0575"}},{types:["string","char","attr-value","regex","variable"],style:{color:"#f87c32"}},{types:["parameter"],style:{fontStyle:"italic"}},{types:["entity","url"],style:{color:"#67cdcc"}},{types:["operator"],style:{color:"ffffffee"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["entity"],style:{cursor:"help"}},{types:["inserted"],style:{color:"green"}}]},$={plain:{color:"#282a2e",backgroundColor:"#ffffff"},styles:[{types:["comment"],style:{color:"rgb(197, 200, 198)"}},{types:["string","number","builtin","variable"],style:{color:"rgb(150, 152, 150)"}},{types:["class-name","function","tag","attr-name"],style:{color:"rgb(40, 42, 46)"}}]},U={plain:{color:"#9CDCFE",backgroundColor:"#1E1E1E"},styles:[{types:["prolog"],style:{color:"rgb(0, 0, 128)"}},{types:["comment"],style:{color:"rgb(106, 153, 85)"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"rgb(86, 156, 214)"}},{types:["number","inserted"],style:{color:"rgb(181, 206, 168)"}},{types:["constant"],style:{color:"rgb(100, 102, 149)"}},{types:["attr-name","variable"],style:{color:"rgb(156, 220, 254)"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"rgb(206, 145, 120)"}},{types:["selector"],style:{color:"rgb(215, 186, 125)"}},{types:["tag"],style:{color:"rgb(78, 201, 176)"}},{types:["tag"],languages:["markup"],style:{color:"rgb(86, 156, 214)"}},{types:["punctuation","operator"],style:{color:"rgb(212, 212, 212)"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"rgb(220, 220, 170)"}},{types:["class-name"],style:{color:"rgb(78, 201, 176)"}},{types:["char"],style:{color:"rgb(209, 105, 105)"}}]},q={plain:{color:"#000000",backgroundColor:"#ffffff"},styles:[{types:["comment"],style:{color:"rgb(0, 128, 0)"}},{types:["builtin"],style:{color:"rgb(0, 112, 193)"}},{types:["number","variable","inserted"],style:{color:"rgb(9, 134, 88)"}},{types:["operator"],style:{color:"rgb(0, 0, 0)"}},{types:["constant","char"],style:{color:"rgb(129, 31, 63)"}},{types:["tag"],style:{color:"rgb(128, 0, 0)"}},{types:["attr-name"],style:{color:"rgb(255, 0, 0)"}},{types:["deleted","string"],style:{color:"rgb(163, 21, 21)"}},{types:["changed","punctuation"],style:{color:"rgb(4, 81, 165)"}},{types:["function","keyword"],style:{color:"rgb(0, 0, 255)"}},{types:["class-name"],style:{color:"rgb(38, 127, 153)"}}]},H={plain:{color:"#f8fafc",backgroundColor:"#011627"},styles:[{types:["prolog"],style:{color:"#000080"}},{types:["comment"],style:{color:"#6A9955"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"#569CD6"}},{types:["number","inserted"],style:{color:"#B5CEA8"}},{types:["constant"],style:{color:"#f8fafc"}},{types:["attr-name","variable"],style:{color:"#9CDCFE"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"#cbd5e1"}},{types:["selector"],style:{color:"#D7BA7D"}},{types:["tag"],style:{color:"#0ea5e9"}},{types:["tag"],languages:["markup"],style:{color:"#0ea5e9"}},{types:["punctuation","operator"],style:{color:"#D4D4D4"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"#7dd3fc"}},{types:["class-name"],style:{color:"#0ea5e9"}},{types:["char"],style:{color:"#D16969"}}]},G={plain:{color:"#0f172a",backgroundColor:"#f1f5f9"},styles:[{types:["prolog"],style:{color:"#000080"}},{types:["comment"],style:{color:"#6A9955"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"#0c4a6e"}},{types:["number","inserted"],style:{color:"#B5CEA8"}},{types:["constant"],style:{color:"#0f172a"}},{types:["attr-name","variable"],style:{color:"#0c4a6e"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"#64748b"}},{types:["selector"],style:{color:"#D7BA7D"}},{types:["tag"],style:{color:"#0ea5e9"}},{types:["tag"],languages:["markup"],style:{color:"#0ea5e9"}},{types:["punctuation","operator"],style:{color:"#475569"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"#0e7490"}},{types:["class-name"],style:{color:"#0ea5e9"}},{types:["char"],style:{color:"#D16969"}}]},V={plain:{backgroundColor:"hsl(220, 13%, 18%)",color:"hsl(220, 14%, 71%)",textShadow:"0 1px rgba(0, 0, 0, 0.3)"},styles:[{types:["comment","prolog","cdata"],style:{color:"hsl(220, 10%, 40%)"}},{types:["doctype","punctuation","entity"],style:{color:"hsl(220, 14%, 71%)"}},{types:["attr-name","class-name","maybe-class-name","boolean","constant","number","atrule"],style:{color:"hsl(29, 54%, 61%)"}},{types:["keyword"],style:{color:"hsl(286, 60%, 67%)"}},{types:["property","tag","symbol","deleted","important"],style:{color:"hsl(355, 65%, 65%)"}},{types:["selector","string","char","builtin","inserted","regex","attr-value"],style:{color:"hsl(95, 38%, 62%)"}},{types:["variable","operator","function"],style:{color:"hsl(207, 82%, 66%)"}},{types:["url"],style:{color:"hsl(187, 47%, 55%)"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"hsl(220, 14%, 71%)"}}]},W={plain:{backgroundColor:"hsl(230, 1%, 98%)",color:"hsl(230, 8%, 24%)"},styles:[{types:["comment","prolog","cdata"],style:{color:"hsl(230, 4%, 64%)"}},{types:["doctype","punctuation","entity"],style:{color:"hsl(230, 8%, 24%)"}},{types:["attr-name","class-name","boolean","constant","number","atrule"],style:{color:"hsl(35, 99%, 36%)"}},{types:["keyword"],style:{color:"hsl(301, 63%, 40%)"}},{types:["property","tag","symbol","deleted","important"],style:{color:"hsl(5, 74%, 59%)"}},{types:["selector","string","char","builtin","inserted","regex","attr-value","punctuation"],style:{color:"hsl(119, 34%, 47%)"}},{types:["variable","operator","function"],style:{color:"hsl(221, 87%, 60%)"}},{types:["url"],style:{color:"hsl(198, 99%, 37%)"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"hsl(230, 8%, 24%)"}}]},Q={plain:{color:"#ebdbb2",backgroundColor:"#292828"},styles:[{types:["imports","class-name","maybe-class-name","constant","doctype","builtin","function"],style:{color:"#d8a657"}},{types:["property-access"],style:{color:"#7daea3"}},{types:["tag"],style:{color:"#e78a4e"}},{types:["attr-name","char","url","regex"],style:{color:"#a9b665"}},{types:["attr-value","string"],style:{color:"#89b482"}},{types:["comment","prolog","cdata","operator","inserted"],style:{color:"#a89984"}},{types:["delimiter","boolean","keyword","selector","important","atrule","property","variable","deleted"],style:{color:"#ea6962"}},{types:["entity","number","symbol"],style:{color:"#d3869b"}}]},K={plain:{color:"#654735",backgroundColor:"#f9f5d7"},styles:[{types:["delimiter","boolean","keyword","selector","important","atrule","property","variable","deleted"],style:{color:"#af2528"}},{types:["imports","class-name","maybe-class-name","constant","doctype","builtin"],style:{color:"#b4730e"}},{types:["string","attr-value"],style:{color:"#477a5b"}},{types:["property-access"],style:{color:"#266b79"}},{types:["function","attr-name","char","url"],style:{color:"#72761e"}},{types:["tag"],style:{color:"#b94c07"}},{types:["comment","prolog","cdata","operator","inserted"],style:{color:"#a89984"}},{types:["entity","number","symbol"],style:{color:"#924f79"}}]},Y=/\r\n|\r|\n/,X=e=>{0===e.length?e.push({types:["plain"],content:"\n",empty:!0}):1===e.length&&""===e[0].content&&(e[0].content="\n",e[0].empty=!0)},Z=(e,t)=>{const n=e.length;return n>0&&e[n-1]===t?e:e.concat(t)},J=e=>{const t=[[]],n=[e],r=[0],o=[e.length];let a=0,i=0,l=[];const s=[l];for(;i>-1;){for(;(a=r[i]++)<o[i];){let e,c=t[i];const u=n[i][a];if("string"==typeof u?(c=i>0?c:["plain"],e=u):(c=Z(c,u.type),u.alias&&(c=Z(c,u.alias)),e=u.content),"string"!=typeof e){i++,t.push(c),n.push(e),r.push(0),o.push(e.length);continue}const d=e.split(Y),p=d.length;l.push({types:c,content:d[0]});for(let t=1;t<p;t++)X(l),s.push(l=[]),l.push({types:c,content:d[t]})}i--,t.pop(),n.pop(),r.pop(),o.pop()}return X(l),s},ee=(e,t)=>{const{plain:n}=e,r=e.styles.reduce((e,n)=>{const{languages:r,style:o}=n;return r&&!r.includes(t)||n.types.forEach(t=>{const n=S(S({},e[t]),o);e[t]=n}),e},{});return r.root=n,r.plain=E(S({},n),{backgroundColor:void 0}),r},te=({children:e,language:t,code:n,theme:r,prism:o})=>{const a=t.toLowerCase(),i=ee(r,a),l=(e=>(0,u.useCallback)(t=>{var n=t,{className:r,style:o,line:a}=n,i=_(n,["className","style","line"]);const l=E(S({},i),{className:(0,d.A)("token-line",r)});return"object"==typeof e&&"plain"in e&&(l.style=e.plain),"object"==typeof o&&(l.style=S(S({},l.style||{}),o)),l},[e]))(i),s=(e=>{const t=(0,u.useCallback)(({types:t,empty:n})=>{if(null!=e)return 1===t.length&&"plain"===t[0]?null!=n?{display:"inline-block"}:void 0:1===t.length&&null!=n?e[t[0]]:Object.assign(null!=n?{display:"inline-block"}:{},...t.map(t=>e[t]))},[e]);return(0,u.useCallback)(e=>{var n=e,{token:r,className:o,style:a}=n,i=_(n,["token","className","style"]);const l=E(S({},i),{className:(0,d.A)("token",...r.types,o),children:r.content,style:t(r)});return null!=a&&(l.style=S(S({},l.style||{}),a)),l},[t])})(i),c=(({prism:e,code:t,grammar:n,language:r})=>(0,u.useMemo)(()=>{if(null==n)return J([t]);const o={code:t,grammar:n,language:r,tokens:[]};return e.hooks.run("before-tokenize",o),o.tokens=e.tokenize(t,n),e.hooks.run("after-tokenize",o),J(o.tokens)},[t,n,r,e]))({prism:o,language:a,code:n,grammar:o.languages[a]});return e({tokens:c,className:`prism-code language-${a}`,style:null!=i?i.root:{},getLineProps:l,getTokenProps:s})},ne=e=>(0,u.createElement)(te,E(S({},e),{prism:e.prism||A,theme:e.theme||U,code:e.code,language:e.language}))},2131:(e,t,n)=>{"use strict";n.d(t,{o:()=>i});var r=n(4586),o=n(6347),a=n(440);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:l}}=(0,r.A)(),{pathname:s}=(0,o.zy)(),c=(0,a.Ks)(s,{trailingSlash:n,baseUrl:e}),u=l===i?e:e.replace(`/${l}/`,"/"),d=c.replace(e,"");return{createUrl:function({locale:e,fullyQualified:n}){return`${n?t:""}${function(e){return e===i?`${u}`:`${u}${e}/`}(e)}${d}`}}}},2303:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var r=n(6540),o=n(6125);function a(){return(0,r.useContext)(o.o)}},2566:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.addPrefix=function(e,t){return e.startsWith(t)?e:`${t}${e}`},t.removeSuffix=function(e,t){if(""===t)return e;return e.endsWith(t)?e.slice(0,-t.length):e},t.addSuffix=function(e,t){return e.endsWith(t)?e:`${e}${t}`},t.removePrefix=function(e,t){return e.startsWith(t)?e.slice(t.length):e}},2654:e=>{"use strict";e.exports={}},2694:(e,t,n)=>{"use strict";var r=n(6925);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,a,i){if(i!==r){var l=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 l.name="Invariant Violation",l}}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:a,resetWarningCache:o};return n.PropTypes=n,n}},2799:(e,t)=>{"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,o=n?Symbol.for("react.portal"):60106,a=n?Symbol.for("react.fragment"):60107,i=n?Symbol.for("react.strict_mode"):60108,l=n?Symbol.for("react.profiler"):60114,s=n?Symbol.for("react.provider"):60109,c=n?Symbol.for("react.context"):60110,u=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,p=n?Symbol.for("react.forward_ref"):60112,f=n?Symbol.for("react.suspense"):60113,m=n?Symbol.for("react.suspense_list"):60120,g=n?Symbol.for("react.memo"):60115,h=n?Symbol.for("react.lazy"):60116,b=n?Symbol.for("react.block"):60121,y=n?Symbol.for("react.fundamental"):60117,v=n?Symbol.for("react.responder"):60118,w=n?Symbol.for("react.scope"):60119;function k(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case u:case d:case a:case l:case i:case f:return e;default:switch(e=e&&e.$$typeof){case c:case p:case h:case g:case s:return e;default:return t}}case o:return t}}}function x(e){return k(e)===d}t.AsyncMode=u,t.ConcurrentMode=d,t.ContextConsumer=c,t.ContextProvider=s,t.Element=r,t.ForwardRef=p,t.Fragment=a,t.Lazy=h,t.Memo=g,t.Portal=o,t.Profiler=l,t.StrictMode=i,t.Suspense=f,t.isAsyncMode=function(e){return x(e)||k(e)===u},t.isConcurrentMode=x,t.isContextConsumer=function(e){return k(e)===c},t.isContextProvider=function(e){return k(e)===s},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return k(e)===p},t.isFragment=function(e){return k(e)===a},t.isLazy=function(e){return k(e)===h},t.isMemo=function(e){return k(e)===g},t.isPortal=function(e){return k(e)===o},t.isProfiler=function(e){return k(e)===l},t.isStrictMode=function(e){return k(e)===i},t.isSuspense=function(e){return k(e)===f},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===a||e===d||e===l||e===i||e===f||e===m||"object"==typeof e&&null!==e&&(e.$$typeof===h||e.$$typeof===g||e.$$typeof===s||e.$$typeof===c||e.$$typeof===p||e.$$typeof===y||e.$$typeof===v||e.$$typeof===w||e.$$typeof===b)},t.typeOf=k},2831:(e,t,n)=>{"use strict";n.d(t,{u:()=>i,v:()=>l});var r=n(6347),o=n(8168),a=n(6540);function i(e,t,n){return void 0===n&&(n=[]),e.some(function(e){var o=e.path?(0,r.B6)(t,e):n.length?n[n.length-1].match:r.Ix.computeRootMatch(t);return o&&(n.push({route:e,match:o}),e.routes&&i(e.routes,t,n)),o}),n}function l(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),e?a.createElement(r.dO,n,e.map(function(e,n){return a.createElement(r.qh,{key:e.key||n,path:e.path,exact:e.exact,strict:e.strict,render:function(n){return e.render?e.render((0,o.A)({},n,{},t,{route:e})):a.createElement(e.component,(0,o.A)({},n,t,{route:e}))}})})):null}},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 a=Object.keys(e),i=Object.keys(t);if(a.length!==i.length)return!1;for(var l=Object.prototype.hasOwnProperty.bind(t),s=0;s<a.length;s++){var c=a[s];if(!l(c))return!1;var u=e[c],d=t[c];if(!1===(o=n?n.call(r,u,d,c):void 0)||void 0===o&&u!==d)return!1}return!0}},2892:(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)}function o(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,r(e,t)}n.d(t,{A:()=>o})},2983:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.addTrailingSlash=o,t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[i]=e.split(/[#?]/),l="/"===i||i===r?i:(s=i,c=n,c?o(s):a(s));var s,c;return e.replace(i,l)},t.addLeadingSlash=function(e){return(0,r.addPrefix)(e,"/")},t.removeTrailingSlash=a;const r=n(2566);function o(e){return e.endsWith("/")?e:`${e}/`}function a(e){return(0,r.removeSuffix)(e,"/")}},3001:(e,t,n)=>{"use strict";n.r(t)},3025:(e,t,n)=>{"use strict";n.d(t,{n:()=>l,r:()=>s});var r=n(6540),o=n(9532),a=n(4848);const i=r.createContext(null);function l({children:e,version:t}){return(0,a.jsx)(i.Provider,{value:t,children:e})}function s(){const e=(0,r.useContext)(i);if(null===e)throw new o.dV("DocsVersionProvider");return e}},3102:(e,t,n)=>{"use strict";n.d(t,{W:()=>i,o:()=>a});var r=n(6540),o=n(4848);const a=r.createContext(null);function i({children:e,value:t}){const n=r.useContext(a),i=(0,r.useMemo)(()=>function({parent:e,value:t}){if(!e){if(!t)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in t))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return t}const n={...e.data,...t?.data};return{plugin:e.plugin,data:n}}({parent:n,value:t}),[n,t]);return(0,o.jsx)(a.Provider,{value:i,children:e})}},3104:(e,t,n)=>{"use strict";n.d(t,{Mq:()=>p,Tv:()=>c,gk:()=>f});var r=n(6540),o=n(8193),a=n(2303),i=(n(205),n(9532)),l=n(4848);const s=r.createContext(void 0);function c({children:e}){const t=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)(()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}}),[])}();return(0,l.jsx)(s.Provider,{value:t,children:e})}function u(){const e=(0,r.useContext)(s);if(null==e)throw new i.dV("ScrollControllerProvider");return e}const d=()=>o.A.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function p(e,t=[]){const{scrollEventsEnabledRef:n}=u(),o=(0,r.useRef)(d()),a=(0,i._q)(e);(0,r.useEffect)(()=>{const e=()=>{if(!n.current)return;const e=d();a(e,o.current),o.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)},[a,n,...t])}function f(){const e=(0,r.useRef)(null),t=(0,a.A)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const o=document.documentElement.scrollTop;(n&&o>e||!n&&o<e)&&(t=requestAnimationFrame(r),window.scrollTo(0,Math.floor(.85*(o-e))+e))}(),()=>t&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},3109:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{O:()=>r})},3157:(e,t,n)=>{var r={"./":8722};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=3157},3186:(e,t,n)=>{"use strict";n.d(t,{A:()=>i});n(6540);const r={iconExternalLink:"iconExternalLink_nPIU"};var o=n(4848);const a="#theme-svg-external-link";function i({width:e=13.5,height:t=13.5}){return(0,o.jsx)("svg",{width:e,height:t,"aria-hidden":"true",className:r.iconExternalLink,children:(0,o.jsx)("use",{href:a})})}},3259:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function o(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(){return i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i.apply(this,arguments)}var l=n(6540),s=[],c=[];var u=l.createContext(null);function d(e){var t=e(),n={loading:!0,loaded:null,error:null};return n.promise=t.then(function(e){return n.loading=!1,n.loaded=e,e}).catch(function(e){throw n.loading=!1,n.error=e,e}),n}function p(e){var t={loading:!1,loaded:{},error:null},n=[];try{Object.keys(e).forEach(function(r){var o=d(e[r]);o.loading?t.loading=!0:(t.loaded[r]=o.loaded,t.error=o.error),n.push(o.promise),o.promise.then(function(e){t.loaded[r]=e}).catch(function(e){t.error=e})})}catch(r){t.error=r}return t.promise=Promise.all(n).then(function(e){return t.loading=!1,e}).catch(function(e){throw t.loading=!1,e}),t}function f(e,t){return l.createElement((n=e)&&n.__esModule?n.default:n,t);var n}function m(e,t){var d,p;if(!t.loading)throw new Error("react-loadable requires a `loading` component");var m=i({loader:null,loading:null,delay:200,timeout:null,render:f,webpack:null,modules:null},t),g=null;function h(){return g||(g=e(m.loader)),g.promise}return s.push(h),"function"==typeof m.webpack&&c.push(function(){if((0,m.webpack)().every(function(e){return void 0!==e&&void 0!==n.m[e]}))return h()}),p=d=function(t){function n(n){var r;return a(o(o(r=t.call(this,n)||this)),"retry",function(){r.setState({error:null,loading:!0,timedOut:!1}),g=e(m.loader),r._loadModule()}),h(),r.state={error:g.error,pastDelay:!1,timedOut:!1,loading:g.loading,loaded:g.loaded},r}r(n,t),n.preload=function(){return h()};var i=n.prototype;return i.UNSAFE_componentWillMount=function(){this._loadModule()},i.componentDidMount=function(){this._mounted=!0},i._loadModule=function(){var e=this;if(this.context&&Array.isArray(m.modules)&&m.modules.forEach(function(t){e.context.report(t)}),g.loading){var t=function(t){e._mounted&&e.setState(t)};"number"==typeof m.delay&&(0===m.delay?this.setState({pastDelay:!0}):this._delay=setTimeout(function(){t({pastDelay:!0})},m.delay)),"number"==typeof m.timeout&&(this._timeout=setTimeout(function(){t({timedOut:!0})},m.timeout));var n=function(){t({error:g.error,loaded:g.loaded,loading:g.loading}),e._clearTimeouts()};g.promise.then(function(){return n(),null}).catch(function(e){return n(),null})}},i.componentWillUnmount=function(){this._mounted=!1,this._clearTimeouts()},i._clearTimeouts=function(){clearTimeout(this._delay),clearTimeout(this._timeout)},i.render=function(){return this.state.loading||this.state.error?l.createElement(m.loading,{isLoading:this.state.loading,pastDelay:this.state.pastDelay,timedOut:this.state.timedOut,error:this.state.error,retry:this.retry}):this.state.loaded?m.render(this.state.loaded,this.props):null},n}(l.Component),a(d,"contextType",u),p}function g(e){return m(d,e)}g.Map=function(e){if("function"!=typeof e.render)throw new Error("LoadableMap requires a `render(loaded, props)` function");return m(p,e)};var h=function(e){function t(){return e.apply(this,arguments)||this}return r(t,e),t.prototype.render=function(){return l.createElement(u.Provider,{value:{report:this.props.report}},l.Children.only(this.props.children))},t}(l.Component);function b(e){for(var t=[];e.length;){var n=e.pop();t.push(n())}return Promise.all(t).then(function(){if(e.length)return b(e)})}g.Capture=h,g.preloadAll=function(){return new Promise(function(e,t){b(s).then(e,t)})},g.preloadReady=function(){return new Promise(function(e,t){b(c).then(e,e)})},e.exports=g},3427:(e,t,n)=>{"use strict";n.d(t,{A:()=>i});var r=n(6540);n(4848);const o=r.createContext({collectAnchor:()=>{},collectLink:()=>{}}),a=()=>(0,r.useContext)(o);function i(){return a()}},3465:(e,t,n)=>{"use strict";n.d(t,{A:()=>u});n(6540);var r=n(8774),o=n(6025),a=n(4586),i=n(6342),l=n(1122),s=n(4848);function c({logo:e,alt:t,imageClassName:n}){const r={light:(0,o.Ay)(e.src),dark:(0,o.Ay)(e.srcDark||e.src)},a=(0,s.jsx)(l.A,{className:e.className,sources:r,height:e.height,width:e.width,alt:t,style:e.style});return n?(0,s.jsx)("div",{className:n,children:a}):a}function u(e){const{siteConfig:{title:t}}=(0,a.A)(),{navbar:{title:n,logo:l}}=(0,i.p)(),{imageClassName:u,titleClassName:d,...p}=e,f=(0,o.Ay)(l?.href||"/"),m=n?"":t,g=l?.alt??m;return(0,s.jsxs)(r.A,{to:f,...p,...l?.target&&{target:l.target},children:[l&&(0,s.jsx)(c,{logo:l,alt:g,imageClassName:u}),null!=n&&(0,s.jsx)("b",{className:d,children:n})]})}},3886:(e,t,n)=>{"use strict";n.d(t,{VQ:()=>h,g1:()=>y});var r=n(6540),o=n(4070),a=n(7065),i=n(6342),l=n(679),s=n(9532),c=n(4848);const u=e=>`docs-preferred-version-${e}`,d={save:(e,t,n)=>{(0,l.Wf)(u(e),{persistence:t}).set(n)},read:(e,t)=>(0,l.Wf)(u(e),{persistence:t}).get(),clear:(e,t)=>{(0,l.Wf)(u(e),{persistence:t}).del()}},p=e=>Object.fromEntries(e.map(e=>[e,{preferredVersionName:null}]));const f=r.createContext(null);function m(){const e=(0,o.Gy)(),t=(0,i.p)().docs.versionPersistence,n=(0,r.useMemo)(()=>Object.keys(e),[e]),[a,l]=(0,r.useState)(()=>p(n));(0,r.useEffect)(()=>{l(function({pluginIds:e,versionPersistence:t,allDocsData:n}){function r(e){const r=d.read(e,t);return n[e].versions.some(e=>e.name===r)?{preferredVersionName:r}:(d.clear(e,t),{preferredVersionName:null})}return Object.fromEntries(e.map(e=>[e,r(e)]))}({allDocsData:e,versionPersistence:t,pluginIds:n}))},[e,t,n]);return[a,(0,r.useMemo)(()=>({savePreferredVersion:function(e,n){d.save(e,t,n),l(t=>({...t,[e]:{preferredVersionName:n}}))}}),[t])]}function g({children:e}){const t=m();return(0,c.jsx)(f.Provider,{value:t,children:e})}function h({children:e}){return(0,c.jsx)(g,{children:e})}function b(){const e=(0,r.useContext)(f);if(!e)throw new s.dV("DocsPreferredVersionContextProvider");return e}function y(e=a.W){const t=(0,o.ht)(e),[n,i]=b(),{preferredVersionName:l}=n[e];return{preferredVersion:t.versions.find(e=>e.name===l)??null,savePreferredVersionName:(0,r.useCallback)(t=>{i.savePreferredVersion(e,t)},[i,e])}}},4054:e=>{"use strict";e.exports=JSON.parse('{"/oracle-db-appdev-monitoring/markdown-page-553":{"__comp":"1f391b9e","__context":{"plugin":"a7456010"},"content":"393be207"},"/oracle-db-appdev-monitoring/docs-714":{"__comp":"5e95c892","__context":{"plugin":"aba21aa0"}},"/oracle-db-appdev-monitoring/docs/next-3bc":{"__comp":"a7bd4aaa","__props":"cf0dfdd1"},"/oracle-db-appdev-monitoring/docs/next-aa7":{"__comp":"a94703ab"},"/oracle-db-appdev-monitoring/docs/next/advanced/development-cdc":{"__comp":"17896441","content":"b8d4edc5"},"/oracle-db-appdev-monitoring/docs/next/advanced/go-runtime-0b2":{"__comp":"17896441","content":"a7f4dc0a"},"/oracle-db-appdev-monitoring/docs/next/advanced/txeventq-c85":{"__comp":"17896441","content":"21b27731"},"/oracle-db-appdev-monitoring/docs/next/category/advanced-159":{"__comp":"14eb3368","__props":"c4e87715"},"/oracle-db-appdev-monitoring/docs/next/category/configuration-9ed":{"__comp":"14eb3368","__props":"5e8a6b04"},"/oracle-db-appdev-monitoring/docs/next/category/getting-started-1ec":{"__comp":"14eb3368","__props":"3740dcc7"},"/oracle-db-appdev-monitoring/docs/next/category/releases-d99":{"__comp":"14eb3368","__props":"f36aa3f3"},"/oracle-db-appdev-monitoring/docs/next/configuration/alert-logs-9a7":{"__comp":"17896441","content":"61f1b472"},"/oracle-db-appdev-monitoring/docs/next/configuration/azure-vault-b0f":{"__comp":"17896441","content":"85a0f18d"},"/oracle-db-appdev-monitoring/docs/next/configuration/config-file-1e8":{"__comp":"17896441","content":"d94a41cc"},"/oracle-db-appdev-monitoring/docs/next/configuration/custom-metrics-77d":{"__comp":"17896441","content":"1e10f605"},"/oracle-db-appdev-monitoring/docs/next/configuration/multiple-databases-3a7":{"__comp":"17896441","content":"d72bb23b"},"/oracle-db-appdev-monitoring/docs/next/configuration/oci-vault-e02":{"__comp":"17896441","content":"dac61621"},"/oracle-db-appdev-monitoring/docs/next/configuration/oracle-wallet-eaf":{"__comp":"17896441","content":"49d0ab44"},"/oracle-db-appdev-monitoring/docs/next/getting-started/basics-d1f":{"__comp":"17896441","content":"af966633"},"/oracle-db-appdev-monitoring/docs/next/getting-started/default-metrics-5ae":{"__comp":"17896441","content":"6e6103cc"},"/oracle-db-appdev-monitoring/docs/next/getting-started/grafana-dashboards-fd1":{"__comp":"17896441","content":"2c91c66b"},"/oracle-db-appdev-monitoring/docs/next/getting-started/kubernetes-b66":{"__comp":"17896441","content":"5240f2c1"},"/oracle-db-appdev-monitoring/docs/next/intro-f21":{"__comp":"17896441","content":"0e384e19"},"/oracle-db-appdev-monitoring/docs/next/releases/changelog-d3d":{"__comp":"17896441","content":"c539bf3f"},"/oracle-db-appdev-monitoring/docs/next/releases/roadmap-69d":{"__comp":"17896441","content":"384c9e20"},"/oracle-db-appdev-monitoring/docs-bfb":{"__comp":"a7bd4aaa","__props":"6f6f2b68"},"/oracle-db-appdev-monitoring/docs-2a3":{"__comp":"a94703ab"},"/oracle-db-appdev-monitoring/docs/advanced/development-b0d":{"__comp":"17896441","content":"6a577544"},"/oracle-db-appdev-monitoring/docs/advanced/go-runtime-41d":{"__comp":"17896441","content":"9419d97c"},"/oracle-db-appdev-monitoring/docs/advanced/txeventq-f6c":{"__comp":"17896441","content":"e0c86ee0"},"/oracle-db-appdev-monitoring/docs/category/advanced-582":{"__comp":"14eb3368","__props":"a989571e"},"/oracle-db-appdev-monitoring/docs/category/configuration-b77":{"__comp":"14eb3368","__props":"867ce809"},"/oracle-db-appdev-monitoring/docs/category/getting-started-0ec":{"__comp":"14eb3368","__props":"2d404bd3"},"/oracle-db-appdev-monitoring/docs/category/releases-18e":{"__comp":"14eb3368","__props":"2a1428c8"},"/oracle-db-appdev-monitoring/docs/configuration/alert-logs-d0e":{"__comp":"17896441","content":"36b77772"},"/oracle-db-appdev-monitoring/docs/configuration/azure-vault-b26":{"__comp":"17896441","content":"8be1f15d"},"/oracle-db-appdev-monitoring/docs/configuration/config-file-ab4":{"__comp":"17896441","content":"ab01181e"},"/oracle-db-appdev-monitoring/docs/configuration/custom-metrics-7f5":{"__comp":"17896441","content":"f7d2b7bf"},"/oracle-db-appdev-monitoring/docs/configuration/multiple-databases-da1":{"__comp":"17896441","content":"7569d55b"},"/oracle-db-appdev-monitoring/docs/configuration/oci-vault-a6c":{"__comp":"17896441","content":"468714db"},"/oracle-db-appdev-monitoring/docs/configuration/oracle-wallet-5f0":{"__comp":"17896441","content":"f6de67f9"},"/oracle-db-appdev-monitoring/docs/getting-started/basics-f7f":{"__comp":"17896441","content":"3c57bc2c"},"/oracle-db-appdev-monitoring/docs/getting-started/default-metrics-2d3":{"__comp":"17896441","content":"01070055"},"/oracle-db-appdev-monitoring/docs/getting-started/grafana-dashboards-8b1":{"__comp":"17896441","content":"fcc612c9"},"/oracle-db-appdev-monitoring/docs/getting-started/kubernetes-968":{"__comp":"17896441","content":"a7901124"},"/oracle-db-appdev-monitoring/docs/intro-174":{"__comp":"17896441","content":"488c0ad4"},"/oracle-db-appdev-monitoring/docs/releases/changelog-814":{"__comp":"17896441","content":"6ad7f408"},"/oracle-db-appdev-monitoring/docs/releases/roadmap-e2c":{"__comp":"17896441","content":"0170a66b"},"/oracle-db-appdev-monitoring/-5e8":{"__comp":"1df93b7f","__context":{"plugin":"a7456010"},"config":"5e9f5e1a"}}')},4070:(e,t,n)=>{"use strict";n.d(t,{zK:()=>g,vT:()=>p,Gy:()=>u,HW:()=>h,ht:()=>d,r7:()=>m,jh:()=>f});var r=n(6347),o=n(4586),a=n(7065);function i(e,t={}){const n=function(){const{globalData:e}=(0,o.A)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const l=e=>e.versions.find(e=>e.isLast);function s(e,t){const n=function(e,t){return[...e.versions].sort((e,t)=>e.path===t.path?0:e.path.includes(t.path)?-1:t.path.includes(e.path)?1:0).find(e=>!!(0,r.B6)(t,{path:e.path,exact:!1,strict:!1}))}(e,t),o=n?.docs.find(e=>!!(0,r.B6)(t,{path:e.path,exact:!0,strict:!1}));return{activeVersion:n,activeDoc:o,alternateDocVersions:o?function(t){const n={};return e.versions.forEach(e=>{e.docs.forEach(r=>{r.id===t&&(n[e.name]=r)})}),n}(o.id):{}}}const c={},u=()=>i("docusaurus-plugin-content-docs")??c,d=e=>{try{return function(e,t=a.W,n={}){const r=i(e),o=r?.[t];if(!o&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return o}("docusaurus-plugin-content-docs",e,{failfast:!0})}catch(t){throw new Error("You are using a feature of the Docusaurus docs plugin, but this plugin does not seem to be enabled"+("Default"===e?"":` (pluginId=${e}`),{cause:t})}};function p(e={}){const t=u(),{pathname:n}=(0,r.zy)();return function(e,t,n={}){const o=Object.entries(e).sort((e,t)=>t[1].path.localeCompare(e[1].path)).find(([,e])=>!!(0,r.B6)(t,{path:e.path,exact:!1,strict:!1})),a=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!a&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map(e=>e.path).join(", ")}`);return a}(t,n,e)}function f(e){return d(e).versions}function m(e){const t=d(e);return l(t)}function g(e){const t=d(e),{pathname:n}=(0,r.zy)();return s(t,n)}function h(e){const t=d(e),{pathname:n}=(0,r.zy)();return function(e,t){const n=l(e);return{latestDocSuggestion:s(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},4090:(e,t,n)=>{"use strict";n.d(t,{w:()=>o,J:()=>a});var r=n(6540);const o="navigation-with-keyboard";function a(){(0,r.useEffect)(()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(o),"mousedown"===e.type&&document.body.classList.remove(o)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(o),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}},[])}},4146:(e,t,n)=>{"use strict";var r=n(4363),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||o}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var c=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var o=f(n);o&&o!==m&&e(t,o,r)}var i=u(n);d&&(i=i.concat(d(n)));for(var l=s(t),g=s(n),h=0;h<i.length;++h){var b=i[h];if(!(a[b]||r&&r[b]||g&&g[b]||l&&l[b])){var y=p(n,b);try{c(t,b,y)}catch(v){}}}}return t}},4164:(e,t,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)){var a=e.length;for(t=0;t<a;t++)e[t]&&(n=r(e[t]))&&(o&&(o+=" "),o+=n)}else for(n in e)e[n]&&(o&&(o+=" "),o+=n);return o}n.d(t,{A:()=>o});const o=function(){for(var e,t,n=0,o="",a=arguments.length;n<a;n++)(e=arguments[n])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}},4363:(e,t,n)=>{"use strict";e.exports=n(2799)},4477:(e,t)=>{"use strict";function n(e,t){var n=e.length;e.push(t);e:for(;0<n;){var r=n-1>>>1,o=e[r];if(!(0<a(o,t)))break e;e[r]=t,e[n]=o,n=r}}function r(e){return 0===e.length?null:e[0]}function o(e){if(0===e.length)return null;var t=e[0],n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,o=e.length,i=o>>>1;r<i;){var l=2*(r+1)-1,s=e[l],c=l+1,u=e[c];if(0>a(s,n))c<o&&0>a(u,s)?(e[r]=u,e[c]=n,r=c):(e[r]=s,e[l]=n,r=l);else{if(!(c<o&&0>a(u,n)))break e;e[r]=u,e[c]=n,r=c}}}return t}function a(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}if(t.unstable_now=void 0,"object"==typeof performance&&"function"==typeof performance.now){var i=performance;t.unstable_now=function(){return i.now()}}else{var l=Date,s=l.now();t.unstable_now=function(){return l.now()-s}}var c=[],u=[],d=1,p=null,f=3,m=!1,g=!1,h=!1,b=!1,y="function"==typeof setTimeout?setTimeout:null,v="function"==typeof clearTimeout?clearTimeout:null,w="undefined"!=typeof setImmediate?setImmediate:null;function k(e){for(var t=r(u);null!==t;){if(null===t.callback)o(u);else{if(!(t.startTime<=e))break;o(u),t.sortIndex=t.expirationTime,n(c,t)}t=r(u)}}function x(e){if(h=!1,k(e),!g)if(null!==r(c))g=!0,E||(E=!0,S());else{var t=r(u);null!==t&&L(x,t.startTime-e)}}var S,E=!1,_=-1,C=5,A=-1;function T(){return!!b||!(t.unstable_now()-A<C)}function j(){if(b=!1,E){var e=t.unstable_now();A=e;var n=!0;try{e:{g=!1,h&&(h=!1,v(_),_=-1),m=!0;var a=f;try{t:{for(k(e),p=r(c);null!==p&&!(p.expirationTime>e&&T());){var i=p.callback;if("function"==typeof i){p.callback=null,f=p.priorityLevel;var l=i(p.expirationTime<=e);if(e=t.unstable_now(),"function"==typeof l){p.callback=l,k(e),n=!0;break t}p===r(c)&&o(c),k(e)}else o(c);p=r(c)}if(null!==p)n=!0;else{var s=r(u);null!==s&&L(x,s.startTime-e),n=!1}}break e}finally{p=null,f=a,m=!1}n=void 0}}finally{n?S():E=!1}}}if("function"==typeof w)S=function(){w(j)};else if("undefined"!=typeof MessageChannel){var P=new MessageChannel,N=P.port2;P.port1.onmessage=j,S=function(){N.postMessage(null)}}else S=function(){y(j,0)};function L(e,n){_=y(function(){e(t.unstable_now())},n)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):C=0<e?Math.floor(1e3/e):5},t.unstable_getCurrentPriorityLevel=function(){return f},t.unstable_next=function(e){switch(f){case 1:case 2:case 3:var t=3;break;default:t=f}var n=f;f=t;try{return e()}finally{f=n}},t.unstable_requestPaint=function(){b=!0},t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=f;f=e;try{return t()}finally{f=n}},t.unstable_scheduleCallback=function(e,o,a){var i=t.unstable_now();switch("object"==typeof a&&null!==a?a="number"==typeof(a=a.delay)&&0<a?i+a:i:a=i,e){case 1:var l=-1;break;case 2:l=250;break;case 5:l=1073741823;break;case 4:l=1e4;break;default:l=5e3}return e={id:d++,callback:o,priorityLevel:e,startTime:a,expirationTime:l=a+l,sortIndex:-1},a>i?(e.sortIndex=a,n(u,e),null===r(c)&&e===r(u)&&(h?(v(_),_=-1):h=!0,L(x,a-i))):(e.sortIndex=l,n(c,e),g||m||(g=!0,E||(E=!0,S()))),e},t.unstable_shouldYield=T,t.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}},4563:(e,t,n)=>{"use strict";n.d(t,{AL:()=>u,s$:()=>d});var r=n(6540),o=n(4586),a=n(6803),i=n(9532),l=n(4848);const s=({title:e,siteTitle:t,titleDelimiter:n})=>{const r=e?.trim();return r&&r!==t?`${r} ${n} ${t}`:t},c=(0,r.createContext)(null);function u({formatter:e,children:t}){return(0,l.jsx)(c.Provider,{value:e,children:t})}function d(){const e=function(){const e=(0,r.useContext)(c);if(null===e)throw new i.dV("TitleFormatterProvider");return e}(),{siteConfig:t}=(0,o.A)(),{title:n,titleDelimiter:l}=t,{plugin:u}=(0,a.A)();return{format:t=>e({title:t,siteTitle:n,titleDelimiter:l,plugin:u,defaultFormatter:s})}}},4581:(e,t,n)=>{"use strict";n.d(t,{l:()=>l});var r=n(6540),o=n(8193);const a={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function l({desktopBreakpoint:e=i}={}){const[t,n]=(0,r.useState)(()=>"ssr");return(0,r.useEffect)(()=>{function t(){n(function(e){if(!o.A.canUseDOM)throw new Error("getWindowSize() should only be called after React hydration");return window.innerWidth>e?a.desktop:a.mobile}(e))}return t(),window.addEventListener("resize",t),()=>{window.removeEventListener("resize",t)}},[e]),t}},4586:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var r=n(6540),o=n(6988);function a(){return(0,r.useContext)(o.o)}},4625:(e,t,n)=>{"use strict";n.d(t,{I9:()=>d,Kd:()=>u,N_:()=>b,k2:()=>w});var r=n(6347),o=n(2892),a=n(6540),i=n(1513),l=n(8168),s=n(8587),c=n(1561),u=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).history=(0,i.zR)(t.props),t}return(0,o.A)(t,e),t.prototype.render=function(){return a.createElement(r.Ix,{history:this.history,children:this.props.children})},t}(a.Component);var d=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).history=(0,i.TM)(t.props),t}return(0,o.A)(t,e),t.prototype.render=function(){return a.createElement(r.Ix,{history:this.history,children:this.props.children})},t}(a.Component);var p=function(e,t){return"function"==typeof e?e(t):e},f=function(e,t){return"string"==typeof e?(0,i.yJ)(e,null,null,t):e},m=function(e){return e},g=a.forwardRef;void 0===g&&(g=m);var h=g(function(e,t){var n=e.innerRef,r=e.navigate,o=e.onClick,i=(0,s.A)(e,["innerRef","navigate","onClick"]),c=i.target,u=(0,l.A)({},i,{onClick:function(e){try{o&&o(e)}catch(t){throw e.preventDefault(),t}e.defaultPrevented||0!==e.button||c&&"_self"!==c||function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)||(e.preventDefault(),r())}});return u.ref=m!==g&&t||n,a.createElement("a",u)});var b=g(function(e,t){var n=e.component,o=void 0===n?h:n,u=e.replace,d=e.to,b=e.innerRef,y=(0,s.A)(e,["component","replace","to","innerRef"]);return a.createElement(r.XZ.Consumer,null,function(e){e||(0,c.A)(!1);var n=e.history,r=f(p(d,e.location),e.location),s=r?n.createHref(r):"",h=(0,l.A)({},y,{href:s,navigate:function(){var t=p(d,e.location),r=(0,i.AO)(e.location)===(0,i.AO)(f(t));(u||r?n.replace:n.push)(t)}});return m!==g?h.ref=t||b:h.innerRef=b,a.createElement(o,h)})}),y=function(e){return e},v=a.forwardRef;void 0===v&&(v=y);var w=v(function(e,t){var n=e["aria-current"],o=void 0===n?"page":n,i=e.activeClassName,u=void 0===i?"active":i,d=e.activeStyle,m=e.className,g=e.exact,h=e.isActive,w=e.location,k=e.sensitive,x=e.strict,S=e.style,E=e.to,_=e.innerRef,C=(0,s.A)(e,["aria-current","activeClassName","activeStyle","className","exact","isActive","location","sensitive","strict","style","to","innerRef"]);return a.createElement(r.XZ.Consumer,null,function(e){e||(0,c.A)(!1);var n=w||e.location,i=f(p(E,n),n),s=i.pathname,A=s&&s.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1"),T=A?(0,r.B6)(n.pathname,{path:A,exact:g,sensitive:k,strict:x}):null,j=!!(h?h(T,n):T),P="function"==typeof m?m(j):m,N="function"==typeof S?S(j):S;j&&(P=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.filter(function(e){return e}).join(" ")}(P,u),N=(0,l.A)({},N,d));var L=(0,l.A)({"aria-current":j&&o||null,className:P,style:N,to:i},C);return y!==v?L.ref=t||_:L.innerRef=_,a.createElement(b,L)})})},4634:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},4718:(e,t,n)=>{"use strict";n.d(t,{d1:()=>A,Nr:()=>f,w8:()=>y,$S:()=>m,a4:()=>g,cC:()=>p,B5:()=>C,Vd:()=>S,QB:()=>_,fW:()=>E,OF:()=>x,Y:()=>w});var r=n(6540),o=n(6347),a=n(2831),i=n(4070),l=n(9169);function s(e){return Array.from(new Set(e))}var c=n(3886),u=n(3025),d=n(609);function p(e){const t=(0,u.r)();if(!e)return;const n=t.docs[e];if(!n)throw new Error(`no version doc found by id=${e}`);return n}function f(e){return"link"!==e.type||e.unlisted?"category"===e.type?function(e){if(e.href&&!e.linkUnlisted)return e.href;for(const t of e.items){const e=f(t);if(e)return e}}(e):void 0:e.href}function m(){const{pathname:e}=(0,o.zy)(),t=(0,d.t)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");const n=k({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];if(!n)throw new Error(`${e} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);return n}function g(){const{pathname:e}=(0,o.zy)(),t=(0,d.t)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");const n=k({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];return n?.items??t.items}const h=(e,t)=>void 0!==e&&(0,l.ys)(e,t),b=(e,t)=>e.some(e=>y(e,t));function y(e,t){return"link"===e.type?h(e.href,t):"category"===e.type&&(h(e.href,t)||b(e.items,t))}function v(e,t){switch(e.type){case"category":return y(e,t)||void 0!==e.href&&!e.linkUnlisted||e.items.some(e=>v(e,t));case"link":return!e.unlisted||y(e,t);default:return!0}}function w(e,t){return(0,r.useMemo)(()=>e.filter(e=>v(e,t)),[e,t])}function k({sidebarItems:e,pathname:t,onlyCategories:n=!1}){const r=[];return function e(o){for(const a of o)if("category"===a.type&&((0,l.ys)(a.href,t)||e(a.items))||"link"===a.type&&(0,l.ys)(a.href,t)){return n&&"category"!==a.type||r.unshift(a),!0}return!1}(e),r}function x(){const e=(0,d.t)(),{pathname:t}=(0,o.zy)(),n=(0,i.vT)()?.pluginData.breadcrumbs;return!1!==n&&e?k({sidebarItems:e.items,pathname:t}):null}function S(e){const{activeVersion:t}=(0,i.zK)(e),{preferredVersion:n}=(0,c.g1)(e),o=(0,i.r7)(e);return(0,r.useMemo)(()=>s([t,n,o].filter(Boolean)),[t,n,o])}function E(e,t){const n=S(t);return(0,r.useMemo)(()=>{const t=n.flatMap(e=>e.sidebars?Object.entries(e.sidebars):[]),r=t.find(t=>t[0]===e);if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map(e=>e.name).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map(e=>e[0]).join("\n- ")}`);return r[1]},[e,n])}function _(e,t){const n=S(t);return(0,r.useMemo)(()=>{const t=n.flatMap(e=>e.docs),r=t.find(t=>t.id===e);if(!r){if(n.flatMap(e=>e.draftIds).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map(e=>e.name).join(", ")}".\nAvailable doc ids are:\n- ${s(t.map(e=>e.id)).join("\n- ")}`)}return r},[e,n])}function C({route:e}){const t=(0,o.zy)(),n=(0,u.r)(),r=e.routes,i=r.find(e=>(0,o.B6)(t.pathname,e));if(!i)return null;const l=i.sidebar,s=l?n.docsSidebars[l]:void 0;return{docElement:(0,a.v)(r),sidebarName:l,sidebarItems:s}}function A(e){return e.filter(e=>!("category"===e.type||"link"===e.type)||!!f(e))}},4784:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={title:"Oracle Database Metrics Exporter",tagline:"OpenTelemetry Metrics for your Oracle Database instances",favicon:"img/favicon-32x32.png",future:{v4:{removeLegacyPostBuildHeadAttribute:!0,useCssCascadeLayers:!0},experimental_faster:{swcJsLoader:!1,swcJsMinimizer:!1,swcHtmlMinimizer:!1,lightningCssMinimizer:!1,mdxCrossCompilerCache:!1,rspackBundler:!1,rspackPersistentCache:!1,ssgWorkerThreads:!1},experimental_storage:{type:"localStorage",namespace:!1},experimental_router:"browser"},url:"https://oracle.github.io",baseUrl:"/oracle-db-appdev-monitoring/",organizationName:"oracle",projectName:"oracle-db-appdev-monitoring",onBrokenLinks:"throw",onBrokenMarkdownLinks:"warn",i18n:{defaultLocale:"en",locales:["en"],path:"i18n",localeConfigs:{}},presets:[["classic",{docs:{sidebarPath:"./sidebars.ts",editUrl:"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/"},theme:{customCss:"./src/css/custom.css"}}]],themeConfig:{image:"img/logo.png",navbar:{title:"Oracle Database Monitoring Exporter",logo:{alt:"Oracle Database Monitoring Exporter Logo",src:"img/logo_home.png"},items:[{type:"docSidebar",sidebarId:"tutorialSidebar",position:"left",label:"Docs"},{type:"docsVersionDropdown",versions:["current","2.0.3"],position:"left",dropdownItemsBefore:[],dropdownItemsAfter:[]},{href:"https://github.com/oracle/oracle-db-appdev-monitoring",label:"GitHub",position:"right"}],hideOnScroll:!1},footer:{style:"dark",links:[{title:"Docs",items:[{label:"Tutorial",to:"/docs/intro"}]},{title:"Community",items:[{label:"Stack Overflow",href:"https://stackoverflow.com/questions/tagged/oracle"}]},{title:"More",items:[{label:"Oracle Blogs",to:"https://blogs.oracle.com/"},{label:"Oracle LiveLabs",to:"https://livelabs.oracle.com/pls/apex/r/dbpm/livelabs/home"},{label:"GitHub",href:"https://github.com/oracle/oracle-db-appdev-monitoring"}]}],copyright:"Copyright \xa9 2025, Oracle and/or its affiliates. Built with \u2764\ufe0f using Docusaurus."},prism:{theme:{plain:{color:"#393A34",backgroundColor:"#f6f8fa"},styles:[{types:["comment","prolog","doctype","cdata"],style:{color:"#999988",fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}},{types:["string","attr-value"],style:{color:"#e3116c"}},{types:["punctuation","operator"],style:{color:"#393A34"}},{types:["entity","url","symbol","number","boolean","variable","constant","property","regex","inserted"],style:{color:"#36acaa"}},{types:["atrule","keyword","attr-name","selector"],style:{color:"#00a4db"}},{types:["function","deleted","tag"],style:{color:"#d73a49"}},{types:["function-variable"],style:{color:"#6f42c1"}},{types:["tag","selector","keyword"],style:{color:"#00009f"}}]},darkTheme:{plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},additionalLanguages:[],magicComments:[{className:"theme-code-block-highlighted-line",line:"highlight-next-line",block:{start:"highlight-start",end:"highlight-end"}}]},colorMode:{defaultMode:"light",disableSwitch:!1,respectPrefersColorScheme:!1},docs:{versionPersistence:"localStorage",sidebar:{hideable:!1,autoCollapseCategories:!1}},blog:{sidebar:{groupByYear:!0}},metadata:[],tableOfContents:{minHeadingLevel:2,maxHeadingLevel:3}},baseUrlIssueBanner:!0,onBrokenAnchors:"warn",onDuplicateRoutes:"warn",staticDirectories:["static"],customFields:{},plugins:[],themes:[],scripts:[],headTags:[],stylesheets:[],clientModules:[],titleDelimiter:"|",noIndex:!1,markdown:{format:"mdx",mermaid:!1,mdx1Compat:{comments:!0,admonitions:!0,headingIds:!0},anchors:{maintainCase:!1}}}},4848:(e,t,n)=>{"use strict";e.exports=n(9698)},5041:(e,t,n)=>{"use strict";n.d(t,{M:()=>g,o:()=>m});var r=n(6540),o=n(2303),a=n(679),i=n(9532),l=n(6342),s=n(4848);const c=(0,a.Wf)("docusaurus.announcement.dismiss"),u=(0,a.Wf)("docusaurus.announcement.id"),d=()=>"true"===c.get(),p=e=>c.set(String(e)),f=r.createContext(null);function m({children:e}){const t=function(){const{announcementBar:e}=(0,l.p)(),t=(0,o.A)(),[n,a]=(0,r.useState)(()=>!!t&&d());(0,r.useEffect)(()=>{a(d())},[]);const i=(0,r.useCallback)(()=>{p(!0),a(!0)},[]);return(0,r.useEffect)(()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&p(!1),!r&&d()||a(!1)},[e]),(0,r.useMemo)(()=>({isActive:!!e&&!n,close:i}),[e,n,i])}();return(0,s.jsx)(f.Provider,{value:t,children:e})}function g(){const e=(0,r.useContext)(f);if(!e)throw new i.dV("AnnouncementBarProvider");return e}},5062:(e,t,n)=>{"use strict";n.d(t,{$:()=>i});var r=n(6540),o=n(6347),a=n(9532);function i(e){const t=(0,o.zy)(),n=(0,a.ZC)(t),i=(0,a._q)(e);(0,r.useEffect)(()=>{n&&t!==n&&i({location:t,previousLocation:n})},[i,t,n])}},5260:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});n(6540);var r=n(545),o=n(4848);function a(e){return(0,o.jsx)(r.mg,{...e})}},5293:(e,t,n)=>{"use strict";n.d(t,{G:()=>w,a:()=>v});var r=n(6540),o=n(9532),a=n(679),i=n(6342),l=n(4848);function s(){return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}function c(e){return function(e,t){const n=window.matchMedia(e);return n.addEventListener("change",t),()=>n.removeEventListener("change",t)}("(prefers-color-scheme: dark)",()=>e(s()))}const u=r.createContext(void 0),d=(0,a.Wf)("theme"),p="system",f=e=>"dark"===e?"dark":"light",m=e=>null===e||e===p?null:f(e),g={get:()=>f(document.documentElement.getAttribute("data-theme")),set:e=>{document.documentElement.setAttribute("data-theme",f(e))}},h={get:()=>m(document.documentElement.getAttribute("data-theme-choice")),set:e=>{document.documentElement.setAttribute("data-theme-choice",m(e)??p)}},b=e=>{null===e?d.del():d.set(f(e))};function y(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,i.p)(),{colorMode:o,setColorModeState:a,colorModeChoice:l,setColorModeChoiceState:u}=function(){const{colorMode:{defaultMode:e}}=(0,i.p)(),[t,n]=(0,r.useState)(e),[o,a]=(0,r.useState)(null);return(0,r.useEffect)(()=>{n(g.get()),a(h.get())},[]),{colorMode:t,setColorModeState:n,colorModeChoice:o,setColorModeChoiceState:a}}();(0,r.useEffect)(()=>{t&&d.del()},[t]);const p=(0,r.useCallback)((t,r={})=>{const{persist:o=!0}=r;if(null===t){const t=n?s():e;g.set(t),a(t),h.set(null),u(null)}else g.set(t),h.set(t),a(t),u(t);o&&b(t)},[a,u,n,e]);return(0,r.useEffect)(()=>d.listen(e=>{p(m(e.newValue))}),[p]),(0,r.useEffect)(()=>{if(null===l&&n)return c(e=>{a(e),g.set(e)})},[n,l,a]),(0,r.useMemo)(()=>({colorMode:o,colorModeChoice:l,setColorMode:p,get isDarkTheme(){return"dark"===o},setLightTheme(){p("light")},setDarkTheme(){p("dark")}}),[o,l,p])}function v({children:e}){const t=y();return(0,l.jsx)(u.Provider,{value:t,children:e})}function w(){const e=(0,r.useContext)(u);if(null==e)throw new o.dV("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},5302:(e,t,n)=>{var r=n(4634);e.exports=g,e.exports.parse=a,e.exports.compile=function(e,t){return c(a(e,t),t)},e.exports.tokensToFunction=c,e.exports.tokensToRegExp=m;var o=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function a(e,t){for(var n,r=[],a=0,l=0,s="",c=t&&t.delimiter||"/";null!=(n=o.exec(e));){var u=n[0],p=n[1],f=n.index;if(s+=e.slice(l,f),l=f+u.length,p)s+=p[1];else{var m=e[l],g=n[2],h=n[3],b=n[4],y=n[5],v=n[6],w=n[7];s&&(r.push(s),s="");var k=null!=g&&null!=m&&m!==g,x="+"===v||"*"===v,S="?"===v||"*"===v,E=g||c,_=b||y,C=g||("string"==typeof r[r.length-1]?r[r.length-1]:"");r.push({name:h||a++,prefix:g||"",delimiter:E,optional:S,repeat:x,partial:k,asterisk:!!w,pattern:_?d(_):w?".*":i(E,C)})}}return l<e.length&&(s+=e.substr(l)),s&&r.push(s),r}function i(e,t){return!t||t.indexOf(e)>-1?"[^"+u(e)+"]+?":u(t)+"|(?:(?!"+u(t)+")[^"+u(e)+"])+?"}function l(e){return encodeURI(e).replace(/[\/?#]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})}function s(e){return encodeURI(e).replace(/[?#]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})}function c(e,t){for(var n=new Array(e.length),o=0;o<e.length;o++)"object"==typeof e[o]&&(n[o]=new RegExp("^(?:"+e[o].pattern+")$",f(t)));return function(t,o){for(var a="",i=t||{},c=(o||{}).pretty?l:encodeURIComponent,u=0;u<e.length;u++){var d=e[u];if("string"!=typeof d){var p,f=i[d.name];if(null==f){if(d.optional){d.partial&&(a+=d.prefix);continue}throw new TypeError('Expected "'+d.name+'" to be defined')}if(r(f)){if(!d.repeat)throw new TypeError('Expected "'+d.name+'" to not repeat, but received `'+JSON.stringify(f)+"`");if(0===f.length){if(d.optional)continue;throw new TypeError('Expected "'+d.name+'" to not be empty')}for(var m=0;m<f.length;m++){if(p=c(f[m]),!n[u].test(p))throw new TypeError('Expected all "'+d.name+'" to match "'+d.pattern+'", but received `'+JSON.stringify(p)+"`");a+=(0===m?d.prefix:d.delimiter)+p}}else{if(p=d.asterisk?s(f):c(f),!n[u].test(p))throw new TypeError('Expected "'+d.name+'" to match "'+d.pattern+'", but received "'+p+'"');a+=d.prefix+p}}else a+=d}return a}}function u(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function d(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function p(e,t){return e.keys=t,e}function f(e){return e&&e.sensitive?"":"i"}function m(e,t,n){r(t)||(n=t||n,t=[]);for(var o=(n=n||{}).strict,a=!1!==n.end,i="",l=0;l<e.length;l++){var s=e[l];if("string"==typeof s)i+=u(s);else{var c=u(s.prefix),d="(?:"+s.pattern+")";t.push(s),s.repeat&&(d+="(?:"+c+d+")*"),i+=d=s.optional?s.partial?c+"("+d+")?":"(?:"+c+"("+d+"))?":c+"("+d+")"}}var m=u(n.delimiter||"/"),g=i.slice(-m.length)===m;return o||(i=(g?i.slice(0,-m.length):i)+"(?:"+m+"(?=$))?"),i+=a?"$":o&&g?"":"(?="+m+"|$)",p(new RegExp("^"+i,f(n)),t)}function g(e,t,n){return r(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp?function(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.length;r++)t.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return p(e,t)}(e,t):r(e)?function(e,t,n){for(var r=[],o=0;o<e.length;o++)r.push(g(e[o],t,n).source);return p(new RegExp("(?:"+r.join("|")+")",f(n)),t)}(e,t,n):function(e,t,n){return m(a(e,n),t,n)}(e,t,n)}},5338:(e,t,n)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(1247)},5500:(e,t,n)=>{"use strict";n.d(t,{Jx:()=>b,be:()=>m,e3:()=>h});var r=n(6540),o=n(4164),a=n(5260),i=n(6803),l=n(6025),s=n(4563),c=n(4848);function u({title:e}){const t=(0,s.s$)().format(e);return(0,c.jsxs)(a.A,{children:[(0,c.jsx)("title",{children:t}),(0,c.jsx)("meta",{property:"og:title",content:t})]})}function d({description:e}){return(0,c.jsxs)(a.A,{children:[(0,c.jsx)("meta",{name:"description",content:e}),(0,c.jsx)("meta",{property:"og:description",content:e})]})}function p({image:e}){const{withBaseUrl:t}=(0,l.hH)(),n=t(e,{absolute:!0});return(0,c.jsxs)(a.A,{children:[(0,c.jsx)("meta",{property:"og:image",content:n}),(0,c.jsx)("meta",{name:"twitter:image",content:n})]})}function f({keywords:e}){return(0,c.jsx)(a.A,{children:(0,c.jsx)("meta",{name:"keywords",content:Array.isArray(e)?e.join(","):e})})}function m({title:e,description:t,keywords:n,image:r,children:o}){return(0,c.jsxs)(c.Fragment,{children:[e&&(0,c.jsx)(u,{title:e}),t&&(0,c.jsx)(d,{description:t}),n&&(0,c.jsx)(f,{keywords:n}),r&&(0,c.jsx)(p,{image:r}),o&&(0,c.jsx)(a.A,{children:o})]})}const g=r.createContext(void 0);function h({className:e,children:t}){const n=r.useContext(g),i=(0,o.A)(n,e);return(0,c.jsxs)(g.Provider,{value:i,children:[(0,c.jsx)(a.A,{children:(0,c.jsx)("html",{className:i})}),t]})}function b({children:e}){const t=(0,i.A)(),n=`plugin-${t.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const r=`plugin-id-${t.plugin.id}`;return(0,c.jsx)(h,{className:(0,o.A)(n,r),children:e})}},5556:(e,t,n)=>{e.exports=n(2694)()},5600:(e,t,n)=>{"use strict";n.d(t,{GX:()=>c,YL:()=>s,y_:()=>l});var r=n(6540),o=n(9532),a=n(4848);const i=r.createContext(null);function l({children:e}){const t=(0,r.useState)({component:null,props:null});return(0,a.jsx)(i.Provider,{value:t,children:e})}function s(){const e=(0,r.useContext)(i);if(!e)throw new o.dV("NavbarSecondaryMenuContentProvider");return e[0]}function c({component:e,props:t}){const n=(0,r.useContext)(i);if(!n)throw new o.dV("NavbarSecondaryMenuContentProvider");const[,a]=n,l=(0,o.Be)(t);return(0,r.useEffect)(()=>{a({component:e,props:l})},[a,e,l]),(0,r.useEffect)(()=>()=>a({component:null,props:null}),[a]),null}},5947:function(e,t,n){var r,o;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'};function o(e,t,n){return e<t?t:e>n?n:e}function a(e){return 100*(-1+e)}function i(e,t,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+a(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+a(e)+"%,0)"}:{"margin-left":a(e)+"%"}).transition="all "+t+"ms "+n,o}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=o(e,r.minimum,1),n.status=1===e?null:e;var a=n.render(!t),c=a.querySelector(r.barSelector),u=r.speed,d=r.easing;return a.offsetWidth,l(function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(c,i(e,u,d)),1===e?(s(a,{transition:"none",opacity:1}),a.offsetWidth,setTimeout(function(){s(a,{transition:"all "+u+"ms linear",opacity:0}),setTimeout(function(){n.remove(),t()},u)},u)):setTimeout(t,u)}),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout(function(){n.status&&(n.trickle(),e())},r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*o(Math.random()*t,.1,.95)),t=o(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always(function(){0===--t?(e=0,n.done()):n.set((e-t)/e)}),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var o,i=t.querySelector(r.barSelector),l=e?"-100":a(n.status||0),c=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(o=t.querySelector(r.spinnerSelector))&&f(o),c!=document.body&&u(c,"nprogress-custom-parent"),c.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&f(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,function(e,t){return t.toUpperCase()})}function r(t){var n=document.body.style;if(t in n)return t;for(var r,o=e.length,a=t.charAt(0).toUpperCase()+t.slice(1);o--;)if((r=e[o]+a)in n)return r;return t}function o(e){return e=n(e),t[e]||(t[e]=r(e))}function a(e,t,n){t=o(t),e.style[t]=n}return function(e,t){var n,r,o=arguments;if(2==o.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&a(e,n,r);else a(e,o[1],o[2])}}();function c(e,t){return("string"==typeof e?e:p(e)).indexOf(" "+t+" ")>=0}function u(e,t){var n=p(e),r=n+t;c(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=p(e);c(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function p(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function f(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(o="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=o)},6025:(e,t,n)=>{"use strict";n.d(t,{Ay:()=>l,hH:()=>i});var r=n(6540),o=n(4586),a=n(6654);function i(){const{siteConfig:e}=(0,o.A)(),{baseUrl:t,url:n}=e,i=e.future.experimental_router,l=(0,r.useCallback)((e,r)=>function({siteUrl:e,baseUrl:t,url:n,options:{forcePrependBaseUrl:r=!1,absolute:o=!1}={},router:i}){if(!n||n.startsWith("#")||(0,a.z)(n))return n;if("hash"===i)return n.startsWith("/")?`.${n}`:`./${n}`;if(r)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const l=n.startsWith(t)?n:t+n.replace(/^\//,"");return o?e+l:l}({siteUrl:n,baseUrl:t,url:e,options:r,router:i}),[n,t,i]);return{withBaseUrl:l}}function l(e,t={}){const{withBaseUrl:n}=i();return n(e,t)}},6125:(e,t,n)=>{"use strict";n.d(t,{o:()=>a,x:()=>i});var r=n(6540),o=n(4848);const a=r.createContext(!1);function i({children:e}){const[t,n]=(0,r.useState)(!1);return(0,r.useEffect)(()=>{n(!0)},[]),(0,o.jsx)(a.Provider,{value:t,children:e})}},6134:(e,t,n)=>{"use strict";var r=n(1765),o=n(4784);!function(e){const{themeConfig:{prism:t}}=o.default,{additionalLanguages:r}=t,a=globalThis.Prism;globalThis.Prism=e,r.forEach(e=>{"php"===e&&n(9700),n(8692)(`./prism-${e}`)}),delete globalThis.Prism,void 0!==a&&(globalThis.Prism=e)}(r.My)},6221:(e,t,n)=>{"use strict";var r=n(6540);function o(e){var t="https://react.dev/errors/"+e;if(1<arguments.length){t+="?args[]="+encodeURIComponent(arguments[1]);for(var n=2;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n])}return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function a(){}var i={d:{f:a,r:function(){throw Error(o(522))},D:a,C:a,L:a,m:a,X:a,S:a,M:a},p:0,findDOMNode:null},l=Symbol.for("react.portal");var s=r.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function c(e,t){return"font"===e?"":"string"==typeof t?"use-credentials"===t?t:"":void 0}t.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=i,t.createPortal=function(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!t||1!==t.nodeType&&9!==t.nodeType&&11!==t.nodeType)throw Error(o(299));return function(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:l,key:null==r?null:""+r,children:e,containerInfo:t,implementation:n}}(e,t,null,n)},t.flushSync=function(e){var t=s.T,n=i.p;try{if(s.T=null,i.p=2,e)return e()}finally{s.T=t,i.p=n,i.d.f()}},t.preconnect=function(e,t){"string"==typeof e&&(t?t="string"==typeof(t=t.crossOrigin)?"use-credentials"===t?t:"":void 0:t=null,i.d.C(e,t))},t.prefetchDNS=function(e){"string"==typeof e&&i.d.D(e)},t.preinit=function(e,t){if("string"==typeof e&&t&&"string"==typeof t.as){var n=t.as,r=c(n,t.crossOrigin),o="string"==typeof t.integrity?t.integrity:void 0,a="string"==typeof t.fetchPriority?t.fetchPriority:void 0;"style"===n?i.d.S(e,"string"==typeof t.precedence?t.precedence:void 0,{crossOrigin:r,integrity:o,fetchPriority:a}):"script"===n&&i.d.X(e,{crossOrigin:r,integrity:o,fetchPriority:a,nonce:"string"==typeof t.nonce?t.nonce:void 0})}},t.preinitModule=function(e,t){if("string"==typeof e)if("object"==typeof t&&null!==t){if(null==t.as||"script"===t.as){var n=c(t.as,t.crossOrigin);i.d.M(e,{crossOrigin:n,integrity:"string"==typeof t.integrity?t.integrity:void 0,nonce:"string"==typeof t.nonce?t.nonce:void 0})}}else null==t&&i.d.M(e)},t.preload=function(e,t){if("string"==typeof e&&"object"==typeof t&&null!==t&&"string"==typeof t.as){var n=t.as,r=c(n,t.crossOrigin);i.d.L(e,n,{crossOrigin:r,integrity:"string"==typeof t.integrity?t.integrity:void 0,nonce:"string"==typeof t.nonce?t.nonce:void 0,type:"string"==typeof t.type?t.type:void 0,fetchPriority:"string"==typeof t.fetchPriority?t.fetchPriority:void 0,referrerPolicy:"string"==typeof t.referrerPolicy?t.referrerPolicy:void 0,imageSrcSet:"string"==typeof t.imageSrcSet?t.imageSrcSet:void 0,imageSizes:"string"==typeof t.imageSizes?t.imageSizes:void 0,media:"string"==typeof t.media?t.media:void 0})}},t.preloadModule=function(e,t){if("string"==typeof e)if(t){var n=c(t.as,t.crossOrigin);i.d.m(e,{as:"string"==typeof t.as&&"script"!==t.as?t.as:void 0,crossOrigin:n,integrity:"string"==typeof t.integrity?t.integrity:void 0})}else i.d.m(e)},t.requestFormReset=function(e){i.d.r(e)},t.unstable_batchedUpdates=function(e,t){return e(t)},t.useFormState=function(e,t,n){return s.H.useFormState(e,t,n)},t.useFormStatus=function(){return s.H.useHostTransitionStatus()},t.version="19.1.1"},6294:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(5947),o=n.n(r);o().configure({showSpinner:!1});const a={onRouteUpdate({location:e,previousLocation:t}){if(t&&e.pathname!==t.pathname){const e=window.setTimeout(()=>{o().start()},200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){o().done()}}},6342:(e,t,n)=>{"use strict";n.d(t,{p:()=>o});var r=n(4586);function o(){return(0,r.A)().siteConfig.themeConfig}},6347:(e,t,n)=>{"use strict";n.d(t,{B6:()=>S,Ix:()=>v,W6:()=>L,XZ:()=>y,dO:()=>P,qh:()=>E,zy:()=>O});var r=n(2892),o=n(6540),a=n(5556),i=n.n(a),l=n(1513),s=n(1561),c=n(8168),u=n(5302),d=n.n(u),p=(n(4363),n(8587)),f=(n(4146),1073741823),m="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:{};var g=o.createContext||function(e,t){var n,a,l="__create-react-context-"+function(){var e="__global_unique_id__";return m[e]=(m[e]||0)+1}()+"__",s=function(e){function n(){for(var t,n,r,o=arguments.length,a=new Array(o),i=0;i<o;i++)a[i]=arguments[i];return(t=e.call.apply(e,[this].concat(a))||this).emitter=(n=t.props.value,r=[],{on:function(e){r.push(e)},off:function(e){r=r.filter(function(t){return t!==e})},get:function(){return n},set:function(e,t){n=e,r.forEach(function(e){return e(n,t)})}}),t}(0,r.A)(n,e);var o=n.prototype;return o.getChildContext=function(){var e;return(e={})[l]=this.emitter,e},o.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var n,r=this.props.value,o=e.value;((a=r)===(i=o)?0!==a||1/a==1/i:a!=a&&i!=i)?n=0:(n="function"==typeof t?t(r,o):f,0!==(n|=0)&&this.emitter.set(e.value,n))}var a,i},o.render=function(){return this.props.children},n}(o.Component);s.childContextTypes=((n={})[l]=i().object.isRequired,n);var c=function(t){function n(){for(var e,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(e=t.call.apply(t,[this].concat(r))||this).observedBits=void 0,e.state={value:e.getValue()},e.onUpdate=function(t,n){0!==((0|e.observedBits)&n)&&e.setState({value:e.getValue()})},e}(0,r.A)(n,t);var o=n.prototype;return o.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=null==t?f:t},o.componentDidMount=function(){this.context[l]&&this.context[l].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=null==e?f:e},o.componentWillUnmount=function(){this.context[l]&&this.context[l].off(this.onUpdate)},o.getValue=function(){return this.context[l]?this.context[l].get():e},o.render=function(){return(e=this.props.children,Array.isArray(e)?e[0]:e)(this.state.value);var e},n}(o.Component);return c.contextTypes=((a={})[l]=i().object,a),{Provider:s,Consumer:c}},h=function(e){var t=g();return t.displayName=e,t},b=h("Router-History"),y=h("Router"),v=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={location:t.history.location},n._isMounted=!1,n._pendingLocation=null,t.staticContext||(n.unlisten=t.history.listen(function(e){n._pendingLocation=e})),n}(0,r.A)(t,e),t.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var n=t.prototype;return n.componentDidMount=function(){var e=this;this._isMounted=!0,this.unlisten&&this.unlisten(),this.props.staticContext||(this.unlisten=this.props.history.listen(function(t){e._isMounted&&e.setState({location:t})})),this._pendingLocation&&this.setState({location:this._pendingLocation})},n.componentWillUnmount=function(){this.unlisten&&(this.unlisten(),this._isMounted=!1,this._pendingLocation=null)},n.render=function(){return o.createElement(y.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},o.createElement(b.Provider,{children:this.props.children||null,value:this.props.history}))},t}(o.Component);o.Component;o.Component;var w={},k=1e4,x=0;function S(e,t){void 0===t&&(t={}),("string"==typeof t||Array.isArray(t))&&(t={path:t});var n=t,r=n.path,o=n.exact,a=void 0!==o&&o,i=n.strict,l=void 0!==i&&i,s=n.sensitive,c=void 0!==s&&s;return[].concat(r).reduce(function(t,n){if(!n&&""!==n)return null;if(t)return t;var r=function(e,t){var n=""+t.end+t.strict+t.sensitive,r=w[n]||(w[n]={});if(r[e])return r[e];var o=[],a={regexp:d()(e,o,t),keys:o};return x<k&&(r[e]=a,x++),a}(n,{end:a,strict:l,sensitive:c}),o=r.regexp,i=r.keys,s=o.exec(e);if(!s)return null;var u=s[0],p=s.slice(1),f=e===u;return a&&!f?null:{path:n,url:"/"===n&&""===u?"/":u,isExact:f,params:i.reduce(function(e,t,n){return e[t.name]=p[n],e},{})}},null)}var E=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.A)(t,e),t.prototype.render=function(){var e=this;return o.createElement(y.Consumer,null,function(t){t||(0,s.A)(!1);var n=e.props.location||t.location,r=e.props.computedMatch?e.props.computedMatch:e.props.path?S(n.pathname,e.props):t.match,a=(0,c.A)({},t,{location:n,match:r}),i=e.props,l=i.children,u=i.component,d=i.render;return Array.isArray(l)&&function(e){return 0===o.Children.count(e)}(l)&&(l=null),o.createElement(y.Provider,{value:a},a.match?l?"function"==typeof l?l(a):l:u?o.createElement(u,a):d?d(a):null:"function"==typeof l?l(a):null)})},t}(o.Component);function _(e){return"/"===e.charAt(0)?e:"/"+e}function C(e,t){if(!e)return t;var n=_(e);return 0!==t.pathname.indexOf(n)?t:(0,c.A)({},t,{pathname:t.pathname.substr(n.length)})}function A(e){return"string"==typeof e?e:(0,l.AO)(e)}function T(e){return function(){(0,s.A)(!1)}}function j(){}o.Component;var P=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.A)(t,e),t.prototype.render=function(){var e=this;return o.createElement(y.Consumer,null,function(t){t||(0,s.A)(!1);var n,r,a=e.props.location||t.location;return o.Children.forEach(e.props.children,function(e){if(null==r&&o.isValidElement(e)){n=e;var i=e.props.path||e.props.from;r=i?S(a.pathname,(0,c.A)({},e.props,{path:i})):t.match}}),r?o.cloneElement(n,{location:a,computedMatch:r}):null})},t}(o.Component);var N=o.useContext;function L(){return N(b)}function O(){return N(y).location}},6540:(e,t,n)=>{"use strict";e.exports=n(9869)},6654:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!r(e)}n.d(t,{A:()=>o,z:()=>r})},6803:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var r=n(6540),o=n(3102);function a(){const e=r.useContext(o.o);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}},6921:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function o(e){const t={};return function e(n,o){Object.entries(n).forEach(([n,a])=>{const i=o?`${o}.${n}`:n;r(a)?e(a,i):t[i]=a})}(e),t}},6925:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},6969:e=>{e.exports&&(e.exports={core:{meta:{path:"components/prism-core.js",option:"mandatory"},core:"Core"},themes:{meta:{path:"themes/{id}.css",link:"index.html?theme={id}",exclusive:!0},prism:{title:"Default",option:"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{title:"Okaidia",owner:"ocodia"},"prism-twilight":{title:"Twilight",owner:"remybach"},"prism-coy":{title:"Coy",owner:"tshedor"},"prism-solarizedlight":{title:"Solarized Light",owner:"hectormatos2011 "},"prism-tomorrow":{title:"Tomorrow Night",owner:"Rosey"}},languages:{meta:{path:"components/prism-{id}",noCSS:!0,examplesPath:"examples/prism-{id}",addCheckAll:!0},markup:{title:"Markup",alias:["html","xml","svg","mathml","ssml","atom","rss"],aliasTitles:{html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",atom:"Atom",rss:"RSS"},option:"default"},css:{title:"CSS",option:"default",modify:"markup"},clike:{title:"C-like",option:"default"},javascript:{title:"JavaScript",require:"clike",modify:"markup",optional:"regex",alias:"js",option:"default"},abap:{title:"ABAP",owner:"dellagustin"},abnf:{title:"ABNF",owner:"RunDevelopment"},actionscript:{title:"ActionScript",require:"javascript",modify:"markup",owner:"Golmote"},ada:{title:"Ada",owner:"Lucretia"},agda:{title:"Agda",owner:"xy-ren"},al:{title:"AL",owner:"RunDevelopment"},antlr4:{title:"ANTLR4",alias:"g4",owner:"RunDevelopment"},apacheconf:{title:"Apache Configuration",owner:"GuiTeK"},apex:{title:"Apex",require:["clike","sql"],owner:"RunDevelopment"},apl:{title:"APL",owner:"ngn"},applescript:{title:"AppleScript",owner:"Golmote"},aql:{title:"AQL",owner:"RunDevelopment"},arduino:{title:"Arduino",require:"cpp",alias:"ino",owner:"dkern"},arff:{title:"ARFF",owner:"Golmote"},armasm:{title:"ARM Assembly",alias:"arm-asm",owner:"RunDevelopment"},arturo:{title:"Arturo",alias:"art",optional:["bash","css","javascript","markup","markdown","sql"],owner:"drkameleon"},asciidoc:{alias:"adoc",title:"AsciiDoc",owner:"Golmote"},aspnet:{title:"ASP.NET (C#)",require:["markup","csharp"],owner:"nauzilus"},asm6502:{title:"6502 Assembly",owner:"kzurawel"},asmatmel:{title:"Atmel AVR Assembly",owner:"cerkit"},autohotkey:{title:"AutoHotkey",owner:"aviaryan"},autoit:{title:"AutoIt",owner:"Golmote"},avisynth:{title:"AviSynth",alias:"avs",owner:"Zinfidel"},"avro-idl":{title:"Avro IDL",alias:"avdl",owner:"RunDevelopment"},awk:{title:"AWK",alias:"gawk",aliasTitles:{gawk:"GAWK"},owner:"RunDevelopment"},bash:{title:"Bash",alias:["sh","shell"],aliasTitles:{sh:"Shell",shell:"Shell"},owner:"zeitgeist87"},basic:{title:"BASIC",owner:"Golmote"},batch:{title:"Batch",owner:"Golmote"},bbcode:{title:"BBcode",alias:"shortcode",aliasTitles:{shortcode:"Shortcode"},owner:"RunDevelopment"},bbj:{title:"BBj",owner:"hyyan"},bicep:{title:"Bicep",owner:"johnnyreilly"},birb:{title:"Birb",require:"clike",owner:"Calamity210"},bison:{title:"Bison",require:"c",owner:"Golmote"},bnf:{title:"BNF",alias:"rbnf",aliasTitles:{rbnf:"RBNF"},owner:"RunDevelopment"},bqn:{title:"BQN",owner:"yewscion"},brainfuck:{title:"Brainfuck",owner:"Golmote"},brightscript:{title:"BrightScript",owner:"RunDevelopment"},bro:{title:"Bro",owner:"wayward710"},bsl:{title:"BSL (1C:Enterprise)",alias:"oscript",aliasTitles:{oscript:"OneScript"},owner:"Diversus23"},c:{title:"C",require:"clike",owner:"zeitgeist87"},csharp:{title:"C#",require:"clike",alias:["cs","dotnet"],owner:"mvalipour"},cpp:{title:"C++",require:"c",owner:"zeitgeist87"},cfscript:{title:"CFScript",require:"clike",alias:"cfc",owner:"mjclemente"},chaiscript:{title:"ChaiScript",require:["clike","cpp"],owner:"RunDevelopment"},cil:{title:"CIL",owner:"sbrl"},cilkc:{title:"Cilk/C",require:"c",alias:"cilk-c",owner:"OpenCilk"},cilkcpp:{title:"Cilk/C++",require:"cpp",alias:["cilk-cpp","cilk"],owner:"OpenCilk"},clojure:{title:"Clojure",owner:"troglotit"},cmake:{title:"CMake",owner:"mjrogozinski"},cobol:{title:"COBOL",owner:"RunDevelopment"},coffeescript:{title:"CoffeeScript",require:"javascript",alias:"coffee",owner:"R-osey"},concurnas:{title:"Concurnas",alias:"conc",owner:"jasontatton"},csp:{title:"Content-Security-Policy",owner:"ScottHelme"},cooklang:{title:"Cooklang",owner:"ahue"},coq:{title:"Coq",owner:"RunDevelopment"},crystal:{title:"Crystal",require:"ruby",owner:"MakeNowJust"},"css-extras":{title:"CSS Extras",require:"css",modify:"css",owner:"milesj"},csv:{title:"CSV",owner:"RunDevelopment"},cue:{title:"CUE",owner:"RunDevelopment"},cypher:{title:"Cypher",owner:"RunDevelopment"},d:{title:"D",require:"clike",owner:"Golmote"},dart:{title:"Dart",require:"clike",owner:"Golmote"},dataweave:{title:"DataWeave",owner:"machaval"},dax:{title:"DAX",owner:"peterbud"},dhall:{title:"Dhall",owner:"RunDevelopment"},diff:{title:"Diff",owner:"uranusjr"},django:{title:"Django/Jinja2",require:"markup-templating",alias:"jinja2",owner:"romanvm"},"dns-zone-file":{title:"DNS zone file",owner:"RunDevelopment",alias:"dns-zone"},docker:{title:"Docker",alias:"dockerfile",owner:"JustinBeckwith"},dot:{title:"DOT (Graphviz)",alias:"gv",optional:"markup",owner:"RunDevelopment"},ebnf:{title:"EBNF",owner:"RunDevelopment"},editorconfig:{title:"EditorConfig",owner:"osipxd"},eiffel:{title:"Eiffel",owner:"Conaclos"},ejs:{title:"EJS",require:["javascript","markup-templating"],owner:"RunDevelopment",alias:"eta",aliasTitles:{eta:"Eta"}},elixir:{title:"Elixir",owner:"Golmote"},elm:{title:"Elm",owner:"zwilias"},etlua:{title:"Embedded Lua templating",require:["lua","markup-templating"],owner:"RunDevelopment"},erb:{title:"ERB",require:["ruby","markup-templating"],owner:"Golmote"},erlang:{title:"Erlang",owner:"Golmote"},"excel-formula":{title:"Excel Formula",alias:["xlsx","xls"],owner:"RunDevelopment"},fsharp:{title:"F#",require:"clike",owner:"simonreynolds7"},factor:{title:"Factor",owner:"catb0t"},false:{title:"False",owner:"edukisto"},"firestore-security-rules":{title:"Firestore security rules",require:"clike",owner:"RunDevelopment"},flow:{title:"Flow",require:"javascript",owner:"Golmote"},fortran:{title:"Fortran",owner:"Golmote"},ftl:{title:"FreeMarker Template Language",require:"markup-templating",owner:"RunDevelopment"},gml:{title:"GameMaker Language",alias:"gamemakerlanguage",require:"clike",owner:"LiarOnce"},gap:{title:"GAP (CAS)",owner:"RunDevelopment"},gcode:{title:"G-code",owner:"RunDevelopment"},gdscript:{title:"GDScript",owner:"RunDevelopment"},gedcom:{title:"GEDCOM",owner:"Golmote"},gettext:{title:"gettext",alias:"po",owner:"RunDevelopment"},gherkin:{title:"Gherkin",owner:"hason"},git:{title:"Git",owner:"lgiraudel"},glsl:{title:"GLSL",require:"c",owner:"Golmote"},gn:{title:"GN",alias:"gni",owner:"RunDevelopment"},"linker-script":{title:"GNU Linker Script",alias:"ld",owner:"RunDevelopment"},go:{title:"Go",require:"clike",owner:"arnehormann"},"go-module":{title:"Go module",alias:"go-mod",owner:"RunDevelopment"},gradle:{title:"Gradle",require:"clike",owner:"zeabdelkhalek-badido18"},graphql:{title:"GraphQL",optional:"markdown",owner:"Golmote"},groovy:{title:"Groovy",require:"clike",owner:"robfletcher"},haml:{title:"Haml",require:"ruby",optional:["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],owner:"Golmote"},handlebars:{title:"Handlebars",require:"markup-templating",alias:["hbs","mustache"],aliasTitles:{mustache:"Mustache"},owner:"Golmote"},haskell:{title:"Haskell",alias:"hs",owner:"bholst"},haxe:{title:"Haxe",require:"clike",optional:"regex",owner:"Golmote"},hcl:{title:"HCL",owner:"outsideris"},hlsl:{title:"HLSL",require:"c",owner:"RunDevelopment"},hoon:{title:"Hoon",owner:"matildepark"},http:{title:"HTTP",optional:["csp","css","hpkp","hsts","javascript","json","markup","uri"],owner:"danielgtaylor"},hpkp:{title:"HTTP Public-Key-Pins",owner:"ScottHelme"},hsts:{title:"HTTP Strict-Transport-Security",owner:"ScottHelme"},ichigojam:{title:"IchigoJam",owner:"BlueCocoa"},icon:{title:"Icon",owner:"Golmote"},"icu-message-format":{title:"ICU Message Format",owner:"RunDevelopment"},idris:{title:"Idris",alias:"idr",owner:"KeenS",require:"haskell"},ignore:{title:".ignore",owner:"osipxd",alias:["gitignore","hgignore","npmignore"],aliasTitles:{gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore"}},inform7:{title:"Inform 7",owner:"Golmote"},ini:{title:"Ini",owner:"aviaryan"},io:{title:"Io",owner:"AlesTsurko"},j:{title:"J",owner:"Golmote"},java:{title:"Java",require:"clike",owner:"sherblot"},javadoc:{title:"JavaDoc",require:["markup","java","javadoclike"],modify:"java",optional:"scala",owner:"RunDevelopment"},javadoclike:{title:"JavaDoc-like",modify:["java","javascript","php"],owner:"RunDevelopment"},javastacktrace:{title:"Java stack trace",owner:"RunDevelopment"},jexl:{title:"Jexl",owner:"czosel"},jolie:{title:"Jolie",require:"clike",owner:"thesave"},jq:{title:"JQ",owner:"RunDevelopment"},jsdoc:{title:"JSDoc",require:["javascript","javadoclike","typescript"],modify:"javascript",optional:["actionscript","coffeescript"],owner:"RunDevelopment"},"js-extras":{title:"JS Extras",require:"javascript",modify:"javascript",optional:["actionscript","coffeescript","flow","n4js","typescript"],owner:"RunDevelopment"},json:{title:"JSON",alias:"webmanifest",aliasTitles:{webmanifest:"Web App Manifest"},owner:"CupOfTea696"},json5:{title:"JSON5",require:"json",owner:"RunDevelopment"},jsonp:{title:"JSONP",require:"json",owner:"RunDevelopment"},jsstacktrace:{title:"JS stack trace",owner:"sbrl"},"js-templates":{title:"JS Templates",require:"javascript",modify:"javascript",optional:["css","css-extras","graphql","markdown","markup","sql"],owner:"RunDevelopment"},julia:{title:"Julia",owner:"cdagnino"},keepalived:{title:"Keepalived Configure",owner:"dev-itsheng"},keyman:{title:"Keyman",owner:"mcdurdin"},kotlin:{title:"Kotlin",alias:["kt","kts"],aliasTitles:{kts:"Kotlin Script"},require:"clike",owner:"Golmote"},kumir:{title:"KuMir (\u041a\u0443\u041c\u0438\u0440)",alias:"kum",owner:"edukisto"},kusto:{title:"Kusto",owner:"RunDevelopment"},latex:{title:"LaTeX",alias:["tex","context"],aliasTitles:{tex:"TeX",context:"ConTeXt"},owner:"japborst"},latte:{title:"Latte",require:["clike","markup-templating","php"],owner:"nette"},less:{title:"Less",require:"css",optional:"css-extras",owner:"Golmote"},lilypond:{title:"LilyPond",require:"scheme",alias:"ly",owner:"RunDevelopment"},liquid:{title:"Liquid",require:"markup-templating",owner:"cinhtau"},lisp:{title:"Lisp",alias:["emacs","elisp","emacs-lisp"],owner:"JuanCaicedo"},livescript:{title:"LiveScript",owner:"Golmote"},llvm:{title:"LLVM IR",owner:"porglezomp"},log:{title:"Log file",optional:"javastacktrace",owner:"RunDevelopment"},lolcode:{title:"LOLCODE",owner:"Golmote"},lua:{title:"Lua",owner:"Golmote"},magma:{title:"Magma (CAS)",owner:"RunDevelopment"},makefile:{title:"Makefile",owner:"Golmote"},markdown:{title:"Markdown",require:"markup",optional:"yaml",alias:"md",owner:"Golmote"},"markup-templating":{title:"Markup templating",require:"markup",owner:"Golmote"},mata:{title:"Mata",owner:"RunDevelopment"},matlab:{title:"MATLAB",owner:"Golmote"},maxscript:{title:"MAXScript",owner:"RunDevelopment"},mel:{title:"MEL",owner:"Golmote"},mermaid:{title:"Mermaid",owner:"RunDevelopment"},metafont:{title:"METAFONT",owner:"LaeriExNihilo"},mizar:{title:"Mizar",owner:"Golmote"},mongodb:{title:"MongoDB",owner:"airs0urce",require:"javascript"},monkey:{title:"Monkey",owner:"Golmote"},moonscript:{title:"MoonScript",alias:"moon",owner:"RunDevelopment"},n1ql:{title:"N1QL",owner:"TMWilds"},n4js:{title:"N4JS",require:"javascript",optional:"jsdoc",alias:"n4jsd",owner:"bsmith-n4"},"nand2tetris-hdl":{title:"Nand To Tetris HDL",owner:"stephanmax"},naniscript:{title:"Naninovel Script",owner:"Elringus",alias:"nani"},nasm:{title:"NASM",owner:"rbmj"},neon:{title:"NEON",owner:"nette"},nevod:{title:"Nevod",owner:"nezaboodka"},nginx:{title:"nginx",owner:"volado"},nim:{title:"Nim",owner:"Golmote"},nix:{title:"Nix",owner:"Golmote"},nsis:{title:"NSIS",owner:"idleberg"},objectivec:{title:"Objective-C",require:"c",alias:"objc",owner:"uranusjr"},ocaml:{title:"OCaml",owner:"Golmote"},odin:{title:"Odin",owner:"edukisto"},opencl:{title:"OpenCL",require:"c",modify:["c","cpp"],owner:"Milania1"},openqasm:{title:"OpenQasm",alias:"qasm",owner:"RunDevelopment"},oz:{title:"Oz",owner:"Golmote"},parigp:{title:"PARI/GP",owner:"Golmote"},parser:{title:"Parser",require:"markup",owner:"Golmote"},pascal:{title:"Pascal",alias:"objectpascal",aliasTitles:{objectpascal:"Object Pascal"},owner:"Golmote"},pascaligo:{title:"Pascaligo",owner:"DefinitelyNotAGoat"},psl:{title:"PATROL Scripting Language",owner:"bertysentry"},pcaxis:{title:"PC-Axis",alias:"px",owner:"RunDevelopment"},peoplecode:{title:"PeopleCode",alias:"pcode",owner:"RunDevelopment"},perl:{title:"Perl",owner:"Golmote"},php:{title:"PHP",require:"markup-templating",owner:"milesj"},phpdoc:{title:"PHPDoc",require:["php","javadoclike"],modify:"php",owner:"RunDevelopment"},"php-extras":{title:"PHP Extras",require:"php",modify:"php",owner:"milesj"},"plant-uml":{title:"PlantUML",alias:"plantuml",owner:"RunDevelopment"},plsql:{title:"PL/SQL",require:"sql",owner:"Golmote"},powerquery:{title:"PowerQuery",alias:["pq","mscript"],owner:"peterbud"},powershell:{title:"PowerShell",owner:"nauzilus"},processing:{title:"Processing",require:"clike",owner:"Golmote"},prolog:{title:"Prolog",owner:"Golmote"},promql:{title:"PromQL",owner:"arendjr"},properties:{title:".properties",owner:"Golmote"},protobuf:{title:"Protocol Buffers",require:"clike",owner:"just-boris"},pug:{title:"Pug",require:["markup","javascript"],optional:["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],owner:"Golmote"},puppet:{title:"Puppet",owner:"Golmote"},pure:{title:"Pure",optional:["c","cpp","fortran"],owner:"Golmote"},purebasic:{title:"PureBasic",require:"clike",alias:"pbfasm",owner:"HeX0R101"},purescript:{title:"PureScript",require:"haskell",alias:"purs",owner:"sriharshachilakapati"},python:{title:"Python",alias:"py",owner:"multipetros"},qsharp:{title:"Q#",require:"clike",alias:"qs",owner:"fedonman"},q:{title:"Q (kdb+ database)",owner:"Golmote"},qml:{title:"QML",require:"javascript",owner:"RunDevelopment"},qore:{title:"Qore",require:"clike",owner:"temnroegg"},r:{title:"R",owner:"Golmote"},racket:{title:"Racket",require:"scheme",alias:"rkt",owner:"RunDevelopment"},cshtml:{title:"Razor C#",alias:"razor",require:["markup","csharp"],optional:["css","css-extras","javascript","js-extras"],owner:"RunDevelopment"},jsx:{title:"React JSX",require:["markup","javascript"],optional:["jsdoc","js-extras","js-templates"],owner:"vkbansal"},tsx:{title:"React TSX",require:["jsx","typescript"]},reason:{title:"Reason",require:"clike",owner:"Golmote"},regex:{title:"Regex",owner:"RunDevelopment"},rego:{title:"Rego",owner:"JordanSh"},renpy:{title:"Ren'py",alias:"rpy",owner:"HyuchiaDiego"},rescript:{title:"ReScript",alias:"res",owner:"vmarcosp"},rest:{title:"reST (reStructuredText)",owner:"Golmote"},rip:{title:"Rip",owner:"ravinggenius"},roboconf:{title:"Roboconf",owner:"Golmote"},robotframework:{title:"Robot Framework",alias:"robot",owner:"RunDevelopment"},ruby:{title:"Ruby",require:"clike",alias:"rb",owner:"samflores"},rust:{title:"Rust",owner:"Golmote"},sas:{title:"SAS",optional:["groovy","lua","sql"],owner:"Golmote"},sass:{title:"Sass (Sass)",require:"css",optional:"css-extras",owner:"Golmote"},scss:{title:"Sass (SCSS)",require:"css",optional:"css-extras",owner:"MoOx"},scala:{title:"Scala",require:"java",owner:"jozic"},scheme:{title:"Scheme",owner:"bacchus123"},"shell-session":{title:"Shell session",require:"bash",alias:["sh-session","shellsession"],owner:"RunDevelopment"},smali:{title:"Smali",owner:"RunDevelopment"},smalltalk:{title:"Smalltalk",owner:"Golmote"},smarty:{title:"Smarty",require:"markup-templating",optional:"php",owner:"Golmote"},sml:{title:"SML",alias:"smlnj",aliasTitles:{smlnj:"SML/NJ"},owner:"RunDevelopment"},solidity:{title:"Solidity (Ethereum)",alias:"sol",require:"clike",owner:"glachaud"},"solution-file":{title:"Solution file",alias:"sln",owner:"RunDevelopment"},soy:{title:"Soy (Closure Template)",require:"markup-templating",owner:"Golmote"},sparql:{title:"SPARQL",require:"turtle",owner:"Triply-Dev",alias:"rq"},"splunk-spl":{title:"Splunk SPL",owner:"RunDevelopment"},sqf:{title:"SQF: Status Quo Function (Arma 3)",require:"clike",owner:"RunDevelopment"},sql:{title:"SQL",owner:"multipetros"},squirrel:{title:"Squirrel",require:"clike",owner:"RunDevelopment"},stan:{title:"Stan",owner:"RunDevelopment"},stata:{title:"Stata Ado",require:["mata","java","python"],owner:"RunDevelopment"},iecst:{title:"Structured Text (IEC 61131-3)",owner:"serhioromano"},stylus:{title:"Stylus",owner:"vkbansal"},supercollider:{title:"SuperCollider",alias:"sclang",owner:"RunDevelopment"},swift:{title:"Swift",owner:"chrischares"},systemd:{title:"Systemd configuration file",owner:"RunDevelopment"},"t4-templating":{title:"T4 templating",owner:"RunDevelopment"},"t4-cs":{title:"T4 Text Templates (C#)",require:["t4-templating","csharp"],alias:"t4",owner:"RunDevelopment"},"t4-vb":{title:"T4 Text Templates (VB)",require:["t4-templating","vbnet"],owner:"RunDevelopment"},tap:{title:"TAP",owner:"isaacs",require:"yaml"},tcl:{title:"Tcl",owner:"PeterChaplin"},tt2:{title:"Template Toolkit 2",require:["clike","markup-templating"],owner:"gflohr"},textile:{title:"Textile",require:"markup",optional:"css",owner:"Golmote"},toml:{title:"TOML",owner:"RunDevelopment"},tremor:{title:"Tremor",alias:["trickle","troy"],owner:"darach",aliasTitles:{trickle:"trickle",troy:"troy"}},turtle:{title:"Turtle",alias:"trig",aliasTitles:{trig:"TriG"},owner:"jakubklimek"},twig:{title:"Twig",require:"markup-templating",owner:"brandonkelly"},typescript:{title:"TypeScript",require:"javascript",optional:"js-templates",alias:"ts",owner:"vkbansal"},typoscript:{title:"TypoScript",alias:"tsconfig",aliasTitles:{tsconfig:"TSConfig"},owner:"dkern"},unrealscript:{title:"UnrealScript",alias:["uscript","uc"],owner:"RunDevelopment"},uorazor:{title:"UO Razor Script",owner:"jaseowns"},uri:{title:"URI",alias:"url",aliasTitles:{url:"URL"},owner:"RunDevelopment"},v:{title:"V",require:"clike",owner:"taggon"},vala:{title:"Vala",require:"clike",optional:"regex",owner:"TemplarVolk"},vbnet:{title:"VB.Net",require:"basic",owner:"Bigsby"},velocity:{title:"Velocity",require:"markup",owner:"Golmote"},verilog:{title:"Verilog",owner:"a-rey"},vhdl:{title:"VHDL",owner:"a-rey"},vim:{title:"vim",owner:"westonganger"},"visual-basic":{title:"Visual Basic",alias:["vb","vba"],aliasTitles:{vba:"VBA"},owner:"Golmote"},warpscript:{title:"WarpScript",owner:"RunDevelopment"},wasm:{title:"WebAssembly",owner:"Golmote"},"web-idl":{title:"Web IDL",alias:"webidl",owner:"RunDevelopment"},wgsl:{title:"WGSL",owner:"Dr4gonthree"},wiki:{title:"Wiki markup",require:"markup",owner:"Golmote"},wolfram:{title:"Wolfram language",alias:["mathematica","nb","wl"],aliasTitles:{mathematica:"Mathematica",nb:"Mathematica Notebook"},owner:"msollami"},wren:{title:"Wren",owner:"clsource"},xeora:{title:"Xeora",require:"markup",alias:"xeoracube",aliasTitles:{xeoracube:"XeoraCube"},owner:"freakmaxi"},"xml-doc":{title:"XML doc (.net)",require:"markup",modify:["csharp","fsharp","vbnet"],owner:"RunDevelopment"},xojo:{title:"Xojo (REALbasic)",owner:"Golmote"},xquery:{title:"XQuery",require:"markup",owner:"Golmote"},yaml:{title:"YAML",alias:"yml",owner:"hason"},yang:{title:"YANG",owner:"RunDevelopment"},zig:{title:"Zig",owner:"RunDevelopment"}},plugins:{meta:{path:"plugins/{id}/prism-{id}",link:"plugins/{id}/"},"line-highlight":{title:"Line Highlight",description:"Highlights specific lines and/or line ranges."},"line-numbers":{title:"Line Numbers",description:"Line number at the beginning of code lines.",owner:"kuba-kubula"},"show-invisibles":{title:"Show Invisibles",description:"Show hidden characters such as tabs and line breaks.",optional:["autolinker","data-uri-highlight"]},autolinker:{title:"Autolinker",description:"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},wpd:{title:"WebPlatform Docs",description:'Makes tokens link to <a href="https://webplatform.github.io/docs/">WebPlatform.org documentation</a>. The links open in a new tab.'},"custom-class":{title:"Custom Class",description:"This plugin allows you to prefix Prism's default classes (<code>.comment</code> can become <code>.namespace--comment</code>) or replace them with your defined ones (like <code>.editor__comment</code>). You can even add new classes.",owner:"dvkndn",noCSS:!0},"file-highlight":{title:"File Highlight",description:"Fetch external files and highlight them with Prism. Used on the Prism website itself.",noCSS:!0},"show-language":{title:"Show Language",description:"Display the highlighted language in code blocks (inline code does not show the label).",owner:"nauzilus",noCSS:!0,require:"toolbar"},"jsonp-highlight":{title:"JSONP Highlight",description:"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).",noCSS:!0,owner:"nauzilus"},"highlight-keywords":{title:"Highlight Keywords",description:"Adds special CSS classes for each keyword for fine-grained highlighting.",owner:"vkbansal",noCSS:!0},"remove-initial-line-feed":{title:"Remove initial line feed",description:"Removes the initial line feed in code blocks.",owner:"Golmote",noCSS:!0},"inline-color":{title:"Inline color",description:"Adds a small inline preview for colors in style sheets.",require:"css-extras",owner:"RunDevelopment"},previewers:{title:"Previewers",description:"Previewers for angles, colors, gradients, easing and time.",require:"css-extras",owner:"Golmote"},autoloader:{title:"Autoloader",description:"Automatically loads the needed languages to highlight the code blocks.",owner:"Golmote",noCSS:!0},"keep-markup":{title:"Keep Markup",description:"Prevents custom markup from being dropped out during highlighting.",owner:"Golmote",optional:"normalize-whitespace",noCSS:!0},"command-line":{title:"Command Line",description:"Display a command line with a prompt and, optionally, the output/response from the commands.",owner:"chriswells0"},"unescaped-markup":{title:"Unescaped Markup",description:"Write markup without having to escape anything."},"normalize-whitespace":{title:"Normalize Whitespace",description:"Supports multiple operations to normalize whitespace in code blocks.",owner:"zeitgeist87",optional:"unescaped-markup",noCSS:!0},"data-uri-highlight":{title:"Data-URI Highlight",description:"Highlights data-URI contents.",owner:"Golmote",noCSS:!0},toolbar:{title:"Toolbar",description:"Attach a toolbar for plugins to easily register buttons on the top of a code block.",owner:"mAAdhaTTah"},"copy-to-clipboard":{title:"Copy to Clipboard Button",description:"Add a button that copies the code block to the clipboard when clicked.",owner:"mAAdhaTTah",require:"toolbar",noCSS:!0},"download-button":{title:"Download Button",description:"A button in the toolbar of a code block adding a convenient way to download a code file.",owner:"Golmote",require:"toolbar",noCSS:!0},"match-braces":{title:"Match braces",description:"Highlights matching braces.",owner:"RunDevelopment"},"diff-highlight":{title:"Diff Highlight",description:"Highlights the code inside diff blocks.",owner:"RunDevelopment",require:"diff"},"filter-highlight-all":{title:"Filter highlightAll",description:"Filters the elements the <code>highlightAll</code> and <code>highlightAllUnder</code> methods actually highlight.",owner:"RunDevelopment",noCSS:!0},treeview:{title:"Treeview",description:"A language with special styles to highlight file system tree structures.",owner:"Golmote"}}})},6988:(e,t,n)=>{"use strict";n.d(t,{o:()=>d,l:()=>p});var r=n(6540),o=n(4784);const a=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/oracle-db-appdev-monitoring/docs","versions":[{"name":"current","label":"Next","isLast":false,"path":"/oracle-db-appdev-monitoring/docs/next","mainDocId":"intro","docs":[{"id":"advanced/development","path":"/oracle-db-appdev-monitoring/docs/next/advanced/development","sidebar":"tutorialSidebar"},{"id":"advanced/go-runtime","path":"/oracle-db-appdev-monitoring/docs/next/advanced/go-runtime","sidebar":"tutorialSidebar"},{"id":"advanced/txeventq","path":"/oracle-db-appdev-monitoring/docs/next/advanced/txeventq","sidebar":"tutorialSidebar"},{"id":"configuration/alert-logs","path":"/oracle-db-appdev-monitoring/docs/next/configuration/alert-logs","sidebar":"tutorialSidebar"},{"id":"configuration/azure-vault","path":"/oracle-db-appdev-monitoring/docs/next/configuration/azure-vault","sidebar":"tutorialSidebar"},{"id":"configuration/config-file","path":"/oracle-db-appdev-monitoring/docs/next/configuration/config-file","sidebar":"tutorialSidebar"},{"id":"configuration/custom-metrics","path":"/oracle-db-appdev-monitoring/docs/next/configuration/custom-metrics","sidebar":"tutorialSidebar"},{"id":"configuration/multiple-databases","path":"/oracle-db-appdev-monitoring/docs/next/configuration/multiple-databases","sidebar":"tutorialSidebar"},{"id":"configuration/oci-vault","path":"/oracle-db-appdev-monitoring/docs/next/configuration/oci-vault","sidebar":"tutorialSidebar"},{"id":"configuration/oracle-wallet","path":"/oracle-db-appdev-monitoring/docs/next/configuration/oracle-wallet","sidebar":"tutorialSidebar"},{"id":"getting-started/basics","path":"/oracle-db-appdev-monitoring/docs/next/getting-started/basics","sidebar":"tutorialSidebar"},{"id":"getting-started/default-metrics","path":"/oracle-db-appdev-monitoring/docs/next/getting-started/default-metrics","sidebar":"tutorialSidebar"},{"id":"getting-started/grafana-dashboards","path":"/oracle-db-appdev-monitoring/docs/next/getting-started/grafana-dashboards","sidebar":"tutorialSidebar"},{"id":"getting-started/kubernetes","path":"/oracle-db-appdev-monitoring/docs/next/getting-started/kubernetes","sidebar":"tutorialSidebar"},{"id":"intro","path":"/oracle-db-appdev-monitoring/docs/next/intro","sidebar":"tutorialSidebar"},{"id":"releases/changelog","path":"/oracle-db-appdev-monitoring/docs/next/releases/changelog","sidebar":"tutorialSidebar"},{"id":"releases/roadmap","path":"/oracle-db-appdev-monitoring/docs/next/releases/roadmap","sidebar":"tutorialSidebar"},{"id":"/category/getting-started","path":"/oracle-db-appdev-monitoring/docs/next/category/getting-started","sidebar":"tutorialSidebar"},{"id":"/category/configuration","path":"/oracle-db-appdev-monitoring/docs/next/category/configuration","sidebar":"tutorialSidebar"},{"id":"/category/advanced","path":"/oracle-db-appdev-monitoring/docs/next/category/advanced","sidebar":"tutorialSidebar"},{"id":"/category/releases","path":"/oracle-db-appdev-monitoring/docs/next/category/releases","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/oracle-db-appdev-monitoring/docs/next/intro","label":"intro"}}}},{"name":"2.0.3","label":"2.0.3","isLast":true,"path":"/oracle-db-appdev-monitoring/docs","mainDocId":"intro","docs":[{"id":"advanced/development","path":"/oracle-db-appdev-monitoring/docs/advanced/development","sidebar":"tutorialSidebar"},{"id":"advanced/go-runtime","path":"/oracle-db-appdev-monitoring/docs/advanced/go-runtime","sidebar":"tutorialSidebar"},{"id":"advanced/txeventq","path":"/oracle-db-appdev-monitoring/docs/advanced/txeventq","sidebar":"tutorialSidebar"},{"id":"configuration/alert-logs","path":"/oracle-db-appdev-monitoring/docs/configuration/alert-logs","sidebar":"tutorialSidebar"},{"id":"configuration/azure-vault","path":"/oracle-db-appdev-monitoring/docs/configuration/azure-vault","sidebar":"tutorialSidebar"},{"id":"configuration/config-file","path":"/oracle-db-appdev-monitoring/docs/configuration/config-file","sidebar":"tutorialSidebar"},{"id":"configuration/custom-metrics","path":"/oracle-db-appdev-monitoring/docs/configuration/custom-metrics","sidebar":"tutorialSidebar"},{"id":"configuration/multiple-databases","path":"/oracle-db-appdev-monitoring/docs/configuration/multiple-databases","sidebar":"tutorialSidebar"},{"id":"configuration/oci-vault","path":"/oracle-db-appdev-monitoring/docs/configuration/oci-vault","sidebar":"tutorialSidebar"},{"id":"configuration/oracle-wallet","path":"/oracle-db-appdev-monitoring/docs/configuration/oracle-wallet","sidebar":"tutorialSidebar"},{"id":"getting-started/basics","path":"/oracle-db-appdev-monitoring/docs/getting-started/basics","sidebar":"tutorialSidebar"},{"id":"getting-started/default-metrics","path":"/oracle-db-appdev-monitoring/docs/getting-started/default-metrics","sidebar":"tutorialSidebar"},{"id":"getting-started/grafana-dashboards","path":"/oracle-db-appdev-monitoring/docs/getting-started/grafana-dashboards","sidebar":"tutorialSidebar"},{"id":"getting-started/kubernetes","path":"/oracle-db-appdev-monitoring/docs/getting-started/kubernetes","sidebar":"tutorialSidebar"},{"id":"intro","path":"/oracle-db-appdev-monitoring/docs/intro","sidebar":"tutorialSidebar"},{"id":"releases/changelog","path":"/oracle-db-appdev-monitoring/docs/releases/changelog","sidebar":"tutorialSidebar"},{"id":"releases/roadmap","path":"/oracle-db-appdev-monitoring/docs/releases/roadmap","sidebar":"tutorialSidebar"},{"id":"/category/getting-started","path":"/oracle-db-appdev-monitoring/docs/category/getting-started","sidebar":"tutorialSidebar"},{"id":"/category/configuration","path":"/oracle-db-appdev-monitoring/docs/category/configuration","sidebar":"tutorialSidebar"},{"id":"/category/advanced","path":"/oracle-db-appdev-monitoring/docs/category/advanced","sidebar":"tutorialSidebar"},{"id":"/category/releases","path":"/oracle-db-appdev-monitoring/docs/category/releases","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/oracle-db-appdev-monitoring/docs/intro","label":"intro"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var l=n(2654);const s=JSON.parse('{"docusaurusVersion":"3.8.1","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-css-cascade-layers":{"type":"package","name":"@docusaurus/plugin-css-cascade-layers","version":"3.8.1"},"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.8.1"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"3.8.1"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.8.1"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.8.1"},"docusaurus-plugin-svgr":{"type":"package","name":"@docusaurus/plugin-svgr","version":"3.8.1"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.8.1"}}}');var c=n(4848);const u={siteConfig:o.default,siteMetadata:s,globalData:a,i18n:i,codeTranslations:l},d=r.createContext(u);function p({children:e}){return(0,c.jsx)(d.Provider,{value:u,children:e})}},7065:(e,t,n)=>{"use strict";n.d(t,{W:()=>r});const r="default"},7489:(e,t,n)=>{"use strict";n.d(t,{A:()=>g});var r=n(6540),o=n(8193),a=n(5260),i=n(440),l=n(1656),s=n(3102),c=n(4848);function u({error:e,tryAgain:t}){return(0,c.jsxs)("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"},children:[(0,c.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,c.jsx)("button",{type:"button",onClick:t,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,c.jsx)(d,{error:e})]})}function d({error:e}){const t=(0,i.rA)(e).map(e=>e.message).join("\n\nCause:\n");return(0,c.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:t})}function p({children:e}){return(0,c.jsx)(s.W,{value:{plugin:{name:"docusaurus-core-error-boundary",id:"default"}},children:e})}function f({error:e,tryAgain:t}){return(0,c.jsx)(p,{children:(0,c.jsxs)(g,{fallback:()=>(0,c.jsx)(u,{error:e,tryAgain:t}),children:[(0,c.jsx)(a.A,{children:(0,c.jsx)("title",{children:"Page Error"})}),(0,c.jsx)(l.A,{children:(0,c.jsx)(u,{error:e,tryAgain:t})})]})})}const m=e=>(0,c.jsx)(f,{...e});class g extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){o.A.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??m)(e)}return e??null}}},7559:(e,t,n)=>{"use strict";n.d(t,{G:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",blogAuthorsListPage:"blog-authors-list-page",blogAuthorsPostsPage:"blog-authors-posts-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",unlistedBanner:"theme-unlisted-banner",draftBanner:"theme-draft-banner",admonitionType:e=>`theme-admonition-${e}`},announcementBar:{container:"theme-announcement-bar"},layout:{navbar:{container:"theme-layout-navbar",containerLeft:"theme-layout-navbar-left",containerRight:"theme-layout-navbar-right",mobileSidebar:{container:"theme-layout-navbar-sidebar",panel:"theme-layout-navbar-sidebar-panel"}},main:{container:"theme-layout-main"},footer:{container:"theme-layout-footer",column:"theme-layout-footer-column"}},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{blogFooterTagsRow:"theme-blog-footer-tags-row",blogFooterEditMetaRow:"theme-blog-footer-edit-meta-row"},pages:{pageFooterEditMetaRow:"theme-pages-footer-edit-meta-row"}}},8168:(e,t,n)=>{"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(null,arguments)}n.d(t,{A:()=>r})},8193:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},8328:(e,t,n)=>{"use strict";n.d(t,{A:()=>p});n(6540);var r=n(3259),o=n.n(r),a=n(4054);const i={"01070055":[()=>n.e(7791).then(n.bind(n,9313)),"@site/versioned_docs/version-2.0.3/getting-started/default-metrics.md",9313],"0170a66b":[()=>n.e(154).then(n.bind(n,7417)),"@site/versioned_docs/version-2.0.3/releases/roadmap.md",7417],"0e384e19":[()=>n.e(3976).then(n.bind(n,2053)),"@site/docs/intro.md",2053],"14eb3368":[()=>Promise.all([n.e(1869),n.e(6969)]).then(n.bind(n,6098)),"@theme/DocCategoryGeneratedIndexPage",6098],17896441:[()=>Promise.all([n.e(1869),n.e(1668),n.e(8401)]).then(n.bind(n,8632)),"@theme/DocItem",8632],"1df93b7f":[()=>Promise.all([n.e(1869),n.e(4583)]).then(n.bind(n,5579)),"@site/src/pages/index.tsx",5579],"1e10f605":[()=>n.e(5071).then(n.bind(n,7848)),"@site/docs/configuration/custom-metrics.md",7848],"1f391b9e":[()=>Promise.all([n.e(1869),n.e(1668),n.e(6061)]).then(n.bind(n,7973)),"@theme/MDXPage",7973],"21b27731":[()=>n.e(3798).then(n.bind(n,3791)),"@site/docs/advanced/txeventq.md",3791],"2a1428c8":[()=>n.e(7504).then(n.t.bind(n,9132,19)),"@generated/docusaurus-plugin-content-docs/default/p/oracle-db-appdev-monitoring-docs-category-releases-c5e.json",9132],"2c91c66b":[()=>n.e(8747).then(n.bind(n,5747)),"@site/docs/getting-started/grafana-dashboards.md",5747],"2d404bd3":[()=>n.e(6596).then(n.t.bind(n,8278,19)),"@generated/docusaurus-plugin-content-docs/default/p/oracle-db-appdev-monitoring-docs-category-getting-started-5e7.json",8278],"36b77772":[()=>n.e(1604).then(n.bind(n,6651)),"@site/versioned_docs/version-2.0.3/configuration/alert-logs.md",6651],"3740dcc7":[()=>n.e(6948).then(n.t.bind(n,9844,19)),"@generated/docusaurus-plugin-content-docs/default/p/oracle-db-appdev-monitoring-docs-next-category-getting-started-526.json",9844],"384c9e20":[()=>n.e(405).then(n.bind(n,7655)),"@site/docs/releases/roadmap.md",7655],"393be207":[()=>n.e(4134).then(n.bind(n,591)),"@site/src/pages/markdown-page.md",591],"3c57bc2c":[()=>n.e(529).then(n.bind(n,2284)),"@site/versioned_docs/version-2.0.3/getting-started/basics.md",2284],"468714db":[()=>n.e(2207).then(n.bind(n,3990)),"@site/versioned_docs/version-2.0.3/configuration/oci-vault.md",3990],"488c0ad4":[()=>n.e(1969).then(n.bind(n,5833)),"@site/versioned_docs/version-2.0.3/intro.md",5833],"49d0ab44":[()=>n.e(8539).then(n.bind(n,8705)),"@site/docs/configuration/oracle-wallet.md",8705],"5240f2c1":[()=>n.e(5082).then(n.bind(n,1632)),"@site/docs/getting-started/kubernetes.md",1632],"5e8a6b04":[()=>n.e(8952).then(n.t.bind(n,5995,19)),"@generated/docusaurus-plugin-content-docs/default/p/oracle-db-appdev-monitoring-docs-next-category-configuration-e69.json",5995],"5e95c892":[()=>n.e(9647).then(n.bind(n,7121)),"@theme/DocsRoot",7121],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,4784)),"@generated/docusaurus.config",4784],"61f1b472":[()=>n.e(9666).then(n.bind(n,2709)),"@site/docs/configuration/alert-logs.md",2709],"6a577544":[()=>n.e(6424).then(n.bind(n,7248)),"@site/versioned_docs/version-2.0.3/advanced/development.md",7248],"6ad7f408":[()=>n.e(9249).then(n.bind(n,3416)),"@site/versioned_docs/version-2.0.3/releases/changelog.md",3416],"6e6103cc":[()=>n.e(9926).then(n.bind(n,67)),"@site/docs/getting-started/default-metrics.md",67],"6f6f2b68":[()=>n.e(6233).then(n.t.bind(n,5902,19)),"@generated/docusaurus-plugin-content-docs/default/p/oracle-db-appdev-monitoring-docs-10b.json",5902],"7569d55b":[()=>n.e(5524).then(n.bind(n,759)),"@site/versioned_docs/version-2.0.3/configuration/multiple-databases.md",759],"85a0f18d":[()=>n.e(8918).then(n.bind(n,5405)),"@site/docs/configuration/azure-vault.md",5405],"867ce809":[()=>n.e(4705).then(n.t.bind(n,8595,19)),"@generated/docusaurus-plugin-content-docs/default/p/oracle-db-appdev-monitoring-docs-category-configuration-d04.json",8595],"8be1f15d":[()=>n.e(4323).then(n.bind(n,3571)),"@site/versioned_docs/version-2.0.3/configuration/azure-vault.md",3571],"9419d97c":[()=>n.e(7213).then(n.bind(n,5760)),"@site/versioned_docs/version-2.0.3/advanced/go-runtime.md",5760],a7456010:[()=>n.e(1235).then(n.t.bind(n,8552,19)),"@generated/docusaurus-plugin-content-pages/default/__plugin.json",8552],a7901124:[()=>n.e(1152).then(n.bind(n,844)),"@site/versioned_docs/version-2.0.3/getting-started/kubernetes.md",844],a7bd4aaa:[()=>n.e(7098).then(n.bind(n,1723)),"@theme/DocVersionRoot",1723],a7f4dc0a:[()=>n.e(7359).then(n.bind(n,7092)),"@site/docs/advanced/go-runtime.md",7092],a94703ab:[()=>Promise.all([n.e(1869),n.e(9048)]).then(n.bind(n,1377)),"@theme/DocRoot",1377],a989571e:[()=>n.e(6898).then(n.t.bind(n,5892,19)),"@generated/docusaurus-plugin-content-docs/default/p/oracle-db-appdev-monitoring-docs-category-advanced-92b.json",5892],ab01181e:[()=>n.e(170).then(n.bind(n,3859)),"@site/versioned_docs/version-2.0.3/configuration/config-file.md",3859],aba21aa0:[()=>n.e(5742).then(n.t.bind(n,7093,19)),"@generated/docusaurus-plugin-content-docs/default/__plugin.json",7093],af966633:[()=>n.e(2173).then(n.bind(n,1035)),"@site/docs/getting-started/basics.md",1035],b8d4edc5:[()=>n.e(9434).then(n.bind(n,2736)),"@site/docs/advanced/development.md",2736],c4e87715:[()=>n.e(4353).then(n.t.bind(n,9199,19)),"@generated/docusaurus-plugin-content-docs/default/p/oracle-db-appdev-monitoring-docs-next-category-advanced-3b7.json",9199],c539bf3f:[()=>n.e(9100).then(n.bind(n,1432)),"@site/docs/releases/changelog.md",1432],cf0dfdd1:[()=>n.e(6235).then(n.t.bind(n,6330,19)),"@generated/docusaurus-plugin-content-docs/default/p/oracle-db-appdev-monitoring-docs-next-72d.json",6330],d72bb23b:[()=>n.e(1919).then(n.bind(n,7177)),"@site/docs/configuration/multiple-databases.md",7177],d94a41cc:[()=>n.e(4580).then(n.bind(n,6358)),"@site/docs/configuration/config-file.md",6358],dac61621:[()=>n.e(2199).then(n.bind(n,2336)),"@site/docs/configuration/oci-vault.md",2336],e0c86ee0:[()=>n.e(8089).then(n.bind(n,3128)),"@site/versioned_docs/version-2.0.3/advanced/txeventq.md",3128],f36aa3f3:[()=>n.e(5808).then(n.t.bind(n,943,19)),"@generated/docusaurus-plugin-content-docs/default/p/oracle-db-appdev-monitoring-docs-next-category-releases-8a1.json",943],f6de67f9:[()=>n.e(2900).then(n.bind(n,2127)),"@site/versioned_docs/version-2.0.3/configuration/oracle-wallet.md",2127],f7d2b7bf:[()=>n.e(5173).then(n.bind(n,9012)),"@site/versioned_docs/version-2.0.3/configuration/custom-metrics.md",9012],fcc612c9:[()=>n.e(1636).then(n.bind(n,381)),"@site/versioned_docs/version-2.0.3/getting-started/grafana-dashboards.md",381]};var l=n(4848);function s({error:e,retry:t,pastDelay:n}){return e?(0,l.jsxs)("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"},children:[(0,l.jsx)("p",{children:String(e)}),(0,l.jsx)("div",{children:(0,l.jsx)("button",{type:"button",onClick:t,children:"Retry"})})]}):n?(0,l.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,l.jsx)("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb",children:(0,l.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,l.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,l.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,l.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,l.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,l.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,l.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var c=n(6921),u=n(3102);function d(e,t){if("*"===e)return o()({loading:s,loader:()=>n.e(2237).then(n.bind(n,2237)),modules:["@theme/NotFound"],webpack:()=>[2237],render(e,t){const n=e.default;return(0,l.jsx)(u.W,{value:{plugin:{name:"native",id:"default"}},children:(0,l.jsx)(n,{...t})})}});const r=a[`${e}-${t}`],d={},p=[],f=[],m=(0,c.A)(r);return Object.entries(m).forEach(([e,t])=>{const n=i[t];n&&(d[e]=n[0],p.push(n[1]),f.push(n[2]))}),o().Map({loading:s,loader:d,modules:p,webpack:()=>f,render(t,n){const o=JSON.parse(JSON.stringify(r));Object.entries(t).forEach(([t,n])=>{const r=n.default;if(!r)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof r&&"function"!=typeof r||Object.keys(n).filter(e=>"default"!==e).forEach(e=>{r[e]=n[e]});let a=o;const i=t.split(".");i.slice(0,-1).forEach(e=>{a=a[e]}),a[i[i.length-1]]=r});const a=o.__comp;delete o.__comp;const i=o.__context;delete o.__context;const s=o.__props;return delete o.__props,(0,l.jsx)(u.W,{value:i,children:(0,l.jsx)(a,{...o,...s,...n})})}})}const p=[{path:"/oracle-db-appdev-monitoring/markdown-page",component:d("/oracle-db-appdev-monitoring/markdown-page","553"),exact:!0},{path:"/oracle-db-appdev-monitoring/docs",component:d("/oracle-db-appdev-monitoring/docs","714"),routes:[{path:"/oracle-db-appdev-monitoring/docs/next",component:d("/oracle-db-appdev-monitoring/docs/next","3bc"),routes:[{path:"/oracle-db-appdev-monitoring/docs/next",component:d("/oracle-db-appdev-monitoring/docs/next","aa7"),routes:[{path:"/oracle-db-appdev-monitoring/docs/next/advanced/development",component:d("/oracle-db-appdev-monitoring/docs/next/advanced/development","cdc"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/next/advanced/go-runtime",component:d("/oracle-db-appdev-monitoring/docs/next/advanced/go-runtime","0b2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/next/advanced/txeventq",component:d("/oracle-db-appdev-monitoring/docs/next/advanced/txeventq","c85"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/next/category/advanced",component:d("/oracle-db-appdev-monitoring/docs/next/category/advanced","159"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/next/category/configuration",component:d("/oracle-db-appdev-monitoring/docs/next/category/configuration","9ed"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/next/category/getting-started",component:d("/oracle-db-appdev-monitoring/docs/next/category/getting-started","1ec"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/next/category/releases",component:d("/oracle-db-appdev-monitoring/docs/next/category/releases","d99"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/next/configuration/alert-logs",component:d("/oracle-db-appdev-monitoring/docs/next/configuration/alert-logs","9a7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/next/configuration/azure-vault",component:d("/oracle-db-appdev-monitoring/docs/next/configuration/azure-vault","b0f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/next/configuration/config-file",component:d("/oracle-db-appdev-monitoring/docs/next/configuration/config-file","1e8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/next/configuration/custom-metrics",component:d("/oracle-db-appdev-monitoring/docs/next/configuration/custom-metrics","77d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/next/configuration/multiple-databases",component:d("/oracle-db-appdev-monitoring/docs/next/configuration/multiple-databases","3a7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/next/configuration/oci-vault",component:d("/oracle-db-appdev-monitoring/docs/next/configuration/oci-vault","e02"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/next/configuration/oracle-wallet",component:d("/oracle-db-appdev-monitoring/docs/next/configuration/oracle-wallet","eaf"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/next/getting-started/basics",component:d("/oracle-db-appdev-monitoring/docs/next/getting-started/basics","d1f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/next/getting-started/default-metrics",component:d("/oracle-db-appdev-monitoring/docs/next/getting-started/default-metrics","5ae"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/next/getting-started/grafana-dashboards",component:d("/oracle-db-appdev-monitoring/docs/next/getting-started/grafana-dashboards","fd1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/next/getting-started/kubernetes",component:d("/oracle-db-appdev-monitoring/docs/next/getting-started/kubernetes","b66"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/next/intro",component:d("/oracle-db-appdev-monitoring/docs/next/intro","f21"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/next/releases/changelog",component:d("/oracle-db-appdev-monitoring/docs/next/releases/changelog","d3d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/next/releases/roadmap",component:d("/oracle-db-appdev-monitoring/docs/next/releases/roadmap","69d"),exact:!0,sidebar:"tutorialSidebar"}]}]},{path:"/oracle-db-appdev-monitoring/docs",component:d("/oracle-db-appdev-monitoring/docs","bfb"),routes:[{path:"/oracle-db-appdev-monitoring/docs",component:d("/oracle-db-appdev-monitoring/docs","2a3"),routes:[{path:"/oracle-db-appdev-monitoring/docs/advanced/development",component:d("/oracle-db-appdev-monitoring/docs/advanced/development","b0d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/advanced/go-runtime",component:d("/oracle-db-appdev-monitoring/docs/advanced/go-runtime","41d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/advanced/txeventq",component:d("/oracle-db-appdev-monitoring/docs/advanced/txeventq","f6c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/category/advanced",component:d("/oracle-db-appdev-monitoring/docs/category/advanced","582"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/category/configuration",component:d("/oracle-db-appdev-monitoring/docs/category/configuration","b77"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/category/getting-started",component:d("/oracle-db-appdev-monitoring/docs/category/getting-started","0ec"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/category/releases",component:d("/oracle-db-appdev-monitoring/docs/category/releases","18e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/configuration/alert-logs",component:d("/oracle-db-appdev-monitoring/docs/configuration/alert-logs","d0e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/configuration/azure-vault",component:d("/oracle-db-appdev-monitoring/docs/configuration/azure-vault","b26"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/configuration/config-file",component:d("/oracle-db-appdev-monitoring/docs/configuration/config-file","ab4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/configuration/custom-metrics",component:d("/oracle-db-appdev-monitoring/docs/configuration/custom-metrics","7f5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/configuration/multiple-databases",component:d("/oracle-db-appdev-monitoring/docs/configuration/multiple-databases","da1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/configuration/oci-vault",component:d("/oracle-db-appdev-monitoring/docs/configuration/oci-vault","a6c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/configuration/oracle-wallet",component:d("/oracle-db-appdev-monitoring/docs/configuration/oracle-wallet","5f0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/getting-started/basics",component:d("/oracle-db-appdev-monitoring/docs/getting-started/basics","f7f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/getting-started/default-metrics",component:d("/oracle-db-appdev-monitoring/docs/getting-started/default-metrics","2d3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/getting-started/grafana-dashboards",component:d("/oracle-db-appdev-monitoring/docs/getting-started/grafana-dashboards","8b1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/getting-started/kubernetes",component:d("/oracle-db-appdev-monitoring/docs/getting-started/kubernetes","968"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/intro",component:d("/oracle-db-appdev-monitoring/docs/intro","174"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/releases/changelog",component:d("/oracle-db-appdev-monitoring/docs/releases/changelog","814"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/releases/roadmap",component:d("/oracle-db-appdev-monitoring/docs/releases/roadmap","e2c"),exact:!0,sidebar:"tutorialSidebar"}]}]}]},{path:"/oracle-db-appdev-monitoring/",component:d("/oracle-db-appdev-monitoring/","5e8"),exact:!0},{path:"*",component:d("*")}]},8380:e=>{"use strict";var t=function(){var e=function(){};function t(e,t){Array.isArray(e)?e.forEach(t):null!=e&&t(e,0)}function n(e){for(var t={},n=0,r=e.length;n<r;n++)t[e[n]]=!0;return t}function r(e){var n={},r=[];function o(r,a){if(!(r in n)){a.push(r);var i=a.indexOf(r);if(i<a.length-1)throw new Error("Circular dependency: "+a.slice(i).join(" -> "));var l={},s=e[r];if(s){function c(t){if(!(t in e))throw new Error(r+" depends on an unknown component "+t);if(!(t in l))for(var i in o(t,a),l[t]=!0,n[t])l[i]=!0}t(s.require,c),t(s.optional,c),t(s.modify,c)}n[r]=l,a.pop()}}return function(e){var t=n[e];return t||(o(e,r),t=n[e]),t}}function o(e){for(var t in e)return!0;return!1}return function(a,i,l){var s=function(e){var t={};for(var n in e){var r=e[n];for(var o in r)if("meta"!=o){var a=r[o];t[o]="string"==typeof a?{title:a}:a}}return t}(a),c=function(e){var n;return function(r){if(r in e)return r;if(!n)for(var o in n={},e){var a=e[o];t(a&&a.alias,function(t){if(t in n)throw new Error(t+" cannot be alias for both "+o+" and "+n[t]);if(t in e)throw new Error(t+" cannot be alias of "+o+" because it is a component.");n[t]=o})}return n[r]||r}}(s);i=i.map(c),l=(l||[]).map(c);var u=n(i),d=n(l);i.forEach(function e(n){var r=s[n];t(r&&r.require,function(t){t in d||(u[t]=!0,e(t))})});for(var p,f=r(s),m=u;o(m);){for(var g in p={},m){var h=s[g];t(h&&h.modify,function(e){e in d&&(p[e]=!0)})}for(var b in d)if(!(b in u))for(var y in f(b))if(y in u){p[b]=!0;break}for(var v in m=p)u[v]=!0}var w={getIds:function(){var e=[];return w.load(function(t){e.push(t)}),e},load:function(t,n){return function(t,n,r,o){var a=o?o.series:void 0,i=o?o.parallel:e,l={},s={};function c(e){if(e in l)return l[e];s[e]=!0;var o,u=[];for(var d in t(e))d in n&&u.push(d);if(0===u.length)o=r(e);else{var p=i(u.map(function(e){var t=c(e);return delete s[e],t}));a?o=a(p,function(){return r(e)}):r(e)}return l[e]=o}for(var u in n)c(u);var d=[];for(var p in s)d.push(l[p]);return i(d)}(f,u,t,n)}};return w}}();e.exports=t},8587:(e,t,n)=>{"use strict";function r(e,t){if(null==e)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}n.d(t,{A:()=>r})},8600:(e,t,n)=>{"use strict";var r=n(6540),o=n(5338),a=n(545),i=n(4625),l=n(4784),s=n(8193);const c=[n(3001),n(119),n(6134),n(6294),n(1043)];var u=n(8328),d=n(6347),p=n(2831),f=n(4848);function m({children:e}){return(0,f.jsx)(f.Fragment,{children:e})}var g=n(4563);const h=e=>e.defaultFormatter(e);function b({children:e}){return(0,f.jsx)(g.AL,{formatter:h,children:e})}function y({children:e}){return(0,f.jsx)(b,{children:e})}var v=n(5260),w=n(4586),k=n(6025),x=n(6342),S=n(5500),E=n(2131),_=n(4090);var C=n(440),A=n(1463);function T(){const{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:n}}=(0,w.A)(),r=(0,E.o)(),o=n[e].htmlLang,a=e=>e.replace("-","_");return(0,f.jsxs)(v.A,{children:[Object.entries(n).map(([e,{htmlLang:t}])=>(0,f.jsx)("link",{rel:"alternate",href:r.createUrl({locale:e,fullyQualified:!0}),hrefLang:t},e)),(0,f.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}),(0,f.jsx)("meta",{property:"og:locale",content:a(o)}),Object.values(n).filter(e=>o!==e.htmlLang).map(e=>(0,f.jsx)("meta",{property:"og:locale:alternate",content:a(e.htmlLang)},`meta-og-${e.htmlLang}`))]})}function j({permalink:e}){const{siteConfig:{url:t}}=(0,w.A)(),n=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,w.A)(),{pathname:r}=(0,d.zy)();return e+(0,C.Ks)((0,k.Ay)(r),{trailingSlash:n,baseUrl:t})}(),r=e?`${t}${e}`:n;return(0,f.jsxs)(v.A,{children:[(0,f.jsx)("meta",{property:"og:url",content:r}),(0,f.jsx)("link",{rel:"canonical",href:r})]})}function P(){const{i18n:{currentLocale:e}}=(0,w.A)(),{metadata:t,image:n}=(0,x.p)();return(0,f.jsxs)(f.Fragment,{children:[(0,f.jsxs)(v.A,{children:[(0,f.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,f.jsx)("body",{className:_.w})]}),n&&(0,f.jsx)(S.be,{image:n}),(0,f.jsx)(j,{}),(0,f.jsx)(T,{}),(0,f.jsx)(A.A,{tag:"default",locale:e}),(0,f.jsx)(v.A,{children:t.map((e,t)=>(0,f.jsx)("meta",{...e},t))})]})}const N=new Map;var L=n(6125),O=n(6988),R=n(205);function D(e,...t){const n=c.map(n=>{const r=n.default?.[e]??n[e];return r?.(...t)});return()=>n.forEach(e=>e?.())}const F=function({children:e,location:t,previousLocation:n}){return(0,R.A)(()=>{n!==t&&(!function({location:e,previousLocation:t}){if(!t)return;const n=e.pathname===t.pathname,r=e.hash===t.hash,o=e.search===t.search;if(n&&r&&!o)return;const{hash:a}=e;if(a){const e=decodeURIComponent(a.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:t,previousLocation:n}),D("onRouteDidUpdate",{previousLocation:n,location:t}))},[n,t]),e};function I(e){const t=Array.from(new Set([e,decodeURI(e)])).map(e=>(0,p.u)(u.A,e)).flat();return Promise.all(t.map(e=>e.route.component.preload?.()))}class M extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=s.A.canUseDOM?D("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=D("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),I(n.pathname).then(()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})}).catch(e=>{console.warn(e),window.location.reload()}),!1}render(){const{children:e,location:t}=this.props;return(0,f.jsx)(F,{previousLocation:this.previousLocation,location:t,children:(0,f.jsx)(d.qh,{location:t,render:()=>e})})}}const z=M,B="__docusaurus-base-url-issue-banner-suggestion-container";function $(e){return`\ndocument.addEventListener('DOMContentLoaded', function maybeInsertBanner() {\n var shouldInsert = typeof window['docusaurus'] === 'undefined';\n shouldInsert && insertBanner();\n});\n\nfunction insertBanner() {\n var bannerContainer = document.createElement('div');\n bannerContainer.id = '__docusaurus-base-url-issue-banner-container';\n var bannerHtml = ${JSON.stringify(function(e){return`\n<div id="__docusaurus-base-url-issue-banner" style="border: thick solid red; background-color: rgb(255, 230, 179); margin: 20px; padding: 20px; font-size: 20px;">\n <p style="font-weight: bold; font-size: 30px;">Your Docusaurus site did not load properly.</p>\n <p>A very common reason is a wrong site <a href="https://docusaurus.io/docs/docusaurus.config.js/#baseUrl" style="font-weight: bold;">baseUrl configuration</a>.</p>\n <p>Current configured baseUrl = <span style="font-weight: bold; color: red;">${e}</span> ${"/"===e?" (default value)":""}</p>\n <p>We suggest trying baseUrl = <span id="${B}" style="font-weight: bold; color: green;"></span></p>\n</div>\n`}(e)).replace(/</g,"\\<")};\n bannerContainer.innerHTML = bannerHtml;\n document.body.prepend(bannerContainer);\n var suggestionContainer = document.getElementById('${B}');\n var actualHomePagePath = window.location.pathname;\n var suggestedBaseUrl = actualHomePagePath.substr(-1) === '/'\n ? actualHomePagePath\n : actualHomePagePath + '/';\n suggestionContainer.innerHTML = suggestedBaseUrl;\n}\n`}function U(){const{siteConfig:{baseUrl:e}}=(0,w.A)();return(0,f.jsx)(f.Fragment,{children:!s.A.canUseDOM&&(0,f.jsx)(v.A,{children:(0,f.jsx)("script",{children:$(e)})})})}function q(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,w.A)(),{pathname:n}=(0,d.zy)();return t&&n===e?(0,f.jsx)(U,{}):null}function H(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:r,localeConfigs:o}}=(0,w.A)(),a=(0,k.Ay)(e),{htmlLang:i,direction:l}=o[r];return(0,f.jsxs)(v.A,{children:[(0,f.jsx)("html",{lang:i,dir:l}),(0,f.jsx)("title",{children:t}),(0,f.jsx)("meta",{property:"og:title",content:t}),(0,f.jsx)("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&(0,f.jsx)("meta",{name:"robots",content:"noindex, nofollow"}),e&&(0,f.jsx)("link",{rel:"icon",href:a})]})}var G=n(7489),V=n(2303);function W(){const e=(0,V.A)();return(0,f.jsx)(v.A,{children:(0,f.jsx)("html",{"data-has-hydrated":e})})}const Q=(0,p.v)(u.A);function K(){const e=function(e){if(N.has(e.pathname))return{...e,pathname:N.get(e.pathname)};if((0,p.u)(u.A,e.pathname).some(({route:e})=>!0===e.exact))return N.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return N.set(e.pathname,t),{...e,pathname:t}}((0,d.zy)());return(0,f.jsx)(z,{location:e,children:Q})}function Y(){return(0,f.jsx)(G.A,{children:(0,f.jsx)(O.l,{children:(0,f.jsxs)(L.x,{children:[(0,f.jsx)(m,{children:(0,f.jsxs)(y,{children:[(0,f.jsx)(H,{}),(0,f.jsx)(P,{}),(0,f.jsx)(q,{}),(0,f.jsx)(K,{})]})}),(0,f.jsx)(W,{})]})})})}var X=n(4054);const Z=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const o=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;o?.appendChild(r)})}:function(e){return new Promise((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)})};var J=n(6921);const ee=new Set,te=new Set,ne=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,re={prefetch:e=>{if(!(e=>!ne()&&!te.has(e)&&!ee.has(e))(e))return!1;ee.add(e);const t=(0,p.u)(u.A,e).flatMap(e=>{return t=e.route.path,Object.entries(X).filter(([e])=>e.replace(/-[^-]+$/,"")===t).flatMap(([,e])=>Object.values((0,J.A)(e)));var t});return Promise.all(t.map(e=>{const t=n.gca(e);return t&&!t.includes("undefined")?Z(t).catch(()=>{}):Promise.resolve()}))},preload:e=>!!(e=>!ne()&&!te.has(e))(e)&&(te.add(e),I(e))},oe=Object.freeze(re);function ae({children:e}){return"hash"===l.default.future.experimental_router?(0,f.jsx)(i.I9,{children:e}):(0,f.jsx)(i.Kd,{children:e})}const ie=Boolean(!0);if(s.A.canUseDOM){window.docusaurus=oe;const e=document.getElementById("__docusaurus"),t=(0,f.jsx)(a.vd,{children:(0,f.jsx)(ae,{children:(0,f.jsx)(Y,{})})}),n=(e,t)=>{console.error("Docusaurus React Root onRecoverableError:",e,t)},i=()=>{if(window.docusaurusRoot)window.docusaurusRoot.render(t);else if(ie)window.docusaurusRoot=o.hydrateRoot(e,t,{onRecoverableError:n});else{const r=o.createRoot(e,{onRecoverableError:n});r.render(t),window.docusaurusRoot=r}};I(window.location.pathname).then(()=>{(0,r.startTransition)(i)})}},8692:(e,t,n)=>{var r={"./":8722};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=8692},8722:(e,t,n)=>{const r=n(6969),o=n(8380),a=new Set;function i(e){void 0===e?e=Object.keys(r.languages).filter(e=>"meta"!=e):Array.isArray(e)||(e=[e]);const t=[...a,...Object.keys(Prism.languages)];o(r,e,t).load(e=>{if(!(e in r.languages))return void(i.silent||console.warn("Language does not exist: "+e));const t="./prism-"+e;delete n.c[n(3157).resolve(t)],delete Prism.languages[e],n(3157)(t),a.add(e)})}i.silent=!1,e.exports=i},8774:(e,t,n)=>{"use strict";n.d(t,{A:()=>f});var r=n(6540),o=n(4625),a=n(440),i=n(4586),l=n(6654),s=n(8193),c=n(3427),u=n(6025),d=n(4848);function p({isNavLink:e,to:t,href:n,activeClassName:p,isActive:f,"data-noBrokenLinkCheck":m,autoAddBaseUrl:g=!0,...h},b){const{siteConfig:y}=(0,i.A)(),{trailingSlash:v,baseUrl:w}=y,k=y.future.experimental_router,{withBaseUrl:x}=(0,u.hH)(),S=(0,c.A)(),E=(0,r.useRef)(null);(0,r.useImperativeHandle)(b,()=>E.current);const _=t||n;const C=(0,l.A)(_),A=_?.replace("pathname://","");let T=void 0!==A?(j=A,g&&(e=>e.startsWith("/"))(j)?x(j):j):void 0;var j;"hash"===k&&T?.startsWith("./")&&(T=T?.slice(1)),T&&C&&(T=(0,a.Ks)(T,{trailingSlash:v,baseUrl:w}));const P=(0,r.useRef)(!1),N=e?o.k2:o.N_,L=s.A.canUseIntersectionObserver,O=(0,r.useRef)(),R=()=>{P.current||null==T||(window.docusaurus.preload(T),P.current=!0)};(0,r.useEffect)(()=>(!L&&C&&s.A.canUseDOM&&null!=T&&window.docusaurus.prefetch(T),()=>{L&&O.current&&O.current.disconnect()}),[O,T,L,C]);const D=T?.startsWith("#")??!1,F=!h.target||"_self"===h.target,I=!T||!C||!F||D&&"hash"!==k;m||!D&&I||S.collectLink(T),h.id&&S.collectAnchor(h.id);const M={};return I?(0,d.jsx)("a",{ref:E,href:T,..._&&!C&&{target:"_blank",rel:"noopener noreferrer"},...h,...M}):(0,d.jsx)(N,{...h,onMouseEnter:R,onTouchStart:R,innerRef:e=>{E.current=e,L&&e&&C&&(O.current=new window.IntersectionObserver(t=>{t.forEach(t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(O.current.unobserve(e),O.current.disconnect(),null!=T&&window.docusaurus.prefetch(T))})}),O.current.observe(e))},to:T,...e&&{isActive:f,activeClassName:p},...M})}const f=r.forwardRef(p)},9169:(e,t,n)=>{"use strict";n.d(t,{Dt:()=>l,ys:()=>i});var r=n(6540),o=n(8328),a=n(4586);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function l(){const{baseUrl:e}=(0,a.A)().siteConfig;return(0,r.useMemo)(()=>function({baseUrl:e,routes:t}){function n(t){return t.path===e&&!0===t.exact}function r(t){return t.path===e&&!t.exact}return function e(t){if(0===t.length)return;return t.find(n)||e(t.filter(r).flatMap(e=>e.routes??[]))}(t)}({routes:o.A,baseUrl:e}),[e])}},9532:(e,t,n)=>{"use strict";n.d(t,{Be:()=>c,ZC:()=>l,_q:()=>i,dV:()=>s,fM:()=>u});var r=n(6540),o=n(205),a=n(4848);function i(e){const t=(0,r.useRef)(e);return(0,o.A)(()=>{t.current=e},[e]),(0,r.useCallback)((...e)=>t.current(...e),[])}function l(e){const t=(0,r.useRef)();return(0,o.A)(()=>{t.current=e}),t.current}class s extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?<name>\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function c(e){const t=Object.entries(e);return t.sort((e,t)=>e[0].localeCompare(t[0])),(0,r.useMemo)(()=>e,t.flat())}function u(e){return({children:t})=>(0,a.jsx)(a.Fragment,{children:e.reduceRight((e,t)=>(0,a.jsx)(t,{children:e}),t)})}},9698:(e,t)=>{"use strict";var n=Symbol.for("react.transitional.element"),r=Symbol.for("react.fragment");function o(e,t,r){var o=null;if(void 0!==r&&(o=""+r),void 0!==t.key&&(o=""+t.key),"key"in t)for(var a in r={},t)"key"!==a&&(r[a]=t[a]);else r=t;return t=r.ref,{$$typeof:n,type:e,key:o,ref:void 0!==t?t:null,props:r}}t.Fragment=r,t.jsx=o,t.jsxs=o},9700:()=>{!function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,o,a){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(o,function(e){if("function"==typeof a&&!a(e))return e;for(var o,l=i.length;-1!==n.code.indexOf(o=t(r,l));)++l;return i[l]=e,o}),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var o=0,a=Object.keys(n.tokenStack);!function i(l){for(var s=0;s<l.length&&!(o>=a.length);s++){var c=l[s];if("string"==typeof c||c.content&&"string"==typeof c.content){var u=a[o],d=n.tokenStack[u],p="string"==typeof c?c:c.content,f=t(r,u),m=p.indexOf(f);if(m>-1){++o;var g=p.substring(0,m),h=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=p.substring(m+f.length),y=[];g&&y.push.apply(y,i([g])),y.push(h),b&&y.push.apply(y,i([b])),"string"==typeof c?l.splice.apply(l,[s,1].concat(y)):c.content=y}}else c.content&&i(c.content)}return l}(n.tokens)}}}})}(Prism)},9869:(e,t)=>{"use strict";var n=Symbol.for("react.transitional.element"),r=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),i=Symbol.for("react.profiler"),l=Symbol.for("react.consumer"),s=Symbol.for("react.context"),c=Symbol.for("react.forward_ref"),u=Symbol.for("react.suspense"),d=Symbol.for("react.memo"),p=Symbol.for("react.lazy"),f=Symbol.iterator;var m={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g=Object.assign,h={};function b(e,t,n){this.props=e,this.context=t,this.refs=h,this.updater=n||m}function y(){}function v(e,t,n){this.props=e,this.context=t,this.refs=h,this.updater=n||m}b.prototype.isReactComponent={},b.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("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")},b.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},y.prototype=b.prototype;var w=v.prototype=new y;w.constructor=v,g(w,b.prototype),w.isPureReactComponent=!0;var k=Array.isArray,x={H:null,A:null,T:null,S:null,V:null},S=Object.prototype.hasOwnProperty;function E(e,t,r,o,a,i){return r=i.ref,{$$typeof:n,type:e,key:t,ref:void 0!==r?r:null,props:i}}function _(e){return"object"==typeof e&&null!==e&&e.$$typeof===n}var C=/\/+/g;function A(e,t){return"object"==typeof e&&null!==e&&null!=e.key?(n=""+e.key,r={"=":"=0",":":"=2"},"$"+n.replace(/[=:]/g,function(e){return r[e]})):t.toString(36);var n,r}function T(){}function j(e,t,o,a,i){var l=typeof e;"undefined"!==l&&"boolean"!==l||(e=null);var s,c,u=!1;if(null===e)u=!0;else switch(l){case"bigint":case"string":case"number":u=!0;break;case"object":switch(e.$$typeof){case n:case r:u=!0;break;case p:return j((u=e._init)(e._payload),t,o,a,i)}}if(u)return i=i(e),u=""===a?"."+A(e,0):a,k(i)?(o="",null!=u&&(o=u.replace(C,"$&/")+"/"),j(i,t,o,"",function(e){return e})):null!=i&&(_(i)&&(s=i,c=o+(null==i.key||e&&e.key===i.key?"":(""+i.key).replace(C,"$&/")+"/")+u,i=E(s.type,c,void 0,0,0,s.props)),t.push(i)),1;u=0;var d,m=""===a?".":a+":";if(k(e))for(var g=0;g<e.length;g++)u+=j(a=e[g],t,o,l=m+A(a,g),i);else if("function"==typeof(g=null===(d=e)||"object"!=typeof d?null:"function"==typeof(d=f&&d[f]||d["@@iterator"])?d:null))for(e=g.call(e),g=0;!(a=e.next()).done;)u+=j(a=a.value,t,o,l=m+A(a,g++),i);else if("object"===l){if("function"==typeof e.then)return j(function(e){switch(e.status){case"fulfilled":return e.value;case"rejected":throw e.reason;default:switch("string"==typeof e.status?e.then(T,T):(e.status="pending",e.then(function(t){"pending"===e.status&&(e.status="fulfilled",e.value=t)},function(t){"pending"===e.status&&(e.status="rejected",e.reason=t)})),e.status){case"fulfilled":return e.value;case"rejected":throw e.reason}}throw e}(e),t,o,a,i);throw t=String(e),Error("Objects are not valid as a React child (found: "+("[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.")}return u}function P(e,t,n){if(null==e)return e;var r=[],o=0;return j(e,r,"","",function(e){return t.call(n,e,o++)}),r}function N(e){if(-1===e._status){var t=e._result;(t=t()).then(function(t){0!==e._status&&-1!==e._status||(e._status=1,e._result=t)},function(t){0!==e._status&&-1!==e._status||(e._status=2,e._result=t)}),-1===e._status&&(e._status=0,e._result=t)}if(1===e._status)return e._result.default;throw e._result}var L="function"==typeof reportError?reportError:function(e){if("object"==typeof window&&"function"==typeof window.ErrorEvent){var t=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:"object"==typeof e&&null!==e&&"string"==typeof e.message?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if("object"==typeof process&&"function"==typeof process.emit)return void process.emit("uncaughtException",e);console.error(e)};function O(){}t.Children={map:P,forEach:function(e,t,n){P(e,function(){t.apply(this,arguments)},n)},count:function(e){var t=0;return P(e,function(){t++}),t},toArray:function(e){return P(e,function(e){return e})||[]},only:function(e){if(!_(e))throw Error("React.Children.only expected to receive a single React element child.");return e}},t.Component=b,t.Fragment=o,t.Profiler=i,t.PureComponent=v,t.StrictMode=a,t.Suspense=u,t.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=x,t.__COMPILER_RUNTIME={__proto__:null,c:function(e){return x.H.useMemoCache(e)}},t.cache=function(e){return function(){return e.apply(null,arguments)}},t.cloneElement=function(e,t,n){if(null==e)throw Error("The argument must be a React element, but you passed "+e+".");var r=g({},e.props),o=e.key;if(null!=t)for(a in void 0!==t.ref&&void 0,void 0!==t.key&&(o=""+t.key),t)!S.call(t,a)||"key"===a||"__self"===a||"__source"===a||"ref"===a&&void 0===t.ref||(r[a]=t[a]);var a=arguments.length-2;if(1===a)r.children=n;else if(1<a){for(var i=Array(a),l=0;l<a;l++)i[l]=arguments[l+2];r.children=i}return E(e.type,o,void 0,0,0,r)},t.createContext=function(e){return(e={$$typeof:s,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider=e,e.Consumer={$$typeof:l,_context:e},e},t.createElement=function(e,t,n){var r,o={},a=null;if(null!=t)for(r in void 0!==t.key&&(a=""+t.key),t)S.call(t,r)&&"key"!==r&&"__self"!==r&&"__source"!==r&&(o[r]=t[r]);var i=arguments.length-2;if(1===i)o.children=n;else if(1<i){for(var l=Array(i),s=0;s<i;s++)l[s]=arguments[s+2];o.children=l}if(e&&e.defaultProps)for(r in i=e.defaultProps)void 0===o[r]&&(o[r]=i[r]);return E(e,a,void 0,0,0,o)},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:c,render:e}},t.isValidElement=_,t.lazy=function(e){return{$$typeof:p,_payload:{_status:-1,_result:e},_init:N}},t.memo=function(e,t){return{$$typeof:d,type:e,compare:void 0===t?null:t}},t.startTransition=function(e){var t=x.T,n={};x.T=n;try{var r=e(),o=x.S;null!==o&&o(n,r),"object"==typeof r&&null!==r&&"function"==typeof r.then&&r.then(O,L)}catch(a){L(a)}finally{x.T=t}},t.unstable_useCacheRefresh=function(){return x.H.useCacheRefresh()},t.use=function(e){return x.H.use(e)},t.useActionState=function(e,t,n){return x.H.useActionState(e,t,n)},t.useCallback=function(e,t){return x.H.useCallback(e,t)},t.useContext=function(e){return x.H.useContext(e)},t.useDebugValue=function(){},t.useDeferredValue=function(e,t){return x.H.useDeferredValue(e,t)},t.useEffect=function(e,t,n){var r=x.H;if("function"==typeof n)throw Error("useEffect CRUD overload is not enabled in this build of React.");return r.useEffect(e,t)},t.useId=function(){return x.H.useId()},t.useImperativeHandle=function(e,t,n){return x.H.useImperativeHandle(e,t,n)},t.useInsertionEffect=function(e,t){return x.H.useInsertionEffect(e,t)},t.useLayoutEffect=function(e,t){return x.H.useLayoutEffect(e,t)},t.useMemo=function(e,t){return x.H.useMemo(e,t)},t.useOptimistic=function(e,t){return x.H.useOptimistic(e,t)},t.useReducer=function(e,t,n){return x.H.useReducer(e,t,n)},t.useRef=function(e){return x.H.useRef(e)},t.useState=function(e){return x.H.useState(e)},t.useSyncExternalStore=function(e,t,n){return x.H.useSyncExternalStore(e,t,n)},t.useTransition=function(){return x.H.useTransition()},t.version="19.1.1"},9876:(e,t,n)=>{"use strict";n.d(t,{e:()=>m,M:()=>g});var r=n(6540),o=n(5600),a=n(4581),i=n(6347),l=n(9532);function s(e){!function(e){const t=(0,i.W6)(),n=(0,l._q)(e);(0,r.useEffect)(()=>t.block((e,t)=>n(e,t)),[t,n])}((t,n)=>{if("POP"===n)return e(t,n)})}var c=n(6342),u=n(4848);const d=r.createContext(void 0);function p(){const e=function(){const e=(0,o.YL)(),{items:t}=(0,c.p)().navbar;return 0===t.length&&!e.component}(),t=(0,a.l)(),n=!e&&"mobile"===t,[i,l]=(0,r.useState)(!1),s=(0,r.useCallback)(()=>{l(e=>!e)},[]);return(0,r.useEffect)(()=>{"desktop"===t&&l(!1)},[t]),(0,r.useMemo)(()=>({disabled:e,shouldRender:n,toggle:s,shown:i}),[e,n,s,i])}function f({handler:e}){return s(e),null}function m({children:e}){const t=p();return(0,u.jsxs)(u.Fragment,{children:[t.shown&&(0,u.jsx)(f,{handler:()=>(t.toggle(),!1)}),(0,u.jsx)(d.Provider,{value:t,children:e})]})}function g(){const e=r.useContext(d);if(void 0===e)throw new l.dV("NavbarMobileSidebarProvider");return e}},9982:(e,t,n)=>{"use strict";e.exports=n(4477)}},e=>{e.O(0,[1869],()=>{return t=8600,e(e.s=t);var t});e.O()}]); \ No newline at end of file diff --git a/docs/assets/js/main.dfeca7cc.js.LICENSE.txt b/docs/assets/js/main.7870a9cd.js.LICENSE.txt similarity index 100% rename from docs/assets/js/main.dfeca7cc.js.LICENSE.txt rename to docs/assets/js/main.7870a9cd.js.LICENSE.txt diff --git a/docs/assets/js/main.dfeca7cc.js b/docs/assets/js/main.dfeca7cc.js deleted file mode 100644 index ac34419f..00000000 --- a/docs/assets/js/main.dfeca7cc.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see main.dfeca7cc.js.LICENSE.txt */ -(self.webpackChunksite=self.webpackChunksite||[]).push([[792],{115:e=>{var t="undefined"!=typeof Element,n="function"==typeof Map,r="function"==typeof Set,o="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function a(e,i){if(e===i)return!0;if(e&&i&&"object"==typeof e&&"object"==typeof i){if(e.constructor!==i.constructor)return!1;var l,s,c,u;if(Array.isArray(e)){if((l=e.length)!=i.length)return!1;for(s=l;0!==s--;)if(!a(e[s],i[s]))return!1;return!0}if(n&&e instanceof Map&&i instanceof Map){if(e.size!==i.size)return!1;for(u=e.entries();!(s=u.next()).done;)if(!i.has(s.value[0]))return!1;for(u=e.entries();!(s=u.next()).done;)if(!a(s.value[1],i.get(s.value[0])))return!1;return!0}if(r&&e instanceof Set&&i instanceof Set){if(e.size!==i.size)return!1;for(u=e.entries();!(s=u.next()).done;)if(!i.has(s.value[0]))return!1;return!0}if(o&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(i)){if((l=e.length)!=i.length)return!1;for(s=l;0!==s--;)if(e[s]!==i[s])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((l=(c=Object.keys(e)).length)!==Object.keys(i).length)return!1;for(s=l;0!==s--;)if(!Object.prototype.hasOwnProperty.call(i,c[s]))return!1;if(t&&e instanceof Element)return!1;for(s=l;0!==s--;)if(("_owner"!==c[s]&&"__v"!==c[s]&&"__o"!==c[s]||!e.$$typeof)&&!a(e[c[s]],i[c[s]]))return!1;return!0}return e!=e&&i!=i}e.exports=function(e,t){try{return a(e,t)}catch(n){if((n.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw n}}},119:(e,t,n)=>{"use strict";n.r(t)},205:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(6540);const o=n(8193).A.canUseDOM?r.useLayoutEffect:r.useEffect},253:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=function e(t){if(t.cause)return[t,...e(t.cause)];return[t]}},311:e=>{"use strict";e.exports=function(e,t,n,r,o,a,i,l){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,o,a,i,l],u=0;(s=new Error(t.replace(/%s/g,function(){return c[u++]}))).name="Invariant Violation"}throw s.framesToPop=1,s}}},418:(e,t,n)=>{"use strict";n.d(t,{A:()=>r});const r=()=>null},440:(e,t,n)=>{"use strict";t.rA=t.Ks=void 0;const r=n(1635);var o=n(2983);Object.defineProperty(t,"Ks",{enumerable:!0,get:function(){return r.__importDefault(o).default}});var a=n(2566);var i=n(253);Object.defineProperty(t,"rA",{enumerable:!0,get:function(){return i.getErrorCausalChain}})},545:(e,t,n)=>{"use strict";n.d(t,{mg:()=>J,vd:()=>G});var r=n(6540),o=n(5556),a=n.n(o),i=n(115),l=n.n(i),s=n(311),c=n.n(s),u=n(2833),d=n.n(u);function p(){return p=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},p.apply(this,arguments)}function f(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,m(e,t)}function m(e,t){return m=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},m(e,t)}function g(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t.indexOf(n=a[r])>=0||(o[n]=e[n]);return o}var h={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},y={rel:["amphtml","canonical","alternate"]},b={type:["application/ld+json"]},v={charset:"",name:["robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]},w=Object.keys(h).map(function(e){return h[e]}),k={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},S=Object.keys(k).reduce(function(e,t){return e[k[t]]=t,e},{}),x=function(e,t){for(var n=e.length-1;n>=0;n-=1){var r=e[n];if(Object.prototype.hasOwnProperty.call(r,t))return r[t]}return null},E=function(e){var t=x(e,h.TITLE),n=x(e,"titleTemplate");if(Array.isArray(t)&&(t=t.join("")),n&&t)return n.replace(/%s/g,function(){return t});var r=x(e,"defaultTitle");return t||r||void 0},_=function(e){return x(e,"onChangeClientState")||function(){}},C=function(e,t){return t.filter(function(t){return void 0!==t[e]}).map(function(t){return t[e]}).reduce(function(e,t){return p({},e,t)},{})},A=function(e,t){return t.filter(function(e){return void 0!==e[h.BASE]}).map(function(e){return e[h.BASE]}).reverse().reduce(function(t,n){if(!t.length)for(var r=Object.keys(n),o=0;o<r.length;o+=1){var a=r[o].toLowerCase();if(-1!==e.indexOf(a)&&n[a])return t.concat(n)}return t},[])},T=function(e,t,n){var r={};return n.filter(function(t){return!!Array.isArray(t[e])||(void 0!==t[e]&&console&&"function"==typeof console.warn&&console.warn("Helmet: "+e+' should be of type "Array". Instead found type "'+typeof t[e]+'"'),!1)}).map(function(t){return t[e]}).reverse().reduce(function(e,n){var o={};n.filter(function(e){for(var n,a=Object.keys(e),i=0;i<a.length;i+=1){var l=a[i],s=l.toLowerCase();-1===t.indexOf(s)||"rel"===n&&"canonical"===e[n].toLowerCase()||"rel"===s&&"stylesheet"===e[s].toLowerCase()||(n=s),-1===t.indexOf(l)||"innerHTML"!==l&&"cssText"!==l&&"itemprop"!==l||(n=l)}if(!n||!e[n])return!1;var c=e[n].toLowerCase();return r[n]||(r[n]={}),o[n]||(o[n]={}),!r[n][c]&&(o[n][c]=!0,!0)}).reverse().forEach(function(t){return e.push(t)});for(var a=Object.keys(o),i=0;i<a.length;i+=1){var l=a[i],s=p({},r[l],o[l]);r[l]=s}return e},[]).reverse()},j=function(e,t){if(Array.isArray(e)&&e.length)for(var n=0;n<e.length;n+=1)if(e[n][t])return!0;return!1},P=function(e){return Array.isArray(e)?e.join(""):e},N=function(e,t){return Array.isArray(e)?e.reduce(function(e,n){return function(e,t){for(var n=Object.keys(e),r=0;r<n.length;r+=1)if(t[n[r]]&&t[n[r]].includes(e[n[r]]))return!0;return!1}(n,t)?e.priority.push(n):e.default.push(n),e},{priority:[],default:[]}):{default:e}},L=function(e,t){var n;return p({},e,((n={})[t]=void 0,n))},O=[h.NOSCRIPT,h.SCRIPT,h.STYLE],R=function(e,t){return void 0===t&&(t=!0),!1===t?String(e):String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")},D=function(e){return Object.keys(e).reduce(function(t,n){var r=void 0!==e[n]?n+'="'+e[n]+'"':""+n;return t?t+" "+r:r},"")},F=function(e,t){return void 0===t&&(t={}),Object.keys(e).reduce(function(t,n){return t[k[n]||n]=e[n],t},t)},M=function(e,t){return t.map(function(t,n){var o,a=((o={key:n})["data-rh"]=!0,o);return Object.keys(t).forEach(function(e){var n=k[e]||e;"innerHTML"===n||"cssText"===n?a.dangerouslySetInnerHTML={__html:t.innerHTML||t.cssText}:a[n]=t[e]}),r.createElement(e,a)})},I=function(e,t,n){switch(e){case h.TITLE:return{toComponent:function(){return n=t.titleAttributes,(o={key:e=t.title})["data-rh"]=!0,a=F(n,o),[r.createElement(h.TITLE,a,e)];var e,n,o,a},toString:function(){return function(e,t,n,r){var o=D(n),a=P(t);return o?"<"+e+' data-rh="true" '+o+">"+R(a,r)+"</"+e+">":"<"+e+' data-rh="true">'+R(a,r)+"</"+e+">"}(e,t.title,t.titleAttributes,n)}};case"bodyAttributes":case"htmlAttributes":return{toComponent:function(){return F(t)},toString:function(){return D(t)}};default:return{toComponent:function(){return M(e,t)},toString:function(){return function(e,t,n){return t.reduce(function(t,r){var o=Object.keys(r).filter(function(e){return!("innerHTML"===e||"cssText"===e)}).reduce(function(e,t){var o=void 0===r[t]?t:t+'="'+R(r[t],n)+'"';return e?e+" "+o:o},""),a=r.innerHTML||r.cssText||"",i=-1===O.indexOf(e);return t+"<"+e+' data-rh="true" '+o+(i?"/>":">"+a+"</"+e+">")},"")}(e,t,n)}}}},z=function(e){var t=e.baseTag,n=e.bodyAttributes,r=e.encode,o=e.htmlAttributes,a=e.noscriptTags,i=e.styleTags,l=e.title,s=void 0===l?"":l,c=e.titleAttributes,u=e.linkTags,d=e.metaTags,p=e.scriptTags,f={toComponent:function(){},toString:function(){return""}};if(e.prioritizeSeoTags){var m=function(e){var t=e.linkTags,n=e.scriptTags,r=e.encode,o=N(e.metaTags,v),a=N(t,y),i=N(n,b);return{priorityMethods:{toComponent:function(){return[].concat(M(h.META,o.priority),M(h.LINK,a.priority),M(h.SCRIPT,i.priority))},toString:function(){return I(h.META,o.priority,r)+" "+I(h.LINK,a.priority,r)+" "+I(h.SCRIPT,i.priority,r)}},metaTags:o.default,linkTags:a.default,scriptTags:i.default}}(e);f=m.priorityMethods,u=m.linkTags,d=m.metaTags,p=m.scriptTags}return{priority:f,base:I(h.BASE,t,r),bodyAttributes:I("bodyAttributes",n,r),htmlAttributes:I("htmlAttributes",o,r),link:I(h.LINK,u,r),meta:I(h.META,d,r),noscript:I(h.NOSCRIPT,a,r),script:I(h.SCRIPT,p,r),style:I(h.STYLE,i,r),title:I(h.TITLE,{title:s,titleAttributes:c},r)}},B=[],$=function(e,t){var n=this;void 0===t&&(t="undefined"!=typeof document),this.instances=[],this.value={setHelmet:function(e){n.context.helmet=e},helmetInstances:{get:function(){return n.canUseDOM?B:n.instances},add:function(e){(n.canUseDOM?B:n.instances).push(e)},remove:function(e){var t=(n.canUseDOM?B:n.instances).indexOf(e);(n.canUseDOM?B:n.instances).splice(t,1)}}},this.context=e,this.canUseDOM=t,t||(e.helmet=z({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))},U=r.createContext({}),q=a().shape({setHelmet:a().func,helmetInstances:a().shape({get:a().func,add:a().func,remove:a().func})}),H="undefined"!=typeof document,G=function(e){function t(n){var r;return(r=e.call(this,n)||this).helmetData=new $(r.props.context,t.canUseDOM),r}return f(t,e),t.prototype.render=function(){return r.createElement(U.Provider,{value:this.helmetData.value},this.props.children)},t}(r.Component);G.canUseDOM=H,G.propTypes={context:a().shape({helmet:a().shape()}),children:a().node.isRequired},G.defaultProps={context:{}},G.displayName="HelmetProvider";var V=function(e,t){var n,r=document.head||document.querySelector(h.HEAD),o=r.querySelectorAll(e+"[data-rh]"),a=[].slice.call(o),i=[];return t&&t.length&&t.forEach(function(t){var r=document.createElement(e);for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&("innerHTML"===o?r.innerHTML=t.innerHTML:"cssText"===o?r.styleSheet?r.styleSheet.cssText=t.cssText:r.appendChild(document.createTextNode(t.cssText)):r.setAttribute(o,void 0===t[o]?"":t[o]));r.setAttribute("data-rh","true"),a.some(function(e,t){return n=t,r.isEqualNode(e)})?a.splice(n,1):i.push(r)}),a.forEach(function(e){return e.parentNode.removeChild(e)}),i.forEach(function(e){return r.appendChild(e)}),{oldTags:a,newTags:i}},W=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var r=n.getAttribute("data-rh"),o=r?r.split(","):[],a=[].concat(o),i=Object.keys(t),l=0;l<i.length;l+=1){var s=i[l],c=t[s]||"";n.getAttribute(s)!==c&&n.setAttribute(s,c),-1===o.indexOf(s)&&o.push(s);var u=a.indexOf(s);-1!==u&&a.splice(u,1)}for(var d=a.length-1;d>=0;d-=1)n.removeAttribute(a[d]);o.length===a.length?n.removeAttribute("data-rh"):n.getAttribute("data-rh")!==i.join(",")&&n.setAttribute("data-rh",i.join(","))}},Q=function(e,t){var n=e.baseTag,r=e.htmlAttributes,o=e.linkTags,a=e.metaTags,i=e.noscriptTags,l=e.onChangeClientState,s=e.scriptTags,c=e.styleTags,u=e.title,d=e.titleAttributes;W(h.BODY,e.bodyAttributes),W(h.HTML,r),function(e,t){void 0!==e&&document.title!==e&&(document.title=P(e)),W(h.TITLE,t)}(u,d);var p={baseTag:V(h.BASE,n),linkTags:V(h.LINK,o),metaTags:V(h.META,a),noscriptTags:V(h.NOSCRIPT,i),scriptTags:V(h.SCRIPT,s),styleTags:V(h.STYLE,c)},f={},m={};Object.keys(p).forEach(function(e){var t=p[e],n=t.newTags,r=t.oldTags;n.length&&(f[e]=n),r.length&&(m[e]=p[e].oldTags)}),t&&t(),l(e,f,m)},K=null,Y=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).rendered=!1,t}f(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!d()(e,this.props)},n.componentDidUpdate=function(){this.emitChange()},n.componentWillUnmount=function(){this.props.context.helmetInstances.remove(this),this.emitChange()},n.emitChange=function(){var e,t,n=this.props.context,r=n.setHelmet,o=null,a=(e=n.helmetInstances.get().map(function(e){var t=p({},e.props);return delete t.context,t}),{baseTag:A(["href"],e),bodyAttributes:C("bodyAttributes",e),defer:x(e,"defer"),encode:x(e,"encodeSpecialCharacters"),htmlAttributes:C("htmlAttributes",e),linkTags:T(h.LINK,["rel","href"],e),metaTags:T(h.META,["name","charset","http-equiv","property","itemprop"],e),noscriptTags:T(h.NOSCRIPT,["innerHTML"],e),onChangeClientState:_(e),scriptTags:T(h.SCRIPT,["src","innerHTML"],e),styleTags:T(h.STYLE,["cssText"],e),title:E(e),titleAttributes:C("titleAttributes",e),prioritizeSeoTags:j(e,"prioritizeSeoTags")});G.canUseDOM?(t=a,K&&cancelAnimationFrame(K),t.defer?K=requestAnimationFrame(function(){Q(t,function(){K=null})}):(Q(t),K=null)):z&&(o=z(a)),r(o)},n.init=function(){this.rendered||(this.rendered=!0,this.props.context.helmetInstances.add(this),this.emitChange())},n.render=function(){return this.init(),null},t}(r.Component);Y.propTypes={context:q.isRequired},Y.displayName="HelmetDispatcher";var X=["children"],Z=["children"],J=function(e){function t(){return e.apply(this,arguments)||this}f(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!l()(L(this.props,"helmetData"),L(e,"helmetData"))},n.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case h.SCRIPT:case h.NOSCRIPT:return{innerHTML:t};case h.STYLE:return{cssText:t};default:throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")}},n.flattenArrayTypeChildren=function(e){var t,n=e.child,r=e.arrayTypeChildren;return p({},r,((t={})[n.type]=[].concat(r[n.type]||[],[p({},e.newChildProps,this.mapNestedChildrenToProps(n,e.nestedChildren))]),t))},n.mapObjectTypeChildren=function(e){var t,n,r=e.child,o=e.newProps,a=e.newChildProps,i=e.nestedChildren;switch(r.type){case h.TITLE:return p({},o,((t={})[r.type]=i,t.titleAttributes=p({},a),t));case h.BODY:return p({},o,{bodyAttributes:p({},a)});case h.HTML:return p({},o,{htmlAttributes:p({},a)});default:return p({},o,((n={})[r.type]=p({},a),n))}},n.mapArrayTypeChildrenToProps=function(e,t){var n=p({},t);return Object.keys(e).forEach(function(t){var r;n=p({},n,((r={})[t]=e[t],r))}),n},n.warnOnInvalidChildren=function(e,t){return c()(w.some(function(t){return e.type===t}),"function"==typeof e.type?"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.":"Only elements types "+w.join(", ")+" are allowed. Helmet does not support rendering <"+e.type+"> elements. Refer to our API for more information."),c()(!t||"string"==typeof t||Array.isArray(t)&&!t.some(function(e){return"string"!=typeof e}),"Helmet expects a string as a child of <"+e.type+">. Did you forget to wrap your children in braces? ( <"+e.type+">{``}</"+e.type+"> ) Refer to our API for more information."),!0},n.mapChildrenToProps=function(e,t){var n=this,o={};return r.Children.forEach(e,function(e){if(e&&e.props){var r=e.props,a=r.children,i=g(r,X),l=Object.keys(i).reduce(function(e,t){return e[S[t]||t]=i[t],e},{}),s=e.type;switch("symbol"==typeof s?s=s.toString():n.warnOnInvalidChildren(e,a),s){case h.FRAGMENT:t=n.mapChildrenToProps(a,t);break;case h.LINK:case h.META:case h.NOSCRIPT:case h.SCRIPT:case h.STYLE:o=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:o,newChildProps:l,nestedChildren:a});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:l,nestedChildren:a})}}}),this.mapArrayTypeChildrenToProps(o,t)},n.render=function(){var e=this.props,t=e.children,n=g(e,Z),o=p({},n),a=n.helmetData;return t&&(o=this.mapChildrenToProps(t,o)),!a||a instanceof $||(a=new $(a.context,a.instances)),a?r.createElement(Y,p({},o,{context:a.value,helmetData:void 0})):r.createElement(U.Consumer,null,function(e){return r.createElement(Y,p({},o,{context:e}))})},t}(r.Component);J.propTypes={base:a().object,bodyAttributes:a().object,children:a().oneOfType([a().arrayOf(a().node),a().node]),defaultTitle:a().string,defer:a().bool,encodeSpecialCharacters:a().bool,htmlAttributes:a().object,link:a().arrayOf(a().object),meta:a().arrayOf(a().object),noscript:a().arrayOf(a().object),onChangeClientState:a().func,script:a().arrayOf(a().object),style:a().arrayOf(a().object),title:a().string,titleAttributes:a().object,titleTemplate:a().string,prioritizeSeoTags:a().bool,helmetData:a().object},J.defaultProps={defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1},J.displayName="Helmet"},609:(e,t,n)=>{"use strict";n.d(t,{V:()=>s,t:()=>c});var r=n(6540),o=n(9532),a=n(4848);const i=Symbol("EmptyContext"),l=r.createContext(i);function s({children:e,name:t,items:n}){const o=(0,r.useMemo)(()=>t&&n?{name:t,items:n}:null,[t,n]);return(0,a.jsx)(l.Provider,{value:o,children:e})}function c(){const e=(0,r.useContext)(l);if(e===i)throw new o.dV("DocsSidebarProvider");return e}},679:(e,t,n)=>{"use strict";n.d(t,{Wf:()=>c});n(6540);const r=JSON.parse('{"N":"localStorage","M":""}'),o=r.N;function a({key:e,oldValue:t,newValue:n,storage:r}){if(t===n)return;const o=document.createEvent("StorageEvent");o.initStorageEvent("storage",!1,!1,e,t,n,window.location.href,r),window.dispatchEvent(o)}function i(e=o){if("undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,l||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),l=!0),null}var t}let l=!1;const s={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function c(e,t){const n=`${e}${r.M}`;if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(n);const o=i(t?.persistence);return null===o?s:{get:()=>{try{return o.getItem(n)}catch(e){return console.error(`Docusaurus storage error, can't get key=${n}`,e),null}},set:e=>{try{const t=o.getItem(n);o.setItem(n,e),a({key:n,oldValue:t,newValue:e,storage:o})}catch(t){console.error(`Docusaurus storage error, can't set ${n}=${e}`,t)}},del:()=>{try{const e=o.getItem(n);o.removeItem(n),a({key:n,oldValue:e,newValue:null,storage:o})}catch(e){console.error(`Docusaurus storage error, can't delete key=${n}`,e)}},listen:e=>{try{const t=t=>{t.storageArea===o&&t.key===n&&e(t)};return window.addEventListener("storage",t),()=>window.removeEventListener("storage",t)}catch(t){return console.error(`Docusaurus storage error, can't listen for changes of key=${n}`,t),()=>{}}}}}},961:(e,t,n)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(6221)},1043:(e,t,n)=>{"use strict";n.r(t)},1107:(e,t,n)=>{"use strict";n.d(t,{A:()=>u});n(6540);var r=n(4164),o=n(1312),a=n(6342),i=n(8774),l=n(3427);const s={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};var c=n(4848);function u({as:e,id:t,...n}){const u=(0,l.A)(),{navbar:{hideOnScroll:d}}=(0,a.p)();if("h1"===e||!t)return(0,c.jsx)(e,{...n,id:void 0});u.collectAnchor(t);const p=(0,o.T)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof n.children?n.children:t});return(0,c.jsxs)(e,{...n,className:(0,r.A)("anchor",d?s.anchorWithHideOnScrollNavbar:s.anchorWithStickyNavbar,n.className),id:t,children:[n.children,(0,c.jsx)(i.A,{className:"hash-link",to:`#${t}`,"aria-label":p,title:p,children:"\u200b"})]})}},1122:(e,t,n)=>{"use strict";n.d(t,{A:()=>u});var r=n(6540),o=n(4164),a=n(2303),i=n(5293);const l={themedComponent:"themedComponent_mlkZ","themedComponent--light":"themedComponent--light_NVdE","themedComponent--dark":"themedComponent--dark_xIcU"};var s=n(4848);function c({className:e,children:t}){const n=(0,a.A)(),{colorMode:c}=(0,i.G)();return(0,s.jsx)(s.Fragment,{children:(n?"dark"===c?["dark"]:["light"]:["light","dark"]).map(n=>{const a=t({theme:n,className:(0,o.A)(e,l.themedComponent,l[`themedComponent--${n}`])});return(0,s.jsx)(r.Fragment,{children:a},n)})})}function u(e){const{sources:t,className:n,alt:r,...o}=e;return(0,s.jsx)(c,{className:n,children:({theme:e,className:n})=>(0,s.jsx)("img",{src:t[e],alt:r,className:n,...o})})}},1247:(e,t,n)=>{"use strict";var r=n(9982),o=n(6540),a=n(961);function i(e){var t="https://react.dev/errors/"+e;if(1<arguments.length){t+="?args[]="+encodeURIComponent(arguments[1]);for(var n=2;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n])}return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function l(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType)}function s(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{!!(4098&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function c(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function u(e){if(s(e)!==e)throw Error(i(188))}function d(e){var t=e.tag;if(5===t||26===t||27===t||6===t)return e;for(e=e.child;null!==e;){if(null!==(t=d(e)))return t;e=e.sibling}return null}var p=Object.assign,f=Symbol.for("react.element"),m=Symbol.for("react.transitional.element"),g=Symbol.for("react.portal"),h=Symbol.for("react.fragment"),y=Symbol.for("react.strict_mode"),b=Symbol.for("react.profiler"),v=Symbol.for("react.provider"),w=Symbol.for("react.consumer"),k=Symbol.for("react.context"),S=Symbol.for("react.forward_ref"),x=Symbol.for("react.suspense"),E=Symbol.for("react.suspense_list"),_=Symbol.for("react.memo"),C=Symbol.for("react.lazy");Symbol.for("react.scope");var A=Symbol.for("react.activity");Symbol.for("react.legacy_hidden"),Symbol.for("react.tracing_marker");var T=Symbol.for("react.memo_cache_sentinel");Symbol.for("react.view_transition");var j=Symbol.iterator;function P(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=j&&e[j]||e["@@iterator"])?e:null}var N=Symbol.for("react.client.reference");function L(e){if(null==e)return null;if("function"==typeof e)return e.$$typeof===N?null:e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case h:return"Fragment";case b:return"Profiler";case y:return"StrictMode";case x:return"Suspense";case E:return"SuspenseList";case A:return"Activity"}if("object"==typeof e)switch(e.$$typeof){case g:return"Portal";case k:return(e.displayName||"Context")+".Provider";case w:return(e._context.displayName||"Context")+".Consumer";case S:var t=e.render;return(e=e.displayName)||(e=""!==(e=t.displayName||t.name||"")?"ForwardRef("+e+")":"ForwardRef"),e;case _:return null!==(t=e.displayName||null)?t:L(e.type)||"Memo";case C:t=e._payload,e=e._init;try{return L(e(t))}catch(n){}}return null}var O=Array.isArray,R=o.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,D=a.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,F={pending:!1,data:null,method:null,action:null},M=[],I=-1;function z(e){return{current:e}}function B(e){0>I||(e.current=M[I],M[I]=null,I--)}function $(e,t){I++,M[I]=e.current,e.current=t}var U=z(null),q=z(null),H=z(null),G=z(null);function V(e,t){switch($(H,t),$(q,e),$(U,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?od(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)e=ad(t=od(t),e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}B(U),$(U,e)}function W(){B(U),B(q),B(H)}function Q(e){null!==e.memoizedState&&$(G,e);var t=U.current,n=ad(t,e.type);t!==n&&($(q,e),$(U,n))}function K(e){q.current===e&&(B(U),B(q)),G.current===e&&(B(G),Qd._currentValue=F)}var Y=Object.prototype.hasOwnProperty,X=r.unstable_scheduleCallback,Z=r.unstable_cancelCallback,J=r.unstable_shouldYield,ee=r.unstable_requestPaint,te=r.unstable_now,ne=r.unstable_getCurrentPriorityLevel,re=r.unstable_ImmediatePriority,oe=r.unstable_UserBlockingPriority,ae=r.unstable_NormalPriority,ie=r.unstable_LowPriority,le=r.unstable_IdlePriority,se=r.log,ce=r.unstable_setDisableYieldValue,ue=null,de=null;function pe(e){if("function"==typeof se&&ce(e),de&&"function"==typeof de.setStrictMode)try{de.setStrictMode(ue,e)}catch(t){}}var fe=Math.clz32?Math.clz32:function(e){return 0===(e>>>=0)?32:31-(me(e)/ge|0)|0},me=Math.log,ge=Math.LN2;var he=256,ye=4194304;function be(e){var t=42&e;if(0!==t)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return 4194048&e;case 4194304:case 8388608:case 16777216:case 33554432:return 62914560&e;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function ve(e,t,n){var r=e.pendingLanes;if(0===r)return 0;var o=0,a=e.suspendedLanes,i=e.pingedLanes;e=e.warmLanes;var l=134217727&r;return 0!==l?0!==(r=l&~a)?o=be(r):0!==(i&=l)?o=be(i):n||0!==(n=l&~e)&&(o=be(n)):0!==(l=r&~a)?o=be(l):0!==i?o=be(i):n||0!==(n=r&~e)&&(o=be(n)),0===o?0:0!==t&&t!==o&&0===(t&a)&&((a=o&-o)>=(n=t&-t)||32===a&&4194048&n)?t:o}function we(e,t){return 0===(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)}function ke(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;default:return-1}}function Se(){var e=he;return!(4194048&(he<<=1))&&(he=256),e}function xe(){var e=ye;return!(62914560&(ye<<=1))&&(ye=4194304),e}function Ee(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function _e(e,t){e.pendingLanes|=t,268435456!==t&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function Ce(e,t,n){e.pendingLanes|=t,e.suspendedLanes&=~t;var r=31-fe(t);e.entangledLanes|=t,e.entanglements[r]=1073741824|e.entanglements[r]|4194090&n}function Ae(e,t){var n=e.entangledLanes|=t;for(e=e.entanglements;n;){var r=31-fe(n),o=1<<r;o&t|e[r]&t&&(e[r]|=t),n&=~o}}function Te(e){switch(e){case 2:e=1;break;case 8:e=4;break;case 32:e=16;break;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:e=128;break;case 268435456:e=134217728;break;default:e=0}return e}function je(e){return 2<(e&=-e)?8<e?134217727&e?32:268435456:8:2}function Pe(){var e=D.p;return 0!==e?e:void 0===(e=window.event)?32:cp(e.type)}var Ne=Math.random().toString(36).slice(2),Le="__reactFiber$"+Ne,Oe="__reactProps$"+Ne,Re="__reactContainer$"+Ne,De="__reactEvents$"+Ne,Fe="__reactListeners$"+Ne,Me="__reactHandles$"+Ne,Ie="__reactResources$"+Ne,ze="__reactMarker$"+Ne;function Be(e){delete e[Le],delete e[Oe],delete e[De],delete e[Fe],delete e[Me]}function $e(e){var t=e[Le];if(t)return t;for(var n=e.parentNode;n;){if(t=n[Re]||n[Le]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=vd(e);null!==e;){if(n=e[Le])return n;e=vd(e)}return t}n=(e=n).parentNode}return null}function Ue(e){if(e=e[Le]||e[Re]){var t=e.tag;if(5===t||6===t||13===t||26===t||27===t||3===t)return e}return null}function qe(e){var t=e.tag;if(5===t||26===t||27===t||6===t)return e.stateNode;throw Error(i(33))}function He(e){var t=e[Ie];return t||(t=e[Ie]={hoistableStyles:new Map,hoistableScripts:new Map}),t}function Ge(e){e[ze]=!0}var Ve=new Set,We={};function Qe(e,t){Ke(e,t),Ke(e+"Capture",t)}function Ke(e,t){for(We[e]=t,e=0;e<t.length;e++)Ve.add(t[e])}var Ye,Xe,Ze=RegExp("^[: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][: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]*$"),Je={},et={};function tt(e,t,n){if(o=t,Y.call(et,o)||!Y.call(Je,o)&&(Ze.test(o)?et[o]=!0:(Je[o]=!0,0)))if(null===n)e.removeAttribute(t);else{switch(typeof n){case"undefined":case"function":case"symbol":return void e.removeAttribute(t);case"boolean":var r=t.toLowerCase().slice(0,5);if("data-"!==r&&"aria-"!==r)return void e.removeAttribute(t)}e.setAttribute(t,""+n)}var o}function nt(e,t,n){if(null===n)e.removeAttribute(t);else{switch(typeof n){case"undefined":case"function":case"symbol":case"boolean":return void e.removeAttribute(t)}e.setAttribute(t,""+n)}}function rt(e,t,n,r){if(null===r)e.removeAttribute(n);else{switch(typeof r){case"undefined":case"function":case"symbol":case"boolean":return void e.removeAttribute(n)}e.setAttributeNS(t,n,""+r)}}function ot(e){if(void 0===Ye)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);Ye=t&&t[1]||"",Xe=-1<n.stack.indexOf("\n at")?" (<anonymous>)":-1<n.stack.indexOf("@")?"@unknown:0:0":""}return"\n"+Ye+e+Xe}var at=!1;function it(e,t){if(!e||at)return"";at=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{var r={DetermineComponentFrameRoot:function(){try{if(t){var n=function(){throw Error()};if(Object.defineProperty(n.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(n,[])}catch(o){var r=o}Reflect.construct(e,[],n)}else{try{n.call()}catch(a){r=a}e.call(n.prototype)}}else{try{throw Error()}catch(i){r=i}(n=e())&&"function"==typeof n.catch&&n.catch(function(){})}}catch(l){if(l&&r&&"string"==typeof l.stack)return[l.stack,r.stack]}return[null,null]}};r.DetermineComponentFrameRoot.displayName="DetermineComponentFrameRoot";var o=Object.getOwnPropertyDescriptor(r.DetermineComponentFrameRoot,"name");o&&o.configurable&&Object.defineProperty(r.DetermineComponentFrameRoot,"name",{value:"DetermineComponentFrameRoot"});var a=r.DetermineComponentFrameRoot(),i=a[0],l=a[1];if(i&&l){var s=i.split("\n"),c=l.split("\n");for(o=r=0;r<s.length&&!s[r].includes("DetermineComponentFrameRoot");)r++;for(;o<c.length&&!c[o].includes("DetermineComponentFrameRoot");)o++;if(r===s.length||o===c.length)for(r=s.length-1,o=c.length-1;1<=r&&0<=o&&s[r]!==c[o];)o--;for(;1<=r&&0<=o;r--,o--)if(s[r]!==c[o]){if(1!==r||1!==o)do{if(r--,0>--o||s[r]!==c[o]){var u="\n"+s[r].replace(" at new "," at ");return e.displayName&&u.includes("<anonymous>")&&(u=u.replace("<anonymous>",e.displayName)),u}}while(1<=r&&0<=o);break}}}finally{at=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:"")?ot(n):""}function lt(e){switch(e.tag){case 26:case 27:case 5:return ot(e.type);case 16:return ot("Lazy");case 13:return ot("Suspense");case 19:return ot("SuspenseList");case 0:case 15:return it(e.type,!1);case 11:return it(e.type.render,!1);case 1:return it(e.type,!0);case 31:return ot("Activity");default:return""}}function st(e){try{var t="";do{t+=lt(e),e=e.return}while(e);return t}catch(n){return"\nError generating stack: "+n.message+"\n"+n.stack}}function ct(e){switch(typeof e){case"bigint":case"boolean":case"number":case"string":case"undefined":case"object":return e;default:return""}}function ut(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function dt(e){e._valueTracker||(e._valueTracker=function(e){var t=ut(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var o=n.get,a=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){r=""+e,a.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function pt(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=ut(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function ft(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}var mt=/[\n"\\]/g;function gt(e){return e.replace(mt,function(e){return"\\"+e.charCodeAt(0).toString(16)+" "})}function ht(e,t,n,r,o,a,i,l){e.name="",null!=i&&"function"!=typeof i&&"symbol"!=typeof i&&"boolean"!=typeof i?e.type=i:e.removeAttribute("type"),null!=t?"number"===i?(0===t&&""===e.value||e.value!=t)&&(e.value=""+ct(t)):e.value!==""+ct(t)&&(e.value=""+ct(t)):"submit"!==i&&"reset"!==i||e.removeAttribute("value"),null!=t?bt(e,i,ct(t)):null!=n?bt(e,i,ct(n)):null!=r&&e.removeAttribute("value"),null==o&&null!=a&&(e.defaultChecked=!!a),null!=o&&(e.checked=o&&"function"!=typeof o&&"symbol"!=typeof o),null!=l&&"function"!=typeof l&&"symbol"!=typeof l&&"boolean"!=typeof l?e.name=""+ct(l):e.removeAttribute("name")}function yt(e,t,n,r,o,a,i,l){if(null!=a&&"function"!=typeof a&&"symbol"!=typeof a&&"boolean"!=typeof a&&(e.type=a),null!=t||null!=n){if(("submit"===a||"reset"===a)&&null==t)return;n=null!=n?""+ct(n):"",t=null!=t?""+ct(t):n,l||t===e.value||(e.value=t),e.defaultValue=t}r="function"!=typeof(r=null!=r?r:o)&&"symbol"!=typeof r&&!!r,e.checked=l?e.checked:!!r,e.defaultChecked=!!r,null!=i&&"function"!=typeof i&&"symbol"!=typeof i&&"boolean"!=typeof i&&(e.name=i)}function bt(e,t,n){"number"===t&&ft(e.ownerDocument)===e||e.defaultValue===""+n||(e.defaultValue=""+n)}function vt(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o<n.length;o++)t["$"+n[o]]=!0;for(n=0;n<e.length;n++)o=t.hasOwnProperty("$"+e[n].value),e[n].selected!==o&&(e[n].selected=o),o&&r&&(e[n].defaultSelected=!0)}else{for(n=""+ct(n),t=null,o=0;o<e.length;o++){if(e[o].value===n)return e[o].selected=!0,void(r&&(e[o].defaultSelected=!0));null!==t||e[o].disabled||(t=e[o])}null!==t&&(t.selected=!0)}}function wt(e,t,n){null==t||((t=""+ct(t))!==e.value&&(e.value=t),null!=n)?e.defaultValue=null!=n?""+ct(n):"":e.defaultValue!==t&&(e.defaultValue=t)}function kt(e,t,n,r){if(null==t){if(null!=r){if(null!=n)throw Error(i(92));if(O(r)){if(1<r.length)throw Error(i(93));r=r[0]}n=r}null==n&&(n=""),t=n}n=ct(t),e.defaultValue=n,(r=e.textContent)===n&&""!==r&&null!==r&&(e.value=r)}function St(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var xt=new Set("animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp".split(" "));function Et(e,t,n){var r=0===t.indexOf("--");null==n||"boolean"==typeof n||""===n?r?e.setProperty(t,""):"float"===t?e.cssFloat="":e[t]="":r?e.setProperty(t,n):"number"!=typeof n||0===n||xt.has(t)?"float"===t?e.cssFloat=n:e[t]=(""+n).trim():e[t]=n+"px"}function _t(e,t,n){if(null!=t&&"object"!=typeof t)throw Error(i(62));if(e=e.style,null!=n){for(var r in n)!n.hasOwnProperty(r)||null!=t&&t.hasOwnProperty(r)||(0===r.indexOf("--")?e.setProperty(r,""):"float"===r?e.cssFloat="":e[r]="");for(var o in t)r=t[o],t.hasOwnProperty(o)&&n[o]!==r&&Et(e,o,r)}else for(var a in t)t.hasOwnProperty(a)&&Et(e,a,t[a])}function Ct(e){if(-1===e.indexOf("-"))return!1;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var At=new Map([["acceptCharset","accept-charset"],["htmlFor","for"],["httpEquiv","http-equiv"],["crossOrigin","crossorigin"],["accentHeight","accent-height"],["alignmentBaseline","alignment-baseline"],["arabicForm","arabic-form"],["baselineShift","baseline-shift"],["capHeight","cap-height"],["clipPath","clip-path"],["clipRule","clip-rule"],["colorInterpolation","color-interpolation"],["colorInterpolationFilters","color-interpolation-filters"],["colorProfile","color-profile"],["colorRendering","color-rendering"],["dominantBaseline","dominant-baseline"],["enableBackground","enable-background"],["fillOpacity","fill-opacity"],["fillRule","fill-rule"],["floodColor","flood-color"],["floodOpacity","flood-opacity"],["fontFamily","font-family"],["fontSize","font-size"],["fontSizeAdjust","font-size-adjust"],["fontStretch","font-stretch"],["fontStyle","font-style"],["fontVariant","font-variant"],["fontWeight","font-weight"],["glyphName","glyph-name"],["glyphOrientationHorizontal","glyph-orientation-horizontal"],["glyphOrientationVertical","glyph-orientation-vertical"],["horizAdvX","horiz-adv-x"],["horizOriginX","horiz-origin-x"],["imageRendering","image-rendering"],["letterSpacing","letter-spacing"],["lightingColor","lighting-color"],["markerEnd","marker-end"],["markerMid","marker-mid"],["markerStart","marker-start"],["overlinePosition","overline-position"],["overlineThickness","overline-thickness"],["paintOrder","paint-order"],["panose-1","panose-1"],["pointerEvents","pointer-events"],["renderingIntent","rendering-intent"],["shapeRendering","shape-rendering"],["stopColor","stop-color"],["stopOpacity","stop-opacity"],["strikethroughPosition","strikethrough-position"],["strikethroughThickness","strikethrough-thickness"],["strokeDasharray","stroke-dasharray"],["strokeDashoffset","stroke-dashoffset"],["strokeLinecap","stroke-linecap"],["strokeLinejoin","stroke-linejoin"],["strokeMiterlimit","stroke-miterlimit"],["strokeOpacity","stroke-opacity"],["strokeWidth","stroke-width"],["textAnchor","text-anchor"],["textDecoration","text-decoration"],["textRendering","text-rendering"],["transformOrigin","transform-origin"],["underlinePosition","underline-position"],["underlineThickness","underline-thickness"],["unicodeBidi","unicode-bidi"],["unicodeRange","unicode-range"],["unitsPerEm","units-per-em"],["vAlphabetic","v-alphabetic"],["vHanging","v-hanging"],["vIdeographic","v-ideographic"],["vMathematical","v-mathematical"],["vectorEffect","vector-effect"],["vertAdvY","vert-adv-y"],["vertOriginX","vert-origin-x"],["vertOriginY","vert-origin-y"],["wordSpacing","word-spacing"],["writingMode","writing-mode"],["xmlnsXlink","xmlns:xlink"],["xHeight","x-height"]]),Tt=/^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i;function jt(e){return Tt.test(""+e)?"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')":e}var Pt=null;function Nt(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var Lt=null,Ot=null;function Rt(e){var t=Ue(e);if(t&&(e=t.stateNode)){var n=e[Oe]||null;e:switch(e=t.stateNode,t.type){case"input":if(ht(e,n.value,n.defaultValue,n.defaultValue,n.checked,n.defaultChecked,n.type,n.name),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll('input[name="'+gt(""+t)+'"][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var o=r[Oe]||null;if(!o)throw Error(i(90));ht(r,o.value,o.defaultValue,o.defaultValue,o.checked,o.defaultChecked,o.type,o.name)}}for(t=0;t<n.length;t++)(r=n[t]).form===e.form&&pt(r)}break e;case"textarea":wt(e,n.value,n.defaultValue);break e;case"select":null!=(t=n.value)&&vt(e,!!n.multiple,t,!1)}}}var Dt=!1;function Ft(e,t,n){if(Dt)return e(t,n);Dt=!0;try{return e(t)}finally{if(Dt=!1,(null!==Lt||null!==Ot)&&($c(),Lt&&(t=Lt,e=Ot,Ot=Lt=null,Rt(t),e)))for(t=0;t<e.length;t++)Rt(e[t])}}function Mt(e,t){var n=e.stateNode;if(null===n)return null;var r=n[Oe]||null;if(null===r)return null;n=r[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(r=!r.disabled)||(r=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!r;break e;default:e=!1}if(e)return null;if(n&&"function"!=typeof n)throw Error(i(231,t,typeof n));return n}var It=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),zt=!1;if(It)try{var Bt={};Object.defineProperty(Bt,"passive",{get:function(){zt=!0}}),window.addEventListener("test",Bt,Bt),window.removeEventListener("test",Bt,Bt)}catch(Op){zt=!1}var $t=null,Ut=null,qt=null;function Ht(){if(qt)return qt;var e,t,n=Ut,r=n.length,o="value"in $t?$t.value:$t.textContent,a=o.length;for(e=0;e<r&&n[e]===o[e];e++);var i=r-e;for(t=1;t<=i&&n[r-t]===o[a-t];t++);return qt=o.slice(e,1<t?1-t:void 0)}function Gt(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function Vt(){return!0}function Wt(){return!1}function Qt(e){function t(t,n,r,o,a){for(var i in this._reactName=t,this._targetInst=r,this.type=n,this.nativeEvent=o,this.target=a,this.currentTarget=null,e)e.hasOwnProperty(i)&&(t=e[i],this[i]=t?t(o):o[i]);return this.isDefaultPrevented=(null!=o.defaultPrevented?o.defaultPrevented:!1===o.returnValue)?Vt:Wt,this.isPropagationStopped=Wt,this}return p(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=Vt)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=Vt)},persist:function(){},isPersistent:Vt}),t}var Kt,Yt,Xt,Zt={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},Jt=Qt(Zt),en=p({},Zt,{view:0,detail:0}),tn=Qt(en),nn=p({},en,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:mn,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==Xt&&(Xt&&"mousemove"===e.type?(Kt=e.screenX-Xt.screenX,Yt=e.screenY-Xt.screenY):Yt=Kt=0,Xt=e),Kt)},movementY:function(e){return"movementY"in e?e.movementY:Yt}}),rn=Qt(nn),on=Qt(p({},nn,{dataTransfer:0})),an=Qt(p({},en,{relatedTarget:0})),ln=Qt(p({},Zt,{animationName:0,elapsedTime:0,pseudoElement:0})),sn=Qt(p({},Zt,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}})),cn=Qt(p({},Zt,{data:0})),un={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},dn={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},pn={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function fn(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=pn[e])&&!!t[e]}function mn(){return fn}var gn=Qt(p({},en,{key:function(e){if(e.key){var t=un[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=Gt(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?dn[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:mn,charCode:function(e){return"keypress"===e.type?Gt(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?Gt(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}})),hn=Qt(p({},nn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),yn=Qt(p({},en,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:mn})),bn=Qt(p({},Zt,{propertyName:0,elapsedTime:0,pseudoElement:0})),vn=Qt(p({},nn,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0})),wn=Qt(p({},Zt,{newState:0,oldState:0})),kn=[9,13,27,32],Sn=It&&"CompositionEvent"in window,xn=null;It&&"documentMode"in document&&(xn=document.documentMode);var En=It&&"TextEvent"in window&&!xn,_n=It&&(!Sn||xn&&8<xn&&11>=xn),Cn=String.fromCharCode(32),An=!1;function Tn(e,t){switch(e){case"keyup":return-1!==kn.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function jn(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var Pn=!1;var Nn={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Ln(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!Nn[e.type]:"textarea"===t}function On(e,t,n,r){Lt?Ot?Ot.push(r):Ot=[r]:Lt=r,0<(t=Hu(t,"onChange")).length&&(n=new Jt("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var Rn=null,Dn=null;function Fn(e){Fu(e,0)}function Mn(e){if(pt(qe(e)))return e}function In(e,t){if("change"===e)return t}var zn=!1;if(It){var Bn;if(It){var $n="oninput"in document;if(!$n){var Un=document.createElement("div");Un.setAttribute("oninput","return;"),$n="function"==typeof Un.oninput}Bn=$n}else Bn=!1;zn=Bn&&(!document.documentMode||9<document.documentMode)}function qn(){Rn&&(Rn.detachEvent("onpropertychange",Hn),Dn=Rn=null)}function Hn(e){if("value"===e.propertyName&&Mn(Dn)){var t=[];On(t,Dn,e,Nt(e)),Ft(Fn,t)}}function Gn(e,t,n){"focusin"===e?(qn(),Dn=n,(Rn=t).attachEvent("onpropertychange",Hn)):"focusout"===e&&qn()}function Vn(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return Mn(Dn)}function Wn(e,t){if("click"===e)return Mn(t)}function Qn(e,t){if("input"===e||"change"===e)return Mn(t)}var Kn="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t};function Yn(e,t){if(Kn(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++){var o=n[r];if(!Y.call(t,o)||!Kn(e[o],t[o]))return!1}return!0}function Xn(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function Zn(e,t){var n,r=Xn(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=Xn(r)}}function Jn(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?Jn(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function er(e){for(var t=ft((e=null!=e&&null!=e.ownerDocument&&null!=e.ownerDocument.defaultView?e.ownerDocument.defaultView:window).document);t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(r){n=!1}if(!n)break;t=ft((e=t.contentWindow).document)}return t}function tr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}var nr=It&&"documentMode"in document&&11>=document.documentMode,rr=null,or=null,ar=null,ir=!1;function lr(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;ir||null==rr||rr!==ft(r)||("selectionStart"in(r=rr)&&tr(r)?r={start:r.selectionStart,end:r.selectionEnd}:r={anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},ar&&Yn(ar,r)||(ar=r,0<(r=Hu(or,"onSelect")).length&&(t=new Jt("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=rr)))}function sr(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var cr={animationend:sr("Animation","AnimationEnd"),animationiteration:sr("Animation","AnimationIteration"),animationstart:sr("Animation","AnimationStart"),transitionrun:sr("Transition","TransitionRun"),transitionstart:sr("Transition","TransitionStart"),transitioncancel:sr("Transition","TransitionCancel"),transitionend:sr("Transition","TransitionEnd")},ur={},dr={};function pr(e){if(ur[e])return ur[e];if(!cr[e])return e;var t,n=cr[e];for(t in n)if(n.hasOwnProperty(t)&&t in dr)return ur[e]=n[t];return e}It&&(dr=document.createElement("div").style,"AnimationEvent"in window||(delete cr.animationend.animation,delete cr.animationiteration.animation,delete cr.animationstart.animation),"TransitionEvent"in window||delete cr.transitionend.transition);var fr=pr("animationend"),mr=pr("animationiteration"),gr=pr("animationstart"),hr=pr("transitionrun"),yr=pr("transitionstart"),br=pr("transitioncancel"),vr=pr("transitionend"),wr=new Map,kr="abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");function Sr(e,t){wr.set(e,t),Qe(t,[e])}kr.push("scrollEnd");var xr=new WeakMap;function Er(e,t){if("object"==typeof e&&null!==e){var n=xr.get(e);return void 0!==n?n:(t={value:e,source:t,stack:st(t)},xr.set(e,t),t)}return{value:e,source:t,stack:st(t)}}var _r=[],Cr=0,Ar=0;function Tr(){for(var e=Cr,t=Ar=Cr=0;t<e;){var n=_r[t];_r[t++]=null;var r=_r[t];_r[t++]=null;var o=_r[t];_r[t++]=null;var a=_r[t];if(_r[t++]=null,null!==r&&null!==o){var i=r.pending;null===i?o.next=o:(o.next=i.next,i.next=o),r.pending=o}0!==a&&Lr(n,o,a)}}function jr(e,t,n,r){_r[Cr++]=e,_r[Cr++]=t,_r[Cr++]=n,_r[Cr++]=r,Ar|=r,e.lanes|=r,null!==(e=e.alternate)&&(e.lanes|=r)}function Pr(e,t,n,r){return jr(e,t,n,r),Or(e)}function Nr(e,t){return jr(e,null,null,t),Or(e)}function Lr(e,t,n){e.lanes|=n;var r=e.alternate;null!==r&&(r.lanes|=n);for(var o=!1,a=e.return;null!==a;)a.childLanes|=n,null!==(r=a.alternate)&&(r.childLanes|=n),22===a.tag&&(null===(e=a.stateNode)||1&e._visibility||(o=!0)),e=a,a=a.return;return 3===e.tag?(a=e.stateNode,o&&null!==t&&(o=31-fe(n),null===(r=(e=a.hiddenUpdates)[o])?e[o]=[t]:r.push(t),t.lane=536870912|n),a):null}function Or(e){if(50<Lc)throw Lc=0,Oc=null,Error(i(185));for(var t=e.return;null!==t;)t=(e=t).return;return 3===e.tag?e.stateNode:null}var Rr={};function Dr(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.refCleanup=this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Fr(e,t,n,r){return new Dr(e,t,n,r)}function Mr(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Ir(e,t){var n=e.alternate;return null===n?((n=Fr(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=65011712&e.flags,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n.refCleanup=e.refCleanup,n}function zr(e,t){e.flags&=65011714;var n=e.alternate;return null===n?(e.childLanes=0,e.lanes=t,e.child=null,e.subtreeFlags=0,e.memoizedProps=null,e.memoizedState=null,e.updateQueue=null,e.dependencies=null,e.stateNode=null):(e.childLanes=n.childLanes,e.lanes=n.lanes,e.child=n.child,e.subtreeFlags=0,e.deletions=null,e.memoizedProps=n.memoizedProps,e.memoizedState=n.memoizedState,e.updateQueue=n.updateQueue,e.type=n.type,t=n.dependencies,e.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext}),e}function Br(e,t,n,r,o,a){var l=0;if(r=e,"function"==typeof e)Mr(e)&&(l=1);else if("string"==typeof e)l=function(e,t,n){if(1===n||null!=t.itemProp)return!1;switch(e){case"meta":case"title":return!0;case"style":if("string"!=typeof t.precedence||"string"!=typeof t.href||""===t.href)break;return!0;case"link":if("string"!=typeof t.rel||"string"!=typeof t.href||""===t.href||t.onLoad||t.onError)break;return"stylesheet"!==t.rel||(e=t.disabled,"string"==typeof t.precedence&&null==e);case"script":if(t.async&&"function"!=typeof t.async&&"symbol"!=typeof t.async&&!t.onLoad&&!t.onError&&t.src&&"string"==typeof t.src)return!0}return!1}(e,n,U.current)?26:"html"===e||"head"===e||"body"===e?27:5;else e:switch(e){case A:return(e=Fr(31,n,t,o)).elementType=A,e.lanes=a,e;case h:return $r(n.children,o,a,t);case y:l=8,o|=24;break;case b:return(e=Fr(12,n,t,2|o)).elementType=b,e.lanes=a,e;case x:return(e=Fr(13,n,t,o)).elementType=x,e.lanes=a,e;case E:return(e=Fr(19,n,t,o)).elementType=E,e.lanes=a,e;default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case v:case k:l=10;break e;case w:l=9;break e;case S:l=11;break e;case _:l=14;break e;case C:l=16,r=null;break e}l=29,n=Error(i(130,null===e?"null":typeof e,"")),r=null}return(t=Fr(l,n,t,o)).elementType=e,t.type=r,t.lanes=a,t}function $r(e,t,n,r){return(e=Fr(7,e,r,t)).lanes=n,e}function Ur(e,t,n){return(e=Fr(6,e,null,t)).lanes=n,e}function qr(e,t,n){return(t=Fr(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}var Hr=[],Gr=0,Vr=null,Wr=0,Qr=[],Kr=0,Yr=null,Xr=1,Zr="";function Jr(e,t){Hr[Gr++]=Wr,Hr[Gr++]=Vr,Vr=e,Wr=t}function eo(e,t,n){Qr[Kr++]=Xr,Qr[Kr++]=Zr,Qr[Kr++]=Yr,Yr=e;var r=Xr;e=Zr;var o=32-fe(r)-1;r&=~(1<<o),n+=1;var a=32-fe(t)+o;if(30<a){var i=o-o%5;a=(r&(1<<i)-1).toString(32),r>>=i,o-=i,Xr=1<<32-fe(t)+o|n<<o|r,Zr=a+e}else Xr=1<<a|n<<o|r,Zr=e}function to(e){null!==e.return&&(Jr(e,1),eo(e,1,0))}function no(e){for(;e===Vr;)Vr=Hr[--Gr],Hr[Gr]=null,Wr=Hr[--Gr],Hr[Gr]=null;for(;e===Yr;)Yr=Qr[--Kr],Qr[Kr]=null,Zr=Qr[--Kr],Qr[Kr]=null,Xr=Qr[--Kr],Qr[Kr]=null}var ro=null,oo=null,ao=!1,io=null,lo=!1,so=Error(i(519));function co(e){throw ho(Er(Error(i(418,"")),e)),so}function uo(e){var t=e.stateNode,n=e.type,r=e.memoizedProps;switch(t[Le]=e,t[Oe]=r,n){case"dialog":Mu("cancel",t),Mu("close",t);break;case"iframe":case"object":case"embed":Mu("load",t);break;case"video":case"audio":for(n=0;n<Ru.length;n++)Mu(Ru[n],t);break;case"source":Mu("error",t);break;case"img":case"image":case"link":Mu("error",t),Mu("load",t);break;case"details":Mu("toggle",t);break;case"input":Mu("invalid",t),yt(t,r.value,r.defaultValue,r.checked,r.defaultChecked,r.type,r.name,!0),dt(t);break;case"select":Mu("invalid",t);break;case"textarea":Mu("invalid",t),kt(t,r.value,r.defaultValue,r.children),dt(t)}"string"!=typeof(n=r.children)&&"number"!=typeof n&&"bigint"!=typeof n||t.textContent===""+n||!0===r.suppressHydrationWarning||Yu(t.textContent,n)?(null!=r.popover&&(Mu("beforetoggle",t),Mu("toggle",t)),null!=r.onScroll&&Mu("scroll",t),null!=r.onScrollEnd&&Mu("scrollend",t),null!=r.onClick&&(t.onclick=Xu),t=!0):t=!1,t||co(e)}function po(e){for(ro=e.return;ro;)switch(ro.tag){case 5:case 13:return void(lo=!1);case 27:case 3:return void(lo=!0);default:ro=ro.return}}function fo(e){if(e!==ro)return!1;if(!ao)return po(e),ao=!0,!1;var t,n=e.tag;if((t=3!==n&&27!==n)&&((t=5===n)&&(t=!("form"!==(t=e.type)&&"button"!==t)||id(e.type,e.memoizedProps)),t=!t),t&&oo&&co(e),po(e),13===n){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(i(317));e:{for(e=e.nextSibling,n=0;e;){if(8===e.nodeType)if("/$"===(t=e.data)){if(0===n){oo=yd(e.nextSibling);break e}n--}else"$"!==t&&"$!"!==t&&"$?"!==t||n++;e=e.nextSibling}oo=null}}else 27===n?(n=oo,fd(e.type)?(e=bd,bd=null,oo=e):oo=n):oo=ro?yd(e.stateNode.nextSibling):null;return!0}function mo(){oo=ro=null,ao=!1}function go(){var e=io;return null!==e&&(null===vc?vc=e:vc.push.apply(vc,e),io=null),e}function ho(e){null===io?io=[e]:io.push(e)}var yo=z(null),bo=null,vo=null;function wo(e,t,n){$(yo,t._currentValue),t._currentValue=n}function ko(e){e._currentValue=yo.current,B(yo)}function So(e,t,n){for(;null!==e;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,null!==r&&(r.childLanes|=t)):null!==r&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function xo(e,t,n,r){var o=e.child;for(null!==o&&(o.return=e);null!==o;){var a=o.dependencies;if(null!==a){var l=o.child;a=a.firstContext;e:for(;null!==a;){var s=a;a=o;for(var c=0;c<t.length;c++)if(s.context===t[c]){a.lanes|=n,null!==(s=a.alternate)&&(s.lanes|=n),So(a.return,n,e),r||(l=null);break e}a=s.next}}else if(18===o.tag){if(null===(l=o.return))throw Error(i(341));l.lanes|=n,null!==(a=l.alternate)&&(a.lanes|=n),So(l,n,e),l=null}else l=o.child;if(null!==l)l.return=o;else for(l=o;null!==l;){if(l===e){l=null;break}if(null!==(o=l.sibling)){o.return=l.return,l=o;break}l=l.return}o=l}}function Eo(e,t,n,r){e=null;for(var o=t,a=!1;null!==o;){if(!a)if(524288&o.flags)a=!0;else if(262144&o.flags)break;if(10===o.tag){var l=o.alternate;if(null===l)throw Error(i(387));if(null!==(l=l.memoizedProps)){var s=o.type;Kn(o.pendingProps.value,l.value)||(null!==e?e.push(s):e=[s])}}else if(o===G.current){if(null===(l=o.alternate))throw Error(i(387));l.memoizedState.memoizedState!==o.memoizedState.memoizedState&&(null!==e?e.push(Qd):e=[Qd])}o=o.return}null!==e&&xo(t,e,n,r),t.flags|=262144}function _o(e){for(e=e.firstContext;null!==e;){if(!Kn(e.context._currentValue,e.memoizedValue))return!0;e=e.next}return!1}function Co(e){bo=e,vo=null,null!==(e=e.dependencies)&&(e.firstContext=null)}function Ao(e){return jo(bo,e)}function To(e,t){return null===bo&&Co(e),jo(e,t)}function jo(e,t){var n=t._currentValue;if(t={context:t,memoizedValue:n,next:null},null===vo){if(null===e)throw Error(i(308));vo=t,e.dependencies={lanes:0,firstContext:t},e.flags|=524288}else vo=vo.next=t;return n}var Po="undefined"!=typeof AbortController?AbortController:function(){var e=[],t=this.signal={aborted:!1,addEventListener:function(t,n){e.push(n)}};this.abort=function(){t.aborted=!0,e.forEach(function(e){return e()})}},No=r.unstable_scheduleCallback,Lo=r.unstable_NormalPriority,Oo={$$typeof:k,Consumer:null,Provider:null,_currentValue:null,_currentValue2:null,_threadCount:0};function Ro(){return{controller:new Po,data:new Map,refCount:0}}function Do(e){e.refCount--,0===e.refCount&&No(Lo,function(){e.controller.abort()})}var Fo=null,Mo=0,Io=0,zo=null;function Bo(){if(0===--Mo&&null!==Fo){null!==zo&&(zo.status="fulfilled");var e=Fo;Fo=null,Io=0,zo=null;for(var t=0;t<e.length;t++)(0,e[t])()}}var $o=R.S;R.S=function(e,t){"object"==typeof t&&null!==t&&"function"==typeof t.then&&function(e,t){if(null===Fo){var n=Fo=[];Mo=0,Io=ju(),zo={status:"pending",value:void 0,then:function(e){n.push(e)}}}Mo++,t.then(Bo,Bo)}(0,t),null!==$o&&$o(e,t)};var Uo=z(null);function qo(){var e=Uo.current;return null!==e?e:rc.pooledCache}function Ho(e,t){$(Uo,null===t?Uo.current:t.pool)}function Go(){var e=qo();return null===e?null:{parent:Oo._currentValue,pool:e}}var Vo=Error(i(460)),Wo=Error(i(474)),Qo=Error(i(542)),Ko={then:function(){}};function Yo(e){return"fulfilled"===(e=e.status)||"rejected"===e}function Xo(){}function Zo(e,t,n){switch(void 0===(n=e[n])?e.push(t):n!==t&&(t.then(Xo,Xo),t=n),t.status){case"fulfilled":return t.value;case"rejected":throw ta(e=t.reason),e;default:if("string"==typeof t.status)t.then(Xo,Xo);else{if(null!==(e=rc)&&100<e.shellSuspendCounter)throw Error(i(482));(e=t).status="pending",e.then(function(e){if("pending"===t.status){var n=t;n.status="fulfilled",n.value=e}},function(e){if("pending"===t.status){var n=t;n.status="rejected",n.reason=e}})}switch(t.status){case"fulfilled":return t.value;case"rejected":throw ta(e=t.reason),e}throw Jo=t,Vo}}var Jo=null;function ea(){if(null===Jo)throw Error(i(459));var e=Jo;return Jo=null,e}function ta(e){if(e===Vo||e===Qo)throw Error(i(483))}var na=!1;function ra(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function oa(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function aa(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function ia(e,t,n){var r=e.updateQueue;if(null===r)return null;if(r=r.shared,2&nc){var o=r.pending;return null===o?t.next=t:(t.next=o.next,o.next=t),r.pending=t,t=Or(e),Lr(e,null,n),t}return jr(e,r,t,n),Or(e)}function la(e,t,n){if(null!==(t=t.updateQueue)&&(t=t.shared,4194048&n)){var r=t.lanes;n|=r&=e.pendingLanes,t.lanes=n,Ae(e,n)}}function sa(e,t){var n=e.updateQueue,r=e.alternate;if(null!==r&&n===(r=r.updateQueue)){var o=null,a=null;if(null!==(n=n.firstBaseUpdate)){do{var i={lane:n.lane,tag:n.tag,payload:n.payload,callback:null,next:null};null===a?o=a=i:a=a.next=i,n=n.next}while(null!==n);null===a?o=a=t:a=a.next=t}else o=a=t;return n={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:a,shared:r.shared,callbacks:r.callbacks},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}var ca=!1;function ua(){if(ca){if(null!==zo)throw zo}}function da(e,t,n,r){ca=!1;var o=e.updateQueue;na=!1;var a=o.firstBaseUpdate,i=o.lastBaseUpdate,l=o.shared.pending;if(null!==l){o.shared.pending=null;var s=l,c=s.next;s.next=null,null===i?a=c:i.next=c,i=s;var u=e.alternate;null!==u&&((l=(u=u.updateQueue).lastBaseUpdate)!==i&&(null===l?u.firstBaseUpdate=c:l.next=c,u.lastBaseUpdate=s))}if(null!==a){var d=o.baseState;for(i=0,u=c=s=null,l=a;;){var f=-536870913&l.lane,m=f!==l.lane;if(m?(ac&f)===f:(r&f)===f){0!==f&&f===Io&&(ca=!0),null!==u&&(u=u.next={lane:0,tag:l.tag,payload:l.payload,callback:null,next:null});e:{var g=e,h=l;f=t;var y=n;switch(h.tag){case 1:if("function"==typeof(g=h.payload)){d=g.call(y,d,f);break e}d=g;break e;case 3:g.flags=-65537&g.flags|128;case 0:if(null==(f="function"==typeof(g=h.payload)?g.call(y,d,f):g))break e;d=p({},d,f);break e;case 2:na=!0}}null!==(f=l.callback)&&(e.flags|=64,m&&(e.flags|=8192),null===(m=o.callbacks)?o.callbacks=[f]:m.push(f))}else m={lane:f,tag:l.tag,payload:l.payload,callback:l.callback,next:null},null===u?(c=u=m,s=d):u=u.next=m,i|=f;if(null===(l=l.next)){if(null===(l=o.shared.pending))break;l=(m=l).next,m.next=null,o.lastBaseUpdate=m,o.shared.pending=null}}null===u&&(s=d),o.baseState=s,o.firstBaseUpdate=c,o.lastBaseUpdate=u,null===a&&(o.shared.lanes=0),fc|=i,e.lanes=i,e.memoizedState=d}}function pa(e,t){if("function"!=typeof e)throw Error(i(191,e));e.call(t)}function fa(e,t){var n=e.callbacks;if(null!==n)for(e.callbacks=null,e=0;e<n.length;e++)pa(n[e],t)}var ma=z(null),ga=z(0);function ha(e,t){$(ga,e=dc),$(ma,t),dc=e|t.baseLanes}function ya(){$(ga,dc),$(ma,ma.current)}function ba(){dc=ga.current,B(ma),B(ga)}var va=0,wa=null,ka=null,Sa=null,xa=!1,Ea=!1,_a=!1,Ca=0,Aa=0,Ta=null,ja=0;function Pa(){throw Error(i(321))}function Na(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!Kn(e[n],t[n]))return!1;return!0}function La(e,t,n,r,o,a){return va=a,wa=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,R.H=null===e||null===e.memoizedState?Vi:Wi,_a=!1,a=n(r,o),_a=!1,Ea&&(a=Ra(t,n,r,o)),Oa(e),a}function Oa(e){R.H=Gi;var t=null!==ka&&null!==ka.next;if(va=0,Sa=ka=wa=null,xa=!1,Aa=0,Ta=null,t)throw Error(i(300));null===e||Al||null!==(e=e.dependencies)&&_o(e)&&(Al=!0)}function Ra(e,t,n,r){wa=e;var o=0;do{if(Ea&&(Ta=null),Aa=0,Ea=!1,25<=o)throw Error(i(301));if(o+=1,Sa=ka=null,null!=e.updateQueue){var a=e.updateQueue;a.lastEffect=null,a.events=null,a.stores=null,null!=a.memoCache&&(a.memoCache.index=0)}R.H=Qi,a=t(n,r)}while(Ea);return a}function Da(){var e=R.H,t=e.useState()[0];return t="function"==typeof t.then?$a(t):t,e=e.useState()[0],(null!==ka?ka.memoizedState:null)!==e&&(wa.flags|=1024),t}function Fa(){var e=0!==Ca;return Ca=0,e}function Ma(e,t,n){t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~n}function Ia(e){if(xa){for(e=e.memoizedState;null!==e;){var t=e.queue;null!==t&&(t.pending=null),e=e.next}xa=!1}va=0,Sa=ka=wa=null,Ea=!1,Aa=Ca=0,Ta=null}function za(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===Sa?wa.memoizedState=Sa=e:Sa=Sa.next=e,Sa}function Ba(){if(null===ka){var e=wa.alternate;e=null!==e?e.memoizedState:null}else e=ka.next;var t=null===Sa?wa.memoizedState:Sa.next;if(null!==t)Sa=t,ka=e;else{if(null===e){if(null===wa.alternate)throw Error(i(467));throw Error(i(310))}e={memoizedState:(ka=e).memoizedState,baseState:ka.baseState,baseQueue:ka.baseQueue,queue:ka.queue,next:null},null===Sa?wa.memoizedState=Sa=e:Sa=Sa.next=e}return Sa}function $a(e){var t=Aa;return Aa+=1,null===Ta&&(Ta=[]),e=Zo(Ta,e,t),t=wa,null===(null===Sa?t.memoizedState:Sa.next)&&(t=t.alternate,R.H=null===t||null===t.memoizedState?Vi:Wi),e}function Ua(e){if(null!==e&&"object"==typeof e){if("function"==typeof e.then)return $a(e);if(e.$$typeof===k)return Ao(e)}throw Error(i(438,String(e)))}function qa(e){var t=null,n=wa.updateQueue;if(null!==n&&(t=n.memoCache),null==t){var r=wa.alternate;null!==r&&(null!==(r=r.updateQueue)&&(null!=(r=r.memoCache)&&(t={data:r.data.map(function(e){return e.slice()}),index:0})))}if(null==t&&(t={data:[],index:0}),null===n&&(n={lastEffect:null,events:null,stores:null,memoCache:null},wa.updateQueue=n),n.memoCache=t,void 0===(n=t.data[t.index]))for(n=t.data[t.index]=Array(e),r=0;r<e;r++)n[r]=T;return t.index++,n}function Ha(e,t){return"function"==typeof t?t(e):t}function Ga(e){return Va(Ba(),ka,e)}function Va(e,t,n){var r=e.queue;if(null===r)throw Error(i(311));r.lastRenderedReducer=n;var o=e.baseQueue,a=r.pending;if(null!==a){if(null!==o){var l=o.next;o.next=a.next,a.next=l}t.baseQueue=o=a,r.pending=null}if(a=e.baseState,null===o)e.memoizedState=a;else{var s=l=null,c=null,u=t=o.next,d=!1;do{var p=-536870913&u.lane;if(p!==u.lane?(ac&p)===p:(va&p)===p){var f=u.revertLane;if(0===f)null!==c&&(c=c.next={lane:0,revertLane:0,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null}),p===Io&&(d=!0);else{if((va&f)===f){u=u.next,f===Io&&(d=!0);continue}p={lane:0,revertLane:u.revertLane,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null},null===c?(s=c=p,l=a):c=c.next=p,wa.lanes|=f,fc|=f}p=u.action,_a&&n(a,p),a=u.hasEagerState?u.eagerState:n(a,p)}else f={lane:p,revertLane:u.revertLane,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null},null===c?(s=c=f,l=a):c=c.next=f,wa.lanes|=p,fc|=p;u=u.next}while(null!==u&&u!==t);if(null===c?l=a:c.next=s,!Kn(a,e.memoizedState)&&(Al=!0,d&&null!==(n=zo)))throw n;e.memoizedState=a,e.baseState=l,e.baseQueue=c,r.lastRenderedState=a}return null===o&&(r.lanes=0),[e.memoizedState,r.dispatch]}function Wa(e){var t=Ba(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,a=t.memoizedState;if(null!==o){n.pending=null;var l=o=o.next;do{a=e(a,l.action),l=l.next}while(l!==o);Kn(a,t.memoizedState)||(Al=!0),t.memoizedState=a,null===t.baseQueue&&(t.baseState=a),n.lastRenderedState=a}return[a,r]}function Qa(e,t,n){var r=wa,o=Ba(),a=ao;if(a){if(void 0===n)throw Error(i(407));n=n()}else n=t();var l=!Kn((ka||o).memoizedState,n);if(l&&(o.memoizedState=n,Al=!0),o=o.queue,yi(2048,8,Xa.bind(null,r,o,e),[e]),o.getSnapshot!==t||l||null!==Sa&&1&Sa.memoizedState.tag){if(r.flags|=2048,mi(9,{destroy:void 0,resource:void 0},Ya.bind(null,r,o,n,t),null),null===rc)throw Error(i(349));a||124&va||Ka(r,t,n)}return n}function Ka(e,t,n){e.flags|=16384,e={getSnapshot:t,value:n},null===(t=wa.updateQueue)?(t={lastEffect:null,events:null,stores:null,memoCache:null},wa.updateQueue=t,t.stores=[e]):null===(n=t.stores)?t.stores=[e]:n.push(e)}function Ya(e,t,n,r){t.value=n,t.getSnapshot=r,Za(t)&&Ja(e)}function Xa(e,t,n){return n(function(){Za(t)&&Ja(e)})}function Za(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!Kn(e,n)}catch(r){return!0}}function Ja(e){var t=Nr(e,2);null!==t&&Fc(t,e,2)}function ei(e){var t=za();if("function"==typeof e){var n=e;if(e=n(),_a){pe(!0);try{n()}finally{pe(!1)}}}return t.memoizedState=t.baseState=e,t.queue={pending:null,lanes:0,dispatch:null,lastRenderedReducer:Ha,lastRenderedState:e},t}function ti(e,t,n,r){return e.baseState=n,Va(e,ka,"function"==typeof r?r:Ha)}function ni(e,t,n,r,o){if(Ui(e))throw Error(i(485));if(null!==(e=t.action)){var a={payload:o,action:e,next:null,isTransition:!0,status:"pending",value:null,reason:null,listeners:[],then:function(e){a.listeners.push(e)}};null!==R.T?n(!0):a.isTransition=!1,r(a),null===(n=t.pending)?(a.next=t.pending=a,ri(t,a)):(a.next=n.next,t.pending=n.next=a)}}function ri(e,t){var n=t.action,r=t.payload,o=e.state;if(t.isTransition){var a=R.T,i={};R.T=i;try{var l=n(o,r),s=R.S;null!==s&&s(i,l),oi(e,t,l)}catch(c){ii(e,t,c)}finally{R.T=a}}else try{oi(e,t,a=n(o,r))}catch(u){ii(e,t,u)}}function oi(e,t,n){null!==n&&"object"==typeof n&&"function"==typeof n.then?n.then(function(n){ai(e,t,n)},function(n){return ii(e,t,n)}):ai(e,t,n)}function ai(e,t,n){t.status="fulfilled",t.value=n,li(t),e.state=n,null!==(t=e.pending)&&((n=t.next)===t?e.pending=null:(n=n.next,t.next=n,ri(e,n)))}function ii(e,t,n){var r=e.pending;if(e.pending=null,null!==r){r=r.next;do{t.status="rejected",t.reason=n,li(t),t=t.next}while(t!==r)}e.action=null}function li(e){e=e.listeners;for(var t=0;t<e.length;t++)(0,e[t])()}function si(e,t){return t}function ci(e,t){if(ao){var n=rc.formState;if(null!==n){e:{var r=wa;if(ao){if(oo){t:{for(var o=oo,a=lo;8!==o.nodeType;){if(!a){o=null;break t}if(null===(o=yd(o.nextSibling))){o=null;break t}}o="F!"===(a=o.data)||"F"===a?o:null}if(o){oo=yd(o.nextSibling),r="F!"===o.data;break e}}co(r)}r=!1}r&&(t=n[0])}}return(n=za()).memoizedState=n.baseState=t,r={pending:null,lanes:0,dispatch:null,lastRenderedReducer:si,lastRenderedState:t},n.queue=r,n=zi.bind(null,wa,r),r.dispatch=n,r=ei(!1),a=$i.bind(null,wa,!1,r.queue),o={state:t,dispatch:null,action:e,pending:null},(r=za()).queue=o,n=ni.bind(null,wa,o,a,n),o.dispatch=n,r.memoizedState=e,[t,n,!1]}function ui(e){return di(Ba(),ka,e)}function di(e,t,n){if(t=Va(e,t,si)[0],e=Ga(Ha)[0],"object"==typeof t&&null!==t&&"function"==typeof t.then)try{var r=$a(t)}catch(i){if(i===Vo)throw Qo;throw i}else r=t;var o=(t=Ba()).queue,a=o.dispatch;return n!==t.memoizedState&&(wa.flags|=2048,mi(9,{destroy:void 0,resource:void 0},pi.bind(null,o,n),null)),[r,a,e]}function pi(e,t){e.action=t}function fi(e){var t=Ba(),n=ka;if(null!==n)return di(t,n,e);Ba(),t=t.memoizedState;var r=(n=Ba()).queue.dispatch;return n.memoizedState=e,[t,r,!1]}function mi(e,t,n,r){return e={tag:e,create:n,deps:r,inst:t,next:null},null===(t=wa.updateQueue)&&(t={lastEffect:null,events:null,stores:null,memoCache:null},wa.updateQueue=t),null===(n=t.lastEffect)?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e),e}function gi(){return Ba().memoizedState}function hi(e,t,n,r){var o=za();r=void 0===r?null:r,wa.flags|=e,o.memoizedState=mi(1|t,{destroy:void 0,resource:void 0},n,r)}function yi(e,t,n,r){var o=Ba();r=void 0===r?null:r;var a=o.memoizedState.inst;null!==ka&&null!==r&&Na(r,ka.memoizedState.deps)?o.memoizedState=mi(t,a,n,r):(wa.flags|=e,o.memoizedState=mi(1|t,a,n,r))}function bi(e,t){hi(8390656,8,e,t)}function vi(e,t){yi(2048,8,e,t)}function wi(e,t){return yi(4,2,e,t)}function ki(e,t){return yi(4,4,e,t)}function Si(e,t){if("function"==typeof t){e=e();var n=t(e);return function(){"function"==typeof n?n():t(null)}}if(null!=t)return e=e(),t.current=e,function(){t.current=null}}function xi(e,t,n){n=null!=n?n.concat([e]):null,yi(4,4,Si.bind(null,t,e),n)}function Ei(){}function _i(e,t){var n=Ba();t=void 0===t?null:t;var r=n.memoizedState;return null!==t&&Na(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function Ci(e,t){var n=Ba();t=void 0===t?null:t;var r=n.memoizedState;if(null!==t&&Na(t,r[1]))return r[0];if(r=e(),_a){pe(!0);try{e()}finally{pe(!1)}}return n.memoizedState=[r,t],r}function Ai(e,t,n){return void 0===n||1073741824&va?e.memoizedState=t:(e.memoizedState=n,e=Dc(),wa.lanes|=e,fc|=e,n)}function Ti(e,t,n,r){return Kn(n,t)?n:null!==ma.current?(e=Ai(e,n,r),Kn(e,t)||(Al=!0),e):42&va?(e=Dc(),wa.lanes|=e,fc|=e,t):(Al=!0,e.memoizedState=n)}function ji(e,t,n,r,o){var a=D.p;D.p=0!==a&&8>a?a:8;var i,l,s,c=R.T,u={};R.T=u,$i(e,!1,t,n);try{var d=o(),p=R.S;if(null!==p&&p(u,d),null!==d&&"object"==typeof d&&"function"==typeof d.then)Bi(e,t,(i=r,l=[],s={status:"pending",value:null,reason:null,then:function(e){l.push(e)}},d.then(function(){s.status="fulfilled",s.value=i;for(var e=0;e<l.length;e++)(0,l[e])(i)},function(e){for(s.status="rejected",s.reason=e,e=0;e<l.length;e++)(0,l[e])(void 0)}),s),Rc());else Bi(e,t,r,Rc())}catch(f){Bi(e,t,{then:function(){},status:"rejected",reason:f},Rc())}finally{D.p=a,R.T=c}}function Pi(){}function Ni(e,t,n,r){if(5!==e.tag)throw Error(i(476));var o=Li(e).queue;ji(e,o,t,F,null===n?Pi:function(){return Oi(e),n(r)})}function Li(e){var t=e.memoizedState;if(null!==t)return t;var n={};return(t={memoizedState:F,baseState:F,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Ha,lastRenderedState:F},next:null}).next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Ha,lastRenderedState:n},next:null},e.memoizedState=t,null!==(e=e.alternate)&&(e.memoizedState=t),t}function Oi(e){Bi(e,Li(e).next.queue,{},Rc())}function Ri(){return Ao(Qd)}function Di(){return Ba().memoizedState}function Fi(){return Ba().memoizedState}function Mi(e){for(var t=e.return;null!==t;){switch(t.tag){case 24:case 3:var n=Rc(),r=ia(t,e=aa(n),n);return null!==r&&(Fc(r,t,n),la(r,t,n)),t={cache:Ro()},void(e.payload=t)}t=t.return}}function Ii(e,t,n){var r=Rc();n={lane:r,revertLane:0,action:n,hasEagerState:!1,eagerState:null,next:null},Ui(e)?qi(t,n):null!==(n=Pr(e,t,n,r))&&(Fc(n,e,r),Hi(n,t,r))}function zi(e,t,n){Bi(e,t,n,Rc())}function Bi(e,t,n,r){var o={lane:r,revertLane:0,action:n,hasEagerState:!1,eagerState:null,next:null};if(Ui(e))qi(t,o);else{var a=e.alternate;if(0===e.lanes&&(null===a||0===a.lanes)&&null!==(a=t.lastRenderedReducer))try{var i=t.lastRenderedState,l=a(i,n);if(o.hasEagerState=!0,o.eagerState=l,Kn(l,i))return jr(e,t,o,0),null===rc&&Tr(),!1}catch(s){}if(null!==(n=Pr(e,t,o,r)))return Fc(n,e,r),Hi(n,t,r),!0}return!1}function $i(e,t,n,r){if(r={lane:2,revertLane:ju(),action:r,hasEagerState:!1,eagerState:null,next:null},Ui(e)){if(t)throw Error(i(479))}else null!==(t=Pr(e,n,r,2))&&Fc(t,e,2)}function Ui(e){var t=e.alternate;return e===wa||null!==t&&t===wa}function qi(e,t){Ea=xa=!0;var n=e.pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Hi(e,t,n){if(4194048&n){var r=t.lanes;n|=r&=e.pendingLanes,t.lanes=n,Ae(e,n)}}var Gi={readContext:Ao,use:Ua,useCallback:Pa,useContext:Pa,useEffect:Pa,useImperativeHandle:Pa,useLayoutEffect:Pa,useInsertionEffect:Pa,useMemo:Pa,useReducer:Pa,useRef:Pa,useState:Pa,useDebugValue:Pa,useDeferredValue:Pa,useTransition:Pa,useSyncExternalStore:Pa,useId:Pa,useHostTransitionStatus:Pa,useFormState:Pa,useActionState:Pa,useOptimistic:Pa,useMemoCache:Pa,useCacheRefresh:Pa},Vi={readContext:Ao,use:Ua,useCallback:function(e,t){return za().memoizedState=[e,void 0===t?null:t],e},useContext:Ao,useEffect:bi,useImperativeHandle:function(e,t,n){n=null!=n?n.concat([e]):null,hi(4194308,4,Si.bind(null,t,e),n)},useLayoutEffect:function(e,t){return hi(4194308,4,e,t)},useInsertionEffect:function(e,t){hi(4,2,e,t)},useMemo:function(e,t){var n=za();t=void 0===t?null:t;var r=e();if(_a){pe(!0);try{e()}finally{pe(!1)}}return n.memoizedState=[r,t],r},useReducer:function(e,t,n){var r=za();if(void 0!==n){var o=n(t);if(_a){pe(!0);try{n(t)}finally{pe(!1)}}}else o=t;return r.memoizedState=r.baseState=o,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:o},r.queue=e,e=e.dispatch=Ii.bind(null,wa,e),[r.memoizedState,e]},useRef:function(e){return e={current:e},za().memoizedState=e},useState:function(e){var t=(e=ei(e)).queue,n=zi.bind(null,wa,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:Ei,useDeferredValue:function(e,t){return Ai(za(),e,t)},useTransition:function(){var e=ei(!1);return e=ji.bind(null,wa,e.queue,!0,!1),za().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var r=wa,o=za();if(ao){if(void 0===n)throw Error(i(407));n=n()}else{if(n=t(),null===rc)throw Error(i(349));124&ac||Ka(r,t,n)}o.memoizedState=n;var a={value:n,getSnapshot:t};return o.queue=a,bi(Xa.bind(null,r,a,e),[e]),r.flags|=2048,mi(9,{destroy:void 0,resource:void 0},Ya.bind(null,r,a,n,t),null),n},useId:function(){var e=za(),t=rc.identifierPrefix;if(ao){var n=Zr;t="\xab"+t+"R"+(n=(Xr&~(1<<32-fe(Xr)-1)).toString(32)+n),0<(n=Ca++)&&(t+="H"+n.toString(32)),t+="\xbb"}else t="\xab"+t+"r"+(n=ja++).toString(32)+"\xbb";return e.memoizedState=t},useHostTransitionStatus:Ri,useFormState:ci,useActionState:ci,useOptimistic:function(e){var t=za();t.memoizedState=t.baseState=e;var n={pending:null,lanes:0,dispatch:null,lastRenderedReducer:null,lastRenderedState:null};return t.queue=n,t=$i.bind(null,wa,!0,n),n.dispatch=t,[e,t]},useMemoCache:qa,useCacheRefresh:function(){return za().memoizedState=Mi.bind(null,wa)}},Wi={readContext:Ao,use:Ua,useCallback:_i,useContext:Ao,useEffect:vi,useImperativeHandle:xi,useInsertionEffect:wi,useLayoutEffect:ki,useMemo:Ci,useReducer:Ga,useRef:gi,useState:function(){return Ga(Ha)},useDebugValue:Ei,useDeferredValue:function(e,t){return Ti(Ba(),ka.memoizedState,e,t)},useTransition:function(){var e=Ga(Ha)[0],t=Ba().memoizedState;return["boolean"==typeof e?e:$a(e),t]},useSyncExternalStore:Qa,useId:Di,useHostTransitionStatus:Ri,useFormState:ui,useActionState:ui,useOptimistic:function(e,t){return ti(Ba(),0,e,t)},useMemoCache:qa,useCacheRefresh:Fi},Qi={readContext:Ao,use:Ua,useCallback:_i,useContext:Ao,useEffect:vi,useImperativeHandle:xi,useInsertionEffect:wi,useLayoutEffect:ki,useMemo:Ci,useReducer:Wa,useRef:gi,useState:function(){return Wa(Ha)},useDebugValue:Ei,useDeferredValue:function(e,t){var n=Ba();return null===ka?Ai(n,e,t):Ti(n,ka.memoizedState,e,t)},useTransition:function(){var e=Wa(Ha)[0],t=Ba().memoizedState;return["boolean"==typeof e?e:$a(e),t]},useSyncExternalStore:Qa,useId:Di,useHostTransitionStatus:Ri,useFormState:fi,useActionState:fi,useOptimistic:function(e,t){var n=Ba();return null!==ka?ti(n,0,e,t):(n.baseState=e,[e,n.queue.dispatch])},useMemoCache:qa,useCacheRefresh:Fi},Ki=null,Yi=0;function Xi(e){var t=Yi;return Yi+=1,null===Ki&&(Ki=[]),Zo(Ki,e,t)}function Zi(e,t){t=t.props.ref,e.ref=void 0!==t?t:null}function Ji(e,t){if(t.$$typeof===f)throw Error(i(525));throw e=Object.prototype.toString.call(t),Error(i(31,"[object Object]"===e?"object with keys {"+Object.keys(t).join(", ")+"}":e))}function el(e){return(0,e._init)(e._payload)}function tl(e){function t(t,n){if(e){var r=t.deletions;null===r?(t.deletions=[n],t.flags|=16):r.push(n)}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e){for(var t=new Map;null!==e;)null!==e.key?t.set(e.key,e):t.set(e.index,e),e=e.sibling;return t}function o(e,t){return(e=Ir(e,t)).index=0,e.sibling=null,e}function a(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.flags|=67108866,n):r:(t.flags|=67108866,n):(t.flags|=1048576,n)}function l(t){return e&&null===t.alternate&&(t.flags|=67108866),t}function s(e,t,n,r){return null===t||6!==t.tag?((t=Ur(n,e.mode,r)).return=e,t):((t=o(t,n)).return=e,t)}function c(e,t,n,r){var a=n.type;return a===h?d(e,t,n.props.children,r,n.key):null!==t&&(t.elementType===a||"object"==typeof a&&null!==a&&a.$$typeof===C&&el(a)===t.type)?(Zi(t=o(t,n.props),n),t.return=e,t):(Zi(t=Br(n.type,n.key,n.props,null,e.mode,r),n),t.return=e,t)}function u(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=qr(n,e.mode,r)).return=e,t):((t=o(t,n.children||[])).return=e,t)}function d(e,t,n,r,a){return null===t||7!==t.tag?((t=$r(n,e.mode,r,a)).return=e,t):((t=o(t,n)).return=e,t)}function p(e,t,n){if("string"==typeof t&&""!==t||"number"==typeof t||"bigint"==typeof t)return(t=Ur(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case m:return Zi(n=Br(t.type,t.key,t.props,null,e.mode,n),t),n.return=e,n;case g:return(t=qr(t,e.mode,n)).return=e,t;case C:return p(e,t=(0,t._init)(t._payload),n)}if(O(t)||P(t))return(t=$r(t,e.mode,n,null)).return=e,t;if("function"==typeof t.then)return p(e,Xi(t),n);if(t.$$typeof===k)return p(e,To(e,t),n);Ji(e,t)}return null}function f(e,t,n,r){var o=null!==t?t.key:null;if("string"==typeof n&&""!==n||"number"==typeof n||"bigint"==typeof n)return null!==o?null:s(e,t,""+n,r);if("object"==typeof n&&null!==n){switch(n.$$typeof){case m:return n.key===o?c(e,t,n,r):null;case g:return n.key===o?u(e,t,n,r):null;case C:return f(e,t,n=(o=n._init)(n._payload),r)}if(O(n)||P(n))return null!==o?null:d(e,t,n,r,null);if("function"==typeof n.then)return f(e,t,Xi(n),r);if(n.$$typeof===k)return f(e,t,To(e,n),r);Ji(e,n)}return null}function y(e,t,n,r,o){if("string"==typeof r&&""!==r||"number"==typeof r||"bigint"==typeof r)return s(t,e=e.get(n)||null,""+r,o);if("object"==typeof r&&null!==r){switch(r.$$typeof){case m:return c(t,e=e.get(null===r.key?n:r.key)||null,r,o);case g:return u(t,e=e.get(null===r.key?n:r.key)||null,r,o);case C:return y(e,t,n,r=(0,r._init)(r._payload),o)}if(O(r)||P(r))return d(t,e=e.get(n)||null,r,o,null);if("function"==typeof r.then)return y(e,t,n,Xi(r),o);if(r.$$typeof===k)return y(e,t,n,To(t,r),o);Ji(t,r)}return null}function b(s,c,u,d){if("object"==typeof u&&null!==u&&u.type===h&&null===u.key&&(u=u.props.children),"object"==typeof u&&null!==u){switch(u.$$typeof){case m:e:{for(var v=u.key;null!==c;){if(c.key===v){if((v=u.type)===h){if(7===c.tag){n(s,c.sibling),(d=o(c,u.props.children)).return=s,s=d;break e}}else if(c.elementType===v||"object"==typeof v&&null!==v&&v.$$typeof===C&&el(v)===c.type){n(s,c.sibling),Zi(d=o(c,u.props),u),d.return=s,s=d;break e}n(s,c);break}t(s,c),c=c.sibling}u.type===h?((d=$r(u.props.children,s.mode,d,u.key)).return=s,s=d):(Zi(d=Br(u.type,u.key,u.props,null,s.mode,d),u),d.return=s,s=d)}return l(s);case g:e:{for(v=u.key;null!==c;){if(c.key===v){if(4===c.tag&&c.stateNode.containerInfo===u.containerInfo&&c.stateNode.implementation===u.implementation){n(s,c.sibling),(d=o(c,u.children||[])).return=s,s=d;break e}n(s,c);break}t(s,c),c=c.sibling}(d=qr(u,s.mode,d)).return=s,s=d}return l(s);case C:return b(s,c,u=(v=u._init)(u._payload),d)}if(O(u))return function(o,i,l,s){for(var c=null,u=null,d=i,m=i=0,g=null;null!==d&&m<l.length;m++){d.index>m?(g=d,d=null):g=d.sibling;var h=f(o,d,l[m],s);if(null===h){null===d&&(d=g);break}e&&d&&null===h.alternate&&t(o,d),i=a(h,i,m),null===u?c=h:u.sibling=h,u=h,d=g}if(m===l.length)return n(o,d),ao&&Jr(o,m),c;if(null===d){for(;m<l.length;m++)null!==(d=p(o,l[m],s))&&(i=a(d,i,m),null===u?c=d:u.sibling=d,u=d);return ao&&Jr(o,m),c}for(d=r(d);m<l.length;m++)null!==(g=y(d,o,m,l[m],s))&&(e&&null!==g.alternate&&d.delete(null===g.key?m:g.key),i=a(g,i,m),null===u?c=g:u.sibling=g,u=g);return e&&d.forEach(function(e){return t(o,e)}),ao&&Jr(o,m),c}(s,c,u,d);if(P(u)){if("function"!=typeof(v=P(u)))throw Error(i(150));return function(o,l,s,c){if(null==s)throw Error(i(151));for(var u=null,d=null,m=l,g=l=0,h=null,b=s.next();null!==m&&!b.done;g++,b=s.next()){m.index>g?(h=m,m=null):h=m.sibling;var v=f(o,m,b.value,c);if(null===v){null===m&&(m=h);break}e&&m&&null===v.alternate&&t(o,m),l=a(v,l,g),null===d?u=v:d.sibling=v,d=v,m=h}if(b.done)return n(o,m),ao&&Jr(o,g),u;if(null===m){for(;!b.done;g++,b=s.next())null!==(b=p(o,b.value,c))&&(l=a(b,l,g),null===d?u=b:d.sibling=b,d=b);return ao&&Jr(o,g),u}for(m=r(m);!b.done;g++,b=s.next())null!==(b=y(m,o,g,b.value,c))&&(e&&null!==b.alternate&&m.delete(null===b.key?g:b.key),l=a(b,l,g),null===d?u=b:d.sibling=b,d=b);return e&&m.forEach(function(e){return t(o,e)}),ao&&Jr(o,g),u}(s,c,u=v.call(u),d)}if("function"==typeof u.then)return b(s,c,Xi(u),d);if(u.$$typeof===k)return b(s,c,To(s,u),d);Ji(s,u)}return"string"==typeof u&&""!==u||"number"==typeof u||"bigint"==typeof u?(u=""+u,null!==c&&6===c.tag?(n(s,c.sibling),(d=o(c,u)).return=s,s=d):(n(s,c),(d=Ur(u,s.mode,d)).return=s,s=d),l(s)):n(s,c)}return function(e,t,n,r){try{Yi=0;var o=b(e,t,n,r);return Ki=null,o}catch(i){if(i===Vo||i===Qo)throw i;var a=Fr(29,i,null,e.mode);return a.lanes=r,a.return=e,a}}}var nl=tl(!0),rl=tl(!1),ol=z(null),al=null;function il(e){var t=e.alternate;$(ul,1&ul.current),$(ol,e),null===al&&(null===t||null!==ma.current||null!==t.memoizedState)&&(al=e)}function ll(e){if(22===e.tag){if($(ul,ul.current),$(ol,e),null===al){var t=e.alternate;null!==t&&null!==t.memoizedState&&(al=e)}}else sl()}function sl(){$(ul,ul.current),$(ol,ol.current)}function cl(e){B(ol),al===e&&(al=null),B(ul)}var ul=z(0);function dl(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||hd(n)))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(128&t.flags)return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}function pl(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:p({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var fl={enqueueSetState:function(e,t,n){e=e._reactInternals;var r=Rc(),o=aa(r);o.payload=t,null!=n&&(o.callback=n),null!==(t=ia(e,o,r))&&(Fc(t,e,r),la(t,e,r))},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=Rc(),o=aa(r);o.tag=1,o.payload=t,null!=n&&(o.callback=n),null!==(t=ia(e,o,r))&&(Fc(t,e,r),la(t,e,r))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=Rc(),r=aa(n);r.tag=2,null!=t&&(r.callback=t),null!==(t=ia(e,r,n))&&(Fc(t,e,n),la(t,e,n))}};function ml(e,t,n,r,o,a,i){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,a,i):!t.prototype||!t.prototype.isPureReactComponent||(!Yn(n,r)||!Yn(o,a))}function gl(e,t,n,r){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&fl.enqueueReplaceState(t,t.state,null)}function hl(e,t){var n=t;if("ref"in t)for(var r in n={},t)"ref"!==r&&(n[r]=t[r]);if(e=e.defaultProps)for(var o in n===t&&(n=p({},n)),e)void 0===n[o]&&(n[o]=e[o]);return n}var yl="function"==typeof reportError?reportError:function(e){if("object"==typeof window&&"function"==typeof window.ErrorEvent){var t=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:"object"==typeof e&&null!==e&&"string"==typeof e.message?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if("object"==typeof process&&"function"==typeof process.emit)return void process.emit("uncaughtException",e);console.error(e)};function bl(e){yl(e)}function vl(e){console.error(e)}function wl(e){yl(e)}function kl(e,t){try{(0,e.onUncaughtError)(t.value,{componentStack:t.stack})}catch(n){setTimeout(function(){throw n})}}function Sl(e,t,n){try{(0,e.onCaughtError)(n.value,{componentStack:n.stack,errorBoundary:1===t.tag?t.stateNode:null})}catch(r){setTimeout(function(){throw r})}}function xl(e,t,n){return(n=aa(n)).tag=3,n.payload={element:null},n.callback=function(){kl(e,t)},n}function El(e){return(e=aa(e)).tag=3,e}function _l(e,t,n,r){var o=n.type.getDerivedStateFromError;if("function"==typeof o){var a=r.value;e.payload=function(){return o(a)},e.callback=function(){Sl(t,n,r)}}var i=n.stateNode;null!==i&&"function"==typeof i.componentDidCatch&&(e.callback=function(){Sl(t,n,r),"function"!=typeof o&&(null===Ec?Ec=new Set([this]):Ec.add(this));var e=r.stack;this.componentDidCatch(r.value,{componentStack:null!==e?e:""})})}var Cl=Error(i(461)),Al=!1;function Tl(e,t,n,r){t.child=null===e?rl(t,null,n,r):nl(t,e.child,n,r)}function jl(e,t,n,r,o){n=n.render;var a=t.ref;if("ref"in r){var i={};for(var l in r)"ref"!==l&&(i[l]=r[l])}else i=r;return Co(t),r=La(e,t,n,i,a,o),l=Fa(),null===e||Al?(ao&&l&&to(t),t.flags|=1,Tl(e,t,r,o),t.child):(Ma(e,t,o),Kl(e,t,o))}function Pl(e,t,n,r,o){if(null===e){var a=n.type;return"function"!=typeof a||Mr(a)||void 0!==a.defaultProps||null!==n.compare?((e=Br(n.type,null,r,t,t.mode,o)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=a,Nl(e,t,a,r,o))}if(a=e.child,!Yl(e,o)){var i=a.memoizedProps;if((n=null!==(n=n.compare)?n:Yn)(i,r)&&e.ref===t.ref)return Kl(e,t,o)}return t.flags|=1,(e=Ir(a,r)).ref=t.ref,e.return=t,t.child=e}function Nl(e,t,n,r,o){if(null!==e){var a=e.memoizedProps;if(Yn(a,r)&&e.ref===t.ref){if(Al=!1,t.pendingProps=r=a,!Yl(e,o))return t.lanes=e.lanes,Kl(e,t,o);131072&e.flags&&(Al=!0)}}return Dl(e,t,n,r,o)}function Ll(e,t,n){var r=t.pendingProps,o=r.children,a=null!==e?e.memoizedState:null;if("hidden"===r.mode){if(128&t.flags){if(r=null!==a?a.baseLanes|n:n,null!==e){for(o=t.child=e.child,a=0;null!==o;)a=a|o.lanes|o.childLanes,o=o.sibling;t.childLanes=a&~r}else t.childLanes=0,t.child=null;return Ol(e,t,r,n)}if(!(536870912&n))return t.lanes=t.childLanes=536870912,Ol(e,t,null!==a?a.baseLanes|n:n,n);t.memoizedState={baseLanes:0,cachePool:null},null!==e&&Ho(0,null!==a?a.cachePool:null),null!==a?ha(t,a):ya(),ll(t)}else null!==a?(Ho(0,a.cachePool),ha(t,a),sl(),t.memoizedState=null):(null!==e&&Ho(0,null),ya(),sl());return Tl(e,t,o,n),t.child}function Ol(e,t,n,r){var o=qo();return o=null===o?null:{parent:Oo._currentValue,pool:o},t.memoizedState={baseLanes:n,cachePool:o},null!==e&&Ho(0,null),ya(),ll(t),null!==e&&Eo(e,t,r,!0),null}function Rl(e,t){var n=t.ref;if(null===n)null!==e&&null!==e.ref&&(t.flags|=4194816);else{if("function"!=typeof n&&"object"!=typeof n)throw Error(i(284));null!==e&&e.ref===n||(t.flags|=4194816)}}function Dl(e,t,n,r,o){return Co(t),n=La(e,t,n,r,void 0,o),r=Fa(),null===e||Al?(ao&&r&&to(t),t.flags|=1,Tl(e,t,n,o),t.child):(Ma(e,t,o),Kl(e,t,o))}function Fl(e,t,n,r,o,a){return Co(t),t.updateQueue=null,n=Ra(t,r,n,o),Oa(e),r=Fa(),null===e||Al?(ao&&r&&to(t),t.flags|=1,Tl(e,t,n,a),t.child):(Ma(e,t,a),Kl(e,t,a))}function Ml(e,t,n,r,o){if(Co(t),null===t.stateNode){var a=Rr,i=n.contextType;"object"==typeof i&&null!==i&&(a=Ao(i)),a=new n(r,a),t.memoizedState=null!==a.state&&void 0!==a.state?a.state:null,a.updater=fl,t.stateNode=a,a._reactInternals=t,(a=t.stateNode).props=r,a.state=t.memoizedState,a.refs={},ra(t),i=n.contextType,a.context="object"==typeof i&&null!==i?Ao(i):Rr,a.state=t.memoizedState,"function"==typeof(i=n.getDerivedStateFromProps)&&(pl(t,n,i,r),a.state=t.memoizedState),"function"==typeof n.getDerivedStateFromProps||"function"==typeof a.getSnapshotBeforeUpdate||"function"!=typeof a.UNSAFE_componentWillMount&&"function"!=typeof a.componentWillMount||(i=a.state,"function"==typeof a.componentWillMount&&a.componentWillMount(),"function"==typeof a.UNSAFE_componentWillMount&&a.UNSAFE_componentWillMount(),i!==a.state&&fl.enqueueReplaceState(a,a.state,null),da(t,r,a,o),ua(),a.state=t.memoizedState),"function"==typeof a.componentDidMount&&(t.flags|=4194308),r=!0}else if(null===e){a=t.stateNode;var l=t.memoizedProps,s=hl(n,l);a.props=s;var c=a.context,u=n.contextType;i=Rr,"object"==typeof u&&null!==u&&(i=Ao(u));var d=n.getDerivedStateFromProps;u="function"==typeof d||"function"==typeof a.getSnapshotBeforeUpdate,l=t.pendingProps!==l,u||"function"!=typeof a.UNSAFE_componentWillReceiveProps&&"function"!=typeof a.componentWillReceiveProps||(l||c!==i)&&gl(t,a,r,i),na=!1;var p=t.memoizedState;a.state=p,da(t,r,a,o),ua(),c=t.memoizedState,l||p!==c||na?("function"==typeof d&&(pl(t,n,d,r),c=t.memoizedState),(s=na||ml(t,n,s,r,p,c,i))?(u||"function"!=typeof a.UNSAFE_componentWillMount&&"function"!=typeof a.componentWillMount||("function"==typeof a.componentWillMount&&a.componentWillMount(),"function"==typeof a.UNSAFE_componentWillMount&&a.UNSAFE_componentWillMount()),"function"==typeof a.componentDidMount&&(t.flags|=4194308)):("function"==typeof a.componentDidMount&&(t.flags|=4194308),t.memoizedProps=r,t.memoizedState=c),a.props=r,a.state=c,a.context=i,r=s):("function"==typeof a.componentDidMount&&(t.flags|=4194308),r=!1)}else{a=t.stateNode,oa(e,t),u=hl(n,i=t.memoizedProps),a.props=u,d=t.pendingProps,p=a.context,c=n.contextType,s=Rr,"object"==typeof c&&null!==c&&(s=Ao(c)),(c="function"==typeof(l=n.getDerivedStateFromProps)||"function"==typeof a.getSnapshotBeforeUpdate)||"function"!=typeof a.UNSAFE_componentWillReceiveProps&&"function"!=typeof a.componentWillReceiveProps||(i!==d||p!==s)&&gl(t,a,r,s),na=!1,p=t.memoizedState,a.state=p,da(t,r,a,o),ua();var f=t.memoizedState;i!==d||p!==f||na||null!==e&&null!==e.dependencies&&_o(e.dependencies)?("function"==typeof l&&(pl(t,n,l,r),f=t.memoizedState),(u=na||ml(t,n,u,r,p,f,s)||null!==e&&null!==e.dependencies&&_o(e.dependencies))?(c||"function"!=typeof a.UNSAFE_componentWillUpdate&&"function"!=typeof a.componentWillUpdate||("function"==typeof a.componentWillUpdate&&a.componentWillUpdate(r,f,s),"function"==typeof a.UNSAFE_componentWillUpdate&&a.UNSAFE_componentWillUpdate(r,f,s)),"function"==typeof a.componentDidUpdate&&(t.flags|=4),"function"==typeof a.getSnapshotBeforeUpdate&&(t.flags|=1024)):("function"!=typeof a.componentDidUpdate||i===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof a.getSnapshotBeforeUpdate||i===e.memoizedProps&&p===e.memoizedState||(t.flags|=1024),t.memoizedProps=r,t.memoizedState=f),a.props=r,a.state=f,a.context=s,r=u):("function"!=typeof a.componentDidUpdate||i===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof a.getSnapshotBeforeUpdate||i===e.memoizedProps&&p===e.memoizedState||(t.flags|=1024),r=!1)}return a=r,Rl(e,t),r=!!(128&t.flags),a||r?(a=t.stateNode,n=r&&"function"!=typeof n.getDerivedStateFromError?null:a.render(),t.flags|=1,null!==e&&r?(t.child=nl(t,e.child,null,o),t.child=nl(t,null,n,o)):Tl(e,t,n,o),t.memoizedState=a.state,e=t.child):e=Kl(e,t,o),e}function Il(e,t,n,r){return mo(),t.flags|=256,Tl(e,t,n,r),t.child}var zl={dehydrated:null,treeContext:null,retryLane:0,hydrationErrors:null};function Bl(e){return{baseLanes:e,cachePool:Go()}}function $l(e,t,n){return e=null!==e?e.childLanes&~n:0,t&&(e|=hc),e}function Ul(e,t,n){var r,o=t.pendingProps,a=!1,l=!!(128&t.flags);if((r=l)||(r=(null===e||null!==e.memoizedState)&&!!(2&ul.current)),r&&(a=!0,t.flags&=-129),r=!!(32&t.flags),t.flags&=-33,null===e){if(ao){if(a?il(t):sl(),ao){var s,c=oo;if(s=c){e:{for(s=c,c=lo;8!==s.nodeType;){if(!c){c=null;break e}if(null===(s=yd(s.nextSibling))){c=null;break e}}c=s}null!==c?(t.memoizedState={dehydrated:c,treeContext:null!==Yr?{id:Xr,overflow:Zr}:null,retryLane:536870912,hydrationErrors:null},(s=Fr(18,null,null,0)).stateNode=c,s.return=t,t.child=s,ro=t,oo=null,s=!0):s=!1}s||co(t)}if(null!==(c=t.memoizedState)&&null!==(c=c.dehydrated))return hd(c)?t.lanes=32:t.lanes=536870912,null;cl(t)}return c=o.children,o=o.fallback,a?(sl(),c=Hl({mode:"hidden",children:c},a=t.mode),o=$r(o,a,n,null),c.return=t,o.return=t,c.sibling=o,t.child=c,(a=t.child).memoizedState=Bl(n),a.childLanes=$l(e,r,n),t.memoizedState=zl,o):(il(t),ql(t,c))}if(null!==(s=e.memoizedState)&&null!==(c=s.dehydrated)){if(l)256&t.flags?(il(t),t.flags&=-257,t=Gl(e,t,n)):null!==t.memoizedState?(sl(),t.child=e.child,t.flags|=128,t=null):(sl(),a=o.fallback,c=t.mode,o=Hl({mode:"visible",children:o.children},c),(a=$r(a,c,n,null)).flags|=2,o.return=t,a.return=t,o.sibling=a,t.child=o,nl(t,e.child,null,n),(o=t.child).memoizedState=Bl(n),o.childLanes=$l(e,r,n),t.memoizedState=zl,t=a);else if(il(t),hd(c)){if(r=c.nextSibling&&c.nextSibling.dataset)var u=r.dgst;r=u,(o=Error(i(419))).stack="",o.digest=r,ho({value:o,source:null,stack:null}),t=Gl(e,t,n)}else if(Al||Eo(e,t,n,!1),r=0!==(n&e.childLanes),Al||r){if(null!==(r=rc)&&(0!==(o=0!==((o=42&(o=n&-n)?1:Te(o))&(r.suspendedLanes|n))?0:o)&&o!==s.retryLane))throw s.retryLane=o,Nr(e,o),Fc(r,e,o),Cl;"$?"===c.data||Wc(),t=Gl(e,t,n)}else"$?"===c.data?(t.flags|=192,t.child=e.child,t=null):(e=s.treeContext,oo=yd(c.nextSibling),ro=t,ao=!0,io=null,lo=!1,null!==e&&(Qr[Kr++]=Xr,Qr[Kr++]=Zr,Qr[Kr++]=Yr,Xr=e.id,Zr=e.overflow,Yr=t),(t=ql(t,o.children)).flags|=4096);return t}return a?(sl(),a=o.fallback,c=t.mode,u=(s=e.child).sibling,(o=Ir(s,{mode:"hidden",children:o.children})).subtreeFlags=65011712&s.subtreeFlags,null!==u?a=Ir(u,a):(a=$r(a,c,n,null)).flags|=2,a.return=t,o.return=t,o.sibling=a,t.child=o,o=a,a=t.child,null===(c=e.child.memoizedState)?c=Bl(n):(null!==(s=c.cachePool)?(u=Oo._currentValue,s=s.parent!==u?{parent:u,pool:u}:s):s=Go(),c={baseLanes:c.baseLanes|n,cachePool:s}),a.memoizedState=c,a.childLanes=$l(e,r,n),t.memoizedState=zl,o):(il(t),e=(n=e.child).sibling,(n=Ir(n,{mode:"visible",children:o.children})).return=t,n.sibling=null,null!==e&&(null===(r=t.deletions)?(t.deletions=[e],t.flags|=16):r.push(e)),t.child=n,t.memoizedState=null,n)}function ql(e,t){return(t=Hl({mode:"visible",children:t},e.mode)).return=e,e.child=t}function Hl(e,t){return(e=Fr(22,e,null,t)).lanes=0,e.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null},e}function Gl(e,t,n){return nl(t,e.child,null,n),(e=ql(t,t.pendingProps.children)).flags|=2,t.memoizedState=null,e}function Vl(e,t,n){e.lanes|=t;var r=e.alternate;null!==r&&(r.lanes|=t),So(e.return,t,n)}function Wl(e,t,n,r,o){var a=e.memoizedState;null===a?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:o}:(a.isBackwards=t,a.rendering=null,a.renderingStartTime=0,a.last=r,a.tail=n,a.tailMode=o)}function Ql(e,t,n){var r=t.pendingProps,o=r.revealOrder,a=r.tail;if(Tl(e,t,r.children,n),2&(r=ul.current))r=1&r|2,t.flags|=128;else{if(null!==e&&128&e.flags)e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&Vl(e,n,t);else if(19===e.tag)Vl(e,n,t);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}switch($(ul,r),o){case"forwards":for(n=t.child,o=null;null!==n;)null!==(e=n.alternate)&&null===dl(e)&&(o=n),n=n.sibling;null===(n=o)?(o=t.child,t.child=null):(o=n.sibling,n.sibling=null),Wl(t,!1,o,n,a);break;case"backwards":for(n=null,o=t.child,t.child=null;null!==o;){if(null!==(e=o.alternate)&&null===dl(e)){t.child=o;break}e=o.sibling,o.sibling=n,n=o,o=e}Wl(t,!0,n,null,a);break;case"together":Wl(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function Kl(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),fc|=t.lanes,0===(n&t.childLanes)){if(null===e)return null;if(Eo(e,t,n,!1),0===(n&t.childLanes))return null}if(null!==e&&t.child!==e.child)throw Error(i(153));if(null!==t.child){for(n=Ir(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Ir(e,e.pendingProps)).return=t;n.sibling=null}return t.child}function Yl(e,t){return 0!==(e.lanes&t)||!(null===(e=e.dependencies)||!_o(e))}function Xl(e,t,n){if(null!==e)if(e.memoizedProps!==t.pendingProps)Al=!0;else{if(!(Yl(e,n)||128&t.flags))return Al=!1,function(e,t,n){switch(t.tag){case 3:V(t,t.stateNode.containerInfo),wo(0,Oo,e.memoizedState.cache),mo();break;case 27:case 5:Q(t);break;case 4:V(t,t.stateNode.containerInfo);break;case 10:wo(0,t.type,t.memoizedProps.value);break;case 13:var r=t.memoizedState;if(null!==r)return null!==r.dehydrated?(il(t),t.flags|=128,null):0!==(n&t.child.childLanes)?Ul(e,t,n):(il(t),null!==(e=Kl(e,t,n))?e.sibling:null);il(t);break;case 19:var o=!!(128&e.flags);if((r=0!==(n&t.childLanes))||(Eo(e,t,n,!1),r=0!==(n&t.childLanes)),o){if(r)return Ql(e,t,n);t.flags|=128}if(null!==(o=t.memoizedState)&&(o.rendering=null,o.tail=null,o.lastEffect=null),$(ul,ul.current),r)break;return null;case 22:case 23:return t.lanes=0,Ll(e,t,n);case 24:wo(0,Oo,e.memoizedState.cache)}return Kl(e,t,n)}(e,t,n);Al=!!(131072&e.flags)}else Al=!1,ao&&1048576&t.flags&&eo(t,Wr,t.index);switch(t.lanes=0,t.tag){case 16:e:{e=t.pendingProps;var r=t.elementType,o=r._init;if(r=o(r._payload),t.type=r,"function"!=typeof r){if(null!=r){if((o=r.$$typeof)===S){t.tag=11,t=jl(null,t,r,e,n);break e}if(o===_){t.tag=14,t=Pl(null,t,r,e,n);break e}}throw t=L(r)||r,Error(i(306,t,""))}Mr(r)?(e=hl(r,e),t.tag=1,t=Ml(null,t,r,e,n)):(t.tag=0,t=Dl(null,t,r,e,n))}return t;case 0:return Dl(e,t,t.type,t.pendingProps,n);case 1:return Ml(e,t,r=t.type,o=hl(r,t.pendingProps),n);case 3:e:{if(V(t,t.stateNode.containerInfo),null===e)throw Error(i(387));r=t.pendingProps;var a=t.memoizedState;o=a.element,oa(e,t),da(t,r,null,n);var l=t.memoizedState;if(r=l.cache,wo(0,Oo,r),r!==a.cache&&xo(t,[Oo],n,!0),ua(),r=l.element,a.isDehydrated){if(a={element:r,isDehydrated:!1,cache:l.cache},t.updateQueue.baseState=a,t.memoizedState=a,256&t.flags){t=Il(e,t,r,n);break e}if(r!==o){ho(o=Er(Error(i(424)),t)),t=Il(e,t,r,n);break e}if(9===(e=t.stateNode.containerInfo).nodeType)e=e.body;else e="HTML"===e.nodeName?e.ownerDocument.body:e;for(oo=yd(e.firstChild),ro=t,ao=!0,io=null,lo=!0,n=rl(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|4096,n=n.sibling}else{if(mo(),r===o){t=Kl(e,t,n);break e}Tl(e,t,r,n)}t=t.child}return t;case 26:return Rl(e,t),null===e?(n=Td(t.type,null,t.pendingProps,null))?t.memoizedState=n:ao||(n=t.type,e=t.pendingProps,(r=rd(H.current).createElement(n))[Le]=t,r[Oe]=e,ed(r,n,e),Ge(r),t.stateNode=r):t.memoizedState=Td(t.type,e.memoizedProps,t.pendingProps,e.memoizedState),null;case 27:return Q(t),null===e&&ao&&(r=t.stateNode=wd(t.type,t.pendingProps,H.current),ro=t,lo=!0,o=oo,fd(t.type)?(bd=o,oo=yd(r.firstChild)):oo=o),Tl(e,t,t.pendingProps.children,n),Rl(e,t),null===e&&(t.flags|=4194304),t.child;case 5:return null===e&&ao&&((o=r=oo)&&(null!==(r=function(e,t,n,r){for(;1===e.nodeType;){var o=n;if(e.nodeName.toLowerCase()!==t.toLowerCase()){if(!r&&("INPUT"!==e.nodeName||"hidden"!==e.type))break}else if(r){if(!e[ze])switch(t){case"meta":if(!e.hasAttribute("itemprop"))break;return e;case"link":if("stylesheet"===(a=e.getAttribute("rel"))&&e.hasAttribute("data-precedence"))break;if(a!==o.rel||e.getAttribute("href")!==(null==o.href||""===o.href?null:o.href)||e.getAttribute("crossorigin")!==(null==o.crossOrigin?null:o.crossOrigin)||e.getAttribute("title")!==(null==o.title?null:o.title))break;return e;case"style":if(e.hasAttribute("data-precedence"))break;return e;case"script":if(((a=e.getAttribute("src"))!==(null==o.src?null:o.src)||e.getAttribute("type")!==(null==o.type?null:o.type)||e.getAttribute("crossorigin")!==(null==o.crossOrigin?null:o.crossOrigin))&&a&&e.hasAttribute("async")&&!e.hasAttribute("itemprop"))break;return e;default:return e}}else{if("input"!==t||"hidden"!==e.type)return e;var a=null==o.name?null:""+o.name;if("hidden"===o.type&&e.getAttribute("name")===a)return e}if(null===(e=yd(e.nextSibling)))break}return null}(r,t.type,t.pendingProps,lo))?(t.stateNode=r,ro=t,oo=yd(r.firstChild),lo=!1,o=!0):o=!1),o||co(t)),Q(t),o=t.type,a=t.pendingProps,l=null!==e?e.memoizedProps:null,r=a.children,id(o,a)?r=null:null!==l&&id(o,l)&&(t.flags|=32),null!==t.memoizedState&&(o=La(e,t,Da,null,null,n),Qd._currentValue=o),Rl(e,t),Tl(e,t,r,n),t.child;case 6:return null===e&&ao&&((e=n=oo)&&(null!==(n=function(e,t,n){if(""===t)return null;for(;3!==e.nodeType;){if((1!==e.nodeType||"INPUT"!==e.nodeName||"hidden"!==e.type)&&!n)return null;if(null===(e=yd(e.nextSibling)))return null}return e}(n,t.pendingProps,lo))?(t.stateNode=n,ro=t,oo=null,e=!0):e=!1),e||co(t)),null;case 13:return Ul(e,t,n);case 4:return V(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=nl(t,null,r,n):Tl(e,t,r,n),t.child;case 11:return jl(e,t,t.type,t.pendingProps,n);case 7:return Tl(e,t,t.pendingProps,n),t.child;case 8:case 12:return Tl(e,t,t.pendingProps.children,n),t.child;case 10:return r=t.pendingProps,wo(0,t.type,r.value),Tl(e,t,r.children,n),t.child;case 9:return o=t.type._context,r=t.pendingProps.children,Co(t),r=r(o=Ao(o)),t.flags|=1,Tl(e,t,r,n),t.child;case 14:return Pl(e,t,t.type,t.pendingProps,n);case 15:return Nl(e,t,t.type,t.pendingProps,n);case 19:return Ql(e,t,n);case 31:return r=t.pendingProps,n=t.mode,r={mode:r.mode,children:r.children},null===e?((n=Hl(r,n)).ref=t.ref,t.child=n,n.return=t,t=n):((n=Ir(e.child,r)).ref=t.ref,t.child=n,n.return=t,t=n),t;case 22:return Ll(e,t,n);case 24:return Co(t),r=Ao(Oo),null===e?(null===(o=qo())&&(o=rc,a=Ro(),o.pooledCache=a,a.refCount++,null!==a&&(o.pooledCacheLanes|=n),o=a),t.memoizedState={parent:r,cache:o},ra(t),wo(0,Oo,o)):(0!==(e.lanes&n)&&(oa(e,t),da(t,null,null,n),ua()),o=e.memoizedState,a=t.memoizedState,o.parent!==r?(o={parent:r,cache:r},t.memoizedState=o,0===t.lanes&&(t.memoizedState=t.updateQueue.baseState=o),wo(0,Oo,r)):(r=a.cache,wo(0,Oo,r),r!==o.cache&&xo(t,[Oo],n,!0))),Tl(e,t,t.pendingProps.children,n),t.child;case 29:throw t.pendingProps}throw Error(i(156,t.tag))}function Zl(e){e.flags|=4}function Jl(e,t){if("stylesheet"!==t.type||4&t.state.loading)e.flags&=-16777217;else if(e.flags|=16777216,!$d(t)){if(null!==(t=ol.current)&&((4194048&ac)===ac?null!==al:(62914560&ac)!==ac&&!(536870912&ac)||t!==al))throw Jo=Ko,Wo;e.flags|=8192}}function es(e,t){null!==t&&(e.flags|=4),16384&e.flags&&(t=22!==e.tag?xe():536870912,e.lanes|=t,yc|=t)}function ts(e,t){if(!ao)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function ns(e){var t=null!==e.alternate&&e.alternate.child===e.child,n=0,r=0;if(t)for(var o=e.child;null!==o;)n|=o.lanes|o.childLanes,r|=65011712&o.subtreeFlags,r|=65011712&o.flags,o.return=e,o=o.sibling;else for(o=e.child;null!==o;)n|=o.lanes|o.childLanes,r|=o.subtreeFlags,r|=o.flags,o.return=e,o=o.sibling;return e.subtreeFlags|=r,e.childLanes=n,t}function rs(e,t,n){var r=t.pendingProps;switch(no(t),t.tag){case 31:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:case 1:return ns(t),null;case 3:return n=t.stateNode,r=null,null!==e&&(r=e.memoizedState.cache),t.memoizedState.cache!==r&&(t.flags|=2048),ko(Oo),W(),n.pendingContext&&(n.context=n.pendingContext,n.pendingContext=null),null!==e&&null!==e.child||(fo(t)?Zl(t):null===e||e.memoizedState.isDehydrated&&!(256&t.flags)||(t.flags|=1024,go())),ns(t),null;case 26:return n=t.memoizedState,null===e?(Zl(t),null!==n?(ns(t),Jl(t,n)):(ns(t),t.flags&=-16777217)):n?n!==e.memoizedState?(Zl(t),ns(t),Jl(t,n)):(ns(t),t.flags&=-16777217):(e.memoizedProps!==r&&Zl(t),ns(t),t.flags&=-16777217),null;case 27:K(t),n=H.current;var o=t.type;if(null!==e&&null!=t.stateNode)e.memoizedProps!==r&&Zl(t);else{if(!r){if(null===t.stateNode)throw Error(i(166));return ns(t),null}e=U.current,fo(t)?uo(t):(e=wd(o,r,n),t.stateNode=e,Zl(t))}return ns(t),null;case 5:if(K(t),n=t.type,null!==e&&null!=t.stateNode)e.memoizedProps!==r&&Zl(t);else{if(!r){if(null===t.stateNode)throw Error(i(166));return ns(t),null}if(e=U.current,fo(t))uo(t);else{switch(o=rd(H.current),e){case 1:e=o.createElementNS("http://www.w3.org/2000/svg",n);break;case 2:e=o.createElementNS("http://www.w3.org/1998/Math/MathML",n);break;default:switch(n){case"svg":e=o.createElementNS("http://www.w3.org/2000/svg",n);break;case"math":e=o.createElementNS("http://www.w3.org/1998/Math/MathML",n);break;case"script":(e=o.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild);break;case"select":e="string"==typeof r.is?o.createElement("select",{is:r.is}):o.createElement("select"),r.multiple?e.multiple=!0:r.size&&(e.size=r.size);break;default:e="string"==typeof r.is?o.createElement(n,{is:r.is}):o.createElement(n)}}e[Le]=t,e[Oe]=r;e:for(o=t.child;null!==o;){if(5===o.tag||6===o.tag)e.appendChild(o.stateNode);else if(4!==o.tag&&27!==o.tag&&null!==o.child){o.child.return=o,o=o.child;continue}if(o===t)break e;for(;null===o.sibling;){if(null===o.return||o.return===t)break e;o=o.return}o.sibling.return=o.return,o=o.sibling}t.stateNode=e;e:switch(ed(e,n,r),n){case"button":case"input":case"select":case"textarea":e=!!r.autoFocus;break e;case"img":e=!0;break e;default:e=!1}e&&Zl(t)}}return ns(t),t.flags&=-16777217,null;case 6:if(e&&null!=t.stateNode)e.memoizedProps!==r&&Zl(t);else{if("string"!=typeof r&&null===t.stateNode)throw Error(i(166));if(e=H.current,fo(t)){if(e=t.stateNode,n=t.memoizedProps,r=null,null!==(o=ro))switch(o.tag){case 27:case 5:r=o.memoizedProps}e[Le]=t,(e=!!(e.nodeValue===n||null!==r&&!0===r.suppressHydrationWarning||Yu(e.nodeValue,n)))||co(t)}else(e=rd(e).createTextNode(r))[Le]=t,t.stateNode=e}return ns(t),null;case 13:if(r=t.memoizedState,null===e||null!==e.memoizedState&&null!==e.memoizedState.dehydrated){if(o=fo(t),null!==r&&null!==r.dehydrated){if(null===e){if(!o)throw Error(i(318));if(!(o=null!==(o=t.memoizedState)?o.dehydrated:null))throw Error(i(317));o[Le]=t}else mo(),!(128&t.flags)&&(t.memoizedState=null),t.flags|=4;ns(t),o=!1}else o=go(),null!==e&&null!==e.memoizedState&&(e.memoizedState.hydrationErrors=o),o=!0;if(!o)return 256&t.flags?(cl(t),t):(cl(t),null)}if(cl(t),128&t.flags)return t.lanes=n,t;if(n=null!==r,e=null!==e&&null!==e.memoizedState,n){o=null,null!==(r=t.child).alternate&&null!==r.alternate.memoizedState&&null!==r.alternate.memoizedState.cachePool&&(o=r.alternate.memoizedState.cachePool.pool);var a=null;null!==r.memoizedState&&null!==r.memoizedState.cachePool&&(a=r.memoizedState.cachePool.pool),a!==o&&(r.flags|=2048)}return n!==e&&n&&(t.child.flags|=8192),es(t,t.updateQueue),ns(t),null;case 4:return W(),null===e&&Bu(t.stateNode.containerInfo),ns(t),null;case 10:return ko(t.type),ns(t),null;case 19:if(B(ul),null===(o=t.memoizedState))return ns(t),null;if(r=!!(128&t.flags),null===(a=o.rendering))if(r)ts(o,!1);else{if(0!==pc||null!==e&&128&e.flags)for(e=t.child;null!==e;){if(null!==(a=dl(e))){for(t.flags|=128,ts(o,!1),e=a.updateQueue,t.updateQueue=e,es(t,e),t.subtreeFlags=0,e=n,n=t.child;null!==n;)zr(n,e),n=n.sibling;return $(ul,1&ul.current|2),t.child}e=e.sibling}null!==o.tail&&te()>Sc&&(t.flags|=128,r=!0,ts(o,!1),t.lanes=4194304)}else{if(!r)if(null!==(e=dl(a))){if(t.flags|=128,r=!0,e=e.updateQueue,t.updateQueue=e,es(t,e),ts(o,!0),null===o.tail&&"hidden"===o.tailMode&&!a.alternate&&!ao)return ns(t),null}else 2*te()-o.renderingStartTime>Sc&&536870912!==n&&(t.flags|=128,r=!0,ts(o,!1),t.lanes=4194304);o.isBackwards?(a.sibling=t.child,t.child=a):(null!==(e=o.last)?e.sibling=a:t.child=a,o.last=a)}return null!==o.tail?(t=o.tail,o.rendering=t,o.tail=t.sibling,o.renderingStartTime=te(),t.sibling=null,e=ul.current,$(ul,r?1&e|2:1&e),t):(ns(t),null);case 22:case 23:return cl(t),ba(),r=null!==t.memoizedState,null!==e?null!==e.memoizedState!==r&&(t.flags|=8192):r&&(t.flags|=8192),r?!!(536870912&n)&&!(128&t.flags)&&(ns(t),6&t.subtreeFlags&&(t.flags|=8192)):ns(t),null!==(n=t.updateQueue)&&es(t,n.retryQueue),n=null,null!==e&&null!==e.memoizedState&&null!==e.memoizedState.cachePool&&(n=e.memoizedState.cachePool.pool),r=null,null!==t.memoizedState&&null!==t.memoizedState.cachePool&&(r=t.memoizedState.cachePool.pool),r!==n&&(t.flags|=2048),null!==e&&B(Uo),null;case 24:return n=null,null!==e&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),ko(Oo),ns(t),null;case 25:case 30:return null}throw Error(i(156,t.tag))}function os(e,t){switch(no(t),t.tag){case 1:return 65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 3:return ko(Oo),W(),65536&(e=t.flags)&&!(128&e)?(t.flags=-65537&e|128,t):null;case 26:case 27:case 5:return K(t),null;case 13:if(cl(t),null!==(e=t.memoizedState)&&null!==e.dehydrated){if(null===t.alternate)throw Error(i(340));mo()}return 65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 19:return B(ul),null;case 4:return W(),null;case 10:return ko(t.type),null;case 22:case 23:return cl(t),ba(),null!==e&&B(Uo),65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 24:return ko(Oo),null;default:return null}}function as(e,t){switch(no(t),t.tag){case 3:ko(Oo),W();break;case 26:case 27:case 5:K(t);break;case 4:W();break;case 13:cl(t);break;case 19:B(ul);break;case 10:ko(t.type);break;case 22:case 23:cl(t),ba(),null!==e&&B(Uo);break;case 24:ko(Oo)}}function is(e,t){try{var n=t.updateQueue,r=null!==n?n.lastEffect:null;if(null!==r){var o=r.next;n=o;do{if((n.tag&e)===e){r=void 0;var a=n.create,i=n.inst;r=a(),i.destroy=r}n=n.next}while(n!==o)}}catch(l){uu(t,t.return,l)}}function ls(e,t,n){try{var r=t.updateQueue,o=null!==r?r.lastEffect:null;if(null!==o){var a=o.next;r=a;do{if((r.tag&e)===e){var i=r.inst,l=i.destroy;if(void 0!==l){i.destroy=void 0,o=t;var s=n,c=l;try{c()}catch(u){uu(o,s,u)}}}r=r.next}while(r!==a)}}catch(u){uu(t,t.return,u)}}function ss(e){var t=e.updateQueue;if(null!==t){var n=e.stateNode;try{fa(t,n)}catch(r){uu(e,e.return,r)}}}function cs(e,t,n){n.props=hl(e.type,e.memoizedProps),n.state=e.memoizedState;try{n.componentWillUnmount()}catch(r){uu(e,t,r)}}function us(e,t){try{var n=e.ref;if(null!==n){switch(e.tag){case 26:case 27:case 5:var r=e.stateNode;break;default:r=e.stateNode}"function"==typeof n?e.refCleanup=n(r):n.current=r}}catch(o){uu(e,t,o)}}function ds(e,t){var n=e.ref,r=e.refCleanup;if(null!==n)if("function"==typeof r)try{r()}catch(o){uu(e,t,o)}finally{e.refCleanup=null,null!=(e=e.alternate)&&(e.refCleanup=null)}else if("function"==typeof n)try{n(null)}catch(a){uu(e,t,a)}else n.current=null}function ps(e){var t=e.type,n=e.memoizedProps,r=e.stateNode;try{e:switch(t){case"button":case"input":case"select":case"textarea":n.autoFocus&&r.focus();break e;case"img":n.src?r.src=n.src:n.srcSet&&(r.srcset=n.srcSet)}}catch(o){uu(e,e.return,o)}}function fs(e,t,n){try{var r=e.stateNode;!function(e,t,n,r){switch(t){case"div":case"span":case"svg":case"path":case"a":case"g":case"p":case"li":break;case"input":var o=null,a=null,l=null,s=null,c=null,u=null,d=null;for(m in n){var p=n[m];if(n.hasOwnProperty(m)&&null!=p)switch(m){case"checked":case"value":break;case"defaultValue":c=p;default:r.hasOwnProperty(m)||Zu(e,t,m,null,r,p)}}for(var f in r){var m=r[f];if(p=n[f],r.hasOwnProperty(f)&&(null!=m||null!=p))switch(f){case"type":a=m;break;case"name":o=m;break;case"checked":u=m;break;case"defaultChecked":d=m;break;case"value":l=m;break;case"defaultValue":s=m;break;case"children":case"dangerouslySetInnerHTML":if(null!=m)throw Error(i(137,t));break;default:m!==p&&Zu(e,t,f,m,r,p)}}return void ht(e,l,s,c,u,d,a,o);case"select":for(a in m=l=s=f=null,n)if(c=n[a],n.hasOwnProperty(a)&&null!=c)switch(a){case"value":break;case"multiple":m=c;default:r.hasOwnProperty(a)||Zu(e,t,a,null,r,c)}for(o in r)if(a=r[o],c=n[o],r.hasOwnProperty(o)&&(null!=a||null!=c))switch(o){case"value":f=a;break;case"defaultValue":s=a;break;case"multiple":l=a;default:a!==c&&Zu(e,t,o,a,r,c)}return t=s,n=l,r=m,void(null!=f?vt(e,!!n,f,!1):!!r!=!!n&&(null!=t?vt(e,!!n,t,!0):vt(e,!!n,n?[]:"",!1)));case"textarea":for(s in m=f=null,n)if(o=n[s],n.hasOwnProperty(s)&&null!=o&&!r.hasOwnProperty(s))switch(s){case"value":case"children":break;default:Zu(e,t,s,null,r,o)}for(l in r)if(o=r[l],a=n[l],r.hasOwnProperty(l)&&(null!=o||null!=a))switch(l){case"value":f=o;break;case"defaultValue":m=o;break;case"children":break;case"dangerouslySetInnerHTML":if(null!=o)throw Error(i(91));break;default:o!==a&&Zu(e,t,l,o,r,a)}return void wt(e,f,m);case"option":for(var g in n)if(f=n[g],n.hasOwnProperty(g)&&null!=f&&!r.hasOwnProperty(g))if("selected"===g)e.selected=!1;else Zu(e,t,g,null,r,f);for(c in r)if(f=r[c],m=n[c],r.hasOwnProperty(c)&&f!==m&&(null!=f||null!=m))if("selected"===c)e.selected=f&&"function"!=typeof f&&"symbol"!=typeof f;else Zu(e,t,c,f,r,m);return;case"img":case"link":case"area":case"base":case"br":case"col":case"embed":case"hr":case"keygen":case"meta":case"param":case"source":case"track":case"wbr":case"menuitem":for(var h in n)f=n[h],n.hasOwnProperty(h)&&null!=f&&!r.hasOwnProperty(h)&&Zu(e,t,h,null,r,f);for(u in r)if(f=r[u],m=n[u],r.hasOwnProperty(u)&&f!==m&&(null!=f||null!=m))switch(u){case"children":case"dangerouslySetInnerHTML":if(null!=f)throw Error(i(137,t));break;default:Zu(e,t,u,f,r,m)}return;default:if(Ct(t)){for(var y in n)f=n[y],n.hasOwnProperty(y)&&void 0!==f&&!r.hasOwnProperty(y)&&Ju(e,t,y,void 0,r,f);for(d in r)f=r[d],m=n[d],!r.hasOwnProperty(d)||f===m||void 0===f&&void 0===m||Ju(e,t,d,f,r,m);return}}for(var b in n)f=n[b],n.hasOwnProperty(b)&&null!=f&&!r.hasOwnProperty(b)&&Zu(e,t,b,null,r,f);for(p in r)f=r[p],m=n[p],!r.hasOwnProperty(p)||f===m||null==f&&null==m||Zu(e,t,p,f,r,m)}(r,e.type,n,t),r[Oe]=t}catch(o){uu(e,e.return,o)}}function ms(e){return 5===e.tag||3===e.tag||26===e.tag||27===e.tag&&fd(e.type)||4===e.tag}function gs(e){e:for(;;){for(;null===e.sibling;){if(null===e.return||ms(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;5!==e.tag&&6!==e.tag&&18!==e.tag;){if(27===e.tag&&fd(e.type))continue e;if(2&e.flags)continue e;if(null===e.child||4===e.tag)continue e;e.child.return=e,e=e.child}if(!(2&e.flags))return e.stateNode}}function hs(e,t,n){var r=e.tag;if(5===r||6===r)e=e.stateNode,t?(9===n.nodeType?n.body:"HTML"===n.nodeName?n.ownerDocument.body:n).insertBefore(e,t):((t=9===n.nodeType?n.body:"HTML"===n.nodeName?n.ownerDocument.body:n).appendChild(e),null!=(n=n._reactRootContainer)||null!==t.onclick||(t.onclick=Xu));else if(4!==r&&(27===r&&fd(e.type)&&(n=e.stateNode,t=null),null!==(e=e.child)))for(hs(e,t,n),e=e.sibling;null!==e;)hs(e,t,n),e=e.sibling}function ys(e,t,n){var r=e.tag;if(5===r||6===r)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&(27===r&&fd(e.type)&&(n=e.stateNode),null!==(e=e.child)))for(ys(e,t,n),e=e.sibling;null!==e;)ys(e,t,n),e=e.sibling}function bs(e){var t=e.stateNode,n=e.memoizedProps;try{for(var r=e.type,o=t.attributes;o.length;)t.removeAttributeNode(o[0]);ed(t,r,n),t[Le]=e,t[Oe]=n}catch(a){uu(e,e.return,a)}}var vs=!1,ws=!1,ks=!1,Ss="function"==typeof WeakSet?WeakSet:Set,xs=null;function Es(e,t,n){var r=n.flags;switch(n.tag){case 0:case 11:case 15:Ms(e,n),4&r&&is(5,n);break;case 1:if(Ms(e,n),4&r)if(e=n.stateNode,null===t)try{e.componentDidMount()}catch(i){uu(n,n.return,i)}else{var o=hl(n.type,t.memoizedProps);t=t.memoizedState;try{e.componentDidUpdate(o,t,e.__reactInternalSnapshotBeforeUpdate)}catch(l){uu(n,n.return,l)}}64&r&&ss(n),512&r&&us(n,n.return);break;case 3:if(Ms(e,n),64&r&&null!==(e=n.updateQueue)){if(t=null,null!==n.child)switch(n.child.tag){case 27:case 5:case 1:t=n.child.stateNode}try{fa(e,t)}catch(i){uu(n,n.return,i)}}break;case 27:null===t&&4&r&&bs(n);case 26:case 5:Ms(e,n),null===t&&4&r&&ps(n),512&r&&us(n,n.return);break;case 12:Ms(e,n);break;case 13:Ms(e,n),4&r&&Ps(e,n),64&r&&(null!==(e=n.memoizedState)&&(null!==(e=e.dehydrated)&&function(e,t){var n=e.ownerDocument;if("$?"!==e.data||"complete"===n.readyState)t();else{var r=function(){t(),n.removeEventListener("DOMContentLoaded",r)};n.addEventListener("DOMContentLoaded",r),e._reactRetry=r}}(e,n=mu.bind(null,n))));break;case 22:if(!(r=null!==n.memoizedState||vs)){t=null!==t&&null!==t.memoizedState||ws,o=vs;var a=ws;vs=r,(ws=t)&&!a?zs(e,n,!!(8772&n.subtreeFlags)):Ms(e,n),vs=o,ws=a}break;case 30:break;default:Ms(e,n)}}function _s(e){var t=e.alternate;null!==t&&(e.alternate=null,_s(t)),e.child=null,e.deletions=null,e.sibling=null,5===e.tag&&(null!==(t=e.stateNode)&&Be(t)),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}var Cs=null,As=!1;function Ts(e,t,n){for(n=n.child;null!==n;)js(e,t,n),n=n.sibling}function js(e,t,n){if(de&&"function"==typeof de.onCommitFiberUnmount)try{de.onCommitFiberUnmount(ue,n)}catch(a){}switch(n.tag){case 26:ws||ds(n,t),Ts(e,t,n),n.memoizedState?n.memoizedState.count--:n.stateNode&&(n=n.stateNode).parentNode.removeChild(n);break;case 27:ws||ds(n,t);var r=Cs,o=As;fd(n.type)&&(Cs=n.stateNode,As=!1),Ts(e,t,n),kd(n.stateNode),Cs=r,As=o;break;case 5:ws||ds(n,t);case 6:if(r=Cs,o=As,Cs=null,Ts(e,t,n),As=o,null!==(Cs=r))if(As)try{(9===Cs.nodeType?Cs.body:"HTML"===Cs.nodeName?Cs.ownerDocument.body:Cs).removeChild(n.stateNode)}catch(i){uu(n,t,i)}else try{Cs.removeChild(n.stateNode)}catch(i){uu(n,t,i)}break;case 18:null!==Cs&&(As?(md(9===(e=Cs).nodeType?e.body:"HTML"===e.nodeName?e.ownerDocument.body:e,n.stateNode),Ap(e)):md(Cs,n.stateNode));break;case 4:r=Cs,o=As,Cs=n.stateNode.containerInfo,As=!0,Ts(e,t,n),Cs=r,As=o;break;case 0:case 11:case 14:case 15:ws||ls(2,n,t),ws||ls(4,n,t),Ts(e,t,n);break;case 1:ws||(ds(n,t),"function"==typeof(r=n.stateNode).componentWillUnmount&&cs(n,t,r)),Ts(e,t,n);break;case 21:Ts(e,t,n);break;case 22:ws=(r=ws)||null!==n.memoizedState,Ts(e,t,n),ws=r;break;default:Ts(e,t,n)}}function Ps(e,t){if(null===t.memoizedState&&(null!==(e=t.alternate)&&(null!==(e=e.memoizedState)&&null!==(e=e.dehydrated))))try{Ap(e)}catch(n){uu(t,t.return,n)}}function Ns(e,t){var n=function(e){switch(e.tag){case 13:case 19:var t=e.stateNode;return null===t&&(t=e.stateNode=new Ss),t;case 22:return null===(t=(e=e.stateNode)._retryCache)&&(t=e._retryCache=new Ss),t;default:throw Error(i(435,e.tag))}}(e);t.forEach(function(t){var r=gu.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))})}function Ls(e,t){var n=t.deletions;if(null!==n)for(var r=0;r<n.length;r++){var o=n[r],a=e,l=t,s=l;e:for(;null!==s;){switch(s.tag){case 27:if(fd(s.type)){Cs=s.stateNode,As=!1;break e}break;case 5:Cs=s.stateNode,As=!1;break e;case 3:case 4:Cs=s.stateNode.containerInfo,As=!0;break e}s=s.return}if(null===Cs)throw Error(i(160));js(a,l,o),Cs=null,As=!1,null!==(a=o.alternate)&&(a.return=null),o.return=null}if(13878&t.subtreeFlags)for(t=t.child;null!==t;)Rs(t,e),t=t.sibling}var Os=null;function Rs(e,t){var n=e.alternate,r=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:Ls(t,e),Ds(e),4&r&&(ls(3,e,e.return),is(3,e),ls(5,e,e.return));break;case 1:Ls(t,e),Ds(e),512&r&&(ws||null===n||ds(n,n.return)),64&r&&vs&&(null!==(e=e.updateQueue)&&(null!==(r=e.callbacks)&&(n=e.shared.hiddenCallbacks,e.shared.hiddenCallbacks=null===n?r:n.concat(r))));break;case 26:var o=Os;if(Ls(t,e),Ds(e),512&r&&(ws||null===n||ds(n,n.return)),4&r){var a=null!==n?n.memoizedState:null;if(r=e.memoizedState,null===n)if(null===r)if(null===e.stateNode){e:{r=e.type,n=e.memoizedProps,o=o.ownerDocument||o;t:switch(r){case"title":(!(a=o.getElementsByTagName("title")[0])||a[ze]||a[Le]||"http://www.w3.org/2000/svg"===a.namespaceURI||a.hasAttribute("itemprop"))&&(a=o.createElement(r),o.head.insertBefore(a,o.querySelector("head > title"))),ed(a,r,n),a[Le]=e,Ge(a),r=a;break e;case"link":var l=zd("link","href",o).get(r+(n.href||""));if(l)for(var s=0;s<l.length;s++)if((a=l[s]).getAttribute("href")===(null==n.href||""===n.href?null:n.href)&&a.getAttribute("rel")===(null==n.rel?null:n.rel)&&a.getAttribute("title")===(null==n.title?null:n.title)&&a.getAttribute("crossorigin")===(null==n.crossOrigin?null:n.crossOrigin)){l.splice(s,1);break t}ed(a=o.createElement(r),r,n),o.head.appendChild(a);break;case"meta":if(l=zd("meta","content",o).get(r+(n.content||"")))for(s=0;s<l.length;s++)if((a=l[s]).getAttribute("content")===(null==n.content?null:""+n.content)&&a.getAttribute("name")===(null==n.name?null:n.name)&&a.getAttribute("property")===(null==n.property?null:n.property)&&a.getAttribute("http-equiv")===(null==n.httpEquiv?null:n.httpEquiv)&&a.getAttribute("charset")===(null==n.charSet?null:n.charSet)){l.splice(s,1);break t}ed(a=o.createElement(r),r,n),o.head.appendChild(a);break;default:throw Error(i(468,r))}a[Le]=e,Ge(a),r=a}e.stateNode=r}else Bd(o,e.type,e.stateNode);else e.stateNode=Rd(o,r,e.memoizedProps);else a!==r?(null===a?null!==n.stateNode&&(n=n.stateNode).parentNode.removeChild(n):a.count--,null===r?Bd(o,e.type,e.stateNode):Rd(o,r,e.memoizedProps)):null===r&&null!==e.stateNode&&fs(e,e.memoizedProps,n.memoizedProps)}break;case 27:Ls(t,e),Ds(e),512&r&&(ws||null===n||ds(n,n.return)),null!==n&&4&r&&fs(e,e.memoizedProps,n.memoizedProps);break;case 5:if(Ls(t,e),Ds(e),512&r&&(ws||null===n||ds(n,n.return)),32&e.flags){o=e.stateNode;try{St(o,"")}catch(m){uu(e,e.return,m)}}4&r&&null!=e.stateNode&&fs(e,o=e.memoizedProps,null!==n?n.memoizedProps:o),1024&r&&(ks=!0);break;case 6:if(Ls(t,e),Ds(e),4&r){if(null===e.stateNode)throw Error(i(162));r=e.memoizedProps,n=e.stateNode;try{n.nodeValue=r}catch(m){uu(e,e.return,m)}}break;case 3:if(Id=null,o=Os,Os=Ed(t.containerInfo),Ls(t,e),Os=o,Ds(e),4&r&&null!==n&&n.memoizedState.isDehydrated)try{Ap(t.containerInfo)}catch(m){uu(e,e.return,m)}ks&&(ks=!1,Fs(e));break;case 4:r=Os,Os=Ed(e.stateNode.containerInfo),Ls(t,e),Ds(e),Os=r;break;case 12:default:Ls(t,e),Ds(e);break;case 13:Ls(t,e),Ds(e),8192&e.child.flags&&null!==e.memoizedState!=(null!==n&&null!==n.memoizedState)&&(kc=te()),4&r&&(null!==(r=e.updateQueue)&&(e.updateQueue=null,Ns(e,r)));break;case 22:o=null!==e.memoizedState;var c=null!==n&&null!==n.memoizedState,u=vs,d=ws;if(vs=u||o,ws=d||c,Ls(t,e),ws=d,vs=u,Ds(e),8192&r)e:for(t=e.stateNode,t._visibility=o?-2&t._visibility:1|t._visibility,o&&(null===n||c||vs||ws||Is(e)),n=null,t=e;;){if(5===t.tag||26===t.tag){if(null===n){c=n=t;try{if(a=c.stateNode,o)"function"==typeof(l=a.style).setProperty?l.setProperty("display","none","important"):l.display="none";else{s=c.stateNode;var p=c.memoizedProps.style,f=null!=p&&p.hasOwnProperty("display")?p.display:null;s.style.display=null==f||"boolean"==typeof f?"":(""+f).trim()}}catch(m){uu(c,c.return,m)}}}else if(6===t.tag){if(null===n){c=t;try{c.stateNode.nodeValue=o?"":c.memoizedProps}catch(m){uu(c,c.return,m)}}}else if((22!==t.tag&&23!==t.tag||null===t.memoizedState||t===e)&&null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break e;for(;null===t.sibling;){if(null===t.return||t.return===e)break e;n===t&&(n=null),t=t.return}n===t&&(n=null),t.sibling.return=t.return,t=t.sibling}4&r&&(null!==(r=e.updateQueue)&&(null!==(n=r.retryQueue)&&(r.retryQueue=null,Ns(e,n))));break;case 19:Ls(t,e),Ds(e),4&r&&(null!==(r=e.updateQueue)&&(e.updateQueue=null,Ns(e,r)));case 30:case 21:}}function Ds(e){var t=e.flags;if(2&t){try{for(var n,r=e.return;null!==r;){if(ms(r)){n=r;break}r=r.return}if(null==n)throw Error(i(160));switch(n.tag){case 27:var o=n.stateNode;ys(e,gs(e),o);break;case 5:var a=n.stateNode;32&n.flags&&(St(a,""),n.flags&=-33),ys(e,gs(e),a);break;case 3:case 4:var l=n.stateNode.containerInfo;hs(e,gs(e),l);break;default:throw Error(i(161))}}catch(s){uu(e,e.return,s)}e.flags&=-3}4096&t&&(e.flags&=-4097)}function Fs(e){if(1024&e.subtreeFlags)for(e=e.child;null!==e;){var t=e;Fs(t),5===t.tag&&1024&t.flags&&t.stateNode.reset(),e=e.sibling}}function Ms(e,t){if(8772&t.subtreeFlags)for(t=t.child;null!==t;)Es(e,t.alternate,t),t=t.sibling}function Is(e){for(e=e.child;null!==e;){var t=e;switch(t.tag){case 0:case 11:case 14:case 15:ls(4,t,t.return),Is(t);break;case 1:ds(t,t.return);var n=t.stateNode;"function"==typeof n.componentWillUnmount&&cs(t,t.return,n),Is(t);break;case 27:kd(t.stateNode);case 26:case 5:ds(t,t.return),Is(t);break;case 22:null===t.memoizedState&&Is(t);break;default:Is(t)}e=e.sibling}}function zs(e,t,n){for(n=n&&!!(8772&t.subtreeFlags),t=t.child;null!==t;){var r=t.alternate,o=e,a=t,i=a.flags;switch(a.tag){case 0:case 11:case 15:zs(o,a,n),is(4,a);break;case 1:if(zs(o,a,n),"function"==typeof(o=(r=a).stateNode).componentDidMount)try{o.componentDidMount()}catch(c){uu(r,r.return,c)}if(null!==(o=(r=a).updateQueue)){var l=r.stateNode;try{var s=o.shared.hiddenCallbacks;if(null!==s)for(o.shared.hiddenCallbacks=null,o=0;o<s.length;o++)pa(s[o],l)}catch(c){uu(r,r.return,c)}}n&&64&i&&ss(a),us(a,a.return);break;case 27:bs(a);case 26:case 5:zs(o,a,n),n&&null===r&&4&i&&ps(a),us(a,a.return);break;case 12:zs(o,a,n);break;case 13:zs(o,a,n),n&&4&i&&Ps(o,a);break;case 22:null===a.memoizedState&&zs(o,a,n),us(a,a.return);break;case 30:break;default:zs(o,a,n)}t=t.sibling}}function Bs(e,t){var n=null;null!==e&&null!==e.memoizedState&&null!==e.memoizedState.cachePool&&(n=e.memoizedState.cachePool.pool),e=null,null!==t.memoizedState&&null!==t.memoizedState.cachePool&&(e=t.memoizedState.cachePool.pool),e!==n&&(null!=e&&e.refCount++,null!=n&&Do(n))}function $s(e,t){e=null,null!==t.alternate&&(e=t.alternate.memoizedState.cache),(t=t.memoizedState.cache)!==e&&(t.refCount++,null!=e&&Do(e))}function Us(e,t,n,r){if(10256&t.subtreeFlags)for(t=t.child;null!==t;)qs(e,t,n,r),t=t.sibling}function qs(e,t,n,r){var o=t.flags;switch(t.tag){case 0:case 11:case 15:Us(e,t,n,r),2048&o&&is(9,t);break;case 1:case 13:default:Us(e,t,n,r);break;case 3:Us(e,t,n,r),2048&o&&(e=null,null!==t.alternate&&(e=t.alternate.memoizedState.cache),(t=t.memoizedState.cache)!==e&&(t.refCount++,null!=e&&Do(e)));break;case 12:if(2048&o){Us(e,t,n,r),e=t.stateNode;try{var a=t.memoizedProps,i=a.id,l=a.onPostCommit;"function"==typeof l&&l(i,null===t.alternate?"mount":"update",e.passiveEffectDuration,-0)}catch(s){uu(t,t.return,s)}}else Us(e,t,n,r);break;case 23:break;case 22:a=t.stateNode,i=t.alternate,null!==t.memoizedState?2&a._visibility?Us(e,t,n,r):Gs(e,t):2&a._visibility?Us(e,t,n,r):(a._visibility|=2,Hs(e,t,n,r,!!(10256&t.subtreeFlags))),2048&o&&Bs(i,t);break;case 24:Us(e,t,n,r),2048&o&&$s(t.alternate,t)}}function Hs(e,t,n,r,o){for(o=o&&!!(10256&t.subtreeFlags),t=t.child;null!==t;){var a=e,i=t,l=n,s=r,c=i.flags;switch(i.tag){case 0:case 11:case 15:Hs(a,i,l,s,o),is(8,i);break;case 23:break;case 22:var u=i.stateNode;null!==i.memoizedState?2&u._visibility?Hs(a,i,l,s,o):Gs(a,i):(u._visibility|=2,Hs(a,i,l,s,o)),o&&2048&c&&Bs(i.alternate,i);break;case 24:Hs(a,i,l,s,o),o&&2048&c&&$s(i.alternate,i);break;default:Hs(a,i,l,s,o)}t=t.sibling}}function Gs(e,t){if(10256&t.subtreeFlags)for(t=t.child;null!==t;){var n=e,r=t,o=r.flags;switch(r.tag){case 22:Gs(n,r),2048&o&&Bs(r.alternate,r);break;case 24:Gs(n,r),2048&o&&$s(r.alternate,r);break;default:Gs(n,r)}t=t.sibling}}var Vs=8192;function Ws(e){if(e.subtreeFlags&Vs)for(e=e.child;null!==e;)Qs(e),e=e.sibling}function Qs(e){switch(e.tag){case 26:Ws(e),e.flags&Vs&&null!==e.memoizedState&&function(e,t,n){if(null===Ud)throw Error(i(475));var r=Ud;if(!("stylesheet"!==t.type||"string"==typeof n.media&&!1===matchMedia(n.media).matches||4&t.state.loading)){if(null===t.instance){var o=jd(n.href),a=e.querySelector(Pd(o));if(a)return null!==(e=a._p)&&"object"==typeof e&&"function"==typeof e.then&&(r.count++,r=Hd.bind(r),e.then(r,r)),t.state.loading|=4,t.instance=a,void Ge(a);a=e.ownerDocument||e,n=Nd(n),(o=Sd.get(o))&&Fd(n,o),Ge(a=a.createElement("link"));var l=a;l._p=new Promise(function(e,t){l.onload=e,l.onerror=t}),ed(a,"link",n),t.instance=a}null===r.stylesheets&&(r.stylesheets=new Map),r.stylesheets.set(t,e),(e=t.state.preload)&&!(3&t.state.loading)&&(r.count++,t=Hd.bind(r),e.addEventListener("load",t),e.addEventListener("error",t))}}(Os,e.memoizedState,e.memoizedProps);break;case 5:default:Ws(e);break;case 3:case 4:var t=Os;Os=Ed(e.stateNode.containerInfo),Ws(e),Os=t;break;case 22:null===e.memoizedState&&(null!==(t=e.alternate)&&null!==t.memoizedState?(t=Vs,Vs=16777216,Ws(e),Vs=t):Ws(e))}}function Ks(e){var t=e.alternate;if(null!==t&&null!==(e=t.child)){t.child=null;do{t=e.sibling,e.sibling=null,e=t}while(null!==e)}}function Ys(e){var t=e.deletions;if(16&e.flags){if(null!==t)for(var n=0;n<t.length;n++){var r=t[n];xs=r,Js(r,e)}Ks(e)}if(10256&e.subtreeFlags)for(e=e.child;null!==e;)Xs(e),e=e.sibling}function Xs(e){switch(e.tag){case 0:case 11:case 15:Ys(e),2048&e.flags&&ls(9,e,e.return);break;case 3:case 12:default:Ys(e);break;case 22:var t=e.stateNode;null!==e.memoizedState&&2&t._visibility&&(null===e.return||13!==e.return.tag)?(t._visibility&=-3,Zs(e)):Ys(e)}}function Zs(e){var t=e.deletions;if(16&e.flags){if(null!==t)for(var n=0;n<t.length;n++){var r=t[n];xs=r,Js(r,e)}Ks(e)}for(e=e.child;null!==e;){switch((t=e).tag){case 0:case 11:case 15:ls(8,t,t.return),Zs(t);break;case 22:2&(n=t.stateNode)._visibility&&(n._visibility&=-3,Zs(t));break;default:Zs(t)}e=e.sibling}}function Js(e,t){for(;null!==xs;){var n=xs;switch(n.tag){case 0:case 11:case 15:ls(8,n,t);break;case 23:case 22:if(null!==n.memoizedState&&null!==n.memoizedState.cachePool){var r=n.memoizedState.cachePool.pool;null!=r&&r.refCount++}break;case 24:Do(n.memoizedState.cache)}if(null!==(r=n.child))r.return=n,xs=r;else e:for(n=e;null!==xs;){var o=(r=xs).sibling,a=r.return;if(_s(r),r===n){xs=null;break e}if(null!==o){o.return=a,xs=o;break e}xs=a}}}var ec={getCacheForType:function(e){var t=Ao(Oo),n=t.data.get(e);return void 0===n&&(n=e(),t.data.set(e,n)),n}},tc="function"==typeof WeakMap?WeakMap:Map,nc=0,rc=null,oc=null,ac=0,ic=0,lc=null,sc=!1,cc=!1,uc=!1,dc=0,pc=0,fc=0,mc=0,gc=0,hc=0,yc=0,bc=null,vc=null,wc=!1,kc=0,Sc=1/0,xc=null,Ec=null,_c=0,Cc=null,Ac=null,Tc=0,jc=0,Pc=null,Nc=null,Lc=0,Oc=null;function Rc(){if(2&nc&&0!==ac)return ac&-ac;if(null!==R.T){return 0!==Io?Io:ju()}return Pe()}function Dc(){0===hc&&(hc=536870912&ac&&!ao?536870912:Se());var e=ol.current;return null!==e&&(e.flags|=32),hc}function Fc(e,t,n){(e!==rc||2!==ic&&9!==ic)&&null===e.cancelPendingCommit||(qc(e,0),Bc(e,ac,hc,!1)),_e(e,n),2&nc&&e===rc||(e===rc&&(!(2&nc)&&(mc|=n),4===pc&&Bc(e,ac,hc,!1)),Su(e))}function Mc(e,t,n){if(6&nc)throw Error(i(327));for(var r=!n&&!(124&t)&&0===(t&e.expiredLanes)||we(e,t),o=r?function(e,t){var n=nc;nc|=2;var r=Gc(),o=Vc();rc!==e||ac!==t?(xc=null,Sc=te()+500,qc(e,t)):cc=we(e,t);e:for(;;)try{if(0!==ic&&null!==oc){t=oc;var a=lc;t:switch(ic){case 1:ic=0,lc=null,Jc(e,t,a,1);break;case 2:case 9:if(Yo(a)){ic=0,lc=null,Zc(t);break}t=function(){2!==ic&&9!==ic||rc!==e||(ic=7),Su(e)},a.then(t,t);break e;case 3:ic=7;break e;case 4:ic=5;break e;case 7:Yo(a)?(ic=0,lc=null,Zc(t)):(ic=0,lc=null,Jc(e,t,a,7));break;case 5:var l=null;switch(oc.tag){case 26:l=oc.memoizedState;case 5:case 27:var s=oc;if(!l||$d(l)){ic=0,lc=null;var c=s.sibling;if(null!==c)oc=c;else{var u=s.return;null!==u?(oc=u,eu(u)):oc=null}break t}}ic=0,lc=null,Jc(e,t,a,5);break;case 6:ic=0,lc=null,Jc(e,t,a,6);break;case 8:Uc(),pc=6;break e;default:throw Error(i(462))}}Yc();break}catch(d){Hc(e,d)}return vo=bo=null,R.H=r,R.A=o,nc=n,null!==oc?0:(rc=null,ac=0,Tr(),pc)}(e,t):Qc(e,t,!0),a=r;;){if(0===o){cc&&!r&&Bc(e,t,0,!1);break}if(n=e.current.alternate,!a||zc(n)){if(2===o){if(a=t,e.errorRecoveryDisabledLanes&a)var l=0;else l=0!==(l=-536870913&e.pendingLanes)?l:536870912&l?536870912:0;if(0!==l){t=l;e:{var s=e;o=bc;var c=s.current.memoizedState.isDehydrated;if(c&&(qc(s,l).flags|=256),2!==(l=Qc(s,l,!1))){if(uc&&!c){s.errorRecoveryDisabledLanes|=a,mc|=a,o=4;break e}a=vc,vc=o,null!==a&&(null===vc?vc=a:vc.push.apply(vc,a))}o=l}if(a=!1,2!==o)continue}}if(1===o){qc(e,0),Bc(e,t,0,!0);break}e:{switch(r=e,a=o){case 0:case 1:throw Error(i(345));case 4:if((4194048&t)!==t)break;case 6:Bc(r,t,hc,!sc);break e;case 2:vc=null;break;case 3:case 5:break;default:throw Error(i(329))}if((62914560&t)===t&&10<(o=kc+300-te())){if(Bc(r,t,hc,!sc),0!==ve(r,0,!0))break e;r.timeoutHandle=sd(Ic.bind(null,r,n,vc,xc,wc,t,hc,mc,yc,sc,a,2,-0,0),o)}else Ic(r,n,vc,xc,wc,t,hc,mc,yc,sc,a,0,-0,0)}break}o=Qc(e,t,!1),a=!1}Su(e)}function Ic(e,t,n,r,o,a,l,s,c,u,d,p,f,m){if(e.timeoutHandle=-1,(8192&(p=t.subtreeFlags)||!(16785408&~p))&&(Ud={stylesheets:null,count:0,unsuspend:qd},Qs(t),null!==(p=function(){if(null===Ud)throw Error(i(475));var e=Ud;return e.stylesheets&&0===e.count&&Vd(e,e.stylesheets),0<e.count?function(t){var n=setTimeout(function(){if(e.stylesheets&&Vd(e,e.stylesheets),e.unsuspend){var t=e.unsuspend;e.unsuspend=null,t()}},6e4);return e.unsuspend=t,function(){e.unsuspend=null,clearTimeout(n)}}:null}())))return e.cancelPendingCommit=p(nu.bind(null,e,t,a,n,r,o,l,s,c,d,1,f,m)),void Bc(e,a,l,!u);nu(e,t,a,n,r,o,l,s,c)}function zc(e){for(var t=e;;){var n=t.tag;if((0===n||11===n||15===n)&&16384&t.flags&&(null!==(n=t.updateQueue)&&null!==(n=n.stores)))for(var r=0;r<n.length;r++){var o=n[r],a=o.getSnapshot;o=o.value;try{if(!Kn(a(),o))return!1}catch(i){return!1}}if(n=t.child,16384&t.subtreeFlags&&null!==n)n.return=t,t=n;else{if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return!0;t=t.return}t.sibling.return=t.return,t=t.sibling}}return!0}function Bc(e,t,n,r){t&=~gc,t&=~mc,e.suspendedLanes|=t,e.pingedLanes&=~t,r&&(e.warmLanes|=t),r=e.expirationTimes;for(var o=t;0<o;){var a=31-fe(o),i=1<<a;r[a]=-1,o&=~i}0!==n&&Ce(e,n,t)}function $c(){return!!(6&nc)||(xu(0,!1),!1)}function Uc(){if(null!==oc){if(0===ic)var e=oc.return;else vo=bo=null,Ia(e=oc),Ki=null,Yi=0,e=oc;for(;null!==e;)as(e.alternate,e),e=e.return;oc=null}}function qc(e,t){var n=e.timeoutHandle;-1!==n&&(e.timeoutHandle=-1,cd(n)),null!==(n=e.cancelPendingCommit)&&(e.cancelPendingCommit=null,n()),Uc(),rc=e,oc=n=Ir(e.current,null),ac=t,ic=0,lc=null,sc=!1,cc=we(e,t),uc=!1,yc=hc=gc=mc=fc=pc=0,vc=bc=null,wc=!1,8&t&&(t|=32&t);var r=e.entangledLanes;if(0!==r)for(e=e.entanglements,r&=t;0<r;){var o=31-fe(r),a=1<<o;t|=e[o],r&=~a}return dc=t,Tr(),n}function Hc(e,t){wa=null,R.H=Gi,t===Vo||t===Qo?(t=ea(),ic=3):t===Wo?(t=ea(),ic=4):ic=t===Cl?8:null!==t&&"object"==typeof t&&"function"==typeof t.then?6:1,lc=t,null===oc&&(pc=1,kl(e,Er(t,e.current)))}function Gc(){var e=R.H;return R.H=Gi,null===e?Gi:e}function Vc(){var e=R.A;return R.A=ec,e}function Wc(){pc=4,sc||(4194048&ac)!==ac&&null!==ol.current||(cc=!0),!(134217727&fc)&&!(134217727&mc)||null===rc||Bc(rc,ac,hc,!1)}function Qc(e,t,n){var r=nc;nc|=2;var o=Gc(),a=Vc();rc===e&&ac===t||(xc=null,qc(e,t)),t=!1;var i=pc;e:for(;;)try{if(0!==ic&&null!==oc){var l=oc,s=lc;switch(ic){case 8:Uc(),i=6;break e;case 3:case 2:case 9:case 6:null===ol.current&&(t=!0);var c=ic;if(ic=0,lc=null,Jc(e,l,s,c),n&&cc){i=0;break e}break;default:c=ic,ic=0,lc=null,Jc(e,l,s,c)}}Kc(),i=pc;break}catch(u){Hc(e,u)}return t&&e.shellSuspendCounter++,vo=bo=null,nc=r,R.H=o,R.A=a,null===oc&&(rc=null,ac=0,Tr()),i}function Kc(){for(;null!==oc;)Xc(oc)}function Yc(){for(;null!==oc&&!J();)Xc(oc)}function Xc(e){var t=Xl(e.alternate,e,dc);e.memoizedProps=e.pendingProps,null===t?eu(e):oc=t}function Zc(e){var t=e,n=t.alternate;switch(t.tag){case 15:case 0:t=Fl(n,t,t.pendingProps,t.type,void 0,ac);break;case 11:t=Fl(n,t,t.pendingProps,t.type.render,t.ref,ac);break;case 5:Ia(t);default:as(n,t),t=Xl(n,t=oc=zr(t,dc),dc)}e.memoizedProps=e.pendingProps,null===t?eu(e):oc=t}function Jc(e,t,n,r){vo=bo=null,Ia(t),Ki=null,Yi=0;var o=t.return;try{if(function(e,t,n,r,o){if(n.flags|=32768,null!==r&&"object"==typeof r&&"function"==typeof r.then){if(null!==(t=n.alternate)&&Eo(t,n,o,!0),null!==(n=ol.current)){switch(n.tag){case 13:return null===al?Wc():null===n.alternate&&0===pc&&(pc=3),n.flags&=-257,n.flags|=65536,n.lanes=o,r===Ko?n.flags|=16384:(null===(t=n.updateQueue)?n.updateQueue=new Set([r]):t.add(r),du(e,r,o)),!1;case 22:return n.flags|=65536,r===Ko?n.flags|=16384:(null===(t=n.updateQueue)?(t={transitions:null,markerInstances:null,retryQueue:new Set([r])},n.updateQueue=t):null===(n=t.retryQueue)?t.retryQueue=new Set([r]):n.add(r),du(e,r,o)),!1}throw Error(i(435,n.tag))}return du(e,r,o),Wc(),!1}if(ao)return null!==(t=ol.current)?(!(65536&t.flags)&&(t.flags|=256),t.flags|=65536,t.lanes=o,r!==so&&ho(Er(e=Error(i(422),{cause:r}),n))):(r!==so&&ho(Er(t=Error(i(423),{cause:r}),n)),(e=e.current.alternate).flags|=65536,o&=-o,e.lanes|=o,r=Er(r,n),sa(e,o=xl(e.stateNode,r,o)),4!==pc&&(pc=2)),!1;var a=Error(i(520),{cause:r});if(a=Er(a,n),null===bc?bc=[a]:bc.push(a),4!==pc&&(pc=2),null===t)return!0;r=Er(r,n),n=t;do{switch(n.tag){case 3:return n.flags|=65536,e=o&-o,n.lanes|=e,sa(n,e=xl(n.stateNode,r,e)),!1;case 1:if(t=n.type,a=n.stateNode,!(128&n.flags||"function"!=typeof t.getDerivedStateFromError&&(null===a||"function"!=typeof a.componentDidCatch||null!==Ec&&Ec.has(a))))return n.flags|=65536,o&=-o,n.lanes|=o,_l(o=El(o),e,n,r),sa(n,o),!1}n=n.return}while(null!==n);return!1}(e,o,t,n,ac))return pc=1,kl(e,Er(n,e.current)),void(oc=null)}catch(a){if(null!==o)throw oc=o,a;return pc=1,kl(e,Er(n,e.current)),void(oc=null)}32768&t.flags?(ao||1===r?e=!0:cc||536870912&ac?e=!1:(sc=e=!0,(2===r||9===r||3===r||6===r)&&(null!==(r=ol.current)&&13===r.tag&&(r.flags|=16384))),tu(t,e)):eu(t)}function eu(e){var t=e;do{if(32768&t.flags)return void tu(t,sc);e=t.return;var n=rs(t.alternate,t,dc);if(null!==n)return void(oc=n);if(null!==(t=t.sibling))return void(oc=t);oc=t=e}while(null!==t);0===pc&&(pc=5)}function tu(e,t){do{var n=os(e.alternate,e);if(null!==n)return n.flags&=32767,void(oc=n);if(null!==(n=e.return)&&(n.flags|=32768,n.subtreeFlags=0,n.deletions=null),!t&&null!==(e=e.sibling))return void(oc=e);oc=e=n}while(null!==e);pc=6,oc=null}function nu(e,t,n,r,o,a,l,s,c){e.cancelPendingCommit=null;do{lu()}while(0!==_c);if(6&nc)throw Error(i(327));if(null!==t){if(t===e.current)throw Error(i(177));if(a=t.lanes|t.childLanes,function(e,t,n,r,o,a){var i=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var l=e.entanglements,s=e.expirationTimes,c=e.hiddenUpdates;for(n=i&~n;0<n;){var u=31-fe(n),d=1<<u;l[u]=0,s[u]=-1;var p=c[u];if(null!==p)for(c[u]=null,u=0;u<p.length;u++){var f=p[u];null!==f&&(f.lane&=-536870913)}n&=~d}0!==r&&Ce(e,r,0),0!==a&&0===o&&0!==e.tag&&(e.suspendedLanes|=a&~(i&~t))}(e,n,a|=Ar,l,s,c),e===rc&&(oc=rc=null,ac=0),Ac=t,Cc=e,Tc=n,jc=a,Pc=o,Nc=r,10256&t.subtreeFlags||10256&t.flags?(e.callbackNode=null,e.callbackPriority=0,X(ae,function(){return su(),null})):(e.callbackNode=null,e.callbackPriority=0),r=!!(13878&t.flags),13878&t.subtreeFlags||r){r=R.T,R.T=null,o=D.p,D.p=2,l=nc,nc|=4;try{!function(e,t){if(e=e.containerInfo,td=np,tr(e=er(e))){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{var r=(n=(n=e.ownerDocument)&&n.defaultView||window).getSelection&&n.getSelection();if(r&&0!==r.rangeCount){n=r.anchorNode;var o=r.anchorOffset,a=r.focusNode;r=r.focusOffset;try{n.nodeType,a.nodeType}catch(h){n=null;break e}var l=0,s=-1,c=-1,u=0,d=0,p=e,f=null;t:for(;;){for(var m;p!==n||0!==o&&3!==p.nodeType||(s=l+o),p!==a||0!==r&&3!==p.nodeType||(c=l+r),3===p.nodeType&&(l+=p.nodeValue.length),null!==(m=p.firstChild);)f=p,p=m;for(;;){if(p===e)break t;if(f===n&&++u===o&&(s=l),f===a&&++d===r&&(c=l),null!==(m=p.nextSibling))break;f=(p=f).parentNode}p=m}n=-1===s||-1===c?null:{start:s,end:c}}else n=null}n=n||{start:0,end:0}}else n=null;for(nd={focusedElem:e,selectionRange:n},np=!1,xs=t;null!==xs;)if(e=(t=xs).child,1024&t.subtreeFlags&&null!==e)e.return=t,xs=e;else for(;null!==xs;){switch(a=(t=xs).alternate,e=t.flags,t.tag){case 0:case 11:case 15:case 5:case 26:case 27:case 6:case 4:case 17:break;case 1:if(1024&e&&null!==a){e=void 0,n=t,o=a.memoizedProps,a=a.memoizedState,r=n.stateNode;try{var g=hl(n.type,o,(n.elementType,n.type));e=r.getSnapshotBeforeUpdate(g,a),r.__reactInternalSnapshotBeforeUpdate=e}catch(y){uu(n,n.return,y)}}break;case 3:if(1024&e)if(9===(n=(e=t.stateNode.containerInfo).nodeType))gd(e);else if(1===n)switch(e.nodeName){case"HEAD":case"HTML":case"BODY":gd(e);break;default:e.textContent=""}break;default:if(1024&e)throw Error(i(163))}if(null!==(e=t.sibling)){e.return=t.return,xs=e;break}xs=t.return}}(e,t)}finally{nc=l,D.p=o,R.T=r}}_c=1,ru(),ou(),au()}}function ru(){if(1===_c){_c=0;var e=Cc,t=Ac,n=!!(13878&t.flags);if(13878&t.subtreeFlags||n){n=R.T,R.T=null;var r=D.p;D.p=2;var o=nc;nc|=4;try{Rs(t,e);var a=nd,i=er(e.containerInfo),l=a.focusedElem,s=a.selectionRange;if(i!==l&&l&&l.ownerDocument&&Jn(l.ownerDocument.documentElement,l)){if(null!==s&&tr(l)){var c=s.start,u=s.end;if(void 0===u&&(u=c),"selectionStart"in l)l.selectionStart=c,l.selectionEnd=Math.min(u,l.value.length);else{var d=l.ownerDocument||document,p=d&&d.defaultView||window;if(p.getSelection){var f=p.getSelection(),m=l.textContent.length,g=Math.min(s.start,m),h=void 0===s.end?g:Math.min(s.end,m);!f.extend&&g>h&&(i=h,h=g,g=i);var y=Zn(l,g),b=Zn(l,h);if(y&&b&&(1!==f.rangeCount||f.anchorNode!==y.node||f.anchorOffset!==y.offset||f.focusNode!==b.node||f.focusOffset!==b.offset)){var v=d.createRange();v.setStart(y.node,y.offset),f.removeAllRanges(),g>h?(f.addRange(v),f.extend(b.node,b.offset)):(v.setEnd(b.node,b.offset),f.addRange(v))}}}}for(d=[],f=l;f=f.parentNode;)1===f.nodeType&&d.push({element:f,left:f.scrollLeft,top:f.scrollTop});for("function"==typeof l.focus&&l.focus(),l=0;l<d.length;l++){var w=d[l];w.element.scrollLeft=w.left,w.element.scrollTop=w.top}}np=!!td,nd=td=null}finally{nc=o,D.p=r,R.T=n}}e.current=t,_c=2}}function ou(){if(2===_c){_c=0;var e=Cc,t=Ac,n=!!(8772&t.flags);if(8772&t.subtreeFlags||n){n=R.T,R.T=null;var r=D.p;D.p=2;var o=nc;nc|=4;try{Es(e,t.alternate,t)}finally{nc=o,D.p=r,R.T=n}}_c=3}}function au(){if(4===_c||3===_c){_c=0,ee();var e=Cc,t=Ac,n=Tc,r=Nc;10256&t.subtreeFlags||10256&t.flags?_c=5:(_c=0,Ac=Cc=null,iu(e,e.pendingLanes));var o=e.pendingLanes;if(0===o&&(Ec=null),je(n),t=t.stateNode,de&&"function"==typeof de.onCommitFiberRoot)try{de.onCommitFiberRoot(ue,t,void 0,!(128&~t.current.flags))}catch(s){}if(null!==r){t=R.T,o=D.p,D.p=2,R.T=null;try{for(var a=e.onRecoverableError,i=0;i<r.length;i++){var l=r[i];a(l.value,{componentStack:l.stack})}}finally{R.T=t,D.p=o}}3&Tc&&lu(),Su(e),o=e.pendingLanes,4194090&n&&42&o?e===Oc?Lc++:(Lc=0,Oc=e):Lc=0,xu(0,!1)}}function iu(e,t){0===(e.pooledCacheLanes&=t)&&(null!=(t=e.pooledCache)&&(e.pooledCache=null,Do(t)))}function lu(e){return ru(),ou(),au(),su()}function su(){if(5!==_c)return!1;var e=Cc,t=jc;jc=0;var n=je(Tc),r=R.T,o=D.p;try{D.p=32>n?32:n,R.T=null,n=Pc,Pc=null;var a=Cc,l=Tc;if(_c=0,Ac=Cc=null,Tc=0,6&nc)throw Error(i(331));var s=nc;if(nc|=4,Xs(a.current),qs(a,a.current,l,n),nc=s,xu(0,!1),de&&"function"==typeof de.onPostCommitFiberRoot)try{de.onPostCommitFiberRoot(ue,a)}catch(c){}return!0}finally{D.p=o,R.T=r,iu(e,t)}}function cu(e,t,n){t=Er(n,t),null!==(e=ia(e,t=xl(e.stateNode,t,2),2))&&(_e(e,2),Su(e))}function uu(e,t,n){if(3===e.tag)cu(e,e,n);else for(;null!==t;){if(3===t.tag){cu(t,e,n);break}if(1===t.tag){var r=t.stateNode;if("function"==typeof t.type.getDerivedStateFromError||"function"==typeof r.componentDidCatch&&(null===Ec||!Ec.has(r))){e=Er(n,e),null!==(r=ia(t,n=El(2),2))&&(_l(n,r,t,e),_e(r,2),Su(r));break}}t=t.return}}function du(e,t,n){var r=e.pingCache;if(null===r){r=e.pingCache=new tc;var o=new Set;r.set(t,o)}else void 0===(o=r.get(t))&&(o=new Set,r.set(t,o));o.has(n)||(uc=!0,o.add(n),e=pu.bind(null,e,t,n),t.then(e,e))}function pu(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,rc===e&&(ac&n)===n&&(4===pc||3===pc&&(62914560&ac)===ac&&300>te()-kc?!(2&nc)&&qc(e,0):gc|=n,yc===ac&&(yc=0)),Su(e)}function fu(e,t){0===t&&(t=xe()),null!==(e=Nr(e,t))&&(_e(e,t),Su(e))}function mu(e){var t=e.memoizedState,n=0;null!==t&&(n=t.retryLane),fu(e,n)}function gu(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,o=e.memoizedState;null!==o&&(n=o.retryLane);break;case 19:r=e.stateNode;break;case 22:r=e.stateNode._retryCache;break;default:throw Error(i(314))}null!==r&&r.delete(t),fu(e,n)}var hu=null,yu=null,bu=!1,vu=!1,wu=!1,ku=0;function Su(e){e!==yu&&null===e.next&&(null===yu?hu=yu=e:yu=yu.next=e),vu=!0,bu||(bu=!0,dd(function(){6&nc?X(re,Eu):_u()}))}function xu(e,t){if(!wu&&vu){wu=!0;do{for(var n=!1,r=hu;null!==r;){if(!t)if(0!==e){var o=r.pendingLanes;if(0===o)var a=0;else{var i=r.suspendedLanes,l=r.pingedLanes;a=(1<<31-fe(42|e)+1)-1,a=201326741&(a&=o&~(i&~l))?201326741&a|1:a?2|a:0}0!==a&&(n=!0,Tu(r,a))}else a=ac,!(3&(a=ve(r,r===rc?a:0,null!==r.cancelPendingCommit||-1!==r.timeoutHandle)))||we(r,a)||(n=!0,Tu(r,a));r=r.next}}while(n);wu=!1}}function Eu(){_u()}function _u(){vu=bu=!1;var e=0;0!==ku&&(function(){var e=window.event;if(e&&"popstate"===e.type)return e!==ld&&(ld=e,!0);return ld=null,!1}()&&(e=ku),ku=0);for(var t=te(),n=null,r=hu;null!==r;){var o=r.next,a=Cu(r,t);0===a?(r.next=null,null===n?hu=o:n.next=o,null===o&&(yu=n)):(n=r,(0!==e||3&a)&&(vu=!0)),r=o}xu(e,!1)}function Cu(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,o=e.expirationTimes,a=-62914561&e.pendingLanes;0<a;){var i=31-fe(a),l=1<<i,s=o[i];-1===s?0!==(l&n)&&0===(l&r)||(o[i]=ke(l,t)):s<=t&&(e.expiredLanes|=l),a&=~l}if(n=ac,n=ve(e,e===(t=rc)?n:0,null!==e.cancelPendingCommit||-1!==e.timeoutHandle),r=e.callbackNode,0===n||e===t&&(2===ic||9===ic)||null!==e.cancelPendingCommit)return null!==r&&null!==r&&Z(r),e.callbackNode=null,e.callbackPriority=0;if(!(3&n)||we(e,n)){if((t=n&-n)===e.callbackPriority)return t;switch(null!==r&&Z(r),je(n)){case 2:case 8:n=oe;break;case 32:default:n=ae;break;case 268435456:n=le}return r=Au.bind(null,e),n=X(n,r),e.callbackPriority=t,e.callbackNode=n,t}return null!==r&&null!==r&&Z(r),e.callbackPriority=2,e.callbackNode=null,2}function Au(e,t){if(0!==_c&&5!==_c)return e.callbackNode=null,e.callbackPriority=0,null;var n=e.callbackNode;if(lu()&&e.callbackNode!==n)return null;var r=ac;return 0===(r=ve(e,e===rc?r:0,null!==e.cancelPendingCommit||-1!==e.timeoutHandle))?null:(Mc(e,r,t),Cu(e,te()),null!=e.callbackNode&&e.callbackNode===n?Au.bind(null,e):null)}function Tu(e,t){if(lu())return null;Mc(e,t,!0)}function ju(){return 0===ku&&(ku=Se()),ku}function Pu(e){return null==e||"symbol"==typeof e||"boolean"==typeof e?null:"function"==typeof e?e:jt(""+e)}function Nu(e,t){var n=t.ownerDocument.createElement("input");return n.name=t.name,n.value=t.value,e.id&&n.setAttribute("form",e.id),t.parentNode.insertBefore(n,t),e=new FormData(e),n.parentNode.removeChild(n),e}for(var Lu=0;Lu<kr.length;Lu++){var Ou=kr[Lu];Sr(Ou.toLowerCase(),"on"+(Ou[0].toUpperCase()+Ou.slice(1)))}Sr(fr,"onAnimationEnd"),Sr(mr,"onAnimationIteration"),Sr(gr,"onAnimationStart"),Sr("dblclick","onDoubleClick"),Sr("focusin","onFocus"),Sr("focusout","onBlur"),Sr(hr,"onTransitionRun"),Sr(yr,"onTransitionStart"),Sr(br,"onTransitionCancel"),Sr(vr,"onTransitionEnd"),Ke("onMouseEnter",["mouseout","mouseover"]),Ke("onMouseLeave",["mouseout","mouseover"]),Ke("onPointerEnter",["pointerout","pointerover"]),Ke("onPointerLeave",["pointerout","pointerover"]),Qe("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),Qe("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),Qe("onBeforeInput",["compositionend","keypress","textInput","paste"]),Qe("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),Qe("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),Qe("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var Ru="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Du=new Set("beforetoggle cancel close invalid load scroll scrollend toggle".split(" ").concat(Ru));function Fu(e,t){t=!!(4&t);for(var n=0;n<e.length;n++){var r=e[n],o=r.event;r=r.listeners;e:{var a=void 0;if(t)for(var i=r.length-1;0<=i;i--){var l=r[i],s=l.instance,c=l.currentTarget;if(l=l.listener,s!==a&&o.isPropagationStopped())break e;a=l,o.currentTarget=c;try{a(o)}catch(u){yl(u)}o.currentTarget=null,a=s}else for(i=0;i<r.length;i++){if(s=(l=r[i]).instance,c=l.currentTarget,l=l.listener,s!==a&&o.isPropagationStopped())break e;a=l,o.currentTarget=c;try{a(o)}catch(u){yl(u)}o.currentTarget=null,a=s}}}}function Mu(e,t){var n=t[De];void 0===n&&(n=t[De]=new Set);var r=e+"__bubble";n.has(r)||($u(t,e,2,!1),n.add(r))}function Iu(e,t,n){var r=0;t&&(r|=4),$u(n,e,r,t)}var zu="_reactListening"+Math.random().toString(36).slice(2);function Bu(e){if(!e[zu]){e[zu]=!0,Ve.forEach(function(t){"selectionchange"!==t&&(Du.has(t)||Iu(t,!1,e),Iu(t,!0,e))});var t=9===e.nodeType?e:e.ownerDocument;null===t||t[zu]||(t[zu]=!0,Iu("selectionchange",!1,t))}}function $u(e,t,n,r){switch(cp(t)){case 2:var o=rp;break;case 8:o=op;break;default:o=ap}n=o.bind(null,t,n,e),o=void 0,!zt||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(o=!0),r?void 0!==o?e.addEventListener(t,n,{capture:!0,passive:o}):e.addEventListener(t,n,!0):void 0!==o?e.addEventListener(t,n,{passive:o}):e.addEventListener(t,n,!1)}function Uu(e,t,n,r,o){var a=r;if(!(1&t||2&t||null===r))e:for(;;){if(null===r)return;var i=r.tag;if(3===i||4===i){var l=r.stateNode.containerInfo;if(l===o)break;if(4===i)for(i=r.return;null!==i;){var c=i.tag;if((3===c||4===c)&&i.stateNode.containerInfo===o)return;i=i.return}for(;null!==l;){if(null===(i=$e(l)))return;if(5===(c=i.tag)||6===c||26===c||27===c){r=a=i;continue e}l=l.parentNode}}r=r.return}Ft(function(){var r=a,o=Nt(n),i=[];e:{var l=wr.get(e);if(void 0!==l){var c=Jt,u=e;switch(e){case"keypress":if(0===Gt(n))break e;case"keydown":case"keyup":c=gn;break;case"focusin":u="focus",c=an;break;case"focusout":u="blur",c=an;break;case"beforeblur":case"afterblur":c=an;break;case"click":if(2===n.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":c=rn;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":c=on;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":c=yn;break;case fr:case mr:case gr:c=ln;break;case vr:c=bn;break;case"scroll":case"scrollend":c=tn;break;case"wheel":c=vn;break;case"copy":case"cut":case"paste":c=sn;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":c=hn;break;case"toggle":case"beforetoggle":c=wn}var d=!!(4&t),p=!d&&("scroll"===e||"scrollend"===e),f=d?null!==l?l+"Capture":null:l;d=[];for(var m,g=r;null!==g;){var h=g;if(m=h.stateNode,5!==(h=h.tag)&&26!==h&&27!==h||null===m||null===f||null!=(h=Mt(g,f))&&d.push(qu(g,h,m)),p)break;g=g.return}0<d.length&&(l=new c(l,u,null,n,o),i.push({event:l,listeners:d}))}}if(!(7&t)){if(c="mouseout"===e||"pointerout"===e,(!(l="mouseover"===e||"pointerover"===e)||n===Pt||!(u=n.relatedTarget||n.fromElement)||!$e(u)&&!u[Re])&&(c||l)&&(l=o.window===o?o:(l=o.ownerDocument)?l.defaultView||l.parentWindow:window,c?(c=r,null!==(u=(u=n.relatedTarget||n.toElement)?$e(u):null)&&(p=s(u),d=u.tag,u!==p||5!==d&&27!==d&&6!==d)&&(u=null)):(c=null,u=r),c!==u)){if(d=rn,h="onMouseLeave",f="onMouseEnter",g="mouse","pointerout"!==e&&"pointerover"!==e||(d=hn,h="onPointerLeave",f="onPointerEnter",g="pointer"),p=null==c?l:qe(c),m=null==u?l:qe(u),(l=new d(h,g+"leave",c,n,o)).target=p,l.relatedTarget=m,h=null,$e(o)===r&&((d=new d(f,g+"enter",u,n,o)).target=m,d.relatedTarget=p,h=d),p=h,c&&u)e:{for(f=u,g=0,m=d=c;m;m=Gu(m))g++;for(m=0,h=f;h;h=Gu(h))m++;for(;0<g-m;)d=Gu(d),g--;for(;0<m-g;)f=Gu(f),m--;for(;g--;){if(d===f||null!==f&&d===f.alternate)break e;d=Gu(d),f=Gu(f)}d=null}else d=null;null!==c&&Vu(i,l,c,d,!1),null!==u&&null!==p&&Vu(i,p,u,d,!0)}if("select"===(c=(l=r?qe(r):window).nodeName&&l.nodeName.toLowerCase())||"input"===c&&"file"===l.type)var y=In;else if(Ln(l))if(zn)y=Qn;else{y=Vn;var b=Gn}else!(c=l.nodeName)||"input"!==c.toLowerCase()||"checkbox"!==l.type&&"radio"!==l.type?r&&Ct(r.elementType)&&(y=In):y=Wn;switch(y&&(y=y(e,r))?On(i,y,n,o):(b&&b(e,l,r),"focusout"===e&&r&&"number"===l.type&&null!=r.memoizedProps.value&&bt(l,"number",l.value)),b=r?qe(r):window,e){case"focusin":(Ln(b)||"true"===b.contentEditable)&&(rr=b,or=r,ar=null);break;case"focusout":ar=or=rr=null;break;case"mousedown":ir=!0;break;case"contextmenu":case"mouseup":case"dragend":ir=!1,lr(i,n,o);break;case"selectionchange":if(nr)break;case"keydown":case"keyup":lr(i,n,o)}var v;if(Sn)e:{switch(e){case"compositionstart":var w="onCompositionStart";break e;case"compositionend":w="onCompositionEnd";break e;case"compositionupdate":w="onCompositionUpdate";break e}w=void 0}else Pn?Tn(e,n)&&(w="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(w="onCompositionStart");w&&(_n&&"ko"!==n.locale&&(Pn||"onCompositionStart"!==w?"onCompositionEnd"===w&&Pn&&(v=Ht()):(Ut="value"in($t=o)?$t.value:$t.textContent,Pn=!0)),0<(b=Hu(r,w)).length&&(w=new cn(w,e,null,n,o),i.push({event:w,listeners:b}),v?w.data=v:null!==(v=jn(n))&&(w.data=v))),(v=En?function(e,t){switch(e){case"compositionend":return jn(t);case"keypress":return 32!==t.which?null:(An=!0,Cn);case"textInput":return(e=t.data)===Cn&&An?null:e;default:return null}}(e,n):function(e,t){if(Pn)return"compositionend"===e||!Sn&&Tn(e,t)?(e=Ht(),qt=Ut=$t=null,Pn=!1,e):null;switch(e){case"paste":default:return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return _n&&"ko"!==t.locale?null:t.data}}(e,n))&&(0<(w=Hu(r,"onBeforeInput")).length&&(b=new cn("onBeforeInput","beforeinput",null,n,o),i.push({event:b,listeners:w}),b.data=v)),function(e,t,n,r,o){if("submit"===t&&n&&n.stateNode===o){var a=Pu((o[Oe]||null).action),i=r.submitter;i&&null!==(t=(t=i[Oe]||null)?Pu(t.formAction):i.getAttribute("formAction"))&&(a=t,i=null);var l=new Jt("action","action",null,r,o);e.push({event:l,listeners:[{instance:null,listener:function(){if(r.defaultPrevented){if(0!==ku){var e=i?Nu(o,i):new FormData(o);Ni(n,{pending:!0,data:e,method:o.method,action:a},null,e)}}else"function"==typeof a&&(l.preventDefault(),e=i?Nu(o,i):new FormData(o),Ni(n,{pending:!0,data:e,method:o.method,action:a},a,e))},currentTarget:o}]})}}(i,e,r,n,o)}Fu(i,t)})}function qu(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Hu(e,t){for(var n=t+"Capture",r=[];null!==e;){var o=e,a=o.stateNode;if(5!==(o=o.tag)&&26!==o&&27!==o||null===a||(null!=(o=Mt(e,n))&&r.unshift(qu(e,o,a)),null!=(o=Mt(e,t))&&r.push(qu(e,o,a))),3===e.tag)return r;e=e.return}return[]}function Gu(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag&&27!==e.tag);return e||null}function Vu(e,t,n,r,o){for(var a=t._reactName,i=[];null!==n&&n!==r;){var l=n,s=l.alternate,c=l.stateNode;if(l=l.tag,null!==s&&s===r)break;5!==l&&26!==l&&27!==l||null===c||(s=c,o?null!=(c=Mt(n,a))&&i.unshift(qu(n,c,s)):o||null!=(c=Mt(n,a))&&i.push(qu(n,c,s))),n=n.return}0!==i.length&&e.push({event:t,listeners:i})}var Wu=/\r\n?/g,Qu=/\u0000|\uFFFD/g;function Ku(e){return("string"==typeof e?e:""+e).replace(Wu,"\n").replace(Qu,"")}function Yu(e,t){return t=Ku(t),Ku(e)===t}function Xu(){}function Zu(e,t,n,r,o,a){switch(n){case"children":"string"==typeof r?"body"===t||"textarea"===t&&""===r||St(e,r):("number"==typeof r||"bigint"==typeof r)&&"body"!==t&&St(e,""+r);break;case"className":nt(e,"class",r);break;case"tabIndex":nt(e,"tabindex",r);break;case"dir":case"role":case"viewBox":case"width":case"height":nt(e,n,r);break;case"style":_t(e,r,a);break;case"data":if("object"!==t){nt(e,"data",r);break}case"src":case"href":if(""===r&&("a"!==t||"href"!==n)){e.removeAttribute(n);break}if(null==r||"function"==typeof r||"symbol"==typeof r||"boolean"==typeof r){e.removeAttribute(n);break}r=jt(""+r),e.setAttribute(n,r);break;case"action":case"formAction":if("function"==typeof r){e.setAttribute(n,"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')");break}if("function"==typeof a&&("formAction"===n?("input"!==t&&Zu(e,t,"name",o.name,o,null),Zu(e,t,"formEncType",o.formEncType,o,null),Zu(e,t,"formMethod",o.formMethod,o,null),Zu(e,t,"formTarget",o.formTarget,o,null)):(Zu(e,t,"encType",o.encType,o,null),Zu(e,t,"method",o.method,o,null),Zu(e,t,"target",o.target,o,null))),null==r||"symbol"==typeof r||"boolean"==typeof r){e.removeAttribute(n);break}r=jt(""+r),e.setAttribute(n,r);break;case"onClick":null!=r&&(e.onclick=Xu);break;case"onScroll":null!=r&&Mu("scroll",e);break;case"onScrollEnd":null!=r&&Mu("scrollend",e);break;case"dangerouslySetInnerHTML":if(null!=r){if("object"!=typeof r||!("__html"in r))throw Error(i(61));if(null!=(n=r.__html)){if(null!=o.children)throw Error(i(60));e.innerHTML=n}}break;case"multiple":e.multiple=r&&"function"!=typeof r&&"symbol"!=typeof r;break;case"muted":e.muted=r&&"function"!=typeof r&&"symbol"!=typeof r;break;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"defaultValue":case"defaultChecked":case"innerHTML":case"ref":case"autoFocus":break;case"xlinkHref":if(null==r||"function"==typeof r||"boolean"==typeof r||"symbol"==typeof r){e.removeAttribute("xlink:href");break}n=jt(""+r),e.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",n);break;case"contentEditable":case"spellCheck":case"draggable":case"value":case"autoReverse":case"externalResourcesRequired":case"focusable":case"preserveAlpha":null!=r&&"function"!=typeof r&&"symbol"!=typeof r?e.setAttribute(n,""+r):e.removeAttribute(n);break;case"inert":case"allowFullScreen":case"async":case"autoPlay":case"controls":case"default":case"defer":case"disabled":case"disablePictureInPicture":case"disableRemotePlayback":case"formNoValidate":case"hidden":case"loop":case"noModule":case"noValidate":case"open":case"playsInline":case"readOnly":case"required":case"reversed":case"scoped":case"seamless":case"itemScope":r&&"function"!=typeof r&&"symbol"!=typeof r?e.setAttribute(n,""):e.removeAttribute(n);break;case"capture":case"download":!0===r?e.setAttribute(n,""):!1!==r&&null!=r&&"function"!=typeof r&&"symbol"!=typeof r?e.setAttribute(n,r):e.removeAttribute(n);break;case"cols":case"rows":case"size":case"span":null!=r&&"function"!=typeof r&&"symbol"!=typeof r&&!isNaN(r)&&1<=r?e.setAttribute(n,r):e.removeAttribute(n);break;case"rowSpan":case"start":null==r||"function"==typeof r||"symbol"==typeof r||isNaN(r)?e.removeAttribute(n):e.setAttribute(n,r);break;case"popover":Mu("beforetoggle",e),Mu("toggle",e),tt(e,"popover",r);break;case"xlinkActuate":rt(e,"http://www.w3.org/1999/xlink","xlink:actuate",r);break;case"xlinkArcrole":rt(e,"http://www.w3.org/1999/xlink","xlink:arcrole",r);break;case"xlinkRole":rt(e,"http://www.w3.org/1999/xlink","xlink:role",r);break;case"xlinkShow":rt(e,"http://www.w3.org/1999/xlink","xlink:show",r);break;case"xlinkTitle":rt(e,"http://www.w3.org/1999/xlink","xlink:title",r);break;case"xlinkType":rt(e,"http://www.w3.org/1999/xlink","xlink:type",r);break;case"xmlBase":rt(e,"http://www.w3.org/XML/1998/namespace","xml:base",r);break;case"xmlLang":rt(e,"http://www.w3.org/XML/1998/namespace","xml:lang",r);break;case"xmlSpace":rt(e,"http://www.w3.org/XML/1998/namespace","xml:space",r);break;case"is":tt(e,"is",r);break;case"innerText":case"textContent":break;default:(!(2<n.length)||"o"!==n[0]&&"O"!==n[0]||"n"!==n[1]&&"N"!==n[1])&&tt(e,n=At.get(n)||n,r)}}function Ju(e,t,n,r,o,a){switch(n){case"style":_t(e,r,a);break;case"dangerouslySetInnerHTML":if(null!=r){if("object"!=typeof r||!("__html"in r))throw Error(i(61));if(null!=(n=r.__html)){if(null!=o.children)throw Error(i(60));e.innerHTML=n}}break;case"children":"string"==typeof r?St(e,r):("number"==typeof r||"bigint"==typeof r)&&St(e,""+r);break;case"onScroll":null!=r&&Mu("scroll",e);break;case"onScrollEnd":null!=r&&Mu("scrollend",e);break;case"onClick":null!=r&&(e.onclick=Xu);break;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"innerHTML":case"ref":case"innerText":case"textContent":break;default:We.hasOwnProperty(n)||("o"!==n[0]||"n"!==n[1]||(o=n.endsWith("Capture"),t=n.slice(2,o?n.length-7:void 0),"function"==typeof(a=null!=(a=e[Oe]||null)?a[n]:null)&&e.removeEventListener(t,a,o),"function"!=typeof r)?n in e?e[n]=r:!0===r?e.setAttribute(n,""):tt(e,n,r):("function"!=typeof a&&null!==a&&(n in e?e[n]=null:e.hasAttribute(n)&&e.removeAttribute(n)),e.addEventListener(t,r,o)))}}function ed(e,t,n){switch(t){case"div":case"span":case"svg":case"path":case"a":case"g":case"p":case"li":break;case"img":Mu("error",e),Mu("load",e);var r,o=!1,a=!1;for(r in n)if(n.hasOwnProperty(r)){var l=n[r];if(null!=l)switch(r){case"src":o=!0;break;case"srcSet":a=!0;break;case"children":case"dangerouslySetInnerHTML":throw Error(i(137,t));default:Zu(e,t,r,l,n,null)}}return a&&Zu(e,t,"srcSet",n.srcSet,n,null),void(o&&Zu(e,t,"src",n.src,n,null));case"input":Mu("invalid",e);var s=r=l=a=null,c=null,u=null;for(o in n)if(n.hasOwnProperty(o)){var d=n[o];if(null!=d)switch(o){case"name":a=d;break;case"type":l=d;break;case"checked":c=d;break;case"defaultChecked":u=d;break;case"value":r=d;break;case"defaultValue":s=d;break;case"children":case"dangerouslySetInnerHTML":if(null!=d)throw Error(i(137,t));break;default:Zu(e,t,o,d,n,null)}}return yt(e,r,s,c,u,l,a,!1),void dt(e);case"select":for(a in Mu("invalid",e),o=l=r=null,n)if(n.hasOwnProperty(a)&&null!=(s=n[a]))switch(a){case"value":r=s;break;case"defaultValue":l=s;break;case"multiple":o=s;default:Zu(e,t,a,s,n,null)}return t=r,n=l,e.multiple=!!o,void(null!=t?vt(e,!!o,t,!1):null!=n&&vt(e,!!o,n,!0));case"textarea":for(l in Mu("invalid",e),r=a=o=null,n)if(n.hasOwnProperty(l)&&null!=(s=n[l]))switch(l){case"value":o=s;break;case"defaultValue":a=s;break;case"children":r=s;break;case"dangerouslySetInnerHTML":if(null!=s)throw Error(i(91));break;default:Zu(e,t,l,s,n,null)}return kt(e,o,a,r),void dt(e);case"option":for(c in n)if(n.hasOwnProperty(c)&&null!=(o=n[c]))if("selected"===c)e.selected=o&&"function"!=typeof o&&"symbol"!=typeof o;else Zu(e,t,c,o,n,null);return;case"dialog":Mu("beforetoggle",e),Mu("toggle",e),Mu("cancel",e),Mu("close",e);break;case"iframe":case"object":Mu("load",e);break;case"video":case"audio":for(o=0;o<Ru.length;o++)Mu(Ru[o],e);break;case"image":Mu("error",e),Mu("load",e);break;case"details":Mu("toggle",e);break;case"embed":case"source":case"link":Mu("error",e),Mu("load",e);case"area":case"base":case"br":case"col":case"hr":case"keygen":case"meta":case"param":case"track":case"wbr":case"menuitem":for(u in n)if(n.hasOwnProperty(u)&&null!=(o=n[u]))switch(u){case"children":case"dangerouslySetInnerHTML":throw Error(i(137,t));default:Zu(e,t,u,o,n,null)}return;default:if(Ct(t)){for(d in n)n.hasOwnProperty(d)&&(void 0!==(o=n[d])&&Ju(e,t,d,o,n,void 0));return}}for(s in n)n.hasOwnProperty(s)&&(null!=(o=n[s])&&Zu(e,t,s,o,n,null))}var td=null,nd=null;function rd(e){return 9===e.nodeType?e:e.ownerDocument}function od(e){switch(e){case"http://www.w3.org/2000/svg":return 1;case"http://www.w3.org/1998/Math/MathML":return 2;default:return 0}}function ad(e,t){if(0===e)switch(t){case"svg":return 1;case"math":return 2;default:return 0}return 1===e&&"foreignObject"===t?0:e}function id(e,t){return"textarea"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"bigint"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var ld=null;var sd="function"==typeof setTimeout?setTimeout:void 0,cd="function"==typeof clearTimeout?clearTimeout:void 0,ud="function"==typeof Promise?Promise:void 0,dd="function"==typeof queueMicrotask?queueMicrotask:void 0!==ud?function(e){return ud.resolve(null).then(e).catch(pd)}:sd;function pd(e){setTimeout(function(){throw e})}function fd(e){return"head"===e}function md(e,t){var n=t,r=0,o=0;do{var a=n.nextSibling;if(e.removeChild(n),a&&8===a.nodeType)if("/$"===(n=a.data)){if(0<r&&8>r){n=r;var i=e.ownerDocument;if(1&n&&kd(i.documentElement),2&n&&kd(i.body),4&n)for(kd(n=i.head),i=n.firstChild;i;){var l=i.nextSibling,s=i.nodeName;i[ze]||"SCRIPT"===s||"STYLE"===s||"LINK"===s&&"stylesheet"===i.rel.toLowerCase()||n.removeChild(i),i=l}}if(0===o)return e.removeChild(a),void Ap(t);o--}else"$"===n||"$?"===n||"$!"===n?o++:r=n.charCodeAt(0)-48;else r=0;n=a}while(n);Ap(t)}function gd(e){var t=e.firstChild;for(t&&10===t.nodeType&&(t=t.nextSibling);t;){var n=t;switch(t=t.nextSibling,n.nodeName){case"HTML":case"HEAD":case"BODY":gd(n),Be(n);continue;case"SCRIPT":case"STYLE":continue;case"LINK":if("stylesheet"===n.rel.toLowerCase())continue}e.removeChild(n)}}function hd(e){return"$!"===e.data||"$?"===e.data&&"complete"===e.ownerDocument.readyState}function yd(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break;if(8===t){if("$"===(t=e.data)||"$!"===t||"$?"===t||"F!"===t||"F"===t)break;if("/$"===t)return null}}return e}var bd=null;function vd(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if("$"===n||"$!"===n||"$?"===n){if(0===t)return e;t--}else"/$"===n&&t++}e=e.previousSibling}return null}function wd(e,t,n){switch(t=rd(n),e){case"html":if(!(e=t.documentElement))throw Error(i(452));return e;case"head":if(!(e=t.head))throw Error(i(453));return e;case"body":if(!(e=t.body))throw Error(i(454));return e;default:throw Error(i(451))}}function kd(e){for(var t=e.attributes;t.length;)e.removeAttributeNode(t[0]);Be(e)}var Sd=new Map,xd=new Set;function Ed(e){return"function"==typeof e.getRootNode?e.getRootNode():9===e.nodeType?e:e.ownerDocument}var _d=D.d;D.d={f:function(){var e=_d.f(),t=$c();return e||t},r:function(e){var t=Ue(e);null!==t&&5===t.tag&&"form"===t.type?Oi(t):_d.r(e)},D:function(e){_d.D(e),Ad("dns-prefetch",e,null)},C:function(e,t){_d.C(e,t),Ad("preconnect",e,t)},L:function(e,t,n){_d.L(e,t,n);var r=Cd;if(r&&e&&t){var o='link[rel="preload"][as="'+gt(t)+'"]';"image"===t&&n&&n.imageSrcSet?(o+='[imagesrcset="'+gt(n.imageSrcSet)+'"]',"string"==typeof n.imageSizes&&(o+='[imagesizes="'+gt(n.imageSizes)+'"]')):o+='[href="'+gt(e)+'"]';var a=o;switch(t){case"style":a=jd(e);break;case"script":a=Ld(e)}Sd.has(a)||(e=p({rel:"preload",href:"image"===t&&n&&n.imageSrcSet?void 0:e,as:t},n),Sd.set(a,e),null!==r.querySelector(o)||"style"===t&&r.querySelector(Pd(a))||"script"===t&&r.querySelector(Od(a))||(ed(t=r.createElement("link"),"link",e),Ge(t),r.head.appendChild(t)))}},m:function(e,t){_d.m(e,t);var n=Cd;if(n&&e){var r=t&&"string"==typeof t.as?t.as:"script",o='link[rel="modulepreload"][as="'+gt(r)+'"][href="'+gt(e)+'"]',a=o;switch(r){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":a=Ld(e)}if(!Sd.has(a)&&(e=p({rel:"modulepreload",href:e},t),Sd.set(a,e),null===n.querySelector(o))){switch(r){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(n.querySelector(Od(a)))return}ed(r=n.createElement("link"),"link",e),Ge(r),n.head.appendChild(r)}}},X:function(e,t){_d.X(e,t);var n=Cd;if(n&&e){var r=He(n).hoistableScripts,o=Ld(e),a=r.get(o);a||((a=n.querySelector(Od(o)))||(e=p({src:e,async:!0},t),(t=Sd.get(o))&&Md(e,t),Ge(a=n.createElement("script")),ed(a,"link",e),n.head.appendChild(a)),a={type:"script",instance:a,count:1,state:null},r.set(o,a))}},S:function(e,t,n){_d.S(e,t,n);var r=Cd;if(r&&e){var o=He(r).hoistableStyles,a=jd(e);t=t||"default";var i=o.get(a);if(!i){var l={loading:0,preload:null};if(i=r.querySelector(Pd(a)))l.loading=5;else{e=p({rel:"stylesheet",href:e,"data-precedence":t},n),(n=Sd.get(a))&&Fd(e,n);var s=i=r.createElement("link");Ge(s),ed(s,"link",e),s._p=new Promise(function(e,t){s.onload=e,s.onerror=t}),s.addEventListener("load",function(){l.loading|=1}),s.addEventListener("error",function(){l.loading|=2}),l.loading|=4,Dd(i,t,r)}i={type:"stylesheet",instance:i,count:1,state:l},o.set(a,i)}}},M:function(e,t){_d.M(e,t);var n=Cd;if(n&&e){var r=He(n).hoistableScripts,o=Ld(e),a=r.get(o);a||((a=n.querySelector(Od(o)))||(e=p({src:e,async:!0,type:"module"},t),(t=Sd.get(o))&&Md(e,t),Ge(a=n.createElement("script")),ed(a,"link",e),n.head.appendChild(a)),a={type:"script",instance:a,count:1,state:null},r.set(o,a))}}};var Cd="undefined"==typeof document?null:document;function Ad(e,t,n){var r=Cd;if(r&&"string"==typeof t&&t){var o=gt(t);o='link[rel="'+e+'"][href="'+o+'"]',"string"==typeof n&&(o+='[crossorigin="'+n+'"]'),xd.has(o)||(xd.add(o),e={rel:e,crossOrigin:n,href:t},null===r.querySelector(o)&&(ed(t=r.createElement("link"),"link",e),Ge(t),r.head.appendChild(t)))}}function Td(e,t,n,r){var o,a,l,s,c=(c=H.current)?Ed(c):null;if(!c)throw Error(i(446));switch(e){case"meta":case"title":return null;case"style":return"string"==typeof n.precedence&&"string"==typeof n.href?(t=jd(n.href),(r=(n=He(c).hoistableStyles).get(t))||(r={type:"style",instance:null,count:0,state:null},n.set(t,r)),r):{type:"void",instance:null,count:0,state:null};case"link":if("stylesheet"===n.rel&&"string"==typeof n.href&&"string"==typeof n.precedence){e=jd(n.href);var u=He(c).hoistableStyles,d=u.get(e);if(d||(c=c.ownerDocument||c,d={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},u.set(e,d),(u=c.querySelector(Pd(e)))&&!u._p&&(d.instance=u,d.state.loading=5),Sd.has(e)||(n={rel:"preload",as:"style",href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},Sd.set(e,n),u||(o=c,a=e,l=n,s=d.state,o.querySelector('link[rel="preload"][as="style"]['+a+"]")?s.loading=1:(a=o.createElement("link"),s.preload=a,a.addEventListener("load",function(){return s.loading|=1}),a.addEventListener("error",function(){return s.loading|=2}),ed(a,"link",l),Ge(a),o.head.appendChild(a))))),t&&null===r)throw Error(i(528,""));return d}if(t&&null!==r)throw Error(i(529,""));return null;case"script":return t=n.async,"string"==typeof(n=n.src)&&t&&"function"!=typeof t&&"symbol"!=typeof t?(t=Ld(n),(r=(n=He(c).hoistableScripts).get(t))||(r={type:"script",instance:null,count:0,state:null},n.set(t,r)),r):{type:"void",instance:null,count:0,state:null};default:throw Error(i(444,e))}}function jd(e){return'href="'+gt(e)+'"'}function Pd(e){return'link[rel="stylesheet"]['+e+"]"}function Nd(e){return p({},e,{"data-precedence":e.precedence,precedence:null})}function Ld(e){return'[src="'+gt(e)+'"]'}function Od(e){return"script[async]"+e}function Rd(e,t,n){if(t.count++,null===t.instance)switch(t.type){case"style":var r=e.querySelector('style[data-href~="'+gt(n.href)+'"]');if(r)return t.instance=r,Ge(r),r;var o=p({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return Ge(r=(e.ownerDocument||e).createElement("style")),ed(r,"style",o),Dd(r,n.precedence,e),t.instance=r;case"stylesheet":o=jd(n.href);var a=e.querySelector(Pd(o));if(a)return t.state.loading|=4,t.instance=a,Ge(a),a;r=Nd(n),(o=Sd.get(o))&&Fd(r,o),Ge(a=(e.ownerDocument||e).createElement("link"));var l=a;return l._p=new Promise(function(e,t){l.onload=e,l.onerror=t}),ed(a,"link",r),t.state.loading|=4,Dd(a,n.precedence,e),t.instance=a;case"script":return a=Ld(n.src),(o=e.querySelector(Od(a)))?(t.instance=o,Ge(o),o):(r=n,(o=Sd.get(a))&&Md(r=p({},n),o),Ge(o=(e=e.ownerDocument||e).createElement("script")),ed(o,"link",r),e.head.appendChild(o),t.instance=o);case"void":return null;default:throw Error(i(443,t.type))}else"stylesheet"===t.type&&!(4&t.state.loading)&&(r=t.instance,t.state.loading|=4,Dd(r,n.precedence,e));return t.instance}function Dd(e,t,n){for(var r=n.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),o=r.length?r[r.length-1]:null,a=o,i=0;i<r.length;i++){var l=r[i];if(l.dataset.precedence===t)a=l;else if(a!==o)break}a?a.parentNode.insertBefore(e,a.nextSibling):(t=9===n.nodeType?n.head:n).insertBefore(e,t.firstChild)}function Fd(e,t){null==e.crossOrigin&&(e.crossOrigin=t.crossOrigin),null==e.referrerPolicy&&(e.referrerPolicy=t.referrerPolicy),null==e.title&&(e.title=t.title)}function Md(e,t){null==e.crossOrigin&&(e.crossOrigin=t.crossOrigin),null==e.referrerPolicy&&(e.referrerPolicy=t.referrerPolicy),null==e.integrity&&(e.integrity=t.integrity)}var Id=null;function zd(e,t,n){if(null===Id){var r=new Map,o=Id=new Map;o.set(n,r)}else(r=(o=Id).get(n))||(r=new Map,o.set(n,r));if(r.has(e))return r;for(r.set(e,null),n=n.getElementsByTagName(e),o=0;o<n.length;o++){var a=n[o];if(!(a[ze]||a[Le]||"link"===e&&"stylesheet"===a.getAttribute("rel"))&&"http://www.w3.org/2000/svg"!==a.namespaceURI){var i=a.getAttribute(t)||"";i=e+i;var l=r.get(i);l?l.push(a):r.set(i,[a])}}return r}function Bd(e,t,n){(e=e.ownerDocument||e).head.insertBefore(n,"title"===t?e.querySelector("head > title"):null)}function $d(e){return!!("stylesheet"!==e.type||3&e.state.loading)}var Ud=null;function qd(){}function Hd(){if(this.count--,0===this.count)if(this.stylesheets)Vd(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}var Gd=null;function Vd(e,t){e.stylesheets=null,null!==e.unsuspend&&(e.count++,Gd=new Map,t.forEach(Wd,e),Gd=null,Hd.call(e))}function Wd(e,t){if(!(4&t.state.loading)){var n=Gd.get(e);if(n)var r=n.get(null);else{n=new Map,Gd.set(e,n);for(var o=e.querySelectorAll("link[data-precedence],style[data-precedence]"),a=0;a<o.length;a++){var i=o[a];"LINK"!==i.nodeName&&"not all"===i.getAttribute("media")||(n.set(i.dataset.precedence,i),r=i)}r&&n.set(null,r)}i=(o=t.instance).getAttribute("data-precedence"),(a=n.get(i)||r)===r&&n.set(null,o),n.set(i,o),this.count++,r=Hd.bind(this),o.addEventListener("load",r),o.addEventListener("error",r),a?a.parentNode.insertBefore(o,a.nextSibling):(e=9===e.nodeType?e.head:e).insertBefore(o,e.firstChild),t.state.loading|=4}}var Qd={$$typeof:k,Provider:null,Consumer:null,_currentValue:F,_currentValue2:F,_threadCount:0};function Kd(e,t,n,r,o,a,i,l){this.tag=1,this.containerInfo=e,this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.next=this.pendingContext=this.context=this.cancelPendingCommit=null,this.callbackPriority=0,this.expirationTimes=Ee(-1),this.entangledLanes=this.shellSuspendCounter=this.errorRecoveryDisabledLanes=this.expiredLanes=this.warmLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Ee(0),this.hiddenUpdates=Ee(null),this.identifierPrefix=r,this.onUncaughtError=o,this.onCaughtError=a,this.onRecoverableError=i,this.pooledCache=null,this.pooledCacheLanes=0,this.formState=l,this.incompleteTransitions=new Map}function Yd(e,t,n,r,o,a,i,l,s,c,u,d){return e=new Kd(e,t,n,i,l,s,c,d),t=1,!0===a&&(t|=24),a=Fr(3,null,null,t),e.current=a,a.stateNode=e,(t=Ro()).refCount++,e.pooledCache=t,t.refCount++,a.memoizedState={element:r,isDehydrated:n,cache:t},ra(a),e}function Xd(e){return e?e=Rr:Rr}function Zd(e,t,n,r,o,a){o=Xd(o),null===r.context?r.context=o:r.pendingContext=o,(r=aa(t)).payload={element:n},null!==(a=void 0===a?null:a)&&(r.callback=a),null!==(n=ia(e,r,t))&&(Fc(n,0,t),la(n,e,t))}function Jd(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function ep(e,t){Jd(e,t),(e=e.alternate)&&Jd(e,t)}function tp(e){if(13===e.tag){var t=Nr(e,67108864);null!==t&&Fc(t,0,67108864),ep(e,67108864)}}var np=!0;function rp(e,t,n,r){var o=R.T;R.T=null;var a=D.p;try{D.p=2,ap(e,t,n,r)}finally{D.p=a,R.T=o}}function op(e,t,n,r){var o=R.T;R.T=null;var a=D.p;try{D.p=8,ap(e,t,n,r)}finally{D.p=a,R.T=o}}function ap(e,t,n,r){if(np){var o=ip(r);if(null===o)Uu(e,t,r,lp,n),bp(e,r);else if(function(e,t,n,r,o){switch(t){case"focusin":return dp=vp(dp,e,t,n,r,o),!0;case"dragenter":return pp=vp(pp,e,t,n,r,o),!0;case"mouseover":return fp=vp(fp,e,t,n,r,o),!0;case"pointerover":var a=o.pointerId;return mp.set(a,vp(mp.get(a)||null,e,t,n,r,o)),!0;case"gotpointercapture":return a=o.pointerId,gp.set(a,vp(gp.get(a)||null,e,t,n,r,o)),!0}return!1}(o,e,t,n,r))r.stopPropagation();else if(bp(e,r),4&t&&-1<yp.indexOf(e)){for(;null!==o;){var a=Ue(o);if(null!==a)switch(a.tag){case 3:if((a=a.stateNode).current.memoizedState.isDehydrated){var i=be(a.pendingLanes);if(0!==i){var l=a;for(l.pendingLanes|=2,l.entangledLanes|=2;i;){var s=1<<31-fe(i);l.entanglements[1]|=s,i&=~s}Su(a),!(6&nc)&&(Sc=te()+500,xu(0,!1))}}break;case 13:null!==(l=Nr(a,2))&&Fc(l,0,2),$c(),ep(a,2)}if(null===(a=ip(r))&&Uu(e,t,r,lp,n),a===o)break;o=a}null!==o&&r.stopPropagation()}else Uu(e,t,r,null,n)}}function ip(e){return sp(e=Nt(e))}var lp=null;function sp(e){if(lp=null,null!==(e=$e(e))){var t=s(e);if(null===t)e=null;else{var n=t.tag;if(13===n){if(null!==(e=c(t)))return e;e=null}else if(3===n){if(t.stateNode.current.memoizedState.isDehydrated)return 3===t.tag?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null)}}return lp=e,null}function cp(e){switch(e){case"beforetoggle":case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"toggle":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 2;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 8;case"message":switch(ne()){case re:return 2;case oe:return 8;case ae:case ie:return 32;case le:return 268435456;default:return 32}default:return 32}}var up=!1,dp=null,pp=null,fp=null,mp=new Map,gp=new Map,hp=[],yp="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset".split(" ");function bp(e,t){switch(e){case"focusin":case"focusout":dp=null;break;case"dragenter":case"dragleave":pp=null;break;case"mouseover":case"mouseout":fp=null;break;case"pointerover":case"pointerout":mp.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":gp.delete(t.pointerId)}}function vp(e,t,n,r,o,a){return null===e||e.nativeEvent!==a?(e={blockedOn:t,domEventName:n,eventSystemFlags:r,nativeEvent:a,targetContainers:[o]},null!==t&&(null!==(t=Ue(t))&&tp(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,null!==o&&-1===t.indexOf(o)&&t.push(o),e)}function wp(e){var t=$e(e.target);if(null!==t){var n=s(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=c(n)))return e.blockedOn=t,void function(e,t){var n=D.p;try{return D.p=e,t()}finally{D.p=n}}(e.priority,function(){if(13===n.tag){var e=Rc();e=Te(e);var t=Nr(n,e);null!==t&&Fc(t,0,e),ep(n,e)}})}else if(3===t&&n.stateNode.current.memoizedState.isDehydrated)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function kp(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=ip(e.nativeEvent);if(null!==n)return null!==(t=Ue(n))&&tp(t),e.blockedOn=n,!1;var r=new(n=e.nativeEvent).constructor(n.type,n);Pt=r,n.target.dispatchEvent(r),Pt=null,t.shift()}return!0}function Sp(e,t,n){kp(e)&&n.delete(t)}function xp(){up=!1,null!==dp&&kp(dp)&&(dp=null),null!==pp&&kp(pp)&&(pp=null),null!==fp&&kp(fp)&&(fp=null),mp.forEach(Sp),gp.forEach(Sp)}function Ep(e,t){e.blockedOn===t&&(e.blockedOn=null,up||(up=!0,r.unstable_scheduleCallback(r.unstable_NormalPriority,xp)))}var _p=null;function Cp(e){_p!==e&&(_p=e,r.unstable_scheduleCallback(r.unstable_NormalPriority,function(){_p===e&&(_p=null);for(var t=0;t<e.length;t+=3){var n=e[t],r=e[t+1],o=e[t+2];if("function"!=typeof r){if(null===sp(r||n))continue;break}var a=Ue(n);null!==a&&(e.splice(t,3),t-=3,Ni(a,{pending:!0,data:o,method:n.method,action:r},r,o))}}))}function Ap(e){function t(t){return Ep(t,e)}null!==dp&&Ep(dp,e),null!==pp&&Ep(pp,e),null!==fp&&Ep(fp,e),mp.forEach(t),gp.forEach(t);for(var n=0;n<hp.length;n++){var r=hp[n];r.blockedOn===e&&(r.blockedOn=null)}for(;0<hp.length&&null===(n=hp[0]).blockedOn;)wp(n),null===n.blockedOn&&hp.shift();if(null!=(n=(e.ownerDocument||e).$$reactFormReplay))for(r=0;r<n.length;r+=3){var o=n[r],a=n[r+1],i=o[Oe]||null;if("function"==typeof a)i||Cp(n);else if(i){var l=null;if(a&&a.hasAttribute("formAction")){if(o=a,i=a[Oe]||null)l=i.formAction;else if(null!==sp(o))continue}else l=i.action;"function"==typeof l?n[r+1]=l:(n.splice(r,3),r-=3),Cp(n)}}}function Tp(e){this._internalRoot=e}function jp(e){this._internalRoot=e}jp.prototype.render=Tp.prototype.render=function(e){var t=this._internalRoot;if(null===t)throw Error(i(409));Zd(t.current,Rc(),e,t,null,null)},jp.prototype.unmount=Tp.prototype.unmount=function(){var e=this._internalRoot;if(null!==e){this._internalRoot=null;var t=e.containerInfo;Zd(e.current,2,null,e,null,null),$c(),t[Re]=null}},jp.prototype.unstable_scheduleHydration=function(e){if(e){var t=Pe();e={blockedOn:null,target:e,priority:t};for(var n=0;n<hp.length&&0!==t&&t<hp[n].priority;n++);hp.splice(n,0,e),0===n&&wp(e)}};var Pp=o.version;if("19.1.1"!==Pp)throw Error(i(527,Pp,"19.1.1"));D.findDOMNode=function(e){var t=e._reactInternals;if(void 0===t){if("function"==typeof e.render)throw Error(i(188));throw e=Object.keys(e).join(","),Error(i(268,e))}return e=function(e){var t=e.alternate;if(!t){if(null===(t=s(e)))throw Error(i(188));return t!==e?null:e}for(var n=e,r=t;;){var o=n.return;if(null===o)break;var a=o.alternate;if(null===a){if(null!==(r=o.return)){n=r;continue}break}if(o.child===a.child){for(a=o.child;a;){if(a===n)return u(o),e;if(a===r)return u(o),t;a=a.sibling}throw Error(i(188))}if(n.return!==r.return)n=o,r=a;else{for(var l=!1,c=o.child;c;){if(c===n){l=!0,n=o,r=a;break}if(c===r){l=!0,r=o,n=a;break}c=c.sibling}if(!l){for(c=a.child;c;){if(c===n){l=!0,n=a,r=o;break}if(c===r){l=!0,r=a,n=o;break}c=c.sibling}if(!l)throw Error(i(189))}}if(n.alternate!==r)throw Error(i(190))}if(3!==n.tag)throw Error(i(188));return n.stateNode.current===n?e:t}(t),e=null===(e=null!==e?d(e):null)?null:e.stateNode};var Np={bundleType:0,version:"19.1.1",rendererPackageName:"react-dom",currentDispatcherRef:R,reconcilerVersion:"19.1.1"};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var Lp=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!Lp.isDisabled&&Lp.supportsFiber)try{ue=Lp.inject(Np),de=Lp}catch(Rp){}}t.createRoot=function(e,t){if(!l(e))throw Error(i(299));var n=!1,r="",o=bl,a=vl,s=wl;return null!=t&&(!0===t.unstable_strictMode&&(n=!0),void 0!==t.identifierPrefix&&(r=t.identifierPrefix),void 0!==t.onUncaughtError&&(o=t.onUncaughtError),void 0!==t.onCaughtError&&(a=t.onCaughtError),void 0!==t.onRecoverableError&&(s=t.onRecoverableError),void 0!==t.unstable_transitionCallbacks&&t.unstable_transitionCallbacks),t=Yd(e,1,!1,null,0,n,r,o,a,s,0,null),e[Re]=t.current,Bu(e),new Tp(t)},t.hydrateRoot=function(e,t,n){if(!l(e))throw Error(i(299));var r=!1,o="",a=bl,s=vl,c=wl,u=null;return null!=n&&(!0===n.unstable_strictMode&&(r=!0),void 0!==n.identifierPrefix&&(o=n.identifierPrefix),void 0!==n.onUncaughtError&&(a=n.onUncaughtError),void 0!==n.onCaughtError&&(s=n.onCaughtError),void 0!==n.onRecoverableError&&(c=n.onRecoverableError),void 0!==n.unstable_transitionCallbacks&&n.unstable_transitionCallbacks,void 0!==n.formState&&(u=n.formState)),(t=Yd(e,1,!0,t,0,r,o,a,s,c,0,u)).context=Xd(null),n=t.current,(o=aa(r=Te(r=Rc()))).callback=null,ia(n,o,r),n=r,t.current.lanes=n,_e(t,n),Su(t),e[Re]=t.current,Bu(e),new jp(t)},t.version="19.1.1"},1312:(e,t,n)=>{"use strict";n.d(t,{A:()=>c,T:()=>s});var r=n(6540),o=n(4848);function a(e,t){const n=e.split(/(\{\w+\})/).map((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e});return n.some(e=>(0,r.isValidElement)(e))?n.map((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e).filter(e=>""!==e):n.join("")}var i=n(2654);function l({id:e,message:t}){if(void 0===e&&void 0===t)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return i[e??t]??t??e}function s({message:e,id:t},n){return a(l({message:e,id:t}),n)}function c({children:e,id:t,values:n}){if(e&&"string"!=typeof e)throw console.warn("Illegal <Translate> children",e),new Error("The Docusaurus <Translate> component only accept simple string values");const r=l({message:e,id:t});return(0,o.jsx)(o.Fragment,{children:a(r,n)})}},1422:(e,t,n)=>{"use strict";n.d(t,{N:()=>g,u:()=>s});var r=n(6540),o=n(205),a=n(3109),i=n(4848);const l="ease-in-out";function s({initialState:e}){const[t,n]=(0,r.useState)(e??!1),o=(0,r.useCallback)(()=>{n(e=>!e)},[]);return{collapsed:t,setCollapsed:n,toggleCollapsed:o}}const c={display:"none",overflow:"hidden",height:"0px"},u={display:"block",overflow:"visible",height:"auto"};function d(e,t){const n=t?c:u;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function p({collapsibleRef:e,collapsed:t,animation:n}){const o=(0,r.useRef)(!1);(0,r.useEffect)(()=>{const r=e.current;function i(){const e=r.scrollHeight,t=n?.duration??function(e){if((0,a.O)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(e);return{transition:`height ${t}ms ${n?.easing??l}`,height:`${e}px`}}function s(){const e=i();r.style.transition=e.transition,r.style.height=e.height}if(!o.current)return d(r,t),void(o.current=!0);return r.style.willChange="height",function(){const e=requestAnimationFrame(()=>{t?(s(),requestAnimationFrame(()=>{r.style.height=c.height,r.style.overflow=c.overflow})):(r.style.display="block",requestAnimationFrame(()=>{s()}))});return()=>cancelAnimationFrame(e)}()},[e,t,n])}function f({as:e="div",collapsed:t,children:n,animation:o,onCollapseTransitionEnd:a,className:l}){const s=(0,r.useRef)(null);return p({collapsibleRef:s,collapsed:t,animation:o}),(0,i.jsx)(e,{ref:s,onTransitionEnd:e=>{"height"===e.propertyName&&(d(s.current,t),a?.(t))},className:l,children:n})}function m({collapsed:e,...t}){const[n,a]=(0,r.useState)(!e),[l,s]=(0,r.useState)(e);return(0,o.A)(()=>{e||a(!0)},[e]),(0,o.A)(()=>{n&&s(e)},[n,e]),n?(0,i.jsx)(f,{...t,collapsed:l}):null}function g({lazy:e,...t}){const n=e?m:f;return(0,i.jsx)(n,{...t})}},1463:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});n(6540);var r=n(5260),o=n(4848);function a({locale:e,version:t,tag:n}){const a=e;return(0,o.jsxs)(r.A,{children:[e&&(0,o.jsx)("meta",{name:"docusaurus_locale",content:e}),t&&(0,o.jsx)("meta",{name:"docusaurus_version",content:t}),n&&(0,o.jsx)("meta",{name:"docusaurus_tag",content:n}),a&&(0,o.jsx)("meta",{name:"docsearch:language",content:a}),t&&(0,o.jsx)("meta",{name:"docsearch:version",content:t}),n&&(0,o.jsx)("meta",{name:"docsearch:docusaurus_tag",content:n})]})}},1513:(e,t,n)=>{"use strict";n.d(t,{zR:()=>w,TM:()=>C,yJ:()=>f,sC:()=>T,AO:()=>p});var r=n(8168);function o(e){return"/"===e.charAt(0)}function a(e,t){for(var n=t,r=n+1,o=e.length;r<o;n+=1,r+=1)e[n]=e[r];e.pop()}const i=function(e,t){void 0===t&&(t="");var n,r=e&&e.split("/")||[],i=t&&t.split("/")||[],l=e&&o(e),s=t&&o(t),c=l||s;if(e&&o(e)?i=r:r.length&&(i.pop(),i=i.concat(r)),!i.length)return"/";if(i.length){var u=i[i.length-1];n="."===u||".."===u||""===u}else n=!1;for(var d=0,p=i.length;p>=0;p--){var f=i[p];"."===f?a(i,p):".."===f?(a(i,p),d++):d&&(a(i,p),d--)}if(!c)for(;d--;d)i.unshift("..");!c||""===i[0]||i[0]&&o(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var l=n(1561);function s(e){return"/"===e.charAt(0)?e:"/"+e}function c(e){return"/"===e.charAt(0)?e.substr(1):e}function u(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 d(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 f(e,t,n,o){var a;"string"==typeof e?(a=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var a=t.indexOf("?");return-1!==a&&(n=t.substr(a),t=t.substr(0,a)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),a.state=t):(void 0===(a=(0,r.A)({},e)).pathname&&(a.pathname=""),a.search?"?"!==a.search.charAt(0)&&(a.search="?"+a.search):a.search="",a.hash?"#"!==a.hash.charAt(0)&&(a.hash="#"+a.hash):a.hash="",void 0!==t&&void 0===a.state&&(a.state=t));try{a.pathname=decodeURI(a.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+a.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(a.key=n),o?a.pathname?"/"!==a.pathname.charAt(0)&&(a.pathname=i(a.pathname,o.pathname)):a.pathname=o.pathname:a.pathname||(a.pathname="/"),a}function m(){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 a="function"==typeof e?e(t,n):e;"string"==typeof a?"function"==typeof r?r(a,o):o(!0):o(!1!==a)}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;r<e;r++)n[r]=arguments[r];t.forEach(function(e){return e.apply(void 0,n)})}}}var g=!("undefined"==typeof window||!window.document||!window.document.createElement);function h(e,t){t(window.confirm(e))}var y="popstate",b="hashchange";function v(){try{return window.history.state||{}}catch(e){return{}}}function w(e){void 0===e&&(e={}),g||(0,l.A)(!1);var t,n=window.history,o=(-1===(t=window.navigator.userAgent).indexOf("Android 2.")&&-1===t.indexOf("Android 4.0")||-1===t.indexOf("Mobile Safari")||-1!==t.indexOf("Chrome")||-1!==t.indexOf("Windows Phone"))&&window.history&&"pushState"in window.history,a=!(-1===window.navigator.userAgent.indexOf("Trident")),i=e,c=i.forceRefresh,w=void 0!==c&&c,k=i.getUserConfirmation,S=void 0===k?h:k,x=i.keyLength,E=void 0===x?6:x,_=e.basename?d(s(e.basename)):"";function C(e){var t=e||{},n=t.key,r=t.state,o=window.location,a=o.pathname+o.search+o.hash;return _&&(a=u(a,_)),f(a,r,n)}function A(){return Math.random().toString(36).substr(2,E)}var T=m();function j(e){(0,r.A)($,e),$.length=n.length,T.notifyListeners($.location,$.action)}function P(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")})(e)||O(C(e.state))}function N(){O(C(v()))}var L=!1;function O(e){if(L)L=!1,j();else{T.confirmTransitionTo(e,"POP",S,function(t){t?j({action:"POP",location:e}):function(e){var t=$.location,n=D.indexOf(t.key);-1===n&&(n=0);var r=D.indexOf(e.key);-1===r&&(r=0);var o=n-r;o&&(L=!0,M(o))}(e)})}}var R=C(v()),D=[R.key];function F(e){return _+p(e)}function M(e){n.go(e)}var I=0;function z(e){1===(I+=e)&&1===e?(window.addEventListener(y,P),a&&window.addEventListener(b,N)):0===I&&(window.removeEventListener(y,P),a&&window.removeEventListener(b,N))}var B=!1;var $={length:n.length,action:"POP",location:R,createHref:F,push:function(e,t){var r="PUSH",a=f(e,t,A(),$.location);T.confirmTransitionTo(a,r,S,function(e){if(e){var t=F(a),i=a.key,l=a.state;if(o)if(n.pushState({key:i,state:l},null,t),w)window.location.href=t;else{var s=D.indexOf($.location.key),c=D.slice(0,s+1);c.push(a.key),D=c,j({action:r,location:a})}else window.location.href=t}})},replace:function(e,t){var r="REPLACE",a=f(e,t,A(),$.location);T.confirmTransitionTo(a,r,S,function(e){if(e){var t=F(a),i=a.key,l=a.state;if(o)if(n.replaceState({key:i,state:l},null,t),w)window.location.replace(t);else{var s=D.indexOf($.location.key);-1!==s&&(D[s]=a.key),j({action:r,location:a})}else window.location.replace(t)}})},go:M,goBack:function(){M(-1)},goForward:function(){M(1)},block:function(e){void 0===e&&(e=!1);var t=T.setPrompt(e);return B||(z(1),B=!0),function(){return B&&(B=!1,z(-1)),t()}},listen:function(e){var t=T.appendListener(e);return z(1),function(){z(-1),t()}}};return $}var k="hashchange",S={hashbang:{encodePath:function(e){return"!"===e.charAt(0)?e:"!/"+c(e)},decodePath:function(e){return"!"===e.charAt(0)?e.substr(1):e}},noslash:{encodePath:c,decodePath:s},slash:{encodePath:s,decodePath:s}};function x(e){var t=e.indexOf("#");return-1===t?e:e.slice(0,t)}function E(){var e=window.location.href,t=e.indexOf("#");return-1===t?"":e.substring(t+1)}function _(e){window.location.replace(x(window.location.href)+"#"+e)}function C(e){void 0===e&&(e={}),g||(0,l.A)(!1);var t=window.history,n=(window.navigator.userAgent.indexOf("Firefox"),e),o=n.getUserConfirmation,a=void 0===o?h:o,i=n.hashType,c=void 0===i?"slash":i,y=e.basename?d(s(e.basename)):"",b=S[c],v=b.encodePath,w=b.decodePath;function C(){var e=w(E());return y&&(e=u(e,y)),f(e)}var A=m();function T(e){(0,r.A)(B,e),B.length=t.length,A.notifyListeners(B.location,B.action)}var j=!1,P=null;function N(){var e,t,n=E(),r=v(n);if(n!==r)_(r);else{var o=C(),i=B.location;if(!j&&(t=o,(e=i).pathname===t.pathname&&e.search===t.search&&e.hash===t.hash))return;if(P===p(o))return;P=null,function(e){if(j)j=!1,T();else{var t="POP";A.confirmTransitionTo(e,t,a,function(n){n?T({action:t,location:e}):function(e){var t=B.location,n=D.lastIndexOf(p(t));-1===n&&(n=0);var r=D.lastIndexOf(p(e));-1===r&&(r=0);var o=n-r;o&&(j=!0,F(o))}(e)})}}(o)}}var L=E(),O=v(L);L!==O&&_(O);var R=C(),D=[p(R)];function F(e){t.go(e)}var M=0;function I(e){1===(M+=e)&&1===e?window.addEventListener(k,N):0===M&&window.removeEventListener(k,N)}var z=!1;var B={length:t.length,action:"POP",location:R,createHref:function(e){var t=document.querySelector("base"),n="";return t&&t.getAttribute("href")&&(n=x(window.location.href)),n+"#"+v(y+p(e))},push:function(e,t){var n="PUSH",r=f(e,void 0,void 0,B.location);A.confirmTransitionTo(r,n,a,function(e){if(e){var t=p(r),o=v(y+t);if(E()!==o){P=t,function(e){window.location.hash=e}(o);var a=D.lastIndexOf(p(B.location)),i=D.slice(0,a+1);i.push(t),D=i,T({action:n,location:r})}else T()}})},replace:function(e,t){var n="REPLACE",r=f(e,void 0,void 0,B.location);A.confirmTransitionTo(r,n,a,function(e){if(e){var t=p(r),o=v(y+t);E()!==o&&(P=t,_(o));var a=D.indexOf(p(B.location));-1!==a&&(D[a]=t),T({action:n,location:r})}})},go:F,goBack:function(){F(-1)},goForward:function(){F(1)},block:function(e){void 0===e&&(e=!1);var t=A.setPrompt(e);return z||(I(1),z=!0),function(){return z&&(z=!1,I(-1)),t()}},listen:function(e){var t=A.appendListener(e);return I(1),function(){I(-1),t()}}};return B}function A(e,t,n){return Math.min(Math.max(e,t),n)}function T(e){void 0===e&&(e={});var t=e,n=t.getUserConfirmation,o=t.initialEntries,a=void 0===o?["/"]:o,i=t.initialIndex,l=void 0===i?0:i,s=t.keyLength,c=void 0===s?6:s,u=m();function d(e){(0,r.A)(w,e),w.length=w.entries.length,u.notifyListeners(w.location,w.action)}function g(){return Math.random().toString(36).substr(2,c)}var h=A(l,0,a.length-1),y=a.map(function(e){return f(e,void 0,"string"==typeof e?g():e.key||g())}),b=p;function v(e){var t=A(w.index+e,0,w.entries.length-1),r=w.entries[t];u.confirmTransitionTo(r,"POP",n,function(e){e?d({action:"POP",location:r,index:t}):d()})}var w={length:y.length,action:"POP",location:y[h],index:h,entries:y,createHref:b,push:function(e,t){var r="PUSH",o=f(e,t,g(),w.location);u.confirmTransitionTo(o,r,n,function(e){if(e){var t=w.index+1,n=w.entries.slice(0);n.length>t?n.splice(t,n.length-t,o):n.push(o),d({action:r,location:o,index:t,entries:n})}})},replace:function(e,t){var r="REPLACE",o=f(e,t,g(),w.location);u.confirmTransitionTo(o,r,n,function(e){e&&(w.entries[w.index]=o,d({action:r,location:o}))})},go:v,goBack:function(){v(-1)},goForward:function(){v(1)},canGo:function(e){var t=w.index+e;return t>=0&&t<w.entries.length},block:function(e){return void 0===e&&(e=!1),u.setPrompt(e)},listen:function(e){return u.appendListener(e)}};return w}},1561:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var r=!0,o="Invariant failed";function a(e,t){if(!e){if(r)throw new Error(o);var n="function"==typeof t?t():t,a=n?"".concat(o,": ").concat(n):o;throw new Error(a)}}},1635:(e,t,n)=>{"use strict";n.r(t),n.d(t,{__addDisposableResource:()=>D,__assign:()=>a,__asyncDelegator:()=>_,__asyncGenerator:()=>E,__asyncValues:()=>C,__await:()=>x,__awaiter:()=>m,__classPrivateFieldGet:()=>L,__classPrivateFieldIn:()=>R,__classPrivateFieldSet:()=>O,__createBinding:()=>h,__decorate:()=>l,__disposeResources:()=>M,__esDecorate:()=>c,__exportStar:()=>y,__extends:()=>o,__generator:()=>g,__importDefault:()=>N,__importStar:()=>P,__makeTemplateObject:()=>A,__metadata:()=>f,__param:()=>s,__propKey:()=>d,__read:()=>v,__rest:()=>i,__rewriteRelativeImportExtension:()=>I,__runInitializers:()=>u,__setFunctionName:()=>p,__spread:()=>w,__spreadArray:()=>S,__spreadArrays:()=>k,__values:()=>b,default:()=>z});var r=function(e,t){return r=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])},r(e,t)};function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var a=function(){return a=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},a.apply(this,arguments)};function i(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<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n}function l(e,t,n,r){var o,a=arguments.length,i=a<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)i=Reflect.decorate(e,t,n,r);else for(var l=e.length-1;l>=0;l--)(o=e[l])&&(i=(a<3?o(i):a>3?o(t,n,i):o(t,n))||i);return a>3&&i&&Object.defineProperty(t,n,i),i}function s(e,t){return function(n,r){t(n,r,e)}}function c(e,t,n,r,o,a){function i(e){if(void 0!==e&&"function"!=typeof e)throw new TypeError("Function expected");return e}for(var l,s=r.kind,c="getter"===s?"get":"setter"===s?"set":"value",u=!t&&e?r.static?e:e.prototype:null,d=t||(u?Object.getOwnPropertyDescriptor(u,r.name):{}),p=!1,f=n.length-1;f>=0;f--){var m={};for(var g in r)m[g]="access"===g?{}:r[g];for(var g in r.access)m.access[g]=r.access[g];m.addInitializer=function(e){if(p)throw new TypeError("Cannot add initializers after decoration has completed");a.push(i(e||null))};var h=(0,n[f])("accessor"===s?{get:d.get,set:d.set}:d[c],m);if("accessor"===s){if(void 0===h)continue;if(null===h||"object"!=typeof h)throw new TypeError("Object expected");(l=i(h.get))&&(d.get=l),(l=i(h.set))&&(d.set=l),(l=i(h.init))&&o.unshift(l)}else(l=i(h))&&("field"===s?o.unshift(l):d[c]=l)}u&&Object.defineProperty(u,r.name,d),p=!0}function u(e,t,n){for(var r=arguments.length>2,o=0;o<t.length;o++)n=r?t[o].call(e,n):t[o].call(e);return r?n:void 0}function d(e){return"symbol"==typeof e?e:"".concat(e)}function p(e,t,n){return"symbol"==typeof t&&(t=t.description?"[".concat(t.description,"]"):""),Object.defineProperty(e,"name",{configurable:!0,value:n?"".concat(n," ",t):t})}function f(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)}function m(e,t,n,r){return new(n||(n=Promise))(function(o,a){function i(e){try{s(r.next(e))}catch(t){a(t)}}function l(e){try{s(r.throw(e))}catch(t){a(t)}}function s(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(i,l)}s((r=r.apply(e,t||[])).next())})}function g(e,t){var n,r,o,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},i=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return i.next=l(0),i.throw=l(1),i.return=l(2),"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function l(l){return function(s){return function(l){if(n)throw new TypeError("Generator is already executing.");for(;i&&(i=0,l[0]&&(a=0)),a;)try{if(n=1,r&&(o=2&l[0]?r.return:l[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,l[1])).done)return o;switch(r=0,o&&(l=[2&l[0],o.value]),l[0]){case 0:case 1:o=l;break;case 4:return a.label++,{value:l[1],done:!1};case 5:a.label++,r=l[1],l=[0];continue;case 7:l=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==l[0]&&2!==l[0])){a=0;continue}if(3===l[0]&&(!o||l[1]>o[0]&&l[1]<o[3])){a.label=l[1];break}if(6===l[0]&&a.label<o[1]){a.label=o[1],o=l;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(l);break}o[2]&&a.ops.pop(),a.trys.pop();continue}l=t.call(e,a)}catch(s){l=[6,s],r=0}finally{n=o=0}if(5&l[0])throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}([l,s])}}}var h=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]};function y(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||h(t,e,n)}function b(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function v(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,a=n.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(r=a.next()).done;)i.push(r.value)}catch(l){o={error:l}}finally{try{r&&!r.done&&(n=a.return)&&n.call(a)}finally{if(o)throw o.error}}return i}function w(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(v(arguments[t]));return e}function k(){for(var e=0,t=0,n=arguments.length;t<n;t++)e+=arguments[t].length;var r=Array(e),o=0;for(t=0;t<n;t++)for(var a=arguments[t],i=0,l=a.length;i<l;i++,o++)r[o]=a[i];return r}function S(e,t,n){if(n||2===arguments.length)for(var r,o=0,a=t.length;o<a;o++)!r&&o in t||(r||(r=Array.prototype.slice.call(t,0,o)),r[o]=t[o]);return e.concat(r||Array.prototype.slice.call(t))}function x(e){return this instanceof x?(this.v=e,this):new x(e)}function E(e,t,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var r,o=n.apply(e,t||[]),a=[];return r=Object.create(("function"==typeof AsyncIterator?AsyncIterator:Object).prototype),i("next"),i("throw"),i("return",function(e){return function(t){return Promise.resolve(t).then(e,c)}}),r[Symbol.asyncIterator]=function(){return this},r;function i(e,t){o[e]&&(r[e]=function(t){return new Promise(function(n,r){a.push([e,t,n,r])>1||l(e,t)})},t&&(r[e]=t(r[e])))}function l(e,t){try{(n=o[e](t)).value instanceof x?Promise.resolve(n.value.v).then(s,c):u(a[0][2],n)}catch(r){u(a[0][3],r)}var n}function s(e){l("next",e)}function c(e){l("throw",e)}function u(e,t){e(t),a.shift(),a.length&&l(a[0][0],a[0][1])}}function _(e){var t,n;return t={},r("next"),r("throw",function(e){throw e}),r("return"),t[Symbol.iterator]=function(){return this},t;function r(r,o){t[r]=e[r]?function(t){return(n=!n)?{value:x(e[r](t)),done:!1}:o?o(t):t}:o}}function C(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t,n=e[Symbol.asyncIterator];return n?n.call(e):(e=b(e),t={},r("next"),r("throw"),r("return"),t[Symbol.asyncIterator]=function(){return this},t);function r(n){t[n]=e[n]&&function(t){return new Promise(function(r,o){(function(e,t,n,r){Promise.resolve(r).then(function(t){e({value:t,done:n})},t)})(r,o,(t=e[n](t)).done,t.value)})}}}function A(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e}var T=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},j=function(e){return j=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},j(e)};function P(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=j(e),r=0;r<n.length;r++)"default"!==n[r]&&h(t,e,n[r]);return T(t,e),t}function N(e){return e&&e.__esModule?e:{default:e}}function L(e,t,n,r){if("a"===n&&!r)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?r:"a"===n?r.call(e):r?r.value:t.get(e)}function O(e,t,n,r,o){if("m"===r)throw new TypeError("Private method is not writable");if("a"===r&&!o)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!o:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===r?o.call(e,n):o?o.value=n:t.set(e,n),n}function R(e,t){if(null===t||"object"!=typeof t&&"function"!=typeof t)throw new TypeError("Cannot use 'in' operator on non-object");return"function"==typeof e?t===e:e.has(t)}function D(e,t,n){if(null!=t){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object expected.");var r,o;if(n){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");r=t[Symbol.asyncDispose]}if(void 0===r){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");r=t[Symbol.dispose],n&&(o=r)}if("function"!=typeof r)throw new TypeError("Object not disposable.");o&&(r=function(){try{o.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:r,async:n})}else n&&e.stack.push({async:!0});return t}var F="function"==typeof SuppressedError?SuppressedError:function(e,t,n){var r=new Error(n);return r.name="SuppressedError",r.error=e,r.suppressed=t,r};function M(e){function t(t){e.error=e.hasError?new F(t,e.error,"An error was suppressed during disposal."):t,e.hasError=!0}var n,r=0;return function o(){for(;n=e.stack.pop();)try{if(!n.async&&1===r)return r=0,e.stack.push(n),Promise.resolve().then(o);if(n.dispose){var a=n.dispose.call(n.value);if(n.async)return r|=2,Promise.resolve(a).then(o,function(e){return t(e),o()})}else r|=1}catch(i){t(i)}if(1===r)return e.hasError?Promise.reject(e.error):Promise.resolve();if(e.hasError)throw e.error}()}function I(e,t){return"string"==typeof e&&/^\.\.?\//.test(e)?e.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i,function(e,n,r,o,a){return n?t?".jsx":".js":!r||o&&a?r+o+"."+a.toLowerCase()+"js":e}):e}const z={__extends:o,__assign:a,__rest:i,__decorate:l,__param:s,__esDecorate:c,__runInitializers:u,__propKey:d,__setFunctionName:p,__metadata:f,__awaiter:m,__generator:g,__createBinding:h,__exportStar:y,__values:b,__read:v,__spread:w,__spreadArrays:k,__spreadArray:S,__await:x,__asyncGenerator:E,__asyncDelegator:_,__asyncValues:C,__makeTemplateObject:A,__importStar:P,__importDefault:N,__classPrivateFieldGet:L,__classPrivateFieldSet:O,__classPrivateFieldIn:R,__addDisposableResource:D,__disposeResources:M,__rewriteRelativeImportExtension:I}},1656:(e,t,n)=>{"use strict";n.d(t,{A:()=>At});var r=n(6540),o=n(4164),a=n(7489),i=n(5500),l=n(6347),s=n(1312),c=n(5062),u=n(4848);const d="__docusaurus_skipToContent_fallback";function p(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function f(){const e=(0,r.useRef)(null),{action:t}=(0,l.W6)(),n=(0,r.useCallback)(e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&p(t)},[]);return(0,c.$)(({location:n})=>{e.current&&!n.hash&&"PUSH"===t&&p(e.current)}),{containerRef:e,onClick:n}}const m=(0,s.T)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function g(e){const t=e.children??m,{containerRef:n,onClick:r}=f();return(0,u.jsx)("div",{ref:n,role:"region","aria-label":m,children:(0,u.jsx)("a",{...e,href:`#${d}`,onClick:r,children:t})})}var h=n(7559),y=n(4090);const b={skipToContent:"skipToContent_fXgn"};function v(){return(0,u.jsx)(g,{className:b.skipToContent})}var w=n(6342),k=n(5041);function S({width:e=21,height:t=21,color:n="currentColor",strokeWidth:r=1.2,className:o,...a}){return(0,u.jsx)("svg",{viewBox:"0 0 15 15",width:e,height:t,...a,children:(0,u.jsx)("g",{stroke:n,strokeWidth:r,children:(0,u.jsx)("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})})})}const x={closeButton:"closeButton_CVFx"};function E(e){return(0,u.jsx)("button",{type:"button","aria-label":(0,s.T)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"}),...e,className:(0,o.A)("clean-btn close",x.closeButton,e.className),children:(0,u.jsx)(S,{width:14,height:14,strokeWidth:3.1})})}const _={content:"content_knG7"};function C(e){const{announcementBar:t}=(0,w.p)(),{content:n}=t;return(0,u.jsx)("div",{...e,className:(0,o.A)(_.content,e.className),dangerouslySetInnerHTML:{__html:n}})}const A={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function T(){const{announcementBar:e}=(0,w.p)(),{isActive:t,close:n}=(0,k.M)();if(!t)return null;const{backgroundColor:r,textColor:a,isCloseable:i}=e;return(0,u.jsxs)("div",{className:(0,o.A)(h.G.announcementBar.container,A.announcementBar),style:{backgroundColor:r,color:a},role:"banner",children:[i&&(0,u.jsx)("div",{className:A.announcementBarPlaceholder}),(0,u.jsx)(C,{className:A.announcementBarContent}),i&&(0,u.jsx)(E,{onClick:n,className:A.announcementBarClose})]})}var j=n(9876),P=n(3104);var N=n(9532),L=n(5600);const O=r.createContext(null);function R({children:e}){const t=function(){const e=(0,j.M)(),t=(0,L.YL)(),[n,o]=(0,r.useState)(!1),a=null!==t.component,i=(0,N.ZC)(a);return(0,r.useEffect)(()=>{a&&!i&&o(!0)},[a,i]),(0,r.useEffect)(()=>{a?e.shown||o(!0):o(!1)},[e.shown,a]),(0,r.useMemo)(()=>[n,o],[n])}();return(0,u.jsx)(O.Provider,{value:t,children:e})}function D(e){if(e.component){const t=e.component;return(0,u.jsx)(t,{...e.props})}}function F(){const e=(0,r.useContext)(O);if(!e)throw new N.dV("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,o=(0,r.useCallback)(()=>n(!1),[n]),a=(0,L.YL)();return(0,r.useMemo)(()=>({shown:t,hide:o,content:D(a)}),[o,a,t])}function M(e){return parseInt(r.version.split(".")[0],10)<19?{inert:e?"":void 0}:{inert:e}}function I({children:e,inert:t}){return(0,u.jsx)("div",{className:(0,o.A)(h.G.layout.navbar.mobileSidebar.panel,"navbar-sidebar__item menu"),...M(t),children:e})}function z({header:e,primaryMenu:t,secondaryMenu:n}){const{shown:r}=F();return(0,u.jsxs)("div",{className:(0,o.A)(h.G.layout.navbar.mobileSidebar.container,"navbar-sidebar"),children:[e,(0,u.jsxs)("div",{className:(0,o.A)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":r}),children:[(0,u.jsx)(I,{inert:r,children:t}),(0,u.jsx)(I,{inert:!r,children:n})]})]})}var B=n(5293),$=n(2303);function U(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"})})}function q(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"})})}function H(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"m12 21c4.971 0 9-4.029 9-9s-4.029-9-9-9-9 4.029-9 9 4.029 9 9 9zm4.95-13.95c1.313 1.313 2.05 3.093 2.05 4.95s-0.738 3.637-2.05 4.95c-1.313 1.313-3.093 2.05-4.95 2.05v-14c1.857 0 3.637 0.737 4.95 2.05z"})})}const G="toggle_vylO",V="toggleButton_gllP",W="toggleIcon_g3eP",Q="systemToggleIcon_QzmC",K="lightToggleIcon_pyhR",Y="darkToggleIcon_wfgR",X="toggleButtonDisabled_aARS";function Z(e){switch(e){case null:return(0,s.T)({message:"system mode",id:"theme.colorToggle.ariaLabel.mode.system",description:"The name for the system color mode"});case"light":return(0,s.T)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"});case"dark":return(0,s.T)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"});default:throw new Error(`unexpected color mode ${e}`)}}function J(e){return(0,s.T)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the color mode toggle"},{mode:Z(e)})}function ee(){return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(U,{"aria-hidden":!0,className:(0,o.A)(W,K)}),(0,u.jsx)(q,{"aria-hidden":!0,className:(0,o.A)(W,Y)}),(0,u.jsx)(H,{"aria-hidden":!0,className:(0,o.A)(W,Q)})]})}function te({className:e,buttonClassName:t,respectPrefersColorScheme:n,value:r,onChange:a}){const i=(0,$.A)();return(0,u.jsx)("div",{className:(0,o.A)(G,e),children:(0,u.jsx)("button",{className:(0,o.A)("clean-btn",V,!i&&X,t),type:"button",onClick:()=>a(function(e,t){if(!t)return"dark"===e?"light":"dark";switch(e){case null:return"light";case"light":return"dark";case"dark":return null;default:throw new Error(`unexpected color mode ${e}`)}}(r,n)),disabled:!i,title:Z(r),"aria-label":J(r),children:(0,u.jsx)(ee,{})})})}const ne=r.memo(te),re={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function oe({className:e}){const t=(0,w.p)().navbar.style,{disableSwitch:n,respectPrefersColorScheme:r}=(0,w.p)().colorMode,{colorModeChoice:o,setColorMode:a}=(0,B.G)();return n?null:(0,u.jsx)(ne,{className:e,buttonClassName:"dark"===t?re.darkNavbarColorModeToggle:void 0,respectPrefersColorScheme:r,value:o,onChange:a})}var ae=n(3465);function ie(){return(0,u.jsx)(ae.A,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function le(){const e=(0,j.M)();return(0,u.jsx)("button",{type:"button","aria-label":(0,s.T)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle(),children:(0,u.jsx)(S,{color:"var(--ifm-color-emphasis-600)"})})}function se(){return(0,u.jsxs)("div",{className:"navbar-sidebar__brand",children:[(0,u.jsx)(ie,{}),(0,u.jsx)(oe,{className:"margin-right--md"}),(0,u.jsx)(le,{})]})}var ce=n(8774),ue=n(6025),de=n(6654);function pe(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var fe=n(3186);function me({activeBasePath:e,activeBaseRegex:t,to:n,href:r,label:o,html:a,isDropdownLink:i,prependBaseUrlToHref:l,...s}){const c=(0,ue.Ay)(n),d=(0,ue.Ay)(e),p=(0,ue.Ay)(r,{forcePrependBaseUrl:!0}),f=o&&r&&!(0,de.A)(r),m=a?{dangerouslySetInnerHTML:{__html:a}}:{children:(0,u.jsxs)(u.Fragment,{children:[o,f&&(0,u.jsx)(fe.A,{...i&&{width:12,height:12}})]})};return r?(0,u.jsx)(ce.A,{href:l?p:r,...s,...m}):(0,u.jsx)(ce.A,{to:c,isNavLink:!0,...(e||t)&&{isActive:(e,n)=>t?pe(t,n.pathname):n.pathname.startsWith(d)},...s,...m})}function ge({className:e,isDropdownItem:t,...n}){return(0,u.jsx)("li",{className:"menu__list-item",children:(0,u.jsx)(me,{className:(0,o.A)("menu__link",e),...n})})}function he({className:e,isDropdownItem:t=!1,...n}){const r=(0,u.jsx)(me,{className:(0,o.A)(t?"dropdown__link":"navbar__item navbar__link",e),isDropdownLink:t,...n});return t?(0,u.jsx)("li",{children:r}):r}function ye({mobile:e=!1,position:t,...n}){const r=e?ge:he;return(0,u.jsx)(r,{...n,activeClassName:n.activeClassName??(e?"menu__link--active":"navbar__link--active")})}var be=n(1422),ve=n(9169),we=n(4586);const ke="dropdownNavbarItemMobile_J0Sd";function Se(e,t){return e.some(e=>function(e,t){return!!(0,ve.ys)(e.to,t)||!!pe(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t))}function xe({collapsed:e,onClick:t}){return(0,u.jsx)("button",{"aria-label":e?(0,s.T)({id:"theme.navbar.mobileDropdown.collapseButton.expandAriaLabel",message:"Expand the dropdown",description:"The ARIA label of the button to expand the mobile dropdown navbar item"}):(0,s.T)({id:"theme.navbar.mobileDropdown.collapseButton.collapseAriaLabel",message:"Collapse the dropdown",description:"The ARIA label of the button to collapse the mobile dropdown navbar item"}),"aria-expanded":!e,type:"button",className:"clean-btn menu__caret",onClick:t})}function Ee({items:e,className:t,position:n,onClick:a,...i}){const s=function(){const{siteConfig:{baseUrl:e}}=(0,we.A)(),{pathname:t}=(0,l.zy)();return t.replace(e,"/")}(),c=(0,ve.ys)(i.to,s),d=Se(e,s),{collapsed:p,toggleCollapsed:f}=function({active:e}){const{collapsed:t,toggleCollapsed:n,setCollapsed:o}=(0,be.u)({initialState:()=>!e});return(0,r.useEffect)(()=>{e&&o(!1)},[e,o]),{collapsed:t,toggleCollapsed:n}}({active:c||d}),m=i.to?void 0:"#";return(0,u.jsxs)("li",{className:(0,o.A)("menu__list-item",{"menu__list-item--collapsed":p}),children:[(0,u.jsxs)("div",{className:(0,o.A)("menu__list-item-collapsible",{"menu__list-item-collapsible--active":c}),children:[(0,u.jsx)(me,{role:"button",className:(0,o.A)(ke,"menu__link menu__link--sublist",t),href:m,...i,onClick:e=>{"#"===m&&e.preventDefault(),f()},children:i.children??i.label}),(0,u.jsx)(xe,{collapsed:p,onClick:e=>{e.preventDefault(),f()}})]}),(0,u.jsx)(be.N,{lazy:!0,as:"ul",className:"menu__list",collapsed:p,children:e.map((e,t)=>(0,r.createElement)(ze,{mobile:!0,isDropdownItem:!0,onClick:a,activeClassName:"menu__link--active",...e,key:t}))})]})}function _e({items:e,position:t,className:n,onClick:a,...i}){const l=(0,r.useRef)(null),[s,c]=(0,r.useState)(!1);return(0,r.useEffect)(()=>{const e=e=>{l.current&&!l.current.contains(e.target)&&c(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}},[l]),(0,u.jsxs)("div",{ref:l,className:(0,o.A)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===t,"dropdown--show":s}),children:[(0,u.jsx)(me,{"aria-haspopup":"true","aria-expanded":s,role:"button",href:i.to?void 0:"#",className:(0,o.A)("navbar__link",n),...i,onClick:i.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),c(!s))},children:i.children??i.label}),(0,u.jsx)("ul",{className:"dropdown__menu",children:e.map((e,t)=>(0,r.createElement)(ze,{isDropdownItem:!0,activeClassName:"dropdown__link--active",...e,key:t}))})]})}function Ce({mobile:e=!1,...t}){const n=e?Ee:_e;return(0,u.jsx)(n,{...t})}var Ae=n(2131);function Te({width:e=20,height:t=20,...n}){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:e,height:t,"aria-hidden":!0,...n,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"})})}const je="iconLanguage_nlXk";var Pe=n(418);const Ne={navbarSearchContainer:"navbarSearchContainer_Bca1"};function Le({children:e,className:t}){return(0,u.jsx)("div",{className:(0,o.A)(t,Ne.navbarSearchContainer),children:e})}var Oe=n(4070),Re=n(4718);var De=n(3886);function Fe({docsPluginId:e,configs:t}){return function(e,t){if(t){const n=new Map(e.map(e=>[e.name,e])),r=(t,r)=>{const o=n.get(t);if(!o)throw new Error(`No docs version exist for name '${t}', please verify your 'docsVersionDropdown' navbar item versions config.\nAvailable version names:\n- ${e.map(e=>`${e.name}`).join("\n- ")}`);return{version:o,label:r?.label??o.label}};return Array.isArray(t)?t.map(e=>r(e,void 0)):Object.entries(t).map(([e,t])=>r(e,t))}return e.map(e=>({version:e,label:e.label}))}((0,Oe.jh)(e),t)}function Me(e,t){return t.alternateDocVersions[e.name]??function(e){return e.docs.find(t=>t.id===e.mainDocId)}(e)}const Ie={default:ye,localeDropdown:function({mobile:e,dropdownItemsBefore:t,dropdownItemsAfter:n,queryString:r="",...o}){const{i18n:{currentLocale:a,locales:i,localeConfigs:c}}=(0,we.A)(),d=(0,Ae.o)(),{search:p,hash:f}=(0,l.zy)(),m=[...t,...i.map(t=>{const n=`${`pathname://${d.createUrl({locale:t,fullyQualified:!1})}`}${p}${f}${r}`;return{label:c[t].label,lang:c[t].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:t===a?e?"menu__link--active":"dropdown__link--active":""}}),...n],g=e?(0,s.T)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):c[a].label;return(0,u.jsx)(Ce,{...o,mobile:e,label:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(Te,{className:je}),g]}),items:m})},search:function({mobile:e,className:t}){return e?null:(0,u.jsx)(Le,{className:t,children:(0,u.jsx)(Pe.A,{})})},dropdown:Ce,html:function({value:e,className:t,mobile:n=!1,isDropdownItem:r=!1}){const a=r?"li":"div";return(0,u.jsx)(a,{className:(0,o.A)({navbar__item:!n&&!r,"menu__list-item":n},t),dangerouslySetInnerHTML:{__html:e}})},doc:function({docId:e,label:t,docsPluginId:n,...r}){const{activeDoc:o}=(0,Oe.zK)(n),a=(0,Re.QB)(e,n),i=o?.path===a?.path;return null===a||a.unlisted&&!i?null:(0,u.jsx)(ye,{exact:!0,...r,isActive:()=>i||!!o?.sidebar&&o.sidebar===a.sidebar,label:t??a.id,to:a.path})},docSidebar:function({sidebarId:e,label:t,docsPluginId:n,...r}){const{activeDoc:o}=(0,Oe.zK)(n),a=(0,Re.fW)(e,n).link;if(!a)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${e}" doesn't have anything to be linked to.`);return(0,u.jsx)(ye,{exact:!0,...r,isActive:()=>o?.sidebar===e,label:t??a.label,to:a.path})},docsVersion:function({label:e,to:t,docsPluginId:n,...r}){const o=(0,Re.Vd)(n)[0],a=e??o.label,i=t??(e=>e.docs.find(t=>t.id===e.mainDocId))(o).path;return(0,u.jsx)(ye,{...r,label:a,to:i})},docsVersionDropdown:function({mobile:e,docsPluginId:t,dropdownActiveClassDisabled:n,dropdownItemsBefore:r,dropdownItemsAfter:o,versions:a,...i}){const{search:c,hash:d}=(0,l.zy)(),p=(0,Oe.zK)(t),{savePreferredVersionName:f}=(0,De.g1)(t),m=Fe({docsPluginId:t,configs:a}),g=function({docsPluginId:e,versionItems:t}){return(0,Re.Vd)(e).map(e=>t.find(t=>t.version===e)).filter(e=>void 0!==e)[0]??t[0]}({docsPluginId:t,versionItems:m}),h=[...r,...m.map(function({version:e,label:t}){return{label:t,to:`${Me(e,p).path}${c}${d}`,isActive:()=>e===p.activeVersion,onClick:()=>f(e.name)}}),...o],y=e&&h.length>1?(0,s.T)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):g.label,b=e&&h.length>1?void 0:Me(g.version,p).path;return h.length<=1?(0,u.jsx)(ye,{...i,mobile:e,label:y,to:b,isActive:n?()=>!1:void 0}):(0,u.jsx)(Ce,{...i,mobile:e,label:y,to:b,items:h,isActive:n?()=>!1:void 0})}};function ze({type:e,...t}){const n=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(e,t),r=Ie[n];if(!r)throw new Error(`No NavbarItem component found for type "${e}".`);return(0,u.jsx)(r,{...t})}function Be(){const e=(0,j.M)(),t=(0,w.p)().navbar.items;return(0,u.jsx)("ul",{className:"menu__list",children:t.map((t,n)=>(0,r.createElement)(ze,{mobile:!0,...t,onClick:()=>e.toggle(),key:n}))})}function $e(e){return(0,u.jsx)("button",{...e,type:"button",className:"clean-btn navbar-sidebar__back",children:(0,u.jsx)(s.A,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)",children:"\u2190 Back to main menu"})})}function Ue(){const e=0===(0,w.p)().navbar.items.length,t=F();return(0,u.jsxs)(u.Fragment,{children:[!e&&(0,u.jsx)($e,{onClick:()=>t.hide()}),t.content]})}function qe(){const e=(0,j.M)();return function(e=!0){(0,r.useEffect)(()=>(document.body.style.overflow=e?"hidden":"visible",()=>{document.body.style.overflow="visible"}),[e])}(e.shown),e.shouldRender?(0,u.jsx)(z,{header:(0,u.jsx)(se,{}),primaryMenu:(0,u.jsx)(Be,{}),secondaryMenu:(0,u.jsx)(Ue,{})}):null}const He={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Ge(e){return(0,u.jsx)("div",{role:"presentation",...e,className:(0,o.A)("navbar-sidebar__backdrop",e.className)})}function Ve({children:e}){const{navbar:{hideOnScroll:t,style:n}}=(0,w.p)(),a=(0,j.M)(),{navbarRef:i,isNavbarVisible:l}=function(e){const[t,n]=(0,r.useState)(e),o=(0,r.useRef)(!1),a=(0,r.useRef)(0),i=(0,r.useCallback)(e=>{null!==e&&(a.current=e.getBoundingClientRect().height)},[]);return(0,P.Mq)(({scrollY:t},r)=>{if(!e)return;if(t<a.current)return void n(!0);if(o.current)return void(o.current=!1);const i=r?.scrollY,l=document.documentElement.scrollHeight-a.current,s=window.innerHeight;i&&t>=i?n(!1):t+s<l&&n(!0)}),(0,c.$)(t=>{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return o.current=!0,void n(!1);n(!0)}),{navbarRef:i,isNavbarVisible:t}}(t);return(0,u.jsxs)("nav",{ref:i,"aria-label":(0,s.T)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,o.A)(h.G.layout.navbar.container,"navbar","navbar--fixed-top",t&&[He.navbarHideable,!l&&He.navbarHidden],{"navbar--dark":"dark"===n,"navbar--primary":"primary"===n,"navbar-sidebar--show":a.shown}),children:[e,(0,u.jsx)(Ge,{onClick:a.toggle}),(0,u.jsx)(qe,{})]})}var We=n(440);const Qe={errorBoundaryError:"errorBoundaryError_a6uf",errorBoundaryFallback:"errorBoundaryFallback_VBag"};function Ke(e){return(0,u.jsx)("button",{type:"button",...e,children:(0,u.jsx)(s.A,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error",children:"Try again"})})}function Ye({error:e}){const t=(0,We.rA)(e).map(e=>e.message).join("\n\nCause:\n");return(0,u.jsx)("p",{className:Qe.errorBoundaryError,children:t})}class Xe extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const Ze="right";function Je({width:e=30,height:t=30,className:n,...r}){return(0,u.jsx)("svg",{className:n,width:e,height:t,viewBox:"0 0 30 30","aria-hidden":"true",...r,children:(0,u.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"})})}function et(){const{toggle:e,shown:t}=(0,j.M)();return(0,u.jsx)("button",{onClick:e,"aria-label":(0,s.T)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button",children:(0,u.jsx)(Je,{})})}const tt={colorModeToggle:"colorModeToggle_DEke"};function nt({items:e}){return(0,u.jsx)(u.Fragment,{children:e.map((e,t)=>(0,u.jsx)(Xe,{onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t}),children:(0,u.jsx)(ze,{...e})},t))})}function rt({left:e,right:t}){return(0,u.jsxs)("div",{className:"navbar__inner",children:[(0,u.jsx)("div",{className:(0,o.A)(h.G.layout.navbar.containerLeft,"navbar__items"),children:e}),(0,u.jsx)("div",{className:(0,o.A)(h.G.layout.navbar.containerRight,"navbar__items navbar__items--right"),children:t})]})}function ot(){const e=(0,j.M)(),t=(0,w.p)().navbar.items,[n,r]=function(e){function t(e){return"left"===(e.position??Ze)}return[e.filter(t),e.filter(e=>!t(e))]}(t),o=t.find(e=>"search"===e.type);return(0,u.jsx)(rt,{left:(0,u.jsxs)(u.Fragment,{children:[!e.disabled&&(0,u.jsx)(et,{}),(0,u.jsx)(ie,{}),(0,u.jsx)(nt,{items:n})]}),right:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(nt,{items:r}),(0,u.jsx)(oe,{className:tt.colorModeToggle}),!o&&(0,u.jsx)(Le,{children:(0,u.jsx)(Pe.A,{})})]})})}function at(){return(0,u.jsx)(Ve,{children:(0,u.jsx)(ot,{})})}function it({item:e}){const{to:t,href:n,label:r,prependBaseUrlToHref:a,className:i,...l}=e,s=(0,ue.Ay)(t),c=(0,ue.Ay)(n,{forcePrependBaseUrl:!0});return(0,u.jsxs)(ce.A,{className:(0,o.A)("footer__link-item",i),...n?{href:a?c:n}:{to:s},...l,children:[r,n&&!(0,de.A)(n)&&(0,u.jsx)(fe.A,{})]})}function lt({item:e}){return e.html?(0,u.jsx)("li",{className:(0,o.A)("footer__item",e.className),dangerouslySetInnerHTML:{__html:e.html}}):(0,u.jsx)("li",{className:"footer__item",children:(0,u.jsx)(it,{item:e})},e.href??e.to)}function st({column:e}){return(0,u.jsxs)("div",{className:(0,o.A)(h.G.layout.footer.column,"col footer__col",e.className),children:[(0,u.jsx)("div",{className:"footer__title",children:e.title}),(0,u.jsx)("ul",{className:"footer__items clean-list",children:e.items.map((e,t)=>(0,u.jsx)(lt,{item:e},t))})]})}function ct({columns:e}){return(0,u.jsx)("div",{className:"row footer__links",children:e.map((e,t)=>(0,u.jsx)(st,{column:e},t))})}function ut(){return(0,u.jsx)("span",{className:"footer__link-separator",children:"\xb7"})}function dt({item:e}){return e.html?(0,u.jsx)("span",{className:(0,o.A)("footer__link-item",e.className),dangerouslySetInnerHTML:{__html:e.html}}):(0,u.jsx)(it,{item:e})}function pt({links:e}){return(0,u.jsx)("div",{className:"footer__links text--center",children:(0,u.jsx)("div",{className:"footer__links",children:e.map((t,n)=>(0,u.jsxs)(r.Fragment,{children:[(0,u.jsx)(dt,{item:t}),e.length!==n+1&&(0,u.jsx)(ut,{})]},n))})})}function ft({links:e}){return function(e){return"title"in e[0]}(e)?(0,u.jsx)(ct,{columns:e}):(0,u.jsx)(pt,{links:e})}var mt=n(1122);const gt="footerLogoLink_BH7S";function ht({logo:e}){const{withBaseUrl:t}=(0,ue.hH)(),n={light:t(e.src),dark:t(e.srcDark??e.src)};return(0,u.jsx)(mt.A,{className:(0,o.A)("footer__logo",e.className),alt:e.alt,sources:n,width:e.width,height:e.height,style:e.style})}function yt({logo:e}){return e.href?(0,u.jsx)(ce.A,{href:e.href,className:gt,target:e.target,children:(0,u.jsx)(ht,{logo:e})}):(0,u.jsx)(ht,{logo:e})}function bt({copyright:e}){return(0,u.jsx)("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:e}})}function vt({style:e,links:t,logo:n,copyright:r}){return(0,u.jsx)("footer",{className:(0,o.A)(h.G.layout.footer.container,"footer",{"footer--dark":"dark"===e}),children:(0,u.jsxs)("div",{className:"container container-fluid",children:[t,(n||r)&&(0,u.jsxs)("div",{className:"footer__bottom text--center",children:[n&&(0,u.jsx)("div",{className:"margin-bottom--sm",children:n}),r]})]})})}function wt(){const{footer:e}=(0,w.p)();if(!e)return null;const{copyright:t,links:n,logo:r,style:o}=e;return(0,u.jsx)(vt,{style:o,links:n&&n.length>0&&(0,u.jsx)(ft,{links:n}),logo:r&&(0,u.jsx)(yt,{logo:r}),copyright:t&&(0,u.jsx)(bt,{copyright:t})})}const kt=r.memo(wt),St=(0,N.fM)([B.a,k.o,P.Tv,De.VQ,i.Jx,function({children:e}){return(0,u.jsx)(L.y_,{children:(0,u.jsx)(j.e,{children:(0,u.jsx)(R,{children:e})})})}]);function xt({children:e}){return(0,u.jsx)(St,{children:e})}var Et=n(1107);function _t({error:e,tryAgain:t}){return(0,u.jsx)("main",{className:"container margin-vert--xl",children:(0,u.jsx)("div",{className:"row",children:(0,u.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,u.jsx)(Et.A,{as:"h1",className:"hero__title",children:(0,u.jsx)(s.A,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed",children:"This page crashed."})}),(0,u.jsx)("div",{className:"margin-vert--lg",children:(0,u.jsx)(Ke,{onClick:t,className:"button button--primary shadow--lw"})}),(0,u.jsx)("hr",{}),(0,u.jsx)("div",{className:"margin-vert--md",children:(0,u.jsx)(Ye,{error:e})})]})})})}const Ct={mainWrapper:"mainWrapper_z2l0"};function At(e){const{children:t,noFooter:n,wrapperClassName:r,title:l,description:s}=e;return(0,y.J)(),(0,u.jsxs)(xt,{children:[(0,u.jsx)(i.be,{title:l,description:s}),(0,u.jsx)(v,{}),(0,u.jsx)(T,{}),(0,u.jsx)(at,{}),(0,u.jsx)("div",{id:d,className:(0,o.A)(h.G.layout.main.container,h.G.wrapper.main,Ct.mainWrapper,r),children:(0,u.jsx)(a.A,{fallback:e=>(0,u.jsx)(_t,{...e}),children:t})}),!n&&(0,u.jsx)(kt,{})]})}},1765:(e,t,n)=>{"use strict";n.d(t,{My:()=>A,f4:()=>ne});var r,o,a,i,l,s,c,u=n(6540),d=n(4164),p=Object.create,f=Object.defineProperty,m=Object.defineProperties,g=Object.getOwnPropertyDescriptor,h=Object.getOwnPropertyDescriptors,y=Object.getOwnPropertyNames,b=Object.getOwnPropertySymbols,v=Object.getPrototypeOf,w=Object.prototype.hasOwnProperty,k=Object.prototype.propertyIsEnumerable,S=(e,t,n)=>t in e?f(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,x=(e,t)=>{for(var n in t||(t={}))w.call(t,n)&&S(e,n,t[n]);if(b)for(var n of b(t))k.call(t,n)&&S(e,n,t[n]);return e},E=(e,t)=>m(e,h(t)),_=(e,t)=>{var n={};for(var r in e)w.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&b)for(var r of b(e))t.indexOf(r)<0&&k.call(e,r)&&(n[r]=e[r]);return n},C=(r={"../../node_modules/.pnpm/prismjs@1.29.0_patch_hash=vrxx3pzkik6jpmgpayxfjunetu/node_modules/prismjs/prism.js"(e,t){var n=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof o?new o(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++t}),e.__id},clone:function e(t,n){var o,a;switch(n=n||{},r.util.type(t)){case"Object":if(a=r.util.objId(t),n[a])return n[a];for(var i in o={},n[a]=o,t)t.hasOwnProperty(i)&&(o[i]=e(t[i],n));return o;case"Array":return a=r.util.objId(t),n[a]?n[a]:(o=[],n[a]=o,t.forEach(function(t,r){o[r]=e(t,n)}),o);default:return t}},getLanguage:function(t){for(;t;){var n=e.exec(t.className);if(n)return n[1].toLowerCase();t=t.parentElement}return"none"},setLanguage:function(t,n){t.className=t.className.replace(RegExp(e,"gi"),""),t.classList.add("language-"+n)},isActive:function(e,t,n){for(var r="no-"+t;e;){var o=e.classList;if(o.contains(t))return!0;if(o.contains(r))return!1;e=e.parentElement}return!!n}},languages:{plain:n,plaintext:n,text:n,txt:n,extend:function(e,t){var n=r.util.clone(r.languages[e]);for(var o in t)n[o]=t[o];return n},insertBefore:function(e,t,n,o){var a=(o=o||r.languages)[e],i={};for(var l in a)if(a.hasOwnProperty(l)){if(l==t)for(var s in n)n.hasOwnProperty(s)&&(i[s]=n[s]);n.hasOwnProperty(l)||(i[l]=a[l])}var c=o[e];return o[e]=i,r.languages.DFS(r.languages,function(t,n){n===c&&t!=e&&(this[t]=i)}),i},DFS:function e(t,n,o,a){a=a||{};var i=r.util.objId;for(var l in t)if(t.hasOwnProperty(l)){n.call(t,l,t[l],o||l);var s=t[l],c=r.util.type(s);"Object"!==c||a[i(s)]?"Array"!==c||a[i(s)]||(a[i(s)]=!0,e(s,n,l,a)):(a[i(s)]=!0,e(s,n,null,a))}}},plugins:{},highlight:function(e,t,n){var a={code:e,grammar:t,language:n};if(r.hooks.run("before-tokenize",a),!a.grammar)throw new Error('The language "'+a.language+'" has no grammar.');return a.tokens=r.tokenize(a.code,a.grammar),r.hooks.run("after-tokenize",a),o.stringify(r.util.encode(a.tokens),a.language)},tokenize:function(e,t){var n=t.rest;if(n){for(var r in n)t[r]=n[r];delete t.rest}var o=new l;return s(o,o.head,e),i(e,o,t,o.head,0),function(e){for(var t=[],n=e.head.next;n!==e.tail;)t.push(n.value),n=n.next;return t}(o)},hooks:{all:{},add:function(e,t){var n=r.hooks.all;n[e]=n[e]||[],n[e].push(t)},run:function(e,t){var n=r.hooks.all[e];if(n&&n.length)for(var o,a=0;o=n[a++];)o(t)}},Token:o};function o(e,t,n,r){this.type=e,this.content=t,this.alias=n,this.length=0|(r||"").length}function a(e,t,n,r){e.lastIndex=t;var o=e.exec(n);if(o&&r&&o[1]){var a=o[1].length;o.index+=a,o[0]=o[0].slice(a)}return o}function i(e,t,n,l,u,d){for(var p in n)if(n.hasOwnProperty(p)&&n[p]){var f=n[p];f=Array.isArray(f)?f:[f];for(var m=0;m<f.length;++m){if(d&&d.cause==p+","+m)return;var g=f[m],h=g.inside,y=!!g.lookbehind,b=!!g.greedy,v=g.alias;if(b&&!g.pattern.global){var w=g.pattern.toString().match(/[imsuy]*$/)[0];g.pattern=RegExp(g.pattern.source,w+"g")}for(var k=g.pattern||g,S=l.next,x=u;S!==t.tail&&!(d&&x>=d.reach);x+=S.value.length,S=S.next){var E=S.value;if(t.length>e.length)return;if(!(E instanceof o)){var _,C=1;if(b){if(!(_=a(k,x,e,y))||_.index>=e.length)break;var A=_.index,T=_.index+_[0].length,j=x;for(j+=S.value.length;A>=j;)j+=(S=S.next).value.length;if(x=j-=S.value.length,S.value instanceof o)continue;for(var P=S;P!==t.tail&&(j<T||"string"==typeof P.value);P=P.next)C++,j+=P.value.length;C--,E=e.slice(x,j),_.index-=x}else if(!(_=a(k,0,E,y)))continue;A=_.index;var N=_[0],L=E.slice(0,A),O=E.slice(A+N.length),R=x+E.length;d&&R>d.reach&&(d.reach=R);var D=S.prev;if(L&&(D=s(t,D,L),x+=L.length),c(t,D,C),S=s(t,D,new o(p,h?r.tokenize(N,h):N,v,N)),O&&s(t,S,O),C>1){var F={cause:p+","+m,reach:R};i(e,t,n,S.prev,x,F),d&&F.reach>d.reach&&(d.reach=F.reach)}}}}}}function l(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function s(e,t,n){var r=t.next,o={value:n,prev:t,next:r};return t.next=o,r.prev=o,e.length++,o}function c(e,t,n){for(var r=t.next,o=0;o<n&&r!==e.tail;o++)r=r.next;t.next=r,r.prev=t,e.length-=o}return o.stringify=function e(t,n){if("string"==typeof t)return t;if(Array.isArray(t)){var o="";return t.forEach(function(t){o+=e(t,n)}),o}var a={type:t.type,content:e(t.content,n),tag:"span",classes:["token",t.type],attributes:{},language:n},i=t.alias;i&&(Array.isArray(i)?Array.prototype.push.apply(a.classes,i):a.classes.push(i)),r.hooks.run("wrap",a);var l="";for(var s in a.attributes)l+=" "+s+'="'+(a.attributes[s]||"").replace(/"/g,""")+'"';return"<"+a.tag+' class="'+a.classes.join(" ")+'"'+l+">"+a.content+"</"+a.tag+">"},r}();t.exports=n,n.default=n}},function(){return o||(0,r[y(r)[0]])((o={exports:{}}).exports,o),o.exports}),A=((e,t,n)=>(n=null!=e?p(v(e)):{},((e,t,n,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let o of y(t))w.call(e,o)||o===n||f(e,o,{get:()=>t[o],enumerable:!(r=g(t,o))||r.enumerable});return e})(!t&&e&&e.__esModule?n:f(n,"default",{value:e,enumerable:!0}),e)))(C());A.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},A.languages.markup.tag.inside["attr-value"].inside.entity=A.languages.markup.entity,A.languages.markup.doctype.inside["internal-subset"].inside=A.languages.markup,A.hooks.add("wrap",function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))}),Object.defineProperty(A.languages.markup.tag,"addInlined",{value:function(e,t){var n;(t=((n=((n={})["language-"+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:A.languages[t]},n.cdata=/^<!\[CDATA\[|\]\]>$/i,{"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:n}}))["language-"+t]={pattern:/[\s\S]+/,inside:A.languages[t]},{}))[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,function(){return e}),"i"),lookbehind:!0,greedy:!0,inside:n},A.languages.insertBefore("markup","cdata",t)}}),Object.defineProperty(A.languages.markup.tag,"addAttribute",{value:function(e,t){A.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:A.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),A.languages.html=A.languages.markup,A.languages.mathml=A.languages.markup,A.languages.svg=A.languages.markup,A.languages.xml=A.languages.extend("markup",{}),A.languages.ssml=A.languages.xml,A.languages.atom=A.languages.xml,A.languages.rss=A.languages.xml,a=A,i={pattern:/\\[\\(){}[\]^$+*?|.]/,alias:"escape"},s="(?:[^\\\\-]|"+(l=/\\(?:x[\da-fA-F]{2}|u[\da-fA-F]{4}|u\{[\da-fA-F]+\}|0[0-7]{0,2}|[123][0-7]{2}|c[a-zA-Z]|.)/).source+")",s=RegExp(s+"-"+s),c={pattern:/(<|')[^<>']+(?=[>']$)/,lookbehind:!0,alias:"variable"},a.languages.regex={"char-class":{pattern:/((?:^|[^\\])(?:\\\\)*)\[(?:[^\\\]]|\\[\s\S])*\]/,lookbehind:!0,inside:{"char-class-negation":{pattern:/(^\[)\^/,lookbehind:!0,alias:"operator"},"char-class-punctuation":{pattern:/^\[|\]$/,alias:"punctuation"},range:{pattern:s,inside:{escape:l,"range-punctuation":{pattern:/-/,alias:"operator"}}},"special-escape":i,"char-set":{pattern:/\\[wsd]|\\p\{[^{}]+\}/i,alias:"class-name"},escape:l}},"special-escape":i,"char-set":{pattern:/\.|\\[wsd]|\\p\{[^{}]+\}/i,alias:"class-name"},backreference:[{pattern:/\\(?![123][0-7]{2})[1-9]/,alias:"keyword"},{pattern:/\\k<[^<>']+>/,alias:"keyword",inside:{"group-name":c}}],anchor:{pattern:/[$^]|\\[ABbGZz]/,alias:"function"},escape:l,group:[{pattern:/\((?:\?(?:<[^<>']+>|'[^<>']+'|[>:]|<?[=!]|[idmnsuxU]+(?:-[idmnsuxU]+)?:?))?/,alias:"punctuation",inside:{"group-name":c}},{pattern:/\)/,alias:"punctuation"}],quantifier:{pattern:/(?:[+*?]|\{\d+(?:,\d*)?\})[?+]?/,alias:"number"},alternation:{pattern:/\|/,alias:"keyword"}},A.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},A.languages.javascript=A.languages.extend("clike",{"class-name":[A.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),A.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,A.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:A.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:A.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:A.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:A.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:A.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),A.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:A.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),A.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),A.languages.markup&&(A.languages.markup.tag.addInlined("script","javascript"),A.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),A.languages.js=A.languages.javascript,A.languages.actionscript=A.languages.extend("javascript",{keyword:/\b(?:as|break|case|catch|class|const|default|delete|do|dynamic|each|else|extends|final|finally|for|function|get|if|implements|import|in|include|instanceof|interface|internal|is|namespace|native|new|null|override|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|use|var|void|while|with)\b/,operator:/\+\+|--|(?:[+\-*\/%^]|&&?|\|\|?|<<?|>>?>?|[!=]=?)=?|[~?@]/}),A.languages.actionscript["class-name"].alias="function",delete A.languages.actionscript.parameter,delete A.languages.actionscript["literal-property"],A.languages.markup&&A.languages.insertBefore("actionscript","string",{xml:{pattern:/(^|[^.])<\/?\w+(?:\s+[^\s>\/=]+=("|')(?:\\[\s\S]|(?!\2)[^\\])*\2)*\s*\/?>/,lookbehind:!0,inside:A.languages.markup}}),function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(A),function(e){var t=e.languages.javadoclike={parameter:{pattern:/(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*@(?:arg|arguments|param)\s+)\w+/m,lookbehind:!0},keyword:{pattern:/(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*|\{)@[a-z][a-zA-Z-]+\b/m,lookbehind:!0},punctuation:/[{}]/};Object.defineProperty(t,"addSupport",{value:function(t,n){(t="string"==typeof t?[t]:t).forEach(function(t){var r=function(e){e.inside||(e.inside={}),e.inside.rest=n},o="doc-comment";if(a=e.languages[t]){var a,i=a[o];if((i=i||(a=e.languages.insertBefore(t,"comment",{"doc-comment":{pattern:/(^|[^\\])\/\*\*[^/][\s\S]*?(?:\*\/|$)/,lookbehind:!0,alias:"comment"}}))[o])instanceof RegExp&&(i=a[o]={pattern:i}),Array.isArray(i))for(var l=0,s=i.length;l<s;l++)i[l]instanceof RegExp&&(i[l]={pattern:i[l]}),r(i[l]);else r(i)}})}}),t.addSupport(["java","javascript","php"],t)}(A),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;(t=(e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+t.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css,e.languages.markup))&&(t.tag.addInlined("style","css"),t.tag.addAttribute("style","css"))}(A),function(e){var t=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,n=(t=(e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+t.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[t,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}}),{pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0}),{pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0});e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|RebeccaPurple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,number:n})}(A),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",o=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-]<PLAIN>)(?:[ \t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*/.source.replace(/<PLAIN>/g,function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source}),a=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<<prop>>[ \t]+)?)(?:<<value>>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<<prop>>/g,function(){return r}).replace(/<<value>>/g,function(){return e});return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<<prop>>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<<prop>>/g,function(){return r})),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<<prop>>[ \t]+)?)<<key>>(?=\s*:\s)/.source.replace(/<<prop>>/g,function(){return r}).replace(/<<key>>/g,function(){return"(?:"+o+"|"+a+")"})),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(a),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(A),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(/<inner>/g,function(){return t}),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,o=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,function(){return r}),a=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source,i=(e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+o+a+"(?:"+o+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+o+a+")(?:"+o+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+o+")"+a+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+o+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\b|\*\*(?:(?!\*)<inner>|\*(?:(?!\*)<inner>)+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\b|\*(?:(?!\*)<inner>|\*\*(?:(?!\*)<inner>)+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~)<inner>)+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\])<inner>)+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\])<inner>)+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach(function(t){["url","bold","italic","strike","code-snippet"].forEach(function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])})}),e.hooks.add("after-tokenize",function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n<r;n++){var o,a=t[n];"code"!==a.type?e(a.content):(o=a.content[1],a=a.content[3],o&&a&&"code-language"===o.type&&"code-block"===a.type&&"string"==typeof o.content&&(o=o.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),o="language-"+(o=(/[a-z][\w-]*/i.exec(o)||[""])[0].toLowerCase()),a.alias?"string"==typeof a.alias?a.alias=[a.alias,o]:a.alias.push(o):a.alias=[o]))}}(e.tokens)}),e.hooks.add("wrap",function(t){if("code-block"===t.type){for(var n="",r=0,o=t.classes.length;r<o;r++){var a=t.classes[r];if(a=/language-(.+)/.exec(a)){n=a[1];break}}var c,u=e.languages[n];u?t.content=e.highlight(t.content.replace(i,"").replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,function(e,t){var n;return"#"===(t=t.toLowerCase())[0]?(n="x"===t[1]?parseInt(t.slice(2),16):Number(t.slice(1)),s(n)):l[t]||e}),u,n):n&&"none"!==n&&e.plugins.autoloader&&(c="md-"+(new Date).valueOf()+"-"+Math.floor(1e16*Math.random()),t.attributes.id=c,e.plugins.autoloader.loadLanguages(n,function(){var t=document.getElementById(c);t&&(t.innerHTML=e.highlight(t.textContent,e.languages[n],n))}))}}),RegExp(e.languages.markup.tag.pattern.source,"gi")),l={amp:"&",lt:"<",gt:">",quot:'"'},s=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(A),A.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:A.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},A.hooks.add("after-tokenize",function(e){if("graphql"===e.language)for(var t=e.tokens.filter(function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type}),n=0;n<t.length;){var r=t[n++];if("keyword"===r.type&&"mutation"===r.content){var o=[];if(d(["definition-mutation","punctuation"])&&"("===u(1).content){n+=2;var a=p(/^\($/,/^\)$/);if(-1===a)continue;for(;n<a;n++){var i=u(0);"variable"===i.type&&(f(i,"variable-input"),o.push(i.content))}n=a+1}if(d(["punctuation","property-query"])&&"{"===u(0).content&&(n++,f(u(0),"property-mutation"),0<o.length)){var l=p(/^\{$/,/^\}$/);if(-1!==l)for(var s=n;s<l;s++){var c=t[s];"variable"===c.type&&0<=o.indexOf(c.content)&&f(c,"variable-input")}}}}function u(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n<e.length;n++){var r=u(n+t);if(!r||r.type!==e[n])return}return 1}function p(e,r){for(var o=1,a=n;a<t.length;a++){var i=t[a],l=i.content;if("punctuation"===i.type&&"string"==typeof l)if(e.test(l))o++;else if(r.test(l)&&0===--o)return a}return-1}function f(e,t){var n=e.alias;n?Array.isArray(n)||(e.alias=n=[n]):e.alias=n=[],n.push(t)}}),A.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,o=r.inside["interpolation-punctuation"],a=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function l(t,n,r){return t={code:t,grammar:n,language:r},e.hooks.run("before-tokenize",t),t.tokens=e.tokenize(t.code,t.grammar),e.hooks.run("after-tokenize",t),t.tokens}function s(t,n,i){var s=e.tokenize(t,{interpolation:{pattern:RegExp(a),lookbehind:!0}}),c=0,u={},d=(s=l(s.map(function(e){if("string"==typeof e)return e;var n,r;for(e=e.content;-1!==t.indexOf((r=c++,n="___"+i.toUpperCase()+"_"+r+"___")););return u[n]=e,n}).join(""),n,i),Object.keys(u));return c=0,function t(n){for(var a=0;a<n.length;a++){if(c>=d.length)return;var i,s,p,f,m,g,h,y=n[a];"string"==typeof y||"string"==typeof y.content?(i=d[c],-1!==(h=(g="string"==typeof y?y:y.content).indexOf(i))&&(++c,s=g.substring(0,h),m=u[i],p=void 0,(f={})["interpolation-punctuation"]=o,3===(f=e.tokenize(m,f)).length&&((p=[1,1]).push.apply(p,l(f[1],e.languages.javascript,"javascript")),f.splice.apply(f,p)),p=new e.Token("interpolation",f,r.alias,m),f=g.substring(h+i.length),m=[],s&&m.push(s),m.push(p),f&&(t(g=[f]),m.push.apply(m,g)),"string"==typeof y?(n.splice.apply(n,[a,1].concat(m)),a+=m.length-1):y.content=m)):(h=y.content,Array.isArray(h)?t(h):t([h]))}}(s),new e.Token(i,s,"language-"+i,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var c={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function u(e){return"string"==typeof e?e:Array.isArray(e)?e.map(u).join(""):u(e.content)}e.hooks.add("after-tokenize",function(t){t.language in c&&function t(n){for(var r=0,o=n.length;r<o;r++){var a,i,l,c=n[r];"string"!=typeof c&&(a=c.content,Array.isArray(a)?"template-string"===c.type?(c=a[1],3===a.length&&"string"!=typeof c&&"embedded-code"===c.type&&(i=u(c),c=c.alias,c=Array.isArray(c)?c[0]:c,l=e.languages[c])&&(a[1]=s(i,l,c))):t(a):"string"!=typeof a&&t([a]))}}(t.tokens)})}(A),function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(A),function(e){var t=e.languages.javascript,n=/\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})+\}/.source,r="(@(?:arg|argument|param|property)\\s+(?:"+n+"\\s+)?)";e.languages.jsdoc=e.languages.extend("javadoclike",{parameter:{pattern:RegExp(r+/(?:(?!\s)[$\w\xA0-\uFFFF.])+(?=\s|$)/.source),lookbehind:!0,inside:{punctuation:/\./}}}),e.languages.insertBefore("jsdoc","keyword",{"optional-parameter":{pattern:RegExp(r+/\[(?:(?!\s)[$\w\xA0-\uFFFF.])+(?:=[^[\]]+)?\](?=\s|$)/.source),lookbehind:!0,inside:{parameter:{pattern:/(^\[)[$\w\xA0-\uFFFF\.]+/,lookbehind:!0,inside:{punctuation:/\./}},code:{pattern:/(=)[\s\S]*(?=\]$)/,lookbehind:!0,inside:t,alias:"language-javascript"},punctuation:/[=[\]]/}},"class-name":[{pattern:RegExp(/(@(?:augments|class|extends|interface|memberof!?|template|this|typedef)\s+(?:<TYPE>\s+)?)[A-Z]\w*(?:\.[A-Z]\w*)*/.source.replace(/<TYPE>/g,function(){return n})),lookbehind:!0,inside:{punctuation:/\./}},{pattern:RegExp("(@[a-z]+\\s+)"+n),lookbehind:!0,inside:{string:t.string,number:t.number,boolean:t.boolean,keyword:e.languages.typescript.keyword,operator:/=>|\.\.\.|[&|?:*]/,punctuation:/[.,;=<>{}()[\]]/}}],example:{pattern:/(@example\s+(?!\s))(?:[^@\s]|\s+(?!\s))+?(?=\s*(?:\*\s*)?(?:@\w|\*\/))/,lookbehind:!0,inside:{code:{pattern:/^([\t ]*(?:\*\s*)?)\S.*$/m,lookbehind:!0,inside:t,alias:"language-javascript"}}}}),e.languages.javadoclike.addSupport("javascript",e.languages.jsdoc)}(A),function(e){e.languages.flow=e.languages.extend("javascript",{}),e.languages.insertBefore("flow","keyword",{type:[{pattern:/\b(?:[Bb]oolean|Function|[Nn]umber|[Ss]tring|[Ss]ymbol|any|mixed|null|void)\b/,alias:"class-name"}]}),e.languages.flow["function-variable"].pattern=/(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=\s*(?:function\b|(?:\([^()]*\)(?:\s*:\s*\w+)?|(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/i,delete e.languages.flow.parameter,e.languages.insertBefore("flow","operator",{"flow-punctuation":{pattern:/\{\||\|\}/,alias:"punctuation"}}),Array.isArray(e.languages.flow.keyword)||(e.languages.flow.keyword=[e.languages.flow.keyword]),e.languages.flow.keyword.unshift({pattern:/(^|[^$]\b)(?:Class|declare|opaque|type)\b(?!\$)/,lookbehind:!0},{pattern:/(^|[^$]\B)\$(?:Diff|Enum|Exact|Keys|ObjMap|PropertyType|Record|Shape|Subtype|Supertype|await)\b(?!\$)/,lookbehind:!0})}(A),A.languages.n4js=A.languages.extend("javascript",{keyword:/\b(?:Array|any|boolean|break|case|catch|class|const|constructor|continue|debugger|declare|default|delete|do|else|enum|export|extends|false|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|module|new|null|number|package|private|protected|public|return|set|static|string|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\b/}),A.languages.insertBefore("n4js","constant",{annotation:{pattern:/@+\w+/,alias:"operator"}}),A.languages.n4jsd=A.languages.n4js,function(e){function t(e,t){return RegExp(e.replace(/<ID>/g,function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source}),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:<ID>(?:\s*,\s*(?:\*\s*as\s+<ID>|\{[^{}]*\}))?|\*\s*as\s+<ID>|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+<ID>)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?<ID>/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r<n.length;r++){var o=n[r],a=e.languages.javascript[o];o=(a="RegExp"===e.util.type(a)?e.languages.javascript[o]={pattern:a}:a).inside||{};(a.inside=o)["maybe-class-name"]=/^[A-Z][\s\S]*/}}(A),function(e){var t=e.util.clone(e.languages.javascript),n=/(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source,r=/(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source,o=/(?:\{<S>*\.{3}(?:[^{}]|<BRACES>)*\})/.source;function a(e,t){return e=e.replace(/<S>/g,function(){return n}).replace(/<BRACES>/g,function(){return r}).replace(/<SPREAD>/g,function(){return o}),RegExp(e,t)}function i(t){for(var n=[],r=0;r<t.length;r++){var o=t[r],a=!1;"string"!=typeof o&&("tag"===o.type&&o.content[0]&&"tag"===o.content[0].type?"</"===o.content[0].content[0].content?0<n.length&&n[n.length-1].tagName===l(o.content[0].content[1])&&n.pop():"/>"!==o.content[o.content.length-1].content&&n.push({tagName:l(o.content[0].content[1]),openedBraces:0}):0<n.length&&"punctuation"===o.type&&"{"===o.content?n[n.length-1].openedBraces++:0<n.length&&0<n[n.length-1].openedBraces&&"punctuation"===o.type&&"}"===o.content?n[n.length-1].openedBraces--:a=!0),(a||"string"==typeof o)&&0<n.length&&0===n[n.length-1].openedBraces&&(a=l(o),r<t.length-1&&("string"==typeof t[r+1]||"plain-text"===t[r+1].type)&&(a+=l(t[r+1]),t.splice(r+1,1)),0<r&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(a=l(t[r-1])+a,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",a,null,a)),o.content&&"string"!=typeof o.content&&i(o.content)}}o=a(o).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=a(/<\/?(?:[\w.:-]+(?:<S>+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|<BRACES>))?|<SPREAD>))*<S>*\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:a(/<SPREAD>/.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:a(/=<BRACES>/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var l=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(l).join(""):""};e.hooks.add("after-tokenize",function(e){"jsx"!==e.language&&"tsx"!==e.language||i(e.tokens)})}(A),function(e){var t=e.util.clone(e.languages.typescript);(t=(e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"],e.languages.tsx.tag)).pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+t.pattern.source+")",t.pattern.flags),t.lookbehind=!0}(A),A.languages.swift={comment:{pattern:/(^|[^\\:])(?:\/\/.*|\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:[^*]|\*(?!\/))*\*\/)*\*\/)/,lookbehind:!0,greedy:!0},"string-literal":[{pattern:RegExp(/(^|[^"#])/.source+"(?:"+/"(?:\\(?:\((?:[^()]|\([^()]*\))*\)|\r\n|[^(])|[^\\\r\n"])*"/.source+"|"+/"""(?:\\(?:\((?:[^()]|\([^()]*\))*\)|[^(])|[^\\"]|"(?!""))*"""/.source+")"+/(?!["#])/.source),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\\($/,alias:"punctuation"},punctuation:/\\(?=[\r\n])/,string:/[\s\S]+/}},{pattern:RegExp(/(^|[^"#])(#+)/.source+"(?:"+/"(?:\\(?:#+\((?:[^()]|\([^()]*\))*\)|\r\n|[^#])|[^\\\r\n])*?"/.source+"|"+/"""(?:\\(?:#+\((?:[^()]|\([^()]*\))*\)|[^#])|[^\\])*?"""/.source+")\\2"),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\#+\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\#+\($/,alias:"punctuation"},string:/[\s\S]+/}}],directive:{pattern:RegExp(/#/.source+"(?:"+/(?:elseif|if)\b/.source+"(?:[ \t]*"+/(?:![ \t]*)?(?:\b\w+\b(?:[ \t]*\((?:[^()]|\([^()]*\))*\))?|\((?:[^()]|\([^()]*\))*\))(?:[ \t]*(?:&&|\|\|))?/.source+")+|"+/(?:else|endif)\b/.source+")"),alias:"property",inside:{"directive-name":/^#\w+/,boolean:/\b(?:false|true)\b/,number:/\b\d+(?:\.\d+)*\b/,operator:/!|&&|\|\||[<>]=?/,punctuation:/[(),]/}},literal:{pattern:/#(?:colorLiteral|column|dsohandle|file(?:ID|Literal|Path)?|function|imageLiteral|line)\b/,alias:"constant"},"other-directive":{pattern:/#\w+\b/,alias:"property"},attribute:{pattern:/@\w+/,alias:"atrule"},"function-definition":{pattern:/(\bfunc\s+)\w+/,lookbehind:!0,alias:"function"},label:{pattern:/\b(break|continue)\s+\w+|\b[a-zA-Z_]\w*(?=\s*:\s*(?:for|repeat|while)\b)/,lookbehind:!0,alias:"important"},keyword:/\b(?:Any|Protocol|Self|Type|actor|as|assignment|associatedtype|associativity|async|await|break|case|catch|class|continue|convenience|default|defer|deinit|didSet|do|dynamic|else|enum|extension|fallthrough|fileprivate|final|for|func|get|guard|higherThan|if|import|in|indirect|infix|init|inout|internal|is|isolated|lazy|left|let|lowerThan|mutating|none|nonisolated|nonmutating|open|operator|optional|override|postfix|precedencegroup|prefix|private|protocol|public|repeat|required|rethrows|return|right|safe|self|set|some|static|struct|subscript|super|switch|throw|throws|try|typealias|unowned|unsafe|var|weak|where|while|willSet)\b/,boolean:/\b(?:false|true)\b/,nil:{pattern:/\bnil\b/,alias:"constant"},"short-argument":/\$\d+\b/,omit:{pattern:/\b_\b/,alias:"keyword"},number:/\b(?:[\d_]+(?:\.[\de_]+)?|0x[a-f0-9_]+(?:\.[a-f0-9p_]+)?|0b[01_]+|0o[0-7_]+)\b/i,"class-name":/\b[A-Z](?:[A-Z_\d]*[a-z]\w*)?\b/,function:/\b[a-z_]\w*(?=\s*\()/i,constant:/\b(?:[A-Z_]{2,}|k[A-Z][A-Za-z_]+)\b/,operator:/[-+*/%=!<>&|^~?]+|\.[.\-+*/%=!<>&|^~?]+/,punctuation:/[{}[\]();,.:\\]/},A.languages.swift["string-literal"].forEach(function(e){e.inside.interpolation.inside=A.languages.swift}),function(e){e.languages.kotlin=e.languages.extend("clike",{keyword:{pattern:/(^|[^.])\b(?:abstract|actual|annotation|as|break|by|catch|class|companion|const|constructor|continue|crossinline|data|do|dynamic|else|enum|expect|external|final|finally|for|fun|get|if|import|in|infix|init|inline|inner|interface|internal|is|lateinit|noinline|null|object|open|operator|out|override|package|private|protected|public|reified|return|sealed|set|super|suspend|tailrec|this|throw|to|try|typealias|val|var|vararg|when|where|while)\b/,lookbehind:!0},function:[{pattern:/(?:`[^\r\n`]+`|\b\w+)(?=\s*\()/,greedy:!0},{pattern:/(\.)(?:`[^\r\n`]+`|\w+)(?=\s*\{)/,lookbehind:!0,greedy:!0}],number:/\b(?:0[xX][\da-fA-F]+(?:_[\da-fA-F]+)*|0[bB][01]+(?:_[01]+)*|\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?[fFL]?)\b/,operator:/\+[+=]?|-[-=>]?|==?=?|!(?:!|==?)?|[\/*%<>]=?|[?:]:?|\.\.|&&|\|\||\b(?:and|inv|or|shl|shr|ushr|xor)\b/}),delete e.languages.kotlin["class-name"];var t={"interpolation-punctuation":{pattern:/^\$\{?|\}$/,alias:"punctuation"},expression:{pattern:/[\s\S]+/,inside:e.languages.kotlin}};e.languages.insertBefore("kotlin","string",{"string-literal":[{pattern:/"""(?:[^$]|\$(?:(?!\{)|\{[^{}]*\}))*?"""/,alias:"multiline",inside:{interpolation:{pattern:/\$(?:[a-z_]\w*|\{[^{}]*\})/i,inside:t},string:/[\s\S]+/}},{pattern:/"(?:[^"\\\r\n$]|\\.|\$(?:(?!\{)|\{[^{}]*\}))*"/,alias:"singleline",inside:{interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$(?:[a-z_]\w*|\{[^{}]*\})/i,lookbehind:!0,inside:t},string:/[\s\S]+/}}],char:{pattern:/'(?:[^'\\\r\n]|\\(?:.|u[a-fA-F0-9]{0,4}))'/,greedy:!0}}),delete e.languages.kotlin.string,e.languages.insertBefore("kotlin","keyword",{annotation:{pattern:/\B@(?:\w+:)?(?:[A-Z]\w*|\[[^\]]+\])/,alias:"builtin"}}),e.languages.insertBefore("kotlin","function",{label:{pattern:/\b\w+@|@\w+\b/,alias:"symbol"}}),e.languages.kt=e.languages.kotlin,e.languages.kts=e.languages.kotlin}(A),A.languages.c=A.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),A.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),A.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},A.languages.c.string],char:A.languages.c.char,comment:A.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:A.languages.c}}}}),A.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete A.languages.c.boolean,A.languages.objectivec=A.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete A.languages.objectivec["class-name"],A.languages.objc=A.languages.objectivec,A.languages.reason=A.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),A.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete A.languages.reason.function,function(e){for(var t=/\/\*(?:[^*/]|\*(?!\/)|\/(?!\*)|<self>)*\*\//.source,n=0;n<2;n++)t=t.replace(/<self>/g,function(){return t});t=t.replace(/<self>/g,function(){return/[^\s\S]/.source}),e.languages.rust={comment:[{pattern:RegExp(/(^|[^\\])/.source+t),lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/b?"(?:\\[\s\S]|[^\\"])*"|b?r(#*)"(?:[^"]|"(?!\1))*"\1/,greedy:!0},char:{pattern:/b?'(?:\\(?:x[0-7][\da-fA-F]|u\{(?:[\da-fA-F]_*){1,6}\}|.)|[^\\\r\n\t'])'/,greedy:!0},attribute:{pattern:/#!?\[(?:[^\[\]"]|"(?:\\[\s\S]|[^\\"])*")*\]/,greedy:!0,alias:"attr-name",inside:{string:null}},"closure-params":{pattern:/([=(,:]\s*|\bmove\s*)\|[^|]*\||\|[^|]*\|(?=\s*(?:\{|->))/,lookbehind:!0,greedy:!0,inside:{"closure-punctuation":{pattern:/^\||\|$/,alias:"punctuation"},rest:null}},"lifetime-annotation":{pattern:/'\w+/,alias:"symbol"},"fragment-specifier":{pattern:/(\$\w+:)[a-z]+/,lookbehind:!0,alias:"punctuation"},variable:/\$\w+/,"function-definition":{pattern:/(\bfn\s+)\w+/,lookbehind:!0,alias:"function"},"type-definition":{pattern:/(\b(?:enum|struct|trait|type|union)\s+)\w+/,lookbehind:!0,alias:"class-name"},"module-declaration":[{pattern:/(\b(?:crate|mod)\s+)[a-z][a-z_\d]*/,lookbehind:!0,alias:"namespace"},{pattern:/(\b(?:crate|self|super)\s*)::\s*[a-z][a-z_\d]*\b(?:\s*::(?:\s*[a-z][a-z_\d]*\s*::)*)?/,lookbehind:!0,alias:"namespace",inside:{punctuation:/::/}}],keyword:[/\b(?:Self|abstract|as|async|await|become|box|break|const|continue|crate|do|dyn|else|enum|extern|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|override|priv|pub|ref|return|self|static|struct|super|trait|try|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/,/\b(?:bool|char|f(?:32|64)|[ui](?:8|16|32|64|128|size)|str)\b/],function:/\b[a-z_]\w*(?=\s*(?:::\s*<|\())/,macro:{pattern:/\b\w+!/,alias:"property"},constant:/\b[A-Z_][A-Z_\d]+\b/,"class-name":/\b[A-Z]\w*\b/,namespace:{pattern:/(?:\b[a-z][a-z_\d]*\s*::\s*)*\b[a-z][a-z_\d]*\s*::(?!\s*<)/,inside:{punctuation:/::/}},number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(?:(?:\d(?:_?\d)*)?\.)?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)(?:_?(?:f32|f64|[iu](?:8|16|32|64|size)?))?\b/,boolean:/\b(?:false|true)\b/,punctuation:/->|\.\.=|\.{1,3}|::|[{}[\];(),:]/,operator:/[-+*\/%!^]=?|=[=>]?|&[&=]?|\|[|=]?|<<?=?|>>?=?|[@?]/},e.languages.rust["closure-params"].inside.rest=e.languages.rust,e.languages.rust.attribute.inside.string=e.languages.rust.string}(A),A.languages.go=A.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),A.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete A.languages.go["class-name"],function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g,function(){return t.source});e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g,function(){return t.source})),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g,function(){return n})+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(A),A.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},A.languages.python["string-interpolation"].inside.interpolation.inside.rest=A.languages.python,A.languages.py=A.languages.python,A.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},A.languages.webmanifest=A.languages.json;((e,t)=>{for(var n in t)f(e,n,{get:t[n],enumerable:!0})})({},{dracula:()=>T,duotoneDark:()=>j,duotoneLight:()=>P,github:()=>N,gruvboxMaterialDark:()=>Q,gruvboxMaterialLight:()=>K,jettwaveDark:()=>H,jettwaveLight:()=>G,nightOwl:()=>L,nightOwlLight:()=>O,oceanicNext:()=>F,okaidia:()=>M,oneDark:()=>V,oneLight:()=>W,palenight:()=>I,shadesOfPurple:()=>z,synthwave84:()=>B,ultramin:()=>$,vsDark:()=>U,vsLight:()=>q});var T={plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},j={plain:{backgroundColor:"#2a2734",color:"#9a86fd"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#6c6783"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#e09142"}},{types:["property","function"],style:{color:"#9a86fd"}},{types:["tag-id","selector","atrule-id"],style:{color:"#eeebff"}},{types:["attr-name"],style:{color:"#c4b9fe"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","atrule","placeholder","variable"],style:{color:"#ffcc99"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#c4b9fe"}}]},P={plain:{backgroundColor:"#faf8f5",color:"#728fcb"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#b6ad9a"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#063289"}},{types:["property","function"],style:{color:"#b29762"}},{types:["tag-id","selector","atrule-id"],style:{color:"#2d2006"}},{types:["attr-name"],style:{color:"#896724"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","atrule"],style:{color:"#728fcb"}},{types:["placeholder","variable"],style:{color:"#93abdc"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#896724"}}]},N={plain:{color:"#393A34",backgroundColor:"#f6f8fa"},styles:[{types:["comment","prolog","doctype","cdata"],style:{color:"#999988",fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}},{types:["string","attr-value"],style:{color:"#e3116c"}},{types:["punctuation","operator"],style:{color:"#393A34"}},{types:["entity","url","symbol","number","boolean","variable","constant","property","regex","inserted"],style:{color:"#36acaa"}},{types:["atrule","keyword","attr-name","selector"],style:{color:"#00a4db"}},{types:["function","deleted","tag"],style:{color:"#d73a49"}},{types:["function-variable"],style:{color:"#6f42c1"}},{types:["tag","selector","keyword"],style:{color:"#00009f"}}]},L={plain:{color:"#d6deeb",backgroundColor:"#011627"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)",fontStyle:"italic"}},{types:["inserted","attr-name"],style:{color:"rgb(173, 219, 103)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(99, 119, 119)",fontStyle:"italic"}},{types:["string","url"],style:{color:"rgb(173, 219, 103)"}},{types:["variable"],style:{color:"rgb(214, 222, 235)"}},{types:["number"],style:{color:"rgb(247, 140, 108)"}},{types:["builtin","char","constant","function"],style:{color:"rgb(130, 170, 255)"}},{types:["punctuation"],style:{color:"rgb(199, 146, 234)"}},{types:["selector","doctype"],style:{color:"rgb(199, 146, 234)",fontStyle:"italic"}},{types:["class-name"],style:{color:"rgb(255, 203, 139)"}},{types:["tag","operator","keyword"],style:{color:"rgb(127, 219, 202)"}},{types:["boolean"],style:{color:"rgb(255, 88, 116)"}},{types:["property"],style:{color:"rgb(128, 203, 196)"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)"}}]},O={plain:{color:"#403f53",backgroundColor:"#FBFBFB"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)",fontStyle:"italic"}},{types:["inserted","attr-name"],style:{color:"rgb(72, 118, 214)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(152, 159, 177)",fontStyle:"italic"}},{types:["string","builtin","char","constant","url"],style:{color:"rgb(72, 118, 214)"}},{types:["variable"],style:{color:"rgb(201, 103, 101)"}},{types:["number"],style:{color:"rgb(170, 9, 130)"}},{types:["punctuation"],style:{color:"rgb(153, 76, 195)"}},{types:["function","selector","doctype"],style:{color:"rgb(153, 76, 195)",fontStyle:"italic"}},{types:["class-name"],style:{color:"rgb(17, 17, 17)"}},{types:["tag"],style:{color:"rgb(153, 76, 195)"}},{types:["operator","property","keyword","namespace"],style:{color:"rgb(12, 150, 155)"}},{types:["boolean"],style:{color:"rgb(188, 84, 84)"}}]},R="#c5a5c5",D="#8dc891",F={plain:{backgroundColor:"#282c34",color:"#ffffff"},styles:[{types:["attr-name"],style:{color:R}},{types:["attr-value"],style:{color:D}},{types:["comment","block-comment","prolog","doctype","cdata","shebang"],style:{color:"#999999"}},{types:["property","number","function-name","constant","symbol","deleted"],style:{color:"#5a9bcf"}},{types:["boolean"],style:{color:"#ff8b50"}},{types:["tag"],style:{color:"#fc929e"}},{types:["string"],style:{color:D}},{types:["punctuation"],style:{color:D}},{types:["selector","char","builtin","inserted"],style:{color:"#D8DEE9"}},{types:["function"],style:{color:"#79b6f2"}},{types:["operator","entity","url","variable"],style:{color:"#d7deea"}},{types:["keyword"],style:{color:R}},{types:["atrule","class-name"],style:{color:"#FAC863"}},{types:["important"],style:{fontWeight:"400"}},{types:["bold"],style:{fontWeight:"bold"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}}]},M={plain:{color:"#f8f8f2",backgroundColor:"#272822"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"#f92672",fontStyle:"italic"}},{types:["inserted"],style:{color:"rgb(173, 219, 103)",fontStyle:"italic"}},{types:["comment"],style:{color:"#8292a2",fontStyle:"italic"}},{types:["string","url"],style:{color:"#a6e22e"}},{types:["variable"],style:{color:"#f8f8f2"}},{types:["number"],style:{color:"#ae81ff"}},{types:["builtin","char","constant","function","class-name"],style:{color:"#e6db74"}},{types:["punctuation"],style:{color:"#f8f8f2"}},{types:["selector","doctype"],style:{color:"#a6e22e",fontStyle:"italic"}},{types:["tag","operator","keyword"],style:{color:"#66d9ef"}},{types:["boolean"],style:{color:"#ae81ff"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)",opacity:.7}},{types:["tag","property"],style:{color:"#f92672"}},{types:["attr-name"],style:{color:"#a6e22e !important"}},{types:["doctype"],style:{color:"#8292a2"}},{types:["rule"],style:{color:"#e6db74"}}]},I={plain:{color:"#bfc7d5",backgroundColor:"#292d3e"},styles:[{types:["comment"],style:{color:"rgb(105, 112, 152)",fontStyle:"italic"}},{types:["string","inserted"],style:{color:"rgb(195, 232, 141)"}},{types:["number"],style:{color:"rgb(247, 140, 108)"}},{types:["builtin","char","constant","function"],style:{color:"rgb(130, 170, 255)"}},{types:["punctuation","selector"],style:{color:"rgb(199, 146, 234)"}},{types:["variable"],style:{color:"rgb(191, 199, 213)"}},{types:["class-name","attr-name"],style:{color:"rgb(255, 203, 107)"}},{types:["tag","deleted"],style:{color:"rgb(255, 85, 114)"}},{types:["operator"],style:{color:"rgb(137, 221, 255)"}},{types:["boolean"],style:{color:"rgb(255, 88, 116)"}},{types:["keyword"],style:{fontStyle:"italic"}},{types:["doctype"],style:{color:"rgb(199, 146, 234)",fontStyle:"italic"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)"}},{types:["url"],style:{color:"rgb(221, 221, 221)"}}]},z={plain:{color:"#9EFEFF",backgroundColor:"#2D2A55"},styles:[{types:["changed"],style:{color:"rgb(255, 238, 128)"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)"}},{types:["inserted"],style:{color:"rgb(173, 219, 103)"}},{types:["comment"],style:{color:"rgb(179, 98, 255)",fontStyle:"italic"}},{types:["punctuation"],style:{color:"rgb(255, 255, 255)"}},{types:["constant"],style:{color:"rgb(255, 98, 140)"}},{types:["string","url"],style:{color:"rgb(165, 255, 144)"}},{types:["variable"],style:{color:"rgb(255, 238, 128)"}},{types:["number","boolean"],style:{color:"rgb(255, 98, 140)"}},{types:["attr-name"],style:{color:"rgb(255, 180, 84)"}},{types:["keyword","operator","property","namespace","tag","selector","doctype"],style:{color:"rgb(255, 157, 0)"}},{types:["builtin","char","constant","function","class-name"],style:{color:"rgb(250, 208, 0)"}}]},B={plain:{backgroundColor:"linear-gradient(to bottom, #2a2139 75%, #34294f)",backgroundImage:"#34294f",color:"#f92aad",textShadow:"0 0 2px #100c0f, 0 0 5px #dc078e33, 0 0 10px #fff3"},styles:[{types:["comment","block-comment","prolog","doctype","cdata"],style:{color:"#495495",fontStyle:"italic"}},{types:["punctuation"],style:{color:"#ccc"}},{types:["tag","attr-name","namespace","number","unit","hexcode","deleted"],style:{color:"#e2777a"}},{types:["property","selector"],style:{color:"#72f1b8",textShadow:"0 0 2px #100c0f, 0 0 10px #257c5575, 0 0 35px #21272475"}},{types:["function-name"],style:{color:"#6196cc"}},{types:["boolean","selector-id","function"],style:{color:"#fdfdfd",textShadow:"0 0 2px #001716, 0 0 3px #03edf975, 0 0 5px #03edf975, 0 0 8px #03edf975"}},{types:["class-name","maybe-class-name","builtin"],style:{color:"#fff5f6",textShadow:"0 0 2px #000, 0 0 10px #fc1f2c75, 0 0 5px #fc1f2c75, 0 0 25px #fc1f2c75"}},{types:["constant","symbol"],style:{color:"#f92aad",textShadow:"0 0 2px #100c0f, 0 0 5px #dc078e33, 0 0 10px #fff3"}},{types:["important","atrule","keyword","selector-class"],style:{color:"#f4eee4",textShadow:"0 0 2px #393a33, 0 0 8px #f39f0575, 0 0 2px #f39f0575"}},{types:["string","char","attr-value","regex","variable"],style:{color:"#f87c32"}},{types:["parameter"],style:{fontStyle:"italic"}},{types:["entity","url"],style:{color:"#67cdcc"}},{types:["operator"],style:{color:"ffffffee"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["entity"],style:{cursor:"help"}},{types:["inserted"],style:{color:"green"}}]},$={plain:{color:"#282a2e",backgroundColor:"#ffffff"},styles:[{types:["comment"],style:{color:"rgb(197, 200, 198)"}},{types:["string","number","builtin","variable"],style:{color:"rgb(150, 152, 150)"}},{types:["class-name","function","tag","attr-name"],style:{color:"rgb(40, 42, 46)"}}]},U={plain:{color:"#9CDCFE",backgroundColor:"#1E1E1E"},styles:[{types:["prolog"],style:{color:"rgb(0, 0, 128)"}},{types:["comment"],style:{color:"rgb(106, 153, 85)"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"rgb(86, 156, 214)"}},{types:["number","inserted"],style:{color:"rgb(181, 206, 168)"}},{types:["constant"],style:{color:"rgb(100, 102, 149)"}},{types:["attr-name","variable"],style:{color:"rgb(156, 220, 254)"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"rgb(206, 145, 120)"}},{types:["selector"],style:{color:"rgb(215, 186, 125)"}},{types:["tag"],style:{color:"rgb(78, 201, 176)"}},{types:["tag"],languages:["markup"],style:{color:"rgb(86, 156, 214)"}},{types:["punctuation","operator"],style:{color:"rgb(212, 212, 212)"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"rgb(220, 220, 170)"}},{types:["class-name"],style:{color:"rgb(78, 201, 176)"}},{types:["char"],style:{color:"rgb(209, 105, 105)"}}]},q={plain:{color:"#000000",backgroundColor:"#ffffff"},styles:[{types:["comment"],style:{color:"rgb(0, 128, 0)"}},{types:["builtin"],style:{color:"rgb(0, 112, 193)"}},{types:["number","variable","inserted"],style:{color:"rgb(9, 134, 88)"}},{types:["operator"],style:{color:"rgb(0, 0, 0)"}},{types:["constant","char"],style:{color:"rgb(129, 31, 63)"}},{types:["tag"],style:{color:"rgb(128, 0, 0)"}},{types:["attr-name"],style:{color:"rgb(255, 0, 0)"}},{types:["deleted","string"],style:{color:"rgb(163, 21, 21)"}},{types:["changed","punctuation"],style:{color:"rgb(4, 81, 165)"}},{types:["function","keyword"],style:{color:"rgb(0, 0, 255)"}},{types:["class-name"],style:{color:"rgb(38, 127, 153)"}}]},H={plain:{color:"#f8fafc",backgroundColor:"#011627"},styles:[{types:["prolog"],style:{color:"#000080"}},{types:["comment"],style:{color:"#6A9955"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"#569CD6"}},{types:["number","inserted"],style:{color:"#B5CEA8"}},{types:["constant"],style:{color:"#f8fafc"}},{types:["attr-name","variable"],style:{color:"#9CDCFE"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"#cbd5e1"}},{types:["selector"],style:{color:"#D7BA7D"}},{types:["tag"],style:{color:"#0ea5e9"}},{types:["tag"],languages:["markup"],style:{color:"#0ea5e9"}},{types:["punctuation","operator"],style:{color:"#D4D4D4"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"#7dd3fc"}},{types:["class-name"],style:{color:"#0ea5e9"}},{types:["char"],style:{color:"#D16969"}}]},G={plain:{color:"#0f172a",backgroundColor:"#f1f5f9"},styles:[{types:["prolog"],style:{color:"#000080"}},{types:["comment"],style:{color:"#6A9955"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"#0c4a6e"}},{types:["number","inserted"],style:{color:"#B5CEA8"}},{types:["constant"],style:{color:"#0f172a"}},{types:["attr-name","variable"],style:{color:"#0c4a6e"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"#64748b"}},{types:["selector"],style:{color:"#D7BA7D"}},{types:["tag"],style:{color:"#0ea5e9"}},{types:["tag"],languages:["markup"],style:{color:"#0ea5e9"}},{types:["punctuation","operator"],style:{color:"#475569"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"#0e7490"}},{types:["class-name"],style:{color:"#0ea5e9"}},{types:["char"],style:{color:"#D16969"}}]},V={plain:{backgroundColor:"hsl(220, 13%, 18%)",color:"hsl(220, 14%, 71%)",textShadow:"0 1px rgba(0, 0, 0, 0.3)"},styles:[{types:["comment","prolog","cdata"],style:{color:"hsl(220, 10%, 40%)"}},{types:["doctype","punctuation","entity"],style:{color:"hsl(220, 14%, 71%)"}},{types:["attr-name","class-name","maybe-class-name","boolean","constant","number","atrule"],style:{color:"hsl(29, 54%, 61%)"}},{types:["keyword"],style:{color:"hsl(286, 60%, 67%)"}},{types:["property","tag","symbol","deleted","important"],style:{color:"hsl(355, 65%, 65%)"}},{types:["selector","string","char","builtin","inserted","regex","attr-value"],style:{color:"hsl(95, 38%, 62%)"}},{types:["variable","operator","function"],style:{color:"hsl(207, 82%, 66%)"}},{types:["url"],style:{color:"hsl(187, 47%, 55%)"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"hsl(220, 14%, 71%)"}}]},W={plain:{backgroundColor:"hsl(230, 1%, 98%)",color:"hsl(230, 8%, 24%)"},styles:[{types:["comment","prolog","cdata"],style:{color:"hsl(230, 4%, 64%)"}},{types:["doctype","punctuation","entity"],style:{color:"hsl(230, 8%, 24%)"}},{types:["attr-name","class-name","boolean","constant","number","atrule"],style:{color:"hsl(35, 99%, 36%)"}},{types:["keyword"],style:{color:"hsl(301, 63%, 40%)"}},{types:["property","tag","symbol","deleted","important"],style:{color:"hsl(5, 74%, 59%)"}},{types:["selector","string","char","builtin","inserted","regex","attr-value","punctuation"],style:{color:"hsl(119, 34%, 47%)"}},{types:["variable","operator","function"],style:{color:"hsl(221, 87%, 60%)"}},{types:["url"],style:{color:"hsl(198, 99%, 37%)"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"hsl(230, 8%, 24%)"}}]},Q={plain:{color:"#ebdbb2",backgroundColor:"#292828"},styles:[{types:["imports","class-name","maybe-class-name","constant","doctype","builtin","function"],style:{color:"#d8a657"}},{types:["property-access"],style:{color:"#7daea3"}},{types:["tag"],style:{color:"#e78a4e"}},{types:["attr-name","char","url","regex"],style:{color:"#a9b665"}},{types:["attr-value","string"],style:{color:"#89b482"}},{types:["comment","prolog","cdata","operator","inserted"],style:{color:"#a89984"}},{types:["delimiter","boolean","keyword","selector","important","atrule","property","variable","deleted"],style:{color:"#ea6962"}},{types:["entity","number","symbol"],style:{color:"#d3869b"}}]},K={plain:{color:"#654735",backgroundColor:"#f9f5d7"},styles:[{types:["delimiter","boolean","keyword","selector","important","atrule","property","variable","deleted"],style:{color:"#af2528"}},{types:["imports","class-name","maybe-class-name","constant","doctype","builtin"],style:{color:"#b4730e"}},{types:["string","attr-value"],style:{color:"#477a5b"}},{types:["property-access"],style:{color:"#266b79"}},{types:["function","attr-name","char","url"],style:{color:"#72761e"}},{types:["tag"],style:{color:"#b94c07"}},{types:["comment","prolog","cdata","operator","inserted"],style:{color:"#a89984"}},{types:["entity","number","symbol"],style:{color:"#924f79"}}]},Y=/\r\n|\r|\n/,X=e=>{0===e.length?e.push({types:["plain"],content:"\n",empty:!0}):1===e.length&&""===e[0].content&&(e[0].content="\n",e[0].empty=!0)},Z=(e,t)=>{const n=e.length;return n>0&&e[n-1]===t?e:e.concat(t)},J=e=>{const t=[[]],n=[e],r=[0],o=[e.length];let a=0,i=0,l=[];const s=[l];for(;i>-1;){for(;(a=r[i]++)<o[i];){let e,c=t[i];const u=n[i][a];if("string"==typeof u?(c=i>0?c:["plain"],e=u):(c=Z(c,u.type),u.alias&&(c=Z(c,u.alias)),e=u.content),"string"!=typeof e){i++,t.push(c),n.push(e),r.push(0),o.push(e.length);continue}const d=e.split(Y),p=d.length;l.push({types:c,content:d[0]});for(let t=1;t<p;t++)X(l),s.push(l=[]),l.push({types:c,content:d[t]})}i--,t.pop(),n.pop(),r.pop(),o.pop()}return X(l),s},ee=(e,t)=>{const{plain:n}=e,r=e.styles.reduce((e,n)=>{const{languages:r,style:o}=n;return r&&!r.includes(t)||n.types.forEach(t=>{const n=x(x({},e[t]),o);e[t]=n}),e},{});return r.root=n,r.plain=E(x({},n),{backgroundColor:void 0}),r},te=({children:e,language:t,code:n,theme:r,prism:o})=>{const a=t.toLowerCase(),i=ee(r,a),l=(e=>(0,u.useCallback)(t=>{var n=t,{className:r,style:o,line:a}=n,i=_(n,["className","style","line"]);const l=E(x({},i),{className:(0,d.A)("token-line",r)});return"object"==typeof e&&"plain"in e&&(l.style=e.plain),"object"==typeof o&&(l.style=x(x({},l.style||{}),o)),l},[e]))(i),s=(e=>{const t=(0,u.useCallback)(({types:t,empty:n})=>{if(null!=e)return 1===t.length&&"plain"===t[0]?null!=n?{display:"inline-block"}:void 0:1===t.length&&null!=n?e[t[0]]:Object.assign(null!=n?{display:"inline-block"}:{},...t.map(t=>e[t]))},[e]);return(0,u.useCallback)(e=>{var n=e,{token:r,className:o,style:a}=n,i=_(n,["token","className","style"]);const l=E(x({},i),{className:(0,d.A)("token",...r.types,o),children:r.content,style:t(r)});return null!=a&&(l.style=x(x({},l.style||{}),a)),l},[t])})(i),c=(({prism:e,code:t,grammar:n,language:r})=>(0,u.useMemo)(()=>{if(null==n)return J([t]);const o={code:t,grammar:n,language:r,tokens:[]};return e.hooks.run("before-tokenize",o),o.tokens=e.tokenize(t,n),e.hooks.run("after-tokenize",o),J(o.tokens)},[t,n,r,e]))({prism:o,language:a,code:n,grammar:o.languages[a]});return e({tokens:c,className:`prism-code language-${a}`,style:null!=i?i.root:{},getLineProps:l,getTokenProps:s})},ne=e=>(0,u.createElement)(te,E(x({},e),{prism:e.prism||A,theme:e.theme||U,code:e.code,language:e.language}))},2131:(e,t,n)=>{"use strict";n.d(t,{o:()=>i});var r=n(4586),o=n(6347),a=n(440);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:l}}=(0,r.A)(),{pathname:s}=(0,o.zy)(),c=(0,a.Ks)(s,{trailingSlash:n,baseUrl:e}),u=l===i?e:e.replace(`/${l}/`,"/"),d=c.replace(e,"");return{createUrl:function({locale:e,fullyQualified:n}){return`${n?t:""}${function(e){return e===i?`${u}`:`${u}${e}/`}(e)}${d}`}}}},2303:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var r=n(6540),o=n(6125);function a(){return(0,r.useContext)(o.o)}},2566:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.addPrefix=function(e,t){return e.startsWith(t)?e:`${t}${e}`},t.removeSuffix=function(e,t){if(""===t)return e;return e.endsWith(t)?e.slice(0,-t.length):e},t.addSuffix=function(e,t){return e.endsWith(t)?e:`${e}${t}`},t.removePrefix=function(e,t){return e.startsWith(t)?e.slice(t.length):e}},2654:e=>{"use strict";e.exports={}},2694:(e,t,n)=>{"use strict";var r=n(6925);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,a,i){if(i!==r){var l=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 l.name="Invariant Violation",l}}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:a,resetWarningCache:o};return n.PropTypes=n,n}},2799:(e,t)=>{"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,o=n?Symbol.for("react.portal"):60106,a=n?Symbol.for("react.fragment"):60107,i=n?Symbol.for("react.strict_mode"):60108,l=n?Symbol.for("react.profiler"):60114,s=n?Symbol.for("react.provider"):60109,c=n?Symbol.for("react.context"):60110,u=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,p=n?Symbol.for("react.forward_ref"):60112,f=n?Symbol.for("react.suspense"):60113,m=n?Symbol.for("react.suspense_list"):60120,g=n?Symbol.for("react.memo"):60115,h=n?Symbol.for("react.lazy"):60116,y=n?Symbol.for("react.block"):60121,b=n?Symbol.for("react.fundamental"):60117,v=n?Symbol.for("react.responder"):60118,w=n?Symbol.for("react.scope"):60119;function k(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case u:case d:case a:case l:case i:case f:return e;default:switch(e=e&&e.$$typeof){case c:case p:case h:case g:case s:return e;default:return t}}case o:return t}}}function S(e){return k(e)===d}t.AsyncMode=u,t.ConcurrentMode=d,t.ContextConsumer=c,t.ContextProvider=s,t.Element=r,t.ForwardRef=p,t.Fragment=a,t.Lazy=h,t.Memo=g,t.Portal=o,t.Profiler=l,t.StrictMode=i,t.Suspense=f,t.isAsyncMode=function(e){return S(e)||k(e)===u},t.isConcurrentMode=S,t.isContextConsumer=function(e){return k(e)===c},t.isContextProvider=function(e){return k(e)===s},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return k(e)===p},t.isFragment=function(e){return k(e)===a},t.isLazy=function(e){return k(e)===h},t.isMemo=function(e){return k(e)===g},t.isPortal=function(e){return k(e)===o},t.isProfiler=function(e){return k(e)===l},t.isStrictMode=function(e){return k(e)===i},t.isSuspense=function(e){return k(e)===f},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===a||e===d||e===l||e===i||e===f||e===m||"object"==typeof e&&null!==e&&(e.$$typeof===h||e.$$typeof===g||e.$$typeof===s||e.$$typeof===c||e.$$typeof===p||e.$$typeof===b||e.$$typeof===v||e.$$typeof===w||e.$$typeof===y)},t.typeOf=k},2831:(e,t,n)=>{"use strict";n.d(t,{u:()=>i,v:()=>l});var r=n(6347),o=n(8168),a=n(6540);function i(e,t,n){return void 0===n&&(n=[]),e.some(function(e){var o=e.path?(0,r.B6)(t,e):n.length?n[n.length-1].match:r.Ix.computeRootMatch(t);return o&&(n.push({route:e,match:o}),e.routes&&i(e.routes,t,n)),o}),n}function l(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),e?a.createElement(r.dO,n,e.map(function(e,n){return a.createElement(r.qh,{key:e.key||n,path:e.path,exact:e.exact,strict:e.strict,render:function(n){return e.render?e.render((0,o.A)({},n,{},t,{route:e})):a.createElement(e.component,(0,o.A)({},n,t,{route:e}))}})})):null}},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 a=Object.keys(e),i=Object.keys(t);if(a.length!==i.length)return!1;for(var l=Object.prototype.hasOwnProperty.bind(t),s=0;s<a.length;s++){var c=a[s];if(!l(c))return!1;var u=e[c],d=t[c];if(!1===(o=n?n.call(r,u,d,c):void 0)||void 0===o&&u!==d)return!1}return!0}},2892:(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)}function o(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,r(e,t)}n.d(t,{A:()=>o})},2983:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.addTrailingSlash=o,t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[i]=e.split(/[#?]/),l="/"===i||i===r?i:(s=i,c=n,c?o(s):a(s));var s,c;return e.replace(i,l)},t.addLeadingSlash=function(e){return(0,r.addPrefix)(e,"/")},t.removeTrailingSlash=a;const r=n(2566);function o(e){return e.endsWith("/")?e:`${e}/`}function a(e){return(0,r.removeSuffix)(e,"/")}},3001:(e,t,n)=>{"use strict";n.r(t)},3025:(e,t,n)=>{"use strict";n.d(t,{n:()=>l,r:()=>s});var r=n(6540),o=n(9532),a=n(4848);const i=r.createContext(null);function l({children:e,version:t}){return(0,a.jsx)(i.Provider,{value:t,children:e})}function s(){const e=(0,r.useContext)(i);if(null===e)throw new o.dV("DocsVersionProvider");return e}},3102:(e,t,n)=>{"use strict";n.d(t,{W:()=>i,o:()=>a});var r=n(6540),o=n(4848);const a=r.createContext(null);function i({children:e,value:t}){const n=r.useContext(a),i=(0,r.useMemo)(()=>function({parent:e,value:t}){if(!e){if(!t)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in t))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return t}const n={...e.data,...t?.data};return{plugin:e.plugin,data:n}}({parent:n,value:t}),[n,t]);return(0,o.jsx)(a.Provider,{value:i,children:e})}},3104:(e,t,n)=>{"use strict";n.d(t,{Mq:()=>p,Tv:()=>c,gk:()=>f});var r=n(6540),o=n(8193),a=n(2303),i=(n(205),n(9532)),l=n(4848);const s=r.createContext(void 0);function c({children:e}){const t=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)(()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}}),[])}();return(0,l.jsx)(s.Provider,{value:t,children:e})}function u(){const e=(0,r.useContext)(s);if(null==e)throw new i.dV("ScrollControllerProvider");return e}const d=()=>o.A.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function p(e,t=[]){const{scrollEventsEnabledRef:n}=u(),o=(0,r.useRef)(d()),a=(0,i._q)(e);(0,r.useEffect)(()=>{const e=()=>{if(!n.current)return;const e=d();a(e,o.current),o.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)},[a,n,...t])}function f(){const e=(0,r.useRef)(null),t=(0,a.A)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const o=document.documentElement.scrollTop;(n&&o>e||!n&&o<e)&&(t=requestAnimationFrame(r),window.scrollTo(0,Math.floor(.85*(o-e))+e))}(),()=>t&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},3109:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{O:()=>r})},3157:(e,t,n)=>{var r={"./":8722};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=3157},3186:(e,t,n)=>{"use strict";n.d(t,{A:()=>i});n(6540);const r={iconExternalLink:"iconExternalLink_nPIU"};var o=n(4848);const a="#theme-svg-external-link";function i({width:e=13.5,height:t=13.5}){return(0,o.jsx)("svg",{width:e,height:t,"aria-hidden":"true",className:r.iconExternalLink,children:(0,o.jsx)("use",{href:a})})}},3259:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function o(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(){return i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i.apply(this,arguments)}var l=n(6540),s=[],c=[];var u=l.createContext(null);function d(e){var t=e(),n={loading:!0,loaded:null,error:null};return n.promise=t.then(function(e){return n.loading=!1,n.loaded=e,e}).catch(function(e){throw n.loading=!1,n.error=e,e}),n}function p(e){var t={loading:!1,loaded:{},error:null},n=[];try{Object.keys(e).forEach(function(r){var o=d(e[r]);o.loading?t.loading=!0:(t.loaded[r]=o.loaded,t.error=o.error),n.push(o.promise),o.promise.then(function(e){t.loaded[r]=e}).catch(function(e){t.error=e})})}catch(r){t.error=r}return t.promise=Promise.all(n).then(function(e){return t.loading=!1,e}).catch(function(e){throw t.loading=!1,e}),t}function f(e,t){return l.createElement((n=e)&&n.__esModule?n.default:n,t);var n}function m(e,t){var d,p;if(!t.loading)throw new Error("react-loadable requires a `loading` component");var m=i({loader:null,loading:null,delay:200,timeout:null,render:f,webpack:null,modules:null},t),g=null;function h(){return g||(g=e(m.loader)),g.promise}return s.push(h),"function"==typeof m.webpack&&c.push(function(){if((0,m.webpack)().every(function(e){return void 0!==e&&void 0!==n.m[e]}))return h()}),p=d=function(t){function n(n){var r;return a(o(o(r=t.call(this,n)||this)),"retry",function(){r.setState({error:null,loading:!0,timedOut:!1}),g=e(m.loader),r._loadModule()}),h(),r.state={error:g.error,pastDelay:!1,timedOut:!1,loading:g.loading,loaded:g.loaded},r}r(n,t),n.preload=function(){return h()};var i=n.prototype;return i.UNSAFE_componentWillMount=function(){this._loadModule()},i.componentDidMount=function(){this._mounted=!0},i._loadModule=function(){var e=this;if(this.context&&Array.isArray(m.modules)&&m.modules.forEach(function(t){e.context.report(t)}),g.loading){var t=function(t){e._mounted&&e.setState(t)};"number"==typeof m.delay&&(0===m.delay?this.setState({pastDelay:!0}):this._delay=setTimeout(function(){t({pastDelay:!0})},m.delay)),"number"==typeof m.timeout&&(this._timeout=setTimeout(function(){t({timedOut:!0})},m.timeout));var n=function(){t({error:g.error,loaded:g.loaded,loading:g.loading}),e._clearTimeouts()};g.promise.then(function(){return n(),null}).catch(function(e){return n(),null})}},i.componentWillUnmount=function(){this._mounted=!1,this._clearTimeouts()},i._clearTimeouts=function(){clearTimeout(this._delay),clearTimeout(this._timeout)},i.render=function(){return this.state.loading||this.state.error?l.createElement(m.loading,{isLoading:this.state.loading,pastDelay:this.state.pastDelay,timedOut:this.state.timedOut,error:this.state.error,retry:this.retry}):this.state.loaded?m.render(this.state.loaded,this.props):null},n}(l.Component),a(d,"contextType",u),p}function g(e){return m(d,e)}g.Map=function(e){if("function"!=typeof e.render)throw new Error("LoadableMap requires a `render(loaded, props)` function");return m(p,e)};var h=function(e){function t(){return e.apply(this,arguments)||this}return r(t,e),t.prototype.render=function(){return l.createElement(u.Provider,{value:{report:this.props.report}},l.Children.only(this.props.children))},t}(l.Component);function y(e){for(var t=[];e.length;){var n=e.pop();t.push(n())}return Promise.all(t).then(function(){if(e.length)return y(e)})}g.Capture=h,g.preloadAll=function(){return new Promise(function(e,t){y(s).then(e,t)})},g.preloadReady=function(){return new Promise(function(e,t){y(c).then(e,e)})},e.exports=g},3427:(e,t,n)=>{"use strict";n.d(t,{A:()=>i});var r=n(6540);n(4848);const o=r.createContext({collectAnchor:()=>{},collectLink:()=>{}}),a=()=>(0,r.useContext)(o);function i(){return a()}},3465:(e,t,n)=>{"use strict";n.d(t,{A:()=>u});n(6540);var r=n(8774),o=n(6025),a=n(4586),i=n(6342),l=n(1122),s=n(4848);function c({logo:e,alt:t,imageClassName:n}){const r={light:(0,o.Ay)(e.src),dark:(0,o.Ay)(e.srcDark||e.src)},a=(0,s.jsx)(l.A,{className:e.className,sources:r,height:e.height,width:e.width,alt:t,style:e.style});return n?(0,s.jsx)("div",{className:n,children:a}):a}function u(e){const{siteConfig:{title:t}}=(0,a.A)(),{navbar:{title:n,logo:l}}=(0,i.p)(),{imageClassName:u,titleClassName:d,...p}=e,f=(0,o.Ay)(l?.href||"/"),m=n?"":t,g=l?.alt??m;return(0,s.jsxs)(r.A,{to:f,...p,...l?.target&&{target:l.target},children:[l&&(0,s.jsx)(c,{logo:l,alt:g,imageClassName:u}),null!=n&&(0,s.jsx)("b",{className:d,children:n})]})}},3886:(e,t,n)=>{"use strict";n.d(t,{VQ:()=>h,g1:()=>b});var r=n(6540),o=n(4070),a=n(7065),i=n(6342),l=n(679),s=n(9532),c=n(4848);const u=e=>`docs-preferred-version-${e}`,d={save:(e,t,n)=>{(0,l.Wf)(u(e),{persistence:t}).set(n)},read:(e,t)=>(0,l.Wf)(u(e),{persistence:t}).get(),clear:(e,t)=>{(0,l.Wf)(u(e),{persistence:t}).del()}},p=e=>Object.fromEntries(e.map(e=>[e,{preferredVersionName:null}]));const f=r.createContext(null);function m(){const e=(0,o.Gy)(),t=(0,i.p)().docs.versionPersistence,n=(0,r.useMemo)(()=>Object.keys(e),[e]),[a,l]=(0,r.useState)(()=>p(n));(0,r.useEffect)(()=>{l(function({pluginIds:e,versionPersistence:t,allDocsData:n}){function r(e){const r=d.read(e,t);return n[e].versions.some(e=>e.name===r)?{preferredVersionName:r}:(d.clear(e,t),{preferredVersionName:null})}return Object.fromEntries(e.map(e=>[e,r(e)]))}({allDocsData:e,versionPersistence:t,pluginIds:n}))},[e,t,n]);return[a,(0,r.useMemo)(()=>({savePreferredVersion:function(e,n){d.save(e,t,n),l(t=>({...t,[e]:{preferredVersionName:n}}))}}),[t])]}function g({children:e}){const t=m();return(0,c.jsx)(f.Provider,{value:t,children:e})}function h({children:e}){return(0,c.jsx)(g,{children:e})}function y(){const e=(0,r.useContext)(f);if(!e)throw new s.dV("DocsPreferredVersionContextProvider");return e}function b(e=a.W){const t=(0,o.ht)(e),[n,i]=y(),{preferredVersionName:l}=n[e];return{preferredVersion:t.versions.find(e=>e.name===l)??null,savePreferredVersionName:(0,r.useCallback)(t=>{i.savePreferredVersion(e,t)},[i,e])}}},4054:e=>{"use strict";e.exports=JSON.parse('{"/oracle-db-appdev-monitoring/markdown-page-553":{"__comp":"1f391b9e","__context":{"plugin":"a7456010"},"content":"393be207"},"/oracle-db-appdev-monitoring/docs-be8":{"__comp":"5e95c892","__context":{"plugin":"aba21aa0"}},"/oracle-db-appdev-monitoring/docs-91e":{"__comp":"a7bd4aaa","__props":"6f6f2b68"},"/oracle-db-appdev-monitoring/docs-6f9":{"__comp":"a94703ab"},"/oracle-db-appdev-monitoring/docs/advanced/development-996":{"__comp":"17896441","content":"b8d4edc5"},"/oracle-db-appdev-monitoring/docs/advanced/go-runtime-a4f":{"__comp":"17896441","content":"a7f4dc0a"},"/oracle-db-appdev-monitoring/docs/advanced/txeventq-a4f":{"__comp":"17896441","content":"21b27731"},"/oracle-db-appdev-monitoring/docs/category/advanced-582":{"__comp":"14eb3368","__props":"a989571e"},"/oracle-db-appdev-monitoring/docs/category/configuration-b77":{"__comp":"14eb3368","__props":"867ce809"},"/oracle-db-appdev-monitoring/docs/category/getting-started-0ec":{"__comp":"14eb3368","__props":"2d404bd3"},"/oracle-db-appdev-monitoring/docs/category/releases-18e":{"__comp":"14eb3368","__props":"2a1428c8"},"/oracle-db-appdev-monitoring/docs/configuration/alert-logs-f83":{"__comp":"17896441","content":"61f1b472"},"/oracle-db-appdev-monitoring/docs/configuration/azure-vault-a02":{"__comp":"17896441","content":"85a0f18d"},"/oracle-db-appdev-monitoring/docs/configuration/config-file-b19":{"__comp":"17896441","content":"d94a41cc"},"/oracle-db-appdev-monitoring/docs/configuration/custom-metrics-ba7":{"__comp":"17896441","content":"1e10f605"},"/oracle-db-appdev-monitoring/docs/configuration/multiple-databases-e32":{"__comp":"17896441","content":"d72bb23b"},"/oracle-db-appdev-monitoring/docs/configuration/oci-vault-7d6":{"__comp":"17896441","content":"dac61621"},"/oracle-db-appdev-monitoring/docs/configuration/oracle-wallet-412":{"__comp":"17896441","content":"49d0ab44"},"/oracle-db-appdev-monitoring/docs/getting-started/basics-0c9":{"__comp":"17896441","content":"af966633"},"/oracle-db-appdev-monitoring/docs/getting-started/default-metrics-67c":{"__comp":"17896441","content":"6e6103cc"},"/oracle-db-appdev-monitoring/docs/getting-started/grafana-dashboards-3b7":{"__comp":"17896441","content":"2c91c66b"},"/oracle-db-appdev-monitoring/docs/getting-started/kubernetes-ead":{"__comp":"17896441","content":"5240f2c1"},"/oracle-db-appdev-monitoring/docs/intro-4e3":{"__comp":"17896441","content":"0e384e19"},"/oracle-db-appdev-monitoring/docs/releases/changelog-1c7":{"__comp":"17896441","content":"c539bf3f"},"/oracle-db-appdev-monitoring/docs/releases/roadmap-81b":{"__comp":"17896441","content":"384c9e20"},"/oracle-db-appdev-monitoring/-5e8":{"__comp":"1df93b7f","__context":{"plugin":"a7456010"},"config":"5e9f5e1a"}}')},4070:(e,t,n)=>{"use strict";n.d(t,{zK:()=>g,vT:()=>p,Gy:()=>u,HW:()=>h,ht:()=>d,r7:()=>m,jh:()=>f});var r=n(6347),o=n(4586),a=n(7065);function i(e,t={}){const n=function(){const{globalData:e}=(0,o.A)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const l=e=>e.versions.find(e=>e.isLast);function s(e,t){const n=function(e,t){return[...e.versions].sort((e,t)=>e.path===t.path?0:e.path.includes(t.path)?-1:t.path.includes(e.path)?1:0).find(e=>!!(0,r.B6)(t,{path:e.path,exact:!1,strict:!1}))}(e,t),o=n?.docs.find(e=>!!(0,r.B6)(t,{path:e.path,exact:!0,strict:!1}));return{activeVersion:n,activeDoc:o,alternateDocVersions:o?function(t){const n={};return e.versions.forEach(e=>{e.docs.forEach(r=>{r.id===t&&(n[e.name]=r)})}),n}(o.id):{}}}const c={},u=()=>i("docusaurus-plugin-content-docs")??c,d=e=>{try{return function(e,t=a.W,n={}){const r=i(e),o=r?.[t];if(!o&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return o}("docusaurus-plugin-content-docs",e,{failfast:!0})}catch(t){throw new Error("You are using a feature of the Docusaurus docs plugin, but this plugin does not seem to be enabled"+("Default"===e?"":` (pluginId=${e}`),{cause:t})}};function p(e={}){const t=u(),{pathname:n}=(0,r.zy)();return function(e,t,n={}){const o=Object.entries(e).sort((e,t)=>t[1].path.localeCompare(e[1].path)).find(([,e])=>!!(0,r.B6)(t,{path:e.path,exact:!1,strict:!1})),a=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!a&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map(e=>e.path).join(", ")}`);return a}(t,n,e)}function f(e){return d(e).versions}function m(e){const t=d(e);return l(t)}function g(e){const t=d(e),{pathname:n}=(0,r.zy)();return s(t,n)}function h(e){const t=d(e),{pathname:n}=(0,r.zy)();return function(e,t){const n=l(e);return{latestDocSuggestion:s(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},4090:(e,t,n)=>{"use strict";n.d(t,{w:()=>o,J:()=>a});var r=n(6540);const o="navigation-with-keyboard";function a(){(0,r.useEffect)(()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(o),"mousedown"===e.type&&document.body.classList.remove(o)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(o),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}},[])}},4146:(e,t,n)=>{"use strict";var r=n(4363),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||o}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var c=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var o=f(n);o&&o!==m&&e(t,o,r)}var i=u(n);d&&(i=i.concat(d(n)));for(var l=s(t),g=s(n),h=0;h<i.length;++h){var y=i[h];if(!(a[y]||r&&r[y]||g&&g[y]||l&&l[y])){var b=p(n,y);try{c(t,y,b)}catch(v){}}}}return t}},4164:(e,t,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)){var a=e.length;for(t=0;t<a;t++)e[t]&&(n=r(e[t]))&&(o&&(o+=" "),o+=n)}else for(n in e)e[n]&&(o&&(o+=" "),o+=n);return o}n.d(t,{A:()=>o});const o=function(){for(var e,t,n=0,o="",a=arguments.length;n<a;n++)(e=arguments[n])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}},4363:(e,t,n)=>{"use strict";e.exports=n(2799)},4477:(e,t)=>{"use strict";function n(e,t){var n=e.length;e.push(t);e:for(;0<n;){var r=n-1>>>1,o=e[r];if(!(0<a(o,t)))break e;e[r]=t,e[n]=o,n=r}}function r(e){return 0===e.length?null:e[0]}function o(e){if(0===e.length)return null;var t=e[0],n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,o=e.length,i=o>>>1;r<i;){var l=2*(r+1)-1,s=e[l],c=l+1,u=e[c];if(0>a(s,n))c<o&&0>a(u,s)?(e[r]=u,e[c]=n,r=c):(e[r]=s,e[l]=n,r=l);else{if(!(c<o&&0>a(u,n)))break e;e[r]=u,e[c]=n,r=c}}}return t}function a(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}if(t.unstable_now=void 0,"object"==typeof performance&&"function"==typeof performance.now){var i=performance;t.unstable_now=function(){return i.now()}}else{var l=Date,s=l.now();t.unstable_now=function(){return l.now()-s}}var c=[],u=[],d=1,p=null,f=3,m=!1,g=!1,h=!1,y=!1,b="function"==typeof setTimeout?setTimeout:null,v="function"==typeof clearTimeout?clearTimeout:null,w="undefined"!=typeof setImmediate?setImmediate:null;function k(e){for(var t=r(u);null!==t;){if(null===t.callback)o(u);else{if(!(t.startTime<=e))break;o(u),t.sortIndex=t.expirationTime,n(c,t)}t=r(u)}}function S(e){if(h=!1,k(e),!g)if(null!==r(c))g=!0,E||(E=!0,x());else{var t=r(u);null!==t&&L(S,t.startTime-e)}}var x,E=!1,_=-1,C=5,A=-1;function T(){return!!y||!(t.unstable_now()-A<C)}function j(){if(y=!1,E){var e=t.unstable_now();A=e;var n=!0;try{e:{g=!1,h&&(h=!1,v(_),_=-1),m=!0;var a=f;try{t:{for(k(e),p=r(c);null!==p&&!(p.expirationTime>e&&T());){var i=p.callback;if("function"==typeof i){p.callback=null,f=p.priorityLevel;var l=i(p.expirationTime<=e);if(e=t.unstable_now(),"function"==typeof l){p.callback=l,k(e),n=!0;break t}p===r(c)&&o(c),k(e)}else o(c);p=r(c)}if(null!==p)n=!0;else{var s=r(u);null!==s&&L(S,s.startTime-e),n=!1}}break e}finally{p=null,f=a,m=!1}n=void 0}}finally{n?x():E=!1}}}if("function"==typeof w)x=function(){w(j)};else if("undefined"!=typeof MessageChannel){var P=new MessageChannel,N=P.port2;P.port1.onmessage=j,x=function(){N.postMessage(null)}}else x=function(){b(j,0)};function L(e,n){_=b(function(){e(t.unstable_now())},n)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):C=0<e?Math.floor(1e3/e):5},t.unstable_getCurrentPriorityLevel=function(){return f},t.unstable_next=function(e){switch(f){case 1:case 2:case 3:var t=3;break;default:t=f}var n=f;f=t;try{return e()}finally{f=n}},t.unstable_requestPaint=function(){y=!0},t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=f;f=e;try{return t()}finally{f=n}},t.unstable_scheduleCallback=function(e,o,a){var i=t.unstable_now();switch("object"==typeof a&&null!==a?a="number"==typeof(a=a.delay)&&0<a?i+a:i:a=i,e){case 1:var l=-1;break;case 2:l=250;break;case 5:l=1073741823;break;case 4:l=1e4;break;default:l=5e3}return e={id:d++,callback:o,priorityLevel:e,startTime:a,expirationTime:l=a+l,sortIndex:-1},a>i?(e.sortIndex=a,n(u,e),null===r(c)&&e===r(u)&&(h?(v(_),_=-1):h=!0,L(S,a-i))):(e.sortIndex=l,n(c,e),g||m||(g=!0,E||(E=!0,x()))),e},t.unstable_shouldYield=T,t.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}},4563:(e,t,n)=>{"use strict";n.d(t,{AL:()=>u,s$:()=>d});var r=n(6540),o=n(4586),a=n(6803),i=n(9532),l=n(4848);const s=({title:e,siteTitle:t,titleDelimiter:n})=>{const r=e?.trim();return r&&r!==t?`${r} ${n} ${t}`:t},c=(0,r.createContext)(null);function u({formatter:e,children:t}){return(0,l.jsx)(c.Provider,{value:e,children:t})}function d(){const e=function(){const e=(0,r.useContext)(c);if(null===e)throw new i.dV("TitleFormatterProvider");return e}(),{siteConfig:t}=(0,o.A)(),{title:n,titleDelimiter:l}=t,{plugin:u}=(0,a.A)();return{format:t=>e({title:t,siteTitle:n,titleDelimiter:l,plugin:u,defaultFormatter:s})}}},4581:(e,t,n)=>{"use strict";n.d(t,{l:()=>l});var r=n(6540),o=n(8193);const a={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function l({desktopBreakpoint:e=i}={}){const[t,n]=(0,r.useState)(()=>"ssr");return(0,r.useEffect)(()=>{function t(){n(function(e){if(!o.A.canUseDOM)throw new Error("getWindowSize() should only be called after React hydration");return window.innerWidth>e?a.desktop:a.mobile}(e))}return t(),window.addEventListener("resize",t),()=>{window.removeEventListener("resize",t)}},[e]),t}},4586:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var r=n(6540),o=n(6988);function a(){return(0,r.useContext)(o.o)}},4625:(e,t,n)=>{"use strict";n.d(t,{I9:()=>d,Kd:()=>u,N_:()=>y,k2:()=>w});var r=n(6347),o=n(2892),a=n(6540),i=n(1513),l=n(8168),s=n(8587),c=n(1561),u=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).history=(0,i.zR)(t.props),t}return(0,o.A)(t,e),t.prototype.render=function(){return a.createElement(r.Ix,{history:this.history,children:this.props.children})},t}(a.Component);var d=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).history=(0,i.TM)(t.props),t}return(0,o.A)(t,e),t.prototype.render=function(){return a.createElement(r.Ix,{history:this.history,children:this.props.children})},t}(a.Component);var p=function(e,t){return"function"==typeof e?e(t):e},f=function(e,t){return"string"==typeof e?(0,i.yJ)(e,null,null,t):e},m=function(e){return e},g=a.forwardRef;void 0===g&&(g=m);var h=g(function(e,t){var n=e.innerRef,r=e.navigate,o=e.onClick,i=(0,s.A)(e,["innerRef","navigate","onClick"]),c=i.target,u=(0,l.A)({},i,{onClick:function(e){try{o&&o(e)}catch(t){throw e.preventDefault(),t}e.defaultPrevented||0!==e.button||c&&"_self"!==c||function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)||(e.preventDefault(),r())}});return u.ref=m!==g&&t||n,a.createElement("a",u)});var y=g(function(e,t){var n=e.component,o=void 0===n?h:n,u=e.replace,d=e.to,y=e.innerRef,b=(0,s.A)(e,["component","replace","to","innerRef"]);return a.createElement(r.XZ.Consumer,null,function(e){e||(0,c.A)(!1);var n=e.history,r=f(p(d,e.location),e.location),s=r?n.createHref(r):"",h=(0,l.A)({},b,{href:s,navigate:function(){var t=p(d,e.location),r=(0,i.AO)(e.location)===(0,i.AO)(f(t));(u||r?n.replace:n.push)(t)}});return m!==g?h.ref=t||y:h.innerRef=y,a.createElement(o,h)})}),b=function(e){return e},v=a.forwardRef;void 0===v&&(v=b);var w=v(function(e,t){var n=e["aria-current"],o=void 0===n?"page":n,i=e.activeClassName,u=void 0===i?"active":i,d=e.activeStyle,m=e.className,g=e.exact,h=e.isActive,w=e.location,k=e.sensitive,S=e.strict,x=e.style,E=e.to,_=e.innerRef,C=(0,s.A)(e,["aria-current","activeClassName","activeStyle","className","exact","isActive","location","sensitive","strict","style","to","innerRef"]);return a.createElement(r.XZ.Consumer,null,function(e){e||(0,c.A)(!1);var n=w||e.location,i=f(p(E,n),n),s=i.pathname,A=s&&s.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1"),T=A?(0,r.B6)(n.pathname,{path:A,exact:g,sensitive:k,strict:S}):null,j=!!(h?h(T,n):T),P="function"==typeof m?m(j):m,N="function"==typeof x?x(j):x;j&&(P=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.filter(function(e){return e}).join(" ")}(P,u),N=(0,l.A)({},N,d));var L=(0,l.A)({"aria-current":j&&o||null,className:P,style:N,to:i},C);return b!==v?L.ref=t||_:L.innerRef=_,a.createElement(y,L)})})},4634:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},4718:(e,t,n)=>{"use strict";n.d(t,{d1:()=>A,Nr:()=>f,w8:()=>b,$S:()=>m,a4:()=>g,cC:()=>p,B5:()=>C,Vd:()=>x,QB:()=>_,fW:()=>E,OF:()=>S,Y:()=>w});var r=n(6540),o=n(6347),a=n(2831),i=n(4070),l=n(9169);function s(e){return Array.from(new Set(e))}var c=n(3886),u=n(3025),d=n(609);function p(e){const t=(0,u.r)();if(!e)return;const n=t.docs[e];if(!n)throw new Error(`no version doc found by id=${e}`);return n}function f(e){return"link"!==e.type||e.unlisted?"category"===e.type?function(e){if(e.href&&!e.linkUnlisted)return e.href;for(const t of e.items){const e=f(t);if(e)return e}}(e):void 0:e.href}function m(){const{pathname:e}=(0,o.zy)(),t=(0,d.t)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");const n=k({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];if(!n)throw new Error(`${e} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);return n}function g(){const{pathname:e}=(0,o.zy)(),t=(0,d.t)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");const n=k({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];return n?.items??t.items}const h=(e,t)=>void 0!==e&&(0,l.ys)(e,t),y=(e,t)=>e.some(e=>b(e,t));function b(e,t){return"link"===e.type?h(e.href,t):"category"===e.type&&(h(e.href,t)||y(e.items,t))}function v(e,t){switch(e.type){case"category":return b(e,t)||void 0!==e.href&&!e.linkUnlisted||e.items.some(e=>v(e,t));case"link":return!e.unlisted||b(e,t);default:return!0}}function w(e,t){return(0,r.useMemo)(()=>e.filter(e=>v(e,t)),[e,t])}function k({sidebarItems:e,pathname:t,onlyCategories:n=!1}){const r=[];return function e(o){for(const a of o)if("category"===a.type&&((0,l.ys)(a.href,t)||e(a.items))||"link"===a.type&&(0,l.ys)(a.href,t)){return n&&"category"!==a.type||r.unshift(a),!0}return!1}(e),r}function S(){const e=(0,d.t)(),{pathname:t}=(0,o.zy)(),n=(0,i.vT)()?.pluginData.breadcrumbs;return!1!==n&&e?k({sidebarItems:e.items,pathname:t}):null}function x(e){const{activeVersion:t}=(0,i.zK)(e),{preferredVersion:n}=(0,c.g1)(e),o=(0,i.r7)(e);return(0,r.useMemo)(()=>s([t,n,o].filter(Boolean)),[t,n,o])}function E(e,t){const n=x(t);return(0,r.useMemo)(()=>{const t=n.flatMap(e=>e.sidebars?Object.entries(e.sidebars):[]),r=t.find(t=>t[0]===e);if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map(e=>e.name).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map(e=>e[0]).join("\n- ")}`);return r[1]},[e,n])}function _(e,t){const n=x(t);return(0,r.useMemo)(()=>{const t=n.flatMap(e=>e.docs),r=t.find(t=>t.id===e);if(!r){if(n.flatMap(e=>e.draftIds).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map(e=>e.name).join(", ")}".\nAvailable doc ids are:\n- ${s(t.map(e=>e.id)).join("\n- ")}`)}return r},[e,n])}function C({route:e}){const t=(0,o.zy)(),n=(0,u.r)(),r=e.routes,i=r.find(e=>(0,o.B6)(t.pathname,e));if(!i)return null;const l=i.sidebar,s=l?n.docsSidebars[l]:void 0;return{docElement:(0,a.v)(r),sidebarName:l,sidebarItems:s}}function A(e){return e.filter(e=>!("category"===e.type||"link"===e.type)||!!f(e))}},4784:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={title:"Oracle Database Metrics Exporter",tagline:"OpenTelemetry Metrics for your Oracle Database instances",favicon:"img/favicon-32x32.png",future:{v4:{removeLegacyPostBuildHeadAttribute:!0,useCssCascadeLayers:!0},experimental_faster:{swcJsLoader:!1,swcJsMinimizer:!1,swcHtmlMinimizer:!1,lightningCssMinimizer:!1,mdxCrossCompilerCache:!1,rspackBundler:!1,rspackPersistentCache:!1,ssgWorkerThreads:!1},experimental_storage:{type:"localStorage",namespace:!1},experimental_router:"browser"},url:"https://oracle.github.io",baseUrl:"/oracle-db-appdev-monitoring/",organizationName:"oracle",projectName:"oracle-db-appdev-monitoring",onBrokenLinks:"throw",onBrokenMarkdownLinks:"warn",i18n:{defaultLocale:"en",locales:["en"],path:"i18n",localeConfigs:{}},presets:[["classic",{docs:{sidebarPath:"./sidebars.ts",editUrl:"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/"},theme:{customCss:"./src/css/custom.css"}}]],themeConfig:{image:"img/logo.png",navbar:{title:"Oracle Database Monitoring Exporter",logo:{alt:"Oracle Database Monitoring Exporter Logo",src:"img/logo_home.png"},items:[{type:"docSidebar",sidebarId:"tutorialSidebar",position:"left",label:"Docs"},{type:"docsVersionDropdown",versions:["current"],position:"left",dropdownItemsBefore:[],dropdownItemsAfter:[]},{href:"https://github.com/oracle/oracle-db-appdev-monitoring",label:"GitHub",position:"right"}],hideOnScroll:!1},footer:{style:"dark",links:[{title:"Docs",items:[{label:"Tutorial",to:"/docs/intro"}]},{title:"Community",items:[{label:"Stack Overflow",href:"https://stackoverflow.com/questions/tagged/oracle"}]},{title:"More",items:[{label:"Oracle Blogs",to:"https://blogs.oracle.com/"},{label:"Oracle LiveLabs",to:"https://livelabs.oracle.com/pls/apex/r/dbpm/livelabs/home"},{label:"GitHub",href:"https://github.com/oracle/oracle-db-appdev-monitoring"}]}],copyright:"Copyright \xa9 2025, Oracle and/or its affiliates. Built with \u2764\ufe0f using Docusaurus."},prism:{theme:{plain:{color:"#393A34",backgroundColor:"#f6f8fa"},styles:[{types:["comment","prolog","doctype","cdata"],style:{color:"#999988",fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}},{types:["string","attr-value"],style:{color:"#e3116c"}},{types:["punctuation","operator"],style:{color:"#393A34"}},{types:["entity","url","symbol","number","boolean","variable","constant","property","regex","inserted"],style:{color:"#36acaa"}},{types:["atrule","keyword","attr-name","selector"],style:{color:"#00a4db"}},{types:["function","deleted","tag"],style:{color:"#d73a49"}},{types:["function-variable"],style:{color:"#6f42c1"}},{types:["tag","selector","keyword"],style:{color:"#00009f"}}]},darkTheme:{plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},additionalLanguages:[],magicComments:[{className:"theme-code-block-highlighted-line",line:"highlight-next-line",block:{start:"highlight-start",end:"highlight-end"}}]},colorMode:{defaultMode:"light",disableSwitch:!1,respectPrefersColorScheme:!1},docs:{versionPersistence:"localStorage",sidebar:{hideable:!1,autoCollapseCategories:!1}},blog:{sidebar:{groupByYear:!0}},metadata:[],tableOfContents:{minHeadingLevel:2,maxHeadingLevel:3}},baseUrlIssueBanner:!0,onBrokenAnchors:"warn",onDuplicateRoutes:"warn",staticDirectories:["static"],customFields:{},plugins:[],themes:[],scripts:[],headTags:[],stylesheets:[],clientModules:[],titleDelimiter:"|",noIndex:!1,markdown:{format:"mdx",mermaid:!1,mdx1Compat:{comments:!0,admonitions:!0,headingIds:!0},anchors:{maintainCase:!1}}}},4848:(e,t,n)=>{"use strict";e.exports=n(9698)},5041:(e,t,n)=>{"use strict";n.d(t,{M:()=>g,o:()=>m});var r=n(6540),o=n(2303),a=n(679),i=n(9532),l=n(6342),s=n(4848);const c=(0,a.Wf)("docusaurus.announcement.dismiss"),u=(0,a.Wf)("docusaurus.announcement.id"),d=()=>"true"===c.get(),p=e=>c.set(String(e)),f=r.createContext(null);function m({children:e}){const t=function(){const{announcementBar:e}=(0,l.p)(),t=(0,o.A)(),[n,a]=(0,r.useState)(()=>!!t&&d());(0,r.useEffect)(()=>{a(d())},[]);const i=(0,r.useCallback)(()=>{p(!0),a(!0)},[]);return(0,r.useEffect)(()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&p(!1),!r&&d()||a(!1)},[e]),(0,r.useMemo)(()=>({isActive:!!e&&!n,close:i}),[e,n,i])}();return(0,s.jsx)(f.Provider,{value:t,children:e})}function g(){const e=(0,r.useContext)(f);if(!e)throw new i.dV("AnnouncementBarProvider");return e}},5062:(e,t,n)=>{"use strict";n.d(t,{$:()=>i});var r=n(6540),o=n(6347),a=n(9532);function i(e){const t=(0,o.zy)(),n=(0,a.ZC)(t),i=(0,a._q)(e);(0,r.useEffect)(()=>{n&&t!==n&&i({location:t,previousLocation:n})},[i,t,n])}},5260:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});n(6540);var r=n(545),o=n(4848);function a(e){return(0,o.jsx)(r.mg,{...e})}},5293:(e,t,n)=>{"use strict";n.d(t,{G:()=>w,a:()=>v});var r=n(6540),o=n(9532),a=n(679),i=n(6342),l=n(4848);function s(){return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}function c(e){return function(e,t){const n=window.matchMedia(e);return n.addEventListener("change",t),()=>n.removeEventListener("change",t)}("(prefers-color-scheme: dark)",()=>e(s()))}const u=r.createContext(void 0),d=(0,a.Wf)("theme"),p="system",f=e=>"dark"===e?"dark":"light",m=e=>null===e||e===p?null:f(e),g={get:()=>f(document.documentElement.getAttribute("data-theme")),set:e=>{document.documentElement.setAttribute("data-theme",f(e))}},h={get:()=>m(document.documentElement.getAttribute("data-theme-choice")),set:e=>{document.documentElement.setAttribute("data-theme-choice",m(e)??p)}},y=e=>{null===e?d.del():d.set(f(e))};function b(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,i.p)(),{colorMode:o,setColorModeState:a,colorModeChoice:l,setColorModeChoiceState:u}=function(){const{colorMode:{defaultMode:e}}=(0,i.p)(),[t,n]=(0,r.useState)(e),[o,a]=(0,r.useState)(null);return(0,r.useEffect)(()=>{n(g.get()),a(h.get())},[]),{colorMode:t,setColorModeState:n,colorModeChoice:o,setColorModeChoiceState:a}}();(0,r.useEffect)(()=>{t&&d.del()},[t]);const p=(0,r.useCallback)((t,r={})=>{const{persist:o=!0}=r;if(null===t){const t=n?s():e;g.set(t),a(t),h.set(null),u(null)}else g.set(t),h.set(t),a(t),u(t);o&&y(t)},[a,u,n,e]);return(0,r.useEffect)(()=>d.listen(e=>{p(m(e.newValue))}),[p]),(0,r.useEffect)(()=>{if(null===l&&n)return c(e=>{a(e),g.set(e)})},[n,l,a]),(0,r.useMemo)(()=>({colorMode:o,colorModeChoice:l,setColorMode:p,get isDarkTheme(){return"dark"===o},setLightTheme(){p("light")},setDarkTheme(){p("dark")}}),[o,l,p])}function v({children:e}){const t=b();return(0,l.jsx)(u.Provider,{value:t,children:e})}function w(){const e=(0,r.useContext)(u);if(null==e)throw new o.dV("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},5302:(e,t,n)=>{var r=n(4634);e.exports=g,e.exports.parse=a,e.exports.compile=function(e,t){return c(a(e,t),t)},e.exports.tokensToFunction=c,e.exports.tokensToRegExp=m;var o=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function a(e,t){for(var n,r=[],a=0,l=0,s="",c=t&&t.delimiter||"/";null!=(n=o.exec(e));){var u=n[0],p=n[1],f=n.index;if(s+=e.slice(l,f),l=f+u.length,p)s+=p[1];else{var m=e[l],g=n[2],h=n[3],y=n[4],b=n[5],v=n[6],w=n[7];s&&(r.push(s),s="");var k=null!=g&&null!=m&&m!==g,S="+"===v||"*"===v,x="?"===v||"*"===v,E=g||c,_=y||b,C=g||("string"==typeof r[r.length-1]?r[r.length-1]:"");r.push({name:h||a++,prefix:g||"",delimiter:E,optional:x,repeat:S,partial:k,asterisk:!!w,pattern:_?d(_):w?".*":i(E,C)})}}return l<e.length&&(s+=e.substr(l)),s&&r.push(s),r}function i(e,t){return!t||t.indexOf(e)>-1?"[^"+u(e)+"]+?":u(t)+"|(?:(?!"+u(t)+")[^"+u(e)+"])+?"}function l(e){return encodeURI(e).replace(/[\/?#]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})}function s(e){return encodeURI(e).replace(/[?#]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})}function c(e,t){for(var n=new Array(e.length),o=0;o<e.length;o++)"object"==typeof e[o]&&(n[o]=new RegExp("^(?:"+e[o].pattern+")$",f(t)));return function(t,o){for(var a="",i=t||{},c=(o||{}).pretty?l:encodeURIComponent,u=0;u<e.length;u++){var d=e[u];if("string"!=typeof d){var p,f=i[d.name];if(null==f){if(d.optional){d.partial&&(a+=d.prefix);continue}throw new TypeError('Expected "'+d.name+'" to be defined')}if(r(f)){if(!d.repeat)throw new TypeError('Expected "'+d.name+'" to not repeat, but received `'+JSON.stringify(f)+"`");if(0===f.length){if(d.optional)continue;throw new TypeError('Expected "'+d.name+'" to not be empty')}for(var m=0;m<f.length;m++){if(p=c(f[m]),!n[u].test(p))throw new TypeError('Expected all "'+d.name+'" to match "'+d.pattern+'", but received `'+JSON.stringify(p)+"`");a+=(0===m?d.prefix:d.delimiter)+p}}else{if(p=d.asterisk?s(f):c(f),!n[u].test(p))throw new TypeError('Expected "'+d.name+'" to match "'+d.pattern+'", but received "'+p+'"');a+=d.prefix+p}}else a+=d}return a}}function u(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function d(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function p(e,t){return e.keys=t,e}function f(e){return e&&e.sensitive?"":"i"}function m(e,t,n){r(t)||(n=t||n,t=[]);for(var o=(n=n||{}).strict,a=!1!==n.end,i="",l=0;l<e.length;l++){var s=e[l];if("string"==typeof s)i+=u(s);else{var c=u(s.prefix),d="(?:"+s.pattern+")";t.push(s),s.repeat&&(d+="(?:"+c+d+")*"),i+=d=s.optional?s.partial?c+"("+d+")?":"(?:"+c+"("+d+"))?":c+"("+d+")"}}var m=u(n.delimiter||"/"),g=i.slice(-m.length)===m;return o||(i=(g?i.slice(0,-m.length):i)+"(?:"+m+"(?=$))?"),i+=a?"$":o&&g?"":"(?="+m+"|$)",p(new RegExp("^"+i,f(n)),t)}function g(e,t,n){return r(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp?function(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.length;r++)t.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return p(e,t)}(e,t):r(e)?function(e,t,n){for(var r=[],o=0;o<e.length;o++)r.push(g(e[o],t,n).source);return p(new RegExp("(?:"+r.join("|")+")",f(n)),t)}(e,t,n):function(e,t,n){return m(a(e,n),t,n)}(e,t,n)}},5338:(e,t,n)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(1247)},5500:(e,t,n)=>{"use strict";n.d(t,{Jx:()=>y,be:()=>m,e3:()=>h});var r=n(6540),o=n(4164),a=n(5260),i=n(6803),l=n(6025),s=n(4563),c=n(4848);function u({title:e}){const t=(0,s.s$)().format(e);return(0,c.jsxs)(a.A,{children:[(0,c.jsx)("title",{children:t}),(0,c.jsx)("meta",{property:"og:title",content:t})]})}function d({description:e}){return(0,c.jsxs)(a.A,{children:[(0,c.jsx)("meta",{name:"description",content:e}),(0,c.jsx)("meta",{property:"og:description",content:e})]})}function p({image:e}){const{withBaseUrl:t}=(0,l.hH)(),n=t(e,{absolute:!0});return(0,c.jsxs)(a.A,{children:[(0,c.jsx)("meta",{property:"og:image",content:n}),(0,c.jsx)("meta",{name:"twitter:image",content:n})]})}function f({keywords:e}){return(0,c.jsx)(a.A,{children:(0,c.jsx)("meta",{name:"keywords",content:Array.isArray(e)?e.join(","):e})})}function m({title:e,description:t,keywords:n,image:r,children:o}){return(0,c.jsxs)(c.Fragment,{children:[e&&(0,c.jsx)(u,{title:e}),t&&(0,c.jsx)(d,{description:t}),n&&(0,c.jsx)(f,{keywords:n}),r&&(0,c.jsx)(p,{image:r}),o&&(0,c.jsx)(a.A,{children:o})]})}const g=r.createContext(void 0);function h({className:e,children:t}){const n=r.useContext(g),i=(0,o.A)(n,e);return(0,c.jsxs)(g.Provider,{value:i,children:[(0,c.jsx)(a.A,{children:(0,c.jsx)("html",{className:i})}),t]})}function y({children:e}){const t=(0,i.A)(),n=`plugin-${t.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const r=`plugin-id-${t.plugin.id}`;return(0,c.jsx)(h,{className:(0,o.A)(n,r),children:e})}},5556:(e,t,n)=>{e.exports=n(2694)()},5600:(e,t,n)=>{"use strict";n.d(t,{GX:()=>c,YL:()=>s,y_:()=>l});var r=n(6540),o=n(9532),a=n(4848);const i=r.createContext(null);function l({children:e}){const t=(0,r.useState)({component:null,props:null});return(0,a.jsx)(i.Provider,{value:t,children:e})}function s(){const e=(0,r.useContext)(i);if(!e)throw new o.dV("NavbarSecondaryMenuContentProvider");return e[0]}function c({component:e,props:t}){const n=(0,r.useContext)(i);if(!n)throw new o.dV("NavbarSecondaryMenuContentProvider");const[,a]=n,l=(0,o.Be)(t);return(0,r.useEffect)(()=>{a({component:e,props:l})},[a,e,l]),(0,r.useEffect)(()=>()=>a({component:null,props:null}),[a]),null}},5947:function(e,t,n){var r,o;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'};function o(e,t,n){return e<t?t:e>n?n:e}function a(e){return 100*(-1+e)}function i(e,t,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+a(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+a(e)+"%,0)"}:{"margin-left":a(e)+"%"}).transition="all "+t+"ms "+n,o}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=o(e,r.minimum,1),n.status=1===e?null:e;var a=n.render(!t),c=a.querySelector(r.barSelector),u=r.speed,d=r.easing;return a.offsetWidth,l(function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(c,i(e,u,d)),1===e?(s(a,{transition:"none",opacity:1}),a.offsetWidth,setTimeout(function(){s(a,{transition:"all "+u+"ms linear",opacity:0}),setTimeout(function(){n.remove(),t()},u)},u)):setTimeout(t,u)}),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout(function(){n.status&&(n.trickle(),e())},r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*o(Math.random()*t,.1,.95)),t=o(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always(function(){0===--t?(e=0,n.done()):n.set((e-t)/e)}),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var o,i=t.querySelector(r.barSelector),l=e?"-100":a(n.status||0),c=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(o=t.querySelector(r.spinnerSelector))&&f(o),c!=document.body&&u(c,"nprogress-custom-parent"),c.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&f(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,function(e,t){return t.toUpperCase()})}function r(t){var n=document.body.style;if(t in n)return t;for(var r,o=e.length,a=t.charAt(0).toUpperCase()+t.slice(1);o--;)if((r=e[o]+a)in n)return r;return t}function o(e){return e=n(e),t[e]||(t[e]=r(e))}function a(e,t,n){t=o(t),e.style[t]=n}return function(e,t){var n,r,o=arguments;if(2==o.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&a(e,n,r);else a(e,o[1],o[2])}}();function c(e,t){return("string"==typeof e?e:p(e)).indexOf(" "+t+" ")>=0}function u(e,t){var n=p(e),r=n+t;c(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=p(e);c(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function p(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function f(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(o="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=o)},6025:(e,t,n)=>{"use strict";n.d(t,{Ay:()=>l,hH:()=>i});var r=n(6540),o=n(4586),a=n(6654);function i(){const{siteConfig:e}=(0,o.A)(),{baseUrl:t,url:n}=e,i=e.future.experimental_router,l=(0,r.useCallback)((e,r)=>function({siteUrl:e,baseUrl:t,url:n,options:{forcePrependBaseUrl:r=!1,absolute:o=!1}={},router:i}){if(!n||n.startsWith("#")||(0,a.z)(n))return n;if("hash"===i)return n.startsWith("/")?`.${n}`:`./${n}`;if(r)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const l=n.startsWith(t)?n:t+n.replace(/^\//,"");return o?e+l:l}({siteUrl:n,baseUrl:t,url:e,options:r,router:i}),[n,t,i]);return{withBaseUrl:l}}function l(e,t={}){const{withBaseUrl:n}=i();return n(e,t)}},6125:(e,t,n)=>{"use strict";n.d(t,{o:()=>a,x:()=>i});var r=n(6540),o=n(4848);const a=r.createContext(!1);function i({children:e}){const[t,n]=(0,r.useState)(!1);return(0,r.useEffect)(()=>{n(!0)},[]),(0,o.jsx)(a.Provider,{value:t,children:e})}},6134:(e,t,n)=>{"use strict";var r=n(1765),o=n(4784);!function(e){const{themeConfig:{prism:t}}=o.default,{additionalLanguages:r}=t,a=globalThis.Prism;globalThis.Prism=e,r.forEach(e=>{"php"===e&&n(9700),n(8692)(`./prism-${e}`)}),delete globalThis.Prism,void 0!==a&&(globalThis.Prism=e)}(r.My)},6221:(e,t,n)=>{"use strict";var r=n(6540);function o(e){var t="https://react.dev/errors/"+e;if(1<arguments.length){t+="?args[]="+encodeURIComponent(arguments[1]);for(var n=2;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n])}return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function a(){}var i={d:{f:a,r:function(){throw Error(o(522))},D:a,C:a,L:a,m:a,X:a,S:a,M:a},p:0,findDOMNode:null},l=Symbol.for("react.portal");var s=r.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function c(e,t){return"font"===e?"":"string"==typeof t?"use-credentials"===t?t:"":void 0}t.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=i,t.createPortal=function(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!t||1!==t.nodeType&&9!==t.nodeType&&11!==t.nodeType)throw Error(o(299));return function(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:l,key:null==r?null:""+r,children:e,containerInfo:t,implementation:n}}(e,t,null,n)},t.flushSync=function(e){var t=s.T,n=i.p;try{if(s.T=null,i.p=2,e)return e()}finally{s.T=t,i.p=n,i.d.f()}},t.preconnect=function(e,t){"string"==typeof e&&(t?t="string"==typeof(t=t.crossOrigin)?"use-credentials"===t?t:"":void 0:t=null,i.d.C(e,t))},t.prefetchDNS=function(e){"string"==typeof e&&i.d.D(e)},t.preinit=function(e,t){if("string"==typeof e&&t&&"string"==typeof t.as){var n=t.as,r=c(n,t.crossOrigin),o="string"==typeof t.integrity?t.integrity:void 0,a="string"==typeof t.fetchPriority?t.fetchPriority:void 0;"style"===n?i.d.S(e,"string"==typeof t.precedence?t.precedence:void 0,{crossOrigin:r,integrity:o,fetchPriority:a}):"script"===n&&i.d.X(e,{crossOrigin:r,integrity:o,fetchPriority:a,nonce:"string"==typeof t.nonce?t.nonce:void 0})}},t.preinitModule=function(e,t){if("string"==typeof e)if("object"==typeof t&&null!==t){if(null==t.as||"script"===t.as){var n=c(t.as,t.crossOrigin);i.d.M(e,{crossOrigin:n,integrity:"string"==typeof t.integrity?t.integrity:void 0,nonce:"string"==typeof t.nonce?t.nonce:void 0})}}else null==t&&i.d.M(e)},t.preload=function(e,t){if("string"==typeof e&&"object"==typeof t&&null!==t&&"string"==typeof t.as){var n=t.as,r=c(n,t.crossOrigin);i.d.L(e,n,{crossOrigin:r,integrity:"string"==typeof t.integrity?t.integrity:void 0,nonce:"string"==typeof t.nonce?t.nonce:void 0,type:"string"==typeof t.type?t.type:void 0,fetchPriority:"string"==typeof t.fetchPriority?t.fetchPriority:void 0,referrerPolicy:"string"==typeof t.referrerPolicy?t.referrerPolicy:void 0,imageSrcSet:"string"==typeof t.imageSrcSet?t.imageSrcSet:void 0,imageSizes:"string"==typeof t.imageSizes?t.imageSizes:void 0,media:"string"==typeof t.media?t.media:void 0})}},t.preloadModule=function(e,t){if("string"==typeof e)if(t){var n=c(t.as,t.crossOrigin);i.d.m(e,{as:"string"==typeof t.as&&"script"!==t.as?t.as:void 0,crossOrigin:n,integrity:"string"==typeof t.integrity?t.integrity:void 0})}else i.d.m(e)},t.requestFormReset=function(e){i.d.r(e)},t.unstable_batchedUpdates=function(e,t){return e(t)},t.useFormState=function(e,t,n){return s.H.useFormState(e,t,n)},t.useFormStatus=function(){return s.H.useHostTransitionStatus()},t.version="19.1.1"},6294:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(5947),o=n.n(r);o().configure({showSpinner:!1});const a={onRouteUpdate({location:e,previousLocation:t}){if(t&&e.pathname!==t.pathname){const e=window.setTimeout(()=>{o().start()},200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){o().done()}}},6342:(e,t,n)=>{"use strict";n.d(t,{p:()=>o});var r=n(4586);function o(){return(0,r.A)().siteConfig.themeConfig}},6347:(e,t,n)=>{"use strict";n.d(t,{B6:()=>x,Ix:()=>v,W6:()=>L,XZ:()=>b,dO:()=>P,qh:()=>E,zy:()=>O});var r=n(2892),o=n(6540),a=n(5556),i=n.n(a),l=n(1513),s=n(1561),c=n(8168),u=n(5302),d=n.n(u),p=(n(4363),n(8587)),f=(n(4146),1073741823),m="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:{};var g=o.createContext||function(e,t){var n,a,l="__create-react-context-"+function(){var e="__global_unique_id__";return m[e]=(m[e]||0)+1}()+"__",s=function(e){function n(){for(var t,n,r,o=arguments.length,a=new Array(o),i=0;i<o;i++)a[i]=arguments[i];return(t=e.call.apply(e,[this].concat(a))||this).emitter=(n=t.props.value,r=[],{on:function(e){r.push(e)},off:function(e){r=r.filter(function(t){return t!==e})},get:function(){return n},set:function(e,t){n=e,r.forEach(function(e){return e(n,t)})}}),t}(0,r.A)(n,e);var o=n.prototype;return o.getChildContext=function(){var e;return(e={})[l]=this.emitter,e},o.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var n,r=this.props.value,o=e.value;((a=r)===(i=o)?0!==a||1/a==1/i:a!=a&&i!=i)?n=0:(n="function"==typeof t?t(r,o):f,0!==(n|=0)&&this.emitter.set(e.value,n))}var a,i},o.render=function(){return this.props.children},n}(o.Component);s.childContextTypes=((n={})[l]=i().object.isRequired,n);var c=function(t){function n(){for(var e,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(e=t.call.apply(t,[this].concat(r))||this).observedBits=void 0,e.state={value:e.getValue()},e.onUpdate=function(t,n){0!==((0|e.observedBits)&n)&&e.setState({value:e.getValue()})},e}(0,r.A)(n,t);var o=n.prototype;return o.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=null==t?f:t},o.componentDidMount=function(){this.context[l]&&this.context[l].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=null==e?f:e},o.componentWillUnmount=function(){this.context[l]&&this.context[l].off(this.onUpdate)},o.getValue=function(){return this.context[l]?this.context[l].get():e},o.render=function(){return(e=this.props.children,Array.isArray(e)?e[0]:e)(this.state.value);var e},n}(o.Component);return c.contextTypes=((a={})[l]=i().object,a),{Provider:s,Consumer:c}},h=function(e){var t=g();return t.displayName=e,t},y=h("Router-History"),b=h("Router"),v=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={location:t.history.location},n._isMounted=!1,n._pendingLocation=null,t.staticContext||(n.unlisten=t.history.listen(function(e){n._pendingLocation=e})),n}(0,r.A)(t,e),t.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var n=t.prototype;return n.componentDidMount=function(){var e=this;this._isMounted=!0,this.unlisten&&this.unlisten(),this.props.staticContext||(this.unlisten=this.props.history.listen(function(t){e._isMounted&&e.setState({location:t})})),this._pendingLocation&&this.setState({location:this._pendingLocation})},n.componentWillUnmount=function(){this.unlisten&&(this.unlisten(),this._isMounted=!1,this._pendingLocation=null)},n.render=function(){return o.createElement(b.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},o.createElement(y.Provider,{children:this.props.children||null,value:this.props.history}))},t}(o.Component);o.Component;o.Component;var w={},k=1e4,S=0;function x(e,t){void 0===t&&(t={}),("string"==typeof t||Array.isArray(t))&&(t={path:t});var n=t,r=n.path,o=n.exact,a=void 0!==o&&o,i=n.strict,l=void 0!==i&&i,s=n.sensitive,c=void 0!==s&&s;return[].concat(r).reduce(function(t,n){if(!n&&""!==n)return null;if(t)return t;var r=function(e,t){var n=""+t.end+t.strict+t.sensitive,r=w[n]||(w[n]={});if(r[e])return r[e];var o=[],a={regexp:d()(e,o,t),keys:o};return S<k&&(r[e]=a,S++),a}(n,{end:a,strict:l,sensitive:c}),o=r.regexp,i=r.keys,s=o.exec(e);if(!s)return null;var u=s[0],p=s.slice(1),f=e===u;return a&&!f?null:{path:n,url:"/"===n&&""===u?"/":u,isExact:f,params:i.reduce(function(e,t,n){return e[t.name]=p[n],e},{})}},null)}var E=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.A)(t,e),t.prototype.render=function(){var e=this;return o.createElement(b.Consumer,null,function(t){t||(0,s.A)(!1);var n=e.props.location||t.location,r=e.props.computedMatch?e.props.computedMatch:e.props.path?x(n.pathname,e.props):t.match,a=(0,c.A)({},t,{location:n,match:r}),i=e.props,l=i.children,u=i.component,d=i.render;return Array.isArray(l)&&function(e){return 0===o.Children.count(e)}(l)&&(l=null),o.createElement(b.Provider,{value:a},a.match?l?"function"==typeof l?l(a):l:u?o.createElement(u,a):d?d(a):null:"function"==typeof l?l(a):null)})},t}(o.Component);function _(e){return"/"===e.charAt(0)?e:"/"+e}function C(e,t){if(!e)return t;var n=_(e);return 0!==t.pathname.indexOf(n)?t:(0,c.A)({},t,{pathname:t.pathname.substr(n.length)})}function A(e){return"string"==typeof e?e:(0,l.AO)(e)}function T(e){return function(){(0,s.A)(!1)}}function j(){}o.Component;var P=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.A)(t,e),t.prototype.render=function(){var e=this;return o.createElement(b.Consumer,null,function(t){t||(0,s.A)(!1);var n,r,a=e.props.location||t.location;return o.Children.forEach(e.props.children,function(e){if(null==r&&o.isValidElement(e)){n=e;var i=e.props.path||e.props.from;r=i?x(a.pathname,(0,c.A)({},e.props,{path:i})):t.match}}),r?o.cloneElement(n,{location:a,computedMatch:r}):null})},t}(o.Component);var N=o.useContext;function L(){return N(y)}function O(){return N(b).location}},6540:(e,t,n)=>{"use strict";e.exports=n(9869)},6654:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!r(e)}n.d(t,{A:()=>o,z:()=>r})},6803:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var r=n(6540),o=n(3102);function a(){const e=r.useContext(o.o);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}},6921:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function o(e){const t={};return function e(n,o){Object.entries(n).forEach(([n,a])=>{const i=o?`${o}.${n}`:n;r(a)?e(a,i):t[i]=a})}(e),t}},6925:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},6969:e=>{e.exports&&(e.exports={core:{meta:{path:"components/prism-core.js",option:"mandatory"},core:"Core"},themes:{meta:{path:"themes/{id}.css",link:"index.html?theme={id}",exclusive:!0},prism:{title:"Default",option:"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{title:"Okaidia",owner:"ocodia"},"prism-twilight":{title:"Twilight",owner:"remybach"},"prism-coy":{title:"Coy",owner:"tshedor"},"prism-solarizedlight":{title:"Solarized Light",owner:"hectormatos2011 "},"prism-tomorrow":{title:"Tomorrow Night",owner:"Rosey"}},languages:{meta:{path:"components/prism-{id}",noCSS:!0,examplesPath:"examples/prism-{id}",addCheckAll:!0},markup:{title:"Markup",alias:["html","xml","svg","mathml","ssml","atom","rss"],aliasTitles:{html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",atom:"Atom",rss:"RSS"},option:"default"},css:{title:"CSS",option:"default",modify:"markup"},clike:{title:"C-like",option:"default"},javascript:{title:"JavaScript",require:"clike",modify:"markup",optional:"regex",alias:"js",option:"default"},abap:{title:"ABAP",owner:"dellagustin"},abnf:{title:"ABNF",owner:"RunDevelopment"},actionscript:{title:"ActionScript",require:"javascript",modify:"markup",owner:"Golmote"},ada:{title:"Ada",owner:"Lucretia"},agda:{title:"Agda",owner:"xy-ren"},al:{title:"AL",owner:"RunDevelopment"},antlr4:{title:"ANTLR4",alias:"g4",owner:"RunDevelopment"},apacheconf:{title:"Apache Configuration",owner:"GuiTeK"},apex:{title:"Apex",require:["clike","sql"],owner:"RunDevelopment"},apl:{title:"APL",owner:"ngn"},applescript:{title:"AppleScript",owner:"Golmote"},aql:{title:"AQL",owner:"RunDevelopment"},arduino:{title:"Arduino",require:"cpp",alias:"ino",owner:"dkern"},arff:{title:"ARFF",owner:"Golmote"},armasm:{title:"ARM Assembly",alias:"arm-asm",owner:"RunDevelopment"},arturo:{title:"Arturo",alias:"art",optional:["bash","css","javascript","markup","markdown","sql"],owner:"drkameleon"},asciidoc:{alias:"adoc",title:"AsciiDoc",owner:"Golmote"},aspnet:{title:"ASP.NET (C#)",require:["markup","csharp"],owner:"nauzilus"},asm6502:{title:"6502 Assembly",owner:"kzurawel"},asmatmel:{title:"Atmel AVR Assembly",owner:"cerkit"},autohotkey:{title:"AutoHotkey",owner:"aviaryan"},autoit:{title:"AutoIt",owner:"Golmote"},avisynth:{title:"AviSynth",alias:"avs",owner:"Zinfidel"},"avro-idl":{title:"Avro IDL",alias:"avdl",owner:"RunDevelopment"},awk:{title:"AWK",alias:"gawk",aliasTitles:{gawk:"GAWK"},owner:"RunDevelopment"},bash:{title:"Bash",alias:["sh","shell"],aliasTitles:{sh:"Shell",shell:"Shell"},owner:"zeitgeist87"},basic:{title:"BASIC",owner:"Golmote"},batch:{title:"Batch",owner:"Golmote"},bbcode:{title:"BBcode",alias:"shortcode",aliasTitles:{shortcode:"Shortcode"},owner:"RunDevelopment"},bbj:{title:"BBj",owner:"hyyan"},bicep:{title:"Bicep",owner:"johnnyreilly"},birb:{title:"Birb",require:"clike",owner:"Calamity210"},bison:{title:"Bison",require:"c",owner:"Golmote"},bnf:{title:"BNF",alias:"rbnf",aliasTitles:{rbnf:"RBNF"},owner:"RunDevelopment"},bqn:{title:"BQN",owner:"yewscion"},brainfuck:{title:"Brainfuck",owner:"Golmote"},brightscript:{title:"BrightScript",owner:"RunDevelopment"},bro:{title:"Bro",owner:"wayward710"},bsl:{title:"BSL (1C:Enterprise)",alias:"oscript",aliasTitles:{oscript:"OneScript"},owner:"Diversus23"},c:{title:"C",require:"clike",owner:"zeitgeist87"},csharp:{title:"C#",require:"clike",alias:["cs","dotnet"],owner:"mvalipour"},cpp:{title:"C++",require:"c",owner:"zeitgeist87"},cfscript:{title:"CFScript",require:"clike",alias:"cfc",owner:"mjclemente"},chaiscript:{title:"ChaiScript",require:["clike","cpp"],owner:"RunDevelopment"},cil:{title:"CIL",owner:"sbrl"},cilkc:{title:"Cilk/C",require:"c",alias:"cilk-c",owner:"OpenCilk"},cilkcpp:{title:"Cilk/C++",require:"cpp",alias:["cilk-cpp","cilk"],owner:"OpenCilk"},clojure:{title:"Clojure",owner:"troglotit"},cmake:{title:"CMake",owner:"mjrogozinski"},cobol:{title:"COBOL",owner:"RunDevelopment"},coffeescript:{title:"CoffeeScript",require:"javascript",alias:"coffee",owner:"R-osey"},concurnas:{title:"Concurnas",alias:"conc",owner:"jasontatton"},csp:{title:"Content-Security-Policy",owner:"ScottHelme"},cooklang:{title:"Cooklang",owner:"ahue"},coq:{title:"Coq",owner:"RunDevelopment"},crystal:{title:"Crystal",require:"ruby",owner:"MakeNowJust"},"css-extras":{title:"CSS Extras",require:"css",modify:"css",owner:"milesj"},csv:{title:"CSV",owner:"RunDevelopment"},cue:{title:"CUE",owner:"RunDevelopment"},cypher:{title:"Cypher",owner:"RunDevelopment"},d:{title:"D",require:"clike",owner:"Golmote"},dart:{title:"Dart",require:"clike",owner:"Golmote"},dataweave:{title:"DataWeave",owner:"machaval"},dax:{title:"DAX",owner:"peterbud"},dhall:{title:"Dhall",owner:"RunDevelopment"},diff:{title:"Diff",owner:"uranusjr"},django:{title:"Django/Jinja2",require:"markup-templating",alias:"jinja2",owner:"romanvm"},"dns-zone-file":{title:"DNS zone file",owner:"RunDevelopment",alias:"dns-zone"},docker:{title:"Docker",alias:"dockerfile",owner:"JustinBeckwith"},dot:{title:"DOT (Graphviz)",alias:"gv",optional:"markup",owner:"RunDevelopment"},ebnf:{title:"EBNF",owner:"RunDevelopment"},editorconfig:{title:"EditorConfig",owner:"osipxd"},eiffel:{title:"Eiffel",owner:"Conaclos"},ejs:{title:"EJS",require:["javascript","markup-templating"],owner:"RunDevelopment",alias:"eta",aliasTitles:{eta:"Eta"}},elixir:{title:"Elixir",owner:"Golmote"},elm:{title:"Elm",owner:"zwilias"},etlua:{title:"Embedded Lua templating",require:["lua","markup-templating"],owner:"RunDevelopment"},erb:{title:"ERB",require:["ruby","markup-templating"],owner:"Golmote"},erlang:{title:"Erlang",owner:"Golmote"},"excel-formula":{title:"Excel Formula",alias:["xlsx","xls"],owner:"RunDevelopment"},fsharp:{title:"F#",require:"clike",owner:"simonreynolds7"},factor:{title:"Factor",owner:"catb0t"},false:{title:"False",owner:"edukisto"},"firestore-security-rules":{title:"Firestore security rules",require:"clike",owner:"RunDevelopment"},flow:{title:"Flow",require:"javascript",owner:"Golmote"},fortran:{title:"Fortran",owner:"Golmote"},ftl:{title:"FreeMarker Template Language",require:"markup-templating",owner:"RunDevelopment"},gml:{title:"GameMaker Language",alias:"gamemakerlanguage",require:"clike",owner:"LiarOnce"},gap:{title:"GAP (CAS)",owner:"RunDevelopment"},gcode:{title:"G-code",owner:"RunDevelopment"},gdscript:{title:"GDScript",owner:"RunDevelopment"},gedcom:{title:"GEDCOM",owner:"Golmote"},gettext:{title:"gettext",alias:"po",owner:"RunDevelopment"},gherkin:{title:"Gherkin",owner:"hason"},git:{title:"Git",owner:"lgiraudel"},glsl:{title:"GLSL",require:"c",owner:"Golmote"},gn:{title:"GN",alias:"gni",owner:"RunDevelopment"},"linker-script":{title:"GNU Linker Script",alias:"ld",owner:"RunDevelopment"},go:{title:"Go",require:"clike",owner:"arnehormann"},"go-module":{title:"Go module",alias:"go-mod",owner:"RunDevelopment"},gradle:{title:"Gradle",require:"clike",owner:"zeabdelkhalek-badido18"},graphql:{title:"GraphQL",optional:"markdown",owner:"Golmote"},groovy:{title:"Groovy",require:"clike",owner:"robfletcher"},haml:{title:"Haml",require:"ruby",optional:["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],owner:"Golmote"},handlebars:{title:"Handlebars",require:"markup-templating",alias:["hbs","mustache"],aliasTitles:{mustache:"Mustache"},owner:"Golmote"},haskell:{title:"Haskell",alias:"hs",owner:"bholst"},haxe:{title:"Haxe",require:"clike",optional:"regex",owner:"Golmote"},hcl:{title:"HCL",owner:"outsideris"},hlsl:{title:"HLSL",require:"c",owner:"RunDevelopment"},hoon:{title:"Hoon",owner:"matildepark"},http:{title:"HTTP",optional:["csp","css","hpkp","hsts","javascript","json","markup","uri"],owner:"danielgtaylor"},hpkp:{title:"HTTP Public-Key-Pins",owner:"ScottHelme"},hsts:{title:"HTTP Strict-Transport-Security",owner:"ScottHelme"},ichigojam:{title:"IchigoJam",owner:"BlueCocoa"},icon:{title:"Icon",owner:"Golmote"},"icu-message-format":{title:"ICU Message Format",owner:"RunDevelopment"},idris:{title:"Idris",alias:"idr",owner:"KeenS",require:"haskell"},ignore:{title:".ignore",owner:"osipxd",alias:["gitignore","hgignore","npmignore"],aliasTitles:{gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore"}},inform7:{title:"Inform 7",owner:"Golmote"},ini:{title:"Ini",owner:"aviaryan"},io:{title:"Io",owner:"AlesTsurko"},j:{title:"J",owner:"Golmote"},java:{title:"Java",require:"clike",owner:"sherblot"},javadoc:{title:"JavaDoc",require:["markup","java","javadoclike"],modify:"java",optional:"scala",owner:"RunDevelopment"},javadoclike:{title:"JavaDoc-like",modify:["java","javascript","php"],owner:"RunDevelopment"},javastacktrace:{title:"Java stack trace",owner:"RunDevelopment"},jexl:{title:"Jexl",owner:"czosel"},jolie:{title:"Jolie",require:"clike",owner:"thesave"},jq:{title:"JQ",owner:"RunDevelopment"},jsdoc:{title:"JSDoc",require:["javascript","javadoclike","typescript"],modify:"javascript",optional:["actionscript","coffeescript"],owner:"RunDevelopment"},"js-extras":{title:"JS Extras",require:"javascript",modify:"javascript",optional:["actionscript","coffeescript","flow","n4js","typescript"],owner:"RunDevelopment"},json:{title:"JSON",alias:"webmanifest",aliasTitles:{webmanifest:"Web App Manifest"},owner:"CupOfTea696"},json5:{title:"JSON5",require:"json",owner:"RunDevelopment"},jsonp:{title:"JSONP",require:"json",owner:"RunDevelopment"},jsstacktrace:{title:"JS stack trace",owner:"sbrl"},"js-templates":{title:"JS Templates",require:"javascript",modify:"javascript",optional:["css","css-extras","graphql","markdown","markup","sql"],owner:"RunDevelopment"},julia:{title:"Julia",owner:"cdagnino"},keepalived:{title:"Keepalived Configure",owner:"dev-itsheng"},keyman:{title:"Keyman",owner:"mcdurdin"},kotlin:{title:"Kotlin",alias:["kt","kts"],aliasTitles:{kts:"Kotlin Script"},require:"clike",owner:"Golmote"},kumir:{title:"KuMir (\u041a\u0443\u041c\u0438\u0440)",alias:"kum",owner:"edukisto"},kusto:{title:"Kusto",owner:"RunDevelopment"},latex:{title:"LaTeX",alias:["tex","context"],aliasTitles:{tex:"TeX",context:"ConTeXt"},owner:"japborst"},latte:{title:"Latte",require:["clike","markup-templating","php"],owner:"nette"},less:{title:"Less",require:"css",optional:"css-extras",owner:"Golmote"},lilypond:{title:"LilyPond",require:"scheme",alias:"ly",owner:"RunDevelopment"},liquid:{title:"Liquid",require:"markup-templating",owner:"cinhtau"},lisp:{title:"Lisp",alias:["emacs","elisp","emacs-lisp"],owner:"JuanCaicedo"},livescript:{title:"LiveScript",owner:"Golmote"},llvm:{title:"LLVM IR",owner:"porglezomp"},log:{title:"Log file",optional:"javastacktrace",owner:"RunDevelopment"},lolcode:{title:"LOLCODE",owner:"Golmote"},lua:{title:"Lua",owner:"Golmote"},magma:{title:"Magma (CAS)",owner:"RunDevelopment"},makefile:{title:"Makefile",owner:"Golmote"},markdown:{title:"Markdown",require:"markup",optional:"yaml",alias:"md",owner:"Golmote"},"markup-templating":{title:"Markup templating",require:"markup",owner:"Golmote"},mata:{title:"Mata",owner:"RunDevelopment"},matlab:{title:"MATLAB",owner:"Golmote"},maxscript:{title:"MAXScript",owner:"RunDevelopment"},mel:{title:"MEL",owner:"Golmote"},mermaid:{title:"Mermaid",owner:"RunDevelopment"},metafont:{title:"METAFONT",owner:"LaeriExNihilo"},mizar:{title:"Mizar",owner:"Golmote"},mongodb:{title:"MongoDB",owner:"airs0urce",require:"javascript"},monkey:{title:"Monkey",owner:"Golmote"},moonscript:{title:"MoonScript",alias:"moon",owner:"RunDevelopment"},n1ql:{title:"N1QL",owner:"TMWilds"},n4js:{title:"N4JS",require:"javascript",optional:"jsdoc",alias:"n4jsd",owner:"bsmith-n4"},"nand2tetris-hdl":{title:"Nand To Tetris HDL",owner:"stephanmax"},naniscript:{title:"Naninovel Script",owner:"Elringus",alias:"nani"},nasm:{title:"NASM",owner:"rbmj"},neon:{title:"NEON",owner:"nette"},nevod:{title:"Nevod",owner:"nezaboodka"},nginx:{title:"nginx",owner:"volado"},nim:{title:"Nim",owner:"Golmote"},nix:{title:"Nix",owner:"Golmote"},nsis:{title:"NSIS",owner:"idleberg"},objectivec:{title:"Objective-C",require:"c",alias:"objc",owner:"uranusjr"},ocaml:{title:"OCaml",owner:"Golmote"},odin:{title:"Odin",owner:"edukisto"},opencl:{title:"OpenCL",require:"c",modify:["c","cpp"],owner:"Milania1"},openqasm:{title:"OpenQasm",alias:"qasm",owner:"RunDevelopment"},oz:{title:"Oz",owner:"Golmote"},parigp:{title:"PARI/GP",owner:"Golmote"},parser:{title:"Parser",require:"markup",owner:"Golmote"},pascal:{title:"Pascal",alias:"objectpascal",aliasTitles:{objectpascal:"Object Pascal"},owner:"Golmote"},pascaligo:{title:"Pascaligo",owner:"DefinitelyNotAGoat"},psl:{title:"PATROL Scripting Language",owner:"bertysentry"},pcaxis:{title:"PC-Axis",alias:"px",owner:"RunDevelopment"},peoplecode:{title:"PeopleCode",alias:"pcode",owner:"RunDevelopment"},perl:{title:"Perl",owner:"Golmote"},php:{title:"PHP",require:"markup-templating",owner:"milesj"},phpdoc:{title:"PHPDoc",require:["php","javadoclike"],modify:"php",owner:"RunDevelopment"},"php-extras":{title:"PHP Extras",require:"php",modify:"php",owner:"milesj"},"plant-uml":{title:"PlantUML",alias:"plantuml",owner:"RunDevelopment"},plsql:{title:"PL/SQL",require:"sql",owner:"Golmote"},powerquery:{title:"PowerQuery",alias:["pq","mscript"],owner:"peterbud"},powershell:{title:"PowerShell",owner:"nauzilus"},processing:{title:"Processing",require:"clike",owner:"Golmote"},prolog:{title:"Prolog",owner:"Golmote"},promql:{title:"PromQL",owner:"arendjr"},properties:{title:".properties",owner:"Golmote"},protobuf:{title:"Protocol Buffers",require:"clike",owner:"just-boris"},pug:{title:"Pug",require:["markup","javascript"],optional:["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],owner:"Golmote"},puppet:{title:"Puppet",owner:"Golmote"},pure:{title:"Pure",optional:["c","cpp","fortran"],owner:"Golmote"},purebasic:{title:"PureBasic",require:"clike",alias:"pbfasm",owner:"HeX0R101"},purescript:{title:"PureScript",require:"haskell",alias:"purs",owner:"sriharshachilakapati"},python:{title:"Python",alias:"py",owner:"multipetros"},qsharp:{title:"Q#",require:"clike",alias:"qs",owner:"fedonman"},q:{title:"Q (kdb+ database)",owner:"Golmote"},qml:{title:"QML",require:"javascript",owner:"RunDevelopment"},qore:{title:"Qore",require:"clike",owner:"temnroegg"},r:{title:"R",owner:"Golmote"},racket:{title:"Racket",require:"scheme",alias:"rkt",owner:"RunDevelopment"},cshtml:{title:"Razor C#",alias:"razor",require:["markup","csharp"],optional:["css","css-extras","javascript","js-extras"],owner:"RunDevelopment"},jsx:{title:"React JSX",require:["markup","javascript"],optional:["jsdoc","js-extras","js-templates"],owner:"vkbansal"},tsx:{title:"React TSX",require:["jsx","typescript"]},reason:{title:"Reason",require:"clike",owner:"Golmote"},regex:{title:"Regex",owner:"RunDevelopment"},rego:{title:"Rego",owner:"JordanSh"},renpy:{title:"Ren'py",alias:"rpy",owner:"HyuchiaDiego"},rescript:{title:"ReScript",alias:"res",owner:"vmarcosp"},rest:{title:"reST (reStructuredText)",owner:"Golmote"},rip:{title:"Rip",owner:"ravinggenius"},roboconf:{title:"Roboconf",owner:"Golmote"},robotframework:{title:"Robot Framework",alias:"robot",owner:"RunDevelopment"},ruby:{title:"Ruby",require:"clike",alias:"rb",owner:"samflores"},rust:{title:"Rust",owner:"Golmote"},sas:{title:"SAS",optional:["groovy","lua","sql"],owner:"Golmote"},sass:{title:"Sass (Sass)",require:"css",optional:"css-extras",owner:"Golmote"},scss:{title:"Sass (SCSS)",require:"css",optional:"css-extras",owner:"MoOx"},scala:{title:"Scala",require:"java",owner:"jozic"},scheme:{title:"Scheme",owner:"bacchus123"},"shell-session":{title:"Shell session",require:"bash",alias:["sh-session","shellsession"],owner:"RunDevelopment"},smali:{title:"Smali",owner:"RunDevelopment"},smalltalk:{title:"Smalltalk",owner:"Golmote"},smarty:{title:"Smarty",require:"markup-templating",optional:"php",owner:"Golmote"},sml:{title:"SML",alias:"smlnj",aliasTitles:{smlnj:"SML/NJ"},owner:"RunDevelopment"},solidity:{title:"Solidity (Ethereum)",alias:"sol",require:"clike",owner:"glachaud"},"solution-file":{title:"Solution file",alias:"sln",owner:"RunDevelopment"},soy:{title:"Soy (Closure Template)",require:"markup-templating",owner:"Golmote"},sparql:{title:"SPARQL",require:"turtle",owner:"Triply-Dev",alias:"rq"},"splunk-spl":{title:"Splunk SPL",owner:"RunDevelopment"},sqf:{title:"SQF: Status Quo Function (Arma 3)",require:"clike",owner:"RunDevelopment"},sql:{title:"SQL",owner:"multipetros"},squirrel:{title:"Squirrel",require:"clike",owner:"RunDevelopment"},stan:{title:"Stan",owner:"RunDevelopment"},stata:{title:"Stata Ado",require:["mata","java","python"],owner:"RunDevelopment"},iecst:{title:"Structured Text (IEC 61131-3)",owner:"serhioromano"},stylus:{title:"Stylus",owner:"vkbansal"},supercollider:{title:"SuperCollider",alias:"sclang",owner:"RunDevelopment"},swift:{title:"Swift",owner:"chrischares"},systemd:{title:"Systemd configuration file",owner:"RunDevelopment"},"t4-templating":{title:"T4 templating",owner:"RunDevelopment"},"t4-cs":{title:"T4 Text Templates (C#)",require:["t4-templating","csharp"],alias:"t4",owner:"RunDevelopment"},"t4-vb":{title:"T4 Text Templates (VB)",require:["t4-templating","vbnet"],owner:"RunDevelopment"},tap:{title:"TAP",owner:"isaacs",require:"yaml"},tcl:{title:"Tcl",owner:"PeterChaplin"},tt2:{title:"Template Toolkit 2",require:["clike","markup-templating"],owner:"gflohr"},textile:{title:"Textile",require:"markup",optional:"css",owner:"Golmote"},toml:{title:"TOML",owner:"RunDevelopment"},tremor:{title:"Tremor",alias:["trickle","troy"],owner:"darach",aliasTitles:{trickle:"trickle",troy:"troy"}},turtle:{title:"Turtle",alias:"trig",aliasTitles:{trig:"TriG"},owner:"jakubklimek"},twig:{title:"Twig",require:"markup-templating",owner:"brandonkelly"},typescript:{title:"TypeScript",require:"javascript",optional:"js-templates",alias:"ts",owner:"vkbansal"},typoscript:{title:"TypoScript",alias:"tsconfig",aliasTitles:{tsconfig:"TSConfig"},owner:"dkern"},unrealscript:{title:"UnrealScript",alias:["uscript","uc"],owner:"RunDevelopment"},uorazor:{title:"UO Razor Script",owner:"jaseowns"},uri:{title:"URI",alias:"url",aliasTitles:{url:"URL"},owner:"RunDevelopment"},v:{title:"V",require:"clike",owner:"taggon"},vala:{title:"Vala",require:"clike",optional:"regex",owner:"TemplarVolk"},vbnet:{title:"VB.Net",require:"basic",owner:"Bigsby"},velocity:{title:"Velocity",require:"markup",owner:"Golmote"},verilog:{title:"Verilog",owner:"a-rey"},vhdl:{title:"VHDL",owner:"a-rey"},vim:{title:"vim",owner:"westonganger"},"visual-basic":{title:"Visual Basic",alias:["vb","vba"],aliasTitles:{vba:"VBA"},owner:"Golmote"},warpscript:{title:"WarpScript",owner:"RunDevelopment"},wasm:{title:"WebAssembly",owner:"Golmote"},"web-idl":{title:"Web IDL",alias:"webidl",owner:"RunDevelopment"},wgsl:{title:"WGSL",owner:"Dr4gonthree"},wiki:{title:"Wiki markup",require:"markup",owner:"Golmote"},wolfram:{title:"Wolfram language",alias:["mathematica","nb","wl"],aliasTitles:{mathematica:"Mathematica",nb:"Mathematica Notebook"},owner:"msollami"},wren:{title:"Wren",owner:"clsource"},xeora:{title:"Xeora",require:"markup",alias:"xeoracube",aliasTitles:{xeoracube:"XeoraCube"},owner:"freakmaxi"},"xml-doc":{title:"XML doc (.net)",require:"markup",modify:["csharp","fsharp","vbnet"],owner:"RunDevelopment"},xojo:{title:"Xojo (REALbasic)",owner:"Golmote"},xquery:{title:"XQuery",require:"markup",owner:"Golmote"},yaml:{title:"YAML",alias:"yml",owner:"hason"},yang:{title:"YANG",owner:"RunDevelopment"},zig:{title:"Zig",owner:"RunDevelopment"}},plugins:{meta:{path:"plugins/{id}/prism-{id}",link:"plugins/{id}/"},"line-highlight":{title:"Line Highlight",description:"Highlights specific lines and/or line ranges."},"line-numbers":{title:"Line Numbers",description:"Line number at the beginning of code lines.",owner:"kuba-kubula"},"show-invisibles":{title:"Show Invisibles",description:"Show hidden characters such as tabs and line breaks.",optional:["autolinker","data-uri-highlight"]},autolinker:{title:"Autolinker",description:"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},wpd:{title:"WebPlatform Docs",description:'Makes tokens link to <a href="https://webplatform.github.io/docs/">WebPlatform.org documentation</a>. The links open in a new tab.'},"custom-class":{title:"Custom Class",description:"This plugin allows you to prefix Prism's default classes (<code>.comment</code> can become <code>.namespace--comment</code>) or replace them with your defined ones (like <code>.editor__comment</code>). You can even add new classes.",owner:"dvkndn",noCSS:!0},"file-highlight":{title:"File Highlight",description:"Fetch external files and highlight them with Prism. Used on the Prism website itself.",noCSS:!0},"show-language":{title:"Show Language",description:"Display the highlighted language in code blocks (inline code does not show the label).",owner:"nauzilus",noCSS:!0,require:"toolbar"},"jsonp-highlight":{title:"JSONP Highlight",description:"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).",noCSS:!0,owner:"nauzilus"},"highlight-keywords":{title:"Highlight Keywords",description:"Adds special CSS classes for each keyword for fine-grained highlighting.",owner:"vkbansal",noCSS:!0},"remove-initial-line-feed":{title:"Remove initial line feed",description:"Removes the initial line feed in code blocks.",owner:"Golmote",noCSS:!0},"inline-color":{title:"Inline color",description:"Adds a small inline preview for colors in style sheets.",require:"css-extras",owner:"RunDevelopment"},previewers:{title:"Previewers",description:"Previewers for angles, colors, gradients, easing and time.",require:"css-extras",owner:"Golmote"},autoloader:{title:"Autoloader",description:"Automatically loads the needed languages to highlight the code blocks.",owner:"Golmote",noCSS:!0},"keep-markup":{title:"Keep Markup",description:"Prevents custom markup from being dropped out during highlighting.",owner:"Golmote",optional:"normalize-whitespace",noCSS:!0},"command-line":{title:"Command Line",description:"Display a command line with a prompt and, optionally, the output/response from the commands.",owner:"chriswells0"},"unescaped-markup":{title:"Unescaped Markup",description:"Write markup without having to escape anything."},"normalize-whitespace":{title:"Normalize Whitespace",description:"Supports multiple operations to normalize whitespace in code blocks.",owner:"zeitgeist87",optional:"unescaped-markup",noCSS:!0},"data-uri-highlight":{title:"Data-URI Highlight",description:"Highlights data-URI contents.",owner:"Golmote",noCSS:!0},toolbar:{title:"Toolbar",description:"Attach a toolbar for plugins to easily register buttons on the top of a code block.",owner:"mAAdhaTTah"},"copy-to-clipboard":{title:"Copy to Clipboard Button",description:"Add a button that copies the code block to the clipboard when clicked.",owner:"mAAdhaTTah",require:"toolbar",noCSS:!0},"download-button":{title:"Download Button",description:"A button in the toolbar of a code block adding a convenient way to download a code file.",owner:"Golmote",require:"toolbar",noCSS:!0},"match-braces":{title:"Match braces",description:"Highlights matching braces.",owner:"RunDevelopment"},"diff-highlight":{title:"Diff Highlight",description:"Highlights the code inside diff blocks.",owner:"RunDevelopment",require:"diff"},"filter-highlight-all":{title:"Filter highlightAll",description:"Filters the elements the <code>highlightAll</code> and <code>highlightAllUnder</code> methods actually highlight.",owner:"RunDevelopment",noCSS:!0},treeview:{title:"Treeview",description:"A language with special styles to highlight file system tree structures.",owner:"Golmote"}}})},6988:(e,t,n)=>{"use strict";n.d(t,{o:()=>d,l:()=>p});var r=n(6540),o=n(4784);const a=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/oracle-db-appdev-monitoring/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/oracle-db-appdev-monitoring/docs","mainDocId":"intro","docs":[{"id":"advanced/development","path":"/oracle-db-appdev-monitoring/docs/advanced/development","sidebar":"tutorialSidebar"},{"id":"advanced/go-runtime","path":"/oracle-db-appdev-monitoring/docs/advanced/go-runtime","sidebar":"tutorialSidebar"},{"id":"advanced/txeventq","path":"/oracle-db-appdev-monitoring/docs/advanced/txeventq","sidebar":"tutorialSidebar"},{"id":"configuration/alert-logs","path":"/oracle-db-appdev-monitoring/docs/configuration/alert-logs","sidebar":"tutorialSidebar"},{"id":"configuration/azure-vault","path":"/oracle-db-appdev-monitoring/docs/configuration/azure-vault","sidebar":"tutorialSidebar"},{"id":"configuration/config-file","path":"/oracle-db-appdev-monitoring/docs/configuration/config-file","sidebar":"tutorialSidebar"},{"id":"configuration/custom-metrics","path":"/oracle-db-appdev-monitoring/docs/configuration/custom-metrics","sidebar":"tutorialSidebar"},{"id":"configuration/multiple-databases","path":"/oracle-db-appdev-monitoring/docs/configuration/multiple-databases","sidebar":"tutorialSidebar"},{"id":"configuration/oci-vault","path":"/oracle-db-appdev-monitoring/docs/configuration/oci-vault","sidebar":"tutorialSidebar"},{"id":"configuration/oracle-wallet","path":"/oracle-db-appdev-monitoring/docs/configuration/oracle-wallet","sidebar":"tutorialSidebar"},{"id":"getting-started/basics","path":"/oracle-db-appdev-monitoring/docs/getting-started/basics","sidebar":"tutorialSidebar"},{"id":"getting-started/default-metrics","path":"/oracle-db-appdev-monitoring/docs/getting-started/default-metrics","sidebar":"tutorialSidebar"},{"id":"getting-started/grafana-dashboards","path":"/oracle-db-appdev-monitoring/docs/getting-started/grafana-dashboards","sidebar":"tutorialSidebar"},{"id":"getting-started/kubernetes","path":"/oracle-db-appdev-monitoring/docs/getting-started/kubernetes","sidebar":"tutorialSidebar"},{"id":"intro","path":"/oracle-db-appdev-monitoring/docs/intro","sidebar":"tutorialSidebar"},{"id":"releases/changelog","path":"/oracle-db-appdev-monitoring/docs/releases/changelog","sidebar":"tutorialSidebar"},{"id":"releases/roadmap","path":"/oracle-db-appdev-monitoring/docs/releases/roadmap","sidebar":"tutorialSidebar"},{"id":"/category/getting-started","path":"/oracle-db-appdev-monitoring/docs/category/getting-started","sidebar":"tutorialSidebar"},{"id":"/category/configuration","path":"/oracle-db-appdev-monitoring/docs/category/configuration","sidebar":"tutorialSidebar"},{"id":"/category/advanced","path":"/oracle-db-appdev-monitoring/docs/category/advanced","sidebar":"tutorialSidebar"},{"id":"/category/releases","path":"/oracle-db-appdev-monitoring/docs/category/releases","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/oracle-db-appdev-monitoring/docs/intro","label":"intro"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var l=n(2654);const s=JSON.parse('{"docusaurusVersion":"3.8.1","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-css-cascade-layers":{"type":"package","name":"@docusaurus/plugin-css-cascade-layers","version":"3.8.1"},"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.8.1"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"3.8.1"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.8.1"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.8.1"},"docusaurus-plugin-svgr":{"type":"package","name":"@docusaurus/plugin-svgr","version":"3.8.1"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.8.1"}}}');var c=n(4848);const u={siteConfig:o.default,siteMetadata:s,globalData:a,i18n:i,codeTranslations:l},d=r.createContext(u);function p({children:e}){return(0,c.jsx)(d.Provider,{value:u,children:e})}},7065:(e,t,n)=>{"use strict";n.d(t,{W:()=>r});const r="default"},7489:(e,t,n)=>{"use strict";n.d(t,{A:()=>g});var r=n(6540),o=n(8193),a=n(5260),i=n(440),l=n(1656),s=n(3102),c=n(4848);function u({error:e,tryAgain:t}){return(0,c.jsxs)("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"},children:[(0,c.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,c.jsx)("button",{type:"button",onClick:t,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,c.jsx)(d,{error:e})]})}function d({error:e}){const t=(0,i.rA)(e).map(e=>e.message).join("\n\nCause:\n");return(0,c.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:t})}function p({children:e}){return(0,c.jsx)(s.W,{value:{plugin:{name:"docusaurus-core-error-boundary",id:"default"}},children:e})}function f({error:e,tryAgain:t}){return(0,c.jsx)(p,{children:(0,c.jsxs)(g,{fallback:()=>(0,c.jsx)(u,{error:e,tryAgain:t}),children:[(0,c.jsx)(a.A,{children:(0,c.jsx)("title",{children:"Page Error"})}),(0,c.jsx)(l.A,{children:(0,c.jsx)(u,{error:e,tryAgain:t})})]})})}const m=e=>(0,c.jsx)(f,{...e});class g extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){o.A.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??m)(e)}return e??null}}},7559:(e,t,n)=>{"use strict";n.d(t,{G:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",blogAuthorsListPage:"blog-authors-list-page",blogAuthorsPostsPage:"blog-authors-posts-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",unlistedBanner:"theme-unlisted-banner",draftBanner:"theme-draft-banner",admonitionType:e=>`theme-admonition-${e}`},announcementBar:{container:"theme-announcement-bar"},layout:{navbar:{container:"theme-layout-navbar",containerLeft:"theme-layout-navbar-left",containerRight:"theme-layout-navbar-right",mobileSidebar:{container:"theme-layout-navbar-sidebar",panel:"theme-layout-navbar-sidebar-panel"}},main:{container:"theme-layout-main"},footer:{container:"theme-layout-footer",column:"theme-layout-footer-column"}},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{blogFooterTagsRow:"theme-blog-footer-tags-row",blogFooterEditMetaRow:"theme-blog-footer-edit-meta-row"},pages:{pageFooterEditMetaRow:"theme-pages-footer-edit-meta-row"}}},8168:(e,t,n)=>{"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(null,arguments)}n.d(t,{A:()=>r})},8193:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},8328:(e,t,n)=>{"use strict";n.d(t,{A:()=>p});n(6540);var r=n(3259),o=n.n(r),a=n(4054);const i={"0e384e19":[()=>n.e(976).then(n.bind(n,2053)),"@site/docs/intro.md",2053],"14eb3368":[()=>Promise.all([n.e(869),n.e(969)]).then(n.bind(n,6098)),"@theme/DocCategoryGeneratedIndexPage",6098],17896441:[()=>Promise.all([n.e(869),n.e(668),n.e(401)]).then(n.bind(n,8632)),"@theme/DocItem",8632],"1df93b7f":[()=>Promise.all([n.e(869),n.e(583)]).then(n.bind(n,5579)),"@site/src/pages/index.tsx",5579],"1e10f605":[()=>n.e(71).then(n.bind(n,7848)),"@site/docs/configuration/custom-metrics.md",7848],"1f391b9e":[()=>Promise.all([n.e(869),n.e(668),n.e(61)]).then(n.bind(n,7973)),"@theme/MDXPage",7973],"21b27731":[()=>n.e(798).then(n.bind(n,3791)),"@site/docs/advanced/txeventq.md",3791],"2a1428c8":[()=>n.e(504).then(n.t.bind(n,9132,19)),"@generated/docusaurus-plugin-content-docs/default/p/oracle-db-appdev-monitoring-docs-category-releases-c5e.json",9132],"2c91c66b":[()=>n.e(747).then(n.bind(n,5747)),"@site/docs/getting-started/grafana-dashboards.md",5747],"2d404bd3":[()=>n.e(596).then(n.t.bind(n,8278,19)),"@generated/docusaurus-plugin-content-docs/default/p/oracle-db-appdev-monitoring-docs-category-getting-started-5e7.json",8278],"384c9e20":[()=>n.e(405).then(n.bind(n,7655)),"@site/docs/releases/roadmap.md",7655],"393be207":[()=>n.e(134).then(n.bind(n,591)),"@site/src/pages/markdown-page.md",591],"49d0ab44":[()=>n.e(539).then(n.bind(n,8705)),"@site/docs/configuration/oracle-wallet.md",8705],"5240f2c1":[()=>n.e(82).then(n.bind(n,1632)),"@site/docs/getting-started/kubernetes.md",1632],"5e95c892":[()=>n.e(647).then(n.bind(n,7121)),"@theme/DocsRoot",7121],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,4784)),"@generated/docusaurus.config",4784],"61f1b472":[()=>n.e(666).then(n.bind(n,2709)),"@site/docs/configuration/alert-logs.md",2709],"6e6103cc":[()=>n.e(926).then(n.bind(n,67)),"@site/docs/getting-started/default-metrics.md",67],"6f6f2b68":[()=>n.e(233).then(n.t.bind(n,5902,19)),"@generated/docusaurus-plugin-content-docs/default/p/oracle-db-appdev-monitoring-docs-10b.json",5902],"85a0f18d":[()=>n.e(918).then(n.bind(n,5405)),"@site/docs/configuration/azure-vault.md",5405],"867ce809":[()=>n.e(705).then(n.t.bind(n,8595,19)),"@generated/docusaurus-plugin-content-docs/default/p/oracle-db-appdev-monitoring-docs-category-configuration-d04.json",8595],a7456010:[()=>n.e(235).then(n.t.bind(n,8552,19)),"@generated/docusaurus-plugin-content-pages/default/__plugin.json",8552],a7bd4aaa:[()=>n.e(98).then(n.bind(n,1723)),"@theme/DocVersionRoot",1723],a7f4dc0a:[()=>n.e(359).then(n.bind(n,7092)),"@site/docs/advanced/go-runtime.md",7092],a94703ab:[()=>Promise.all([n.e(869),n.e(48)]).then(n.bind(n,1377)),"@theme/DocRoot",1377],a989571e:[()=>n.e(898).then(n.t.bind(n,5892,19)),"@generated/docusaurus-plugin-content-docs/default/p/oracle-db-appdev-monitoring-docs-category-advanced-92b.json",5892],aba21aa0:[()=>n.e(742).then(n.t.bind(n,7093,19)),"@generated/docusaurus-plugin-content-docs/default/__plugin.json",7093],af966633:[()=>n.e(173).then(n.bind(n,1035)),"@site/docs/getting-started/basics.md",1035],b8d4edc5:[()=>n.e(434).then(n.bind(n,2736)),"@site/docs/advanced/development.md",2736],c539bf3f:[()=>n.e(100).then(n.bind(n,1432)),"@site/docs/releases/changelog.md",1432],d72bb23b:[()=>n.e(919).then(n.bind(n,7177)),"@site/docs/configuration/multiple-databases.md",7177],d94a41cc:[()=>n.e(580).then(n.bind(n,6358)),"@site/docs/configuration/config-file.md",6358],dac61621:[()=>n.e(199).then(n.bind(n,2336)),"@site/docs/configuration/oci-vault.md",2336]};var l=n(4848);function s({error:e,retry:t,pastDelay:n}){return e?(0,l.jsxs)("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"},children:[(0,l.jsx)("p",{children:String(e)}),(0,l.jsx)("div",{children:(0,l.jsx)("button",{type:"button",onClick:t,children:"Retry"})})]}):n?(0,l.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,l.jsx)("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb",children:(0,l.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,l.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,l.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,l.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,l.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,l.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,l.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var c=n(6921),u=n(3102);function d(e,t){if("*"===e)return o()({loading:s,loader:()=>n.e(237).then(n.bind(n,2237)),modules:["@theme/NotFound"],webpack:()=>[2237],render(e,t){const n=e.default;return(0,l.jsx)(u.W,{value:{plugin:{name:"native",id:"default"}},children:(0,l.jsx)(n,{...t})})}});const r=a[`${e}-${t}`],d={},p=[],f=[],m=(0,c.A)(r);return Object.entries(m).forEach(([e,t])=>{const n=i[t];n&&(d[e]=n[0],p.push(n[1]),f.push(n[2]))}),o().Map({loading:s,loader:d,modules:p,webpack:()=>f,render(t,n){const o=JSON.parse(JSON.stringify(r));Object.entries(t).forEach(([t,n])=>{const r=n.default;if(!r)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof r&&"function"!=typeof r||Object.keys(n).filter(e=>"default"!==e).forEach(e=>{r[e]=n[e]});let a=o;const i=t.split(".");i.slice(0,-1).forEach(e=>{a=a[e]}),a[i[i.length-1]]=r});const a=o.__comp;delete o.__comp;const i=o.__context;delete o.__context;const s=o.__props;return delete o.__props,(0,l.jsx)(u.W,{value:i,children:(0,l.jsx)(a,{...o,...s,...n})})}})}const p=[{path:"/oracle-db-appdev-monitoring/markdown-page",component:d("/oracle-db-appdev-monitoring/markdown-page","553"),exact:!0},{path:"/oracle-db-appdev-monitoring/docs",component:d("/oracle-db-appdev-monitoring/docs","be8"),routes:[{path:"/oracle-db-appdev-monitoring/docs",component:d("/oracle-db-appdev-monitoring/docs","91e"),routes:[{path:"/oracle-db-appdev-monitoring/docs",component:d("/oracle-db-appdev-monitoring/docs","6f9"),routes:[{path:"/oracle-db-appdev-monitoring/docs/advanced/development",component:d("/oracle-db-appdev-monitoring/docs/advanced/development","996"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/advanced/go-runtime",component:d("/oracle-db-appdev-monitoring/docs/advanced/go-runtime","a4f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/advanced/txeventq",component:d("/oracle-db-appdev-monitoring/docs/advanced/txeventq","a4f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/category/advanced",component:d("/oracle-db-appdev-monitoring/docs/category/advanced","582"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/category/configuration",component:d("/oracle-db-appdev-monitoring/docs/category/configuration","b77"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/category/getting-started",component:d("/oracle-db-appdev-monitoring/docs/category/getting-started","0ec"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/category/releases",component:d("/oracle-db-appdev-monitoring/docs/category/releases","18e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/configuration/alert-logs",component:d("/oracle-db-appdev-monitoring/docs/configuration/alert-logs","f83"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/configuration/azure-vault",component:d("/oracle-db-appdev-monitoring/docs/configuration/azure-vault","a02"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/configuration/config-file",component:d("/oracle-db-appdev-monitoring/docs/configuration/config-file","b19"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/configuration/custom-metrics",component:d("/oracle-db-appdev-monitoring/docs/configuration/custom-metrics","ba7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/configuration/multiple-databases",component:d("/oracle-db-appdev-monitoring/docs/configuration/multiple-databases","e32"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/configuration/oci-vault",component:d("/oracle-db-appdev-monitoring/docs/configuration/oci-vault","7d6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/configuration/oracle-wallet",component:d("/oracle-db-appdev-monitoring/docs/configuration/oracle-wallet","412"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/getting-started/basics",component:d("/oracle-db-appdev-monitoring/docs/getting-started/basics","0c9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/getting-started/default-metrics",component:d("/oracle-db-appdev-monitoring/docs/getting-started/default-metrics","67c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/getting-started/grafana-dashboards",component:d("/oracle-db-appdev-monitoring/docs/getting-started/grafana-dashboards","3b7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/getting-started/kubernetes",component:d("/oracle-db-appdev-monitoring/docs/getting-started/kubernetes","ead"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/intro",component:d("/oracle-db-appdev-monitoring/docs/intro","4e3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/releases/changelog",component:d("/oracle-db-appdev-monitoring/docs/releases/changelog","1c7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/oracle-db-appdev-monitoring/docs/releases/roadmap",component:d("/oracle-db-appdev-monitoring/docs/releases/roadmap","81b"),exact:!0,sidebar:"tutorialSidebar"}]}]}]},{path:"/oracle-db-appdev-monitoring/",component:d("/oracle-db-appdev-monitoring/","5e8"),exact:!0},{path:"*",component:d("*")}]},8380:e=>{"use strict";var t=function(){var e=function(){};function t(e,t){Array.isArray(e)?e.forEach(t):null!=e&&t(e,0)}function n(e){for(var t={},n=0,r=e.length;n<r;n++)t[e[n]]=!0;return t}function r(e){var n={},r=[];function o(r,a){if(!(r in n)){a.push(r);var i=a.indexOf(r);if(i<a.length-1)throw new Error("Circular dependency: "+a.slice(i).join(" -> "));var l={},s=e[r];if(s){function c(t){if(!(t in e))throw new Error(r+" depends on an unknown component "+t);if(!(t in l))for(var i in o(t,a),l[t]=!0,n[t])l[i]=!0}t(s.require,c),t(s.optional,c),t(s.modify,c)}n[r]=l,a.pop()}}return function(e){var t=n[e];return t||(o(e,r),t=n[e]),t}}function o(e){for(var t in e)return!0;return!1}return function(a,i,l){var s=function(e){var t={};for(var n in e){var r=e[n];for(var o in r)if("meta"!=o){var a=r[o];t[o]="string"==typeof a?{title:a}:a}}return t}(a),c=function(e){var n;return function(r){if(r in e)return r;if(!n)for(var o in n={},e){var a=e[o];t(a&&a.alias,function(t){if(t in n)throw new Error(t+" cannot be alias for both "+o+" and "+n[t]);if(t in e)throw new Error(t+" cannot be alias of "+o+" because it is a component.");n[t]=o})}return n[r]||r}}(s);i=i.map(c),l=(l||[]).map(c);var u=n(i),d=n(l);i.forEach(function e(n){var r=s[n];t(r&&r.require,function(t){t in d||(u[t]=!0,e(t))})});for(var p,f=r(s),m=u;o(m);){for(var g in p={},m){var h=s[g];t(h&&h.modify,function(e){e in d&&(p[e]=!0)})}for(var y in d)if(!(y in u))for(var b in f(y))if(b in u){p[y]=!0;break}for(var v in m=p)u[v]=!0}var w={getIds:function(){var e=[];return w.load(function(t){e.push(t)}),e},load:function(t,n){return function(t,n,r,o){var a=o?o.series:void 0,i=o?o.parallel:e,l={},s={};function c(e){if(e in l)return l[e];s[e]=!0;var o,u=[];for(var d in t(e))d in n&&u.push(d);if(0===u.length)o=r(e);else{var p=i(u.map(function(e){var t=c(e);return delete s[e],t}));a?o=a(p,function(){return r(e)}):r(e)}return l[e]=o}for(var u in n)c(u);var d=[];for(var p in s)d.push(l[p]);return i(d)}(f,u,t,n)}};return w}}();e.exports=t},8587:(e,t,n)=>{"use strict";function r(e,t){if(null==e)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}n.d(t,{A:()=>r})},8600:(e,t,n)=>{"use strict";var r=n(6540),o=n(5338),a=n(545),i=n(4625),l=n(4784),s=n(8193);const c=[n(3001),n(119),n(6134),n(6294),n(1043)];var u=n(8328),d=n(6347),p=n(2831),f=n(4848);function m({children:e}){return(0,f.jsx)(f.Fragment,{children:e})}var g=n(4563);const h=e=>e.defaultFormatter(e);function y({children:e}){return(0,f.jsx)(g.AL,{formatter:h,children:e})}function b({children:e}){return(0,f.jsx)(y,{children:e})}var v=n(5260),w=n(4586),k=n(6025),S=n(6342),x=n(5500),E=n(2131),_=n(4090);var C=n(440),A=n(1463);function T(){const{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:n}}=(0,w.A)(),r=(0,E.o)(),o=n[e].htmlLang,a=e=>e.replace("-","_");return(0,f.jsxs)(v.A,{children:[Object.entries(n).map(([e,{htmlLang:t}])=>(0,f.jsx)("link",{rel:"alternate",href:r.createUrl({locale:e,fullyQualified:!0}),hrefLang:t},e)),(0,f.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}),(0,f.jsx)("meta",{property:"og:locale",content:a(o)}),Object.values(n).filter(e=>o!==e.htmlLang).map(e=>(0,f.jsx)("meta",{property:"og:locale:alternate",content:a(e.htmlLang)},`meta-og-${e.htmlLang}`))]})}function j({permalink:e}){const{siteConfig:{url:t}}=(0,w.A)(),n=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,w.A)(),{pathname:r}=(0,d.zy)();return e+(0,C.Ks)((0,k.Ay)(r),{trailingSlash:n,baseUrl:t})}(),r=e?`${t}${e}`:n;return(0,f.jsxs)(v.A,{children:[(0,f.jsx)("meta",{property:"og:url",content:r}),(0,f.jsx)("link",{rel:"canonical",href:r})]})}function P(){const{i18n:{currentLocale:e}}=(0,w.A)(),{metadata:t,image:n}=(0,S.p)();return(0,f.jsxs)(f.Fragment,{children:[(0,f.jsxs)(v.A,{children:[(0,f.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,f.jsx)("body",{className:_.w})]}),n&&(0,f.jsx)(x.be,{image:n}),(0,f.jsx)(j,{}),(0,f.jsx)(T,{}),(0,f.jsx)(A.A,{tag:"default",locale:e}),(0,f.jsx)(v.A,{children:t.map((e,t)=>(0,f.jsx)("meta",{...e},t))})]})}const N=new Map;var L=n(6125),O=n(6988),R=n(205);function D(e,...t){const n=c.map(n=>{const r=n.default?.[e]??n[e];return r?.(...t)});return()=>n.forEach(e=>e?.())}const F=function({children:e,location:t,previousLocation:n}){return(0,R.A)(()=>{n!==t&&(!function({location:e,previousLocation:t}){if(!t)return;const n=e.pathname===t.pathname,r=e.hash===t.hash,o=e.search===t.search;if(n&&r&&!o)return;const{hash:a}=e;if(a){const e=decodeURIComponent(a.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:t,previousLocation:n}),D("onRouteDidUpdate",{previousLocation:n,location:t}))},[n,t]),e};function M(e){const t=Array.from(new Set([e,decodeURI(e)])).map(e=>(0,p.u)(u.A,e)).flat();return Promise.all(t.map(e=>e.route.component.preload?.()))}class I extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=s.A.canUseDOM?D("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=D("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),M(n.pathname).then(()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})}).catch(e=>{console.warn(e),window.location.reload()}),!1}render(){const{children:e,location:t}=this.props;return(0,f.jsx)(F,{previousLocation:this.previousLocation,location:t,children:(0,f.jsx)(d.qh,{location:t,render:()=>e})})}}const z=I,B="__docusaurus-base-url-issue-banner-suggestion-container";function $(e){return`\ndocument.addEventListener('DOMContentLoaded', function maybeInsertBanner() {\n var shouldInsert = typeof window['docusaurus'] === 'undefined';\n shouldInsert && insertBanner();\n});\n\nfunction insertBanner() {\n var bannerContainer = document.createElement('div');\n bannerContainer.id = '__docusaurus-base-url-issue-banner-container';\n var bannerHtml = ${JSON.stringify(function(e){return`\n<div id="__docusaurus-base-url-issue-banner" style="border: thick solid red; background-color: rgb(255, 230, 179); margin: 20px; padding: 20px; font-size: 20px;">\n <p style="font-weight: bold; font-size: 30px;">Your Docusaurus site did not load properly.</p>\n <p>A very common reason is a wrong site <a href="https://docusaurus.io/docs/docusaurus.config.js/#baseUrl" style="font-weight: bold;">baseUrl configuration</a>.</p>\n <p>Current configured baseUrl = <span style="font-weight: bold; color: red;">${e}</span> ${"/"===e?" (default value)":""}</p>\n <p>We suggest trying baseUrl = <span id="${B}" style="font-weight: bold; color: green;"></span></p>\n</div>\n`}(e)).replace(/</g,"\\<")};\n bannerContainer.innerHTML = bannerHtml;\n document.body.prepend(bannerContainer);\n var suggestionContainer = document.getElementById('${B}');\n var actualHomePagePath = window.location.pathname;\n var suggestedBaseUrl = actualHomePagePath.substr(-1) === '/'\n ? actualHomePagePath\n : actualHomePagePath + '/';\n suggestionContainer.innerHTML = suggestedBaseUrl;\n}\n`}function U(){const{siteConfig:{baseUrl:e}}=(0,w.A)();return(0,f.jsx)(f.Fragment,{children:!s.A.canUseDOM&&(0,f.jsx)(v.A,{children:(0,f.jsx)("script",{children:$(e)})})})}function q(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,w.A)(),{pathname:n}=(0,d.zy)();return t&&n===e?(0,f.jsx)(U,{}):null}function H(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:r,localeConfigs:o}}=(0,w.A)(),a=(0,k.Ay)(e),{htmlLang:i,direction:l}=o[r];return(0,f.jsxs)(v.A,{children:[(0,f.jsx)("html",{lang:i,dir:l}),(0,f.jsx)("title",{children:t}),(0,f.jsx)("meta",{property:"og:title",content:t}),(0,f.jsx)("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&(0,f.jsx)("meta",{name:"robots",content:"noindex, nofollow"}),e&&(0,f.jsx)("link",{rel:"icon",href:a})]})}var G=n(7489),V=n(2303);function W(){const e=(0,V.A)();return(0,f.jsx)(v.A,{children:(0,f.jsx)("html",{"data-has-hydrated":e})})}const Q=(0,p.v)(u.A);function K(){const e=function(e){if(N.has(e.pathname))return{...e,pathname:N.get(e.pathname)};if((0,p.u)(u.A,e.pathname).some(({route:e})=>!0===e.exact))return N.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return N.set(e.pathname,t),{...e,pathname:t}}((0,d.zy)());return(0,f.jsx)(z,{location:e,children:Q})}function Y(){return(0,f.jsx)(G.A,{children:(0,f.jsx)(O.l,{children:(0,f.jsxs)(L.x,{children:[(0,f.jsx)(m,{children:(0,f.jsxs)(b,{children:[(0,f.jsx)(H,{}),(0,f.jsx)(P,{}),(0,f.jsx)(q,{}),(0,f.jsx)(K,{})]})}),(0,f.jsx)(W,{})]})})})}var X=n(4054);const Z=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const o=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;o?.appendChild(r)})}:function(e){return new Promise((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)})};var J=n(6921);const ee=new Set,te=new Set,ne=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,re={prefetch:e=>{if(!(e=>!ne()&&!te.has(e)&&!ee.has(e))(e))return!1;ee.add(e);const t=(0,p.u)(u.A,e).flatMap(e=>{return t=e.route.path,Object.entries(X).filter(([e])=>e.replace(/-[^-]+$/,"")===t).flatMap(([,e])=>Object.values((0,J.A)(e)));var t});return Promise.all(t.map(e=>{const t=n.gca(e);return t&&!t.includes("undefined")?Z(t).catch(()=>{}):Promise.resolve()}))},preload:e=>!!(e=>!ne()&&!te.has(e))(e)&&(te.add(e),M(e))},oe=Object.freeze(re);function ae({children:e}){return"hash"===l.default.future.experimental_router?(0,f.jsx)(i.I9,{children:e}):(0,f.jsx)(i.Kd,{children:e})}const ie=Boolean(!0);if(s.A.canUseDOM){window.docusaurus=oe;const e=document.getElementById("__docusaurus"),t=(0,f.jsx)(a.vd,{children:(0,f.jsx)(ae,{children:(0,f.jsx)(Y,{})})}),n=(e,t)=>{console.error("Docusaurus React Root onRecoverableError:",e,t)},i=()=>{if(window.docusaurusRoot)window.docusaurusRoot.render(t);else if(ie)window.docusaurusRoot=o.hydrateRoot(e,t,{onRecoverableError:n});else{const r=o.createRoot(e,{onRecoverableError:n});r.render(t),window.docusaurusRoot=r}};M(window.location.pathname).then(()=>{(0,r.startTransition)(i)})}},8692:(e,t,n)=>{var r={"./":8722};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=8692},8722:(e,t,n)=>{const r=n(6969),o=n(8380),a=new Set;function i(e){void 0===e?e=Object.keys(r.languages).filter(e=>"meta"!=e):Array.isArray(e)||(e=[e]);const t=[...a,...Object.keys(Prism.languages)];o(r,e,t).load(e=>{if(!(e in r.languages))return void(i.silent||console.warn("Language does not exist: "+e));const t="./prism-"+e;delete n.c[n(3157).resolve(t)],delete Prism.languages[e],n(3157)(t),a.add(e)})}i.silent=!1,e.exports=i},8774:(e,t,n)=>{"use strict";n.d(t,{A:()=>f});var r=n(6540),o=n(4625),a=n(440),i=n(4586),l=n(6654),s=n(8193),c=n(3427),u=n(6025),d=n(4848);function p({isNavLink:e,to:t,href:n,activeClassName:p,isActive:f,"data-noBrokenLinkCheck":m,autoAddBaseUrl:g=!0,...h},y){const{siteConfig:b}=(0,i.A)(),{trailingSlash:v,baseUrl:w}=b,k=b.future.experimental_router,{withBaseUrl:S}=(0,u.hH)(),x=(0,c.A)(),E=(0,r.useRef)(null);(0,r.useImperativeHandle)(y,()=>E.current);const _=t||n;const C=(0,l.A)(_),A=_?.replace("pathname://","");let T=void 0!==A?(j=A,g&&(e=>e.startsWith("/"))(j)?S(j):j):void 0;var j;"hash"===k&&T?.startsWith("./")&&(T=T?.slice(1)),T&&C&&(T=(0,a.Ks)(T,{trailingSlash:v,baseUrl:w}));const P=(0,r.useRef)(!1),N=e?o.k2:o.N_,L=s.A.canUseIntersectionObserver,O=(0,r.useRef)(),R=()=>{P.current||null==T||(window.docusaurus.preload(T),P.current=!0)};(0,r.useEffect)(()=>(!L&&C&&s.A.canUseDOM&&null!=T&&window.docusaurus.prefetch(T),()=>{L&&O.current&&O.current.disconnect()}),[O,T,L,C]);const D=T?.startsWith("#")??!1,F=!h.target||"_self"===h.target,M=!T||!C||!F||D&&"hash"!==k;m||!D&&M||x.collectLink(T),h.id&&x.collectAnchor(h.id);const I={};return M?(0,d.jsx)("a",{ref:E,href:T,..._&&!C&&{target:"_blank",rel:"noopener noreferrer"},...h,...I}):(0,d.jsx)(N,{...h,onMouseEnter:R,onTouchStart:R,innerRef:e=>{E.current=e,L&&e&&C&&(O.current=new window.IntersectionObserver(t=>{t.forEach(t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(O.current.unobserve(e),O.current.disconnect(),null!=T&&window.docusaurus.prefetch(T))})}),O.current.observe(e))},to:T,...e&&{isActive:f,activeClassName:p},...I})}const f=r.forwardRef(p)},9169:(e,t,n)=>{"use strict";n.d(t,{Dt:()=>l,ys:()=>i});var r=n(6540),o=n(8328),a=n(4586);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function l(){const{baseUrl:e}=(0,a.A)().siteConfig;return(0,r.useMemo)(()=>function({baseUrl:e,routes:t}){function n(t){return t.path===e&&!0===t.exact}function r(t){return t.path===e&&!t.exact}return function e(t){if(0===t.length)return;return t.find(n)||e(t.filter(r).flatMap(e=>e.routes??[]))}(t)}({routes:o.A,baseUrl:e}),[e])}},9532:(e,t,n)=>{"use strict";n.d(t,{Be:()=>c,ZC:()=>l,_q:()=>i,dV:()=>s,fM:()=>u});var r=n(6540),o=n(205),a=n(4848);function i(e){const t=(0,r.useRef)(e);return(0,o.A)(()=>{t.current=e},[e]),(0,r.useCallback)((...e)=>t.current(...e),[])}function l(e){const t=(0,r.useRef)();return(0,o.A)(()=>{t.current=e}),t.current}class s extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?<name>\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function c(e){const t=Object.entries(e);return t.sort((e,t)=>e[0].localeCompare(t[0])),(0,r.useMemo)(()=>e,t.flat())}function u(e){return({children:t})=>(0,a.jsx)(a.Fragment,{children:e.reduceRight((e,t)=>(0,a.jsx)(t,{children:e}),t)})}},9698:(e,t)=>{"use strict";var n=Symbol.for("react.transitional.element"),r=Symbol.for("react.fragment");function o(e,t,r){var o=null;if(void 0!==r&&(o=""+r),void 0!==t.key&&(o=""+t.key),"key"in t)for(var a in r={},t)"key"!==a&&(r[a]=t[a]);else r=t;return t=r.ref,{$$typeof:n,type:e,key:o,ref:void 0!==t?t:null,props:r}}t.Fragment=r,t.jsx=o,t.jsxs=o},9700:()=>{!function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,o,a){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(o,function(e){if("function"==typeof a&&!a(e))return e;for(var o,l=i.length;-1!==n.code.indexOf(o=t(r,l));)++l;return i[l]=e,o}),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var o=0,a=Object.keys(n.tokenStack);!function i(l){for(var s=0;s<l.length&&!(o>=a.length);s++){var c=l[s];if("string"==typeof c||c.content&&"string"==typeof c.content){var u=a[o],d=n.tokenStack[u],p="string"==typeof c?c:c.content,f=t(r,u),m=p.indexOf(f);if(m>-1){++o;var g=p.substring(0,m),h=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),y=p.substring(m+f.length),b=[];g&&b.push.apply(b,i([g])),b.push(h),y&&b.push.apply(b,i([y])),"string"==typeof c?l.splice.apply(l,[s,1].concat(b)):c.content=b}}else c.content&&i(c.content)}return l}(n.tokens)}}}})}(Prism)},9869:(e,t)=>{"use strict";var n=Symbol.for("react.transitional.element"),r=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),i=Symbol.for("react.profiler"),l=Symbol.for("react.consumer"),s=Symbol.for("react.context"),c=Symbol.for("react.forward_ref"),u=Symbol.for("react.suspense"),d=Symbol.for("react.memo"),p=Symbol.for("react.lazy"),f=Symbol.iterator;var m={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g=Object.assign,h={};function y(e,t,n){this.props=e,this.context=t,this.refs=h,this.updater=n||m}function b(){}function v(e,t,n){this.props=e,this.context=t,this.refs=h,this.updater=n||m}y.prototype.isReactComponent={},y.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("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")},b.prototype=y.prototype;var w=v.prototype=new b;w.constructor=v,g(w,y.prototype),w.isPureReactComponent=!0;var k=Array.isArray,S={H:null,A:null,T:null,S:null,V:null},x=Object.prototype.hasOwnProperty;function E(e,t,r,o,a,i){return r=i.ref,{$$typeof:n,type:e,key:t,ref:void 0!==r?r:null,props:i}}function _(e){return"object"==typeof e&&null!==e&&e.$$typeof===n}var C=/\/+/g;function A(e,t){return"object"==typeof e&&null!==e&&null!=e.key?(n=""+e.key,r={"=":"=0",":":"=2"},"$"+n.replace(/[=:]/g,function(e){return r[e]})):t.toString(36);var n,r}function T(){}function j(e,t,o,a,i){var l=typeof e;"undefined"!==l&&"boolean"!==l||(e=null);var s,c,u=!1;if(null===e)u=!0;else switch(l){case"bigint":case"string":case"number":u=!0;break;case"object":switch(e.$$typeof){case n:case r:u=!0;break;case p:return j((u=e._init)(e._payload),t,o,a,i)}}if(u)return i=i(e),u=""===a?"."+A(e,0):a,k(i)?(o="",null!=u&&(o=u.replace(C,"$&/")+"/"),j(i,t,o,"",function(e){return e})):null!=i&&(_(i)&&(s=i,c=o+(null==i.key||e&&e.key===i.key?"":(""+i.key).replace(C,"$&/")+"/")+u,i=E(s.type,c,void 0,0,0,s.props)),t.push(i)),1;u=0;var d,m=""===a?".":a+":";if(k(e))for(var g=0;g<e.length;g++)u+=j(a=e[g],t,o,l=m+A(a,g),i);else if("function"==typeof(g=null===(d=e)||"object"!=typeof d?null:"function"==typeof(d=f&&d[f]||d["@@iterator"])?d:null))for(e=g.call(e),g=0;!(a=e.next()).done;)u+=j(a=a.value,t,o,l=m+A(a,g++),i);else if("object"===l){if("function"==typeof e.then)return j(function(e){switch(e.status){case"fulfilled":return e.value;case"rejected":throw e.reason;default:switch("string"==typeof e.status?e.then(T,T):(e.status="pending",e.then(function(t){"pending"===e.status&&(e.status="fulfilled",e.value=t)},function(t){"pending"===e.status&&(e.status="rejected",e.reason=t)})),e.status){case"fulfilled":return e.value;case"rejected":throw e.reason}}throw e}(e),t,o,a,i);throw t=String(e),Error("Objects are not valid as a React child (found: "+("[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.")}return u}function P(e,t,n){if(null==e)return e;var r=[],o=0;return j(e,r,"","",function(e){return t.call(n,e,o++)}),r}function N(e){if(-1===e._status){var t=e._result;(t=t()).then(function(t){0!==e._status&&-1!==e._status||(e._status=1,e._result=t)},function(t){0!==e._status&&-1!==e._status||(e._status=2,e._result=t)}),-1===e._status&&(e._status=0,e._result=t)}if(1===e._status)return e._result.default;throw e._result}var L="function"==typeof reportError?reportError:function(e){if("object"==typeof window&&"function"==typeof window.ErrorEvent){var t=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:"object"==typeof e&&null!==e&&"string"==typeof e.message?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if("object"==typeof process&&"function"==typeof process.emit)return void process.emit("uncaughtException",e);console.error(e)};function O(){}t.Children={map:P,forEach:function(e,t,n){P(e,function(){t.apply(this,arguments)},n)},count:function(e){var t=0;return P(e,function(){t++}),t},toArray:function(e){return P(e,function(e){return e})||[]},only:function(e){if(!_(e))throw Error("React.Children.only expected to receive a single React element child.");return e}},t.Component=y,t.Fragment=o,t.Profiler=i,t.PureComponent=v,t.StrictMode=a,t.Suspense=u,t.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=S,t.__COMPILER_RUNTIME={__proto__:null,c:function(e){return S.H.useMemoCache(e)}},t.cache=function(e){return function(){return e.apply(null,arguments)}},t.cloneElement=function(e,t,n){if(null==e)throw Error("The argument must be a React element, but you passed "+e+".");var r=g({},e.props),o=e.key;if(null!=t)for(a in void 0!==t.ref&&void 0,void 0!==t.key&&(o=""+t.key),t)!x.call(t,a)||"key"===a||"__self"===a||"__source"===a||"ref"===a&&void 0===t.ref||(r[a]=t[a]);var a=arguments.length-2;if(1===a)r.children=n;else if(1<a){for(var i=Array(a),l=0;l<a;l++)i[l]=arguments[l+2];r.children=i}return E(e.type,o,void 0,0,0,r)},t.createContext=function(e){return(e={$$typeof:s,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider=e,e.Consumer={$$typeof:l,_context:e},e},t.createElement=function(e,t,n){var r,o={},a=null;if(null!=t)for(r in void 0!==t.key&&(a=""+t.key),t)x.call(t,r)&&"key"!==r&&"__self"!==r&&"__source"!==r&&(o[r]=t[r]);var i=arguments.length-2;if(1===i)o.children=n;else if(1<i){for(var l=Array(i),s=0;s<i;s++)l[s]=arguments[s+2];o.children=l}if(e&&e.defaultProps)for(r in i=e.defaultProps)void 0===o[r]&&(o[r]=i[r]);return E(e,a,void 0,0,0,o)},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:c,render:e}},t.isValidElement=_,t.lazy=function(e){return{$$typeof:p,_payload:{_status:-1,_result:e},_init:N}},t.memo=function(e,t){return{$$typeof:d,type:e,compare:void 0===t?null:t}},t.startTransition=function(e){var t=S.T,n={};S.T=n;try{var r=e(),o=S.S;null!==o&&o(n,r),"object"==typeof r&&null!==r&&"function"==typeof r.then&&r.then(O,L)}catch(a){L(a)}finally{S.T=t}},t.unstable_useCacheRefresh=function(){return S.H.useCacheRefresh()},t.use=function(e){return S.H.use(e)},t.useActionState=function(e,t,n){return S.H.useActionState(e,t,n)},t.useCallback=function(e,t){return S.H.useCallback(e,t)},t.useContext=function(e){return S.H.useContext(e)},t.useDebugValue=function(){},t.useDeferredValue=function(e,t){return S.H.useDeferredValue(e,t)},t.useEffect=function(e,t,n){var r=S.H;if("function"==typeof n)throw Error("useEffect CRUD overload is not enabled in this build of React.");return r.useEffect(e,t)},t.useId=function(){return S.H.useId()},t.useImperativeHandle=function(e,t,n){return S.H.useImperativeHandle(e,t,n)},t.useInsertionEffect=function(e,t){return S.H.useInsertionEffect(e,t)},t.useLayoutEffect=function(e,t){return S.H.useLayoutEffect(e,t)},t.useMemo=function(e,t){return S.H.useMemo(e,t)},t.useOptimistic=function(e,t){return S.H.useOptimistic(e,t)},t.useReducer=function(e,t,n){return S.H.useReducer(e,t,n)},t.useRef=function(e){return S.H.useRef(e)},t.useState=function(e){return S.H.useState(e)},t.useSyncExternalStore=function(e,t,n){return S.H.useSyncExternalStore(e,t,n)},t.useTransition=function(){return S.H.useTransition()},t.version="19.1.1"},9876:(e,t,n)=>{"use strict";n.d(t,{e:()=>m,M:()=>g});var r=n(6540),o=n(5600),a=n(4581),i=n(6347),l=n(9532);function s(e){!function(e){const t=(0,i.W6)(),n=(0,l._q)(e);(0,r.useEffect)(()=>t.block((e,t)=>n(e,t)),[t,n])}((t,n)=>{if("POP"===n)return e(t,n)})}var c=n(6342),u=n(4848);const d=r.createContext(void 0);function p(){const e=function(){const e=(0,o.YL)(),{items:t}=(0,c.p)().navbar;return 0===t.length&&!e.component}(),t=(0,a.l)(),n=!e&&"mobile"===t,[i,l]=(0,r.useState)(!1),s=(0,r.useCallback)(()=>{l(e=>!e)},[]);return(0,r.useEffect)(()=>{"desktop"===t&&l(!1)},[t]),(0,r.useMemo)(()=>({disabled:e,shouldRender:n,toggle:s,shown:i}),[e,n,s,i])}function f({handler:e}){return s(e),null}function m({children:e}){const t=p();return(0,u.jsxs)(u.Fragment,{children:[t.shown&&(0,u.jsx)(f,{handler:()=>(t.toggle(),!1)}),(0,u.jsx)(d.Provider,{value:t,children:e})]})}function g(){const e=r.useContext(d);if(void 0===e)throw new l.dV("NavbarMobileSidebarProvider");return e}},9982:(e,t,n)=>{"use strict";e.exports=n(4477)}},e=>{e.O(0,[869],()=>{return t=8600,e(e.s=t);var t});e.O()}]); \ No newline at end of file diff --git a/docs/assets/js/runtime~main.17989aec.js b/docs/assets/js/runtime~main.17989aec.js deleted file mode 100644 index 31ec9dae..00000000 --- a/docs/assets/js/runtime~main.17989aec.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{"use strict";var e,a,t,r,o,c={},f={};function d(e){var a=f[e];if(void 0!==a)return a.exports;var t=f[e]={id:e,loaded:!1,exports:{}};return c[e].call(t.exports,t,t.exports,d),t.loaded=!0,t.exports}d.m=c,d.c=f,e=[],d.O=(a,t,r,o)=>{if(!t){var c=1/0;for(i=0;i<e.length;i++){t=e[i][0],r=e[i][1],o=e[i][2];for(var f=!0,n=0;n<t.length;n++)(!1&o||c>=o)&&Object.keys(d.O).every(e=>d.O[e](t[n]))?t.splice(n--,1):(f=!1,o<c&&(c=o));if(f){e.splice(i--,1);var b=r();void 0!==b&&(a=b)}}return a}o=o||0;for(var i=e.length;i>0&&e[i-1][2]>o;i--)e[i]=e[i-1];e[i]=[t,r,o]},d.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return d.d(a,{a:a}),a},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,d.t=function(e,r){if(1&r&&(e=this(e)),8&r)return e;if("object"==typeof e&&e){if(4&r&&e.__esModule)return e;if(16&r&&"function"==typeof e.then)return e}var o=Object.create(null);d.r(o);var c={};a=a||[null,t({}),t([]),t(t)];for(var f=2&r&&e;("object"==typeof f||"function"==typeof f)&&!~a.indexOf(f);f=t(f))Object.getOwnPropertyNames(f).forEach(a=>c[a]=()=>e[a]);return c.default=()=>e,d.d(o,c),o},d.d=(e,a)=>{for(var t in a)d.o(a,t)&&!d.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:a[t]})},d.f={},d.e=e=>Promise.all(Object.keys(d.f).reduce((a,t)=>(d.f[t](e,a),a),[])),d.u=e=>"assets/js/"+({48:"a94703ab",61:"1f391b9e",71:"1e10f605",82:"5240f2c1",98:"a7bd4aaa",100:"c539bf3f",134:"393be207",173:"af966633",199:"dac61621",233:"6f6f2b68",235:"a7456010",359:"a7f4dc0a",401:"17896441",405:"384c9e20",434:"b8d4edc5",504:"2a1428c8",539:"49d0ab44",580:"d94a41cc",583:"1df93b7f",596:"2d404bd3",647:"5e95c892",666:"61f1b472",705:"867ce809",742:"aba21aa0",747:"2c91c66b",798:"21b27731",898:"a989571e",918:"85a0f18d",919:"d72bb23b",926:"6e6103cc",969:"14eb3368",976:"0e384e19"}[e]||e)+"."+{48:"643e6934",61:"d091afa4",71:"ef94c6bf",82:"1c8abb1b",98:"2ca06876",100:"35853f87",134:"fc1e167d",173:"0bc25fd8",199:"2f9dd97b",233:"116500b3",235:"25370a92",237:"d496122d",359:"b6021f3c",401:"951229dd",405:"1ed457f7",434:"c60980e4",504:"81093459",539:"3162fd79",580:"bc85db5c",583:"ff24e8ed",596:"778d36b4",647:"0955054f",666:"6d4df439",668:"a919aaa7",705:"fdf6483f",742:"ef5bd9e3",747:"4209897b",798:"093b684e",898:"01007baf",918:"23b1b3b5",919:"1e9dae26",926:"231b1b1b",969:"d64fc15c",976:"11007e6c"}[e]+".js",d.miniCssF=e=>{},d.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),d.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),r={},o="site:",d.l=(e,a,t,c)=>{if(r[e])r[e].push(a);else{var f,n;if(void 0!==t)for(var b=document.getElementsByTagName("script"),i=0;i<b.length;i++){var u=b[i];if(u.getAttribute("src")==e||u.getAttribute("data-webpack")==o+t){f=u;break}}f||(n=!0,(f=document.createElement("script")).charset="utf-8",f.timeout=120,d.nc&&f.setAttribute("nonce",d.nc),f.setAttribute("data-webpack",o+t),f.src=e),r[e]=[a];var l=(a,t)=>{f.onerror=f.onload=null,clearTimeout(s);var o=r[e];if(delete r[e],f.parentNode&&f.parentNode.removeChild(f),o&&o.forEach(e=>e(t)),a)return a(t)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:f}),12e4);f.onerror=l.bind(null,f.onerror),f.onload=l.bind(null,f.onload),n&&document.head.appendChild(f)}},d.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},d.p="/oracle-db-appdev-monitoring/",d.gca=function(e){return e={17896441:"401",a94703ab:"48","1f391b9e":"61","1e10f605":"71","5240f2c1":"82",a7bd4aaa:"98",c539bf3f:"100","393be207":"134",af966633:"173",dac61621:"199","6f6f2b68":"233",a7456010:"235",a7f4dc0a:"359","384c9e20":"405",b8d4edc5:"434","2a1428c8":"504","49d0ab44":"539",d94a41cc:"580","1df93b7f":"583","2d404bd3":"596","5e95c892":"647","61f1b472":"666","867ce809":"705",aba21aa0:"742","2c91c66b":"747","21b27731":"798",a989571e:"898","85a0f18d":"918",d72bb23b:"919","6e6103cc":"926","14eb3368":"969","0e384e19":"976"}[e]||e,d.p+d.u(e)},(()=>{var e={354:0,869:0};d.f.j=(a,t)=>{var r=d.o(e,a)?e[a]:void 0;if(0!==r)if(r)t.push(r[2]);else if(/^(354|869)$/.test(a))e[a]=0;else{var o=new Promise((t,o)=>r=e[a]=[t,o]);t.push(r[2]=o);var c=d.p+d.u(a),f=new Error;d.l(c,t=>{if(d.o(e,a)&&(0!==(r=e[a])&&(e[a]=void 0),r)){var o=t&&("load"===t.type?"missing":t.type),c=t&&t.target&&t.target.src;f.message="Loading chunk "+a+" failed.\n("+o+": "+c+")",f.name="ChunkLoadError",f.type=o,f.request=c,r[1](f)}},"chunk-"+a,a)}},d.O.j=a=>0===e[a];var a=(a,t)=>{var r,o,c=t[0],f=t[1],n=t[2],b=0;if(c.some(a=>0!==e[a])){for(r in f)d.o(f,r)&&(d.m[r]=f[r]);if(n)var i=n(d)}for(a&&a(t);b<c.length;b++)o=c[b],d.o(e,o)&&e[o]&&e[o][0](),e[o]=0;return d.O(i)},t=self.webpackChunksite=self.webpackChunksite||[];t.forEach(a.bind(null,0)),t.push=a.bind(null,t.push.bind(t))})()})(); \ No newline at end of file diff --git a/docs/assets/js/runtime~main.cf06ab3a.js b/docs/assets/js/runtime~main.cf06ab3a.js new file mode 100644 index 00000000..0ba61a44 --- /dev/null +++ b/docs/assets/js/runtime~main.cf06ab3a.js @@ -0,0 +1 @@ +(()=>{"use strict";var e,a,c,t,r,f={},d={};function b(e){var a=d[e];if(void 0!==a)return a.exports;var c=d[e]={id:e,loaded:!1,exports:{}};return f[e].call(c.exports,c,c.exports,b),c.loaded=!0,c.exports}b.m=f,b.c=d,e=[],b.O=(a,c,t,r)=>{if(!c){var f=1/0;for(i=0;i<e.length;i++){c=e[i][0],t=e[i][1],r=e[i][2];for(var d=!0,o=0;o<c.length;o++)(!1&r||f>=r)&&Object.keys(b.O).every(e=>b.O[e](c[o]))?c.splice(o--,1):(d=!1,r<f&&(f=r));if(d){e.splice(i--,1);var n=t();void 0!==n&&(a=n)}}return a}r=r||0;for(var i=e.length;i>0&&e[i-1][2]>r;i--)e[i]=e[i-1];e[i]=[c,t,r]},b.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return b.d(a,{a:a}),a},c=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,b.t=function(e,t){if(1&t&&(e=this(e)),8&t)return e;if("object"==typeof e&&e){if(4&t&&e.__esModule)return e;if(16&t&&"function"==typeof e.then)return e}var r=Object.create(null);b.r(r);var f={};a=a||[null,c({}),c([]),c(c)];for(var d=2&t&&e;("object"==typeof d||"function"==typeof d)&&!~a.indexOf(d);d=c(d))Object.getOwnPropertyNames(d).forEach(a=>f[a]=()=>e[a]);return f.default=()=>e,b.d(r,f),r},b.d=(e,a)=>{for(var c in a)b.o(a,c)&&!b.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:a[c]})},b.f={},b.e=e=>Promise.all(Object.keys(b.f).reduce((a,c)=>(b.f[c](e,a),a),[])),b.u=e=>"assets/js/"+({154:"0170a66b",170:"ab01181e",405:"384c9e20",529:"3c57bc2c",1152:"a7901124",1235:"a7456010",1604:"36b77772",1636:"fcc612c9",1919:"d72bb23b",1969:"488c0ad4",2173:"af966633",2199:"dac61621",2207:"468714db",2900:"f6de67f9",3798:"21b27731",3976:"0e384e19",4134:"393be207",4323:"8be1f15d",4353:"c4e87715",4580:"d94a41cc",4583:"1df93b7f",4705:"867ce809",5071:"1e10f605",5082:"5240f2c1",5173:"f7d2b7bf",5524:"7569d55b",5742:"aba21aa0",5808:"f36aa3f3",6061:"1f391b9e",6233:"6f6f2b68",6235:"cf0dfdd1",6424:"6a577544",6596:"2d404bd3",6898:"a989571e",6948:"3740dcc7",6969:"14eb3368",7098:"a7bd4aaa",7213:"9419d97c",7359:"a7f4dc0a",7504:"2a1428c8",7791:"01070055",8089:"e0c86ee0",8401:"17896441",8539:"49d0ab44",8747:"2c91c66b",8918:"85a0f18d",8952:"5e8a6b04",9048:"a94703ab",9100:"c539bf3f",9249:"6ad7f408",9434:"b8d4edc5",9647:"5e95c892",9666:"61f1b472",9926:"6e6103cc"}[e]||e)+"."+{154:"a482c5a3",170:"bd6e5167",405:"830f0bbb",529:"e119104c",1152:"1486562b",1235:"8bd40a5b",1604:"a0a96e13",1636:"2600ed97",1668:"57de6221",1919:"80f5a95a",1969:"c4e24d7b",2173:"d7133a46",2199:"9472896f",2207:"5f17f508",2237:"5e84b40a",2900:"85db75b5",3798:"f20c3f00",3976:"df53043b",4134:"6daba6a3",4323:"b28ab2e6",4353:"b14dd93f",4580:"cf627fef",4583:"3265e8f4",4705:"3f108176",5071:"85d7d328",5082:"7779f2d4",5173:"0e65ba99",5524:"5f9fbe1f",5742:"6827c32a",5808:"da1bf05b",6061:"934f2783",6233:"8ad1a530",6235:"1f08fe6e",6424:"bcbc70ea",6596:"073e06e4",6898:"754a5e4f",6948:"a3ac8f6e",6969:"a004a01c",7098:"8e47733e",7213:"9d1606f1",7359:"fab1aab9",7504:"aeb7d0d6",7791:"d16dd02e",8089:"0cf62a46",8401:"123f7693",8539:"d41e7e86",8747:"a471022d",8918:"3710d60b",8952:"2d605a88",9048:"0527b935",9100:"1cf406ef",9249:"79deb557",9434:"8eabd942",9647:"0766153a",9666:"623412d3",9926:"817fcf37"}[e]+".js",b.miniCssF=e=>{},b.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),b.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),t={},r="site:",b.l=(e,a,c,f)=>{if(t[e])t[e].push(a);else{var d,o;if(void 0!==c)for(var n=document.getElementsByTagName("script"),i=0;i<n.length;i++){var u=n[i];if(u.getAttribute("src")==e||u.getAttribute("data-webpack")==r+c){d=u;break}}d||(o=!0,(d=document.createElement("script")).charset="utf-8",d.timeout=120,b.nc&&d.setAttribute("nonce",b.nc),d.setAttribute("data-webpack",r+c),d.src=e),t[e]=[a];var l=(a,c)=>{d.onerror=d.onload=null,clearTimeout(s);var r=t[e];if(delete t[e],d.parentNode&&d.parentNode.removeChild(d),r&&r.forEach(e=>e(c)),a)return a(c)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:d}),12e4);d.onerror=l.bind(null,d.onerror),d.onload=l.bind(null,d.onload),o&&document.head.appendChild(d)}},b.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},b.p="/oracle-db-appdev-monitoring/",b.gca=function(e){return e={17896441:"8401","0170a66b":"154",ab01181e:"170","384c9e20":"405","3c57bc2c":"529",a7901124:"1152",a7456010:"1235","36b77772":"1604",fcc612c9:"1636",d72bb23b:"1919","488c0ad4":"1969",af966633:"2173",dac61621:"2199","468714db":"2207",f6de67f9:"2900","21b27731":"3798","0e384e19":"3976","393be207":"4134","8be1f15d":"4323",c4e87715:"4353",d94a41cc:"4580","1df93b7f":"4583","867ce809":"4705","1e10f605":"5071","5240f2c1":"5082",f7d2b7bf:"5173","7569d55b":"5524",aba21aa0:"5742",f36aa3f3:"5808","1f391b9e":"6061","6f6f2b68":"6233",cf0dfdd1:"6235","6a577544":"6424","2d404bd3":"6596",a989571e:"6898","3740dcc7":"6948","14eb3368":"6969",a7bd4aaa:"7098","9419d97c":"7213",a7f4dc0a:"7359","2a1428c8":"7504","01070055":"7791",e0c86ee0:"8089","49d0ab44":"8539","2c91c66b":"8747","85a0f18d":"8918","5e8a6b04":"8952",a94703ab:"9048",c539bf3f:"9100","6ad7f408":"9249",b8d4edc5:"9434","5e95c892":"9647","61f1b472":"9666","6e6103cc":"9926"}[e]||e,b.p+b.u(e)},(()=>{var e={5354:0,1869:0};b.f.j=(a,c)=>{var t=b.o(e,a)?e[a]:void 0;if(0!==t)if(t)c.push(t[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var r=new Promise((c,r)=>t=e[a]=[c,r]);c.push(t[2]=r);var f=b.p+b.u(a),d=new Error;b.l(f,c=>{if(b.o(e,a)&&(0!==(t=e[a])&&(e[a]=void 0),t)){var r=c&&("load"===c.type?"missing":c.type),f=c&&c.target&&c.target.src;d.message="Loading chunk "+a+" failed.\n("+r+": "+f+")",d.name="ChunkLoadError",d.type=r,d.request=f,t[1](d)}},"chunk-"+a,a)}},b.O.j=a=>0===e[a];var a=(a,c)=>{var t,r,f=c[0],d=c[1],o=c[2],n=0;if(f.some(a=>0!==e[a])){for(t in d)b.o(d,t)&&(b.m[t]=d[t]);if(o)var i=o(b)}for(a&&a(c);n<f.length;n++)r=f[n],b.o(e,r)&&e[r]&&e[r][0](),e[r]=0;return b.O(i)},c=self.webpackChunksite=self.webpackChunksite||[];c.forEach(a.bind(null,0)),c.push=a.bind(null,c.push.bind(c))})()})(); \ No newline at end of file diff --git a/docs/docs/advanced/development/index.html b/docs/docs/advanced/development/index.html index 00e122fd..9d4bcd64 100644 --- a/docs/docs/advanced/development/index.html +++ b/docs/docs/advanced/development/index.html @@ -1,17 +1,17 @@ <!doctype html> -<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-advanced/development" data-has-hydrated="false"> +<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-2.0.3 docs-doc-page docs-doc-id-advanced/development" data-has-hydrated="false"> <head> <meta charset="UTF-8"> <meta name="generator" content="Docusaurus v3.8.1"> -<title data-rh="true">Development | Oracle Database Metrics Exporter - - +Development | Oracle Database Metrics Exporter + + -
Skip to main content

Development

+
Version: 2.0.3

Development

The exporter is a Go program using the Prometheus SDK.

External contributions are welcome, see CONTRIBUTING for details.

The exporter initialization is as follows:

@@ -37,6 +37,6 @@

Docker

Building Binaries

Run build:

make go-build
-

This will create binaries and archives inside the dist folder for the building operating system.

+

This will create binaries and archives inside the dist folder for the building operating system.

\ No newline at end of file diff --git a/docs/docs/advanced/go-runtime/index.html b/docs/docs/advanced/go-runtime/index.html index ffe2518b..9f2305b9 100644 --- a/docs/docs/advanced/go-runtime/index.html +++ b/docs/docs/advanced/go-runtime/index.html @@ -1,23 +1,23 @@ - + -Configuring the Go Runtime | Oracle Database Metrics Exporter - - +Configuring the Go Runtime | Oracle Database Metrics Exporter + + -
Skip to main content

Exporter Go Runtime

+
Version: 2.0.3

Exporter Go Runtime

If you are running in an environment with limited memory, or you are running a large number of exporters, you may want to control the exporter's usage of memory.

Under normal circumstances, the exporter process will retain OS memory that was used by the Go garbage collector but is no longer needed, in case it may be needed again in the future, unless the host OS is under memory pressure. The result of this behavior (which is the normal behavior of the Go runtime) is that the resident set size will not decrease until the host OS memory is almost all used. Under most circumstances, this will not cause any issues, but if you are in an environment where you need to conserve memory, the following options are provided:

  • You may set the FREE_INTERVAL environment variable to a Go duration string, e.g., 60s and run the exporter in debug mode by setting the GODEBUG environment variable to a value including madvdontneed=1, e.g., GODEBUG=gctrace=1,madvdontneed=1. The exporter will call the FreeOSMemory() at the specified interval. This tells the Go runtime to attempt to release memory which is no longer needed. Please note that this does not guarantee that the memory will be released to the OS, but over time you should see the RSS shrink sooner than without these settings.
  • You may set the RESTART_INTERVAL environment variable to a Go duration string, e.g., 10m. The exporter will restart its own process at the specified iterval (by calling the OS exec syscall). As no new process is created, the process identifier (PID) does not change, but the machine code, data, heap, and stack of the process are replaced by those of the new program (source: Wikipedia). This has the side effect of freeing the resident set, so that it will return to its original size.
  • In addition to these, you may also set GOMAXPROCS, GOGC, and GOMEMLIMIT (see documentation) to further limit the amount of resources that the Go runtime may use.
  • -
+
\ No newline at end of file diff --git a/docs/docs/advanced/txeventq/index.html b/docs/docs/advanced/txeventq/index.html index 2983e64a..f218c6be 100644 --- a/docs/docs/advanced/txeventq/index.html +++ b/docs/docs/advanced/txeventq/index.html @@ -1,17 +1,17 @@ - + -Monitoring TxEventQ | Oracle Database Metrics Exporter - - +Monitoring TxEventQ | Oracle Database Metrics Exporter + + -
Skip to main content

Monitoring Transactional Event Queues

+
Version: 2.0.3

Monitoring Transactional Event Queues

Oracle Transactional Event Queues ("TxEventQ") is a fault-tolerant, scalable, real-time messaging backbone offered by converged Oracle Database that allows you to build an enterprise-class event-driven architectures.

Access to the real-time broker, producer, and consumer metrics in a single dashboard and receiving alerts for issues allows teams to understand the state of their system.

The exporter includes a set of metrics for monitoring TxEventQ and a pre-built Grafana dashboard.

@@ -39,6 +39,6 @@

Grafana da

Note: You may not see any activity on the dashboard unless there are clients producing and consuming messages from topics.

The dashboard will look like this:

-

Oracle Database Dashboard

+

Oracle Database Dashboard

\ No newline at end of file diff --git a/docs/docs/category/advanced/index.html b/docs/docs/category/advanced/index.html index 207d34be..29c26862 100644 --- a/docs/docs/category/advanced/index.html +++ b/docs/docs/category/advanced/index.html @@ -1,16 +1,16 @@ - + -Advanced | Oracle Database Metrics Exporter - - +Advanced | Oracle Database Metrics Exporter + + - + \ No newline at end of file diff --git a/docs/docs/category/configuration/index.html b/docs/docs/category/configuration/index.html index b75019b0..9ff57335 100644 --- a/docs/docs/category/configuration/index.html +++ b/docs/docs/category/configuration/index.html @@ -1,16 +1,16 @@ - + -Configuration | Oracle Database Metrics Exporter - - +Configuration | Oracle Database Metrics Exporter + + - + \ No newline at end of file diff --git a/docs/docs/category/getting-started/index.html b/docs/docs/category/getting-started/index.html index 84b093af..8fbfffac 100644 --- a/docs/docs/category/getting-started/index.html +++ b/docs/docs/category/getting-started/index.html @@ -1,16 +1,16 @@ - + -Getting Started | Oracle Database Metrics Exporter - - +Getting Started | Oracle Database Metrics Exporter + + - + \ No newline at end of file diff --git a/docs/docs/category/releases/index.html b/docs/docs/category/releases/index.html index ab66b227..8ccce317 100644 --- a/docs/docs/category/releases/index.html +++ b/docs/docs/category/releases/index.html @@ -1,16 +1,16 @@ - + -Releases | Oracle Database Metrics Exporter - - +Releases | Oracle Database Metrics Exporter + + - + \ No newline at end of file diff --git a/docs/docs/configuration/alert-logs/index.html b/docs/docs/configuration/alert-logs/index.html index 728b738a..6f3cb01b 100644 --- a/docs/docs/configuration/alert-logs/index.html +++ b/docs/docs/configuration/alert-logs/index.html @@ -1,22 +1,22 @@ - + -Alert Logs | Oracle Database Metrics Exporter - - +Alert Logs | Oracle Database Metrics Exporter + + -
Skip to main content

Alert logs

+
Version: 2.0.3

Alert logs

Collect export alert logs with a log ingestion tool.

The exporter exports alert log records as a JSON file suitable for collection by a log ingestion tool like Promtail or FluentBit.

Alert logging is configured with the following parameters in the exporter config file:

ParameterDescriptionDefault
log.destinationLog file path/log/alert.log
log.intervalInterval to log records15s
log.disableDisable logging if set to 10

Example alert log YAML configuration:

-
log:
# Path of log file
destination: /opt/exporter/alert.log
# Interval of log updates
interval: 15s
## Set disable to 1 to disable logging
# disable: 0
+
log:
# Path of log file
destination: /opt/exporter/alert.log
# Interval of log updates
interval: 15s
## Set disable to 1 to disable logging
# disable: 0
\ No newline at end of file diff --git a/docs/docs/configuration/azure-vault/index.html b/docs/docs/configuration/azure-vault/index.html index 37449fad..f8c63096 100644 --- a/docs/docs/configuration/azure-vault/index.html +++ b/docs/docs/configuration/azure-vault/index.html @@ -1,17 +1,17 @@ - + -Azure Vault | Oracle Database Metrics Exporter - - +Azure Vault | Oracle Database Metrics Exporter + + -
Skip to main content

Azure Vault

+
Version: 2.0.3

Azure Vault

Securely load database credentials from Azure Vault.

Each database in the config file may be configured to use Azure Vault. To load the database username and/or password from Azure Vault, set the vault.azure property to contain the Azure Vault ID, and secret names for the database username/password:

databases:
mydb:
vault:
azure:
id: <VAULT ID>
usernameSecret: <Secret containing DB username>
passwordSecret: <Secret containing DB password>
@@ -30,6 +30,6 @@

+
\ No newline at end of file diff --git a/docs/docs/configuration/config-file/index.html b/docs/docs/configuration/config-file/index.html index fd822730..c9c1e976 100644 --- a/docs/docs/configuration/config-file/index.html +++ b/docs/docs/configuration/config-file/index.html @@ -1,22 +1,22 @@ - + -Exporter Config File | Oracle Database Metrics Exporter - - +Exporter Config File | Oracle Database Metrics Exporter + + -
Skip to main content

Exporter Config File

+
Version: 2.0.3

Exporter Config File

The recommended way to configure the exporter is with the --config.file argument, specifying a YAML configuration file.

The configuration file contains the following options:

# Example Oracle Database Metrics Exporter Configuration file.
# Environment variables of the form ${VAR_NAME} will be expanded.
# If you include a config value that contains a '$' character, escape that '$' with another '$', e.g.,
# "$test$pwd" => "$$test$$pwd"
# Otherwise, the value will be expanded as an environment variable.

# Example Oracle Database Metrics Exporter Configuration file.
# Environment variables of the form ${VAR_NAME} will be expanded.

databases:
## Path on which metrics will be served
# metricsPath: /metrics
## Database connection information for the "default" database.
default:
## Database username
username: ${DB_USERNAME}
## Database password
password: ${DB_PASSWORD}
## Database password file
## If specified, will load the database password from a file.
# passwordFile: ${DB_PASSWORD_FILE}
## Database connection url
url: localhost:1521/freepdb1

## Metrics query timeout for this database, in seconds
queryTimeout: 5

## Rely on Oracle Database External Authentication by network or OS
# externalAuth: false
## Database role
# role: SYSDBA
## Path to Oracle Database wallet, if using wallet
# tnsAdmin: /path/to/database/wallet

### Connection settings:
### Either the go-sql or Oracle Database connection pool may be used.
### To use the Oracle Database connection pool over the go-sql connection pool,
### set maxIdleConns to zero and configure the pool* settings.

### Connection pooling settings for the go-sql connection pool
## Max open connections for this database using go-sql connection pool
maxOpenConns: 10
## Max idle connections for this database using go-sql connection pool
maxIdleConns: 10

### Connection pooling settings for the Oracle Database connection pool
## Oracle Database connection pool increment.
# poolIncrement: 1
## Oracle Database Connection pool maximum size
# poolMaxConnections: 15
## Oracle Database Connection pool minimum size
# poolMinConnections: 15

## Arbitrary labels to add to each metric scraped from this database
# labels:
# label_name1: label_value1
# label_name2: label_value2

metrics:
## How often to scrape metrics. If not provided, metrics will be scraped on request.
# scrapeInterval: 15s
## Path to default metrics file.
default: default-metrics.toml
## Paths to any custom metrics files
custom:
- custom-metrics-example/custom-metrics.toml

log:
# Path of log file
destination: /opt/alert.log
# Interval of log updates
interval: 15s
## Set disable to 1 to disable logging
# disable: 0

# Optionally configure prometheus webserver
#web:
# listenAddresses: [':9161']
# systemdSocket: true|false
# configFile: /path/to/webconfigfile

Config file in a container image

To add your custom config file to a container image, you can layer the base exporter image and include that config:

-
FROM container-registry.oracle.com/database/observability-exporter:2.0.2
COPY my-exporter-config.yaml /
ENTRYPOINT ["/oracledb_exporter", "--config.file", "/my-exporter-config.yaml"]
+
FROM container-registry.oracle.com/database/observability-exporter:2.0.2
COPY my-exporter-config.yaml /
ENTRYPOINT ["/oracledb_exporter", "--config.file", "/my-exporter-config.yaml"]
\ No newline at end of file diff --git a/docs/docs/configuration/custom-metrics/index.html b/docs/docs/configuration/custom-metrics/index.html index 330aa16a..162c2a15 100644 --- a/docs/docs/configuration/custom-metrics/index.html +++ b/docs/docs/configuration/custom-metrics/index.html @@ -1,17 +1,17 @@ - + -Custom Metrics | Oracle Database Metrics Exporter - - +Custom Metrics | Oracle Database Metrics Exporter + + -
Skip to main content

Custom Metrics

+
Version: 2.0.3

Custom Metrics

The exporter allows definition of arbitrary custom metrics in one or more TOML or YAML files.

To specify custom metrics files exporter, use the metrics configuration in the config file:

@@ -40,6 +40,6 @@

Ex An example of custom metrics for Transacational Event Queues is also provided.

Customize metrics in a container image

If you run the exporter as a container image and want to include your custom metrics in the image itself, you can use the following example Dockerfile to create a new image:

-
FROM container-registry.oracle.com/database/observability-exporter:2.0.2
COPY custom-metrics.toml /
ENTRYPOINT ["/oracledb_exporter", "--custom.metrics", "/custom-metrics.toml"]
+
FROM container-registry.oracle.com/database/observability-exporter:2.0.2
COPY custom-metrics.toml /
ENTRYPOINT ["/oracledb_exporter", "--custom.metrics", "/custom-metrics.toml"]
\ No newline at end of file diff --git a/docs/docs/configuration/multiple-databases/index.html b/docs/docs/configuration/multiple-databases/index.html index fd7da2e1..a40b1dc9 100644 --- a/docs/docs/configuration/multiple-databases/index.html +++ b/docs/docs/configuration/multiple-databases/index.html @@ -1,17 +1,17 @@ - + -Multiple Databases | Oracle Database Metrics Exporter - - +Multiple Databases | Oracle Database Metrics Exporter + + -
Skip to main content

Scraping Multiple Databases

+
Version: 2.0.3

Scraping Multiple Databases

The exporter may be configured to scrape as many databases as needed.

You may scrape as many databases as needed by defining named database configurations in the config file.

If you're connecting to multiple databases using mTLS, see mTLS for multiple databases with Oracle Wallet

@@ -20,6 +20,6 @@

Only scraping metrics from specific databases

By default, metrics are scraped from every connected database. To expose only certain metrics on specific databases, configure the databases property of a metric. The following metric definition will only be scraped from databases "db2" and "db3":

[[metric]]
context = "db_platform"
labels = [ "platform_name" ]
metricsdesc = { value = "Database platform" }
request = '''
SELECT platform_name, 1 as value FROM gv$database
'''
databases = [ "db2", "db3" ]
-

If the databases array is empty or not provided for a metric, that metric will be scraped from all connected databases.

+

If the databases array is empty or not provided for a metric, that metric will be scraped from all connected databases.

\ No newline at end of file diff --git a/docs/docs/configuration/oci-vault/index.html b/docs/docs/configuration/oci-vault/index.html index d2de4084..2646b090 100644 --- a/docs/docs/configuration/oci-vault/index.html +++ b/docs/docs/configuration/oci-vault/index.html @@ -1,17 +1,17 @@ - + -OCI Vault | Oracle Database Metrics Exporter - - +OCI Vault | Oracle Database Metrics Exporter + + -
Skip to main content

Oracle Cloud Infrastructure (OCI) Vault

+
Version: 2.0.3

Oracle Cloud Infrastructure (OCI) Vault

Securely load database credentials from OCI Vault.

Each database in the config file may be configured to use OCI Vault. To load the database username and/or password from OCI Vault, set the vault.oci property to contain the OCI Vault OCID, and secret names for the database username/password:

databases:
mydb:
vault:
oci:
id: <VAULT OCID>
usernameSecret: <Secret containing DB username>
passwordSecret: <Secret containing DB password>
@@ -24,6 +24,6 @@

Note that the process must be running under a user that has the OCI CLI installed and configured correctly to access the desired tenancy and region. The OCI Profile used is DEFAULT.

-

+
\ No newline at end of file diff --git a/docs/docs/configuration/oracle-wallet/index.html b/docs/docs/configuration/oracle-wallet/index.html index e89f4356..be5d0d31 100644 --- a/docs/docs/configuration/oracle-wallet/index.html +++ b/docs/docs/configuration/oracle-wallet/index.html @@ -1,17 +1,17 @@ - + -Oracle Wallet (mTLS) | Oracle Database Metrics Exporter - - +Oracle Wallet (mTLS) | Oracle Database Metrics Exporter + + -
Skip to main content

Using a Wallet

+
Version: 2.0.3

Using a Wallet

For mutual TLS (mTLS) connections, you must use an Oracle Wallet.

If you are using Oracle Autonomous Database with mTLS, for example, you can download and unzip the wallet from the Oracle Cloud Infrastructure (OCI) console.

To configure the exporter to use an Oracle Wallet,

@@ -52,6 +52,6 @@

databases:
db2:
username: ****
password: ****
url: db2_high
queryTimeout: 5
maxOpenConns: 10
maxIdleConns: 10
db1:
username: ****
password: ****
url: db1_high
queryTimeout: 5
maxOpenConns: 10
maxIdleConns: 10

Then, run the exporter with the config file:

-
./oracledb_exporter --config.file=my-config-file.yaml
+
./oracledb_exporter --config.file=my-config-file.yaml
\ No newline at end of file diff --git a/docs/docs/getting-started/basics/index.html b/docs/docs/getting-started/basics/index.html index 1c6d3f5c..10dfa6ef 100644 --- a/docs/docs/getting-started/basics/index.html +++ b/docs/docs/getting-started/basics/index.html @@ -1,17 +1,17 @@ - + -Installation | Oracle Database Metrics Exporter - - +Installation | Oracle Database Metrics Exporter + + -
Skip to main content

Installation

+
Version: 2.0.3

Installation

In this section you will find information on running the exporter.

  • In a container runtime like Docker, Podman, etc
  • @@ -70,6 +70,6 @@

    Docker Compos
  • Exporter
  • Prometheus - try a query for "oracle".
  • Grafana - username is "admin" and password is "grafana". An Oracle Database dashboard is provisioned and configured to use data from the exporter.
  • -

+
\ No newline at end of file diff --git a/docs/docs/getting-started/default-metrics/index.html b/docs/docs/getting-started/default-metrics/index.html index 8d05d69b..d132efb0 100644 --- a/docs/docs/getting-started/default-metrics/index.html +++ b/docs/docs/getting-started/default-metrics/index.html @@ -1,20 +1,20 @@ - + -Default Metrics | Oracle Database Metrics Exporter - - +Default Metrics | Oracle Database Metrics Exporter + + -
Skip to main content

Default Metrics

+
Version: 2.0.3

Default Metrics

The exporter includes default metrics for Oracle Database, and process-specific metrics on the go runtime.

You can find the exporter's metric schema in the Custom Metrics configuration.

The following metrics are included by default. The values given are a sample for a single database, "db1":

-
# HELP oracledb_activity_execute_count Generic counter metric from gv$sysstat view in Oracle.
# TYPE oracledb_activity_execute_count gauge
oracledb_activity_execute_count{database="db1"} 6.212049e+06
# HELP oracledb_activity_parse_count_total Generic counter metric from gv$sysstat view in Oracle.
# TYPE oracledb_activity_parse_count_total gauge
oracledb_activity_parse_count_total{database="db1"} 1.054178e+06
# HELP oracledb_activity_user_commits Generic counter metric from gv$sysstat view in Oracle.
# TYPE oracledb_activity_user_commits gauge
oracledb_activity_user_commits{database="db1"} 86538
# HELP oracledb_activity_user_rollbacks Generic counter metric from gv$sysstat view in Oracle.
# TYPE oracledb_activity_user_rollbacks gauge
oracledb_activity_user_rollbacks{database="db1"} 18
# HELP oracledb_db_platform_value Database platform
# TYPE oracledb_db_platform_value gauge
oracledb_db_platform_value{database="db1",platform_name="Linux OS (AARCH64)"} 1
# HELP oracledb_db_system_value Database system resources metric
# TYPE oracledb_db_system_value gauge
oracledb_db_system_value{database="db1",name="cpu_count"} 2
oracledb_db_system_value{database="db1",name="pga_aggregate_limit"} 2.147483648e+09
oracledb_db_system_value{database="db1",name="sga_max_size"} 1.610612736e+09
# HELP oracledb_dbtype Type of database the exporter is connected to (0=non-CDB, 1=CDB, >1=PDB).
# TYPE oracledb_dbtype gauge
oracledb_dbtype{database="db1"} 3
# HELP oracledb_exporter_build_info A metric with a constant '1' value labeled by version, revision, branch, goversion from which oracledb_exporter was built, and the goos and goarch for the build.
# TYPE oracledb_exporter_build_info gauge
oracledb_exporter_build_info{branch="",goarch="arm64",goos="darwin",goversion="go1.24.5",revision="unknown",tags="unknown",version=""} 1
# HELP oracledb_exporter_last_scrape_duration_seconds Duration of the last scrape of metrics from Oracle DB.
# TYPE oracledb_exporter_last_scrape_duration_seconds gauge
oracledb_exporter_last_scrape_duration_seconds 0.05714725
# HELP oracledb_exporter_last_scrape_error Whether the last scrape of metrics from Oracle DB resulted in an error (1 for error, 0 for success).
# TYPE oracledb_exporter_last_scrape_error gauge
oracledb_exporter_last_scrape_error 0
# HELP oracledb_exporter_scrapes_total Total number of times Oracle DB was scraped for metrics.
# TYPE oracledb_exporter_scrapes_total counter
oracledb_exporter_scrapes_total 2
# HELP oracledb_process_count Gauge metric with count of processes.
# TYPE oracledb_process_count gauge
oracledb_process_count{database="db1"} 85
# HELP oracledb_sessions_value Gauge metric with count of sessions by status and type.
# TYPE oracledb_sessions_value gauge
oracledb_sessions_value{database="db1",status="ACTIVE",type="BACKGROUND"} 61
oracledb_sessions_value{database="db1",status="ACTIVE",type="USER"} 2
oracledb_sessions_value{database="db1",status="INACTIVE",type="USER"} 19
# HELP oracledb_tablespace_bytes Generic counter metric of tablespaces bytes in Oracle.
# TYPE oracledb_tablespace_bytes gauge
oracledb_tablespace_bytes{database="db1",tablespace="SYSAUX",type="PERMANENT"} 7.7430784e+08
oracledb_tablespace_bytes{database="db1",tablespace="SYSTEM",type="PERMANENT"} 3.18963712e+08
oracledb_tablespace_bytes{database="db1",tablespace="TEMP",type="TEMPORARY"} 7.340032e+06
oracledb_tablespace_bytes{database="db1",tablespace="UNDOTBS1",type="UNDO"} 2.1364736e+07
oracledb_tablespace_bytes{database="db1",tablespace="USERS",type="PERMANENT"} 7.340032e+06
# HELP oracledb_tablespace_free Generic counter metric of tablespaces free bytes in Oracle.
# TYPE oracledb_tablespace_free gauge
oracledb_tablespace_free{database="db1",tablespace="SYSAUX",type="PERMANENT"} 7.5289739264e+10
oracledb_tablespace_free{database="db1",tablespace="SYSTEM",type="PERMANENT"} 7.524491264e+10
oracledb_tablespace_free{database="db1",tablespace="TEMP",type="TEMPORARY"} 1.3631488e+07
oracledb_tablespace_free{database="db1",tablespace="UNDOTBS1",type="UNDO"} 3.518435069952e+13
oracledb_tablespace_free{database="db1",tablespace="USERS",type="PERMANENT"} 3.4352381952e+10
# HELP oracledb_tablespace_max_bytes Generic counter metric of tablespaces max bytes in Oracle.
# TYPE oracledb_tablespace_max_bytes gauge
oracledb_tablespace_max_bytes{database="db1",tablespace="SYSAUX",type="PERMANENT"} 7.6064047104e+10
oracledb_tablespace_max_bytes{database="db1",tablespace="SYSTEM",type="PERMANENT"} 7.5563876352e+10
oracledb_tablespace_max_bytes{database="db1",tablespace="TEMP",type="TEMPORARY"} 2.097152e+07
oracledb_tablespace_max_bytes{database="db1",tablespace="UNDOTBS1",type="UNDO"} 3.5184372064256e+13
oracledb_tablespace_max_bytes{database="db1",tablespace="USERS",type="PERMANENT"} 3.4359721984e+10
# HELP oracledb_tablespace_used_percent Gauge metric showing as a percentage of how much of the tablespace has been used.
# TYPE oracledb_tablespace_used_percent gauge
oracledb_tablespace_used_percent{database="db1",tablespace="SYSAUX",type="PERMANENT"} 1.0179682379262742
oracledb_tablespace_used_percent{database="db1",tablespace="SYSTEM",type="PERMANENT"} 0.4221113677574824
oracledb_tablespace_used_percent{database="db1",tablespace="TEMP",type="TEMPORARY"} 0.35
oracledb_tablespace_used_percent{database="db1",tablespace="UNDOTBS1",type="UNDO"} 6.072223190734319e-05
oracledb_tablespace_used_percent{database="db1",tablespace="USERS",type="PERMANENT"} 0.021362314873845517
# HELP oracledb_top_sql_elapsed SQL statement elapsed time running
# TYPE oracledb_top_sql_elapsed gauge
oracledb_top_sql_elapsed{database="db1",sql_id="0npm6czzaj44m",sql_text="SELECT idx_objn FROM vecsys.vector$index WHERE JSON_VAL"} 6.118614
oracledb_top_sql_elapsed{database="db1",sql_id="0sbbcuruzd66f",sql_text="select /*+ rule */ bucket_cnt, row_cnt, cache_cnt, null"} 1.538687
oracledb_top_sql_elapsed{database="db1",sql_id="121ffmrc95v7g",sql_text="select i.obj#,i.ts#,i.file#,i.block#,i.intcols,i.type#,"} 2.200984
oracledb_top_sql_elapsed{database="db1",sql_id="61znfd8fvgha6",sql_text="SELECT new.sql_seq, old.plan_hash_value, sqlset_row(ne"} 2.628263
oracledb_top_sql_elapsed{database="db1",sql_id="68dw2nt8wtunk",sql_text="select originating_timestamp, module_id, execution_cont"} 2.296924
oracledb_top_sql_elapsed{database="db1",sql_id="9bd61v53p81sk",sql_text="begin prvt_hdm.auto_execute( :dbid , :inst_num , :end_s"} 1.67611
oracledb_top_sql_elapsed{database="db1",sql_id="aba13jkkk3fts",sql_text="SELECT idx_objn, json_value(IDX_SPARE2, '$.counter') FR"} 3.010397
oracledb_top_sql_elapsed{database="db1",sql_id="afcz0dh295hzp",sql_text=" SELECT /*+ first_rows(1) */ sql_id, force_matching_sig"} 2.246092
oracledb_top_sql_elapsed{database="db1",sql_id="ampw9ddqufjd3",sql_text="begin /*KAPI:capture*/ dbms_auto_index_internal.capture"} 4.102646
oracledb_top_sql_elapsed{database="db1",sql_id="avzy19hxu6gg4",sql_text="SELECT VALUE(P) FROM TABLE(DBMS_SQLTUNE.SELECT_CURSOR_C"} 2.564301
oracledb_top_sql_elapsed{database="db1",sql_id="b39m8n96gxk7c",sql_text="call dbms_autotask_prvt.run_autotask ( :0,:1 )"} 4.418653
oracledb_top_sql_elapsed{database="db1",sql_id="bj9ajtpfh9f41",sql_text=" declare purge_scn "} 6.425015
oracledb_top_sql_elapsed{database="db1",sql_id="bq819r502v7u2",sql_text="select originating_timestamp, module_id, execution_cont"} 3.676572
oracledb_top_sql_elapsed{database="db1",sql_id="ddrfu7d7hbkym",sql_text=" select count(1), partition_id "} 1.870379
oracledb_top_sql_elapsed{database="db1",sql_id="f6w8rqdkx0bnv",sql_text="SELECT * FROM ( SELECT /*+ ordered use_nl(o c cu h) ind"} 1.895947
# HELP oracledb_up Whether the Oracle database server is up.
# TYPE oracledb_up gauge
oracledb_up{database="db1"} 1
# HELP oracledb_wait_time_administrative counter metric from system_wait_class view in Oracle.
# TYPE oracledb_wait_time_administrative counter
oracledb_wait_time_administrative{database="db1"} 0
# HELP oracledb_wait_time_application counter metric from system_wait_class view in Oracle.
# TYPE oracledb_wait_time_application counter
oracledb_wait_time_application{database="db1"} 0.73
# HELP oracledb_wait_time_commit counter metric from system_wait_class view in Oracle.
# TYPE oracledb_wait_time_commit counter
oracledb_wait_time_commit{database="db1"} 0.17
# HELP oracledb_wait_time_concurrency counter metric from system_wait_class view in Oracle.
# TYPE oracledb_wait_time_concurrency counter
oracledb_wait_time_concurrency{database="db1"} 6.8
# HELP oracledb_wait_time_configuration counter metric from system_wait_class view in Oracle.
# TYPE oracledb_wait_time_configuration counter
oracledb_wait_time_configuration{database="db1"} 19.71
# HELP oracledb_wait_time_network counter metric from system_wait_class view in Oracle.
# TYPE oracledb_wait_time_network counter
oracledb_wait_time_network{database="db1"} 0.29
# HELP oracledb_wait_time_other counter metric from system_wait_class view in Oracle.
# TYPE oracledb_wait_time_other counter
oracledb_wait_time_other{database="db1"} 6.02
# HELP oracledb_wait_time_scheduler counter metric from system_wait_class view in Oracle.
# TYPE oracledb_wait_time_scheduler counter
oracledb_wait_time_scheduler{database="db1"} 4.01
# HELP oracledb_wait_time_system_io counter metric from system_wait_class view in Oracle.
# TYPE oracledb_wait_time_system_io counter
oracledb_wait_time_system_io{database="db1"} 0.13
# HELP oracledb_wait_time_user_io counter metric from system_wait_class view in Oracle.
# TYPE oracledb_wait_time_user_io counter
oracledb_wait_time_user_io{database="db1"} 12.38
+
# HELP oracledb_activity_execute_count Generic counter metric from gv$sysstat view in Oracle.
# TYPE oracledb_activity_execute_count gauge
oracledb_activity_execute_count{database="db1"} 6.212049e+06
# HELP oracledb_activity_parse_count_total Generic counter metric from gv$sysstat view in Oracle.
# TYPE oracledb_activity_parse_count_total gauge
oracledb_activity_parse_count_total{database="db1"} 1.054178e+06
# HELP oracledb_activity_user_commits Generic counter metric from gv$sysstat view in Oracle.
# TYPE oracledb_activity_user_commits gauge
oracledb_activity_user_commits{database="db1"} 86538
# HELP oracledb_activity_user_rollbacks Generic counter metric from gv$sysstat view in Oracle.
# TYPE oracledb_activity_user_rollbacks gauge
oracledb_activity_user_rollbacks{database="db1"} 18
# HELP oracledb_db_platform_value Database platform
# TYPE oracledb_db_platform_value gauge
oracledb_db_platform_value{database="db1",platform_name="Linux OS (AARCH64)"} 1
# HELP oracledb_db_system_value Database system resources metric
# TYPE oracledb_db_system_value gauge
oracledb_db_system_value{database="db1",name="cpu_count"} 2
oracledb_db_system_value{database="db1",name="pga_aggregate_limit"} 2.147483648e+09
oracledb_db_system_value{database="db1",name="sga_max_size"} 1.610612736e+09
# HELP oracledb_dbtype Type of database the exporter is connected to (0=non-CDB, 1=CDB, >1=PDB).
# TYPE oracledb_dbtype gauge
oracledb_dbtype{database="db1"} 3
# HELP oracledb_exporter_build_info A metric with a constant '1' value labeled by version, revision, branch, goversion from which oracledb_exporter was built, and the goos and goarch for the build.
# TYPE oracledb_exporter_build_info gauge
oracledb_exporter_build_info{branch="",goarch="arm64",goos="darwin",goversion="go1.24.5",revision="unknown",tags="unknown",version=""} 1
# HELP oracledb_exporter_last_scrape_duration_seconds Duration of the last scrape of metrics from Oracle DB.
# TYPE oracledb_exporter_last_scrape_duration_seconds gauge
oracledb_exporter_last_scrape_duration_seconds 0.05714725
# HELP oracledb_exporter_last_scrape_error Whether the last scrape of metrics from Oracle DB resulted in an error (1 for error, 0 for success).
# TYPE oracledb_exporter_last_scrape_error gauge
oracledb_exporter_last_scrape_error 0
# HELP oracledb_exporter_scrapes_total Total number of times Oracle DB was scraped for metrics.
# TYPE oracledb_exporter_scrapes_total counter
oracledb_exporter_scrapes_total 2
# HELP oracledb_process_count Gauge metric with count of processes.
# TYPE oracledb_process_count gauge
oracledb_process_count{database="db1"} 85
# HELP oracledb_sessions_value Gauge metric with count of sessions by status and type.
# TYPE oracledb_sessions_value gauge
oracledb_sessions_value{database="db1",status="ACTIVE",type="BACKGROUND"} 61
oracledb_sessions_value{database="db1",status="ACTIVE",type="USER"} 2
oracledb_sessions_value{database="db1",status="INACTIVE",type="USER"} 19
# HELP oracledb_tablespace_bytes Generic counter metric of tablespaces bytes in Oracle.
# TYPE oracledb_tablespace_bytes gauge
oracledb_tablespace_bytes{database="db1",tablespace="SYSAUX",type="PERMANENT"} 7.7430784e+08
oracledb_tablespace_bytes{database="db1",tablespace="SYSTEM",type="PERMANENT"} 3.18963712e+08
oracledb_tablespace_bytes{database="db1",tablespace="TEMP",type="TEMPORARY"} 7.340032e+06
oracledb_tablespace_bytes{database="db1",tablespace="UNDOTBS1",type="UNDO"} 2.1364736e+07
oracledb_tablespace_bytes{database="db1",tablespace="USERS",type="PERMANENT"} 7.340032e+06
# HELP oracledb_tablespace_free Generic counter metric of tablespaces free bytes in Oracle.
# TYPE oracledb_tablespace_free gauge
oracledb_tablespace_free{database="db1",tablespace="SYSAUX",type="PERMANENT"} 7.5289739264e+10
oracledb_tablespace_free{database="db1",tablespace="SYSTEM",type="PERMANENT"} 7.524491264e+10
oracledb_tablespace_free{database="db1",tablespace="TEMP",type="TEMPORARY"} 1.3631488e+07
oracledb_tablespace_free{database="db1",tablespace="UNDOTBS1",type="UNDO"} 3.518435069952e+13
oracledb_tablespace_free{database="db1",tablespace="USERS",type="PERMANENT"} 3.4352381952e+10
# HELP oracledb_tablespace_max_bytes Generic counter metric of tablespaces max bytes in Oracle.
# TYPE oracledb_tablespace_max_bytes gauge
oracledb_tablespace_max_bytes{database="db1",tablespace="SYSAUX",type="PERMANENT"} 7.6064047104e+10
oracledb_tablespace_max_bytes{database="db1",tablespace="SYSTEM",type="PERMANENT"} 7.5563876352e+10
oracledb_tablespace_max_bytes{database="db1",tablespace="TEMP",type="TEMPORARY"} 2.097152e+07
oracledb_tablespace_max_bytes{database="db1",tablespace="UNDOTBS1",type="UNDO"} 3.5184372064256e+13
oracledb_tablespace_max_bytes{database="db1",tablespace="USERS",type="PERMANENT"} 3.4359721984e+10
# HELP oracledb_tablespace_used_percent Gauge metric showing as a percentage of how much of the tablespace has been used.
# TYPE oracledb_tablespace_used_percent gauge
oracledb_tablespace_used_percent{database="db1",tablespace="SYSAUX",type="PERMANENT"} 1.0179682379262742
oracledb_tablespace_used_percent{database="db1",tablespace="SYSTEM",type="PERMANENT"} 0.4221113677574824
oracledb_tablespace_used_percent{database="db1",tablespace="TEMP",type="TEMPORARY"} 0.35
oracledb_tablespace_used_percent{database="db1",tablespace="UNDOTBS1",type="UNDO"} 6.072223190734319e-05
oracledb_tablespace_used_percent{database="db1",tablespace="USERS",type="PERMANENT"} 0.021362314873845517
# HELP oracledb_top_sql_elapsed SQL statement elapsed time running
# TYPE oracledb_top_sql_elapsed gauge
oracledb_top_sql_elapsed{database="db1",sql_id="0npm6czzaj44m",sql_text="SELECT idx_objn FROM vecsys.vector$index WHERE JSON_VAL"} 6.118614
oracledb_top_sql_elapsed{database="db1",sql_id="0sbbcuruzd66f",sql_text="select /*+ rule */ bucket_cnt, row_cnt, cache_cnt, null"} 1.538687
oracledb_top_sql_elapsed{database="db1",sql_id="121ffmrc95v7g",sql_text="select i.obj#,i.ts#,i.file#,i.block#,i.intcols,i.type#,"} 2.200984
oracledb_top_sql_elapsed{database="db1",sql_id="61znfd8fvgha6",sql_text="SELECT new.sql_seq, old.plan_hash_value, sqlset_row(ne"} 2.628263
oracledb_top_sql_elapsed{database="db1",sql_id="68dw2nt8wtunk",sql_text="select originating_timestamp, module_id, execution_cont"} 2.296924
oracledb_top_sql_elapsed{database="db1",sql_id="9bd61v53p81sk",sql_text="begin prvt_hdm.auto_execute( :dbid , :inst_num , :end_s"} 1.67611
oracledb_top_sql_elapsed{database="db1",sql_id="aba13jkkk3fts",sql_text="SELECT idx_objn, json_value(IDX_SPARE2, '$.counter') FR"} 3.010397
oracledb_top_sql_elapsed{database="db1",sql_id="afcz0dh295hzp",sql_text=" SELECT /*+ first_rows(1) */ sql_id, force_matching_sig"} 2.246092
oracledb_top_sql_elapsed{database="db1",sql_id="ampw9ddqufjd3",sql_text="begin /*KAPI:capture*/ dbms_auto_index_internal.capture"} 4.102646
oracledb_top_sql_elapsed{database="db1",sql_id="avzy19hxu6gg4",sql_text="SELECT VALUE(P) FROM TABLE(DBMS_SQLTUNE.SELECT_CURSOR_C"} 2.564301
oracledb_top_sql_elapsed{database="db1",sql_id="b39m8n96gxk7c",sql_text="call dbms_autotask_prvt.run_autotask ( :0,:1 )"} 4.418653
oracledb_top_sql_elapsed{database="db1",sql_id="bj9ajtpfh9f41",sql_text=" declare purge_scn "} 6.425015
oracledb_top_sql_elapsed{database="db1",sql_id="bq819r502v7u2",sql_text="select originating_timestamp, module_id, execution_cont"} 3.676572
oracledb_top_sql_elapsed{database="db1",sql_id="ddrfu7d7hbkym",sql_text=" select count(1), partition_id "} 1.870379
oracledb_top_sql_elapsed{database="db1",sql_id="f6w8rqdkx0bnv",sql_text="SELECT * FROM ( SELECT /*+ ordered use_nl(o c cu h) ind"} 1.895947
# HELP oracledb_up Whether the Oracle database server is up.
# TYPE oracledb_up gauge
oracledb_up{database="db1"} 1
# HELP oracledb_wait_time_administrative counter metric from system_wait_class view in Oracle.
# TYPE oracledb_wait_time_administrative counter
oracledb_wait_time_administrative{database="db1"} 0
# HELP oracledb_wait_time_application counter metric from system_wait_class view in Oracle.
# TYPE oracledb_wait_time_application counter
oracledb_wait_time_application{database="db1"} 0.73
# HELP oracledb_wait_time_commit counter metric from system_wait_class view in Oracle.
# TYPE oracledb_wait_time_commit counter
oracledb_wait_time_commit{database="db1"} 0.17
# HELP oracledb_wait_time_concurrency counter metric from system_wait_class view in Oracle.
# TYPE oracledb_wait_time_concurrency counter
oracledb_wait_time_concurrency{database="db1"} 6.8
# HELP oracledb_wait_time_configuration counter metric from system_wait_class view in Oracle.
# TYPE oracledb_wait_time_configuration counter
oracledb_wait_time_configuration{database="db1"} 19.71
# HELP oracledb_wait_time_network counter metric from system_wait_class view in Oracle.
# TYPE oracledb_wait_time_network counter
oracledb_wait_time_network{database="db1"} 0.29
# HELP oracledb_wait_time_other counter metric from system_wait_class view in Oracle.
# TYPE oracledb_wait_time_other counter
oracledb_wait_time_other{database="db1"} 6.02
# HELP oracledb_wait_time_scheduler counter metric from system_wait_class view in Oracle.
# TYPE oracledb_wait_time_scheduler counter
oracledb_wait_time_scheduler{database="db1"} 4.01
# HELP oracledb_wait_time_system_io counter metric from system_wait_class view in Oracle.
# TYPE oracledb_wait_time_system_io counter
oracledb_wait_time_system_io{database="db1"} 0.13
# HELP oracledb_wait_time_user_io counter metric from system_wait_class view in Oracle.
# TYPE oracledb_wait_time_user_io counter
oracledb_wait_time_user_io{database="db1"} 12.38
\ No newline at end of file diff --git a/docs/docs/getting-started/grafana-dashboards/index.html b/docs/docs/getting-started/grafana-dashboards/index.html index 932037ac..127cc995 100644 --- a/docs/docs/getting-started/grafana-dashboards/index.html +++ b/docs/docs/getting-started/grafana-dashboards/index.html @@ -1,20 +1,20 @@ - + -Grafana Dashboards | Oracle Database Metrics Exporter - - +Grafana Dashboards | Oracle Database Metrics Exporter + + -
Skip to main content

Grafana Dashboards

+
Version: 2.0.3

Grafana Dashboards

Sample Grafana dashboards are included with the exporter.

A sample Grafana dashboard definition is provided in this directory. You can import these dashboards into your Grafana instance, and set it to use the Prometheus datasource that you have defined for the Prometheus instance that is collecting metrics from the exporter.

The dashboard shows some basic information, as shown below:

-

Oracle Database Dashboard

+

Oracle Database Dashboard

\ No newline at end of file diff --git a/docs/docs/getting-started/kubernetes/index.html b/docs/docs/getting-started/kubernetes/index.html index 91116f1e..5a60d77e 100644 --- a/docs/docs/getting-started/kubernetes/index.html +++ b/docs/docs/getting-started/kubernetes/index.html @@ -1,17 +1,17 @@ - + -Kubernetes | Oracle Database Metrics Exporter - - +Kubernetes | Oracle Database Metrics Exporter + + -
Skip to main content

Kubernetes

+
Version: 2.0.3

Kubernetes

You can run the exporter in Kubernetes using provided manifests.

To run the exporter in Kubernetes, you must complete the following steps. All steps must be completed in the same Kunernetes namespace. The examples below assume you want to use a namespace called exporter, you must change the commands if you wish to use a different namespace.

Create a secret with credentials for connecting to the Oracle Database

@@ -47,6 +47,6 @@

kubectl apply -f metrics-service-monitor.yaml

Configure a Prometheus target (optional)

You may need to update your Prometheus configuration to add a target. If so, you can use this example job definition as a guide:

-
  - job_name: 'oracle-exporter'
metrics_path: '/metrics'
scrape_interval: 15s
scrape_timeout: 10s
static_configs:
- targets:
- metrics-exporter.exporter.svc.cluster.local:9161
+
  - job_name: 'oracle-exporter'
metrics_path: '/metrics'
scrape_interval: 15s
scrape_timeout: 10s
static_configs:
- targets:
- metrics-exporter.exporter.svc.cluster.local:9161
\ No newline at end of file diff --git a/docs/docs/intro/index.html b/docs/docs/intro/index.html index ed537875..0d353518 100644 --- a/docs/docs/intro/index.html +++ b/docs/docs/intro/index.html @@ -1,17 +1,17 @@ - + -OpenTelemetry Metrics for Oracle Database | Oracle Database Metrics Exporter - - +OpenTelemetry Metrics for Oracle Database | Oracle Database Metrics Exporter + + -
Skip to main content

OpenTelemetry Metrics for Oracle Database

+
Version: 2.0.3

OpenTelemetry Metrics for Oracle Database

This project aims to provide observability for the Oracle Database so that users can understand performance and diagnose issues easily across applications and database. Over time, this project will provide not just metrics, but also logging and tracing support, and integration into popular frameworks like Spring Boot. The project aims to deliver functionality to support both cloud and on-premises databases, including those running in Kubernetes and containers.

Contributions are welcome - please see contributing.

Oracle Database Dashboard

@@ -34,6 +34,6 @@

Main Features<

From the v1.0 release onwards, this project provides a Prometheus exporter for Oracle Database based in part on a Prometheus exporter created by Seth Miller. This project includes changes to comply with various Oracle standards and policies, as well as new features.

Seth has archived his exporter as of Feb 13, 2025 and added a note encouraging people to check out ours instead. We wanted to extend a huge "Thank You!" to Seth for the work he did on that exporter, and his contributions to the Oracle and open source communities!

-

+
\ No newline at end of file diff --git a/docs/docs/next/advanced/development/index.html b/docs/docs/next/advanced/development/index.html new file mode 100644 index 00000000..0c0cfba4 --- /dev/null +++ b/docs/docs/next/advanced/development/index.html @@ -0,0 +1,42 @@ + + + + + +Development | Oracle Database Metrics Exporter + + + + + + + +
Skip to main content
Version: Next

Development

+

The exporter is a Go program using the Prometheus SDK.

+

External contributions are welcome, see CONTRIBUTING for details.

+

The exporter initialization is as follows:

+
    +
  • Parse flags options and configuration properties
  • +
  • Load the default toml file (default-metrics.toml) and store each metric in a Metric struct
  • +
  • Load the custom toml file (if a custom toml file is given)
  • +
  • Create an Exporter object
  • +
  • Register exporter in prometheus library
  • +
  • Launching a web server to handle incoming requests
  • +
  • Attempt connection to any configured Oracle Database servers
  • +
+

These operations are mainly done in the main function.

+

After this initialization phase, the exporter will wait for the arrival of a request.

+

Each time, it will iterate over the content of the metricsToScrape structure (in the function scrape func (e * Export) scrape (ch chan <- prometheus.Metric)).

+

For each element (of Metric type), a call to the ScrapeMetric function will be made which will itself make a call to the ScrapeGenericValues function.

+

The ScrapeGenericValues function will read the information from the Metric structure and, depending on the parameters, will generate the metrics to return. In particular, it will use the GeneratePrometheusMetrics function which will make SQL calls to the database.

+

Docker/container build

+

To build a container image, run the following command:

+
make docker
+

For ARM:

+
make docker-arm
+

Building Binaries

+

Run build:

+
make go-build
+

This will create binaries and archives inside the dist folder for the building operating system.

+ + \ No newline at end of file diff --git a/docs/docs/next/advanced/go-runtime/index.html b/docs/docs/next/advanced/go-runtime/index.html new file mode 100644 index 00000000..174b0929 --- /dev/null +++ b/docs/docs/next/advanced/go-runtime/index.html @@ -0,0 +1,23 @@ + + + + + +Configuring the Go Runtime | Oracle Database Metrics Exporter + + + + + + + +
Skip to main content
Version: Next

Exporter Go Runtime

+

If you are running in an environment with limited memory, or you are running a large number of exporters, you may want to control the exporter's usage of memory.

+

Under normal circumstances, the exporter process will retain OS memory that was used by the Go garbage collector but is no longer needed, in case it may be needed again in the future, unless the host OS is under memory pressure. The result of this behavior (which is the normal behavior of the Go runtime) is that the resident set size will not decrease until the host OS memory is almost all used. Under most circumstances, this will not cause any issues, but if you are in an environment where you need to conserve memory, the following options are provided:

+
    +
  • You may set the FREE_INTERVAL environment variable to a Go duration string, e.g., 60s and run the exporter in debug mode by setting the GODEBUG environment variable to a value including madvdontneed=1, e.g., GODEBUG=gctrace=1,madvdontneed=1. The exporter will call the FreeOSMemory() at the specified interval. This tells the Go runtime to attempt to release memory which is no longer needed. Please note that this does not guarantee that the memory will be released to the OS, but over time you should see the RSS shrink sooner than without these settings.
  • +
  • You may set the RESTART_INTERVAL environment variable to a Go duration string, e.g., 10m. The exporter will restart its own process at the specified iterval (by calling the OS exec syscall). As no new process is created, the process identifier (PID) does not change, but the machine code, data, heap, and stack of the process are replaced by those of the new program (source: Wikipedia). This has the side effect of freeing the resident set, so that it will return to its original size.
  • +
  • In addition to these, you may also set GOMAXPROCS, GOGC, and GOMEMLIMIT (see documentation) to further limit the amount of resources that the Go runtime may use.
  • +
+ + \ No newline at end of file diff --git a/docs/docs/next/advanced/txeventq/index.html b/docs/docs/next/advanced/txeventq/index.html new file mode 100644 index 00000000..59045ca9 --- /dev/null +++ b/docs/docs/next/advanced/txeventq/index.html @@ -0,0 +1,44 @@ + + + + + +Monitoring TxEventQ | Oracle Database Metrics Exporter + + + + + + + +
Skip to main content
Version: Next

Monitoring Transactional Event Queues

+

Oracle Transactional Event Queues ("TxEventQ") is a fault-tolerant, scalable, real-time messaging backbone offered by converged Oracle Database that allows you to build an enterprise-class event-driven architectures.

+

Access to the real-time broker, producer, and consumer metrics in a single dashboard and receiving alerts for issues allows teams to understand the state of their system.

+

The exporter includes a set of metrics for monitoring TxEventQ and a pre-built Grafana dashboard.

+
+

Note: The metrics are written for Oracle Database 21c or later.

+
+

How to create some traffic with PL/SQL

+

If you need to create a topic to monitor, you can use these statements to create and start a topic, and create a subscriber:

+
declare
subscriber sys.aq$_agent;
begin
-- create the topic
dbms_aqadm.create_transactional_event_queue(
queue_name => 'my_topic',
multiple_consumers => true -- true makes a pub/sub topic
);

-- start the topic
dbms_aqadm.start_queue(
queue_name => 'my_topic'
);

-- create a subscriber
dbms_aqadm.add_subscriber(
queue_name => 'my_teq',
subscriber => sys.aq$_agent(
'my_subscriber', -- the subscriber name
null, -- address, only used for notifications
0 -- protocol
),
rule => 'correlation = ''my_subscriber'''
);
end;
+

You can produce a message with these commands:

+
declare
enqueue_options dbms_aq.enqueue_options_t;
message_properties dbms_aq.message_properties_t;
message_handle raw(16);
message SYS.AQ$_JMS_TEXT_MESSAGE;
begin
-- create the message payload
message := SYS.AQ$_JMS_TEXT_MESSAGE.construct;
message.set_text('{"orderid": 12345, "username": "Jessica Smith"}');

-- set the consumer name
message_properties.correlation := 'my_subscriber';

-- enqueue the message
dbms_aq.enqueue(
queue_name => 'my_topic',
enqueue_options => enqueue_options,
message_properties => message_properties,
payload => message,
msgid => message_handle);

-- commit the transaction
commit;
end;
+

How to create some traffic with Java (Spring Boot)

+

A simple load generator is provided in this directory which you can use to create some traffic so you can experiment with the sample dashboard.

+

To run the sample, first update application.yaml with the correct IP address for your database, then start the application as follows:

+
mvn spring-boot:run
+

The application will create ten queues names TOPIC_0 through TOPIC_9 and randomly produce and consume messages on those queues. The example dashboard shown below was monitoring traffic produced using this application.

+

Metrics definitions

+

The metrics definitions are provided in this file. You need to provide this file to the exporter, e.g., by adding it to your container image, or creating a Kubernetes config map containing the file and mounting that config map as a volume in your deployment. You also need to set the CUSTOM_METRICS environment variable to the location of this file.

+

Additional database permissions

+

The database user that the exporter uses to connect to the database will also need additional permissions, which can be granted with these statements. This example assumes the exporter connects with the username "exporter":

+
grant execute on dbms_aq to exporter;
grant execute on dbms_aqadm to exporter;
grant execute on dbms_aqin to exporter;
grant execute on dbms_aqjms_internal to exporter;
grant execute on dbms_teqk to exporter;
grant execute on DBMS_RESOURCE_MANAGER to exporter;
grant select_catalog_role to exporter;
grant select on sys.aq$_queue_shards to exporter;
grant select on user_queue_partition_assignment_table to exporter;
+

Grafana dashboard

+

A Grafana dashboard for Transactional Event Queues is provided in this file. This can be imported into your Grafana environment. Choose the Prometheus datasource that is collecting metrics from the exporter.

+
+

Note: You may not see any activity on the dashboard unless there are clients producing and consuming messages from topics.

+
+

The dashboard will look like this:

+

Oracle Database Dashboard

+ + \ No newline at end of file diff --git a/docs/docs/next/category/advanced/index.html b/docs/docs/next/category/advanced/index.html new file mode 100644 index 00000000..e53fe9a5 --- /dev/null +++ b/docs/docs/next/category/advanced/index.html @@ -0,0 +1,16 @@ + + + + + +Advanced | Oracle Database Metrics Exporter + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/next/category/configuration/index.html b/docs/docs/next/category/configuration/index.html new file mode 100644 index 00000000..d33af8cc --- /dev/null +++ b/docs/docs/next/category/configuration/index.html @@ -0,0 +1,16 @@ + + + + + +Configuration | Oracle Database Metrics Exporter + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/next/category/getting-started/index.html b/docs/docs/next/category/getting-started/index.html new file mode 100644 index 00000000..55e9c382 --- /dev/null +++ b/docs/docs/next/category/getting-started/index.html @@ -0,0 +1,16 @@ + + + + + +Getting Started | Oracle Database Metrics Exporter + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/next/category/releases/index.html b/docs/docs/next/category/releases/index.html new file mode 100644 index 00000000..e9318398 --- /dev/null +++ b/docs/docs/next/category/releases/index.html @@ -0,0 +1,16 @@ + + + + + +Releases | Oracle Database Metrics Exporter + + + + + + + +
Skip to main content
Version: Next

Releases

Information on the exporter releases, changelog, and roadmap.

+ + \ No newline at end of file diff --git a/docs/docs/next/configuration/alert-logs/index.html b/docs/docs/next/configuration/alert-logs/index.html new file mode 100644 index 00000000..4ea2af0c --- /dev/null +++ b/docs/docs/next/configuration/alert-logs/index.html @@ -0,0 +1,22 @@ + + + + + +Alert Logs | Oracle Database Metrics Exporter + + + + + + + +
Skip to main content
Version: Next

Alert logs

+

Collect export alert logs with a log ingestion tool.

+

The exporter exports alert log records as a JSON file suitable for collection by a log ingestion tool like Promtail or FluentBit.

+

Alert logging is configured with the following parameters in the exporter config file:

+
ParameterDescriptionDefault
log.destinationLog file path/log/alert.log
log.intervalInterval to log records15s
log.disableDisable logging if set to 10
+

Example alert log YAML configuration:

+
log:
# Path of log file
destination: /opt/exporter/alert.log
# Interval of log updates
interval: 15s
## Set disable to 1 to disable logging
# disable: 0
+ + \ No newline at end of file diff --git a/docs/docs/next/configuration/azure-vault/index.html b/docs/docs/next/configuration/azure-vault/index.html new file mode 100644 index 00000000..1aca1298 --- /dev/null +++ b/docs/docs/next/configuration/azure-vault/index.html @@ -0,0 +1,35 @@ + + + + + +Azure Vault | Oracle Database Metrics Exporter + + + + + + + +
Skip to main content
Version: Next

Azure Vault

+

Securely load database credentials from Azure Vault.

+

Each database in the config file may be configured to use Azure Vault. To load the database username and/or password from Azure Vault, set the vault.azure property to contain the Azure Vault ID, and secret names for the database username/password:

+
databases:
mydb:
vault:
azure:
id: <VAULT ID>
usernameSecret: <Secret containing DB username>
passwordSecret: <Secret containing DB password>
+

Authentication

+

If you are running the exporter outside Azure, we recommend using application service principal.

+

If you are running the exporter inside Azure, we recommend using a managed identity.

+

You should set the following additional environment variables to allow the exporter to authenticate to Azure:

+
    +
  • AZURE_TENANT_ID should be set to your tenant ID
  • +
  • AZURE_CLIENT_ID should be set to the client ID to authenticate to Azure
  • +
  • AZURE_CLIENT_SECRET should be set to the client secret to authenticate to Azure
  • +
+

Azure Vault CLI Configuration (without exporter config file)

+

If using the default database with CLI parameters, the exporter will read the database username and password from secrets stored in Azure Key Vault if you set these environment variables:

+
    +
  • AZ_VAULT_ID should be set to the ID of the Azure Key Vault that you wish to use
  • +
  • AZ_VAULT_USERNAME_SECRET should be set to the name of the secret in the Azure Key Vault which contains the database username
  • +
  • AZ_VAULT_PASSWORD_SECRET should be set to the name of the secret in the Azure Key Vault which contains the database password
  • +
+ + \ No newline at end of file diff --git a/docs/docs/next/configuration/config-file/index.html b/docs/docs/next/configuration/config-file/index.html new file mode 100644 index 00000000..324ef296 --- /dev/null +++ b/docs/docs/next/configuration/config-file/index.html @@ -0,0 +1,22 @@ + + + + + +Exporter Config File | Oracle Database Metrics Exporter + + + + + + + +
Skip to main content
Version: Next

Exporter Config File

+

The recommended way to configure the exporter is with the --config.file argument, specifying a YAML configuration file.

+

The configuration file contains the following options:

+
# Example Oracle Database Metrics Exporter Configuration file.
# Environment variables of the form ${VAR_NAME} will be expanded.
# If you include a config value that contains a '$' character, escape that '$' with another '$', e.g.,
# "$test$pwd" => "$$test$$pwd"
# Otherwise, the value will be expanded as an environment variable.

# Example Oracle Database Metrics Exporter Configuration file.
# Environment variables of the form ${VAR_NAME} will be expanded.

databases:
## Path on which metrics will be served
# metricsPath: /metrics
## Database connection information for the "default" database.
default:
## Database username
username: ${DB_USERNAME}
## Database password
password: ${DB_PASSWORD}
## Database password file
## If specified, will load the database password from a file.
# passwordFile: ${DB_PASSWORD_FILE}
## Database connection url
url: localhost:1521/freepdb1

## Metrics query timeout for this database, in seconds
queryTimeout: 5

## Rely on Oracle Database External Authentication by network or OS
# externalAuth: false
## Database role
# role: SYSDBA
## Path to Oracle Database wallet, if using wallet
# tnsAdmin: /path/to/database/wallet

### Connection settings:
### Either the go-sql or Oracle Database connection pool may be used.
### To use the Oracle Database connection pool over the go-sql connection pool,
### set maxIdleConns to zero and configure the pool* settings.

### Connection pooling settings for the go-sql connection pool
## Max open connections for this database using go-sql connection pool
maxOpenConns: 10
## Max idle connections for this database using go-sql connection pool
maxIdleConns: 10

### Connection pooling settings for the Oracle Database connection pool
## Oracle Database connection pool increment.
# poolIncrement: 1
## Oracle Database Connection pool maximum size
# poolMaxConnections: 15
## Oracle Database Connection pool minimum size
# poolMinConnections: 15

## Arbitrary labels to add to each metric scraped from this database
# labels:
# label_name1: label_value1
# label_name2: label_value2

metrics:
## How often to scrape metrics. If not provided, metrics will be scraped on request.
# scrapeInterval: 15s
## Path to default metrics file.
default: default-metrics.toml
## Paths to any custom metrics files
custom:
- custom-metrics-example/custom-metrics.toml

log:
# Path of log file
destination: /opt/alert.log
# Interval of log updates
interval: 15s
## Set disable to 1 to disable logging
# disable: 0

# Optionally configure prometheus webserver
#web:
# listenAddresses: [':9161']
# systemdSocket: true|false
# configFile: /path/to/webconfigfile
+

Config file in a container image

+

To add your custom config file to a container image, you can layer the base exporter image and include that config:

+
FROM container-registry.oracle.com/database/observability-exporter:2.0.2
COPY my-exporter-config.yaml /
ENTRYPOINT ["/oracledb_exporter", "--config.file", "/my-exporter-config.yaml"]
+ + \ No newline at end of file diff --git a/docs/docs/next/configuration/custom-metrics/index.html b/docs/docs/next/configuration/custom-metrics/index.html new file mode 100644 index 00000000..4e22f03a --- /dev/null +++ b/docs/docs/next/configuration/custom-metrics/index.html @@ -0,0 +1,45 @@ + + + + + +Custom Metrics | Oracle Database Metrics Exporter + + + + + + + +
Skip to main content
Version: Next

Custom Metrics

+

The exporter allows definition of arbitrary custom metrics in one or more TOML or YAML files.

+

To specify custom metrics files +exporter, use the metrics configuration in the config file:

+
metrics:
## How often to scrape metrics. If not provided, metrics will be scraped on request.
# scrapeInterval: 15s
## Path to default metrics file.
default: default-metrics.toml
## Paths to any custom metrics files (TOML or YAML)
custom:
- custom-metrics-example/custom-metrics.toml
+

You may also use --custom.metrics flag followed by a comma separated list of TOML or YAML files, or export CUSTOM_METRICS variable environment (export CUSTOM_METRICS=my-custom-metrics.toml,my-other-custom-metrics.toml)

+

Metric Schema

+

Metrics files must contain a series of [[metric]] definitions, in TOML, or the equivalent definition in a YAML file. Each metric definition must follow the exporter's metric schema:

+
Field NameDescriptionTypeRequiredDefault
contextMetric context, used to build metric FQNStringYes
labelsMetric labels, which must match column names in the query. Any column that is not a label will be parsed as a metricArray of StringsNo
metricsdescMapping between field(s) in the request and comment(s)Dictionary of StringsYes
metricstypeMapping between field(s) in the request and Prometheus metric typesDictionary of StringsNo
metricsbucketsSplit histogram metric types into buckets based on value (example)Dictionary of String dictionariesNo
fieldtoappendField from the request to append to the metric FQNStringNo
requestOracle database query to run for metrics scrapingStringYes
ignorezeroresultWhether or not an error will be printed if the request does not return any resultsBooleanNofalse
querytimeoutOracle Database query timeout duration, e.g., 300ms, 0.5hString durationNoValue of query.timeout in seconds
scrapeintervalCustom metric scrape interval, used if scrape.interval is provided, otherwise metrics are always scraped on request.String durationNo
databasesOptional array of databases to scrape from. If not specified, the metric is scraped from all databases.Array of StringsNo
+

Example Metric Definition

+

Here's a simple example of a metric definition:

+
[[metric]]
context = "test"
request = "SELECT 1 as value_1, 2 as value_2 FROM DUAL"
metricsdesc = { value_1 = "Simple example returning always 1.", value_2 = "Same but returning always 2." }
+
+

NOTE: Do not add a semicolon (;) at the end of the SQL queries.

+
+

This file produce the following entries in the exporter:

+
# HELP oracledb_test_value_1 Simple example returning always 1.
# TYPE oracledb_test_value_1 gauge
oracledb_test_value_1 1
# HELP oracledb_test_value_2 Same but returning always 2.
# TYPE oracledb_test_value_2 gauge
oracledb_test_value_2 2
+

You can also provide labels using labels field. Here's an example providing two metrics, with and without labels:

+
[[metric]]
context = "context_no_label"
request = "SELECT 1 as value_1, 2 as value_2 FROM DUAL"
metricsdesc = { value_1 = "Simple example returning always 1.", value_2 = "Same but returning always 2." }

[[metric]]
context = "context_with_labels"
labels = [ "label_1", "label_2" ]
request = "SELECT 1 as value_1, 2 as value_2, 'First label' as label_1, 'Second label' as label_2 FROM DUAL"
metricsdesc = { value_1 = "Simple example returning always 1.", value_2 = "Same but returning always 2." }
+

This TOML file produces the following result:

+
# HELP oracledb_context_no_label_value_1 Simple example returning always 1.
# TYPE oracledb_context_no_label_value_1 gauge
oracledb_context_no_label_value_1 1
# HELP oracledb_context_no_label_value_2 Same but returning always 2.
# TYPE oracledb_context_no_label_value_2 gauge
oracledb_context_no_label_value_2 2
# HELP oracledb_context_with_labels_value_1 Simple example returning always 1.
# TYPE oracledb_context_with_labels_value_1 gauge
oracledb_context_with_labels_value_1{label_1="First label",label_2="Second label"} 1
# HELP oracledb_context_with_labels_value_2 Same but returning always 2.
# TYPE oracledb_context_with_labels_value_2 gauge
oracledb_context_with_labels_value_2{label_1="First label",label_2="Second label"} 2
+

Last, you can set metric type using metricstype field.

+
[[metric]]
context = "context_with_labels"
labels = [ "label_1", "label_2" ]
request = "SELECT 1 as value_1, 2 as value_2, 'First label' as label_1, 'Second label' as label_2 FROM DUAL"
metricsdesc = { value_1 = "Simple example returning always 1 as counter.", value_2 = "Same but returning always 2 as gauge." }
# Can be counter or gauge (default)
metricstype = { value_1 = "counter" }
+

This TOML file will produce the following result:

+
# HELP oracledb_test_value_1 Simple test example returning always 1 as counter.
# TYPE oracledb_test_value_1 counter
oracledb_test_value_1 1
# HELP oracledb_test_value_2 Same test but returning always 2 as gauge.
# TYPE oracledb_test_value_2 gauge
oracledb_test_value_2 2
+

You can find working examples of custom metrics for slow queries, big queries and top 100 tables. +An example of custom metrics for Transacational Event Queues is also provided.

+

Customize metrics in a container image

+

If you run the exporter as a container image and want to include your custom metrics in the image itself, you can use the following example Dockerfile to create a new image:

+
FROM container-registry.oracle.com/database/observability-exporter:2.0.2
COPY custom-metrics.toml /
ENTRYPOINT ["/oracledb_exporter", "--custom.metrics", "/custom-metrics.toml"]
+ + \ No newline at end of file diff --git a/docs/docs/next/configuration/multiple-databases/index.html b/docs/docs/next/configuration/multiple-databases/index.html new file mode 100644 index 00000000..ad24aaf2 --- /dev/null +++ b/docs/docs/next/configuration/multiple-databases/index.html @@ -0,0 +1,25 @@ + + + + + +Multiple Databases | Oracle Database Metrics Exporter + + + + + + + +
Skip to main content
Version: Next

Scraping Multiple Databases

+

The exporter may be configured to scrape as many databases as needed.

+

You may scrape as many databases as needed by defining named database configurations in the config file.

+

If you're connecting to multiple databases using mTLS, see mTLS for multiple databases with Oracle Wallet

+

The following settings configure the exporter to scrape multiple databases, "db1", and "db2", simultaneously:

+
# Example Oracle Database Metrics Exporter Configuration file.
# Environment variables of the form ${VAR_NAME} will be expanded.

databases:
## Path on which metrics will be served
# metricsPath: /metrics

## As many named database configurations may be defined as needed.
## It is recommended to define your database config in the config file, rather than using CLI arguments.

## Database connection information for the "db1" database.
db1:
## Database username
username: ${DB1_USERNAME}
## Database password
password: ${DB1_PASSWORD}
## Database connection url
url: localhost:1521/freepdb1

## Metrics query timeout for this database, in seconds
queryTimeout: 5

## Rely on Oracle Database External Authentication by network or OS
# externalAuth: false
## Database role
# role: SYSDBA
## Path to Oracle Database wallet, if using wallet
# tnsAdmin: /path/to/database/wallet

### Connection settings:
### Either the go-sql or Oracle Database connection pool may be used.
### To use the Oracle Database connection pool over the go-sql connection pool,
### set maxIdleConns to zero and configure the pool* settings.

### Connection pooling settings for the go-sql connection pool
## Max open connections for this database using go-sql connection pool
maxOpenConns: 10
## Max idle connections for this database using go-sql connection pool
maxIdleConns: 10

### Connection pooling settings for the Oracle Database connection pool
## Oracle Database connection pool increment.
# poolIncrement: 1
## Oracle Database Connection pool maximum size
# poolMaxConnections: 15
## Oracle Database Connection pool minimum size
# poolMinConnections: 15

### Arbitrary labels to add to each metric scraped from this database
## Any labels configured for one database will be added to metrics from
## every database, because the same metric names must always have the same
## full labelset. If the label isn't set for a particular database, then it
## will just be set to an empty string.
# labels:
# label_name1: label_value1
# label_name2: label_value2

db2:
## Database username
username: ${DB2_USERNAME}
## Database password
password: ${DB2_PASSWORD}
## Database connection url
url: localhost:1522/freepdb1

## Metrics query timeout for this database, in seconds
queryTimeout: 5

## Rely on Oracle Database External Authentication by network or OS
# externalAuth: false
## Database role
# role: SYSDBA
## Path to Oracle Database wallet, if using wallet
# tnsAdmin: /path/to/database/wallet

### Connection settings:
### Either the go-sql or Oracle Database connection pool may be used.
### To use the Oracle Database connection pool over the go-sql connection pool,
### set maxIdleConns to zero and configure the pool* settings.

### Connection pooling settings for the go-sql connection pool
## Max open connections for this database using go-sql connection pool
maxOpenConns: 10
## Max idle connections for this database using go-sql connection pool
maxIdleConns: 10

### Connection pooling settings for the Oracle Database connection pool
## Oracle Database connection pool increment.
# poolIncrement: 1
## Oracle Database Connection pool maximum size
# poolMaxConnections: 15
## Oracle Database Connection pool minimum size
# poolMinConnections: 15

### Arbitrary labels to add to each metric scraped from this database
## Any labels configured for one database will be added to metrics from
## every database, because the same metric names must always have the same
## full labelset. If the label isn't set for a particular database, then it
## will just be set to an empty string.
# labels:
# label_name1: label_value1
# label_name2: label_value2
+

Only scraping metrics from specific databases

+

By default, metrics are scraped from every connected database. To expose only certain metrics on specific databases, configure the databases property of a metric. The following metric definition will only be scraped from databases "db2" and "db3":

+
[[metric]]
context = "db_platform"
labels = [ "platform_name" ]
metricsdesc = { value = "Database platform" }
request = '''
SELECT platform_name, 1 as value FROM gv$database
'''
databases = [ "db2", "db3" ]
+

If the databases array is empty or not provided for a metric, that metric will be scraped from all connected databases.

+ + \ No newline at end of file diff --git a/docs/docs/next/configuration/oci-vault/index.html b/docs/docs/next/configuration/oci-vault/index.html new file mode 100644 index 00000000..8ea5c87f --- /dev/null +++ b/docs/docs/next/configuration/oci-vault/index.html @@ -0,0 +1,29 @@ + + + + + +OCI Vault | Oracle Database Metrics Exporter + + + + + + + +
Skip to main content
Version: Next

Oracle Cloud Infrastructure (OCI) Vault

+

Securely load database credentials from OCI Vault.

+

Each database in the config file may be configured to use OCI Vault. To load the database username and/or password from OCI Vault, set the vault.oci property to contain the OCI Vault OCID, and secret names for the database username/password:

+
databases:
mydb:
vault:
oci:
id: <VAULT OCID>
usernameSecret: <Secret containing DB username>
passwordSecret: <Secret containing DB password>
+

OCI Vault CLI Configuration

+

If using the default database with CLI parameters, the exporter will read the username and password from a secret stored in OCI Vault if you set these two environment variables:

+
    +
  • OCI_VAULT_ID should be set to the OCID of the OCI vault that you wish to use
  • +
  • OCI_VAULT_USERNAME_SECRET should be set to the name of the secret in the OCI vault which contains the database username
  • +
  • OCI_VAULT_PASSWORD_SECRET should be set to the name of the secret in the OCI vault which contains the database password
  • +
+
+

Note that the process must be running under a user that has the OCI CLI installed and configured correctly to access the desired tenancy and region. The OCI Profile used is DEFAULT.

+
+ + \ No newline at end of file diff --git a/docs/docs/next/configuration/oracle-wallet/index.html b/docs/docs/next/configuration/oracle-wallet/index.html new file mode 100644 index 00000000..4065f3cc --- /dev/null +++ b/docs/docs/next/configuration/oracle-wallet/index.html @@ -0,0 +1,57 @@ + + + + + +Oracle Wallet (mTLS) | Oracle Database Metrics Exporter + + + + + + + +
Skip to main content
Version: Next

Using a Wallet

+

For mutual TLS (mTLS) connections, you must use an Oracle Wallet.

+

If you are using Oracle Autonomous Database with mTLS, for example, you can download and unzip the wallet from the Oracle Cloud Infrastructure (OCI) console.

+

To configure the exporter to use an Oracle Wallet,

+
    +
  1. Set the TNS_ADMIN environment variable to the directory containing the unzipped wallet
  2. +
  3. Configure your database instance with the appropriate database TNS name:
  4. +
+
databases:
mydb:
username: admin
password: <REPLACE ME>
# TNS Name from wallet tnsnames.ora file, e.g., mydb_high
url: <TNS Name>
+

If you are running the exporter as a container, you can mount the wallet as a volume. For example, mounting the ./wallet directory to the /wallet location:

+
docker run -it --rm \
-e DB_USERNAME=pdbadmin \
-e DB_PASSWORD=Welcome12345 \
-e DB_CONNECT_STRING=devdb_tp \
-v ./wallet:/wallet \
-p 9161:9161 \
container-registry.oracle.com/database/observability-exporter:2.0.2
+

mTLS for multiple databases with Oracle Wallet

+

The Oracle Database Metrics exporter uses ODPI-C, which can only initalize the TNS aliases from a tnsnames.ora file once per process. To work around this, the exporter can be configured to read from a "combined" tnsnames.ora file containing all TNS aliases for connections in a multi-database configuration.

+
    +
  1. +

    For each database the exporter will connect to, download the corresponding wallet files. If you're using ADB/ATP-S, download the regional wallet instead of the instance wallet if the databases are in the same region.

    +
  2. +
  3. +

    Copy the TNS aliases the tnsnames.ora file from each wallet, and combine them into one file, so all your database service names are in one file together

    +
  4. +
  5. +

    In the combined tnsnames.ora file, and add the following snippet to each TNS alias connection string, to tell the client where the wallet directory is:

    +
  6. +
+
(security=(MY_WALLET_DIRECTORY=/path/to/this/database/wallet))
+

The combined tnsnames.ora file, which contains the TNS aliases for both databases, and their corresponding wallet location in the security configuration will look something like the following:

+
db1_high = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=adb.****.oraclecloud.com))(connect_data=(service_name=****.adb.oraclecloud.com))(security=(MY_WALLET_DIRECTORY=/wallets/db1)(ssl_server_dn_match=yes)))

db2_high = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=adb.****.oraclecloud.com))(connect_data=(service_name=****.adb.oraclecloud.com))(security=(MY_WALLET_DIRECTORY=/wallets/db2)(ssl_server_dn_match=yes)))
+
    +
  1. Take wallet files (cwallet.sso, ewallet.p12, & ewallet.pem) for each database, and place them in separate directories. For example, db1 gets its own directory, db2 gets its own directory, and so forth.
  2. +
+

The resulting directory structure should look like the following, with wallet information separate from the combined tnsnames.ora file:

+
wallets
├── combined
│ ├── sqlnet.ora
│ └── tnsnames.ora // Combined tnsnames.ora
├── db1
│ ├── cwallet.sso
│ ├── ewallet.p12
│ └── ewallet.pem
└── db2
├── cwallet.sso
├── ewallet.p12
└── ewallet.pem
+
    +
  1. Set the TNS_ADMIN environment variable where the exporter is running to the directory containing your combined tnsnames.ora file:
  2. +
+
export TNS_ADMIN=/wallets/combined
+
    +
  1. Finally, update the exporter configuration file to include the TNS aliases for all databases you will be connecting to. Ensure your database configuration file does not use the tnsAdmin property, as we are using the global TNS_ADMIN environment variable to point to the combined tnsnames.ora file:
  2. +
+
databases:
db2:
username: ****
password: ****
url: db2_high
queryTimeout: 5
maxOpenConns: 10
maxIdleConns: 10
db1:
username: ****
password: ****
url: db1_high
queryTimeout: 5
maxOpenConns: 10
maxIdleConns: 10
+

Then, run the exporter with the config file:

+
./oracledb_exporter --config.file=my-config-file.yaml
+ + \ No newline at end of file diff --git a/docs/docs/next/getting-started/basics/index.html b/docs/docs/next/getting-started/basics/index.html new file mode 100644 index 00000000..cfc7f9c8 --- /dev/null +++ b/docs/docs/next/getting-started/basics/index.html @@ -0,0 +1,75 @@ + + + + + +Installation | Oracle Database Metrics Exporter + + + + + + + +
Skip to main content
Version: Next

Installation

+

In this section you will find information on running the exporter.

+ +

Docker, Podman, etc

+

You can run the exporter in a local container using a container image from Oracle Container Registry. The container image is available in the "observability-exporter" repository in the "Database" category. No authentication or license presentment/acceptance are required to pull this image from the registry.

+

Oracle Database Free

+

If you need an Oracle Database to test the exporter, you can use this command to start up an instance of Oracle Database Free which also requires no authentication or license presentment/acceptance to pull the image.

+
docker run --name free23ai \
-d \
-p 1521:1521 \
-e ORACLE_PASSWORD=Welcome12345 \
gvenzl/oracle-free:23.9-slim-faststart
+

This will pull the image and start up the database with a listener on port 1521. It will also create a pluggable database (a database container) called "FREEPDB1" and will set the admin passwords to the password you specified on this command.

+

You can tail the logs to see when the database is ready to use:

+
docker logs -f free23ai

(look for this message...)
#########################
DATABASE IS READY TO USE!
#########################
+

To obtain the IP address of the container, which you will need to connect to the database, use this command. Note: depending on your platform and container runtime, you may be able to access the database at "localhost":

+
docker inspect free23ai | grep IPA
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.2",
"IPAMConfig": null,
"IPAddress": "172.17.0.2",
+

Exporter

+

You need to give the exporter the connection details for the Oracle Database that you want it to run against. You can use a simple connection, or a wallet.

+

Simple connection

+

For a simple connection, you will provide the details using these variables:

+
    +
  • DB_USERNAME is the database username, e.g., pdbadmin
  • +
  • DB_PASSWORD is the password for that user, e.g., Welcome12345
  • +
  • DB_CONNECT_STRING is the connection string, e.g., free23ai:1521/freepdb
  • +
  • DB_ROLE (Optional) can be set to SYSDBA, SYSOPER, SYSBACKUP, SYSDG, SYSKM, SYSRAC or SYSASM if you want to connect with one of those roles, however Oracle recommends that you connect with the lowest possible privileges and roles necessary for the exporter to run.
  • +
+

To run the exporter in a container and expose the port, use a command like this, with the appropriate values for the environment variables:

+
docker run -it --rm \
-e DB_USERNAME=pdbadmin \
-e DB_PASSWORD=Welcome12345 \
-e DB_CONNECT_STRING=free23ai:1521/freepdb \
-p 9161:9161 \
container-registry.oracle.com/database/observability-exporter:2.0.2
+

Standalone Binary

+

Pre-compiled versions for Linux, ARM and Darwin 64-bit can be found under releases.

+

In order to run, you'll need the Oracle Instant Client Basic for your operating system. Only the basic version is required for the exporter.

+
+

NOTE: If you are running the Standalone binary on a Mac ARM platform you must set the variable DYLD_LIBRARY_PATH to the location of where the instant client installed. For example export DYLD_LIBRARY_PATH=/lib/oracle/instantclient_23_3.

+
+

The following command line arguments (flags) can be passed to the exporter (the --help flag will show the table below).

+
Usage of oracledb_exporter:
--config.file="example-config.yaml"
File with metrics exporter configuration. (env: CONFIG_FILE)
--web.telemetry-path="/metrics"
Path under which to expose metrics. (env: TELEMETRY_PATH)
--default.metrics="default-metrics.toml"
File with default metrics in a TOML file. (env: DEFAULT_METRICS)
--custom.metrics="" Comma separated list of file(s) that contain various custom metrics in a TOML format. (env: CUSTOM_METRICS)
--query.timeout=5 Query timeout (in seconds). (env: QUERY_TIMEOUT)
--database.maxIdleConns=0 Number of maximum idle connections in the connection pool. (env: DATABASE_MAXIDLECONNS)
--database.maxOpenConns=10
Number of maximum open connections in the connection pool. (env: DATABASE_MAXOPENCONNS)
--database.poolIncrement=-1
Connection increment when the connection pool reaches max capacity. (env: DATABASE_POOLINCREMENT)
--database.poolMaxConnections=-1
Maximum number of connections in the connection pool. (env: DATABASE_POOLMAXCONNECTIONS)
--database.poolMinConnections=-1
Minimum number of connections in the connection pool. (env: DATABASE_POOLMINCONNECTIONS)
--scrape.interval=0s Interval between each scrape. Default is to scrape on collect requests.
--log.disable=0 Set to 1 to disable alert logs
--log.interval=15s Interval between log updates (e.g. 5s).
--log.destination="/log/alert.log"
File to output the alert log to. (env: LOG_DESTINATION)
--web.listen-address=:9161 ...
Addresses on which to expose metrics and web interface. Repeatable for multiple addresses. Examples: `:9100` or `[::1]:9100` for http, `vsock://:9100` for vsock
--web.config.file="" Path to configuration file that can enable TLS or authentication. See: https://github.com/prometheus/exporter-toolkit/blob/master/docs/web-configuration.md
--log.level=info Only log messages with the given severity or above. One of: [debug, info, warn, error]
--log.format=logfmt Output format of log messages. One of: [logfmt, json]
--[no-]version Show application version.
+

You may provide the connection details using these variables:

+
    +
  • DB_USERNAME is the database username, e.g., pdbadmin
  • +
  • DB_PASSWORD is the password for that user, e.g., Welcome12345
  • +
  • DB_CONNECT_STRING is the connection string, e.g., localhost:1521/freepdb1
  • +
  • DB_ROLE (Optional) can be set to SYSDBA or SYSOPER if you want to connect with one of those roles, however Oracle recommends that you connect with the lowest possible privileges and roles necessary for the exporter to run.
  • +
  • ORACLE_HOME is the location of the Oracle Instant Client, e.g., /lib/oracle/21/client64/lib.
  • +
  • TNS_ADMIN is the location of your (unzipped) wallet. The DIRECTORY set in the sqlnet.ora file must match the path that it will be mounted on inside the container.
  • +
+

The following example puts the logfile in the current location with the filename alert.log and loads the default matrics file (default-metrics,toml) from the current location.

+

If you prefer to provide configuration via a config file, you may do so with the --config.file argument. The use of a config file over command line arguments is preferred. If a config file is not provided, the "default" database connection is managed by command line arguments.

+
# Example Oracle Database Metrics Exporter Configuration file.
# Environment variables of the form ${VAR_NAME} will be expanded.
# If you include a config value that contains a '$' character, escape that '$' with another '$', e.g.,
# "$test$pwd" => "$$test$$pwd"
# Otherwise, the value will be expanded as an environment variable.

# Example Oracle Database Metrics Exporter Configuration file.
# Environment variables of the form ${VAR_NAME} will be expanded.

databases:
## Path on which metrics will be served
# metricsPath: /metrics
## Database connection information for the "default" database.
default:
## Database username
username: ${DB_USERNAME}
## Database password
password: ${DB_PASSWORD}
## Database password file
## If specified, will load the database password from a file.
# passwordFile: ${DB_PASSWORD_FILE}
## Database connection url
url: localhost:1521/freepdb1

## Metrics query timeout for this database, in seconds
queryTimeout: 5

## Rely on Oracle Database External Authentication by network or OS
# externalAuth: false
## Database role
# role: SYSDBA
## Path to Oracle Database wallet, if using wallet
# tnsAdmin: /path/to/database/wallet

### Connection settings:
### Either the go-sql or Oracle Database connection pool may be used.
### To use the Oracle Database connection pool over the go-sql connection pool,
### set maxIdleConns to zero and configure the pool* settings.

### Connection pooling settings for the go-sql connection pool
## Max open connections for this database using go-sql connection pool
maxOpenConns: 10
## Max idle connections for this database using go-sql connection pool
maxIdleConns: 10

### Connection pooling settings for the Oracle Database connection pool
## Oracle Database connection pool increment.
# poolIncrement: 1
## Oracle Database Connection pool maximum size
# poolMaxConnections: 15
## Oracle Database Connection pool minimum size
# poolMinConnections: 15

## Arbitrary labels to add to each metric scraped from this database
# labels:
# label_name1: label_value1
# label_name2: label_value2

metrics:
## How often to scrape metrics. If not provided, metrics will be scraped on request.
# scrapeInterval: 15s
## Path to default metrics file.
default: default-metrics.toml
## Paths to any custom metrics files
custom:
- custom-metrics-example/custom-metrics.toml

log:
# Path of log file
destination: /opt/alert.log
# Interval of log updates
interval: 15s
## Set disable to 1 to disable logging
# disable: 0

# Optionally configure prometheus webserver
#web:
# listenAddresses: [':9161']
# systemdSocket: true|false
# configFile: /path/to/webconfigfile
+

Docker Compose

+

If you would like to set up a test environment with the exporter, you can use the provided "Docker Compose" file in this repository which will start an Oracle Database instance, the exporter, Prometheus and Grafana.

+
cd docker-compose
docker-compose up -d
+

The containers will take a short time to start. The first time, the Oracle container might take a few minutes to start while it creates the database instance, but this is a one-time operation, and subequent restarts will be much faster (a few seconds).

+

Once the containers are all running, you can access the services using these URLs:

+
    +
  • Exporter
  • +
  • Prometheus - try a query for "oracle".
  • +
  • Grafana - username is "admin" and password is "grafana". An Oracle Database dashboard is provisioned and configured to use data from the exporter.
  • +
+ + \ No newline at end of file diff --git a/docs/docs/next/getting-started/default-metrics/index.html b/docs/docs/next/getting-started/default-metrics/index.html new file mode 100644 index 00000000..6a46c031 --- /dev/null +++ b/docs/docs/next/getting-started/default-metrics/index.html @@ -0,0 +1,20 @@ + + + + + +Default Metrics | Oracle Database Metrics Exporter + + + + + + + +
Skip to main content
Version: Next

Default Metrics

+

The exporter includes default metrics for Oracle Database, and process-specific metrics on the go runtime.

+

You can find the exporter's metric schema in the Custom Metrics configuration.

+

The following metrics are included by default. The values given are a sample for a single database, "db1":

+
# HELP oracledb_activity_execute_count Generic counter metric from gv$sysstat view in Oracle.
# TYPE oracledb_activity_execute_count gauge
oracledb_activity_execute_count{database="db1"} 6.212049e+06
# HELP oracledb_activity_parse_count_total Generic counter metric from gv$sysstat view in Oracle.
# TYPE oracledb_activity_parse_count_total gauge
oracledb_activity_parse_count_total{database="db1"} 1.054178e+06
# HELP oracledb_activity_user_commits Generic counter metric from gv$sysstat view in Oracle.
# TYPE oracledb_activity_user_commits gauge
oracledb_activity_user_commits{database="db1"} 86538
# HELP oracledb_activity_user_rollbacks Generic counter metric from gv$sysstat view in Oracle.
# TYPE oracledb_activity_user_rollbacks gauge
oracledb_activity_user_rollbacks{database="db1"} 18
# HELP oracledb_db_platform_value Database platform
# TYPE oracledb_db_platform_value gauge
oracledb_db_platform_value{database="db1",platform_name="Linux OS (AARCH64)"} 1
# HELP oracledb_db_system_value Database system resources metric
# TYPE oracledb_db_system_value gauge
oracledb_db_system_value{database="db1",name="cpu_count"} 2
oracledb_db_system_value{database="db1",name="pga_aggregate_limit"} 2.147483648e+09
oracledb_db_system_value{database="db1",name="sga_max_size"} 1.610612736e+09
# HELP oracledb_dbtype Type of database the exporter is connected to (0=non-CDB, 1=CDB, >1=PDB).
# TYPE oracledb_dbtype gauge
oracledb_dbtype{database="db1"} 3
# HELP oracledb_exporter_build_info A metric with a constant '1' value labeled by version, revision, branch, goversion from which oracledb_exporter was built, and the goos and goarch for the build.
# TYPE oracledb_exporter_build_info gauge
oracledb_exporter_build_info{branch="",goarch="arm64",goos="darwin",goversion="go1.24.5",revision="unknown",tags="unknown",version=""} 1
# HELP oracledb_exporter_last_scrape_duration_seconds Duration of the last scrape of metrics from Oracle DB.
# TYPE oracledb_exporter_last_scrape_duration_seconds gauge
oracledb_exporter_last_scrape_duration_seconds 0.05714725
# HELP oracledb_exporter_last_scrape_error Whether the last scrape of metrics from Oracle DB resulted in an error (1 for error, 0 for success).
# TYPE oracledb_exporter_last_scrape_error gauge
oracledb_exporter_last_scrape_error 0
# HELP oracledb_exporter_scrapes_total Total number of times Oracle DB was scraped for metrics.
# TYPE oracledb_exporter_scrapes_total counter
oracledb_exporter_scrapes_total 2
# HELP oracledb_process_count Gauge metric with count of processes.
# TYPE oracledb_process_count gauge
oracledb_process_count{database="db1"} 85
# HELP oracledb_sessions_value Gauge metric with count of sessions by status and type.
# TYPE oracledb_sessions_value gauge
oracledb_sessions_value{database="db1",status="ACTIVE",type="BACKGROUND"} 61
oracledb_sessions_value{database="db1",status="ACTIVE",type="USER"} 2
oracledb_sessions_value{database="db1",status="INACTIVE",type="USER"} 19
# HELP oracledb_tablespace_bytes Generic counter metric of tablespaces bytes in Oracle.
# TYPE oracledb_tablespace_bytes gauge
oracledb_tablespace_bytes{database="db1",tablespace="SYSAUX",type="PERMANENT"} 7.7430784e+08
oracledb_tablespace_bytes{database="db1",tablespace="SYSTEM",type="PERMANENT"} 3.18963712e+08
oracledb_tablespace_bytes{database="db1",tablespace="TEMP",type="TEMPORARY"} 7.340032e+06
oracledb_tablespace_bytes{database="db1",tablespace="UNDOTBS1",type="UNDO"} 2.1364736e+07
oracledb_tablespace_bytes{database="db1",tablespace="USERS",type="PERMANENT"} 7.340032e+06
# HELP oracledb_tablespace_free Generic counter metric of tablespaces free bytes in Oracle.
# TYPE oracledb_tablespace_free gauge
oracledb_tablespace_free{database="db1",tablespace="SYSAUX",type="PERMANENT"} 7.5289739264e+10
oracledb_tablespace_free{database="db1",tablespace="SYSTEM",type="PERMANENT"} 7.524491264e+10
oracledb_tablespace_free{database="db1",tablespace="TEMP",type="TEMPORARY"} 1.3631488e+07
oracledb_tablespace_free{database="db1",tablespace="UNDOTBS1",type="UNDO"} 3.518435069952e+13
oracledb_tablespace_free{database="db1",tablespace="USERS",type="PERMANENT"} 3.4352381952e+10
# HELP oracledb_tablespace_max_bytes Generic counter metric of tablespaces max bytes in Oracle.
# TYPE oracledb_tablespace_max_bytes gauge
oracledb_tablespace_max_bytes{database="db1",tablespace="SYSAUX",type="PERMANENT"} 7.6064047104e+10
oracledb_tablespace_max_bytes{database="db1",tablespace="SYSTEM",type="PERMANENT"} 7.5563876352e+10
oracledb_tablespace_max_bytes{database="db1",tablespace="TEMP",type="TEMPORARY"} 2.097152e+07
oracledb_tablespace_max_bytes{database="db1",tablespace="UNDOTBS1",type="UNDO"} 3.5184372064256e+13
oracledb_tablespace_max_bytes{database="db1",tablespace="USERS",type="PERMANENT"} 3.4359721984e+10
# HELP oracledb_tablespace_used_percent Gauge metric showing as a percentage of how much of the tablespace has been used.
# TYPE oracledb_tablespace_used_percent gauge
oracledb_tablespace_used_percent{database="db1",tablespace="SYSAUX",type="PERMANENT"} 1.0179682379262742
oracledb_tablespace_used_percent{database="db1",tablespace="SYSTEM",type="PERMANENT"} 0.4221113677574824
oracledb_tablespace_used_percent{database="db1",tablespace="TEMP",type="TEMPORARY"} 0.35
oracledb_tablespace_used_percent{database="db1",tablespace="UNDOTBS1",type="UNDO"} 6.072223190734319e-05
oracledb_tablespace_used_percent{database="db1",tablespace="USERS",type="PERMANENT"} 0.021362314873845517
# HELP oracledb_top_sql_elapsed SQL statement elapsed time running
# TYPE oracledb_top_sql_elapsed gauge
oracledb_top_sql_elapsed{database="db1",sql_id="0npm6czzaj44m",sql_text="SELECT idx_objn FROM vecsys.vector$index WHERE JSON_VAL"} 6.118614
oracledb_top_sql_elapsed{database="db1",sql_id="0sbbcuruzd66f",sql_text="select /*+ rule */ bucket_cnt, row_cnt, cache_cnt, null"} 1.538687
oracledb_top_sql_elapsed{database="db1",sql_id="121ffmrc95v7g",sql_text="select i.obj#,i.ts#,i.file#,i.block#,i.intcols,i.type#,"} 2.200984
oracledb_top_sql_elapsed{database="db1",sql_id="61znfd8fvgha6",sql_text="SELECT new.sql_seq, old.plan_hash_value, sqlset_row(ne"} 2.628263
oracledb_top_sql_elapsed{database="db1",sql_id="68dw2nt8wtunk",sql_text="select originating_timestamp, module_id, execution_cont"} 2.296924
oracledb_top_sql_elapsed{database="db1",sql_id="9bd61v53p81sk",sql_text="begin prvt_hdm.auto_execute( :dbid , :inst_num , :end_s"} 1.67611
oracledb_top_sql_elapsed{database="db1",sql_id="aba13jkkk3fts",sql_text="SELECT idx_objn, json_value(IDX_SPARE2, '$.counter') FR"} 3.010397
oracledb_top_sql_elapsed{database="db1",sql_id="afcz0dh295hzp",sql_text=" SELECT /*+ first_rows(1) */ sql_id, force_matching_sig"} 2.246092
oracledb_top_sql_elapsed{database="db1",sql_id="ampw9ddqufjd3",sql_text="begin /*KAPI:capture*/ dbms_auto_index_internal.capture"} 4.102646
oracledb_top_sql_elapsed{database="db1",sql_id="avzy19hxu6gg4",sql_text="SELECT VALUE(P) FROM TABLE(DBMS_SQLTUNE.SELECT_CURSOR_C"} 2.564301
oracledb_top_sql_elapsed{database="db1",sql_id="b39m8n96gxk7c",sql_text="call dbms_autotask_prvt.run_autotask ( :0,:1 )"} 4.418653
oracledb_top_sql_elapsed{database="db1",sql_id="bj9ajtpfh9f41",sql_text=" declare purge_scn "} 6.425015
oracledb_top_sql_elapsed{database="db1",sql_id="bq819r502v7u2",sql_text="select originating_timestamp, module_id, execution_cont"} 3.676572
oracledb_top_sql_elapsed{database="db1",sql_id="ddrfu7d7hbkym",sql_text=" select count(1), partition_id "} 1.870379
oracledb_top_sql_elapsed{database="db1",sql_id="f6w8rqdkx0bnv",sql_text="SELECT * FROM ( SELECT /*+ ordered use_nl(o c cu h) ind"} 1.895947
# HELP oracledb_up Whether the Oracle database server is up.
# TYPE oracledb_up gauge
oracledb_up{database="db1"} 1
# HELP oracledb_wait_time_administrative counter metric from system_wait_class view in Oracle.
# TYPE oracledb_wait_time_administrative counter
oracledb_wait_time_administrative{database="db1"} 0
# HELP oracledb_wait_time_application counter metric from system_wait_class view in Oracle.
# TYPE oracledb_wait_time_application counter
oracledb_wait_time_application{database="db1"} 0.73
# HELP oracledb_wait_time_commit counter metric from system_wait_class view in Oracle.
# TYPE oracledb_wait_time_commit counter
oracledb_wait_time_commit{database="db1"} 0.17
# HELP oracledb_wait_time_concurrency counter metric from system_wait_class view in Oracle.
# TYPE oracledb_wait_time_concurrency counter
oracledb_wait_time_concurrency{database="db1"} 6.8
# HELP oracledb_wait_time_configuration counter metric from system_wait_class view in Oracle.
# TYPE oracledb_wait_time_configuration counter
oracledb_wait_time_configuration{database="db1"} 19.71
# HELP oracledb_wait_time_network counter metric from system_wait_class view in Oracle.
# TYPE oracledb_wait_time_network counter
oracledb_wait_time_network{database="db1"} 0.29
# HELP oracledb_wait_time_other counter metric from system_wait_class view in Oracle.
# TYPE oracledb_wait_time_other counter
oracledb_wait_time_other{database="db1"} 6.02
# HELP oracledb_wait_time_scheduler counter metric from system_wait_class view in Oracle.
# TYPE oracledb_wait_time_scheduler counter
oracledb_wait_time_scheduler{database="db1"} 4.01
# HELP oracledb_wait_time_system_io counter metric from system_wait_class view in Oracle.
# TYPE oracledb_wait_time_system_io counter
oracledb_wait_time_system_io{database="db1"} 0.13
# HELP oracledb_wait_time_user_io counter metric from system_wait_class view in Oracle.
# TYPE oracledb_wait_time_user_io counter
oracledb_wait_time_user_io{database="db1"} 12.38
+ + \ No newline at end of file diff --git a/docs/docs/next/getting-started/grafana-dashboards/index.html b/docs/docs/next/getting-started/grafana-dashboards/index.html new file mode 100644 index 00000000..f8cdd379 --- /dev/null +++ b/docs/docs/next/getting-started/grafana-dashboards/index.html @@ -0,0 +1,20 @@ + + + + + +Grafana Dashboards | Oracle Database Metrics Exporter + + + + + + + +
Skip to main content
Version: Next

Grafana Dashboards

+

Sample Grafana dashboards are included with the exporter.

+

A sample Grafana dashboard definition is provided in this directory. You can import these dashboards into your Grafana instance, and set it to use the Prometheus datasource that you have defined for the Prometheus instance that is collecting metrics from the exporter.

+

The dashboard shows some basic information, as shown below:

+

Oracle Database Dashboard

+ + \ No newline at end of file diff --git a/docs/docs/next/getting-started/kubernetes/index.html b/docs/docs/next/getting-started/kubernetes/index.html new file mode 100644 index 00000000..a32534b3 --- /dev/null +++ b/docs/docs/next/getting-started/kubernetes/index.html @@ -0,0 +1,52 @@ + + + + + +Kubernetes | Oracle Database Metrics Exporter + + + + + + + +
Skip to main content
Version: Next

Kubernetes

+

You can run the exporter in Kubernetes using provided manifests.

+

To run the exporter in Kubernetes, you must complete the following steps. All steps must be completed in the same Kunernetes namespace. The examples below assume you want to use a namespace called exporter, you must change the commands if you wish to use a different namespace.

+

Create a secret with credentials for connecting to the Oracle Database

+

Create a secret with the Oracle database user and password that the exporter should use to connect to the database using this command. You must specify the correct user and password for your environment. This example uses pdbadmin as the user and Welcome12345 as the password:

+
kubectl create secret generic db-secret \
--from-literal=username=pdbadmin \
--from-literal=password=Welcome12345 \
-n exporter
+ +

Create a config map with the exporter configuration file (if you are using one) using this command:

+
kubectl create cm metrics-exporter-config \
--from-file=metrics-exporter-config.yaml
+
+

NOTE: It is strongly recommended to migrate to the new config file if you are running version 2.0.0 or later.

+
+

Create a config map for the wallet (optional)

+

Create a config map with the wallet (if you are using one) using this command. Run this command in the wallet directory you created earlier.

+
kubectl create cm db-metrics-tns-admin \
--from-file=cwallet.sso \
--from-file=ewallet.p12 \
--from-file=ewallet.pem \
--from-file=keystore.jks \
--from-file=ojdbc.properties \
--from-file=sqlnet.ora \
--from-file=tnsnames.ora \
--from-file=truststore.jks \
-n exporter
+

Create a config map for your metrics definition file (optional)

+

If you have defined any custom metrics, you must create a config map for the metrics definition file. For example, if you created a configuration file called txeventq-metrics.toml, then create the config map with this command:

+
kubectl create cm db-metrics-txeventq-exporter-config \
--from-file=txeventq-metrics.toml \
-n exporter
+

Deploy the Oracle Database Observability exporter

+

A sample Kubernetes manifest is provided here. You must edit this file to set the namespace you wish to use, the database connect string to use, and if you have any custom metrics, you will need to uncomment and customize some sections in this file.

+

Once you have made the necessary updates, apply the file to your cluster using this command:

+
kubectl apply -f metrics-exporter-deployment.yaml
+

You can check the deployment was successful and monitor the exporter startup with this command:

+
kubectl get pods -n exporter -w
+

You can view the exporter's logs with this command:

+
kubectl logs -f svc/metrics-exporter -n exporter
+

Create a Kubernetes service for the exporter

+

Create a Kubernetes service to allow access to the exporter pod(s). A sample Kubernetes manifest is provided here. You may need to customize this file to update the namespace.

+

Once you have made any necessary udpates, apply the file to your cluster using this command:

+
kubectl apply -f metrics-exporter-service.yaml
+

Create a Kubernetes service monitor

+

Create a Kubernetes service monitor to tell Prometheus (for example) to collect metrics from the exporter. A sample Kubernetes manifest is provided here. You may need to customize this file to update the namespace.

+

Once you have made any necessary udpates, apply the file to your cluster using this command:

+
kubectl apply -f metrics-service-monitor.yaml
+

Configure a Prometheus target (optional)

+

You may need to update your Prometheus configuration to add a target. If so, you can use this example job definition as a guide:

+
  - job_name: 'oracle-exporter'
metrics_path: '/metrics'
scrape_interval: 15s
scrape_timeout: 10s
static_configs:
- targets:
- metrics-exporter.exporter.svc.cluster.local:9161
+ + \ No newline at end of file diff --git a/docs/docs/next/intro/index.html b/docs/docs/next/intro/index.html new file mode 100644 index 00000000..394977de --- /dev/null +++ b/docs/docs/next/intro/index.html @@ -0,0 +1,39 @@ + + + + + +OpenTelemetry Metrics for Oracle Database | Oracle Database Metrics Exporter + + + + + + + +
Skip to main content
Version: Next

OpenTelemetry Metrics for Oracle Database

+

This project aims to provide observability for the Oracle Database so that users can understand performance and diagnose issues easily across applications and database. Over time, this project will provide not just metrics, but also logging and tracing support, and integration into popular frameworks like Spring Boot. The project aims to deliver functionality to support both cloud and on-premises databases, including those running in Kubernetes and containers.

+

Contributions are welcome - please see contributing.

+

Oracle Database Dashboard

+

Main Features

+

The exporter supports the following main features

+
    +
  • Exports Oracle Database metrics in standard OTEL/Prometheus format
  • +
  • Works with on-prem, in the cloud, and in Kubernetes, with single instance, clustered, or Autonomous Oracle Database instances
  • +
  • Authenticate with plaintext, TLS, and Oracle Wallet
  • +
  • Secure credentials with Oracle Cloud Infrastructure (OCI) Vault or Azure Vault
  • +
  • Load metrics from one or more databases using a single exporter instance
  • +
  • Export the Prometheus Alert Log in JSON format for easy ingest by log aggregators
  • +
  • Pre-buit AMD64 and ARM64 images provided
  • +
  • Standard, default metrics included "out of the box"
  • +
  • Easily define custom metrics using YAML or TOML
  • +
  • Define the scrape interval, database query timeout, and other parameters on a per-metric, per-database level
  • +
  • Customize the database connection pool using go-sql, Oracle Database connection pools, and works with Database Resident Connection Pools
  • +
  • Includes a sample Grafana dashboards for inspiration or customization
  • +
+

From the v1.0 release onwards, this project provides a Prometheus exporter for Oracle Database based in part on a Prometheus exporter created by Seth Miller. This project includes changes to comply with various Oracle standards and policies, as well as new features.

+
+

Seth has archived his exporter as of Feb 13, 2025 and added a note encouraging people to check out ours instead. We wanted to extend a huge "Thank You!" to Seth for the work he did on that exporter, and his contributions to the Oracle and open source communities!

+
+ + \ No newline at end of file diff --git a/docs/docs/next/releases/changelog/index.html b/docs/docs/next/releases/changelog/index.html new file mode 100644 index 00000000..f9bcdadf --- /dev/null +++ b/docs/docs/next/releases/changelog/index.html @@ -0,0 +1,254 @@ + + + + + +Changelog | Oracle Database Metrics Exporter + + + + + + + +
Skip to main content
Version: Next

Release Notes

+

List of upcoming and historic changes to the exporter.

+

Next, in-development

+

Our current priorities are support for Exadata metrics. We expect to address these in an upcoming release.

+

Version 2.0.3, August 27, 2025

+

This release includes the following changes:

+
    +
  • Enable configuration of the prometheus webserver from the config file using the web prefix.
  • +
  • Allow loading of database password(s) from a file.
  • +
  • Fixed a bug where database type (CDB, PDB, etc.) was not reported in certain situations.
  • +
  • Fixed a bug where literal passwords containing the '$' character (in the config file) would be evaluated as environment variables. To use literal passwords with the '$' character, escape the '$' character with a second '$': $test$pwd becomes $$test$$pwd.
  • +
  • Fixed a bug when using metrics.scrapeInterval combined with per-metric scrape intervals that made the available metrics data set inconsistent.
  • +
+

Thank you to the following people for their suggestions and contributions:

+ +

Version 2.0.2, June 24, 2025

+

This release includes the following changes:

+
    +
  • Fixed a case-sensitive issue with resource name in the default metrics file.
  • +
  • Add query timeouts to initial database connections, which could cause the exporter to hang in multi-database configurations
  • +
  • Fix an issue where rapidly acquiring connections could cause the exporter to crash. This was more common in multi-database configurations, due to the increased number of connection pools.
  • +
  • Update some third-party dependencies.
  • +
+

Thank you to the following people for their suggestions and contributions:

+ +

Version 2.0.1, June 12, 2025

+

This release includes the following changes:

+
    +
  • Use gv$ views instead of v$ views to allow collection of metrics from all instances in a cluster. (In preparation for RAC support).
  • +
  • Update some third-party dependencies.
  • +
+

Version 2.0.0, May 27, 2025

+

This release includes the following changes:

+
    +
  • Fixed an issue with scrapeinterval that could cause metrics not to be scraped (#172, #176).
  • +
  • Added configuration through a YAML file, passed using the --config.file command-line argument. Backwards compatibility is maintained for the command-line arguments, through it is recommended to use the configuration file from the 2.0.0 release onward. It is not recommended to use a combination of command-line arguments and the configuration file.
  • +
  • Added support for multiple databases through the configuration file. As many database instances may be specified as needed, which will be scraped concurrently (#89).
  • +
  • Updated provided dashboards.
  • +
  • Updated some third-party dependencies.
  • +
+

Version 1.6.1, May 2, 2025

+

This release includes the following changes:

+
    +
  • Updated some third-party dependencies.
  • +
+

Thank you to the following people for their suggestions and contributions:

+
    +
  • Deepak A.
  • +
+

Version 1.6.0, April 18, 2025

+

This release includes the following changes:

+
    +
  • Added support for Azure Key Vault (#200).
  • +
  • 4Aiur added missing grants for alert log to the demo environment (#207).
  • +
  • Updated some third-party dependencies.
  • +
+

Thank you to the following people for their suggestions and contributions:

+
    +
  • Brian, Damian et al.
  • +
  • 4Aiur
  • +
+

Version 1.5.5, March 13, 2025

+

This release includes the following changes:

+
    +
  • @VictorErmakov updated the docker-compose sample with connection pool parameters to avoid fast connect cycling (#191).
  • +
  • Update default values for connection pool parameters to use go-sql pooling by default to avoid fast connet cycling.
  • +
  • Updated some third-party dependencies.
  • +
+

Thank you to the following people for their suggestions and contributions:

+ +

Version 1.5.4, March 3, 2025

+

This release includes the following changes:

+
    +
  • Based of this recommendation from godror, which relates to the two following items, and in discussion with the ODPI-C team, we have introduced additional parameters to allow you to set connection pool parameters, and have set defaults which will avoid fast connect cycling. It is our expectation that a fix may be produced in the underlying ODPI-C library for the underlying issue. In the mean time, these changes will avoid the conditions under which the error can occur.
  • +
  • Fix malloc error (#177, #181).
  • +
  • Fix intermittent connection issues with ADB-S when exporter is run in a container (#169).
  • +
  • Fix Multiple custom metrics files overwrite one another (#179).
  • +
  • Replace go-kit/log with log/slog, due to upstream changes in prometheus/common.
  • +
  • Add support for additional admin roles, expanding list of options for DB_ROLE to SYSDBA, SYSOPER, SYSBACKUP, SYSDG, SYSKM, SYSRAC and SYSASM (#180).
  • +
  • Updated some third-party dependencies.
  • +
+

Thank you to the following people for their suggestions and contributions:

+ +

Thank you to @tgulacsi for changes in godror (https://github.com/godror/godror/issues/361, https://github.com/godror/godror/issues/360), and to @cjbj and @sudarshan12s for support and guidance from ODPI-C (https://github.com/oracle/odpi).

+

In this release, we also continued some minor code refactoring.

+

Version 1.5.3, January 28, 2025

+

Known issue: This release has a known issue that results in the error message malloc(): unsorted double linked list corrupted. +We recommend staying on 1.5.2 until a new release with a fix is available. We hope to have a fix by early March.

+

This release includes the following changes:

+
    +
  • Fix over-zealous supression of errors when ignorezeroresult = true (#168).
  • +
  • When scrapeinterval is set, do first scrape immediately, not after the interval (#166).
  • +
  • Updated some third-party dependencies.
  • +
+

Thank you to the following people for their suggestions and contributions:

+ +

In this release, we also started some minor code refactoring.

+

Version 1.5.2, December 2, 2024

+

This release includes the following changes:

+
    +
  • Update the metric defintion for tablespace usage to report more accurate temp space usage.
  • +
  • Revert InstantClient to 21c version due to ADB connectivity issue.
  • +
  • Update documentation to explain how to obtain credentials from a wallet.
  • +
  • Fix race condition on err variable in scrape() func (by @valrusu).
  • +
  • Updated some third-party dependencies.
  • +
+

Thank you to the following people for their suggestions and contributions:

+ +

Version 1.5.1, October 28, 2024

+

This release includes the following changes:

+
    +
  • Added support for using the TNS_ADMIN environment variable, which fixes an issue when connecting to Autonomous Database instances using TNS name.
  • +
  • Updated InstantClient to 23ai version for amd64 and latest available 19.24 version for arm64.
  • +
  • Fixed an issue with wrong LD_LIBRARY_PATH on some platforms. (#136)
  • +
  • Added documentation and an example of using the scrapeinterval setting to change the interval at which a certain metric is colected.
  • +
  • Added notes to documentation for extra security parameters needed when using a wallet with Podman.
  • +
  • Updated some third-party dependencies.
  • +
+

Version 1.5.0, September 26, 2024

+

This release includes the following changes:

+
    +
  • Support for running the exporter on ARM processors (darwin and linux).
  • +
  • Updated some third-party dependencies.
  • +
  • Updated the "test/demo environment" to use newer version of Oracle Database (23.5.0.24.07) and faster startup.
  • +
+

Version 1.4.0, September 4, 2024

+

This release includes the following changes:

+
    +
  • Allow multiple custom metrics definition files.
  • +
  • Allow query timeout per-metric.
  • +
  • Allow scrape interval per-metric.
  • +
  • Updated some third-party dependencies.
  • +
+

Version 1.3.1, July 22, 2024

+

This release includes the following changes:

+
    +
  • Alert logs can be disabled by setting parameter log.disable to 1.
  • +
  • Alert log exporter will stop if it gets three consecutive failures.
  • +
  • Updated the list of required permissions.
  • +
  • Updated the TxEventQ sample dashboard.
  • +
  • Updated some third-party dependencies.
  • +
+

Thank you to the following people for their suggestions and contributions:

+ +

Version 1.3.0, June 7, 2024

+

This release includes the following changes:

+
    +
  • Alert logs can be exported for collection by a log reader like Promtail or FluentBit. Default +output to /log/alert.log in JSON format.
  • +
  • Provide ability to connect as SYSDBA or SYSOPER by setting DB_ROLE.
  • +
  • New default metric is added to report the type of database connected to (CDB or PDB).
  • +
  • New default metrics are added for cache hit ratios.
  • +
  • Default metrics updated to suppress spurious warnings in log.
  • +
  • Wait class metric updated to use a better query.
  • +
  • The sample dashboard is updated to include new metrics.
  • +
  • Fixed a bug which prevented periodic freeing of memory.
  • +
  • Set CLIENT_INFO to a meaningful value.
  • +
  • Update Go toolchain to 1.22.4.
  • +
  • Updated some third-party dependencies.
  • +
+

Thank you to the following people for their suggestions and contributions:

+ +

Version 1.2.1, April 16, 2024

+

This release includes the following changes:

+
    +
  • Accept max idle and open connections settings as parameters.
  • +
  • Updated some third-party dependencies.
  • +
+

Version 1.2.0, January 17, 2024

+

This release includes the following changes:

+
    +
  • Introduced a new feature to periodically restart the process if requested.
  • +
  • Introduced a new feature to periodically attempt to free OS memory if requested.
  • +
  • Updated some third-party dependencies.
  • +
+

Version 1.1.1, November 28, 2023

+

This release just updates some third-party dependencies.

+

Version 1.1, October 27, 2023

+

This release includes the following changes:

+
    +
  • The query for the standard metric wait_class has been updated so that it will work in both container databases +and pluggable databases, including in Oracle Autonomous Database instances. Note that this query will not return +any data unless the database instance is under load.
  • +
  • Support for reading the database password from OCI Vault has been added (see details)
  • +
  • Log messages have been improved
  • +
  • Some dependencies have been updated
  • +
+

Version 1.0, September 13, 2023

+

The first production release, v1.0, includes the following features:

+
    +
  • A number of standard metrics are exposed,
  • +
  • Users can define custom metrics,
  • +
  • Oracle regularly reviews third-party licenses and scans the code and images, including transitive/recursive dependencies for issues,
  • +
  • Connection to Oracle can be a basic connection or use an Oracle Wallet and TLS - connection to Oracle Autonomous Database is supported,
  • +
  • Metrics for Oracle Transactional Event Queues are also supported,
  • +
  • A Grafana dashboard is provided for Transactional Event Queues, and
  • +
  • A pre-built container image is provided, based on Oracle Linux, and optimized for size and security.
  • +
+

Note that this exporter uses a different Oracle Database driver which in turn uses code directly written by Oracle to access the database. This driver does require an Oracle client. In this initial release, the client is bundled into the container image, however we intend to make that optional in order to minimize the image size.

+

The interfaces for this version have been kept as close as possible to those of earlier alpha releases in this repository to assist with migration. However, it should be expected that there may be breaking changes in future releases.

+ + \ No newline at end of file diff --git a/docs/docs/next/releases/roadmap/index.html b/docs/docs/next/releases/roadmap/index.html new file mode 100644 index 00000000..da618979 --- /dev/null +++ b/docs/docs/next/releases/roadmap/index.html @@ -0,0 +1,29 @@ + + + + + +Roadmap | Oracle Database Metrics Exporter + + + + + + + +
Skip to main content
Version: Next

Exporter Roadmap

+

Planned and upcoming features for the exporter.

+

We welcome input on community-driven features you'd like to see supported. Please open an issue in this repository with your suggestions.

+

Currently, we plan to address the following key features:

+
    +
  • Provide default Oracle Exadata metrics
  • +
  • Implement connection storm protection: prevent the exporter from repeatedly connecting when the credentials fail, to prevent a storm of connections causing accounts to be locked across a large number of databases
  • +
  • Provide the option to have the Oracle client outside of the container image, e.g., on a shared volume,
  • +
  • Implement the ability to update the configuration dynamically, i.e., without a restart
  • +
  • Implement support for tracing within the database, e.g., using an execution context ID provide by an external caller
  • +
  • Provide additional pre-built Grafana dashboards,
  • +
  • Integration with Spring Observability, e.g., Micrometer
  • +
  • Provide additional documentation and samples
  • +
+ + \ No newline at end of file diff --git a/docs/docs/releases/changelog/index.html b/docs/docs/releases/changelog/index.html index 4ad012d7..0739ee71 100644 --- a/docs/docs/releases/changelog/index.html +++ b/docs/docs/releases/changelog/index.html @@ -1,20 +1,19 @@ - + -Changelog | Oracle Database Metrics Exporter - - +Changelog | Oracle Database Metrics Exporter + + -
Skip to main content

Release Notes

-

List of upcoming and historic changes to the exporter.

-

Next, in-development

-

Our current priorities are support for Exadata metrics. We expect to address these in an upcoming release.

+
Version: 2.0.3

Release Notes

+

List of changes to the exporter.

+

Version 2.0.3, August 27, 2025

This release includes the following changes:

  • Enable configuration of the prometheus webserver from the config file using the web prefix.
  • @@ -248,6 +247,6 @@

    A pre-built container image is provided, based on Oracle Linux, and optimized for size and security.

Note that this exporter uses a different Oracle Database driver which in turn uses code directly written by Oracle to access the database. This driver does require an Oracle client. In this initial release, the client is bundled into the container image, however we intend to make that optional in order to minimize the image size.

-

The interfaces for this version have been kept as close as possible to those of earlier alpha releases in this repository to assist with migration. However, it should be expected that there may be breaking changes in future releases.

+

The interfaces for this version have been kept as close as possible to those of earlier alpha releases in this repository to assist with migration. However, it should be expected that there may be breaking changes in future releases.

\ No newline at end of file diff --git a/docs/docs/releases/roadmap/index.html b/docs/docs/releases/roadmap/index.html index 127e99c3..bf98e6cc 100644 --- a/docs/docs/releases/roadmap/index.html +++ b/docs/docs/releases/roadmap/index.html @@ -1,17 +1,17 @@ - + -Roadmap | Oracle Database Metrics Exporter - - +Roadmap | Oracle Database Metrics Exporter + + -
Skip to main content

Exporter Roadmap

+
Version: 2.0.3

Exporter Roadmap

Planned and upcoming features for the exporter.

We welcome input on community-driven features you'd like to see supported. Please open an issue in this repository with your suggestions.

Currently, we plan to address the following key features:

@@ -24,6 +24,6 @@
  • Provide additional pre-built Grafana dashboards,
  • Integration with Spring Observability, e.g., Micrometer
  • Provide additional documentation and samples
  • -
    +
    \ No newline at end of file diff --git a/docs/index.html b/docs/index.html index 366d746d..bd00a5ca 100644 --- a/docs/index.html +++ b/docs/index.html @@ -4,13 +4,13 @@ Oracle Database Metrics Exporter - - + + -
    Skip to main content

    Oracle Database Metrics Exporter

    OpenTelemetry Metrics for your Oracle Database instances

    Monitor From Anywhere

    Run the Oracle Database Metrics Exporter as a local binary, container, or in Kubernetes. Use pre-built AMD64 and ARM64 images to easily get started.

    Extensible Database Metrics

    Use the default, include database metrics or define custom metrics with plain SQL queries in simple YAML or TOML files.

    Multiple Databases? No Problem

    Easily monitor one or more databases with a single exporter. One of your databases down or under maintenance? You'll still receive metrics from the others.

    +
    Skip to main content

    Oracle Database Metrics Exporter

    OpenTelemetry Metrics for your Oracle Database instances

    Monitor From Anywhere

    Run the Oracle Database Metrics Exporter as a local binary, container, or in Kubernetes. Use pre-built AMD64 and ARM64 images to easily get started.

    Extensible Database Metrics

    Use the default, include database metrics or define custom metrics with plain SQL queries in simple YAML or TOML files.

    Multiple Databases? No Problem

    Easily monitor one or more databases with a single exporter. One of your databases down or under maintenance? You'll still receive metrics from the others.

    \ No newline at end of file diff --git a/docs/markdown-page/index.html b/docs/markdown-page/index.html index dd86d6eb..2e198a91 100644 --- a/docs/markdown-page/index.html +++ b/docs/markdown-page/index.html @@ -4,14 +4,14 @@ Markdown page example | Oracle Database Metrics Exporter - - + + -
    Skip to main content

    Markdown page example

    +

    Markdown page example

    You don't need React to write simple standalone pages.

    \ No newline at end of file diff --git a/docs/sitemap.xml b/docs/sitemap.xml index f29ddffb..f2216ac1 100644 --- a/docs/sitemap.xml +++ b/docs/sitemap.xml @@ -1 +1 @@ -https://oracle.github.io/oracle-db-appdev-monitoring/markdown-pageweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/advanced/developmentweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/advanced/go-runtimeweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/advanced/txeventqweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/category/advancedweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/category/configurationweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/category/getting-startedweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/category/releasesweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/configuration/alert-logsweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/configuration/azure-vaultweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/configuration/config-fileweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/configuration/custom-metricsweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/configuration/multiple-databasesweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/configuration/oci-vaultweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/configuration/oracle-walletweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/getting-started/basicsweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/getting-started/default-metricsweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/getting-started/grafana-dashboardsweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/getting-started/kubernetesweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/introweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/releases/changelogweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/releases/roadmapweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/weekly0.5 \ No newline at end of file +https://oracle.github.io/oracle-db-appdev-monitoring/markdown-pageweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/next/advanced/developmentweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/next/advanced/go-runtimeweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/next/advanced/txeventqweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/next/category/advancedweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/next/category/configurationweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/next/category/getting-startedweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/next/category/releasesweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/next/configuration/alert-logsweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/next/configuration/azure-vaultweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/next/configuration/config-fileweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/next/configuration/custom-metricsweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/next/configuration/multiple-databasesweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/next/configuration/oci-vaultweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/next/configuration/oracle-walletweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/next/getting-started/basicsweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/next/getting-started/default-metricsweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/next/getting-started/grafana-dashboardsweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/next/getting-started/kubernetesweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/next/introweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/next/releases/changelogweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/next/releases/roadmapweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/advanced/developmentweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/advanced/go-runtimeweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/advanced/txeventqweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/category/advancedweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/category/configurationweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/category/getting-startedweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/category/releasesweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/configuration/alert-logsweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/configuration/azure-vaultweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/configuration/config-fileweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/configuration/custom-metricsweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/configuration/multiple-databasesweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/configuration/oci-vaultweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/configuration/oracle-walletweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/getting-started/basicsweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/getting-started/default-metricsweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/getting-started/grafana-dashboardsweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/getting-started/kubernetesweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/introweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/releases/changelogweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/docs/releases/roadmapweekly0.5https://oracle.github.io/oracle-db-appdev-monitoring/weekly0.5 \ No newline at end of file diff --git a/site/docs/releases/changelog.md b/site/docs/releases/changelog.md index 96d8cd18..c56a67d2 100644 --- a/site/docs/releases/changelog.md +++ b/site/docs/releases/changelog.md @@ -11,6 +11,8 @@ List of upcoming and historic changes to the exporter. Our current priorities are support for Exadata metrics. We expect to address these in an upcoming release. +### Version 2.0.3, August 27, 2025 + This release includes the following changes: - Enable configuration of the prometheus webserver from the config file using the `web` prefix. - Allow loading of database password(s) from a file. diff --git a/site/docusaurus.config.ts b/site/docusaurus.config.ts index 0b10ca7e..58625af9 100644 --- a/site/docusaurus.config.ts +++ b/site/docusaurus.config.ts @@ -72,7 +72,7 @@ const config: Config = { }, { type: 'docsVersionDropdown', - versions: ['current'] + versions: ['current', '2.0.3'] }, { href: 'https://github.com/oracle/oracle-db-appdev-monitoring', diff --git a/site/versioned_docs/version-2.0.3/advanced/_category_.json b/site/versioned_docs/version-2.0.3/advanced/_category_.json new file mode 100644 index 00000000..7181f8f0 --- /dev/null +++ b/site/versioned_docs/version-2.0.3/advanced/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Advanced", + "position": 4, + "link": { + "type": "generated-index", + "description": "Advanced configuration." + } +} diff --git a/site/versioned_docs/version-2.0.3/advanced/development.md b/site/versioned_docs/version-2.0.3/advanced/development.md new file mode 100644 index 00000000..a60e6413 --- /dev/null +++ b/site/versioned_docs/version-2.0.3/advanced/development.md @@ -0,0 +1,54 @@ +--- +title: Development +sidebar_position: 3 +--- + +# Development + +The exporter is a Go program using the Prometheus SDK. + +External contributions are welcome, see [CONTRIBUTING](https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/CONTRIBUTING.md) for details. + +The exporter initialization is as follows: + +- Parse flags options and configuration properties +- Load the default toml file (`default-metrics.toml`) and store each metric in a `Metric` struct +- Load the custom toml file (if a custom toml file is given) +- Create an `Exporter` object +- Register exporter in prometheus library +- Launching a web server to handle incoming requests +- Attempt connection to any configured Oracle Database servers + +These operations are mainly done in the `main` function. + +After this initialization phase, the exporter will wait for the arrival of a request. + +Each time, it will iterate over the content of the `metricsToScrape` structure (in the function scrape `func (e * Export) scrape (ch chan <- prometheus.Metric)`). + +For each element (of `Metric` type), a call to the `ScrapeMetric` function will be made which will itself make a call to the `ScrapeGenericValues` function. + +The `ScrapeGenericValues` function will read the information from the `Metric` structure and, depending on the parameters, will generate the metrics to return. In particular, it will use the `GeneratePrometheusMetrics` function which will make SQL calls to the database. + +### Docker/container build + +To build a container image, run the following command: + +```bash +make docker +``` + +For ARM: + +```bash +make docker-arm +``` + +### Building Binaries + +Run build: + +```bash +make go-build +``` + +This will create binaries and archives inside the `dist` folder for the building operating system. diff --git a/site/versioned_docs/version-2.0.3/advanced/go-runtime.md b/site/versioned_docs/version-2.0.3/advanced/go-runtime.md new file mode 100644 index 00000000..d99075fb --- /dev/null +++ b/site/versioned_docs/version-2.0.3/advanced/go-runtime.md @@ -0,0 +1,14 @@ +--- +title: Configuring the Go Runtime +sidebar_position: 1 +--- + +# Exporter Go Runtime + +If you are running in an environment with limited memory, or you are running a large number of exporters, you may want to control the exporter's usage of memory. + +Under normal circumstances, the exporter process will retain OS memory that was used by the Go garbage collector but is no longer needed, in case it may be needed again in the future, unless the host OS is under memory pressure. The result of this behavior (which is the normal behavior of the Go runtime) is that the resident set size will not decrease until the host OS memory is almost all used. Under most circumstances, this will not cause any issues, but if you are in an environment where you need to conserve memory, the following options are provided: + +- You may set the `FREE_INTERVAL` environment variable to a Go [duration string](https://pkg.go.dev/maze.io/x/duration), e.g., `60s` and run the exporter in debug mode by setting the `GODEBUG` environment variable to a value including `madvdontneed=1`, e.g., `GODEBUG=gctrace=1,madvdontneed=1`. The exporter will call the [FreeOSMemory()](https://pkg.go.dev/runtime/debug#FreeOSMemory) at the specified interval. This tells the Go runtime to attempt to release memory which is no longer needed. Please note that this does not guarantee that the memory will be released to the OS, but over time you should see the RSS shrink sooner than without these settings. +- You may set the `RESTART_INTERVAL` environment variable to a Go [duration string](https://pkg.go.dev/maze.io/x/duration), e.g., `10m`. The exporter will restart its own process at the specified iterval (by calling the OS `exec` syscall). As no new process is created, the process identifier (PID) does not change, but the machine code, data, heap, and stack of the process are replaced by those of the new program (source: [Wikipedia](https://en.wikipedia.org/wiki/Exec_(system_call))). This has the side effect of freeing the resident set, so that it will return to its original size. +- In addition to these, you may also set `GOMAXPROCS`, `GOGC`, and `GOMEMLIMIT` (see [documentation](https://pkg.go.dev/runtime#hdr-Environment_Variables)) to further limit the amount of resources that the Go runtime may use. diff --git a/site/versioned_docs/version-2.0.3/advanced/txeventq.md b/site/versioned_docs/version-2.0.3/advanced/txeventq.md new file mode 100644 index 00000000..160c0451 --- /dev/null +++ b/site/versioned_docs/version-2.0.3/advanced/txeventq.md @@ -0,0 +1,117 @@ +--- +title: Monitoring TxEventQ +sidebar_position: 2 +--- + +# Monitoring Transactional Event Queues + +[Oracle Transactional Event Queues](https://docs.oracle.com/en/database/oracle/oracle-database/23/adque/index.html) ("TxEventQ") is a fault-tolerant, scalable, real-time messaging backbone offered by converged Oracle Database that allows you to build an enterprise-class event-driven architectures. + +Access to the real-time broker, producer, and consumer metrics in a single dashboard and receiving alerts for issues allows teams to understand the state of their system. + +The exporter includes a set of metrics for monitoring TxEventQ and a pre-built Grafana dashboard. + +> Note: The metrics are written for Oracle Database 21c or later. + +### How to create some traffic with PL/SQL + +If you need to create a topic to monitor, you can use these statements to create and start a topic, and create a subscriber: + +```sql +declare + subscriber sys.aq$_agent; +begin + -- create the topic + dbms_aqadm.create_transactional_event_queue( + queue_name => 'my_topic', + multiple_consumers => true -- true makes a pub/sub topic + ); + + -- start the topic + dbms_aqadm.start_queue( + queue_name => 'my_topic' + ); + + -- create a subscriber + dbms_aqadm.add_subscriber( + queue_name => 'my_teq', + subscriber => sys.aq$_agent( + 'my_subscriber', -- the subscriber name + null, -- address, only used for notifications + 0 -- protocol + ), + rule => 'correlation = ''my_subscriber''' + ); +end; +``` + +You can produce a message with these commands: + +```sql +declare + enqueue_options dbms_aq.enqueue_options_t; + message_properties dbms_aq.message_properties_t; + message_handle raw(16); + message SYS.AQ$_JMS_TEXT_MESSAGE; +begin + -- create the message payload + message := SYS.AQ$_JMS_TEXT_MESSAGE.construct; + message.set_text('{"orderid": 12345, "username": "Jessica Smith"}'); + + -- set the consumer name + message_properties.correlation := 'my_subscriber'; + + -- enqueue the message + dbms_aq.enqueue( + queue_name => 'my_topic', + enqueue_options => enqueue_options, + message_properties => message_properties, + payload => message, + msgid => message_handle); + + -- commit the transaction + commit; +end; +``` + +### How to create some traffic with Java (Spring Boot) + +A simple load generator is provided in [this directory](https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/docker-compose/txeventq-load) which you can use to create some traffic so you can experiment with the sample dashboard. + +To run the sample, first update [application.yaml](https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/docker-compose/txeventq-load/src/main/resources/application.yaml) with the correct IP address for your database, then start the application as follows: + +```bash +mvn spring-boot:run +``` + +The application will create ten queues names TOPIC_0 through TOPIC_9 and randomly produce and consume messages on those queues. The example dashboard shown below was monitoring traffic produced using this application. + +### Metrics definitions + +The metrics definitions are provided in [this file](https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/custom-metrics-example/txeventq-metrics.toml). You need to provide this file to the exporter, e.g., by adding it to your container image, or creating a Kubernetes config map containing the file and mounting that config map as a volume in your deployment. You also need to set the `CUSTOM_METRICS` environment variable to the location of this file. + +### Additional database permissions + +The database user that the exporter uses to connect to the database will also need additional permissions, which can be granted with these statements. This example assumes the exporter connects with the username "exporter": + +```sql +grant execute on dbms_aq to exporter; +grant execute on dbms_aqadm to exporter; +grant execute on dbms_aqin to exporter; +grant execute on dbms_aqjms_internal to exporter; +grant execute on dbms_teqk to exporter; +grant execute on DBMS_RESOURCE_MANAGER to exporter; +grant select_catalog_role to exporter; +grant select on sys.aq$_queue_shards to exporter; +grant select on user_queue_partition_assignment_table to exporter; +``` + +### Grafana dashboard + +A Grafana dashboard for Transactional Event Queues is provided [in this file](https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/docker-compose/grafana/dashboards/txeventq.json). This can be imported into your Grafana environment. Choose the Prometheus datasource that is collecting metrics from the exporter. + +> Note: You may not see any activity on the dashboard unless there are clients producing and consuming messages from topics. + +The dashboard will look like this: + +![Oracle Database Dashboard](/img/txeventq-dashboard-v2.png) diff --git a/site/versioned_docs/version-2.0.3/configuration/_category_.json b/site/versioned_docs/version-2.0.3/configuration/_category_.json new file mode 100644 index 00000000..6fa86074 --- /dev/null +++ b/site/versioned_docs/version-2.0.3/configuration/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Configuration", + "position": 3, + "link": { + "type": "generated-index", + "description": "How to configure the Oracle Database Metrics Exporter." + } +} diff --git a/site/versioned_docs/version-2.0.3/configuration/alert-logs.md b/site/versioned_docs/version-2.0.3/configuration/alert-logs.md new file mode 100644 index 00000000..a2eed50b --- /dev/null +++ b/site/versioned_docs/version-2.0.3/configuration/alert-logs.md @@ -0,0 +1,30 @@ +--- +title: Alert Logs +sidebar_position: 5 +--- + +# Alert logs + +Collect export alert logs with a log ingestion tool. + +The exporter exports alert log records as a JSON file suitable for collection by a log ingestion tool like Promtail or FluentBit. + +Alert logging is configured with the following parameters in the exporter config file: + +| Parameter | Description | Default | +|-----------------|-------------------------------|------------------| +| log.destination | Log file path | `/log/alert.log` | +| log.interval | Interval to log records | `15s` | +| log.disable | Disable logging if set to `1` | `0` | + +Example alert log YAML configuration: + +```yaml +log: + # Path of log file + destination: /opt/exporter/alert.log + # Interval of log updates + interval: 15s + ## Set disable to 1 to disable logging + # disable: 0 +``` diff --git a/site/versioned_docs/version-2.0.3/configuration/azure-vault.md b/site/versioned_docs/version-2.0.3/configuration/azure-vault.md new file mode 100644 index 00000000..bb49ef77 --- /dev/null +++ b/site/versioned_docs/version-2.0.3/configuration/azure-vault.md @@ -0,0 +1,40 @@ +--- +title: Azure Vault +sidebar_position: 7 +--- + +# Azure Vault + +Securely load database credentials from Azure Vault. + +Each database in the config file may be configured to use Azure Vault. To load the database username and/or password from Azure Vault, set the `vault.azure` property to contain the Azure Vault ID, and secret names for the database username/password: + +```yaml +databases: + mydb: + vault: + azure: + id: + usernameSecret: + passwordSecret: +``` + +### Authentication + +If you are running the exporter outside Azure, we recommend using [application service principal](https://learn.microsoft.com/en-us/azure/developer/go/sdk/authentication/authentication-on-premises-apps). + +If you are running the exporter inside Azure, we recommend using a [managed identity](https://learn.microsoft.com/en-us/azure/developer/go/sdk/authentication/authentication-azure-hosted-apps). + +You should set the following additional environment variables to allow the exporter to authenticate to Azure: + +- `AZURE_TENANT_ID` should be set to your tenant ID +- `AZURE_CLIENT_ID` should be set to the client ID to authenticate to Azure +- `AZURE_CLIENT_SECRET` should be set to the client secret to authenticate to Azure + +### Azure Vault CLI Configuration (without exporter config file) + +If using the default database with CLI parameters, the exporter will read the database username and password from secrets stored in Azure Key Vault if you set these environment variables: + +- `AZ_VAULT_ID` should be set to the ID of the Azure Key Vault that you wish to use +- `AZ_VAULT_USERNAME_SECRET` should be set to the name of the secret in the Azure Key Vault which contains the database username +- `AZ_VAULT_PASSWORD_SECRET` should be set to the name of the secret in the Azure Key Vault which contains the database password \ No newline at end of file diff --git a/site/versioned_docs/version-2.0.3/configuration/config-file.md b/site/versioned_docs/version-2.0.3/configuration/config-file.md new file mode 100644 index 00000000..edd36acf --- /dev/null +++ b/site/versioned_docs/version-2.0.3/configuration/config-file.md @@ -0,0 +1,103 @@ +--- +title: Exporter Config File +sidebar_position: 1 +--- + +# Exporter Config File + +The recommended way to configure the exporter is with the `--config.file` argument, specifying a YAML configuration file. + +The configuration file contains the following options: + +```yaml +# Example Oracle Database Metrics Exporter Configuration file. +# Environment variables of the form ${VAR_NAME} will be expanded. +# If you include a config value that contains a '$' character, escape that '$' with another '$', e.g., +# "$test$pwd" => "$$test$$pwd" +# Otherwise, the value will be expanded as an environment variable. + +# Example Oracle Database Metrics Exporter Configuration file. +# Environment variables of the form ${VAR_NAME} will be expanded. + +databases: + ## Path on which metrics will be served + # metricsPath: /metrics + ## Database connection information for the "default" database. + default: + ## Database username + username: ${DB_USERNAME} + ## Database password + password: ${DB_PASSWORD} + ## Database password file + ## If specified, will load the database password from a file. + # passwordFile: ${DB_PASSWORD_FILE} + ## Database connection url + url: localhost:1521/freepdb1 + + ## Metrics query timeout for this database, in seconds + queryTimeout: 5 + + ## Rely on Oracle Database External Authentication by network or OS + # externalAuth: false + ## Database role + # role: SYSDBA + ## Path to Oracle Database wallet, if using wallet + # tnsAdmin: /path/to/database/wallet + + ### Connection settings: + ### Either the go-sql or Oracle Database connection pool may be used. + ### To use the Oracle Database connection pool over the go-sql connection pool, + ### set maxIdleConns to zero and configure the pool* settings. + + ### Connection pooling settings for the go-sql connection pool + ## Max open connections for this database using go-sql connection pool + maxOpenConns: 10 + ## Max idle connections for this database using go-sql connection pool + maxIdleConns: 10 + + ### Connection pooling settings for the Oracle Database connection pool + ## Oracle Database connection pool increment. + # poolIncrement: 1 + ## Oracle Database Connection pool maximum size + # poolMaxConnections: 15 + ## Oracle Database Connection pool minimum size + # poolMinConnections: 15 + + ## Arbitrary labels to add to each metric scraped from this database + # labels: + # label_name1: label_value1 + # label_name2: label_value2 + +metrics: + ## How often to scrape metrics. If not provided, metrics will be scraped on request. + # scrapeInterval: 15s + ## Path to default metrics file. + default: default-metrics.toml + ## Paths to any custom metrics files + custom: + - custom-metrics-example/custom-metrics.toml + +log: + # Path of log file + destination: /opt/alert.log + # Interval of log updates + interval: 15s + ## Set disable to 1 to disable logging + # disable: 0 + +# Optionally configure prometheus webserver +#web: +# listenAddresses: [':9161'] +# systemdSocket: true|false +# configFile: /path/to/webconfigfile +``` + +### Config file in a container image + +To add your custom config file to a container image, you can layer the base exporter image and include that config: + +```Dockerfile +FROM container-registry.oracle.com/database/observability-exporter:2.0.2 +COPY my-exporter-config.yaml / +ENTRYPOINT ["/oracledb_exporter", "--config.file", "/my-exporter-config.yaml"] +``` \ No newline at end of file diff --git a/site/versioned_docs/version-2.0.3/configuration/custom-metrics.md b/site/versioned_docs/version-2.0.3/configuration/custom-metrics.md new file mode 100644 index 00000000..a6830a20 --- /dev/null +++ b/site/versioned_docs/version-2.0.3/configuration/custom-metrics.md @@ -0,0 +1,134 @@ +--- +title: Custom Metrics +sidebar_position: 2 +--- + +# Custom Metrics + +The exporter allows definition of arbitrary custom metrics in one or more TOML or YAML files. + +To specify custom metrics files +exporter, use the `metrics` configuration in the [config file](./config-file.md): + +```yaml +metrics: + ## How often to scrape metrics. If not provided, metrics will be scraped on request. + # scrapeInterval: 15s + ## Path to default metrics file. + default: default-metrics.toml + ## Paths to any custom metrics files (TOML or YAML) + custom: + - custom-metrics-example/custom-metrics.toml +``` + +You may also use `--custom.metrics` flag followed by a comma separated list of TOML or YAML files, or export `CUSTOM_METRICS` variable environment (`export CUSTOM_METRICS=my-custom-metrics.toml,my-other-custom-metrics.toml`) + +### Metric Schema + +Metrics files must contain a series of `[[metric]]` definitions, in TOML, or the equivalent definition in a YAML file. Each metric definition must follow the exporter's metric schema: + +| Field Name | Description | Type | Required | Default | +|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------|----------|-----------------------------------| +| context | Metric context, used to build metric FQN | String | Yes | | +| labels | Metric labels, which must match column names in the query. Any column that is not a label will be parsed as a metric | Array of Strings | No | | +| metricsdesc | Mapping between field(s) in the request and comment(s) | Dictionary of Strings | Yes | | +| metricstype | Mapping between field(s) in the request and [Prometheus metric types](https://prometheus.io/docs/concepts/metric_types/) | Dictionary of Strings | No | | +| metricsbuckets | Split [histogram](https://prometheus.io/docs/concepts/metric_types/#histogram) metric types into buckets based on value ([example](https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/custom-metrics-example/metric-histogram-example.toml)) | Dictionary of String dictionaries | No | | +| fieldtoappend | Field from the request to append to the metric FQN | String | No | | +| request | Oracle database query to run for metrics scraping | String | Yes | | +| ignorezeroresult | Whether or not an error will be printed if the request does not return any results | Boolean | No | false | +| querytimeout | Oracle Database query timeout duration, e.g., 300ms, 0.5h | String duration | No | Value of query.timeout in seconds | +| scrapeinterval | Custom metric scrape interval, used if scrape.interval is provided, otherwise metrics are always scraped on request. | String duration | No | | +| databases | Optional array of databases to scrape from. If not specified, the metric is scraped from all databases. | Array of Strings | No | | + +### Example Metric Definition + +Here's a simple example of a metric definition: + +```toml +[[metric]] +context = "test" +request = "SELECT 1 as value_1, 2 as value_2 FROM DUAL" +metricsdesc = { value_1 = "Simple example returning always 1.", value_2 = "Same but returning always 2." } +``` + +> NOTE: Do not add a semicolon (`;`) at the end of the SQL queries. + +This file produce the following entries in the exporter: + +```text +# HELP oracledb_test_value_1 Simple example returning always 1. +# TYPE oracledb_test_value_1 gauge +oracledb_test_value_1 1 +# HELP oracledb_test_value_2 Same but returning always 2. +# TYPE oracledb_test_value_2 gauge +oracledb_test_value_2 2 +``` + +You can also provide labels using `labels` field. Here's an example providing two metrics, with and without labels: + +```toml +[[metric]] +context = "context_no_label" +request = "SELECT 1 as value_1, 2 as value_2 FROM DUAL" +metricsdesc = { value_1 = "Simple example returning always 1.", value_2 = "Same but returning always 2." } + +[[metric]] +context = "context_with_labels" +labels = [ "label_1", "label_2" ] +request = "SELECT 1 as value_1, 2 as value_2, 'First label' as label_1, 'Second label' as label_2 FROM DUAL" +metricsdesc = { value_1 = "Simple example returning always 1.", value_2 = "Same but returning always 2." } +``` + +This TOML file produces the following result: + +```text +# HELP oracledb_context_no_label_value_1 Simple example returning always 1. +# TYPE oracledb_context_no_label_value_1 gauge +oracledb_context_no_label_value_1 1 +# HELP oracledb_context_no_label_value_2 Same but returning always 2. +# TYPE oracledb_context_no_label_value_2 gauge +oracledb_context_no_label_value_2 2 +# HELP oracledb_context_with_labels_value_1 Simple example returning always 1. +# TYPE oracledb_context_with_labels_value_1 gauge +oracledb_context_with_labels_value_1{label_1="First label",label_2="Second label"} 1 +# HELP oracledb_context_with_labels_value_2 Same but returning always 2. +# TYPE oracledb_context_with_labels_value_2 gauge +oracledb_context_with_labels_value_2{label_1="First label",label_2="Second label"} 2 +``` + +Last, you can set metric type using **metricstype** field. + +```toml +[[metric]] +context = "context_with_labels" +labels = [ "label_1", "label_2" ] +request = "SELECT 1 as value_1, 2 as value_2, 'First label' as label_1, 'Second label' as label_2 FROM DUAL" +metricsdesc = { value_1 = "Simple example returning always 1 as counter.", value_2 = "Same but returning always 2 as gauge." } +# Can be counter or gauge (default) +metricstype = { value_1 = "counter" } +``` + +This TOML file will produce the following result: + +```text +# HELP oracledb_test_value_1 Simple test example returning always 1 as counter. +# TYPE oracledb_test_value_1 counter +oracledb_test_value_1 1 +# HELP oracledb_test_value_2 Same test but returning always 2 as gauge. +# TYPE oracledb_test_value_2 gauge +oracledb_test_value_2 2 +``` + +You can find [working examples](https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/custom-metrics-example/custom-metrics.toml) of custom metrics for slow queries, big queries and top 100 tables. +An example of [custom metrics for Transacational Event Queues](https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/custom-metrics-example/txeventq-metrics.toml) is also provided. + +### Customize metrics in a container image + +If you run the exporter as a container image and want to include your custom metrics in the image itself, you can use the following example `Dockerfile` to create a new image: + +```Dockerfile +FROM container-registry.oracle.com/database/observability-exporter:2.0.2 +COPY custom-metrics.toml / +ENTRYPOINT ["/oracledb_exporter", "--custom.metrics", "/custom-metrics.toml"] +``` \ No newline at end of file diff --git a/site/versioned_docs/version-2.0.3/configuration/multiple-databases.md b/site/versioned_docs/version-2.0.3/configuration/multiple-databases.md new file mode 100644 index 00000000..d7f1d452 --- /dev/null +++ b/site/versioned_docs/version-2.0.3/configuration/multiple-databases.md @@ -0,0 +1,136 @@ +--- +title: Multiple Databases +sidebar_position: 3 +--- + +# Scraping Multiple Databases + +The exporter may be configured to scrape as many databases as needed. + +You may scrape as many databases as needed by defining named database configurations in the config file. + +If you're connecting to multiple databases using mTLS, see [mTLS for multiple databases with Oracle Wallet](./oracle-wallet.md#mtls-for-multiple-databases-with-oracle-wallet) + +The following settings configure the exporter to scrape multiple databases, "db1", and "db2", simultaneously: + +```yaml +# Example Oracle Database Metrics Exporter Configuration file. +# Environment variables of the form ${VAR_NAME} will be expanded. + +databases: + ## Path on which metrics will be served + # metricsPath: /metrics + + ## As many named database configurations may be defined as needed. + ## It is recommended to define your database config in the config file, rather than using CLI arguments. + + ## Database connection information for the "db1" database. + db1: + ## Database username + username: ${DB1_USERNAME} + ## Database password + password: ${DB1_PASSWORD} + ## Database connection url + url: localhost:1521/freepdb1 + + ## Metrics query timeout for this database, in seconds + queryTimeout: 5 + + ## Rely on Oracle Database External Authentication by network or OS + # externalAuth: false + ## Database role + # role: SYSDBA + ## Path to Oracle Database wallet, if using wallet + # tnsAdmin: /path/to/database/wallet + + ### Connection settings: + ### Either the go-sql or Oracle Database connection pool may be used. + ### To use the Oracle Database connection pool over the go-sql connection pool, + ### set maxIdleConns to zero and configure the pool* settings. + + ### Connection pooling settings for the go-sql connection pool + ## Max open connections for this database using go-sql connection pool + maxOpenConns: 10 + ## Max idle connections for this database using go-sql connection pool + maxIdleConns: 10 + + ### Connection pooling settings for the Oracle Database connection pool + ## Oracle Database connection pool increment. + # poolIncrement: 1 + ## Oracle Database Connection pool maximum size + # poolMaxConnections: 15 + ## Oracle Database Connection pool minimum size + # poolMinConnections: 15 + + ### Arbitrary labels to add to each metric scraped from this database + ## Any labels configured for one database will be added to metrics from + ## every database, because the same metric names must always have the same + ## full labelset. If the label isn't set for a particular database, then it + ## will just be set to an empty string. + # labels: + # label_name1: label_value1 + # label_name2: label_value2 + + db2: + ## Database username + username: ${DB2_USERNAME} + ## Database password + password: ${DB2_PASSWORD} + ## Database connection url + url: localhost:1522/freepdb1 + + ## Metrics query timeout for this database, in seconds + queryTimeout: 5 + + ## Rely on Oracle Database External Authentication by network or OS + # externalAuth: false + ## Database role + # role: SYSDBA + ## Path to Oracle Database wallet, if using wallet + # tnsAdmin: /path/to/database/wallet + + ### Connection settings: + ### Either the go-sql or Oracle Database connection pool may be used. + ### To use the Oracle Database connection pool over the go-sql connection pool, + ### set maxIdleConns to zero and configure the pool* settings. + + ### Connection pooling settings for the go-sql connection pool + ## Max open connections for this database using go-sql connection pool + maxOpenConns: 10 + ## Max idle connections for this database using go-sql connection pool + maxIdleConns: 10 + + ### Connection pooling settings for the Oracle Database connection pool + ## Oracle Database connection pool increment. + # poolIncrement: 1 + ## Oracle Database Connection pool maximum size + # poolMaxConnections: 15 + ## Oracle Database Connection pool minimum size + # poolMinConnections: 15 + + ### Arbitrary labels to add to each metric scraped from this database + ## Any labels configured for one database will be added to metrics from + ## every database, because the same metric names must always have the same + ## full labelset. If the label isn't set for a particular database, then it + ## will just be set to an empty string. + # labels: + # label_name1: label_value1 + # label_name2: label_value2 +``` + +### Only scraping metrics from specific databases + +By default, metrics are scraped from every connected database. To expose only certain metrics on specific databases, configure the `databases` property of a metric. The following metric definition will only be scraped from databases "db2" and "db3": + +```toml +[[metric]] +context = "db_platform" +labels = [ "platform_name" ] +metricsdesc = { value = "Database platform" } +request = ''' +SELECT platform_name, 1 as value FROM gv$database +''' +databases = [ "db2", "db3" ] +``` + +If the `databases` array is empty or not provided for a metric, that metric will be scraped from all connected databases. \ No newline at end of file diff --git a/site/versioned_docs/version-2.0.3/configuration/oci-vault.md b/site/versioned_docs/version-2.0.3/configuration/oci-vault.md new file mode 100644 index 00000000..4a1c0628 --- /dev/null +++ b/site/versioned_docs/version-2.0.3/configuration/oci-vault.md @@ -0,0 +1,30 @@ +--- +title: OCI Vault +sidebar_position: 6 +--- + +# Oracle Cloud Infrastructure (OCI) Vault + +Securely load database credentials from OCI Vault. + +Each database in the config file may be configured to use OCI Vault. To load the database username and/or password from OCI Vault, set the `vault.oci` property to contain the OCI Vault OCID, and secret names for the database username/password: + +```yaml +databases: + mydb: + vault: + oci: + id: + usernameSecret: + passwordSecret: +``` + +### OCI Vault CLI Configuration + +If using the default database with CLI parameters, the exporter will read the username and password from a secret stored in OCI Vault if you set these two environment variables: + +- `OCI_VAULT_ID` should be set to the OCID of the OCI vault that you wish to use +- `OCI_VAULT_USERNAME_SECRET` should be set to the name of the secret in the OCI vault which contains the database username +- `OCI_VAULT_PASSWORD_SECRET` should be set to the name of the secret in the OCI vault which contains the database password + +> Note that the process must be running under a user that has the OCI CLI installed and configured correctly to access the desired tenancy and region. The OCI Profile used is `DEFAULT`. diff --git a/site/versioned_docs/version-2.0.3/configuration/oracle-wallet.md b/site/versioned_docs/version-2.0.3/configuration/oracle-wallet.md new file mode 100644 index 00000000..1e9a2f5e --- /dev/null +++ b/site/versioned_docs/version-2.0.3/configuration/oracle-wallet.md @@ -0,0 +1,109 @@ +--- +title: Oracle Wallet (mTLS) +sidebar_position: 4 +--- + +# Using a Wallet + +For mutual TLS (mTLS) connections, you must use an Oracle Wallet. + +If you are using Oracle Autonomous Database with mTLS, for example, you can download and unzip the wallet from the Oracle Cloud Infrastructure (OCI) console. + +To configure the exporter to use an Oracle Wallet, + +1. Set the `TNS_ADMIN` environment variable to the directory containing the unzipped wallet +2. Configure your database instance with the appropriate database TNS name: + +```yaml +databases: + mydb: + username: admin + password: + # TNS Name from wallet tnsnames.ora file, e.g., mydb_high + url: +``` + +If you are running the exporter as a container, you can mount the wallet as a volume. For example, mounting the `./wallet` directory to the `/wallet` location: + +```bash +docker run -it --rm \ + -e DB_USERNAME=pdbadmin \ + -e DB_PASSWORD=Welcome12345 \ + -e DB_CONNECT_STRING=devdb_tp \ + -v ./wallet:/wallet \ + -p 9161:9161 \ + container-registry.oracle.com/database/observability-exporter:2.0.2 +``` + +### mTLS for multiple databases with Oracle Wallet + +The Oracle Database Metrics exporter uses ODPI-C, which can only initalize the TNS aliases from a `tnsnames.ora` file once per process. To work around this, the exporter can be configured to read from a "combined" `tnsnames.ora` file containing all TNS aliases for connections in a multi-database configuration. + +1. For each database the exporter will connect to, download the corresponding wallet files. If you're using ADB/ATP-S, download the regional wallet instead of the instance wallet if the databases are in the same region. + +2. Copy the TNS aliases the `tnsnames.ora` file from each wallet, and combine them into one file, so all your database service names are in one file together + +3. In the combined `tnsnames.ora` file, and add the following snippet to each TNS alias connection string, to tell the client where the wallet directory is: + +``` +(security=(MY_WALLET_DIRECTORY=/path/to/this/database/wallet)) +``` + +The combined `tnsnames.ora` file, which contains the TNS aliases for both databases, and their corresponding wallet location in the `security` configuration will look something like the following: + +```sql +db1_high = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=adb.****.oraclecloud.com))(connect_data=(service_name=****.adb.oraclecloud.com))(security=(MY_WALLET_DIRECTORY=/wallets/db1)(ssl_server_dn_match=yes))) + +db2_high = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=adb.****.oraclecloud.com))(connect_data=(service_name=****.adb.oraclecloud.com))(security=(MY_WALLET_DIRECTORY=/wallets/db2)(ssl_server_dn_match=yes))) +``` + +4. Take wallet files (cwallet.sso, ewallet.p12, & ewallet.pem) for each database, and place them in separate directories. For example, `db1` gets its own directory, `db2` gets its own directory, and so forth. + +The resulting directory structure should look like the following, with wallet information separate from the combined `tnsnames.ora` file: + +``` +wallets +├── combined +│ ├── sqlnet.ora +│ └── tnsnames.ora // Combined tnsnames.ora +├── db1 +│ ├── cwallet.sso +│ ├── ewallet.p12 +│ └── ewallet.pem +└── db2 +├── cwallet.sso +├── ewallet.p12 +└── ewallet.pem +``` + +5. Set the `TNS_ADMIN` environment variable where the exporter is running to the directory containing your combined `tnsnames.ora` file: + +``` +export TNS_ADMIN=/wallets/combined +``` + +6. Finally, update the exporter configuration file to include the TNS aliases for all databases you will be connecting to. Ensure your database configuration file does not use the `tnsAdmin` property, as we are using the global `TNS_ADMIN` environment variable to point to the combined `tnsnames.ora` file: + +```yaml +databases: + db2: + username: **** + password: **** + url: db2_high + queryTimeout: 5 + maxOpenConns: 10 + maxIdleConns: 10 + db1: + username: **** + password: **** + url: db1_high + queryTimeout: 5 + maxOpenConns: 10 + maxIdleConns: 10 +``` + +Then, run the exporter with the config file: + +```shell +./oracledb_exporter --config.file=my-config-file.yaml +``` \ No newline at end of file diff --git a/site/versioned_docs/version-2.0.3/getting-started/_category_.json b/site/versioned_docs/version-2.0.3/getting-started/_category_.json new file mode 100644 index 00000000..a5d3001d --- /dev/null +++ b/site/versioned_docs/version-2.0.3/getting-started/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Getting Started", + "position": 2, + "link": { + "type": "generated-index", + "description": "Learn the most important Oracle Database Metrics Exporter concepts." + } +} diff --git a/site/versioned_docs/version-2.0.3/getting-started/basics.md b/site/versioned_docs/version-2.0.3/getting-started/basics.md new file mode 100644 index 00000000..2b8ac979 --- /dev/null +++ b/site/versioned_docs/version-2.0.3/getting-started/basics.md @@ -0,0 +1,231 @@ +--- +title: Installation +sidebar_position: 1 +--- + +# Installation + +In this section you will find information on running the exporter. + +- In a container runtime like [Docker, Podman, etc](#docker-podman-etc) +- In a test/demo environment using [Docker Compose](#docker-compose) +- In [Kubernetes](./kubernetes.md) +- As a [standalone binary](#standalone-binary) + +## Docker, Podman, etc + +You can run the exporter in a local container using a container image from [Oracle Container Registry](https://container-registry.oracle.com). The container image is available in the "observability-exporter" repository in the "Database" category. No authentication or license presentment/acceptance are required to pull this image from the registry. + +### Oracle Database Free + +If you need an Oracle Database to test the exporter, you can use this command to start up an instance of [Oracle Database Free](https://www.oracle.com/database/free/) which also requires no authentication or license presentment/acceptance to pull the image. + +```bash +docker run --name free23ai \ + -d \ + -p 1521:1521 \ + -e ORACLE_PASSWORD=Welcome12345 \ + gvenzl/oracle-free:23.9-slim-faststart +``` + +This will pull the image and start up the database with a listener on port 1521. It will also create a pluggable database (a database container) called "FREEPDB1" and will set the admin passwords to the password you specified on this command. + +You can tail the logs to see when the database is ready to use: + +```bash +docker logs -f free23ai + +(look for this message...) +######################### +DATABASE IS READY TO USE! +######################### +``` + +To obtain the IP address of the container, which you will need to connect to the database, use this command. Note: depending on your platform and container runtime, you may be able to access the database at "localhost": + +```bash +docker inspect free23ai | grep IPA + "SecondaryIPAddresses": null, + "IPAddress": "172.17.0.2", + "IPAMConfig": null, + "IPAddress": "172.17.0.2", +``` + +### Exporter + +You need to give the exporter the connection details for the Oracle Database that you want it to run against. You can use a simple connection, or a wallet. + +### Simple connection + +For a simple connection, you will provide the details using these variables: + +- `DB_USERNAME` is the database username, e.g., `pdbadmin` +- `DB_PASSWORD` is the password for that user, e.g., `Welcome12345` +- `DB_CONNECT_STRING` is the connection string, e.g., `free23ai:1521/freepdb` +- `DB_ROLE` (Optional) can be set to `SYSDBA`, `SYSOPER`, `SYSBACKUP`, `SYSDG`, `SYSKM`, `SYSRAC` or `SYSASM` if you want to connect with one of those roles, however Oracle recommends that you connect with the lowest possible privileges and roles necessary for the exporter to run. + +To run the exporter in a container and expose the port, use a command like this, with the appropriate values for the environment variables: + +```bash +docker run -it --rm \ + -e DB_USERNAME=pdbadmin \ + -e DB_PASSWORD=Welcome12345 \ + -e DB_CONNECT_STRING=free23ai:1521/freepdb \ + -p 9161:9161 \ + container-registry.oracle.com/database/observability-exporter:2.0.2 +``` + +## Standalone Binary + +Pre-compiled versions for Linux, ARM and Darwin 64-bit can be found under [releases](https://github.com/oracle/oracle-db-appdev-monitoring/releases). + +In order to run, you'll need the [Oracle Instant Client Basic](http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html) for your operating system. Only the basic version is required for the exporter. + +> NOTE: If you are running the Standalone binary on a Mac ARM platform you must set the variable `DYLD_LIBRARY_PATH` to the location of where the instant client installed. For example `export DYLD_LIBRARY_PATH=/lib/oracle/instantclient_23_3`. + +The following command line arguments (flags) can be passed to the exporter (the --help flag will show the table below). + +```bash +Usage of oracledb_exporter: + --config.file="example-config.yaml" + File with metrics exporter configuration. (env: CONFIG_FILE) + --web.telemetry-path="/metrics" + Path under which to expose metrics. (env: TELEMETRY_PATH) + --default.metrics="default-metrics.toml" + File with default metrics in a TOML file. (env: DEFAULT_METRICS) + --custom.metrics="" Comma separated list of file(s) that contain various custom metrics in a TOML format. (env: CUSTOM_METRICS) + --query.timeout=5 Query timeout (in seconds). (env: QUERY_TIMEOUT) + --database.maxIdleConns=0 Number of maximum idle connections in the connection pool. (env: DATABASE_MAXIDLECONNS) + --database.maxOpenConns=10 + Number of maximum open connections in the connection pool. (env: DATABASE_MAXOPENCONNS) + --database.poolIncrement=-1 + Connection increment when the connection pool reaches max capacity. (env: DATABASE_POOLINCREMENT) + --database.poolMaxConnections=-1 + Maximum number of connections in the connection pool. (env: DATABASE_POOLMAXCONNECTIONS) + --database.poolMinConnections=-1 + Minimum number of connections in the connection pool. (env: DATABASE_POOLMINCONNECTIONS) + --scrape.interval=0s Interval between each scrape. Default is to scrape on collect requests. + --log.disable=0 Set to 1 to disable alert logs + --log.interval=15s Interval between log updates (e.g. 5s). + --log.destination="/log/alert.log" + File to output the alert log to. (env: LOG_DESTINATION) + --web.listen-address=:9161 ... + Addresses on which to expose metrics and web interface. Repeatable for multiple addresses. Examples: `:9100` or `[::1]:9100` for http, `vsock://:9100` for vsock + --web.config.file="" Path to configuration file that can enable TLS or authentication. See: https://github.com/prometheus/exporter-toolkit/blob/master/docs/web-configuration.md + --log.level=info Only log messages with the given severity or above. One of: [debug, info, warn, error] + --log.format=logfmt Output format of log messages. One of: [logfmt, json] + --[no-]version Show application version. +``` + +You may provide the connection details using these variables: + +- `DB_USERNAME` is the database username, e.g., `pdbadmin` +- `DB_PASSWORD` is the password for that user, e.g., `Welcome12345` +- `DB_CONNECT_STRING` is the connection string, e.g., `localhost:1521/freepdb1` +- `DB_ROLE` (Optional) can be set to `SYSDBA` or `SYSOPER` if you want to connect with one of those roles, however Oracle recommends that you connect with the lowest possible privileges and roles necessary for the exporter to run. +- `ORACLE_HOME` is the location of the Oracle Instant Client, e.g., `/lib/oracle/21/client64/lib`. +- `TNS_ADMIN` is the location of your (unzipped) wallet. The `DIRECTORY` set in the `sqlnet.ora` file must match the path that it will be mounted on inside the container. + +The following example puts the logfile in the current location with the filename `alert.log` and loads the default matrics file (`default-metrics,toml`) from the current location. + +If you prefer to provide configuration via a [config file](../configuration/config-file.md), you may do so with the `--config.file` argument. The use of a config file over command line arguments is preferred. If a config file is not provided, the "default" database connection is managed by command line arguments. + +```yaml +# Example Oracle Database Metrics Exporter Configuration file. +# Environment variables of the form ${VAR_NAME} will be expanded. +# If you include a config value that contains a '$' character, escape that '$' with another '$', e.g., +# "$test$pwd" => "$$test$$pwd" +# Otherwise, the value will be expanded as an environment variable. + +# Example Oracle Database Metrics Exporter Configuration file. +# Environment variables of the form ${VAR_NAME} will be expanded. + +databases: + ## Path on which metrics will be served + # metricsPath: /metrics + ## Database connection information for the "default" database. + default: + ## Database username + username: ${DB_USERNAME} + ## Database password + password: ${DB_PASSWORD} + ## Database password file + ## If specified, will load the database password from a file. + # passwordFile: ${DB_PASSWORD_FILE} + ## Database connection url + url: localhost:1521/freepdb1 + + ## Metrics query timeout for this database, in seconds + queryTimeout: 5 + + ## Rely on Oracle Database External Authentication by network or OS + # externalAuth: false + ## Database role + # role: SYSDBA + ## Path to Oracle Database wallet, if using wallet + # tnsAdmin: /path/to/database/wallet + + ### Connection settings: + ### Either the go-sql or Oracle Database connection pool may be used. + ### To use the Oracle Database connection pool over the go-sql connection pool, + ### set maxIdleConns to zero and configure the pool* settings. + + ### Connection pooling settings for the go-sql connection pool + ## Max open connections for this database using go-sql connection pool + maxOpenConns: 10 + ## Max idle connections for this database using go-sql connection pool + maxIdleConns: 10 + + ### Connection pooling settings for the Oracle Database connection pool + ## Oracle Database connection pool increment. + # poolIncrement: 1 + ## Oracle Database Connection pool maximum size + # poolMaxConnections: 15 + ## Oracle Database Connection pool minimum size + # poolMinConnections: 15 + + ## Arbitrary labels to add to each metric scraped from this database + # labels: + # label_name1: label_value1 + # label_name2: label_value2 + +metrics: + ## How often to scrape metrics. If not provided, metrics will be scraped on request. + # scrapeInterval: 15s + ## Path to default metrics file. + default: default-metrics.toml + ## Paths to any custom metrics files + custom: + - custom-metrics-example/custom-metrics.toml + +log: + # Path of log file + destination: /opt/alert.log + # Interval of log updates + interval: 15s + ## Set disable to 1 to disable logging + # disable: 0 + +# Optionally configure prometheus webserver +#web: +# listenAddresses: [':9161'] +# systemdSocket: true|false +# configFile: /path/to/webconfigfile +``` + +### Docker Compose + +If you would like to set up a test environment with the exporter, you can use the provided "Docker Compose" file in this repository which will start an Oracle Database instance, the exporter, Prometheus and Grafana. + +```bash +cd docker-compose +docker-compose up -d +``` + +The containers will take a short time to start. The first time, the Oracle container might take a few minutes to start while it creates the database instance, but this is a one-time operation, and subequent restarts will be much faster (a few seconds). + +Once the containers are all running, you can access the services using these URLs: + +- [Exporter](http://localhost:9161/metrics) +- [Prometheus](http://localhost:9090) - try a query for "oracle". +- [Grafana](http://localhost:3000) - username is "admin" and password is "grafana". An Oracle Database dashboard is provisioned and configured to use data from the exporter. \ No newline at end of file diff --git a/site/versioned_docs/version-2.0.3/getting-started/default-metrics.md b/site/versioned_docs/version-2.0.3/getting-started/default-metrics.md new file mode 100644 index 00000000..084960a0 --- /dev/null +++ b/site/versioned_docs/version-2.0.3/getting-started/default-metrics.md @@ -0,0 +1,136 @@ +--- +title: Default Metrics +sidebar_position: 2 +--- + +# Default Metrics + +The exporter includes [default metrics](https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/collector/default_metrics.toml) for Oracle Database, and process-specific metrics on the `go` runtime. + +You can find the exporter's metric schema in the [Custom Metrics configuration](../configuration/custom-metrics.md#metric-schema). + +The following metrics are included by default. The values given are a sample for a single database, "db1": + +```bash +# HELP oracledb_activity_execute_count Generic counter metric from gv$sysstat view in Oracle. +# TYPE oracledb_activity_execute_count gauge +oracledb_activity_execute_count{database="db1"} 6.212049e+06 +# HELP oracledb_activity_parse_count_total Generic counter metric from gv$sysstat view in Oracle. +# TYPE oracledb_activity_parse_count_total gauge +oracledb_activity_parse_count_total{database="db1"} 1.054178e+06 +# HELP oracledb_activity_user_commits Generic counter metric from gv$sysstat view in Oracle. +# TYPE oracledb_activity_user_commits gauge +oracledb_activity_user_commits{database="db1"} 86538 +# HELP oracledb_activity_user_rollbacks Generic counter metric from gv$sysstat view in Oracle. +# TYPE oracledb_activity_user_rollbacks gauge +oracledb_activity_user_rollbacks{database="db1"} 18 +# HELP oracledb_db_platform_value Database platform +# TYPE oracledb_db_platform_value gauge +oracledb_db_platform_value{database="db1",platform_name="Linux OS (AARCH64)"} 1 +# HELP oracledb_db_system_value Database system resources metric +# TYPE oracledb_db_system_value gauge +oracledb_db_system_value{database="db1",name="cpu_count"} 2 +oracledb_db_system_value{database="db1",name="pga_aggregate_limit"} 2.147483648e+09 +oracledb_db_system_value{database="db1",name="sga_max_size"} 1.610612736e+09 +# HELP oracledb_dbtype Type of database the exporter is connected to (0=non-CDB, 1=CDB, >1=PDB). +# TYPE oracledb_dbtype gauge +oracledb_dbtype{database="db1"} 3 +# HELP oracledb_exporter_build_info A metric with a constant '1' value labeled by version, revision, branch, goversion from which oracledb_exporter was built, and the goos and goarch for the build. +# TYPE oracledb_exporter_build_info gauge +oracledb_exporter_build_info{branch="",goarch="arm64",goos="darwin",goversion="go1.24.5",revision="unknown",tags="unknown",version=""} 1 +# HELP oracledb_exporter_last_scrape_duration_seconds Duration of the last scrape of metrics from Oracle DB. +# TYPE oracledb_exporter_last_scrape_duration_seconds gauge +oracledb_exporter_last_scrape_duration_seconds 0.05714725 +# HELP oracledb_exporter_last_scrape_error Whether the last scrape of metrics from Oracle DB resulted in an error (1 for error, 0 for success). +# TYPE oracledb_exporter_last_scrape_error gauge +oracledb_exporter_last_scrape_error 0 +# HELP oracledb_exporter_scrapes_total Total number of times Oracle DB was scraped for metrics. +# TYPE oracledb_exporter_scrapes_total counter +oracledb_exporter_scrapes_total 2 +# HELP oracledb_process_count Gauge metric with count of processes. +# TYPE oracledb_process_count gauge +oracledb_process_count{database="db1"} 85 +# HELP oracledb_sessions_value Gauge metric with count of sessions by status and type. +# TYPE oracledb_sessions_value gauge +oracledb_sessions_value{database="db1",status="ACTIVE",type="BACKGROUND"} 61 +oracledb_sessions_value{database="db1",status="ACTIVE",type="USER"} 2 +oracledb_sessions_value{database="db1",status="INACTIVE",type="USER"} 19 +# HELP oracledb_tablespace_bytes Generic counter metric of tablespaces bytes in Oracle. +# TYPE oracledb_tablespace_bytes gauge +oracledb_tablespace_bytes{database="db1",tablespace="SYSAUX",type="PERMANENT"} 7.7430784e+08 +oracledb_tablespace_bytes{database="db1",tablespace="SYSTEM",type="PERMANENT"} 3.18963712e+08 +oracledb_tablespace_bytes{database="db1",tablespace="TEMP",type="TEMPORARY"} 7.340032e+06 +oracledb_tablespace_bytes{database="db1",tablespace="UNDOTBS1",type="UNDO"} 2.1364736e+07 +oracledb_tablespace_bytes{database="db1",tablespace="USERS",type="PERMANENT"} 7.340032e+06 +# HELP oracledb_tablespace_free Generic counter metric of tablespaces free bytes in Oracle. +# TYPE oracledb_tablespace_free gauge +oracledb_tablespace_free{database="db1",tablespace="SYSAUX",type="PERMANENT"} 7.5289739264e+10 +oracledb_tablespace_free{database="db1",tablespace="SYSTEM",type="PERMANENT"} 7.524491264e+10 +oracledb_tablespace_free{database="db1",tablespace="TEMP",type="TEMPORARY"} 1.3631488e+07 +oracledb_tablespace_free{database="db1",tablespace="UNDOTBS1",type="UNDO"} 3.518435069952e+13 +oracledb_tablespace_free{database="db1",tablespace="USERS",type="PERMANENT"} 3.4352381952e+10 +# HELP oracledb_tablespace_max_bytes Generic counter metric of tablespaces max bytes in Oracle. +# TYPE oracledb_tablespace_max_bytes gauge +oracledb_tablespace_max_bytes{database="db1",tablespace="SYSAUX",type="PERMANENT"} 7.6064047104e+10 +oracledb_tablespace_max_bytes{database="db1",tablespace="SYSTEM",type="PERMANENT"} 7.5563876352e+10 +oracledb_tablespace_max_bytes{database="db1",tablespace="TEMP",type="TEMPORARY"} 2.097152e+07 +oracledb_tablespace_max_bytes{database="db1",tablespace="UNDOTBS1",type="UNDO"} 3.5184372064256e+13 +oracledb_tablespace_max_bytes{database="db1",tablespace="USERS",type="PERMANENT"} 3.4359721984e+10 +# HELP oracledb_tablespace_used_percent Gauge metric showing as a percentage of how much of the tablespace has been used. +# TYPE oracledb_tablespace_used_percent gauge +oracledb_tablespace_used_percent{database="db1",tablespace="SYSAUX",type="PERMANENT"} 1.0179682379262742 +oracledb_tablespace_used_percent{database="db1",tablespace="SYSTEM",type="PERMANENT"} 0.4221113677574824 +oracledb_tablespace_used_percent{database="db1",tablespace="TEMP",type="TEMPORARY"} 0.35 +oracledb_tablespace_used_percent{database="db1",tablespace="UNDOTBS1",type="UNDO"} 6.072223190734319e-05 +oracledb_tablespace_used_percent{database="db1",tablespace="USERS",type="PERMANENT"} 0.021362314873845517 +# HELP oracledb_top_sql_elapsed SQL statement elapsed time running +# TYPE oracledb_top_sql_elapsed gauge +oracledb_top_sql_elapsed{database="db1",sql_id="0npm6czzaj44m",sql_text="SELECT idx_objn FROM vecsys.vector$index WHERE JSON_VAL"} 6.118614 +oracledb_top_sql_elapsed{database="db1",sql_id="0sbbcuruzd66f",sql_text="select /*+ rule */ bucket_cnt, row_cnt, cache_cnt, null"} 1.538687 +oracledb_top_sql_elapsed{database="db1",sql_id="121ffmrc95v7g",sql_text="select i.obj#,i.ts#,i.file#,i.block#,i.intcols,i.type#,"} 2.200984 +oracledb_top_sql_elapsed{database="db1",sql_id="61znfd8fvgha6",sql_text="SELECT new.sql_seq, old.plan_hash_value, sqlset_row(ne"} 2.628263 +oracledb_top_sql_elapsed{database="db1",sql_id="68dw2nt8wtunk",sql_text="select originating_timestamp, module_id, execution_cont"} 2.296924 +oracledb_top_sql_elapsed{database="db1",sql_id="9bd61v53p81sk",sql_text="begin prvt_hdm.auto_execute( :dbid , :inst_num , :end_s"} 1.67611 +oracledb_top_sql_elapsed{database="db1",sql_id="aba13jkkk3fts",sql_text="SELECT idx_objn, json_value(IDX_SPARE2, '$.counter') FR"} 3.010397 +oracledb_top_sql_elapsed{database="db1",sql_id="afcz0dh295hzp",sql_text=" SELECT /*+ first_rows(1) */ sql_id, force_matching_sig"} 2.246092 +oracledb_top_sql_elapsed{database="db1",sql_id="ampw9ddqufjd3",sql_text="begin /*KAPI:capture*/ dbms_auto_index_internal.capture"} 4.102646 +oracledb_top_sql_elapsed{database="db1",sql_id="avzy19hxu6gg4",sql_text="SELECT VALUE(P) FROM TABLE(DBMS_SQLTUNE.SELECT_CURSOR_C"} 2.564301 +oracledb_top_sql_elapsed{database="db1",sql_id="b39m8n96gxk7c",sql_text="call dbms_autotask_prvt.run_autotask ( :0,:1 )"} 4.418653 +oracledb_top_sql_elapsed{database="db1",sql_id="bj9ajtpfh9f41",sql_text=" declare purge_scn "} 6.425015 +oracledb_top_sql_elapsed{database="db1",sql_id="bq819r502v7u2",sql_text="select originating_timestamp, module_id, execution_cont"} 3.676572 +oracledb_top_sql_elapsed{database="db1",sql_id="ddrfu7d7hbkym",sql_text=" select count(1), partition_id "} 1.870379 +oracledb_top_sql_elapsed{database="db1",sql_id="f6w8rqdkx0bnv",sql_text="SELECT * FROM ( SELECT /*+ ordered use_nl(o c cu h) ind"} 1.895947 +# HELP oracledb_up Whether the Oracle database server is up. +# TYPE oracledb_up gauge +oracledb_up{database="db1"} 1 +# HELP oracledb_wait_time_administrative counter metric from system_wait_class view in Oracle. +# TYPE oracledb_wait_time_administrative counter +oracledb_wait_time_administrative{database="db1"} 0 +# HELP oracledb_wait_time_application counter metric from system_wait_class view in Oracle. +# TYPE oracledb_wait_time_application counter +oracledb_wait_time_application{database="db1"} 0.73 +# HELP oracledb_wait_time_commit counter metric from system_wait_class view in Oracle. +# TYPE oracledb_wait_time_commit counter +oracledb_wait_time_commit{database="db1"} 0.17 +# HELP oracledb_wait_time_concurrency counter metric from system_wait_class view in Oracle. +# TYPE oracledb_wait_time_concurrency counter +oracledb_wait_time_concurrency{database="db1"} 6.8 +# HELP oracledb_wait_time_configuration counter metric from system_wait_class view in Oracle. +# TYPE oracledb_wait_time_configuration counter +oracledb_wait_time_configuration{database="db1"} 19.71 +# HELP oracledb_wait_time_network counter metric from system_wait_class view in Oracle. +# TYPE oracledb_wait_time_network counter +oracledb_wait_time_network{database="db1"} 0.29 +# HELP oracledb_wait_time_other counter metric from system_wait_class view in Oracle. +# TYPE oracledb_wait_time_other counter +oracledb_wait_time_other{database="db1"} 6.02 +# HELP oracledb_wait_time_scheduler counter metric from system_wait_class view in Oracle. +# TYPE oracledb_wait_time_scheduler counter +oracledb_wait_time_scheduler{database="db1"} 4.01 +# HELP oracledb_wait_time_system_io counter metric from system_wait_class view in Oracle. +# TYPE oracledb_wait_time_system_io counter +oracledb_wait_time_system_io{database="db1"} 0.13 +# HELP oracledb_wait_time_user_io counter metric from system_wait_class view in Oracle. +# TYPE oracledb_wait_time_user_io counter +oracledb_wait_time_user_io{database="db1"} 12.38 +``` \ No newline at end of file diff --git a/site/versioned_docs/version-2.0.3/getting-started/grafana-dashboards.md b/site/versioned_docs/version-2.0.3/getting-started/grafana-dashboards.md new file mode 100644 index 00000000..30aeed2c --- /dev/null +++ b/site/versioned_docs/version-2.0.3/getting-started/grafana-dashboards.md @@ -0,0 +1,14 @@ +--- +title: Grafana Dashboards +sidebar_position: 4 +--- + +# Grafana Dashboards + +Sample Grafana dashboards are included with the exporter. + +A sample Grafana dashboard definition is provided [in this directory](https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/docker-compose/grafana/dashboards). You can import these dashboards into your Grafana instance, and set it to use the Prometheus datasource that you have defined for the Prometheus instance that is collecting metrics from the exporter. + +The dashboard shows some basic information, as shown below: + +![Oracle Database Dashboard](/img/oracledb-dashboard.png) diff --git a/site/versioned_docs/version-2.0.3/getting-started/kubernetes.md b/site/versioned_docs/version-2.0.3/getting-started/kubernetes.md new file mode 100644 index 00000000..8023da40 --- /dev/null +++ b/site/versioned_docs/version-2.0.3/getting-started/kubernetes.md @@ -0,0 +1,116 @@ +--- +title: Kubernetes +sidebar_position: 3 +--- + +# Kubernetes + +You can run the exporter in Kubernetes using provided manifests. + +To run the exporter in Kubernetes, you must complete the following steps. All steps must be completed in the same Kunernetes namespace. The examples below assume you want to use a namespace called `exporter`, you must change the commands if you wish to use a different namespace. + +### Create a secret with credentials for connecting to the Oracle Database + +Create a secret with the Oracle database user and password that the exporter should use to connect to the database using this command. You must specify the correct user and password for your environment. This example uses `pdbadmin` as the user and `Welcome12345` as the password: + +```bash +kubectl create secret generic db-secret \ + --from-literal=username=pdbadmin \ + --from-literal=password=Welcome12345 \ + -n exporter +``` + +### Create a config map for the exporter configuration file (recommended) + +Create a config map with the exporter configuration file (if you are using one) using this command: + +```bash +kubectl create cm metrics-exporter-config \ + --from-file=metrics-exporter-config.yaml +``` + +> NOTE: It is strongly recommended to migrate to the new config file if you are running version 2.0.0 or later. + + +### Create a config map for the wallet (optional) + +Create a config map with the wallet (if you are using one) using this command. Run this command in the `wallet` directory you created earlier. + +```bash +kubectl create cm db-metrics-tns-admin \ + --from-file=cwallet.sso \ + --from-file=ewallet.p12 \ + --from-file=ewallet.pem \ + --from-file=keystore.jks \ + --from-file=ojdbc.properties \ + --from-file=sqlnet.ora \ + --from-file=tnsnames.ora \ + --from-file=truststore.jks \ + -n exporter +``` + +### Create a config map for your metrics definition file (optional) + +If you have defined any [custom metrics](../configuration/custom-metrics.md), you must create a config map for the metrics definition file. For example, if you created a configuration file called `txeventq-metrics.toml`, then create the config map with this command: + +```bash +kubectl create cm db-metrics-txeventq-exporter-config \ + --from-file=txeventq-metrics.toml \ + -n exporter +``` + +### Deploy the Oracle Database Observability exporter + +A sample Kubernetes manifest is provided [here](https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/kubernetes/metrics-exporter-deployment.yaml). You must edit this file to set the namespace you wish to use, the database connect string to use, and if you have any custom metrics, you will need to uncomment and customize some sections in this file. + +Once you have made the necessary updates, apply the file to your cluster using this command: + +```bash +kubectl apply -f metrics-exporter-deployment.yaml +``` + +You can check the deployment was successful and monitor the exporter startup with this command: + +```bash +kubectl get pods -n exporter -w +``` + +You can view the exporter's logs with this command: + +```bash +kubectl logs -f svc/metrics-exporter -n exporter +``` + +### Create a Kubernetes service for the exporter + +Create a Kubernetes service to allow access to the exporter pod(s). A sample Kubernetes manifest is provided [here](https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/kubernetes/metrics-exporter-service.yaml). You may need to customize this file to update the namespace. + +Once you have made any necessary udpates, apply the file to your cluster using this command: + +```bash +kubectl apply -f metrics-exporter-service.yaml +``` + +### Create a Kubernetes service monitor + +Create a Kubernetes service monitor to tell Prometheus (for example) to collect metrics from the exporter. A sample Kubernetes manifest is provided [here](https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/kubernetes/metrics-service-monitor.yaml). You may need to customize this file to update the namespace. + +Once you have made any necessary udpates, apply the file to your cluster using this command: + +```bash +kubectl apply -f metrics-service-monitor.yaml +``` + +### Configure a Prometheus target (optional) + +You may need to update your Prometheus configuration to add a target. If so, you can use this example job definition as a guide: + +```yaml + - job_name: 'oracle-exporter' + metrics_path: '/metrics' + scrape_interval: 15s + scrape_timeout: 10s + static_configs: + - targets: + - metrics-exporter.exporter.svc.cluster.local:9161 +``` diff --git a/site/versioned_docs/version-2.0.3/intro.md b/site/versioned_docs/version-2.0.3/intro.md new file mode 100644 index 00000000..cc0e3cb8 --- /dev/null +++ b/site/versioned_docs/version-2.0.3/intro.md @@ -0,0 +1,32 @@ +--- +sidebar_position: 1 +--- + +# OpenTelemetry Metrics for Oracle Database + +This project aims to provide observability for the Oracle Database so that users can understand performance and diagnose issues easily across applications and database. Over time, this project will provide not just metrics, but also logging and tracing support, and integration into popular frameworks like Spring Boot. The project aims to deliver functionality to support both cloud and on-premises databases, including those running in Kubernetes and containers. + +Contributions are welcome - please see [contributing](https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/CONTRIBUTING.md). + +![Oracle Database Dashboard](/img/exporter-running-against-basedb.png) + +## Main Features + +The exporter supports the following main features + +- Exports Oracle Database metrics in standard OTEL/Prometheus format +- Works with on-prem, in the cloud, and in Kubernetes, with single instance, clustered, or Autonomous Oracle Database instances +- Authenticate with plaintext, TLS, and Oracle Wallet +- Secure credentials with Oracle Cloud Infrastructure (OCI) Vault or Azure Vault +- Load metrics from one or more databases using a single exporter instance +- Export the Prometheus Alert Log in JSON format for easy ingest by log aggregators +- Pre-buit AMD64 and ARM64 images provided +- Standard, default metrics included "out of the box" +- Easily define custom metrics using YAML or TOML +- Define the scrape interval, database query timeout, and other parameters on a per-metric, per-database level +- Customize the database connection pool using go-sql, Oracle Database connection pools, and works with Database Resident Connection Pools +- Includes a sample [Grafana dashboards](https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/docker-compose/grafana) for inspiration or customization + +From the v1.0 release onwards, this project provides a [Prometheus](https://prometheus.io/) exporter for Oracle Database based in part on a Prometheus exporter created by [Seth Miller](https://github.com/iamseth/oracledb_exporter). This project includes changes to comply with various Oracle standards and policies, as well as new features. + +> Seth has archived his exporter as of Feb 13, 2025 and added a note encouraging people to check out ours instead. We wanted to extend a huge "Thank You!" to Seth for the work he did on that exporter, and his contributions to the Oracle and open source communities! diff --git a/site/versioned_docs/version-2.0.3/releases/_category_.json b/site/versioned_docs/version-2.0.3/releases/_category_.json new file mode 100644 index 00000000..ec3de8d2 --- /dev/null +++ b/site/versioned_docs/version-2.0.3/releases/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Releases", + "position": 5, + "link": { + "type": "generated-index", + "description": "Information on the exporter releases, changelog, and roadmap." + } +} diff --git a/site/versioned_docs/version-2.0.3/releases/changelog.md b/site/versioned_docs/version-2.0.3/releases/changelog.md new file mode 100644 index 00000000..e7030fcc --- /dev/null +++ b/site/versioned_docs/version-2.0.3/releases/changelog.md @@ -0,0 +1,271 @@ +--- +title: Changelog +sidebar_position: 2 +--- + +# Release Notes + +List of changes to the exporter. + +### Version 2.0.3, August 27, 2025 + +This release includes the following changes: +- Enable configuration of the prometheus webserver from the config file using the `web` prefix. +- Allow loading of database password(s) from a file. +- Fixed a bug where database type (CDB, PDB, etc.) was not reported in certain situations. +- Fixed a bug where literal passwords containing the '$' character (in the config file) would be evaluated as environment variables. To use literal passwords with the '$' character, escape the '$' character with a second '$': `$test$pwd` becomes `$$test$$pwd`. +- Fixed a bug when using `metrics.scrapeInterval` combined with per-metric scrape intervals that made the available metrics data set inconsistent. + +Thank you to the following people for their suggestions and contributions: + +- [@Supporterino](https://github.com/Supporterino) +- [@neilschelly](https://github.com/neilschelly) +- [@aberinnj](https://github.com/aberinnj) +- [@redelang](https://github.com/redelang) +- [@qrkop](https://github.com/qrkop) +- [@KevDi](https://github.com/KevDi) +- [@bomuva](https://github.com/bomuva) +- [@anilmoris](https://github.com/anilmoris) +- [@Sycri](https://github.com/Sycri) +- [@kizuna-lek](https://github.com/kizuna-lek) +- [@rfrozza](https://github.com/rfrozza) +- [@neilschelly](https://github.com/neilschelly) + +### Version 2.0.2, June 24, 2025 + +This release includes the following changes: + +- Fixed a case-sensitive issue with resource name in the default metrics file. +- Add query timeouts to initial database connections, which could cause the exporter to hang in multi-database configurations +- Fix an issue where rapidly acquiring connections could cause the exporter to crash. This was more common in multi-database configurations, due to the increased number of connection pools. +- Update some third-party dependencies. + +Thank you to the following people for their suggestions and contributions: + +- [@rfrozza](https://github.com/rfrozza) +- [@neilschelly](https://github.com/neilschelly) +- [@rafal-szypulka](https://github.com/rafal-szypulka) +- [@darkelfit](https://github.com/darkelfit) + +### Version 2.0.1, June 12, 2025 + +This release includes the following changes: + +- Use gv$ views instead of v$ views to allow collection of metrics from all instances in a cluster. (In preparation for RAC support). +- Update some third-party dependencies. + +### Version 2.0.0, May 27, 2025 + +This release includes the following changes: + +- Fixed an issue with `scrapeinterval` that could cause metrics not to be scraped (#172, #176). +- Added configuration through a YAML file, passed using the `--config.file` command-line argument. Backwards compatibility is maintained for the command-line arguments, through it is recommended to use the configuration file from the 2.0.0 release onward. It is not recommended to use a combination of command-line arguments and the configuration file. +- Added support for multiple databases through the configuration file. As many database instances may be specified as needed, which will be scraped concurrently (#89). +- Updated provided dashboards. +- Updated some third-party dependencies. + +### Version 1.6.1, May 2, 2025 + +This release includes the following changes: + +- Updated some third-party dependencies. + +Thank you to the following people for their suggestions and contributions: + +- Deepak A. + +### Version 1.6.0, April 18, 2025 + +This release includes the following changes: + +- Added support for Azure Key Vault (#200). +- [4Aiur](https://github.com/4Aiur) added missing grants for alert log to the demo environment (#207). +- Updated some third-party dependencies. + +Thank you to the following people for their suggestions and contributions: + +- Brian, Damian et al. +- [4Aiur](https://github.com/4Aiur) + + +### Version 1.5.5, March 13, 2025 + +This release includes the following changes: + +- [@VictorErmakov](https://github.com/VictorErmakov) updated the docker-compose sample with connection pool parameters to avoid fast connect cycling (#191). +- Update default values for connection pool parameters to use go-sql pooling by default to avoid fast connet cycling. +- Updated some third-party dependencies. + +Thank you to the following people for their suggestions and contributions: + +- [@VictorErmakov](https://github.com/VictorErmakov) + + +### Version 1.5.4, March 3, 2025 + +This release includes the following changes: + +- Based of this recommendation from [godror](https://github.com/godror/godror?tab=readme-ov-file#pooling), which relates to the two following items, and in discussion with the ODPI-C team, we have introduced additional parameters to allow you to set connection pool parameters, and have set defaults which will avoid fast connect cycling. It is our expectation that a fix may be produced in the underlying ODPI-C library for the underlying issue. In the mean time, these changes will avoid the conditions under which the error can occur. +- Fix malloc error (#177, #181). +- Fix intermittent connection issues with ADB-S when exporter is run in a container (#169). +- Fix Multiple custom metrics files overwrite one another (#179). +- Replace go-kit/log with log/slog, due to upstream changes in prometheus/common. +- Add support for additional admin roles, expanding list of options for `DB_ROLE` to `SYSDBA`, `SYSOPER`, `SYSBACKUP`, `SYSDG`, `SYSKM`, `SYSRAC` and `SYSASM` (#180). +- Updated some third-party dependencies. + +Thank you to the following people for their suggestions and contributions: + +- [@Jman1993](https://github.com/Jman1993) +- [@oey](https://github.com/oey) +- [@jlembeck06](https://github.com/jlembeck06) +- [@Jman1993](https://github.com/Jman1993) +- [@PeterP55P](https://github.com/PeterP55P) +- [@rlagyu0](https://github.com/rlagyu0) +- [@Sycri](https://github.com/Sycri) + +Thank you to [@tgulacsi](https://github.com/tgulacsi) for changes in godror (https://github.com/godror/godror/issues/361, https://github.com/godror/godror/issues/360), and to [@cjbj](https://github.com/cjbj) and [@sudarshan12s](https://github.com/sudarshan12s) for support and guidance from ODPI-C (https://github.com/oracle/odpi). + +In this release, we also continued some minor code refactoring. + +### Version 1.5.3, January 28, 2025 + +*Known issue*: This release has a known issue that results in the error message `malloc(): unsorted double linked list corrupted`. +We recommend staying on 1.5.2 until a new release with a fix is available. We hope to have a fix by early March. + +This release includes the following changes: + +- Fix over-zealous supression of errors when `ignorezeroresult = true` (#168). +- When `scrapeinterval` is set, do first scrape immediately, not after the interval (#166). +- Updated some third-party dependencies. + +Thank you to the following people for their suggestions and contributions: + +- [@redelang](https://github.com/redelang) + +In this release, we also started some minor code refactoring. + +### Version 1.5.2, December 2, 2024 + +This release includes the following changes: + +- Update the metric defintion for tablespace usage to report more accurate temp space usage. +- Revert InstantClient to 21c version due to ADB connectivity issue. +- Update documentation to explain how to obtain credentials from a wallet. +- Fix race condition on err variable in scrape() func (by @valrusu). +- Updated some third-party dependencies. + +Thank you to the following people for their suggestions and contributions: + +- [@aureliocirella](https://github.com/aureliocirella) +- [@mitoeth](https://github.com/mitoeth) +- [@valrusu](https://github.com/valrusu) + +### Version 1.5.1, October 28, 2024 + +This release includes the following changes: + +- Added support for using the `TNS_ADMIN` environment variable, which fixes an issue when connecting to Autonomous Database instances using TNS name. +- Updated InstantClient to 23ai version for amd64 and latest available 19.24 version for arm64. +- Fixed an issue with wrong `LD_LIBRARY_PATH` on some platforms. (#136) +- Added documentation and an example of using the `scrapeinterval` setting to change the interval at which a certain metric is colected. +- Added notes to documentation for extra security parameters needed when using a wallet with Podman. +- Updated some third-party dependencies. + +### Version 1.5.0, September 26, 2024 + +This release includes the following changes: + +- Support for running the exporter on ARM processors (darwin and linux). +- Updated some third-party dependencies. +- Updated the "test/demo environment" to use newer version of Oracle Database (23.5.0.24.07) and faster startup. + +### Version 1.4.0, September 4, 2024 + +This release includes the following changes: + +- Allow multiple custom metrics definition files. +- Allow query timeout per-metric. +- Allow scrape interval per-metric. +- Updated some third-party dependencies. + +### Version 1.3.1, July 22, 2024 + +This release includes the following changes: + +- Alert logs can be disabled by setting parameter `log.disable` to `1`. +- Alert log exporter will stop if it gets three consecutive failures. +- Updated the list of required permissions. +- Updated the TxEventQ sample dashboard. +- Updated some third-party dependencies. + +Thank you to the following people for their suggestions and contributions: + +- [@tux-jochen](https://github.com/tux-jochen) + +### Version 1.3.0, June 7, 2024 + +This release includes the following changes: + +- Alert logs can be exported for collection by a log reader like Promtail or FluentBit. Default + output to `/log/alert.log` in JSON format. +- Provide ability to connect as SYSDBA or SYSOPER by setting DB_ROLE. +- New default metric is added to report the type of database connected to (CDB or PDB). +- New default metrics are added for cache hit ratios. +- Default metrics updated to suppress spurious warnings in log. +- Wait class metric updated to use a better query. +- The sample dashboard is updated to include new metrics. +- Fixed a bug which prevented periodic freeing of memory. +- Set CLIENT_INFO to a meaningful value. +- Update Go toolchain to 1.22.4. +- Updated some third-party dependencies. + +Thank you to the following people for their suggestions and contributions: + +- [@pioro](https://github.com/pioro) +- [@savoir81](https://github.com/savoir81) + +### Version 1.2.1, April 16, 2024 + +This release includes the following changes: + +- Accept max idle and open connections settings as parameters. +- Updated some third-party dependencies. + +### Version 1.2.0, January 17, 2024 + +This release includes the following changes: + +- Introduced a new feature to periodically restart the process if requested. +- Introduced a new feature to periodically attempt to free OS memory if requested. +- Updated some third-party dependencies. + +### Version 1.1.1, November 28, 2023 + +This release just updates some third-party dependencies. + +### Version 1.1, October 27, 2023 + +This release includes the following changes: + +- The query for the standard metric `wait_class` has been updated so that it will work in both container databases + and pluggable databases, including in Oracle Autonomous Database instances. Note that this query will not return + any data unless the database instance is under load. +- Support for reading the database password from OCI Vault has been added (see [details](../configuration/oci-vault.md)) +- Log messages have been improved +- Some dependencies have been updated + +### Version 1.0, September 13, 2023 + +The first production release, v1.0, includes the following features: + +- A number of [standard metrics](../getting-started/default-metrics.md) are exposed, +- Users can define [custom metrics](../configuration/custom-metrics.md), +- Oracle regularly reviews third-party licenses and scans the code and images, including transitive/recursive dependencies for issues, +- Connection to Oracle can be a basic connection or use an Oracle Wallet and TLS - connection to Oracle Autonomous Database is supported, +- Metrics for Oracle Transactional Event Queues are also supported, +- A Grafana dashboard is provided for Transactional Event Queues, and +- A pre-built container image is provided, based on Oracle Linux, and optimized for size and security. + +Note that this exporter uses a different Oracle Database driver which in turn uses code directly written by Oracle to access the database. This driver does require an Oracle client. In this initial release, the client is bundled into the container image, however we intend to make that optional in order to minimize the image size. + +The interfaces for this version have been kept as close as possible to those of earlier alpha releases in this repository to assist with migration. However, it should be expected that there may be breaking changes in future releases. \ No newline at end of file diff --git a/site/versioned_docs/version-2.0.3/releases/roadmap.md b/site/versioned_docs/version-2.0.3/releases/roadmap.md new file mode 100644 index 00000000..b19aa0ec --- /dev/null +++ b/site/versioned_docs/version-2.0.3/releases/roadmap.md @@ -0,0 +1,21 @@ +--- +title: Roadmap +sidebar_position: 1 +--- + +# Exporter Roadmap + +Planned and upcoming features for the exporter. + +We welcome input on community-driven features you'd like to see supported. Please open an issue in this repository with your suggestions. + +Currently, we plan to address the following key features: + +- Provide default Oracle Exadata metrics +- Implement connection storm protection: prevent the exporter from repeatedly connecting when the credentials fail, to prevent a storm of connections causing accounts to be locked across a large number of databases +- Provide the option to have the Oracle client outside of the container image, e.g., on a shared volume, +- Implement the ability to update the configuration dynamically, i.e., without a restart +- Implement support for tracing within the database, e.g., using an execution context ID provide by an external caller +- Provide additional pre-built Grafana dashboards, +- Integration with Spring Observability, e.g., Micrometer +- Provide additional documentation and samples diff --git a/site/versioned_sidebars/version-2.0.3-sidebars.json b/site/versioned_sidebars/version-2.0.3-sidebars.json new file mode 100644 index 00000000..caea0c03 --- /dev/null +++ b/site/versioned_sidebars/version-2.0.3-sidebars.json @@ -0,0 +1,8 @@ +{ + "tutorialSidebar": [ + { + "type": "autogenerated", + "dirName": "." + } + ] +} diff --git a/site/versions.json b/site/versions.json index 0d4f101c..7204358b 100644 --- a/site/versions.json +++ b/site/versions.json @@ -1,2 +1,3 @@ [ + "2.0.3" ] From 1f590ece1105cac9aab3d8fb5d132f40f52ef9a4 Mon Sep 17 00:00:00 2001 From: Anders Swanson Date: Wed, 27 Aug 2025 14:49:08 -0700 Subject: [PATCH 2/3] Version 2.0.3 documentation Signed-off-by: Anders Swanson --- site/docs/configuration/config-file.md | 2 +- site/docs/configuration/custom-metrics.md | 2 +- site/docs/configuration/oracle-wallet.md | 2 +- site/docs/getting-started/basics.md | 2 +- site/versioned_docs/version-2.0.3/configuration/config-file.md | 2 +- .../version-2.0.3/configuration/custom-metrics.md | 2 +- .../versioned_docs/version-2.0.3/configuration/oracle-wallet.md | 2 +- site/versioned_docs/version-2.0.3/getting-started/basics.md | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/site/docs/configuration/config-file.md b/site/docs/configuration/config-file.md index edd36acf..33f6a800 100644 --- a/site/docs/configuration/config-file.md +++ b/site/docs/configuration/config-file.md @@ -97,7 +97,7 @@ log: To add your custom config file to a container image, you can layer the base exporter image and include that config: ```Dockerfile -FROM container-registry.oracle.com/database/observability-exporter:2.0.2 +FROM container-registry.oracle.com/database/observability-exporter:2.0.3 COPY my-exporter-config.yaml / ENTRYPOINT ["/oracledb_exporter", "--config.file", "/my-exporter-config.yaml"] ``` \ No newline at end of file diff --git a/site/docs/configuration/custom-metrics.md b/site/docs/configuration/custom-metrics.md index a6830a20..6c9fa68d 100644 --- a/site/docs/configuration/custom-metrics.md +++ b/site/docs/configuration/custom-metrics.md @@ -128,7 +128,7 @@ An example of [custom metrics for Transacational Event Queues](https://github.co If you run the exporter as a container image and want to include your custom metrics in the image itself, you can use the following example `Dockerfile` to create a new image: ```Dockerfile -FROM container-registry.oracle.com/database/observability-exporter:2.0.2 +FROM container-registry.oracle.com/database/observability-exporter:2.0.3 COPY custom-metrics.toml / ENTRYPOINT ["/oracledb_exporter", "--custom.metrics", "/custom-metrics.toml"] ``` \ No newline at end of file diff --git a/site/docs/configuration/oracle-wallet.md b/site/docs/configuration/oracle-wallet.md index 1e9a2f5e..4900dc55 100644 --- a/site/docs/configuration/oracle-wallet.md +++ b/site/docs/configuration/oracle-wallet.md @@ -32,7 +32,7 @@ docker run -it --rm \ -e DB_CONNECT_STRING=devdb_tp \ -v ./wallet:/wallet \ -p 9161:9161 \ - container-registry.oracle.com/database/observability-exporter:2.0.2 + container-registry.oracle.com/database/observability-exporter:2.0.3 ``` ### mTLS for multiple databases with Oracle Wallet diff --git a/site/docs/getting-started/basics.md b/site/docs/getting-started/basics.md index 2b8ac979..6dfd39d5 100644 --- a/site/docs/getting-started/basics.md +++ b/site/docs/getting-started/basics.md @@ -72,7 +72,7 @@ docker run -it --rm \ -e DB_PASSWORD=Welcome12345 \ -e DB_CONNECT_STRING=free23ai:1521/freepdb \ -p 9161:9161 \ - container-registry.oracle.com/database/observability-exporter:2.0.2 + container-registry.oracle.com/database/observability-exporter:2.0.3 ``` ## Standalone Binary diff --git a/site/versioned_docs/version-2.0.3/configuration/config-file.md b/site/versioned_docs/version-2.0.3/configuration/config-file.md index edd36acf..33f6a800 100644 --- a/site/versioned_docs/version-2.0.3/configuration/config-file.md +++ b/site/versioned_docs/version-2.0.3/configuration/config-file.md @@ -97,7 +97,7 @@ log: To add your custom config file to a container image, you can layer the base exporter image and include that config: ```Dockerfile -FROM container-registry.oracle.com/database/observability-exporter:2.0.2 +FROM container-registry.oracle.com/database/observability-exporter:2.0.3 COPY my-exporter-config.yaml / ENTRYPOINT ["/oracledb_exporter", "--config.file", "/my-exporter-config.yaml"] ``` \ No newline at end of file diff --git a/site/versioned_docs/version-2.0.3/configuration/custom-metrics.md b/site/versioned_docs/version-2.0.3/configuration/custom-metrics.md index a6830a20..6c9fa68d 100644 --- a/site/versioned_docs/version-2.0.3/configuration/custom-metrics.md +++ b/site/versioned_docs/version-2.0.3/configuration/custom-metrics.md @@ -128,7 +128,7 @@ An example of [custom metrics for Transacational Event Queues](https://github.co If you run the exporter as a container image and want to include your custom metrics in the image itself, you can use the following example `Dockerfile` to create a new image: ```Dockerfile -FROM container-registry.oracle.com/database/observability-exporter:2.0.2 +FROM container-registry.oracle.com/database/observability-exporter:2.0.3 COPY custom-metrics.toml / ENTRYPOINT ["/oracledb_exporter", "--custom.metrics", "/custom-metrics.toml"] ``` \ No newline at end of file diff --git a/site/versioned_docs/version-2.0.3/configuration/oracle-wallet.md b/site/versioned_docs/version-2.0.3/configuration/oracle-wallet.md index 1e9a2f5e..4900dc55 100644 --- a/site/versioned_docs/version-2.0.3/configuration/oracle-wallet.md +++ b/site/versioned_docs/version-2.0.3/configuration/oracle-wallet.md @@ -32,7 +32,7 @@ docker run -it --rm \ -e DB_CONNECT_STRING=devdb_tp \ -v ./wallet:/wallet \ -p 9161:9161 \ - container-registry.oracle.com/database/observability-exporter:2.0.2 + container-registry.oracle.com/database/observability-exporter:2.0.3 ``` ### mTLS for multiple databases with Oracle Wallet diff --git a/site/versioned_docs/version-2.0.3/getting-started/basics.md b/site/versioned_docs/version-2.0.3/getting-started/basics.md index 2b8ac979..6dfd39d5 100644 --- a/site/versioned_docs/version-2.0.3/getting-started/basics.md +++ b/site/versioned_docs/version-2.0.3/getting-started/basics.md @@ -72,7 +72,7 @@ docker run -it --rm \ -e DB_PASSWORD=Welcome12345 \ -e DB_CONNECT_STRING=free23ai:1521/freepdb \ -p 9161:9161 \ - container-registry.oracle.com/database/observability-exporter:2.0.2 + container-registry.oracle.com/database/observability-exporter:2.0.3 ``` ## Standalone Binary From f9f15542068ab2e3a6c6b2b5351d506db6d9e317 Mon Sep 17 00:00:00 2001 From: Anders Swanson Date: Wed, 27 Aug 2025 14:49:37 -0700 Subject: [PATCH 3/3] Version 2.0.3 documentation Signed-off-by: Anders Swanson --- docs/404.html | 2 +- docs/assets/js/{1e10f605.85d7d328.js => 1e10f605.bb940bfb.js} | 2 +- docs/assets/js/{3c57bc2c.e119104c.js => 3c57bc2c.e15a56a8.js} | 2 +- docs/assets/js/{49d0ab44.d41e7e86.js => 49d0ab44.622e0e53.js} | 2 +- docs/assets/js/{ab01181e.bd6e5167.js => ab01181e.83f49c36.js} | 2 +- docs/assets/js/{af966633.d7133a46.js => af966633.7080bdcb.js} | 2 +- docs/assets/js/{d94a41cc.cf627fef.js => d94a41cc.4186b72c.js} | 2 +- docs/assets/js/{f6de67f9.85db75b5.js => f6de67f9.f329491a.js} | 2 +- docs/assets/js/{f7d2b7bf.0e65ba99.js => f7d2b7bf.ef718eaa.js} | 2 +- .../js/{runtime~main.cf06ab3a.js => runtime~main.3ea07ab5.js} | 2 +- docs/docs/advanced/development/index.html | 2 +- docs/docs/advanced/go-runtime/index.html | 2 +- docs/docs/advanced/txeventq/index.html | 2 +- docs/docs/category/advanced/index.html | 2 +- docs/docs/category/configuration/index.html | 2 +- docs/docs/category/getting-started/index.html | 2 +- docs/docs/category/releases/index.html | 2 +- docs/docs/configuration/alert-logs/index.html | 2 +- docs/docs/configuration/azure-vault/index.html | 2 +- docs/docs/configuration/config-file/index.html | 4 ++-- docs/docs/configuration/custom-metrics/index.html | 4 ++-- docs/docs/configuration/multiple-databases/index.html | 2 +- docs/docs/configuration/oci-vault/index.html | 2 +- docs/docs/configuration/oracle-wallet/index.html | 4 ++-- docs/docs/getting-started/basics/index.html | 4 ++-- docs/docs/getting-started/default-metrics/index.html | 2 +- docs/docs/getting-started/grafana-dashboards/index.html | 2 +- docs/docs/getting-started/kubernetes/index.html | 2 +- docs/docs/intro/index.html | 2 +- docs/docs/next/advanced/development/index.html | 2 +- docs/docs/next/advanced/go-runtime/index.html | 2 +- docs/docs/next/advanced/txeventq/index.html | 2 +- docs/docs/next/category/advanced/index.html | 2 +- docs/docs/next/category/configuration/index.html | 2 +- docs/docs/next/category/getting-started/index.html | 2 +- docs/docs/next/category/releases/index.html | 2 +- docs/docs/next/configuration/alert-logs/index.html | 2 +- docs/docs/next/configuration/azure-vault/index.html | 2 +- docs/docs/next/configuration/config-file/index.html | 4 ++-- docs/docs/next/configuration/custom-metrics/index.html | 4 ++-- docs/docs/next/configuration/multiple-databases/index.html | 2 +- docs/docs/next/configuration/oci-vault/index.html | 2 +- docs/docs/next/configuration/oracle-wallet/index.html | 4 ++-- docs/docs/next/getting-started/basics/index.html | 4 ++-- docs/docs/next/getting-started/default-metrics/index.html | 2 +- docs/docs/next/getting-started/grafana-dashboards/index.html | 2 +- docs/docs/next/getting-started/kubernetes/index.html | 2 +- docs/docs/next/intro/index.html | 2 +- docs/docs/next/releases/changelog/index.html | 2 +- docs/docs/next/releases/roadmap/index.html | 2 +- docs/docs/releases/changelog/index.html | 2 +- docs/docs/releases/roadmap/index.html | 2 +- docs/index.html | 2 +- docs/markdown-page/index.html | 2 +- 54 files changed, 62 insertions(+), 62 deletions(-) rename docs/assets/js/{1e10f605.85d7d328.js => 1e10f605.bb940bfb.js} (99%) rename docs/assets/js/{3c57bc2c.e119104c.js => 3c57bc2c.e15a56a8.js} (99%) rename docs/assets/js/{49d0ab44.d41e7e86.js => 49d0ab44.622e0e53.js} (99%) rename docs/assets/js/{ab01181e.bd6e5167.js => ab01181e.83f49c36.js} (98%) rename docs/assets/js/{af966633.d7133a46.js => af966633.7080bdcb.js} (99%) rename docs/assets/js/{d94a41cc.cf627fef.js => d94a41cc.4186b72c.js} (98%) rename docs/assets/js/{f6de67f9.85db75b5.js => f6de67f9.f329491a.js} (99%) rename docs/assets/js/{f7d2b7bf.0e65ba99.js => f7d2b7bf.ef718eaa.js} (99%) rename docs/assets/js/{runtime~main.cf06ab3a.js => runtime~main.3ea07ab5.js} (55%) diff --git a/docs/404.html b/docs/404.html index 09cbf085..e2818ea1 100644 --- a/docs/404.html +++ b/docs/404.html @@ -4,7 +4,7 @@ Page Not Found | Oracle Database Metrics Exporter - + diff --git a/docs/assets/js/1e10f605.85d7d328.js b/docs/assets/js/1e10f605.bb940bfb.js similarity index 99% rename from docs/assets/js/1e10f605.85d7d328.js rename to docs/assets/js/1e10f605.bb940bfb.js index 5a5d1109..a6bd87ed 100644 --- a/docs/assets/js/1e10f605.85d7d328.js +++ b/docs/assets/js/1e10f605.bb940bfb.js @@ -1 +1 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[5071],{7848:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>m,frontMatter:()=>l,metadata:()=>n,toc:()=>o});const n=JSON.parse('{"id":"configuration/custom-metrics","title":"Custom Metrics","description":"The exporter allows definition of arbitrary custom metrics in one or more TOML or YAML files.","source":"@site/docs/configuration/custom-metrics.md","sourceDirName":"configuration","slug":"/configuration/custom-metrics","permalink":"/oracle-db-appdev-monitoring/docs/next/configuration/custom-metrics","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/docs/configuration/custom-metrics.md","tags":[],"version":"current","sidebarPosition":2,"frontMatter":{"title":"Custom Metrics","sidebar_position":2},"sidebar":"tutorialSidebar","previous":{"title":"Exporter Config File","permalink":"/oracle-db-appdev-monitoring/docs/next/configuration/config-file"},"next":{"title":"Multiple Databases","permalink":"/oracle-db-appdev-monitoring/docs/next/configuration/multiple-databases"}}');var s=r(4848),i=r(8453);const l={title:"Custom Metrics",sidebar_position:2},a="Custom Metrics",c={},o=[{value:"Metric Schema",id:"metric-schema",level:3},{value:"Example Metric Definition",id:"example-metric-definition",level:3},{value:"Customize metrics in a container image",id:"customize-metrics-in-a-container-image",level:3}];function d(e){const t={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h3:"h3",header:"header",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"custom-metrics",children:"Custom Metrics"})}),"\n",(0,s.jsx)(t.p,{children:"The exporter allows definition of arbitrary custom metrics in one or more TOML or YAML files."}),"\n",(0,s.jsxs)(t.p,{children:["To specify custom metrics files\nexporter, use the ",(0,s.jsx)(t.code,{children:"metrics"})," configuration in the ",(0,s.jsx)(t.a,{href:"/oracle-db-appdev-monitoring/docs/next/configuration/config-file",children:"config file"}),":"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-yaml",children:"metrics:\n ## How often to scrape metrics. If not provided, metrics will be scraped on request.\n # scrapeInterval: 15s\n ## Path to default metrics file.\n default: default-metrics.toml\n ## Paths to any custom metrics files (TOML or YAML)\n custom:\n - custom-metrics-example/custom-metrics.toml\n"})}),"\n",(0,s.jsxs)(t.p,{children:["You may also use ",(0,s.jsx)(t.code,{children:"--custom.metrics"})," flag followed by a comma separated list of TOML or YAML files, or export ",(0,s.jsx)(t.code,{children:"CUSTOM_METRICS"})," variable environment (",(0,s.jsx)(t.code,{children:"export CUSTOM_METRICS=my-custom-metrics.toml,my-other-custom-metrics.toml"}),")"]}),"\n",(0,s.jsx)(t.h3,{id:"metric-schema",children:"Metric Schema"}),"\n",(0,s.jsxs)(t.p,{children:["Metrics files must contain a series of ",(0,s.jsx)(t.code,{children:"[[metric]]"})," definitions, in TOML, or the equivalent definition in a YAML file. Each metric definition must follow the exporter's metric schema:"]}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Field Name"}),(0,s.jsx)(t.th,{children:"Description"}),(0,s.jsx)(t.th,{children:"Type"}),(0,s.jsx)(t.th,{children:"Required"}),(0,s.jsx)(t.th,{children:"Default"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"context"}),(0,s.jsx)(t.td,{children:"Metric context, used to build metric FQN"}),(0,s.jsx)(t.td,{children:"String"}),(0,s.jsx)(t.td,{children:"Yes"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"labels"}),(0,s.jsx)(t.td,{children:"Metric labels, which must match column names in the query. Any column that is not a label will be parsed as a metric"}),(0,s.jsx)(t.td,{children:"Array of Strings"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"metricsdesc"}),(0,s.jsx)(t.td,{children:"Mapping between field(s) in the request and comment(s)"}),(0,s.jsx)(t.td,{children:"Dictionary of Strings"}),(0,s.jsx)(t.td,{children:"Yes"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"metricstype"}),(0,s.jsxs)(t.td,{children:["Mapping between field(s) in the request and ",(0,s.jsx)(t.a,{href:"https://prometheus.io/docs/concepts/metric_types/",children:"Prometheus metric types"})]}),(0,s.jsx)(t.td,{children:"Dictionary of Strings"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"metricsbuckets"}),(0,s.jsxs)(t.td,{children:["Split ",(0,s.jsx)(t.a,{href:"https://prometheus.io/docs/concepts/metric_types/#histogram",children:"histogram"})," metric types into buckets based on value (",(0,s.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/custom-metrics-example/metric-histogram-example.toml",children:"example"}),")"]}),(0,s.jsx)(t.td,{children:"Dictionary of String dictionaries"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"fieldtoappend"}),(0,s.jsx)(t.td,{children:"Field from the request to append to the metric FQN"}),(0,s.jsx)(t.td,{children:"String"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"request"}),(0,s.jsx)(t.td,{children:"Oracle database query to run for metrics scraping"}),(0,s.jsx)(t.td,{children:"String"}),(0,s.jsx)(t.td,{children:"Yes"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"ignorezeroresult"}),(0,s.jsx)(t.td,{children:"Whether or not an error will be printed if the request does not return any results"}),(0,s.jsx)(t.td,{children:"Boolean"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{children:"false"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"querytimeout"}),(0,s.jsx)(t.td,{children:"Oracle Database query timeout duration, e.g., 300ms, 0.5h"}),(0,s.jsx)(t.td,{children:"String duration"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{children:"Value of query.timeout in seconds"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"scrapeinterval"}),(0,s.jsx)(t.td,{children:"Custom metric scrape interval, used if scrape.interval is provided, otherwise metrics are always scraped on request."}),(0,s.jsx)(t.td,{children:"String duration"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"databases"}),(0,s.jsx)(t.td,{children:"Optional array of databases to scrape from. If not specified, the metric is scraped from all databases."}),(0,s.jsx)(t.td,{children:"Array of Strings"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{})]})]})]}),"\n",(0,s.jsx)(t.h3,{id:"example-metric-definition",children:"Example Metric Definition"}),"\n",(0,s.jsx)(t.p,{children:"Here's a simple example of a metric definition:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-toml",children:'[[metric]]\ncontext = "test"\nrequest = "SELECT 1 as value_1, 2 as value_2 FROM DUAL"\nmetricsdesc = { value_1 = "Simple example returning always 1.", value_2 = "Same but returning always 2." }\n'})}),"\n",(0,s.jsxs)(t.blockquote,{children:["\n",(0,s.jsxs)(t.p,{children:["NOTE: Do not add a semicolon (",(0,s.jsx)(t.code,{children:";"}),") at the end of the SQL queries."]}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"This file produce the following entries in the exporter:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-text",children:"# HELP oracledb_test_value_1 Simple example returning always 1.\n# TYPE oracledb_test_value_1 gauge\noracledb_test_value_1 1\n# HELP oracledb_test_value_2 Same but returning always 2.\n# TYPE oracledb_test_value_2 gauge\noracledb_test_value_2 2\n"})}),"\n",(0,s.jsxs)(t.p,{children:["You can also provide labels using ",(0,s.jsx)(t.code,{children:"labels"})," field. Here's an example providing two metrics, with and without labels:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-toml",children:'[[metric]]\ncontext = "context_no_label"\nrequest = "SELECT 1 as value_1, 2 as value_2 FROM DUAL"\nmetricsdesc = { value_1 = "Simple example returning always 1.", value_2 = "Same but returning always 2." }\n\n[[metric]]\ncontext = "context_with_labels"\nlabels = [ "label_1", "label_2" ]\nrequest = "SELECT 1 as value_1, 2 as value_2, \'First label\' as label_1, \'Second label\' as label_2 FROM DUAL"\nmetricsdesc = { value_1 = "Simple example returning always 1.", value_2 = "Same but returning always 2." }\n'})}),"\n",(0,s.jsx)(t.p,{children:"This TOML file produces the following result:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-text",children:'# HELP oracledb_context_no_label_value_1 Simple example returning always 1.\n# TYPE oracledb_context_no_label_value_1 gauge\noracledb_context_no_label_value_1 1\n# HELP oracledb_context_no_label_value_2 Same but returning always 2.\n# TYPE oracledb_context_no_label_value_2 gauge\noracledb_context_no_label_value_2 2\n# HELP oracledb_context_with_labels_value_1 Simple example returning always 1.\n# TYPE oracledb_context_with_labels_value_1 gauge\noracledb_context_with_labels_value_1{label_1="First label",label_2="Second label"} 1\n# HELP oracledb_context_with_labels_value_2 Same but returning always 2.\n# TYPE oracledb_context_with_labels_value_2 gauge\noracledb_context_with_labels_value_2{label_1="First label",label_2="Second label"} 2\n'})}),"\n",(0,s.jsxs)(t.p,{children:["Last, you can set metric type using ",(0,s.jsx)(t.strong,{children:"metricstype"})," field."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-toml",children:'[[metric]]\ncontext = "context_with_labels"\nlabels = [ "label_1", "label_2" ]\nrequest = "SELECT 1 as value_1, 2 as value_2, \'First label\' as label_1, \'Second label\' as label_2 FROM DUAL"\nmetricsdesc = { value_1 = "Simple example returning always 1 as counter.", value_2 = "Same but returning always 2 as gauge." }\n# Can be counter or gauge (default)\nmetricstype = { value_1 = "counter" }\n'})}),"\n",(0,s.jsx)(t.p,{children:"This TOML file will produce the following result:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-text",children:"# HELP oracledb_test_value_1 Simple test example returning always 1 as counter.\n# TYPE oracledb_test_value_1 counter\noracledb_test_value_1 1\n# HELP oracledb_test_value_2 Same test but returning always 2 as gauge.\n# TYPE oracledb_test_value_2 gauge\noracledb_test_value_2 2\n"})}),"\n",(0,s.jsxs)(t.p,{children:["You can find ",(0,s.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/custom-metrics-example/custom-metrics.toml",children:"working examples"})," of custom metrics for slow queries, big queries and top 100 tables.\nAn example of ",(0,s.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/custom-metrics-example/txeventq-metrics.toml",children:"custom metrics for Transacational Event Queues"})," is also provided."]}),"\n",(0,s.jsx)(t.h3,{id:"customize-metrics-in-a-container-image",children:"Customize metrics in a container image"}),"\n",(0,s.jsxs)(t.p,{children:["If you run the exporter as a container image and want to include your custom metrics in the image itself, you can use the following example ",(0,s.jsx)(t.code,{children:"Dockerfile"})," to create a new image:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-Dockerfile",children:'FROM container-registry.oracle.com/database/observability-exporter:2.0.2\nCOPY custom-metrics.toml /\nENTRYPOINT ["/oracledb_exporter", "--custom.metrics", "/custom-metrics.toml"]\n'})})]})}function m(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},8453:(e,t,r)=>{r.d(t,{R:()=>l,x:()=>a});var n=r(6540);const s={},i=n.createContext(s);function l(e){const t=n.useContext(i);return n.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),n.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[5071],{7848:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>m,frontMatter:()=>l,metadata:()=>n,toc:()=>o});const n=JSON.parse('{"id":"configuration/custom-metrics","title":"Custom Metrics","description":"The exporter allows definition of arbitrary custom metrics in one or more TOML or YAML files.","source":"@site/docs/configuration/custom-metrics.md","sourceDirName":"configuration","slug":"/configuration/custom-metrics","permalink":"/oracle-db-appdev-monitoring/docs/next/configuration/custom-metrics","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/docs/configuration/custom-metrics.md","tags":[],"version":"current","sidebarPosition":2,"frontMatter":{"title":"Custom Metrics","sidebar_position":2},"sidebar":"tutorialSidebar","previous":{"title":"Exporter Config File","permalink":"/oracle-db-appdev-monitoring/docs/next/configuration/config-file"},"next":{"title":"Multiple Databases","permalink":"/oracle-db-appdev-monitoring/docs/next/configuration/multiple-databases"}}');var s=r(4848),i=r(8453);const l={title:"Custom Metrics",sidebar_position:2},a="Custom Metrics",c={},o=[{value:"Metric Schema",id:"metric-schema",level:3},{value:"Example Metric Definition",id:"example-metric-definition",level:3},{value:"Customize metrics in a container image",id:"customize-metrics-in-a-container-image",level:3}];function d(e){const t={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h3:"h3",header:"header",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"custom-metrics",children:"Custom Metrics"})}),"\n",(0,s.jsx)(t.p,{children:"The exporter allows definition of arbitrary custom metrics in one or more TOML or YAML files."}),"\n",(0,s.jsxs)(t.p,{children:["To specify custom metrics files\nexporter, use the ",(0,s.jsx)(t.code,{children:"metrics"})," configuration in the ",(0,s.jsx)(t.a,{href:"/oracle-db-appdev-monitoring/docs/next/configuration/config-file",children:"config file"}),":"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-yaml",children:"metrics:\n ## How often to scrape metrics. If not provided, metrics will be scraped on request.\n # scrapeInterval: 15s\n ## Path to default metrics file.\n default: default-metrics.toml\n ## Paths to any custom metrics files (TOML or YAML)\n custom:\n - custom-metrics-example/custom-metrics.toml\n"})}),"\n",(0,s.jsxs)(t.p,{children:["You may also use ",(0,s.jsx)(t.code,{children:"--custom.metrics"})," flag followed by a comma separated list of TOML or YAML files, or export ",(0,s.jsx)(t.code,{children:"CUSTOM_METRICS"})," variable environment (",(0,s.jsx)(t.code,{children:"export CUSTOM_METRICS=my-custom-metrics.toml,my-other-custom-metrics.toml"}),")"]}),"\n",(0,s.jsx)(t.h3,{id:"metric-schema",children:"Metric Schema"}),"\n",(0,s.jsxs)(t.p,{children:["Metrics files must contain a series of ",(0,s.jsx)(t.code,{children:"[[metric]]"})," definitions, in TOML, or the equivalent definition in a YAML file. Each metric definition must follow the exporter's metric schema:"]}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Field Name"}),(0,s.jsx)(t.th,{children:"Description"}),(0,s.jsx)(t.th,{children:"Type"}),(0,s.jsx)(t.th,{children:"Required"}),(0,s.jsx)(t.th,{children:"Default"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"context"}),(0,s.jsx)(t.td,{children:"Metric context, used to build metric FQN"}),(0,s.jsx)(t.td,{children:"String"}),(0,s.jsx)(t.td,{children:"Yes"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"labels"}),(0,s.jsx)(t.td,{children:"Metric labels, which must match column names in the query. Any column that is not a label will be parsed as a metric"}),(0,s.jsx)(t.td,{children:"Array of Strings"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"metricsdesc"}),(0,s.jsx)(t.td,{children:"Mapping between field(s) in the request and comment(s)"}),(0,s.jsx)(t.td,{children:"Dictionary of Strings"}),(0,s.jsx)(t.td,{children:"Yes"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"metricstype"}),(0,s.jsxs)(t.td,{children:["Mapping between field(s) in the request and ",(0,s.jsx)(t.a,{href:"https://prometheus.io/docs/concepts/metric_types/",children:"Prometheus metric types"})]}),(0,s.jsx)(t.td,{children:"Dictionary of Strings"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"metricsbuckets"}),(0,s.jsxs)(t.td,{children:["Split ",(0,s.jsx)(t.a,{href:"https://prometheus.io/docs/concepts/metric_types/#histogram",children:"histogram"})," metric types into buckets based on value (",(0,s.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/custom-metrics-example/metric-histogram-example.toml",children:"example"}),")"]}),(0,s.jsx)(t.td,{children:"Dictionary of String dictionaries"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"fieldtoappend"}),(0,s.jsx)(t.td,{children:"Field from the request to append to the metric FQN"}),(0,s.jsx)(t.td,{children:"String"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"request"}),(0,s.jsx)(t.td,{children:"Oracle database query to run for metrics scraping"}),(0,s.jsx)(t.td,{children:"String"}),(0,s.jsx)(t.td,{children:"Yes"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"ignorezeroresult"}),(0,s.jsx)(t.td,{children:"Whether or not an error will be printed if the request does not return any results"}),(0,s.jsx)(t.td,{children:"Boolean"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{children:"false"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"querytimeout"}),(0,s.jsx)(t.td,{children:"Oracle Database query timeout duration, e.g., 300ms, 0.5h"}),(0,s.jsx)(t.td,{children:"String duration"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{children:"Value of query.timeout in seconds"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"scrapeinterval"}),(0,s.jsx)(t.td,{children:"Custom metric scrape interval, used if scrape.interval is provided, otherwise metrics are always scraped on request."}),(0,s.jsx)(t.td,{children:"String duration"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"databases"}),(0,s.jsx)(t.td,{children:"Optional array of databases to scrape from. If not specified, the metric is scraped from all databases."}),(0,s.jsx)(t.td,{children:"Array of Strings"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{})]})]})]}),"\n",(0,s.jsx)(t.h3,{id:"example-metric-definition",children:"Example Metric Definition"}),"\n",(0,s.jsx)(t.p,{children:"Here's a simple example of a metric definition:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-toml",children:'[[metric]]\ncontext = "test"\nrequest = "SELECT 1 as value_1, 2 as value_2 FROM DUAL"\nmetricsdesc = { value_1 = "Simple example returning always 1.", value_2 = "Same but returning always 2." }\n'})}),"\n",(0,s.jsxs)(t.blockquote,{children:["\n",(0,s.jsxs)(t.p,{children:["NOTE: Do not add a semicolon (",(0,s.jsx)(t.code,{children:";"}),") at the end of the SQL queries."]}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"This file produce the following entries in the exporter:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-text",children:"# HELP oracledb_test_value_1 Simple example returning always 1.\n# TYPE oracledb_test_value_1 gauge\noracledb_test_value_1 1\n# HELP oracledb_test_value_2 Same but returning always 2.\n# TYPE oracledb_test_value_2 gauge\noracledb_test_value_2 2\n"})}),"\n",(0,s.jsxs)(t.p,{children:["You can also provide labels using ",(0,s.jsx)(t.code,{children:"labels"})," field. Here's an example providing two metrics, with and without labels:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-toml",children:'[[metric]]\ncontext = "context_no_label"\nrequest = "SELECT 1 as value_1, 2 as value_2 FROM DUAL"\nmetricsdesc = { value_1 = "Simple example returning always 1.", value_2 = "Same but returning always 2." }\n\n[[metric]]\ncontext = "context_with_labels"\nlabels = [ "label_1", "label_2" ]\nrequest = "SELECT 1 as value_1, 2 as value_2, \'First label\' as label_1, \'Second label\' as label_2 FROM DUAL"\nmetricsdesc = { value_1 = "Simple example returning always 1.", value_2 = "Same but returning always 2." }\n'})}),"\n",(0,s.jsx)(t.p,{children:"This TOML file produces the following result:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-text",children:'# HELP oracledb_context_no_label_value_1 Simple example returning always 1.\n# TYPE oracledb_context_no_label_value_1 gauge\noracledb_context_no_label_value_1 1\n# HELP oracledb_context_no_label_value_2 Same but returning always 2.\n# TYPE oracledb_context_no_label_value_2 gauge\noracledb_context_no_label_value_2 2\n# HELP oracledb_context_with_labels_value_1 Simple example returning always 1.\n# TYPE oracledb_context_with_labels_value_1 gauge\noracledb_context_with_labels_value_1{label_1="First label",label_2="Second label"} 1\n# HELP oracledb_context_with_labels_value_2 Same but returning always 2.\n# TYPE oracledb_context_with_labels_value_2 gauge\noracledb_context_with_labels_value_2{label_1="First label",label_2="Second label"} 2\n'})}),"\n",(0,s.jsxs)(t.p,{children:["Last, you can set metric type using ",(0,s.jsx)(t.strong,{children:"metricstype"})," field."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-toml",children:'[[metric]]\ncontext = "context_with_labels"\nlabels = [ "label_1", "label_2" ]\nrequest = "SELECT 1 as value_1, 2 as value_2, \'First label\' as label_1, \'Second label\' as label_2 FROM DUAL"\nmetricsdesc = { value_1 = "Simple example returning always 1 as counter.", value_2 = "Same but returning always 2 as gauge." }\n# Can be counter or gauge (default)\nmetricstype = { value_1 = "counter" }\n'})}),"\n",(0,s.jsx)(t.p,{children:"This TOML file will produce the following result:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-text",children:"# HELP oracledb_test_value_1 Simple test example returning always 1 as counter.\n# TYPE oracledb_test_value_1 counter\noracledb_test_value_1 1\n# HELP oracledb_test_value_2 Same test but returning always 2 as gauge.\n# TYPE oracledb_test_value_2 gauge\noracledb_test_value_2 2\n"})}),"\n",(0,s.jsxs)(t.p,{children:["You can find ",(0,s.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/custom-metrics-example/custom-metrics.toml",children:"working examples"})," of custom metrics for slow queries, big queries and top 100 tables.\nAn example of ",(0,s.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/custom-metrics-example/txeventq-metrics.toml",children:"custom metrics for Transacational Event Queues"})," is also provided."]}),"\n",(0,s.jsx)(t.h3,{id:"customize-metrics-in-a-container-image",children:"Customize metrics in a container image"}),"\n",(0,s.jsxs)(t.p,{children:["If you run the exporter as a container image and want to include your custom metrics in the image itself, you can use the following example ",(0,s.jsx)(t.code,{children:"Dockerfile"})," to create a new image:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-Dockerfile",children:'FROM container-registry.oracle.com/database/observability-exporter:2.0.3\nCOPY custom-metrics.toml /\nENTRYPOINT ["/oracledb_exporter", "--custom.metrics", "/custom-metrics.toml"]\n'})})]})}function m(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},8453:(e,t,r)=>{r.d(t,{R:()=>l,x:()=>a});var n=r(6540);const s={},i=n.createContext(s);function l(e){const t=n.useContext(i);return n.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),n.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/3c57bc2c.e119104c.js b/docs/assets/js/3c57bc2c.e15a56a8.js similarity index 99% rename from docs/assets/js/3c57bc2c.e119104c.js rename to docs/assets/js/3c57bc2c.e15a56a8.js index c965ba40..113df9e6 100644 --- a/docs/assets/js/3c57bc2c.e119104c.js +++ b/docs/assets/js/3c57bc2c.e15a56a8.js @@ -1 +1 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[529],{2284:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>s,metadata:()=>o,toc:()=>c});const o=JSON.parse('{"id":"getting-started/basics","title":"Installation","description":"In this section you will find information on running the exporter.","source":"@site/versioned_docs/version-2.0.3/getting-started/basics.md","sourceDirName":"getting-started","slug":"/getting-started/basics","permalink":"/oracle-db-appdev-monitoring/docs/getting-started/basics","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/versioned_docs/version-2.0.3/getting-started/basics.md","tags":[],"version":"2.0.3","sidebarPosition":1,"frontMatter":{"title":"Installation","sidebar_position":1},"sidebar":"tutorialSidebar","previous":{"title":"Getting Started","permalink":"/oracle-db-appdev-monitoring/docs/category/getting-started"},"next":{"title":"Default Metrics","permalink":"/oracle-db-appdev-monitoring/docs/getting-started/default-metrics"}}');var a=t(4848),i=t(8453);const s={title:"Installation",sidebar_position:1},r="Installation",l={},c=[{value:"Docker, Podman, etc",id:"docker-podman-etc",level:2},{value:"Oracle Database Free",id:"oracle-database-free",level:3},{value:"Exporter",id:"exporter",level:3},{value:"Simple connection",id:"simple-connection",level:3},{value:"Standalone Binary",id:"standalone-binary",level:2},{value:"Docker Compose",id:"docker-compose",level:3}];function d(e){const n={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.header,{children:(0,a.jsx)(n.h1,{id:"installation",children:"Installation"})}),"\n",(0,a.jsx)(n.p,{children:"In this section you will find information on running the exporter."}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["In a container runtime like ",(0,a.jsx)(n.a,{href:"#docker-podman-etc",children:"Docker, Podman, etc"})]}),"\n",(0,a.jsxs)(n.li,{children:["In a test/demo environment using ",(0,a.jsx)(n.a,{href:"#docker-compose",children:"Docker Compose"})]}),"\n",(0,a.jsxs)(n.li,{children:["In ",(0,a.jsx)(n.a,{href:"/oracle-db-appdev-monitoring/docs/getting-started/kubernetes",children:"Kubernetes"})]}),"\n",(0,a.jsxs)(n.li,{children:["As a ",(0,a.jsx)(n.a,{href:"#standalone-binary",children:"standalone binary"})]}),"\n"]}),"\n",(0,a.jsx)(n.h2,{id:"docker-podman-etc",children:"Docker, Podman, etc"}),"\n",(0,a.jsxs)(n.p,{children:["You can run the exporter in a local container using a container image from ",(0,a.jsx)(n.a,{href:"https://container-registry.oracle.com",children:"Oracle Container Registry"}),'. The container image is available in the "observability-exporter" repository in the "Database" category. No authentication or license presentment/acceptance are required to pull this image from the registry.']}),"\n",(0,a.jsx)(n.h3,{id:"oracle-database-free",children:"Oracle Database Free"}),"\n",(0,a.jsxs)(n.p,{children:["If you need an Oracle Database to test the exporter, you can use this command to start up an instance of ",(0,a.jsx)(n.a,{href:"https://www.oracle.com/database/free/",children:"Oracle Database Free"})," which also requires no authentication or license presentment/acceptance to pull the image."]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"docker run --name free23ai \\\n -d \\\n -p 1521:1521 \\\n -e ORACLE_PASSWORD=Welcome12345 \\\n gvenzl/oracle-free:23.9-slim-faststart\n"})}),"\n",(0,a.jsx)(n.p,{children:'This will pull the image and start up the database with a listener on port 1521. It will also create a pluggable database (a database container) called "FREEPDB1" and will set the admin passwords to the password you specified on this command.'}),"\n",(0,a.jsx)(n.p,{children:"You can tail the logs to see when the database is ready to use:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"docker logs -f free23ai\n\n(look for this message...)\n#########################\nDATABASE IS READY TO USE!\n#########################\n"})}),"\n",(0,a.jsx)(n.p,{children:'To obtain the IP address of the container, which you will need to connect to the database, use this command. Note: depending on your platform and container runtime, you may be able to access the database at "localhost":'}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'docker inspect free23ai | grep IPA\n "SecondaryIPAddresses": null,\n "IPAddress": "172.17.0.2",\n "IPAMConfig": null,\n "IPAddress": "172.17.0.2",\n'})}),"\n",(0,a.jsx)(n.h3,{id:"exporter",children:"Exporter"}),"\n",(0,a.jsx)(n.p,{children:"You need to give the exporter the connection details for the Oracle Database that you want it to run against. You can use a simple connection, or a wallet."}),"\n",(0,a.jsx)(n.h3,{id:"simple-connection",children:"Simple connection"}),"\n",(0,a.jsx)(n.p,{children:"For a simple connection, you will provide the details using these variables:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_USERNAME"})," is the database username, e.g., ",(0,a.jsx)(n.code,{children:"pdbadmin"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_PASSWORD"})," is the password for that user, e.g., ",(0,a.jsx)(n.code,{children:"Welcome12345"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_CONNECT_STRING"})," is the connection string, e.g., ",(0,a.jsx)(n.code,{children:"free23ai:1521/freepdb"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_ROLE"})," (Optional) can be set to ",(0,a.jsx)(n.code,{children:"SYSDBA"}),", ",(0,a.jsx)(n.code,{children:"SYSOPER"}),", ",(0,a.jsx)(n.code,{children:"SYSBACKUP"}),", ",(0,a.jsx)(n.code,{children:"SYSDG"}),", ",(0,a.jsx)(n.code,{children:"SYSKM"}),", ",(0,a.jsx)(n.code,{children:"SYSRAC"})," or ",(0,a.jsx)(n.code,{children:"SYSASM"})," if you want to connect with one of those roles, however Oracle recommends that you connect with the lowest possible privileges and roles necessary for the exporter to run."]}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:"To run the exporter in a container and expose the port, use a command like this, with the appropriate values for the environment variables:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"docker run -it --rm \\\n -e DB_USERNAME=pdbadmin \\\n -e DB_PASSWORD=Welcome12345 \\\n -e DB_CONNECT_STRING=free23ai:1521/freepdb \\\n -p 9161:9161 \\\n container-registry.oracle.com/database/observability-exporter:2.0.2\n"})}),"\n",(0,a.jsx)(n.h2,{id:"standalone-binary",children:"Standalone Binary"}),"\n",(0,a.jsxs)(n.p,{children:["Pre-compiled versions for Linux, ARM and Darwin 64-bit can be found under ",(0,a.jsx)(n.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/releases",children:"releases"}),"."]}),"\n",(0,a.jsxs)(n.p,{children:["In order to run, you'll need the ",(0,a.jsx)(n.a,{href:"http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html",children:"Oracle Instant Client Basic"})," for your operating system. Only the basic version is required for the exporter."]}),"\n",(0,a.jsxs)(n.blockquote,{children:["\n",(0,a.jsxs)(n.p,{children:["NOTE: If you are running the Standalone binary on a Mac ARM platform you must set the variable ",(0,a.jsx)(n.code,{children:"DYLD_LIBRARY_PATH"})," to the location of where the instant client installed. For example ",(0,a.jsx)(n.code,{children:"export DYLD_LIBRARY_PATH=/lib/oracle/instantclient_23_3"}),"."]}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:"The following command line arguments (flags) can be passed to the exporter (the --help flag will show the table below)."}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'Usage of oracledb_exporter:\n --config.file="example-config.yaml"\n File with metrics exporter configuration. (env: CONFIG_FILE)\n --web.telemetry-path="/metrics"\n Path under which to expose metrics. (env: TELEMETRY_PATH)\n --default.metrics="default-metrics.toml"\n File with default metrics in a TOML file. (env: DEFAULT_METRICS)\n --custom.metrics="" Comma separated list of file(s) that contain various custom metrics in a TOML format. (env: CUSTOM_METRICS)\n --query.timeout=5 Query timeout (in seconds). (env: QUERY_TIMEOUT)\n --database.maxIdleConns=0 Number of maximum idle connections in the connection pool. (env: DATABASE_MAXIDLECONNS)\n --database.maxOpenConns=10\n Number of maximum open connections in the connection pool. (env: DATABASE_MAXOPENCONNS)\n --database.poolIncrement=-1\n Connection increment when the connection pool reaches max capacity. (env: DATABASE_POOLINCREMENT)\n --database.poolMaxConnections=-1\n Maximum number of connections in the connection pool. (env: DATABASE_POOLMAXCONNECTIONS)\n --database.poolMinConnections=-1\n Minimum number of connections in the connection pool. (env: DATABASE_POOLMINCONNECTIONS)\n --scrape.interval=0s Interval between each scrape. Default is to scrape on collect requests.\n --log.disable=0 Set to 1 to disable alert logs\n --log.interval=15s Interval between log updates (e.g. 5s).\n --log.destination="/log/alert.log"\n File to output the alert log to. (env: LOG_DESTINATION)\n --web.listen-address=:9161 ...\n Addresses on which to expose metrics and web interface. Repeatable for multiple addresses. Examples: `:9100` or `[::1]:9100` for http, `vsock://:9100` for vsock\n --web.config.file="" Path to configuration file that can enable TLS or authentication. See: https://github.com/prometheus/exporter-toolkit/blob/master/docs/web-configuration.md\n --log.level=info Only log messages with the given severity or above. One of: [debug, info, warn, error]\n --log.format=logfmt Output format of log messages. One of: [logfmt, json]\n --[no-]version Show application version.\n'})}),"\n",(0,a.jsx)(n.p,{children:"You may provide the connection details using these variables:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_USERNAME"})," is the database username, e.g., ",(0,a.jsx)(n.code,{children:"pdbadmin"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_PASSWORD"})," is the password for that user, e.g., ",(0,a.jsx)(n.code,{children:"Welcome12345"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_CONNECT_STRING"})," is the connection string, e.g., ",(0,a.jsx)(n.code,{children:"localhost:1521/freepdb1"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_ROLE"})," (Optional) can be set to ",(0,a.jsx)(n.code,{children:"SYSDBA"})," or ",(0,a.jsx)(n.code,{children:"SYSOPER"})," if you want to connect with one of those roles, however Oracle recommends that you connect with the lowest possible privileges and roles necessary for the exporter to run."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"ORACLE_HOME"})," is the location of the Oracle Instant Client, e.g., ",(0,a.jsx)(n.code,{children:"/lib/oracle/21/client64/lib"}),"."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"TNS_ADMIN"})," is the location of your (unzipped) wallet. The ",(0,a.jsx)(n.code,{children:"DIRECTORY"})," set in the ",(0,a.jsx)(n.code,{children:"sqlnet.ora"})," file must match the path that it will be mounted on inside the container."]}),"\n"]}),"\n",(0,a.jsxs)(n.p,{children:["The following example puts the logfile in the current location with the filename ",(0,a.jsx)(n.code,{children:"alert.log"})," and loads the default matrics file (",(0,a.jsx)(n.code,{children:"default-metrics,toml"}),") from the current location."]}),"\n",(0,a.jsxs)(n.p,{children:["If you prefer to provide configuration via a ",(0,a.jsx)(n.a,{href:"/oracle-db-appdev-monitoring/docs/configuration/config-file",children:"config file"}),", you may do so with the ",(0,a.jsx)(n.code,{children:"--config.file"}),' argument. The use of a config file over command line arguments is preferred. If a config file is not provided, the "default" database connection is managed by command line arguments.']}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"# Example Oracle Database Metrics Exporter Configuration file.\n# Environment variables of the form ${VAR_NAME} will be expanded.\n# If you include a config value that contains a '$' character, escape that '$' with another '$', e.g.,\n# \"$test$pwd\" => \"$$test$$pwd\"\n# Otherwise, the value will be expanded as an environment variable.\n\n# Example Oracle Database Metrics Exporter Configuration file.\n# Environment variables of the form ${VAR_NAME} will be expanded.\n\ndatabases:\n ## Path on which metrics will be served\n # metricsPath: /metrics\n ## Database connection information for the \"default\" database.\n default:\n ## Database username\n username: ${DB_USERNAME}\n ## Database password\n password: ${DB_PASSWORD}\n ## Database password file\n ## If specified, will load the database password from a file.\n # passwordFile: ${DB_PASSWORD_FILE}\n ## Database connection url\n url: localhost:1521/freepdb1\n\n ## Metrics query timeout for this database, in seconds\n queryTimeout: 5\n\n ## Rely on Oracle Database External Authentication by network or OS\n # externalAuth: false\n ## Database role\n # role: SYSDBA\n ## Path to Oracle Database wallet, if using wallet\n # tnsAdmin: /path/to/database/wallet\n\n ### Connection settings:\n ### Either the go-sql or Oracle Database connection pool may be used.\n ### To use the Oracle Database connection pool over the go-sql connection pool,\n ### set maxIdleConns to zero and configure the pool* settings.\n\n ### Connection pooling settings for the go-sql connection pool\n ## Max open connections for this database using go-sql connection pool\n maxOpenConns: 10\n ## Max idle connections for this database using go-sql connection pool\n maxIdleConns: 10\n\n ### Connection pooling settings for the Oracle Database connection pool\n ## Oracle Database connection pool increment.\n # poolIncrement: 1\n ## Oracle Database Connection pool maximum size\n # poolMaxConnections: 15\n ## Oracle Database Connection pool minimum size\n # poolMinConnections: 15\n\n ## Arbitrary labels to add to each metric scraped from this database\n # labels:\n # label_name1: label_value1\n # label_name2: label_value2\n\nmetrics:\n ## How often to scrape metrics. If not provided, metrics will be scraped on request.\n # scrapeInterval: 15s\n ## Path to default metrics file.\n default: default-metrics.toml\n ## Paths to any custom metrics files\n custom:\n - custom-metrics-example/custom-metrics.toml\n\nlog:\n # Path of log file\n destination: /opt/alert.log\n # Interval of log updates\n interval: 15s\n ## Set disable to 1 to disable logging\n # disable: 0\n\n# Optionally configure prometheus webserver\n#web:\n# listenAddresses: [':9161']\n# systemdSocket: true|false\n# configFile: /path/to/webconfigfile\n"})}),"\n",(0,a.jsx)(n.h3,{id:"docker-compose",children:"Docker Compose"}),"\n",(0,a.jsx)(n.p,{children:'If you would like to set up a test environment with the exporter, you can use the provided "Docker Compose" file in this repository which will start an Oracle Database instance, the exporter, Prometheus and Grafana.'}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"cd docker-compose\ndocker-compose up -d\n"})}),"\n",(0,a.jsx)(n.p,{children:"The containers will take a short time to start. The first time, the Oracle container might take a few minutes to start while it creates the database instance, but this is a one-time operation, and subequent restarts will be much faster (a few seconds)."}),"\n",(0,a.jsx)(n.p,{children:"Once the containers are all running, you can access the services using these URLs:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"http://localhost:9161/metrics",children:"Exporter"})}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.a,{href:"http://localhost:9090",children:"Prometheus"}),' - try a query for "oracle".']}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.a,{href:"http://localhost:3000",children:"Grafana"}),' - username is "admin" and password is "grafana". An Oracle Database dashboard is provisioned and configured to use data from the exporter.']}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>r});var o=t(6540);const a={},i=o.createContext(a);function s(e){const n=o.useContext(i);return o.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),o.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[529],{2284:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>s,metadata:()=>o,toc:()=>c});const o=JSON.parse('{"id":"getting-started/basics","title":"Installation","description":"In this section you will find information on running the exporter.","source":"@site/versioned_docs/version-2.0.3/getting-started/basics.md","sourceDirName":"getting-started","slug":"/getting-started/basics","permalink":"/oracle-db-appdev-monitoring/docs/getting-started/basics","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/versioned_docs/version-2.0.3/getting-started/basics.md","tags":[],"version":"2.0.3","sidebarPosition":1,"frontMatter":{"title":"Installation","sidebar_position":1},"sidebar":"tutorialSidebar","previous":{"title":"Getting Started","permalink":"/oracle-db-appdev-monitoring/docs/category/getting-started"},"next":{"title":"Default Metrics","permalink":"/oracle-db-appdev-monitoring/docs/getting-started/default-metrics"}}');var a=t(4848),i=t(8453);const s={title:"Installation",sidebar_position:1},r="Installation",l={},c=[{value:"Docker, Podman, etc",id:"docker-podman-etc",level:2},{value:"Oracle Database Free",id:"oracle-database-free",level:3},{value:"Exporter",id:"exporter",level:3},{value:"Simple connection",id:"simple-connection",level:3},{value:"Standalone Binary",id:"standalone-binary",level:2},{value:"Docker Compose",id:"docker-compose",level:3}];function d(e){const n={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.header,{children:(0,a.jsx)(n.h1,{id:"installation",children:"Installation"})}),"\n",(0,a.jsx)(n.p,{children:"In this section you will find information on running the exporter."}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["In a container runtime like ",(0,a.jsx)(n.a,{href:"#docker-podman-etc",children:"Docker, Podman, etc"})]}),"\n",(0,a.jsxs)(n.li,{children:["In a test/demo environment using ",(0,a.jsx)(n.a,{href:"#docker-compose",children:"Docker Compose"})]}),"\n",(0,a.jsxs)(n.li,{children:["In ",(0,a.jsx)(n.a,{href:"/oracle-db-appdev-monitoring/docs/getting-started/kubernetes",children:"Kubernetes"})]}),"\n",(0,a.jsxs)(n.li,{children:["As a ",(0,a.jsx)(n.a,{href:"#standalone-binary",children:"standalone binary"})]}),"\n"]}),"\n",(0,a.jsx)(n.h2,{id:"docker-podman-etc",children:"Docker, Podman, etc"}),"\n",(0,a.jsxs)(n.p,{children:["You can run the exporter in a local container using a container image from ",(0,a.jsx)(n.a,{href:"https://container-registry.oracle.com",children:"Oracle Container Registry"}),'. The container image is available in the "observability-exporter" repository in the "Database" category. No authentication or license presentment/acceptance are required to pull this image from the registry.']}),"\n",(0,a.jsx)(n.h3,{id:"oracle-database-free",children:"Oracle Database Free"}),"\n",(0,a.jsxs)(n.p,{children:["If you need an Oracle Database to test the exporter, you can use this command to start up an instance of ",(0,a.jsx)(n.a,{href:"https://www.oracle.com/database/free/",children:"Oracle Database Free"})," which also requires no authentication or license presentment/acceptance to pull the image."]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"docker run --name free23ai \\\n -d \\\n -p 1521:1521 \\\n -e ORACLE_PASSWORD=Welcome12345 \\\n gvenzl/oracle-free:23.9-slim-faststart\n"})}),"\n",(0,a.jsx)(n.p,{children:'This will pull the image and start up the database with a listener on port 1521. It will also create a pluggable database (a database container) called "FREEPDB1" and will set the admin passwords to the password you specified on this command.'}),"\n",(0,a.jsx)(n.p,{children:"You can tail the logs to see when the database is ready to use:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"docker logs -f free23ai\n\n(look for this message...)\n#########################\nDATABASE IS READY TO USE!\n#########################\n"})}),"\n",(0,a.jsx)(n.p,{children:'To obtain the IP address of the container, which you will need to connect to the database, use this command. Note: depending on your platform and container runtime, you may be able to access the database at "localhost":'}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'docker inspect free23ai | grep IPA\n "SecondaryIPAddresses": null,\n "IPAddress": "172.17.0.2",\n "IPAMConfig": null,\n "IPAddress": "172.17.0.2",\n'})}),"\n",(0,a.jsx)(n.h3,{id:"exporter",children:"Exporter"}),"\n",(0,a.jsx)(n.p,{children:"You need to give the exporter the connection details for the Oracle Database that you want it to run against. You can use a simple connection, or a wallet."}),"\n",(0,a.jsx)(n.h3,{id:"simple-connection",children:"Simple connection"}),"\n",(0,a.jsx)(n.p,{children:"For a simple connection, you will provide the details using these variables:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_USERNAME"})," is the database username, e.g., ",(0,a.jsx)(n.code,{children:"pdbadmin"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_PASSWORD"})," is the password for that user, e.g., ",(0,a.jsx)(n.code,{children:"Welcome12345"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_CONNECT_STRING"})," is the connection string, e.g., ",(0,a.jsx)(n.code,{children:"free23ai:1521/freepdb"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_ROLE"})," (Optional) can be set to ",(0,a.jsx)(n.code,{children:"SYSDBA"}),", ",(0,a.jsx)(n.code,{children:"SYSOPER"}),", ",(0,a.jsx)(n.code,{children:"SYSBACKUP"}),", ",(0,a.jsx)(n.code,{children:"SYSDG"}),", ",(0,a.jsx)(n.code,{children:"SYSKM"}),", ",(0,a.jsx)(n.code,{children:"SYSRAC"})," or ",(0,a.jsx)(n.code,{children:"SYSASM"})," if you want to connect with one of those roles, however Oracle recommends that you connect with the lowest possible privileges and roles necessary for the exporter to run."]}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:"To run the exporter in a container and expose the port, use a command like this, with the appropriate values for the environment variables:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"docker run -it --rm \\\n -e DB_USERNAME=pdbadmin \\\n -e DB_PASSWORD=Welcome12345 \\\n -e DB_CONNECT_STRING=free23ai:1521/freepdb \\\n -p 9161:9161 \\\n container-registry.oracle.com/database/observability-exporter:2.0.3\n"})}),"\n",(0,a.jsx)(n.h2,{id:"standalone-binary",children:"Standalone Binary"}),"\n",(0,a.jsxs)(n.p,{children:["Pre-compiled versions for Linux, ARM and Darwin 64-bit can be found under ",(0,a.jsx)(n.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/releases",children:"releases"}),"."]}),"\n",(0,a.jsxs)(n.p,{children:["In order to run, you'll need the ",(0,a.jsx)(n.a,{href:"http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html",children:"Oracle Instant Client Basic"})," for your operating system. Only the basic version is required for the exporter."]}),"\n",(0,a.jsxs)(n.blockquote,{children:["\n",(0,a.jsxs)(n.p,{children:["NOTE: If you are running the Standalone binary on a Mac ARM platform you must set the variable ",(0,a.jsx)(n.code,{children:"DYLD_LIBRARY_PATH"})," to the location of where the instant client installed. For example ",(0,a.jsx)(n.code,{children:"export DYLD_LIBRARY_PATH=/lib/oracle/instantclient_23_3"}),"."]}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:"The following command line arguments (flags) can be passed to the exporter (the --help flag will show the table below)."}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'Usage of oracledb_exporter:\n --config.file="example-config.yaml"\n File with metrics exporter configuration. (env: CONFIG_FILE)\n --web.telemetry-path="/metrics"\n Path under which to expose metrics. (env: TELEMETRY_PATH)\n --default.metrics="default-metrics.toml"\n File with default metrics in a TOML file. (env: DEFAULT_METRICS)\n --custom.metrics="" Comma separated list of file(s) that contain various custom metrics in a TOML format. (env: CUSTOM_METRICS)\n --query.timeout=5 Query timeout (in seconds). (env: QUERY_TIMEOUT)\n --database.maxIdleConns=0 Number of maximum idle connections in the connection pool. (env: DATABASE_MAXIDLECONNS)\n --database.maxOpenConns=10\n Number of maximum open connections in the connection pool. (env: DATABASE_MAXOPENCONNS)\n --database.poolIncrement=-1\n Connection increment when the connection pool reaches max capacity. (env: DATABASE_POOLINCREMENT)\n --database.poolMaxConnections=-1\n Maximum number of connections in the connection pool. (env: DATABASE_POOLMAXCONNECTIONS)\n --database.poolMinConnections=-1\n Minimum number of connections in the connection pool. (env: DATABASE_POOLMINCONNECTIONS)\n --scrape.interval=0s Interval between each scrape. Default is to scrape on collect requests.\n --log.disable=0 Set to 1 to disable alert logs\n --log.interval=15s Interval between log updates (e.g. 5s).\n --log.destination="/log/alert.log"\n File to output the alert log to. (env: LOG_DESTINATION)\n --web.listen-address=:9161 ...\n Addresses on which to expose metrics and web interface. Repeatable for multiple addresses. Examples: `:9100` or `[::1]:9100` for http, `vsock://:9100` for vsock\n --web.config.file="" Path to configuration file that can enable TLS or authentication. See: https://github.com/prometheus/exporter-toolkit/blob/master/docs/web-configuration.md\n --log.level=info Only log messages with the given severity or above. One of: [debug, info, warn, error]\n --log.format=logfmt Output format of log messages. One of: [logfmt, json]\n --[no-]version Show application version.\n'})}),"\n",(0,a.jsx)(n.p,{children:"You may provide the connection details using these variables:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_USERNAME"})," is the database username, e.g., ",(0,a.jsx)(n.code,{children:"pdbadmin"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_PASSWORD"})," is the password for that user, e.g., ",(0,a.jsx)(n.code,{children:"Welcome12345"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_CONNECT_STRING"})," is the connection string, e.g., ",(0,a.jsx)(n.code,{children:"localhost:1521/freepdb1"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_ROLE"})," (Optional) can be set to ",(0,a.jsx)(n.code,{children:"SYSDBA"})," or ",(0,a.jsx)(n.code,{children:"SYSOPER"})," if you want to connect with one of those roles, however Oracle recommends that you connect with the lowest possible privileges and roles necessary for the exporter to run."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"ORACLE_HOME"})," is the location of the Oracle Instant Client, e.g., ",(0,a.jsx)(n.code,{children:"/lib/oracle/21/client64/lib"}),"."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"TNS_ADMIN"})," is the location of your (unzipped) wallet. The ",(0,a.jsx)(n.code,{children:"DIRECTORY"})," set in the ",(0,a.jsx)(n.code,{children:"sqlnet.ora"})," file must match the path that it will be mounted on inside the container."]}),"\n"]}),"\n",(0,a.jsxs)(n.p,{children:["The following example puts the logfile in the current location with the filename ",(0,a.jsx)(n.code,{children:"alert.log"})," and loads the default matrics file (",(0,a.jsx)(n.code,{children:"default-metrics,toml"}),") from the current location."]}),"\n",(0,a.jsxs)(n.p,{children:["If you prefer to provide configuration via a ",(0,a.jsx)(n.a,{href:"/oracle-db-appdev-monitoring/docs/configuration/config-file",children:"config file"}),", you may do so with the ",(0,a.jsx)(n.code,{children:"--config.file"}),' argument. The use of a config file over command line arguments is preferred. If a config file is not provided, the "default" database connection is managed by command line arguments.']}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"# Example Oracle Database Metrics Exporter Configuration file.\n# Environment variables of the form ${VAR_NAME} will be expanded.\n# If you include a config value that contains a '$' character, escape that '$' with another '$', e.g.,\n# \"$test$pwd\" => \"$$test$$pwd\"\n# Otherwise, the value will be expanded as an environment variable.\n\n# Example Oracle Database Metrics Exporter Configuration file.\n# Environment variables of the form ${VAR_NAME} will be expanded.\n\ndatabases:\n ## Path on which metrics will be served\n # metricsPath: /metrics\n ## Database connection information for the \"default\" database.\n default:\n ## Database username\n username: ${DB_USERNAME}\n ## Database password\n password: ${DB_PASSWORD}\n ## Database password file\n ## If specified, will load the database password from a file.\n # passwordFile: ${DB_PASSWORD_FILE}\n ## Database connection url\n url: localhost:1521/freepdb1\n\n ## Metrics query timeout for this database, in seconds\n queryTimeout: 5\n\n ## Rely on Oracle Database External Authentication by network or OS\n # externalAuth: false\n ## Database role\n # role: SYSDBA\n ## Path to Oracle Database wallet, if using wallet\n # tnsAdmin: /path/to/database/wallet\n\n ### Connection settings:\n ### Either the go-sql or Oracle Database connection pool may be used.\n ### To use the Oracle Database connection pool over the go-sql connection pool,\n ### set maxIdleConns to zero and configure the pool* settings.\n\n ### Connection pooling settings for the go-sql connection pool\n ## Max open connections for this database using go-sql connection pool\n maxOpenConns: 10\n ## Max idle connections for this database using go-sql connection pool\n maxIdleConns: 10\n\n ### Connection pooling settings for the Oracle Database connection pool\n ## Oracle Database connection pool increment.\n # poolIncrement: 1\n ## Oracle Database Connection pool maximum size\n # poolMaxConnections: 15\n ## Oracle Database Connection pool minimum size\n # poolMinConnections: 15\n\n ## Arbitrary labels to add to each metric scraped from this database\n # labels:\n # label_name1: label_value1\n # label_name2: label_value2\n\nmetrics:\n ## How often to scrape metrics. If not provided, metrics will be scraped on request.\n # scrapeInterval: 15s\n ## Path to default metrics file.\n default: default-metrics.toml\n ## Paths to any custom metrics files\n custom:\n - custom-metrics-example/custom-metrics.toml\n\nlog:\n # Path of log file\n destination: /opt/alert.log\n # Interval of log updates\n interval: 15s\n ## Set disable to 1 to disable logging\n # disable: 0\n\n# Optionally configure prometheus webserver\n#web:\n# listenAddresses: [':9161']\n# systemdSocket: true|false\n# configFile: /path/to/webconfigfile\n"})}),"\n",(0,a.jsx)(n.h3,{id:"docker-compose",children:"Docker Compose"}),"\n",(0,a.jsx)(n.p,{children:'If you would like to set up a test environment with the exporter, you can use the provided "Docker Compose" file in this repository which will start an Oracle Database instance, the exporter, Prometheus and Grafana.'}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"cd docker-compose\ndocker-compose up -d\n"})}),"\n",(0,a.jsx)(n.p,{children:"The containers will take a short time to start. The first time, the Oracle container might take a few minutes to start while it creates the database instance, but this is a one-time operation, and subequent restarts will be much faster (a few seconds)."}),"\n",(0,a.jsx)(n.p,{children:"Once the containers are all running, you can access the services using these URLs:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"http://localhost:9161/metrics",children:"Exporter"})}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.a,{href:"http://localhost:9090",children:"Prometheus"}),' - try a query for "oracle".']}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.a,{href:"http://localhost:3000",children:"Grafana"}),' - username is "admin" and password is "grafana". An Oracle Database dashboard is provisioned and configured to use data from the exporter.']}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>r});var o=t(6540);const a={},i=o.createContext(a);function s(e){const n=o.useContext(i);return o.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),o.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/49d0ab44.d41e7e86.js b/docs/assets/js/49d0ab44.622e0e53.js similarity index 99% rename from docs/assets/js/49d0ab44.d41e7e86.js rename to docs/assets/js/49d0ab44.622e0e53.js index 118cbeea..471ebf0a 100644 --- a/docs/assets/js/49d0ab44.d41e7e86.js +++ b/docs/assets/js/49d0ab44.622e0e53.js @@ -1 +1 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[8539],{8453:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>s});var a=t(6540);const l={},o=a.createContext(l);function r(e){const n=a.useContext(o);return a.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:r(e.components),a.createElement(o.Provider,{value:n},e.children)}},8705:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>i,contentTitle:()=>s,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>c});const a=JSON.parse('{"id":"configuration/oracle-wallet","title":"Oracle Wallet (mTLS)","description":"For mutual TLS (mTLS) connections, you must use an Oracle Wallet.","source":"@site/docs/configuration/oracle-wallet.md","sourceDirName":"configuration","slug":"/configuration/oracle-wallet","permalink":"/oracle-db-appdev-monitoring/docs/next/configuration/oracle-wallet","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/docs/configuration/oracle-wallet.md","tags":[],"version":"current","sidebarPosition":4,"frontMatter":{"title":"Oracle Wallet (mTLS)","sidebar_position":4},"sidebar":"tutorialSidebar","previous":{"title":"Multiple Databases","permalink":"/oracle-db-appdev-monitoring/docs/next/configuration/multiple-databases"},"next":{"title":"Alert Logs","permalink":"/oracle-db-appdev-monitoring/docs/next/configuration/alert-logs"}}');var l=t(4848),o=t(8453);const r={title:"Oracle Wallet (mTLS)",sidebar_position:4},s="Using a Wallet",i={},c=[{value:"mTLS for multiple databases with Oracle Wallet",id:"mtls-for-multiple-databases-with-oracle-wallet",level:3}];function d(e){const n={code:"code",h1:"h1",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",...(0,o.R)(),...e.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(n.header,{children:(0,l.jsx)(n.h1,{id:"using-a-wallet",children:"Using a Wallet"})}),"\n",(0,l.jsx)(n.p,{children:"For mutual TLS (mTLS) connections, you must use an Oracle Wallet."}),"\n",(0,l.jsx)(n.p,{children:"If you are using Oracle Autonomous Database with mTLS, for example, you can download and unzip the wallet from the Oracle Cloud Infrastructure (OCI) console."}),"\n",(0,l.jsx)(n.p,{children:"To configure the exporter to use an Oracle Wallet,"}),"\n",(0,l.jsxs)(n.ol,{children:["\n",(0,l.jsxs)(n.li,{children:["Set the ",(0,l.jsx)(n.code,{children:"TNS_ADMIN"})," environment variable to the directory containing the unzipped wallet"]}),"\n",(0,l.jsx)(n.li,{children:"Configure your database instance with the appropriate database TNS name:"}),"\n"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-yaml",children:"databases:\n mydb:\n username: admin\n password: \n # TNS Name from wallet tnsnames.ora file, e.g., mydb_high\n url: \n"})}),"\n",(0,l.jsxs)(n.p,{children:["If you are running the exporter as a container, you can mount the wallet as a volume. For example, mounting the ",(0,l.jsx)(n.code,{children:"./wallet"})," directory to the ",(0,l.jsx)(n.code,{children:"/wallet"})," location:"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"docker run -it --rm \\\n -e DB_USERNAME=pdbadmin \\\n -e DB_PASSWORD=Welcome12345 \\\n -e DB_CONNECT_STRING=devdb_tp \\\n -v ./wallet:/wallet \\\n -p 9161:9161 \\\n container-registry.oracle.com/database/observability-exporter:2.0.2\n"})}),"\n",(0,l.jsx)(n.h3,{id:"mtls-for-multiple-databases-with-oracle-wallet",children:"mTLS for multiple databases with Oracle Wallet"}),"\n",(0,l.jsxs)(n.p,{children:["The Oracle Database Metrics exporter uses ODPI-C, which can only initalize the TNS aliases from a ",(0,l.jsx)(n.code,{children:"tnsnames.ora"}),' file once per process. To work around this, the exporter can be configured to read from a "combined" ',(0,l.jsx)(n.code,{children:"tnsnames.ora"})," file containing all TNS aliases for connections in a multi-database configuration."]}),"\n",(0,l.jsxs)(n.ol,{children:["\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsx)(n.p,{children:"For each database the exporter will connect to, download the corresponding wallet files. If you're using ADB/ATP-S, download the regional wallet instead of the instance wallet if the databases are in the same region."}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:["Copy the TNS aliases the ",(0,l.jsx)(n.code,{children:"tnsnames.ora"})," file from each wallet, and combine them into one file, so all your database service names are in one file together"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:["In the combined ",(0,l.jsx)(n.code,{children:"tnsnames.ora"})," file, and add the following snippet to each TNS alias connection string, to tell the client where the wallet directory is:"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{children:"(security=(MY_WALLET_DIRECTORY=/path/to/this/database/wallet))\n"})}),"\n",(0,l.jsxs)(n.p,{children:["The combined ",(0,l.jsx)(n.code,{children:"tnsnames.ora"})," file, which contains the TNS aliases for both databases, and their corresponding wallet location in the ",(0,l.jsx)(n.code,{children:"security"})," configuration will look something like the following:"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",children:"db1_high = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=adb.****.oraclecloud.com))(connect_data=(service_name=****.adb.oraclecloud.com))(security=(MY_WALLET_DIRECTORY=/wallets/db1)(ssl_server_dn_match=yes)))\n\ndb2_high = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=adb.****.oraclecloud.com))(connect_data=(service_name=****.adb.oraclecloud.com))(security=(MY_WALLET_DIRECTORY=/wallets/db2)(ssl_server_dn_match=yes)))\n"})}),"\n",(0,l.jsxs)(n.ol,{start:"4",children:["\n",(0,l.jsxs)(n.li,{children:["Take wallet files (cwallet.sso, ewallet.p12, & ewallet.pem) for each database, and place them in separate directories. For example, ",(0,l.jsx)(n.code,{children:"db1"})," gets its own directory, ",(0,l.jsx)(n.code,{children:"db2"})," gets its own directory, and so forth."]}),"\n"]}),"\n",(0,l.jsxs)(n.p,{children:["The resulting directory structure should look like the following, with wallet information separate from the combined ",(0,l.jsx)(n.code,{children:"tnsnames.ora"})," file:"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{children:"wallets\n\u251c\u2500\u2500 combined\n\u2502 \u251c\u2500\u2500 sqlnet.ora\n\u2502 \u2514\u2500\u2500 tnsnames.ora // Combined tnsnames.ora\n\u251c\u2500\u2500 db1\n\u2502 \u251c\u2500\u2500 cwallet.sso\n\u2502 \u251c\u2500\u2500 ewallet.p12\n\u2502 \u2514\u2500\u2500 ewallet.pem\n\u2514\u2500\u2500 db2\n\u251c\u2500\u2500 cwallet.sso\n\u251c\u2500\u2500 ewallet.p12\n\u2514\u2500\u2500 ewallet.pem\n"})}),"\n",(0,l.jsxs)(n.ol,{start:"5",children:["\n",(0,l.jsxs)(n.li,{children:["Set the ",(0,l.jsx)(n.code,{children:"TNS_ADMIN"})," environment variable where the exporter is running to the directory containing your combined ",(0,l.jsx)(n.code,{children:"tnsnames.ora"})," file:"]}),"\n"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{children:"export TNS_ADMIN=/wallets/combined\n"})}),"\n",(0,l.jsxs)(n.ol,{start:"6",children:["\n",(0,l.jsxs)(n.li,{children:["Finally, update the exporter configuration file to include the TNS aliases for all databases you will be connecting to. Ensure your database configuration file does not use the ",(0,l.jsx)(n.code,{children:"tnsAdmin"})," property, as we are using the global ",(0,l.jsx)(n.code,{children:"TNS_ADMIN"})," environment variable to point to the combined ",(0,l.jsx)(n.code,{children:"tnsnames.ora"})," file:"]}),"\n"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-yaml",children:"databases:\n db2:\n username: ****\n password: ****\n url: db2_high\n queryTimeout: 5\n maxOpenConns: 10\n maxIdleConns: 10\n db1:\n username: ****\n password: ****\n url: db1_high\n queryTimeout: 5\n maxOpenConns: 10\n maxIdleConns: 10\n"})}),"\n",(0,l.jsx)(n.p,{children:"Then, run the exporter with the config file:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-shell",children:"./oracledb_exporter --config.file=my-config-file.yaml\n"})})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,l.jsx)(n,{...e,children:(0,l.jsx)(d,{...e})}):d(e)}}}]); \ No newline at end of file +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[8539],{8453:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>s});var a=t(6540);const l={},o=a.createContext(l);function r(e){const n=a.useContext(o);return a.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:r(e.components),a.createElement(o.Provider,{value:n},e.children)}},8705:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>i,contentTitle:()=>s,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>c});const a=JSON.parse('{"id":"configuration/oracle-wallet","title":"Oracle Wallet (mTLS)","description":"For mutual TLS (mTLS) connections, you must use an Oracle Wallet.","source":"@site/docs/configuration/oracle-wallet.md","sourceDirName":"configuration","slug":"/configuration/oracle-wallet","permalink":"/oracle-db-appdev-monitoring/docs/next/configuration/oracle-wallet","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/docs/configuration/oracle-wallet.md","tags":[],"version":"current","sidebarPosition":4,"frontMatter":{"title":"Oracle Wallet (mTLS)","sidebar_position":4},"sidebar":"tutorialSidebar","previous":{"title":"Multiple Databases","permalink":"/oracle-db-appdev-monitoring/docs/next/configuration/multiple-databases"},"next":{"title":"Alert Logs","permalink":"/oracle-db-appdev-monitoring/docs/next/configuration/alert-logs"}}');var l=t(4848),o=t(8453);const r={title:"Oracle Wallet (mTLS)",sidebar_position:4},s="Using a Wallet",i={},c=[{value:"mTLS for multiple databases with Oracle Wallet",id:"mtls-for-multiple-databases-with-oracle-wallet",level:3}];function d(e){const n={code:"code",h1:"h1",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",...(0,o.R)(),...e.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(n.header,{children:(0,l.jsx)(n.h1,{id:"using-a-wallet",children:"Using a Wallet"})}),"\n",(0,l.jsx)(n.p,{children:"For mutual TLS (mTLS) connections, you must use an Oracle Wallet."}),"\n",(0,l.jsx)(n.p,{children:"If you are using Oracle Autonomous Database with mTLS, for example, you can download and unzip the wallet from the Oracle Cloud Infrastructure (OCI) console."}),"\n",(0,l.jsx)(n.p,{children:"To configure the exporter to use an Oracle Wallet,"}),"\n",(0,l.jsxs)(n.ol,{children:["\n",(0,l.jsxs)(n.li,{children:["Set the ",(0,l.jsx)(n.code,{children:"TNS_ADMIN"})," environment variable to the directory containing the unzipped wallet"]}),"\n",(0,l.jsx)(n.li,{children:"Configure your database instance with the appropriate database TNS name:"}),"\n"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-yaml",children:"databases:\n mydb:\n username: admin\n password: \n # TNS Name from wallet tnsnames.ora file, e.g., mydb_high\n url: \n"})}),"\n",(0,l.jsxs)(n.p,{children:["If you are running the exporter as a container, you can mount the wallet as a volume. For example, mounting the ",(0,l.jsx)(n.code,{children:"./wallet"})," directory to the ",(0,l.jsx)(n.code,{children:"/wallet"})," location:"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"docker run -it --rm \\\n -e DB_USERNAME=pdbadmin \\\n -e DB_PASSWORD=Welcome12345 \\\n -e DB_CONNECT_STRING=devdb_tp \\\n -v ./wallet:/wallet \\\n -p 9161:9161 \\\n container-registry.oracle.com/database/observability-exporter:2.0.3\n"})}),"\n",(0,l.jsx)(n.h3,{id:"mtls-for-multiple-databases-with-oracle-wallet",children:"mTLS for multiple databases with Oracle Wallet"}),"\n",(0,l.jsxs)(n.p,{children:["The Oracle Database Metrics exporter uses ODPI-C, which can only initalize the TNS aliases from a ",(0,l.jsx)(n.code,{children:"tnsnames.ora"}),' file once per process. To work around this, the exporter can be configured to read from a "combined" ',(0,l.jsx)(n.code,{children:"tnsnames.ora"})," file containing all TNS aliases for connections in a multi-database configuration."]}),"\n",(0,l.jsxs)(n.ol,{children:["\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsx)(n.p,{children:"For each database the exporter will connect to, download the corresponding wallet files. If you're using ADB/ATP-S, download the regional wallet instead of the instance wallet if the databases are in the same region."}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:["Copy the TNS aliases the ",(0,l.jsx)(n.code,{children:"tnsnames.ora"})," file from each wallet, and combine them into one file, so all your database service names are in one file together"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:["In the combined ",(0,l.jsx)(n.code,{children:"tnsnames.ora"})," file, and add the following snippet to each TNS alias connection string, to tell the client where the wallet directory is:"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{children:"(security=(MY_WALLET_DIRECTORY=/path/to/this/database/wallet))\n"})}),"\n",(0,l.jsxs)(n.p,{children:["The combined ",(0,l.jsx)(n.code,{children:"tnsnames.ora"})," file, which contains the TNS aliases for both databases, and their corresponding wallet location in the ",(0,l.jsx)(n.code,{children:"security"})," configuration will look something like the following:"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",children:"db1_high = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=adb.****.oraclecloud.com))(connect_data=(service_name=****.adb.oraclecloud.com))(security=(MY_WALLET_DIRECTORY=/wallets/db1)(ssl_server_dn_match=yes)))\n\ndb2_high = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=adb.****.oraclecloud.com))(connect_data=(service_name=****.adb.oraclecloud.com))(security=(MY_WALLET_DIRECTORY=/wallets/db2)(ssl_server_dn_match=yes)))\n"})}),"\n",(0,l.jsxs)(n.ol,{start:"4",children:["\n",(0,l.jsxs)(n.li,{children:["Take wallet files (cwallet.sso, ewallet.p12, & ewallet.pem) for each database, and place them in separate directories. For example, ",(0,l.jsx)(n.code,{children:"db1"})," gets its own directory, ",(0,l.jsx)(n.code,{children:"db2"})," gets its own directory, and so forth."]}),"\n"]}),"\n",(0,l.jsxs)(n.p,{children:["The resulting directory structure should look like the following, with wallet information separate from the combined ",(0,l.jsx)(n.code,{children:"tnsnames.ora"})," file:"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{children:"wallets\n\u251c\u2500\u2500 combined\n\u2502 \u251c\u2500\u2500 sqlnet.ora\n\u2502 \u2514\u2500\u2500 tnsnames.ora // Combined tnsnames.ora\n\u251c\u2500\u2500 db1\n\u2502 \u251c\u2500\u2500 cwallet.sso\n\u2502 \u251c\u2500\u2500 ewallet.p12\n\u2502 \u2514\u2500\u2500 ewallet.pem\n\u2514\u2500\u2500 db2\n\u251c\u2500\u2500 cwallet.sso\n\u251c\u2500\u2500 ewallet.p12\n\u2514\u2500\u2500 ewallet.pem\n"})}),"\n",(0,l.jsxs)(n.ol,{start:"5",children:["\n",(0,l.jsxs)(n.li,{children:["Set the ",(0,l.jsx)(n.code,{children:"TNS_ADMIN"})," environment variable where the exporter is running to the directory containing your combined ",(0,l.jsx)(n.code,{children:"tnsnames.ora"})," file:"]}),"\n"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{children:"export TNS_ADMIN=/wallets/combined\n"})}),"\n",(0,l.jsxs)(n.ol,{start:"6",children:["\n",(0,l.jsxs)(n.li,{children:["Finally, update the exporter configuration file to include the TNS aliases for all databases you will be connecting to. Ensure your database configuration file does not use the ",(0,l.jsx)(n.code,{children:"tnsAdmin"})," property, as we are using the global ",(0,l.jsx)(n.code,{children:"TNS_ADMIN"})," environment variable to point to the combined ",(0,l.jsx)(n.code,{children:"tnsnames.ora"})," file:"]}),"\n"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-yaml",children:"databases:\n db2:\n username: ****\n password: ****\n url: db2_high\n queryTimeout: 5\n maxOpenConns: 10\n maxIdleConns: 10\n db1:\n username: ****\n password: ****\n url: db1_high\n queryTimeout: 5\n maxOpenConns: 10\n maxIdleConns: 10\n"})}),"\n",(0,l.jsx)(n.p,{children:"Then, run the exporter with the config file:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-shell",children:"./oracledb_exporter --config.file=my-config-file.yaml\n"})})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,l.jsx)(n,{...e,children:(0,l.jsx)(d,{...e})}):d(e)}}}]); \ No newline at end of file diff --git a/docs/assets/js/ab01181e.bd6e5167.js b/docs/assets/js/ab01181e.83f49c36.js similarity index 98% rename from docs/assets/js/ab01181e.bd6e5167.js rename to docs/assets/js/ab01181e.83f49c36.js index c5eef3c2..ef07cee5 100644 --- a/docs/assets/js/ab01181e.bd6e5167.js +++ b/docs/assets/js/ab01181e.83f49c36.js @@ -1 +1 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[170],{3859:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>l,contentTitle:()=>s,default:()=>f,frontMatter:()=>r,metadata:()=>t,toc:()=>c});const t=JSON.parse('{"id":"configuration/config-file","title":"Exporter Config File","description":"The recommended way to configure the exporter is with the --config.file argument, specifying a YAML configuration file.","source":"@site/versioned_docs/version-2.0.3/configuration/config-file.md","sourceDirName":"configuration","slug":"/configuration/config-file","permalink":"/oracle-db-appdev-monitoring/docs/configuration/config-file","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/versioned_docs/version-2.0.3/configuration/config-file.md","tags":[],"version":"2.0.3","sidebarPosition":1,"frontMatter":{"title":"Exporter Config File","sidebar_position":1},"sidebar":"tutorialSidebar","previous":{"title":"Configuration","permalink":"/oracle-db-appdev-monitoring/docs/category/configuration"},"next":{"title":"Custom Metrics","permalink":"/oracle-db-appdev-monitoring/docs/configuration/custom-metrics"}}');var i=o(4848),a=o(8453);const r={title:"Exporter Config File",sidebar_position:1},s="Exporter Config File",l={},c=[{value:"Config file in a container image",id:"config-file-in-a-container-image",level:3}];function d(e){const n={code:"code",h1:"h1",h3:"h3",header:"header",p:"p",pre:"pre",...(0,a.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"exporter-config-file",children:"Exporter Config File"})}),"\n",(0,i.jsxs)(n.p,{children:["The recommended way to configure the exporter is with the ",(0,i.jsx)(n.code,{children:"--config.file"})," argument, specifying a YAML configuration file."]}),"\n",(0,i.jsx)(n.p,{children:"The configuration file contains the following options:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"# Example Oracle Database Metrics Exporter Configuration file.\n# Environment variables of the form ${VAR_NAME} will be expanded.\n# If you include a config value that contains a '$' character, escape that '$' with another '$', e.g.,\n# \"$test$pwd\" => \"$$test$$pwd\"\n# Otherwise, the value will be expanded as an environment variable.\n\n# Example Oracle Database Metrics Exporter Configuration file.\n# Environment variables of the form ${VAR_NAME} will be expanded.\n\ndatabases:\n ## Path on which metrics will be served\n # metricsPath: /metrics\n ## Database connection information for the \"default\" database.\n default:\n ## Database username\n username: ${DB_USERNAME}\n ## Database password\n password: ${DB_PASSWORD}\n ## Database password file\n ## If specified, will load the database password from a file.\n # passwordFile: ${DB_PASSWORD_FILE}\n ## Database connection url\n url: localhost:1521/freepdb1\n\n ## Metrics query timeout for this database, in seconds\n queryTimeout: 5\n\n ## Rely on Oracle Database External Authentication by network or OS\n # externalAuth: false\n ## Database role\n # role: SYSDBA\n ## Path to Oracle Database wallet, if using wallet\n # tnsAdmin: /path/to/database/wallet\n\n ### Connection settings:\n ### Either the go-sql or Oracle Database connection pool may be used.\n ### To use the Oracle Database connection pool over the go-sql connection pool,\n ### set maxIdleConns to zero and configure the pool* settings.\n\n ### Connection pooling settings for the go-sql connection pool\n ## Max open connections for this database using go-sql connection pool\n maxOpenConns: 10\n ## Max idle connections for this database using go-sql connection pool\n maxIdleConns: 10\n\n ### Connection pooling settings for the Oracle Database connection pool\n ## Oracle Database connection pool increment.\n # poolIncrement: 1\n ## Oracle Database Connection pool maximum size\n # poolMaxConnections: 15\n ## Oracle Database Connection pool minimum size\n # poolMinConnections: 15\n\n ## Arbitrary labels to add to each metric scraped from this database\n # labels:\n # label_name1: label_value1\n # label_name2: label_value2\n\nmetrics:\n ## How often to scrape metrics. If not provided, metrics will be scraped on request.\n # scrapeInterval: 15s\n ## Path to default metrics file.\n default: default-metrics.toml\n ## Paths to any custom metrics files\n custom:\n - custom-metrics-example/custom-metrics.toml\n\nlog:\n # Path of log file\n destination: /opt/alert.log\n # Interval of log updates\n interval: 15s\n ## Set disable to 1 to disable logging\n # disable: 0\n\n# Optionally configure prometheus webserver\n#web:\n# listenAddresses: [':9161']\n# systemdSocket: true|false\n# configFile: /path/to/webconfigfile\n"})}),"\n",(0,i.jsx)(n.h3,{id:"config-file-in-a-container-image",children:"Config file in a container image"}),"\n",(0,i.jsx)(n.p,{children:"To add your custom config file to a container image, you can layer the base exporter image and include that config:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-Dockerfile",children:'FROM container-registry.oracle.com/database/observability-exporter:2.0.2\nCOPY my-exporter-config.yaml /\nENTRYPOINT ["/oracledb_exporter", "--config.file", "/my-exporter-config.yaml"]\n'})})]})}function f(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},8453:(e,n,o)=>{o.d(n,{R:()=>r,x:()=>s});var t=o(6540);const i={},a=t.createContext(i);function r(e){const n=t.useContext(a);return t.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[170],{3859:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>l,contentTitle:()=>s,default:()=>f,frontMatter:()=>r,metadata:()=>t,toc:()=>c});const t=JSON.parse('{"id":"configuration/config-file","title":"Exporter Config File","description":"The recommended way to configure the exporter is with the --config.file argument, specifying a YAML configuration file.","source":"@site/versioned_docs/version-2.0.3/configuration/config-file.md","sourceDirName":"configuration","slug":"/configuration/config-file","permalink":"/oracle-db-appdev-monitoring/docs/configuration/config-file","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/versioned_docs/version-2.0.3/configuration/config-file.md","tags":[],"version":"2.0.3","sidebarPosition":1,"frontMatter":{"title":"Exporter Config File","sidebar_position":1},"sidebar":"tutorialSidebar","previous":{"title":"Configuration","permalink":"/oracle-db-appdev-monitoring/docs/category/configuration"},"next":{"title":"Custom Metrics","permalink":"/oracle-db-appdev-monitoring/docs/configuration/custom-metrics"}}');var i=o(4848),a=o(8453);const r={title:"Exporter Config File",sidebar_position:1},s="Exporter Config File",l={},c=[{value:"Config file in a container image",id:"config-file-in-a-container-image",level:3}];function d(e){const n={code:"code",h1:"h1",h3:"h3",header:"header",p:"p",pre:"pre",...(0,a.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"exporter-config-file",children:"Exporter Config File"})}),"\n",(0,i.jsxs)(n.p,{children:["The recommended way to configure the exporter is with the ",(0,i.jsx)(n.code,{children:"--config.file"})," argument, specifying a YAML configuration file."]}),"\n",(0,i.jsx)(n.p,{children:"The configuration file contains the following options:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"# Example Oracle Database Metrics Exporter Configuration file.\n# Environment variables of the form ${VAR_NAME} will be expanded.\n# If you include a config value that contains a '$' character, escape that '$' with another '$', e.g.,\n# \"$test$pwd\" => \"$$test$$pwd\"\n# Otherwise, the value will be expanded as an environment variable.\n\n# Example Oracle Database Metrics Exporter Configuration file.\n# Environment variables of the form ${VAR_NAME} will be expanded.\n\ndatabases:\n ## Path on which metrics will be served\n # metricsPath: /metrics\n ## Database connection information for the \"default\" database.\n default:\n ## Database username\n username: ${DB_USERNAME}\n ## Database password\n password: ${DB_PASSWORD}\n ## Database password file\n ## If specified, will load the database password from a file.\n # passwordFile: ${DB_PASSWORD_FILE}\n ## Database connection url\n url: localhost:1521/freepdb1\n\n ## Metrics query timeout for this database, in seconds\n queryTimeout: 5\n\n ## Rely on Oracle Database External Authentication by network or OS\n # externalAuth: false\n ## Database role\n # role: SYSDBA\n ## Path to Oracle Database wallet, if using wallet\n # tnsAdmin: /path/to/database/wallet\n\n ### Connection settings:\n ### Either the go-sql or Oracle Database connection pool may be used.\n ### To use the Oracle Database connection pool over the go-sql connection pool,\n ### set maxIdleConns to zero and configure the pool* settings.\n\n ### Connection pooling settings for the go-sql connection pool\n ## Max open connections for this database using go-sql connection pool\n maxOpenConns: 10\n ## Max idle connections for this database using go-sql connection pool\n maxIdleConns: 10\n\n ### Connection pooling settings for the Oracle Database connection pool\n ## Oracle Database connection pool increment.\n # poolIncrement: 1\n ## Oracle Database Connection pool maximum size\n # poolMaxConnections: 15\n ## Oracle Database Connection pool minimum size\n # poolMinConnections: 15\n\n ## Arbitrary labels to add to each metric scraped from this database\n # labels:\n # label_name1: label_value1\n # label_name2: label_value2\n\nmetrics:\n ## How often to scrape metrics. If not provided, metrics will be scraped on request.\n # scrapeInterval: 15s\n ## Path to default metrics file.\n default: default-metrics.toml\n ## Paths to any custom metrics files\n custom:\n - custom-metrics-example/custom-metrics.toml\n\nlog:\n # Path of log file\n destination: /opt/alert.log\n # Interval of log updates\n interval: 15s\n ## Set disable to 1 to disable logging\n # disable: 0\n\n# Optionally configure prometheus webserver\n#web:\n# listenAddresses: [':9161']\n# systemdSocket: true|false\n# configFile: /path/to/webconfigfile\n"})}),"\n",(0,i.jsx)(n.h3,{id:"config-file-in-a-container-image",children:"Config file in a container image"}),"\n",(0,i.jsx)(n.p,{children:"To add your custom config file to a container image, you can layer the base exporter image and include that config:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-Dockerfile",children:'FROM container-registry.oracle.com/database/observability-exporter:2.0.3\nCOPY my-exporter-config.yaml /\nENTRYPOINT ["/oracledb_exporter", "--config.file", "/my-exporter-config.yaml"]\n'})})]})}function f(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},8453:(e,n,o)=>{o.d(n,{R:()=>r,x:()=>s});var t=o(6540);const i={},a=t.createContext(i);function r(e){const n=t.useContext(a);return t.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/af966633.d7133a46.js b/docs/assets/js/af966633.7080bdcb.js similarity index 99% rename from docs/assets/js/af966633.d7133a46.js rename to docs/assets/js/af966633.7080bdcb.js index d08bbec7..87149efc 100644 --- a/docs/assets/js/af966633.d7133a46.js +++ b/docs/assets/js/af966633.7080bdcb.js @@ -1 +1 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[2173],{1035:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>s,metadata:()=>o,toc:()=>c});const o=JSON.parse('{"id":"getting-started/basics","title":"Installation","description":"In this section you will find information on running the exporter.","source":"@site/docs/getting-started/basics.md","sourceDirName":"getting-started","slug":"/getting-started/basics","permalink":"/oracle-db-appdev-monitoring/docs/next/getting-started/basics","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/docs/getting-started/basics.md","tags":[],"version":"current","sidebarPosition":1,"frontMatter":{"title":"Installation","sidebar_position":1},"sidebar":"tutorialSidebar","previous":{"title":"Getting Started","permalink":"/oracle-db-appdev-monitoring/docs/next/category/getting-started"},"next":{"title":"Default Metrics","permalink":"/oracle-db-appdev-monitoring/docs/next/getting-started/default-metrics"}}');var a=t(4848),i=t(8453);const s={title:"Installation",sidebar_position:1},r="Installation",l={},c=[{value:"Docker, Podman, etc",id:"docker-podman-etc",level:2},{value:"Oracle Database Free",id:"oracle-database-free",level:3},{value:"Exporter",id:"exporter",level:3},{value:"Simple connection",id:"simple-connection",level:3},{value:"Standalone Binary",id:"standalone-binary",level:2},{value:"Docker Compose",id:"docker-compose",level:3}];function d(e){const n={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.header,{children:(0,a.jsx)(n.h1,{id:"installation",children:"Installation"})}),"\n",(0,a.jsx)(n.p,{children:"In this section you will find information on running the exporter."}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["In a container runtime like ",(0,a.jsx)(n.a,{href:"#docker-podman-etc",children:"Docker, Podman, etc"})]}),"\n",(0,a.jsxs)(n.li,{children:["In a test/demo environment using ",(0,a.jsx)(n.a,{href:"#docker-compose",children:"Docker Compose"})]}),"\n",(0,a.jsxs)(n.li,{children:["In ",(0,a.jsx)(n.a,{href:"/oracle-db-appdev-monitoring/docs/next/getting-started/kubernetes",children:"Kubernetes"})]}),"\n",(0,a.jsxs)(n.li,{children:["As a ",(0,a.jsx)(n.a,{href:"#standalone-binary",children:"standalone binary"})]}),"\n"]}),"\n",(0,a.jsx)(n.h2,{id:"docker-podman-etc",children:"Docker, Podman, etc"}),"\n",(0,a.jsxs)(n.p,{children:["You can run the exporter in a local container using a container image from ",(0,a.jsx)(n.a,{href:"https://container-registry.oracle.com",children:"Oracle Container Registry"}),'. The container image is available in the "observability-exporter" repository in the "Database" category. No authentication or license presentment/acceptance are required to pull this image from the registry.']}),"\n",(0,a.jsx)(n.h3,{id:"oracle-database-free",children:"Oracle Database Free"}),"\n",(0,a.jsxs)(n.p,{children:["If you need an Oracle Database to test the exporter, you can use this command to start up an instance of ",(0,a.jsx)(n.a,{href:"https://www.oracle.com/database/free/",children:"Oracle Database Free"})," which also requires no authentication or license presentment/acceptance to pull the image."]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"docker run --name free23ai \\\n -d \\\n -p 1521:1521 \\\n -e ORACLE_PASSWORD=Welcome12345 \\\n gvenzl/oracle-free:23.9-slim-faststart\n"})}),"\n",(0,a.jsx)(n.p,{children:'This will pull the image and start up the database with a listener on port 1521. It will also create a pluggable database (a database container) called "FREEPDB1" and will set the admin passwords to the password you specified on this command.'}),"\n",(0,a.jsx)(n.p,{children:"You can tail the logs to see when the database is ready to use:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"docker logs -f free23ai\n\n(look for this message...)\n#########################\nDATABASE IS READY TO USE!\n#########################\n"})}),"\n",(0,a.jsx)(n.p,{children:'To obtain the IP address of the container, which you will need to connect to the database, use this command. Note: depending on your platform and container runtime, you may be able to access the database at "localhost":'}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'docker inspect free23ai | grep IPA\n "SecondaryIPAddresses": null,\n "IPAddress": "172.17.0.2",\n "IPAMConfig": null,\n "IPAddress": "172.17.0.2",\n'})}),"\n",(0,a.jsx)(n.h3,{id:"exporter",children:"Exporter"}),"\n",(0,a.jsx)(n.p,{children:"You need to give the exporter the connection details for the Oracle Database that you want it to run against. You can use a simple connection, or a wallet."}),"\n",(0,a.jsx)(n.h3,{id:"simple-connection",children:"Simple connection"}),"\n",(0,a.jsx)(n.p,{children:"For a simple connection, you will provide the details using these variables:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_USERNAME"})," is the database username, e.g., ",(0,a.jsx)(n.code,{children:"pdbadmin"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_PASSWORD"})," is the password for that user, e.g., ",(0,a.jsx)(n.code,{children:"Welcome12345"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_CONNECT_STRING"})," is the connection string, e.g., ",(0,a.jsx)(n.code,{children:"free23ai:1521/freepdb"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_ROLE"})," (Optional) can be set to ",(0,a.jsx)(n.code,{children:"SYSDBA"}),", ",(0,a.jsx)(n.code,{children:"SYSOPER"}),", ",(0,a.jsx)(n.code,{children:"SYSBACKUP"}),", ",(0,a.jsx)(n.code,{children:"SYSDG"}),", ",(0,a.jsx)(n.code,{children:"SYSKM"}),", ",(0,a.jsx)(n.code,{children:"SYSRAC"})," or ",(0,a.jsx)(n.code,{children:"SYSASM"})," if you want to connect with one of those roles, however Oracle recommends that you connect with the lowest possible privileges and roles necessary for the exporter to run."]}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:"To run the exporter in a container and expose the port, use a command like this, with the appropriate values for the environment variables:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"docker run -it --rm \\\n -e DB_USERNAME=pdbadmin \\\n -e DB_PASSWORD=Welcome12345 \\\n -e DB_CONNECT_STRING=free23ai:1521/freepdb \\\n -p 9161:9161 \\\n container-registry.oracle.com/database/observability-exporter:2.0.2\n"})}),"\n",(0,a.jsx)(n.h2,{id:"standalone-binary",children:"Standalone Binary"}),"\n",(0,a.jsxs)(n.p,{children:["Pre-compiled versions for Linux, ARM and Darwin 64-bit can be found under ",(0,a.jsx)(n.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/releases",children:"releases"}),"."]}),"\n",(0,a.jsxs)(n.p,{children:["In order to run, you'll need the ",(0,a.jsx)(n.a,{href:"http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html",children:"Oracle Instant Client Basic"})," for your operating system. Only the basic version is required for the exporter."]}),"\n",(0,a.jsxs)(n.blockquote,{children:["\n",(0,a.jsxs)(n.p,{children:["NOTE: If you are running the Standalone binary on a Mac ARM platform you must set the variable ",(0,a.jsx)(n.code,{children:"DYLD_LIBRARY_PATH"})," to the location of where the instant client installed. For example ",(0,a.jsx)(n.code,{children:"export DYLD_LIBRARY_PATH=/lib/oracle/instantclient_23_3"}),"."]}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:"The following command line arguments (flags) can be passed to the exporter (the --help flag will show the table below)."}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'Usage of oracledb_exporter:\n --config.file="example-config.yaml"\n File with metrics exporter configuration. (env: CONFIG_FILE)\n --web.telemetry-path="/metrics"\n Path under which to expose metrics. (env: TELEMETRY_PATH)\n --default.metrics="default-metrics.toml"\n File with default metrics in a TOML file. (env: DEFAULT_METRICS)\n --custom.metrics="" Comma separated list of file(s) that contain various custom metrics in a TOML format. (env: CUSTOM_METRICS)\n --query.timeout=5 Query timeout (in seconds). (env: QUERY_TIMEOUT)\n --database.maxIdleConns=0 Number of maximum idle connections in the connection pool. (env: DATABASE_MAXIDLECONNS)\n --database.maxOpenConns=10\n Number of maximum open connections in the connection pool. (env: DATABASE_MAXOPENCONNS)\n --database.poolIncrement=-1\n Connection increment when the connection pool reaches max capacity. (env: DATABASE_POOLINCREMENT)\n --database.poolMaxConnections=-1\n Maximum number of connections in the connection pool. (env: DATABASE_POOLMAXCONNECTIONS)\n --database.poolMinConnections=-1\n Minimum number of connections in the connection pool. (env: DATABASE_POOLMINCONNECTIONS)\n --scrape.interval=0s Interval between each scrape. Default is to scrape on collect requests.\n --log.disable=0 Set to 1 to disable alert logs\n --log.interval=15s Interval between log updates (e.g. 5s).\n --log.destination="/log/alert.log"\n File to output the alert log to. (env: LOG_DESTINATION)\n --web.listen-address=:9161 ...\n Addresses on which to expose metrics and web interface. Repeatable for multiple addresses. Examples: `:9100` or `[::1]:9100` for http, `vsock://:9100` for vsock\n --web.config.file="" Path to configuration file that can enable TLS or authentication. See: https://github.com/prometheus/exporter-toolkit/blob/master/docs/web-configuration.md\n --log.level=info Only log messages with the given severity or above. One of: [debug, info, warn, error]\n --log.format=logfmt Output format of log messages. One of: [logfmt, json]\n --[no-]version Show application version.\n'})}),"\n",(0,a.jsx)(n.p,{children:"You may provide the connection details using these variables:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_USERNAME"})," is the database username, e.g., ",(0,a.jsx)(n.code,{children:"pdbadmin"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_PASSWORD"})," is the password for that user, e.g., ",(0,a.jsx)(n.code,{children:"Welcome12345"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_CONNECT_STRING"})," is the connection string, e.g., ",(0,a.jsx)(n.code,{children:"localhost:1521/freepdb1"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_ROLE"})," (Optional) can be set to ",(0,a.jsx)(n.code,{children:"SYSDBA"})," or ",(0,a.jsx)(n.code,{children:"SYSOPER"})," if you want to connect with one of those roles, however Oracle recommends that you connect with the lowest possible privileges and roles necessary for the exporter to run."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"ORACLE_HOME"})," is the location of the Oracle Instant Client, e.g., ",(0,a.jsx)(n.code,{children:"/lib/oracle/21/client64/lib"}),"."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"TNS_ADMIN"})," is the location of your (unzipped) wallet. The ",(0,a.jsx)(n.code,{children:"DIRECTORY"})," set in the ",(0,a.jsx)(n.code,{children:"sqlnet.ora"})," file must match the path that it will be mounted on inside the container."]}),"\n"]}),"\n",(0,a.jsxs)(n.p,{children:["The following example puts the logfile in the current location with the filename ",(0,a.jsx)(n.code,{children:"alert.log"})," and loads the default matrics file (",(0,a.jsx)(n.code,{children:"default-metrics,toml"}),") from the current location."]}),"\n",(0,a.jsxs)(n.p,{children:["If you prefer to provide configuration via a ",(0,a.jsx)(n.a,{href:"/oracle-db-appdev-monitoring/docs/next/configuration/config-file",children:"config file"}),", you may do so with the ",(0,a.jsx)(n.code,{children:"--config.file"}),' argument. The use of a config file over command line arguments is preferred. If a config file is not provided, the "default" database connection is managed by command line arguments.']}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"# Example Oracle Database Metrics Exporter Configuration file.\n# Environment variables of the form ${VAR_NAME} will be expanded.\n# If you include a config value that contains a '$' character, escape that '$' with another '$', e.g.,\n# \"$test$pwd\" => \"$$test$$pwd\"\n# Otherwise, the value will be expanded as an environment variable.\n\n# Example Oracle Database Metrics Exporter Configuration file.\n# Environment variables of the form ${VAR_NAME} will be expanded.\n\ndatabases:\n ## Path on which metrics will be served\n # metricsPath: /metrics\n ## Database connection information for the \"default\" database.\n default:\n ## Database username\n username: ${DB_USERNAME}\n ## Database password\n password: ${DB_PASSWORD}\n ## Database password file\n ## If specified, will load the database password from a file.\n # passwordFile: ${DB_PASSWORD_FILE}\n ## Database connection url\n url: localhost:1521/freepdb1\n\n ## Metrics query timeout for this database, in seconds\n queryTimeout: 5\n\n ## Rely on Oracle Database External Authentication by network or OS\n # externalAuth: false\n ## Database role\n # role: SYSDBA\n ## Path to Oracle Database wallet, if using wallet\n # tnsAdmin: /path/to/database/wallet\n\n ### Connection settings:\n ### Either the go-sql or Oracle Database connection pool may be used.\n ### To use the Oracle Database connection pool over the go-sql connection pool,\n ### set maxIdleConns to zero and configure the pool* settings.\n\n ### Connection pooling settings for the go-sql connection pool\n ## Max open connections for this database using go-sql connection pool\n maxOpenConns: 10\n ## Max idle connections for this database using go-sql connection pool\n maxIdleConns: 10\n\n ### Connection pooling settings for the Oracle Database connection pool\n ## Oracle Database connection pool increment.\n # poolIncrement: 1\n ## Oracle Database Connection pool maximum size\n # poolMaxConnections: 15\n ## Oracle Database Connection pool minimum size\n # poolMinConnections: 15\n\n ## Arbitrary labels to add to each metric scraped from this database\n # labels:\n # label_name1: label_value1\n # label_name2: label_value2\n\nmetrics:\n ## How often to scrape metrics. If not provided, metrics will be scraped on request.\n # scrapeInterval: 15s\n ## Path to default metrics file.\n default: default-metrics.toml\n ## Paths to any custom metrics files\n custom:\n - custom-metrics-example/custom-metrics.toml\n\nlog:\n # Path of log file\n destination: /opt/alert.log\n # Interval of log updates\n interval: 15s\n ## Set disable to 1 to disable logging\n # disable: 0\n\n# Optionally configure prometheus webserver\n#web:\n# listenAddresses: [':9161']\n# systemdSocket: true|false\n# configFile: /path/to/webconfigfile\n"})}),"\n",(0,a.jsx)(n.h3,{id:"docker-compose",children:"Docker Compose"}),"\n",(0,a.jsx)(n.p,{children:'If you would like to set up a test environment with the exporter, you can use the provided "Docker Compose" file in this repository which will start an Oracle Database instance, the exporter, Prometheus and Grafana.'}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"cd docker-compose\ndocker-compose up -d\n"})}),"\n",(0,a.jsx)(n.p,{children:"The containers will take a short time to start. The first time, the Oracle container might take a few minutes to start while it creates the database instance, but this is a one-time operation, and subequent restarts will be much faster (a few seconds)."}),"\n",(0,a.jsx)(n.p,{children:"Once the containers are all running, you can access the services using these URLs:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"http://localhost:9161/metrics",children:"Exporter"})}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.a,{href:"http://localhost:9090",children:"Prometheus"}),' - try a query for "oracle".']}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.a,{href:"http://localhost:3000",children:"Grafana"}),' - username is "admin" and password is "grafana". An Oracle Database dashboard is provisioned and configured to use data from the exporter.']}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>r});var o=t(6540);const a={},i=o.createContext(a);function s(e){const n=o.useContext(i);return o.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),o.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[2173],{1035:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>s,metadata:()=>o,toc:()=>c});const o=JSON.parse('{"id":"getting-started/basics","title":"Installation","description":"In this section you will find information on running the exporter.","source":"@site/docs/getting-started/basics.md","sourceDirName":"getting-started","slug":"/getting-started/basics","permalink":"/oracle-db-appdev-monitoring/docs/next/getting-started/basics","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/docs/getting-started/basics.md","tags":[],"version":"current","sidebarPosition":1,"frontMatter":{"title":"Installation","sidebar_position":1},"sidebar":"tutorialSidebar","previous":{"title":"Getting Started","permalink":"/oracle-db-appdev-monitoring/docs/next/category/getting-started"},"next":{"title":"Default Metrics","permalink":"/oracle-db-appdev-monitoring/docs/next/getting-started/default-metrics"}}');var a=t(4848),i=t(8453);const s={title:"Installation",sidebar_position:1},r="Installation",l={},c=[{value:"Docker, Podman, etc",id:"docker-podman-etc",level:2},{value:"Oracle Database Free",id:"oracle-database-free",level:3},{value:"Exporter",id:"exporter",level:3},{value:"Simple connection",id:"simple-connection",level:3},{value:"Standalone Binary",id:"standalone-binary",level:2},{value:"Docker Compose",id:"docker-compose",level:3}];function d(e){const n={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.header,{children:(0,a.jsx)(n.h1,{id:"installation",children:"Installation"})}),"\n",(0,a.jsx)(n.p,{children:"In this section you will find information on running the exporter."}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["In a container runtime like ",(0,a.jsx)(n.a,{href:"#docker-podman-etc",children:"Docker, Podman, etc"})]}),"\n",(0,a.jsxs)(n.li,{children:["In a test/demo environment using ",(0,a.jsx)(n.a,{href:"#docker-compose",children:"Docker Compose"})]}),"\n",(0,a.jsxs)(n.li,{children:["In ",(0,a.jsx)(n.a,{href:"/oracle-db-appdev-monitoring/docs/next/getting-started/kubernetes",children:"Kubernetes"})]}),"\n",(0,a.jsxs)(n.li,{children:["As a ",(0,a.jsx)(n.a,{href:"#standalone-binary",children:"standalone binary"})]}),"\n"]}),"\n",(0,a.jsx)(n.h2,{id:"docker-podman-etc",children:"Docker, Podman, etc"}),"\n",(0,a.jsxs)(n.p,{children:["You can run the exporter in a local container using a container image from ",(0,a.jsx)(n.a,{href:"https://container-registry.oracle.com",children:"Oracle Container Registry"}),'. The container image is available in the "observability-exporter" repository in the "Database" category. No authentication or license presentment/acceptance are required to pull this image from the registry.']}),"\n",(0,a.jsx)(n.h3,{id:"oracle-database-free",children:"Oracle Database Free"}),"\n",(0,a.jsxs)(n.p,{children:["If you need an Oracle Database to test the exporter, you can use this command to start up an instance of ",(0,a.jsx)(n.a,{href:"https://www.oracle.com/database/free/",children:"Oracle Database Free"})," which also requires no authentication or license presentment/acceptance to pull the image."]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"docker run --name free23ai \\\n -d \\\n -p 1521:1521 \\\n -e ORACLE_PASSWORD=Welcome12345 \\\n gvenzl/oracle-free:23.9-slim-faststart\n"})}),"\n",(0,a.jsx)(n.p,{children:'This will pull the image and start up the database with a listener on port 1521. It will also create a pluggable database (a database container) called "FREEPDB1" and will set the admin passwords to the password you specified on this command.'}),"\n",(0,a.jsx)(n.p,{children:"You can tail the logs to see when the database is ready to use:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"docker logs -f free23ai\n\n(look for this message...)\n#########################\nDATABASE IS READY TO USE!\n#########################\n"})}),"\n",(0,a.jsx)(n.p,{children:'To obtain the IP address of the container, which you will need to connect to the database, use this command. Note: depending on your platform and container runtime, you may be able to access the database at "localhost":'}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'docker inspect free23ai | grep IPA\n "SecondaryIPAddresses": null,\n "IPAddress": "172.17.0.2",\n "IPAMConfig": null,\n "IPAddress": "172.17.0.2",\n'})}),"\n",(0,a.jsx)(n.h3,{id:"exporter",children:"Exporter"}),"\n",(0,a.jsx)(n.p,{children:"You need to give the exporter the connection details for the Oracle Database that you want it to run against. You can use a simple connection, or a wallet."}),"\n",(0,a.jsx)(n.h3,{id:"simple-connection",children:"Simple connection"}),"\n",(0,a.jsx)(n.p,{children:"For a simple connection, you will provide the details using these variables:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_USERNAME"})," is the database username, e.g., ",(0,a.jsx)(n.code,{children:"pdbadmin"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_PASSWORD"})," is the password for that user, e.g., ",(0,a.jsx)(n.code,{children:"Welcome12345"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_CONNECT_STRING"})," is the connection string, e.g., ",(0,a.jsx)(n.code,{children:"free23ai:1521/freepdb"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_ROLE"})," (Optional) can be set to ",(0,a.jsx)(n.code,{children:"SYSDBA"}),", ",(0,a.jsx)(n.code,{children:"SYSOPER"}),", ",(0,a.jsx)(n.code,{children:"SYSBACKUP"}),", ",(0,a.jsx)(n.code,{children:"SYSDG"}),", ",(0,a.jsx)(n.code,{children:"SYSKM"}),", ",(0,a.jsx)(n.code,{children:"SYSRAC"})," or ",(0,a.jsx)(n.code,{children:"SYSASM"})," if you want to connect with one of those roles, however Oracle recommends that you connect with the lowest possible privileges and roles necessary for the exporter to run."]}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:"To run the exporter in a container and expose the port, use a command like this, with the appropriate values for the environment variables:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"docker run -it --rm \\\n -e DB_USERNAME=pdbadmin \\\n -e DB_PASSWORD=Welcome12345 \\\n -e DB_CONNECT_STRING=free23ai:1521/freepdb \\\n -p 9161:9161 \\\n container-registry.oracle.com/database/observability-exporter:2.0.3\n"})}),"\n",(0,a.jsx)(n.h2,{id:"standalone-binary",children:"Standalone Binary"}),"\n",(0,a.jsxs)(n.p,{children:["Pre-compiled versions for Linux, ARM and Darwin 64-bit can be found under ",(0,a.jsx)(n.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/releases",children:"releases"}),"."]}),"\n",(0,a.jsxs)(n.p,{children:["In order to run, you'll need the ",(0,a.jsx)(n.a,{href:"http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html",children:"Oracle Instant Client Basic"})," for your operating system. Only the basic version is required for the exporter."]}),"\n",(0,a.jsxs)(n.blockquote,{children:["\n",(0,a.jsxs)(n.p,{children:["NOTE: If you are running the Standalone binary on a Mac ARM platform you must set the variable ",(0,a.jsx)(n.code,{children:"DYLD_LIBRARY_PATH"})," to the location of where the instant client installed. For example ",(0,a.jsx)(n.code,{children:"export DYLD_LIBRARY_PATH=/lib/oracle/instantclient_23_3"}),"."]}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:"The following command line arguments (flags) can be passed to the exporter (the --help flag will show the table below)."}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'Usage of oracledb_exporter:\n --config.file="example-config.yaml"\n File with metrics exporter configuration. (env: CONFIG_FILE)\n --web.telemetry-path="/metrics"\n Path under which to expose metrics. (env: TELEMETRY_PATH)\n --default.metrics="default-metrics.toml"\n File with default metrics in a TOML file. (env: DEFAULT_METRICS)\n --custom.metrics="" Comma separated list of file(s) that contain various custom metrics in a TOML format. (env: CUSTOM_METRICS)\n --query.timeout=5 Query timeout (in seconds). (env: QUERY_TIMEOUT)\n --database.maxIdleConns=0 Number of maximum idle connections in the connection pool. (env: DATABASE_MAXIDLECONNS)\n --database.maxOpenConns=10\n Number of maximum open connections in the connection pool. (env: DATABASE_MAXOPENCONNS)\n --database.poolIncrement=-1\n Connection increment when the connection pool reaches max capacity. (env: DATABASE_POOLINCREMENT)\n --database.poolMaxConnections=-1\n Maximum number of connections in the connection pool. (env: DATABASE_POOLMAXCONNECTIONS)\n --database.poolMinConnections=-1\n Minimum number of connections in the connection pool. (env: DATABASE_POOLMINCONNECTIONS)\n --scrape.interval=0s Interval between each scrape. Default is to scrape on collect requests.\n --log.disable=0 Set to 1 to disable alert logs\n --log.interval=15s Interval between log updates (e.g. 5s).\n --log.destination="/log/alert.log"\n File to output the alert log to. (env: LOG_DESTINATION)\n --web.listen-address=:9161 ...\n Addresses on which to expose metrics and web interface. Repeatable for multiple addresses. Examples: `:9100` or `[::1]:9100` for http, `vsock://:9100` for vsock\n --web.config.file="" Path to configuration file that can enable TLS or authentication. See: https://github.com/prometheus/exporter-toolkit/blob/master/docs/web-configuration.md\n --log.level=info Only log messages with the given severity or above. One of: [debug, info, warn, error]\n --log.format=logfmt Output format of log messages. One of: [logfmt, json]\n --[no-]version Show application version.\n'})}),"\n",(0,a.jsx)(n.p,{children:"You may provide the connection details using these variables:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_USERNAME"})," is the database username, e.g., ",(0,a.jsx)(n.code,{children:"pdbadmin"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_PASSWORD"})," is the password for that user, e.g., ",(0,a.jsx)(n.code,{children:"Welcome12345"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_CONNECT_STRING"})," is the connection string, e.g., ",(0,a.jsx)(n.code,{children:"localhost:1521/freepdb1"})]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"DB_ROLE"})," (Optional) can be set to ",(0,a.jsx)(n.code,{children:"SYSDBA"})," or ",(0,a.jsx)(n.code,{children:"SYSOPER"})," if you want to connect with one of those roles, however Oracle recommends that you connect with the lowest possible privileges and roles necessary for the exporter to run."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"ORACLE_HOME"})," is the location of the Oracle Instant Client, e.g., ",(0,a.jsx)(n.code,{children:"/lib/oracle/21/client64/lib"}),"."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"TNS_ADMIN"})," is the location of your (unzipped) wallet. The ",(0,a.jsx)(n.code,{children:"DIRECTORY"})," set in the ",(0,a.jsx)(n.code,{children:"sqlnet.ora"})," file must match the path that it will be mounted on inside the container."]}),"\n"]}),"\n",(0,a.jsxs)(n.p,{children:["The following example puts the logfile in the current location with the filename ",(0,a.jsx)(n.code,{children:"alert.log"})," and loads the default matrics file (",(0,a.jsx)(n.code,{children:"default-metrics,toml"}),") from the current location."]}),"\n",(0,a.jsxs)(n.p,{children:["If you prefer to provide configuration via a ",(0,a.jsx)(n.a,{href:"/oracle-db-appdev-monitoring/docs/next/configuration/config-file",children:"config file"}),", you may do so with the ",(0,a.jsx)(n.code,{children:"--config.file"}),' argument. The use of a config file over command line arguments is preferred. If a config file is not provided, the "default" database connection is managed by command line arguments.']}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"# Example Oracle Database Metrics Exporter Configuration file.\n# Environment variables of the form ${VAR_NAME} will be expanded.\n# If you include a config value that contains a '$' character, escape that '$' with another '$', e.g.,\n# \"$test$pwd\" => \"$$test$$pwd\"\n# Otherwise, the value will be expanded as an environment variable.\n\n# Example Oracle Database Metrics Exporter Configuration file.\n# Environment variables of the form ${VAR_NAME} will be expanded.\n\ndatabases:\n ## Path on which metrics will be served\n # metricsPath: /metrics\n ## Database connection information for the \"default\" database.\n default:\n ## Database username\n username: ${DB_USERNAME}\n ## Database password\n password: ${DB_PASSWORD}\n ## Database password file\n ## If specified, will load the database password from a file.\n # passwordFile: ${DB_PASSWORD_FILE}\n ## Database connection url\n url: localhost:1521/freepdb1\n\n ## Metrics query timeout for this database, in seconds\n queryTimeout: 5\n\n ## Rely on Oracle Database External Authentication by network or OS\n # externalAuth: false\n ## Database role\n # role: SYSDBA\n ## Path to Oracle Database wallet, if using wallet\n # tnsAdmin: /path/to/database/wallet\n\n ### Connection settings:\n ### Either the go-sql or Oracle Database connection pool may be used.\n ### To use the Oracle Database connection pool over the go-sql connection pool,\n ### set maxIdleConns to zero and configure the pool* settings.\n\n ### Connection pooling settings for the go-sql connection pool\n ## Max open connections for this database using go-sql connection pool\n maxOpenConns: 10\n ## Max idle connections for this database using go-sql connection pool\n maxIdleConns: 10\n\n ### Connection pooling settings for the Oracle Database connection pool\n ## Oracle Database connection pool increment.\n # poolIncrement: 1\n ## Oracle Database Connection pool maximum size\n # poolMaxConnections: 15\n ## Oracle Database Connection pool minimum size\n # poolMinConnections: 15\n\n ## Arbitrary labels to add to each metric scraped from this database\n # labels:\n # label_name1: label_value1\n # label_name2: label_value2\n\nmetrics:\n ## How often to scrape metrics. If not provided, metrics will be scraped on request.\n # scrapeInterval: 15s\n ## Path to default metrics file.\n default: default-metrics.toml\n ## Paths to any custom metrics files\n custom:\n - custom-metrics-example/custom-metrics.toml\n\nlog:\n # Path of log file\n destination: /opt/alert.log\n # Interval of log updates\n interval: 15s\n ## Set disable to 1 to disable logging\n # disable: 0\n\n# Optionally configure prometheus webserver\n#web:\n# listenAddresses: [':9161']\n# systemdSocket: true|false\n# configFile: /path/to/webconfigfile\n"})}),"\n",(0,a.jsx)(n.h3,{id:"docker-compose",children:"Docker Compose"}),"\n",(0,a.jsx)(n.p,{children:'If you would like to set up a test environment with the exporter, you can use the provided "Docker Compose" file in this repository which will start an Oracle Database instance, the exporter, Prometheus and Grafana.'}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"cd docker-compose\ndocker-compose up -d\n"})}),"\n",(0,a.jsx)(n.p,{children:"The containers will take a short time to start. The first time, the Oracle container might take a few minutes to start while it creates the database instance, but this is a one-time operation, and subequent restarts will be much faster (a few seconds)."}),"\n",(0,a.jsx)(n.p,{children:"Once the containers are all running, you can access the services using these URLs:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"http://localhost:9161/metrics",children:"Exporter"})}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.a,{href:"http://localhost:9090",children:"Prometheus"}),' - try a query for "oracle".']}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.a,{href:"http://localhost:3000",children:"Grafana"}),' - username is "admin" and password is "grafana". An Oracle Database dashboard is provisioned and configured to use data from the exporter.']}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>r});var o=t(6540);const a={},i=o.createContext(a);function s(e){const n=o.useContext(i);return o.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),o.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/d94a41cc.cf627fef.js b/docs/assets/js/d94a41cc.4186b72c.js similarity index 98% rename from docs/assets/js/d94a41cc.cf627fef.js rename to docs/assets/js/d94a41cc.4186b72c.js index 3cc4d16e..045bd449 100644 --- a/docs/assets/js/d94a41cc.cf627fef.js +++ b/docs/assets/js/d94a41cc.4186b72c.js @@ -1 +1 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[4580],{6358:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>l,contentTitle:()=>s,default:()=>f,frontMatter:()=>r,metadata:()=>t,toc:()=>c});const t=JSON.parse('{"id":"configuration/config-file","title":"Exporter Config File","description":"The recommended way to configure the exporter is with the --config.file argument, specifying a YAML configuration file.","source":"@site/docs/configuration/config-file.md","sourceDirName":"configuration","slug":"/configuration/config-file","permalink":"/oracle-db-appdev-monitoring/docs/next/configuration/config-file","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/docs/configuration/config-file.md","tags":[],"version":"current","sidebarPosition":1,"frontMatter":{"title":"Exporter Config File","sidebar_position":1},"sidebar":"tutorialSidebar","previous":{"title":"Configuration","permalink":"/oracle-db-appdev-monitoring/docs/next/category/configuration"},"next":{"title":"Custom Metrics","permalink":"/oracle-db-appdev-monitoring/docs/next/configuration/custom-metrics"}}');var i=o(4848),a=o(8453);const r={title:"Exporter Config File",sidebar_position:1},s="Exporter Config File",l={},c=[{value:"Config file in a container image",id:"config-file-in-a-container-image",level:3}];function d(e){const n={code:"code",h1:"h1",h3:"h3",header:"header",p:"p",pre:"pre",...(0,a.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"exporter-config-file",children:"Exporter Config File"})}),"\n",(0,i.jsxs)(n.p,{children:["The recommended way to configure the exporter is with the ",(0,i.jsx)(n.code,{children:"--config.file"})," argument, specifying a YAML configuration file."]}),"\n",(0,i.jsx)(n.p,{children:"The configuration file contains the following options:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"# Example Oracle Database Metrics Exporter Configuration file.\n# Environment variables of the form ${VAR_NAME} will be expanded.\n# If you include a config value that contains a '$' character, escape that '$' with another '$', e.g.,\n# \"$test$pwd\" => \"$$test$$pwd\"\n# Otherwise, the value will be expanded as an environment variable.\n\n# Example Oracle Database Metrics Exporter Configuration file.\n# Environment variables of the form ${VAR_NAME} will be expanded.\n\ndatabases:\n ## Path on which metrics will be served\n # metricsPath: /metrics\n ## Database connection information for the \"default\" database.\n default:\n ## Database username\n username: ${DB_USERNAME}\n ## Database password\n password: ${DB_PASSWORD}\n ## Database password file\n ## If specified, will load the database password from a file.\n # passwordFile: ${DB_PASSWORD_FILE}\n ## Database connection url\n url: localhost:1521/freepdb1\n\n ## Metrics query timeout for this database, in seconds\n queryTimeout: 5\n\n ## Rely on Oracle Database External Authentication by network or OS\n # externalAuth: false\n ## Database role\n # role: SYSDBA\n ## Path to Oracle Database wallet, if using wallet\n # tnsAdmin: /path/to/database/wallet\n\n ### Connection settings:\n ### Either the go-sql or Oracle Database connection pool may be used.\n ### To use the Oracle Database connection pool over the go-sql connection pool,\n ### set maxIdleConns to zero and configure the pool* settings.\n\n ### Connection pooling settings for the go-sql connection pool\n ## Max open connections for this database using go-sql connection pool\n maxOpenConns: 10\n ## Max idle connections for this database using go-sql connection pool\n maxIdleConns: 10\n\n ### Connection pooling settings for the Oracle Database connection pool\n ## Oracle Database connection pool increment.\n # poolIncrement: 1\n ## Oracle Database Connection pool maximum size\n # poolMaxConnections: 15\n ## Oracle Database Connection pool minimum size\n # poolMinConnections: 15\n\n ## Arbitrary labels to add to each metric scraped from this database\n # labels:\n # label_name1: label_value1\n # label_name2: label_value2\n\nmetrics:\n ## How often to scrape metrics. If not provided, metrics will be scraped on request.\n # scrapeInterval: 15s\n ## Path to default metrics file.\n default: default-metrics.toml\n ## Paths to any custom metrics files\n custom:\n - custom-metrics-example/custom-metrics.toml\n\nlog:\n # Path of log file\n destination: /opt/alert.log\n # Interval of log updates\n interval: 15s\n ## Set disable to 1 to disable logging\n # disable: 0\n\n# Optionally configure prometheus webserver\n#web:\n# listenAddresses: [':9161']\n# systemdSocket: true|false\n# configFile: /path/to/webconfigfile\n"})}),"\n",(0,i.jsx)(n.h3,{id:"config-file-in-a-container-image",children:"Config file in a container image"}),"\n",(0,i.jsx)(n.p,{children:"To add your custom config file to a container image, you can layer the base exporter image and include that config:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-Dockerfile",children:'FROM container-registry.oracle.com/database/observability-exporter:2.0.2\nCOPY my-exporter-config.yaml /\nENTRYPOINT ["/oracledb_exporter", "--config.file", "/my-exporter-config.yaml"]\n'})})]})}function f(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},8453:(e,n,o)=>{o.d(n,{R:()=>r,x:()=>s});var t=o(6540);const i={},a=t.createContext(i);function r(e){const n=t.useContext(a);return t.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[4580],{6358:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>l,contentTitle:()=>s,default:()=>f,frontMatter:()=>r,metadata:()=>t,toc:()=>c});const t=JSON.parse('{"id":"configuration/config-file","title":"Exporter Config File","description":"The recommended way to configure the exporter is with the --config.file argument, specifying a YAML configuration file.","source":"@site/docs/configuration/config-file.md","sourceDirName":"configuration","slug":"/configuration/config-file","permalink":"/oracle-db-appdev-monitoring/docs/next/configuration/config-file","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/docs/configuration/config-file.md","tags":[],"version":"current","sidebarPosition":1,"frontMatter":{"title":"Exporter Config File","sidebar_position":1},"sidebar":"tutorialSidebar","previous":{"title":"Configuration","permalink":"/oracle-db-appdev-monitoring/docs/next/category/configuration"},"next":{"title":"Custom Metrics","permalink":"/oracle-db-appdev-monitoring/docs/next/configuration/custom-metrics"}}');var i=o(4848),a=o(8453);const r={title:"Exporter Config File",sidebar_position:1},s="Exporter Config File",l={},c=[{value:"Config file in a container image",id:"config-file-in-a-container-image",level:3}];function d(e){const n={code:"code",h1:"h1",h3:"h3",header:"header",p:"p",pre:"pre",...(0,a.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"exporter-config-file",children:"Exporter Config File"})}),"\n",(0,i.jsxs)(n.p,{children:["The recommended way to configure the exporter is with the ",(0,i.jsx)(n.code,{children:"--config.file"})," argument, specifying a YAML configuration file."]}),"\n",(0,i.jsx)(n.p,{children:"The configuration file contains the following options:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"# Example Oracle Database Metrics Exporter Configuration file.\n# Environment variables of the form ${VAR_NAME} will be expanded.\n# If you include a config value that contains a '$' character, escape that '$' with another '$', e.g.,\n# \"$test$pwd\" => \"$$test$$pwd\"\n# Otherwise, the value will be expanded as an environment variable.\n\n# Example Oracle Database Metrics Exporter Configuration file.\n# Environment variables of the form ${VAR_NAME} will be expanded.\n\ndatabases:\n ## Path on which metrics will be served\n # metricsPath: /metrics\n ## Database connection information for the \"default\" database.\n default:\n ## Database username\n username: ${DB_USERNAME}\n ## Database password\n password: ${DB_PASSWORD}\n ## Database password file\n ## If specified, will load the database password from a file.\n # passwordFile: ${DB_PASSWORD_FILE}\n ## Database connection url\n url: localhost:1521/freepdb1\n\n ## Metrics query timeout for this database, in seconds\n queryTimeout: 5\n\n ## Rely on Oracle Database External Authentication by network or OS\n # externalAuth: false\n ## Database role\n # role: SYSDBA\n ## Path to Oracle Database wallet, if using wallet\n # tnsAdmin: /path/to/database/wallet\n\n ### Connection settings:\n ### Either the go-sql or Oracle Database connection pool may be used.\n ### To use the Oracle Database connection pool over the go-sql connection pool,\n ### set maxIdleConns to zero and configure the pool* settings.\n\n ### Connection pooling settings for the go-sql connection pool\n ## Max open connections for this database using go-sql connection pool\n maxOpenConns: 10\n ## Max idle connections for this database using go-sql connection pool\n maxIdleConns: 10\n\n ### Connection pooling settings for the Oracle Database connection pool\n ## Oracle Database connection pool increment.\n # poolIncrement: 1\n ## Oracle Database Connection pool maximum size\n # poolMaxConnections: 15\n ## Oracle Database Connection pool minimum size\n # poolMinConnections: 15\n\n ## Arbitrary labels to add to each metric scraped from this database\n # labels:\n # label_name1: label_value1\n # label_name2: label_value2\n\nmetrics:\n ## How often to scrape metrics. If not provided, metrics will be scraped on request.\n # scrapeInterval: 15s\n ## Path to default metrics file.\n default: default-metrics.toml\n ## Paths to any custom metrics files\n custom:\n - custom-metrics-example/custom-metrics.toml\n\nlog:\n # Path of log file\n destination: /opt/alert.log\n # Interval of log updates\n interval: 15s\n ## Set disable to 1 to disable logging\n # disable: 0\n\n# Optionally configure prometheus webserver\n#web:\n# listenAddresses: [':9161']\n# systemdSocket: true|false\n# configFile: /path/to/webconfigfile\n"})}),"\n",(0,i.jsx)(n.h3,{id:"config-file-in-a-container-image",children:"Config file in a container image"}),"\n",(0,i.jsx)(n.p,{children:"To add your custom config file to a container image, you can layer the base exporter image and include that config:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-Dockerfile",children:'FROM container-registry.oracle.com/database/observability-exporter:2.0.3\nCOPY my-exporter-config.yaml /\nENTRYPOINT ["/oracledb_exporter", "--config.file", "/my-exporter-config.yaml"]\n'})})]})}function f(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},8453:(e,n,o)=>{o.d(n,{R:()=>r,x:()=>s});var t=o(6540);const i={},a=t.createContext(i);function r(e){const n=t.useContext(a);return t.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/f6de67f9.85db75b5.js b/docs/assets/js/f6de67f9.f329491a.js similarity index 99% rename from docs/assets/js/f6de67f9.85db75b5.js rename to docs/assets/js/f6de67f9.f329491a.js index 06a53647..b33f0dba 100644 --- a/docs/assets/js/f6de67f9.85db75b5.js +++ b/docs/assets/js/f6de67f9.f329491a.js @@ -1 +1 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[2900],{2127:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>i,contentTitle:()=>s,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>c});const a=JSON.parse('{"id":"configuration/oracle-wallet","title":"Oracle Wallet (mTLS)","description":"For mutual TLS (mTLS) connections, you must use an Oracle Wallet.","source":"@site/versioned_docs/version-2.0.3/configuration/oracle-wallet.md","sourceDirName":"configuration","slug":"/configuration/oracle-wallet","permalink":"/oracle-db-appdev-monitoring/docs/configuration/oracle-wallet","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/versioned_docs/version-2.0.3/configuration/oracle-wallet.md","tags":[],"version":"2.0.3","sidebarPosition":4,"frontMatter":{"title":"Oracle Wallet (mTLS)","sidebar_position":4},"sidebar":"tutorialSidebar","previous":{"title":"Multiple Databases","permalink":"/oracle-db-appdev-monitoring/docs/configuration/multiple-databases"},"next":{"title":"Alert Logs","permalink":"/oracle-db-appdev-monitoring/docs/configuration/alert-logs"}}');var o=t(4848),l=t(8453);const r={title:"Oracle Wallet (mTLS)",sidebar_position:4},s="Using a Wallet",i={},c=[{value:"mTLS for multiple databases with Oracle Wallet",id:"mtls-for-multiple-databases-with-oracle-wallet",level:3}];function d(e){const n={code:"code",h1:"h1",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",...(0,l.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.header,{children:(0,o.jsx)(n.h1,{id:"using-a-wallet",children:"Using a Wallet"})}),"\n",(0,o.jsx)(n.p,{children:"For mutual TLS (mTLS) connections, you must use an Oracle Wallet."}),"\n",(0,o.jsx)(n.p,{children:"If you are using Oracle Autonomous Database with mTLS, for example, you can download and unzip the wallet from the Oracle Cloud Infrastructure (OCI) console."}),"\n",(0,o.jsx)(n.p,{children:"To configure the exporter to use an Oracle Wallet,"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["Set the ",(0,o.jsx)(n.code,{children:"TNS_ADMIN"})," environment variable to the directory containing the unzipped wallet"]}),"\n",(0,o.jsx)(n.li,{children:"Configure your database instance with the appropriate database TNS name:"}),"\n"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:"databases:\n mydb:\n username: admin\n password: \n # TNS Name from wallet tnsnames.ora file, e.g., mydb_high\n url: \n"})}),"\n",(0,o.jsxs)(n.p,{children:["If you are running the exporter as a container, you can mount the wallet as a volume. For example, mounting the ",(0,o.jsx)(n.code,{children:"./wallet"})," directory to the ",(0,o.jsx)(n.code,{children:"/wallet"})," location:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"docker run -it --rm \\\n -e DB_USERNAME=pdbadmin \\\n -e DB_PASSWORD=Welcome12345 \\\n -e DB_CONNECT_STRING=devdb_tp \\\n -v ./wallet:/wallet \\\n -p 9161:9161 \\\n container-registry.oracle.com/database/observability-exporter:2.0.2\n"})}),"\n",(0,o.jsx)(n.h3,{id:"mtls-for-multiple-databases-with-oracle-wallet",children:"mTLS for multiple databases with Oracle Wallet"}),"\n",(0,o.jsxs)(n.p,{children:["The Oracle Database Metrics exporter uses ODPI-C, which can only initalize the TNS aliases from a ",(0,o.jsx)(n.code,{children:"tnsnames.ora"}),' file once per process. To work around this, the exporter can be configured to read from a "combined" ',(0,o.jsx)(n.code,{children:"tnsnames.ora"})," file containing all TNS aliases for connections in a multi-database configuration."]}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"For each database the exporter will connect to, download the corresponding wallet files. If you're using ADB/ATP-S, download the regional wallet instead of the instance wallet if the databases are in the same region."}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Copy the TNS aliases the ",(0,o.jsx)(n.code,{children:"tnsnames.ora"})," file from each wallet, and combine them into one file, so all your database service names are in one file together"]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["In the combined ",(0,o.jsx)(n.code,{children:"tnsnames.ora"})," file, and add the following snippet to each TNS alias connection string, to tell the client where the wallet directory is:"]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{children:"(security=(MY_WALLET_DIRECTORY=/path/to/this/database/wallet))\n"})}),"\n",(0,o.jsxs)(n.p,{children:["The combined ",(0,o.jsx)(n.code,{children:"tnsnames.ora"})," file, which contains the TNS aliases for both databases, and their corresponding wallet location in the ",(0,o.jsx)(n.code,{children:"security"})," configuration will look something like the following:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-sql",children:"db1_high = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=adb.****.oraclecloud.com))(connect_data=(service_name=****.adb.oraclecloud.com))(security=(MY_WALLET_DIRECTORY=/wallets/db1)(ssl_server_dn_match=yes)))\n\ndb2_high = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=adb.****.oraclecloud.com))(connect_data=(service_name=****.adb.oraclecloud.com))(security=(MY_WALLET_DIRECTORY=/wallets/db2)(ssl_server_dn_match=yes)))\n"})}),"\n",(0,o.jsxs)(n.ol,{start:"4",children:["\n",(0,o.jsxs)(n.li,{children:["Take wallet files (cwallet.sso, ewallet.p12, & ewallet.pem) for each database, and place them in separate directories. For example, ",(0,o.jsx)(n.code,{children:"db1"})," gets its own directory, ",(0,o.jsx)(n.code,{children:"db2"})," gets its own directory, and so forth."]}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:["The resulting directory structure should look like the following, with wallet information separate from the combined ",(0,o.jsx)(n.code,{children:"tnsnames.ora"})," file:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{children:"wallets\n\u251c\u2500\u2500 combined\n\u2502 \u251c\u2500\u2500 sqlnet.ora\n\u2502 \u2514\u2500\u2500 tnsnames.ora // Combined tnsnames.ora\n\u251c\u2500\u2500 db1\n\u2502 \u251c\u2500\u2500 cwallet.sso\n\u2502 \u251c\u2500\u2500 ewallet.p12\n\u2502 \u2514\u2500\u2500 ewallet.pem\n\u2514\u2500\u2500 db2\n\u251c\u2500\u2500 cwallet.sso\n\u251c\u2500\u2500 ewallet.p12\n\u2514\u2500\u2500 ewallet.pem\n"})}),"\n",(0,o.jsxs)(n.ol,{start:"5",children:["\n",(0,o.jsxs)(n.li,{children:["Set the ",(0,o.jsx)(n.code,{children:"TNS_ADMIN"})," environment variable where the exporter is running to the directory containing your combined ",(0,o.jsx)(n.code,{children:"tnsnames.ora"})," file:"]}),"\n"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{children:"export TNS_ADMIN=/wallets/combined\n"})}),"\n",(0,o.jsxs)(n.ol,{start:"6",children:["\n",(0,o.jsxs)(n.li,{children:["Finally, update the exporter configuration file to include the TNS aliases for all databases you will be connecting to. Ensure your database configuration file does not use the ",(0,o.jsx)(n.code,{children:"tnsAdmin"})," property, as we are using the global ",(0,o.jsx)(n.code,{children:"TNS_ADMIN"})," environment variable to point to the combined ",(0,o.jsx)(n.code,{children:"tnsnames.ora"})," file:"]}),"\n"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:"databases:\n db2:\n username: ****\n password: ****\n url: db2_high\n queryTimeout: 5\n maxOpenConns: 10\n maxIdleConns: 10\n db1:\n username: ****\n password: ****\n url: db1_high\n queryTimeout: 5\n maxOpenConns: 10\n maxIdleConns: 10\n"})}),"\n",(0,o.jsx)(n.p,{children:"Then, run the exporter with the config file:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-shell",children:"./oracledb_exporter --config.file=my-config-file.yaml\n"})})]})}function h(e={}){const{wrapper:n}={...(0,l.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>s});var a=t(6540);const o={},l=a.createContext(o);function r(e){const n=a.useContext(l);return a.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),a.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[2900],{2127:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>i,contentTitle:()=>s,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>c});const a=JSON.parse('{"id":"configuration/oracle-wallet","title":"Oracle Wallet (mTLS)","description":"For mutual TLS (mTLS) connections, you must use an Oracle Wallet.","source":"@site/versioned_docs/version-2.0.3/configuration/oracle-wallet.md","sourceDirName":"configuration","slug":"/configuration/oracle-wallet","permalink":"/oracle-db-appdev-monitoring/docs/configuration/oracle-wallet","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/versioned_docs/version-2.0.3/configuration/oracle-wallet.md","tags":[],"version":"2.0.3","sidebarPosition":4,"frontMatter":{"title":"Oracle Wallet (mTLS)","sidebar_position":4},"sidebar":"tutorialSidebar","previous":{"title":"Multiple Databases","permalink":"/oracle-db-appdev-monitoring/docs/configuration/multiple-databases"},"next":{"title":"Alert Logs","permalink":"/oracle-db-appdev-monitoring/docs/configuration/alert-logs"}}');var o=t(4848),l=t(8453);const r={title:"Oracle Wallet (mTLS)",sidebar_position:4},s="Using a Wallet",i={},c=[{value:"mTLS for multiple databases with Oracle Wallet",id:"mtls-for-multiple-databases-with-oracle-wallet",level:3}];function d(e){const n={code:"code",h1:"h1",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",...(0,l.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.header,{children:(0,o.jsx)(n.h1,{id:"using-a-wallet",children:"Using a Wallet"})}),"\n",(0,o.jsx)(n.p,{children:"For mutual TLS (mTLS) connections, you must use an Oracle Wallet."}),"\n",(0,o.jsx)(n.p,{children:"If you are using Oracle Autonomous Database with mTLS, for example, you can download and unzip the wallet from the Oracle Cloud Infrastructure (OCI) console."}),"\n",(0,o.jsx)(n.p,{children:"To configure the exporter to use an Oracle Wallet,"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["Set the ",(0,o.jsx)(n.code,{children:"TNS_ADMIN"})," environment variable to the directory containing the unzipped wallet"]}),"\n",(0,o.jsx)(n.li,{children:"Configure your database instance with the appropriate database TNS name:"}),"\n"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:"databases:\n mydb:\n username: admin\n password: \n # TNS Name from wallet tnsnames.ora file, e.g., mydb_high\n url: \n"})}),"\n",(0,o.jsxs)(n.p,{children:["If you are running the exporter as a container, you can mount the wallet as a volume. For example, mounting the ",(0,o.jsx)(n.code,{children:"./wallet"})," directory to the ",(0,o.jsx)(n.code,{children:"/wallet"})," location:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"docker run -it --rm \\\n -e DB_USERNAME=pdbadmin \\\n -e DB_PASSWORD=Welcome12345 \\\n -e DB_CONNECT_STRING=devdb_tp \\\n -v ./wallet:/wallet \\\n -p 9161:9161 \\\n container-registry.oracle.com/database/observability-exporter:2.0.3\n"})}),"\n",(0,o.jsx)(n.h3,{id:"mtls-for-multiple-databases-with-oracle-wallet",children:"mTLS for multiple databases with Oracle Wallet"}),"\n",(0,o.jsxs)(n.p,{children:["The Oracle Database Metrics exporter uses ODPI-C, which can only initalize the TNS aliases from a ",(0,o.jsx)(n.code,{children:"tnsnames.ora"}),' file once per process. To work around this, the exporter can be configured to read from a "combined" ',(0,o.jsx)(n.code,{children:"tnsnames.ora"})," file containing all TNS aliases for connections in a multi-database configuration."]}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"For each database the exporter will connect to, download the corresponding wallet files. If you're using ADB/ATP-S, download the regional wallet instead of the instance wallet if the databases are in the same region."}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Copy the TNS aliases the ",(0,o.jsx)(n.code,{children:"tnsnames.ora"})," file from each wallet, and combine them into one file, so all your database service names are in one file together"]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["In the combined ",(0,o.jsx)(n.code,{children:"tnsnames.ora"})," file, and add the following snippet to each TNS alias connection string, to tell the client where the wallet directory is:"]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{children:"(security=(MY_WALLET_DIRECTORY=/path/to/this/database/wallet))\n"})}),"\n",(0,o.jsxs)(n.p,{children:["The combined ",(0,o.jsx)(n.code,{children:"tnsnames.ora"})," file, which contains the TNS aliases for both databases, and their corresponding wallet location in the ",(0,o.jsx)(n.code,{children:"security"})," configuration will look something like the following:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-sql",children:"db1_high = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=adb.****.oraclecloud.com))(connect_data=(service_name=****.adb.oraclecloud.com))(security=(MY_WALLET_DIRECTORY=/wallets/db1)(ssl_server_dn_match=yes)))\n\ndb2_high = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=adb.****.oraclecloud.com))(connect_data=(service_name=****.adb.oraclecloud.com))(security=(MY_WALLET_DIRECTORY=/wallets/db2)(ssl_server_dn_match=yes)))\n"})}),"\n",(0,o.jsxs)(n.ol,{start:"4",children:["\n",(0,o.jsxs)(n.li,{children:["Take wallet files (cwallet.sso, ewallet.p12, & ewallet.pem) for each database, and place them in separate directories. For example, ",(0,o.jsx)(n.code,{children:"db1"})," gets its own directory, ",(0,o.jsx)(n.code,{children:"db2"})," gets its own directory, and so forth."]}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:["The resulting directory structure should look like the following, with wallet information separate from the combined ",(0,o.jsx)(n.code,{children:"tnsnames.ora"})," file:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{children:"wallets\n\u251c\u2500\u2500 combined\n\u2502 \u251c\u2500\u2500 sqlnet.ora\n\u2502 \u2514\u2500\u2500 tnsnames.ora // Combined tnsnames.ora\n\u251c\u2500\u2500 db1\n\u2502 \u251c\u2500\u2500 cwallet.sso\n\u2502 \u251c\u2500\u2500 ewallet.p12\n\u2502 \u2514\u2500\u2500 ewallet.pem\n\u2514\u2500\u2500 db2\n\u251c\u2500\u2500 cwallet.sso\n\u251c\u2500\u2500 ewallet.p12\n\u2514\u2500\u2500 ewallet.pem\n"})}),"\n",(0,o.jsxs)(n.ol,{start:"5",children:["\n",(0,o.jsxs)(n.li,{children:["Set the ",(0,o.jsx)(n.code,{children:"TNS_ADMIN"})," environment variable where the exporter is running to the directory containing your combined ",(0,o.jsx)(n.code,{children:"tnsnames.ora"})," file:"]}),"\n"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{children:"export TNS_ADMIN=/wallets/combined\n"})}),"\n",(0,o.jsxs)(n.ol,{start:"6",children:["\n",(0,o.jsxs)(n.li,{children:["Finally, update the exporter configuration file to include the TNS aliases for all databases you will be connecting to. Ensure your database configuration file does not use the ",(0,o.jsx)(n.code,{children:"tnsAdmin"})," property, as we are using the global ",(0,o.jsx)(n.code,{children:"TNS_ADMIN"})," environment variable to point to the combined ",(0,o.jsx)(n.code,{children:"tnsnames.ora"})," file:"]}),"\n"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:"databases:\n db2:\n username: ****\n password: ****\n url: db2_high\n queryTimeout: 5\n maxOpenConns: 10\n maxIdleConns: 10\n db1:\n username: ****\n password: ****\n url: db1_high\n queryTimeout: 5\n maxOpenConns: 10\n maxIdleConns: 10\n"})}),"\n",(0,o.jsx)(n.p,{children:"Then, run the exporter with the config file:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-shell",children:"./oracledb_exporter --config.file=my-config-file.yaml\n"})})]})}function h(e={}){const{wrapper:n}={...(0,l.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>s});var a=t(6540);const o={},l=a.createContext(o);function r(e){const n=a.useContext(l);return a.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),a.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/docs/assets/js/f7d2b7bf.0e65ba99.js b/docs/assets/js/f7d2b7bf.ef718eaa.js similarity index 99% rename from docs/assets/js/f7d2b7bf.0e65ba99.js rename to docs/assets/js/f7d2b7bf.ef718eaa.js index 5c7c2f75..249313f3 100644 --- a/docs/assets/js/f7d2b7bf.0e65ba99.js +++ b/docs/assets/js/f7d2b7bf.ef718eaa.js @@ -1 +1 @@ -"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[5173],{8453:(e,t,r)=>{r.d(t,{R:()=>l,x:()=>a});var n=r(6540);const s={},i=n.createContext(s);function l(e){const t=n.useContext(i);return n.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),n.createElement(i.Provider,{value:t},e.children)}},9012:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>m,frontMatter:()=>l,metadata:()=>n,toc:()=>o});const n=JSON.parse('{"id":"configuration/custom-metrics","title":"Custom Metrics","description":"The exporter allows definition of arbitrary custom metrics in one or more TOML or YAML files.","source":"@site/versioned_docs/version-2.0.3/configuration/custom-metrics.md","sourceDirName":"configuration","slug":"/configuration/custom-metrics","permalink":"/oracle-db-appdev-monitoring/docs/configuration/custom-metrics","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/versioned_docs/version-2.0.3/configuration/custom-metrics.md","tags":[],"version":"2.0.3","sidebarPosition":2,"frontMatter":{"title":"Custom Metrics","sidebar_position":2},"sidebar":"tutorialSidebar","previous":{"title":"Exporter Config File","permalink":"/oracle-db-appdev-monitoring/docs/configuration/config-file"},"next":{"title":"Multiple Databases","permalink":"/oracle-db-appdev-monitoring/docs/configuration/multiple-databases"}}');var s=r(4848),i=r(8453);const l={title:"Custom Metrics",sidebar_position:2},a="Custom Metrics",c={},o=[{value:"Metric Schema",id:"metric-schema",level:3},{value:"Example Metric Definition",id:"example-metric-definition",level:3},{value:"Customize metrics in a container image",id:"customize-metrics-in-a-container-image",level:3}];function d(e){const t={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h3:"h3",header:"header",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"custom-metrics",children:"Custom Metrics"})}),"\n",(0,s.jsx)(t.p,{children:"The exporter allows definition of arbitrary custom metrics in one or more TOML or YAML files."}),"\n",(0,s.jsxs)(t.p,{children:["To specify custom metrics files\nexporter, use the ",(0,s.jsx)(t.code,{children:"metrics"})," configuration in the ",(0,s.jsx)(t.a,{href:"/oracle-db-appdev-monitoring/docs/configuration/config-file",children:"config file"}),":"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-yaml",children:"metrics:\n ## How often to scrape metrics. If not provided, metrics will be scraped on request.\n # scrapeInterval: 15s\n ## Path to default metrics file.\n default: default-metrics.toml\n ## Paths to any custom metrics files (TOML or YAML)\n custom:\n - custom-metrics-example/custom-metrics.toml\n"})}),"\n",(0,s.jsxs)(t.p,{children:["You may also use ",(0,s.jsx)(t.code,{children:"--custom.metrics"})," flag followed by a comma separated list of TOML or YAML files, or export ",(0,s.jsx)(t.code,{children:"CUSTOM_METRICS"})," variable environment (",(0,s.jsx)(t.code,{children:"export CUSTOM_METRICS=my-custom-metrics.toml,my-other-custom-metrics.toml"}),")"]}),"\n",(0,s.jsx)(t.h3,{id:"metric-schema",children:"Metric Schema"}),"\n",(0,s.jsxs)(t.p,{children:["Metrics files must contain a series of ",(0,s.jsx)(t.code,{children:"[[metric]]"})," definitions, in TOML, or the equivalent definition in a YAML file. Each metric definition must follow the exporter's metric schema:"]}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Field Name"}),(0,s.jsx)(t.th,{children:"Description"}),(0,s.jsx)(t.th,{children:"Type"}),(0,s.jsx)(t.th,{children:"Required"}),(0,s.jsx)(t.th,{children:"Default"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"context"}),(0,s.jsx)(t.td,{children:"Metric context, used to build metric FQN"}),(0,s.jsx)(t.td,{children:"String"}),(0,s.jsx)(t.td,{children:"Yes"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"labels"}),(0,s.jsx)(t.td,{children:"Metric labels, which must match column names in the query. Any column that is not a label will be parsed as a metric"}),(0,s.jsx)(t.td,{children:"Array of Strings"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"metricsdesc"}),(0,s.jsx)(t.td,{children:"Mapping between field(s) in the request and comment(s)"}),(0,s.jsx)(t.td,{children:"Dictionary of Strings"}),(0,s.jsx)(t.td,{children:"Yes"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"metricstype"}),(0,s.jsxs)(t.td,{children:["Mapping between field(s) in the request and ",(0,s.jsx)(t.a,{href:"https://prometheus.io/docs/concepts/metric_types/",children:"Prometheus metric types"})]}),(0,s.jsx)(t.td,{children:"Dictionary of Strings"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"metricsbuckets"}),(0,s.jsxs)(t.td,{children:["Split ",(0,s.jsx)(t.a,{href:"https://prometheus.io/docs/concepts/metric_types/#histogram",children:"histogram"})," metric types into buckets based on value (",(0,s.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/custom-metrics-example/metric-histogram-example.toml",children:"example"}),")"]}),(0,s.jsx)(t.td,{children:"Dictionary of String dictionaries"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"fieldtoappend"}),(0,s.jsx)(t.td,{children:"Field from the request to append to the metric FQN"}),(0,s.jsx)(t.td,{children:"String"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"request"}),(0,s.jsx)(t.td,{children:"Oracle database query to run for metrics scraping"}),(0,s.jsx)(t.td,{children:"String"}),(0,s.jsx)(t.td,{children:"Yes"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"ignorezeroresult"}),(0,s.jsx)(t.td,{children:"Whether or not an error will be printed if the request does not return any results"}),(0,s.jsx)(t.td,{children:"Boolean"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{children:"false"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"querytimeout"}),(0,s.jsx)(t.td,{children:"Oracle Database query timeout duration, e.g., 300ms, 0.5h"}),(0,s.jsx)(t.td,{children:"String duration"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{children:"Value of query.timeout in seconds"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"scrapeinterval"}),(0,s.jsx)(t.td,{children:"Custom metric scrape interval, used if scrape.interval is provided, otherwise metrics are always scraped on request."}),(0,s.jsx)(t.td,{children:"String duration"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"databases"}),(0,s.jsx)(t.td,{children:"Optional array of databases to scrape from. If not specified, the metric is scraped from all databases."}),(0,s.jsx)(t.td,{children:"Array of Strings"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{})]})]})]}),"\n",(0,s.jsx)(t.h3,{id:"example-metric-definition",children:"Example Metric Definition"}),"\n",(0,s.jsx)(t.p,{children:"Here's a simple example of a metric definition:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-toml",children:'[[metric]]\ncontext = "test"\nrequest = "SELECT 1 as value_1, 2 as value_2 FROM DUAL"\nmetricsdesc = { value_1 = "Simple example returning always 1.", value_2 = "Same but returning always 2." }\n'})}),"\n",(0,s.jsxs)(t.blockquote,{children:["\n",(0,s.jsxs)(t.p,{children:["NOTE: Do not add a semicolon (",(0,s.jsx)(t.code,{children:";"}),") at the end of the SQL queries."]}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"This file produce the following entries in the exporter:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-text",children:"# HELP oracledb_test_value_1 Simple example returning always 1.\n# TYPE oracledb_test_value_1 gauge\noracledb_test_value_1 1\n# HELP oracledb_test_value_2 Same but returning always 2.\n# TYPE oracledb_test_value_2 gauge\noracledb_test_value_2 2\n"})}),"\n",(0,s.jsxs)(t.p,{children:["You can also provide labels using ",(0,s.jsx)(t.code,{children:"labels"})," field. Here's an example providing two metrics, with and without labels:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-toml",children:'[[metric]]\ncontext = "context_no_label"\nrequest = "SELECT 1 as value_1, 2 as value_2 FROM DUAL"\nmetricsdesc = { value_1 = "Simple example returning always 1.", value_2 = "Same but returning always 2." }\n\n[[metric]]\ncontext = "context_with_labels"\nlabels = [ "label_1", "label_2" ]\nrequest = "SELECT 1 as value_1, 2 as value_2, \'First label\' as label_1, \'Second label\' as label_2 FROM DUAL"\nmetricsdesc = { value_1 = "Simple example returning always 1.", value_2 = "Same but returning always 2." }\n'})}),"\n",(0,s.jsx)(t.p,{children:"This TOML file produces the following result:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-text",children:'# HELP oracledb_context_no_label_value_1 Simple example returning always 1.\n# TYPE oracledb_context_no_label_value_1 gauge\noracledb_context_no_label_value_1 1\n# HELP oracledb_context_no_label_value_2 Same but returning always 2.\n# TYPE oracledb_context_no_label_value_2 gauge\noracledb_context_no_label_value_2 2\n# HELP oracledb_context_with_labels_value_1 Simple example returning always 1.\n# TYPE oracledb_context_with_labels_value_1 gauge\noracledb_context_with_labels_value_1{label_1="First label",label_2="Second label"} 1\n# HELP oracledb_context_with_labels_value_2 Same but returning always 2.\n# TYPE oracledb_context_with_labels_value_2 gauge\noracledb_context_with_labels_value_2{label_1="First label",label_2="Second label"} 2\n'})}),"\n",(0,s.jsxs)(t.p,{children:["Last, you can set metric type using ",(0,s.jsx)(t.strong,{children:"metricstype"})," field."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-toml",children:'[[metric]]\ncontext = "context_with_labels"\nlabels = [ "label_1", "label_2" ]\nrequest = "SELECT 1 as value_1, 2 as value_2, \'First label\' as label_1, \'Second label\' as label_2 FROM DUAL"\nmetricsdesc = { value_1 = "Simple example returning always 1 as counter.", value_2 = "Same but returning always 2 as gauge." }\n# Can be counter or gauge (default)\nmetricstype = { value_1 = "counter" }\n'})}),"\n",(0,s.jsx)(t.p,{children:"This TOML file will produce the following result:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-text",children:"# HELP oracledb_test_value_1 Simple test example returning always 1 as counter.\n# TYPE oracledb_test_value_1 counter\noracledb_test_value_1 1\n# HELP oracledb_test_value_2 Same test but returning always 2 as gauge.\n# TYPE oracledb_test_value_2 gauge\noracledb_test_value_2 2\n"})}),"\n",(0,s.jsxs)(t.p,{children:["You can find ",(0,s.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/custom-metrics-example/custom-metrics.toml",children:"working examples"})," of custom metrics for slow queries, big queries and top 100 tables.\nAn example of ",(0,s.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/custom-metrics-example/txeventq-metrics.toml",children:"custom metrics for Transacational Event Queues"})," is also provided."]}),"\n",(0,s.jsx)(t.h3,{id:"customize-metrics-in-a-container-image",children:"Customize metrics in a container image"}),"\n",(0,s.jsxs)(t.p,{children:["If you run the exporter as a container image and want to include your custom metrics in the image itself, you can use the following example ",(0,s.jsx)(t.code,{children:"Dockerfile"})," to create a new image:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-Dockerfile",children:'FROM container-registry.oracle.com/database/observability-exporter:2.0.2\nCOPY custom-metrics.toml /\nENTRYPOINT ["/oracledb_exporter", "--custom.metrics", "/custom-metrics.toml"]\n'})})]})}function m(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}}}]); \ No newline at end of file +"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[5173],{8453:(e,t,r)=>{r.d(t,{R:()=>l,x:()=>a});var n=r(6540);const s={},i=n.createContext(s);function l(e){const t=n.useContext(i);return n.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),n.createElement(i.Provider,{value:t},e.children)}},9012:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>m,frontMatter:()=>l,metadata:()=>n,toc:()=>o});const n=JSON.parse('{"id":"configuration/custom-metrics","title":"Custom Metrics","description":"The exporter allows definition of arbitrary custom metrics in one or more TOML or YAML files.","source":"@site/versioned_docs/version-2.0.3/configuration/custom-metrics.md","sourceDirName":"configuration","slug":"/configuration/custom-metrics","permalink":"/oracle-db-appdev-monitoring/docs/configuration/custom-metrics","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/versioned_docs/version-2.0.3/configuration/custom-metrics.md","tags":[],"version":"2.0.3","sidebarPosition":2,"frontMatter":{"title":"Custom Metrics","sidebar_position":2},"sidebar":"tutorialSidebar","previous":{"title":"Exporter Config File","permalink":"/oracle-db-appdev-monitoring/docs/configuration/config-file"},"next":{"title":"Multiple Databases","permalink":"/oracle-db-appdev-monitoring/docs/configuration/multiple-databases"}}');var s=r(4848),i=r(8453);const l={title:"Custom Metrics",sidebar_position:2},a="Custom Metrics",c={},o=[{value:"Metric Schema",id:"metric-schema",level:3},{value:"Example Metric Definition",id:"example-metric-definition",level:3},{value:"Customize metrics in a container image",id:"customize-metrics-in-a-container-image",level:3}];function d(e){const t={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h3:"h3",header:"header",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"custom-metrics",children:"Custom Metrics"})}),"\n",(0,s.jsx)(t.p,{children:"The exporter allows definition of arbitrary custom metrics in one or more TOML or YAML files."}),"\n",(0,s.jsxs)(t.p,{children:["To specify custom metrics files\nexporter, use the ",(0,s.jsx)(t.code,{children:"metrics"})," configuration in the ",(0,s.jsx)(t.a,{href:"/oracle-db-appdev-monitoring/docs/configuration/config-file",children:"config file"}),":"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-yaml",children:"metrics:\n ## How often to scrape metrics. If not provided, metrics will be scraped on request.\n # scrapeInterval: 15s\n ## Path to default metrics file.\n default: default-metrics.toml\n ## Paths to any custom metrics files (TOML or YAML)\n custom:\n - custom-metrics-example/custom-metrics.toml\n"})}),"\n",(0,s.jsxs)(t.p,{children:["You may also use ",(0,s.jsx)(t.code,{children:"--custom.metrics"})," flag followed by a comma separated list of TOML or YAML files, or export ",(0,s.jsx)(t.code,{children:"CUSTOM_METRICS"})," variable environment (",(0,s.jsx)(t.code,{children:"export CUSTOM_METRICS=my-custom-metrics.toml,my-other-custom-metrics.toml"}),")"]}),"\n",(0,s.jsx)(t.h3,{id:"metric-schema",children:"Metric Schema"}),"\n",(0,s.jsxs)(t.p,{children:["Metrics files must contain a series of ",(0,s.jsx)(t.code,{children:"[[metric]]"})," definitions, in TOML, or the equivalent definition in a YAML file. Each metric definition must follow the exporter's metric schema:"]}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Field Name"}),(0,s.jsx)(t.th,{children:"Description"}),(0,s.jsx)(t.th,{children:"Type"}),(0,s.jsx)(t.th,{children:"Required"}),(0,s.jsx)(t.th,{children:"Default"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"context"}),(0,s.jsx)(t.td,{children:"Metric context, used to build metric FQN"}),(0,s.jsx)(t.td,{children:"String"}),(0,s.jsx)(t.td,{children:"Yes"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"labels"}),(0,s.jsx)(t.td,{children:"Metric labels, which must match column names in the query. Any column that is not a label will be parsed as a metric"}),(0,s.jsx)(t.td,{children:"Array of Strings"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"metricsdesc"}),(0,s.jsx)(t.td,{children:"Mapping between field(s) in the request and comment(s)"}),(0,s.jsx)(t.td,{children:"Dictionary of Strings"}),(0,s.jsx)(t.td,{children:"Yes"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"metricstype"}),(0,s.jsxs)(t.td,{children:["Mapping between field(s) in the request and ",(0,s.jsx)(t.a,{href:"https://prometheus.io/docs/concepts/metric_types/",children:"Prometheus metric types"})]}),(0,s.jsx)(t.td,{children:"Dictionary of Strings"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"metricsbuckets"}),(0,s.jsxs)(t.td,{children:["Split ",(0,s.jsx)(t.a,{href:"https://prometheus.io/docs/concepts/metric_types/#histogram",children:"histogram"})," metric types into buckets based on value (",(0,s.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/custom-metrics-example/metric-histogram-example.toml",children:"example"}),")"]}),(0,s.jsx)(t.td,{children:"Dictionary of String dictionaries"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"fieldtoappend"}),(0,s.jsx)(t.td,{children:"Field from the request to append to the metric FQN"}),(0,s.jsx)(t.td,{children:"String"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"request"}),(0,s.jsx)(t.td,{children:"Oracle database query to run for metrics scraping"}),(0,s.jsx)(t.td,{children:"String"}),(0,s.jsx)(t.td,{children:"Yes"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"ignorezeroresult"}),(0,s.jsx)(t.td,{children:"Whether or not an error will be printed if the request does not return any results"}),(0,s.jsx)(t.td,{children:"Boolean"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{children:"false"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"querytimeout"}),(0,s.jsx)(t.td,{children:"Oracle Database query timeout duration, e.g., 300ms, 0.5h"}),(0,s.jsx)(t.td,{children:"String duration"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{children:"Value of query.timeout in seconds"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"scrapeinterval"}),(0,s.jsx)(t.td,{children:"Custom metric scrape interval, used if scrape.interval is provided, otherwise metrics are always scraped on request."}),(0,s.jsx)(t.td,{children:"String duration"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"databases"}),(0,s.jsx)(t.td,{children:"Optional array of databases to scrape from. If not specified, the metric is scraped from all databases."}),(0,s.jsx)(t.td,{children:"Array of Strings"}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{})]})]})]}),"\n",(0,s.jsx)(t.h3,{id:"example-metric-definition",children:"Example Metric Definition"}),"\n",(0,s.jsx)(t.p,{children:"Here's a simple example of a metric definition:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-toml",children:'[[metric]]\ncontext = "test"\nrequest = "SELECT 1 as value_1, 2 as value_2 FROM DUAL"\nmetricsdesc = { value_1 = "Simple example returning always 1.", value_2 = "Same but returning always 2." }\n'})}),"\n",(0,s.jsxs)(t.blockquote,{children:["\n",(0,s.jsxs)(t.p,{children:["NOTE: Do not add a semicolon (",(0,s.jsx)(t.code,{children:";"}),") at the end of the SQL queries."]}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"This file produce the following entries in the exporter:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-text",children:"# HELP oracledb_test_value_1 Simple example returning always 1.\n# TYPE oracledb_test_value_1 gauge\noracledb_test_value_1 1\n# HELP oracledb_test_value_2 Same but returning always 2.\n# TYPE oracledb_test_value_2 gauge\noracledb_test_value_2 2\n"})}),"\n",(0,s.jsxs)(t.p,{children:["You can also provide labels using ",(0,s.jsx)(t.code,{children:"labels"})," field. Here's an example providing two metrics, with and without labels:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-toml",children:'[[metric]]\ncontext = "context_no_label"\nrequest = "SELECT 1 as value_1, 2 as value_2 FROM DUAL"\nmetricsdesc = { value_1 = "Simple example returning always 1.", value_2 = "Same but returning always 2." }\n\n[[metric]]\ncontext = "context_with_labels"\nlabels = [ "label_1", "label_2" ]\nrequest = "SELECT 1 as value_1, 2 as value_2, \'First label\' as label_1, \'Second label\' as label_2 FROM DUAL"\nmetricsdesc = { value_1 = "Simple example returning always 1.", value_2 = "Same but returning always 2." }\n'})}),"\n",(0,s.jsx)(t.p,{children:"This TOML file produces the following result:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-text",children:'# HELP oracledb_context_no_label_value_1 Simple example returning always 1.\n# TYPE oracledb_context_no_label_value_1 gauge\noracledb_context_no_label_value_1 1\n# HELP oracledb_context_no_label_value_2 Same but returning always 2.\n# TYPE oracledb_context_no_label_value_2 gauge\noracledb_context_no_label_value_2 2\n# HELP oracledb_context_with_labels_value_1 Simple example returning always 1.\n# TYPE oracledb_context_with_labels_value_1 gauge\noracledb_context_with_labels_value_1{label_1="First label",label_2="Second label"} 1\n# HELP oracledb_context_with_labels_value_2 Same but returning always 2.\n# TYPE oracledb_context_with_labels_value_2 gauge\noracledb_context_with_labels_value_2{label_1="First label",label_2="Second label"} 2\n'})}),"\n",(0,s.jsxs)(t.p,{children:["Last, you can set metric type using ",(0,s.jsx)(t.strong,{children:"metricstype"})," field."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-toml",children:'[[metric]]\ncontext = "context_with_labels"\nlabels = [ "label_1", "label_2" ]\nrequest = "SELECT 1 as value_1, 2 as value_2, \'First label\' as label_1, \'Second label\' as label_2 FROM DUAL"\nmetricsdesc = { value_1 = "Simple example returning always 1 as counter.", value_2 = "Same but returning always 2 as gauge." }\n# Can be counter or gauge (default)\nmetricstype = { value_1 = "counter" }\n'})}),"\n",(0,s.jsx)(t.p,{children:"This TOML file will produce the following result:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-text",children:"# HELP oracledb_test_value_1 Simple test example returning always 1 as counter.\n# TYPE oracledb_test_value_1 counter\noracledb_test_value_1 1\n# HELP oracledb_test_value_2 Same test but returning always 2 as gauge.\n# TYPE oracledb_test_value_2 gauge\noracledb_test_value_2 2\n"})}),"\n",(0,s.jsxs)(t.p,{children:["You can find ",(0,s.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/custom-metrics-example/custom-metrics.toml",children:"working examples"})," of custom metrics for slow queries, big queries and top 100 tables.\nAn example of ",(0,s.jsx)(t.a,{href:"https://github.com/oracle/oracle-db-appdev-monitoring/blob/main/custom-metrics-example/txeventq-metrics.toml",children:"custom metrics for Transacational Event Queues"})," is also provided."]}),"\n",(0,s.jsx)(t.h3,{id:"customize-metrics-in-a-container-image",children:"Customize metrics in a container image"}),"\n",(0,s.jsxs)(t.p,{children:["If you run the exporter as a container image and want to include your custom metrics in the image itself, you can use the following example ",(0,s.jsx)(t.code,{children:"Dockerfile"})," to create a new image:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-Dockerfile",children:'FROM container-registry.oracle.com/database/observability-exporter:2.0.3\nCOPY custom-metrics.toml /\nENTRYPOINT ["/oracledb_exporter", "--custom.metrics", "/custom-metrics.toml"]\n'})})]})}function m(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}}}]); \ No newline at end of file diff --git a/docs/assets/js/runtime~main.cf06ab3a.js b/docs/assets/js/runtime~main.3ea07ab5.js similarity index 55% rename from docs/assets/js/runtime~main.cf06ab3a.js rename to docs/assets/js/runtime~main.3ea07ab5.js index 0ba61a44..195dcf39 100644 --- a/docs/assets/js/runtime~main.cf06ab3a.js +++ b/docs/assets/js/runtime~main.3ea07ab5.js @@ -1 +1 @@ -(()=>{"use strict";var e,a,c,t,r,f={},d={};function b(e){var a=d[e];if(void 0!==a)return a.exports;var c=d[e]={id:e,loaded:!1,exports:{}};return f[e].call(c.exports,c,c.exports,b),c.loaded=!0,c.exports}b.m=f,b.c=d,e=[],b.O=(a,c,t,r)=>{if(!c){var f=1/0;for(i=0;i=r)&&Object.keys(b.O).every(e=>b.O[e](c[o]))?c.splice(o--,1):(d=!1,r0&&e[i-1][2]>r;i--)e[i]=e[i-1];e[i]=[c,t,r]},b.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return b.d(a,{a:a}),a},c=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,b.t=function(e,t){if(1&t&&(e=this(e)),8&t)return e;if("object"==typeof e&&e){if(4&t&&e.__esModule)return e;if(16&t&&"function"==typeof e.then)return e}var r=Object.create(null);b.r(r);var f={};a=a||[null,c({}),c([]),c(c)];for(var d=2&t&&e;("object"==typeof d||"function"==typeof d)&&!~a.indexOf(d);d=c(d))Object.getOwnPropertyNames(d).forEach(a=>f[a]=()=>e[a]);return f.default=()=>e,b.d(r,f),r},b.d=(e,a)=>{for(var c in a)b.o(a,c)&&!b.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:a[c]})},b.f={},b.e=e=>Promise.all(Object.keys(b.f).reduce((a,c)=>(b.f[c](e,a),a),[])),b.u=e=>"assets/js/"+({154:"0170a66b",170:"ab01181e",405:"384c9e20",529:"3c57bc2c",1152:"a7901124",1235:"a7456010",1604:"36b77772",1636:"fcc612c9",1919:"d72bb23b",1969:"488c0ad4",2173:"af966633",2199:"dac61621",2207:"468714db",2900:"f6de67f9",3798:"21b27731",3976:"0e384e19",4134:"393be207",4323:"8be1f15d",4353:"c4e87715",4580:"d94a41cc",4583:"1df93b7f",4705:"867ce809",5071:"1e10f605",5082:"5240f2c1",5173:"f7d2b7bf",5524:"7569d55b",5742:"aba21aa0",5808:"f36aa3f3",6061:"1f391b9e",6233:"6f6f2b68",6235:"cf0dfdd1",6424:"6a577544",6596:"2d404bd3",6898:"a989571e",6948:"3740dcc7",6969:"14eb3368",7098:"a7bd4aaa",7213:"9419d97c",7359:"a7f4dc0a",7504:"2a1428c8",7791:"01070055",8089:"e0c86ee0",8401:"17896441",8539:"49d0ab44",8747:"2c91c66b",8918:"85a0f18d",8952:"5e8a6b04",9048:"a94703ab",9100:"c539bf3f",9249:"6ad7f408",9434:"b8d4edc5",9647:"5e95c892",9666:"61f1b472",9926:"6e6103cc"}[e]||e)+"."+{154:"a482c5a3",170:"bd6e5167",405:"830f0bbb",529:"e119104c",1152:"1486562b",1235:"8bd40a5b",1604:"a0a96e13",1636:"2600ed97",1668:"57de6221",1919:"80f5a95a",1969:"c4e24d7b",2173:"d7133a46",2199:"9472896f",2207:"5f17f508",2237:"5e84b40a",2900:"85db75b5",3798:"f20c3f00",3976:"df53043b",4134:"6daba6a3",4323:"b28ab2e6",4353:"b14dd93f",4580:"cf627fef",4583:"3265e8f4",4705:"3f108176",5071:"85d7d328",5082:"7779f2d4",5173:"0e65ba99",5524:"5f9fbe1f",5742:"6827c32a",5808:"da1bf05b",6061:"934f2783",6233:"8ad1a530",6235:"1f08fe6e",6424:"bcbc70ea",6596:"073e06e4",6898:"754a5e4f",6948:"a3ac8f6e",6969:"a004a01c",7098:"8e47733e",7213:"9d1606f1",7359:"fab1aab9",7504:"aeb7d0d6",7791:"d16dd02e",8089:"0cf62a46",8401:"123f7693",8539:"d41e7e86",8747:"a471022d",8918:"3710d60b",8952:"2d605a88",9048:"0527b935",9100:"1cf406ef",9249:"79deb557",9434:"8eabd942",9647:"0766153a",9666:"623412d3",9926:"817fcf37"}[e]+".js",b.miniCssF=e=>{},b.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),b.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),t={},r="site:",b.l=(e,a,c,f)=>{if(t[e])t[e].push(a);else{var d,o;if(void 0!==c)for(var n=document.getElementsByTagName("script"),i=0;i{d.onerror=d.onload=null,clearTimeout(s);var r=t[e];if(delete t[e],d.parentNode&&d.parentNode.removeChild(d),r&&r.forEach(e=>e(c)),a)return a(c)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:d}),12e4);d.onerror=l.bind(null,d.onerror),d.onload=l.bind(null,d.onload),o&&document.head.appendChild(d)}},b.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},b.p="/oracle-db-appdev-monitoring/",b.gca=function(e){return e={17896441:"8401","0170a66b":"154",ab01181e:"170","384c9e20":"405","3c57bc2c":"529",a7901124:"1152",a7456010:"1235","36b77772":"1604",fcc612c9:"1636",d72bb23b:"1919","488c0ad4":"1969",af966633:"2173",dac61621:"2199","468714db":"2207",f6de67f9:"2900","21b27731":"3798","0e384e19":"3976","393be207":"4134","8be1f15d":"4323",c4e87715:"4353",d94a41cc:"4580","1df93b7f":"4583","867ce809":"4705","1e10f605":"5071","5240f2c1":"5082",f7d2b7bf:"5173","7569d55b":"5524",aba21aa0:"5742",f36aa3f3:"5808","1f391b9e":"6061","6f6f2b68":"6233",cf0dfdd1:"6235","6a577544":"6424","2d404bd3":"6596",a989571e:"6898","3740dcc7":"6948","14eb3368":"6969",a7bd4aaa:"7098","9419d97c":"7213",a7f4dc0a:"7359","2a1428c8":"7504","01070055":"7791",e0c86ee0:"8089","49d0ab44":"8539","2c91c66b":"8747","85a0f18d":"8918","5e8a6b04":"8952",a94703ab:"9048",c539bf3f:"9100","6ad7f408":"9249",b8d4edc5:"9434","5e95c892":"9647","61f1b472":"9666","6e6103cc":"9926"}[e]||e,b.p+b.u(e)},(()=>{var e={5354:0,1869:0};b.f.j=(a,c)=>{var t=b.o(e,a)?e[a]:void 0;if(0!==t)if(t)c.push(t[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var r=new Promise((c,r)=>t=e[a]=[c,r]);c.push(t[2]=r);var f=b.p+b.u(a),d=new Error;b.l(f,c=>{if(b.o(e,a)&&(0!==(t=e[a])&&(e[a]=void 0),t)){var r=c&&("load"===c.type?"missing":c.type),f=c&&c.target&&c.target.src;d.message="Loading chunk "+a+" failed.\n("+r+": "+f+")",d.name="ChunkLoadError",d.type=r,d.request=f,t[1](d)}},"chunk-"+a,a)}},b.O.j=a=>0===e[a];var a=(a,c)=>{var t,r,f=c[0],d=c[1],o=c[2],n=0;if(f.some(a=>0!==e[a])){for(t in d)b.o(d,t)&&(b.m[t]=d[t]);if(o)var i=o(b)}for(a&&a(c);n{"use strict";var e,a,t,c,r,f={},d={};function b(e){var a=d[e];if(void 0!==a)return a.exports;var t=d[e]={id:e,loaded:!1,exports:{}};return f[e].call(t.exports,t,t.exports,b),t.loaded=!0,t.exports}b.m=f,b.c=d,e=[],b.O=(a,t,c,r)=>{if(!t){var f=1/0;for(i=0;i=r)&&Object.keys(b.O).every(e=>b.O[e](t[o]))?t.splice(o--,1):(d=!1,r0&&e[i-1][2]>r;i--)e[i]=e[i-1];e[i]=[t,c,r]},b.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return b.d(a,{a:a}),a},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,b.t=function(e,c){if(1&c&&(e=this(e)),8&c)return e;if("object"==typeof e&&e){if(4&c&&e.__esModule)return e;if(16&c&&"function"==typeof e.then)return e}var r=Object.create(null);b.r(r);var f={};a=a||[null,t({}),t([]),t(t)];for(var d=2&c&&e;("object"==typeof d||"function"==typeof d)&&!~a.indexOf(d);d=t(d))Object.getOwnPropertyNames(d).forEach(a=>f[a]=()=>e[a]);return f.default=()=>e,b.d(r,f),r},b.d=(e,a)=>{for(var t in a)b.o(a,t)&&!b.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:a[t]})},b.f={},b.e=e=>Promise.all(Object.keys(b.f).reduce((a,t)=>(b.f[t](e,a),a),[])),b.u=e=>"assets/js/"+({154:"0170a66b",170:"ab01181e",405:"384c9e20",529:"3c57bc2c",1152:"a7901124",1235:"a7456010",1604:"36b77772",1636:"fcc612c9",1919:"d72bb23b",1969:"488c0ad4",2173:"af966633",2199:"dac61621",2207:"468714db",2900:"f6de67f9",3798:"21b27731",3976:"0e384e19",4134:"393be207",4323:"8be1f15d",4353:"c4e87715",4580:"d94a41cc",4583:"1df93b7f",4705:"867ce809",5071:"1e10f605",5082:"5240f2c1",5173:"f7d2b7bf",5524:"7569d55b",5742:"aba21aa0",5808:"f36aa3f3",6061:"1f391b9e",6233:"6f6f2b68",6235:"cf0dfdd1",6424:"6a577544",6596:"2d404bd3",6898:"a989571e",6948:"3740dcc7",6969:"14eb3368",7098:"a7bd4aaa",7213:"9419d97c",7359:"a7f4dc0a",7504:"2a1428c8",7791:"01070055",8089:"e0c86ee0",8401:"17896441",8539:"49d0ab44",8747:"2c91c66b",8918:"85a0f18d",8952:"5e8a6b04",9048:"a94703ab",9100:"c539bf3f",9249:"6ad7f408",9434:"b8d4edc5",9647:"5e95c892",9666:"61f1b472",9926:"6e6103cc"}[e]||e)+"."+{154:"a482c5a3",170:"83f49c36",405:"830f0bbb",529:"e15a56a8",1152:"1486562b",1235:"8bd40a5b",1604:"a0a96e13",1636:"2600ed97",1668:"57de6221",1919:"80f5a95a",1969:"c4e24d7b",2173:"7080bdcb",2199:"9472896f",2207:"5f17f508",2237:"5e84b40a",2900:"f329491a",3798:"f20c3f00",3976:"df53043b",4134:"6daba6a3",4323:"b28ab2e6",4353:"b14dd93f",4580:"4186b72c",4583:"3265e8f4",4705:"3f108176",5071:"bb940bfb",5082:"7779f2d4",5173:"ef718eaa",5524:"5f9fbe1f",5742:"6827c32a",5808:"da1bf05b",6061:"934f2783",6233:"8ad1a530",6235:"1f08fe6e",6424:"bcbc70ea",6596:"073e06e4",6898:"754a5e4f",6948:"a3ac8f6e",6969:"a004a01c",7098:"8e47733e",7213:"9d1606f1",7359:"fab1aab9",7504:"aeb7d0d6",7791:"d16dd02e",8089:"0cf62a46",8401:"123f7693",8539:"622e0e53",8747:"a471022d",8918:"3710d60b",8952:"2d605a88",9048:"0527b935",9100:"1cf406ef",9249:"79deb557",9434:"8eabd942",9647:"0766153a",9666:"623412d3",9926:"817fcf37"}[e]+".js",b.miniCssF=e=>{},b.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),b.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),c={},r="site:",b.l=(e,a,t,f)=>{if(c[e])c[e].push(a);else{var d,o;if(void 0!==t)for(var n=document.getElementsByTagName("script"),i=0;i{d.onerror=d.onload=null,clearTimeout(s);var r=c[e];if(delete c[e],d.parentNode&&d.parentNode.removeChild(d),r&&r.forEach(e=>e(t)),a)return a(t)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:d}),12e4);d.onerror=l.bind(null,d.onerror),d.onload=l.bind(null,d.onload),o&&document.head.appendChild(d)}},b.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},b.p="/oracle-db-appdev-monitoring/",b.gca=function(e){return e={17896441:"8401","0170a66b":"154",ab01181e:"170","384c9e20":"405","3c57bc2c":"529",a7901124:"1152",a7456010:"1235","36b77772":"1604",fcc612c9:"1636",d72bb23b:"1919","488c0ad4":"1969",af966633:"2173",dac61621:"2199","468714db":"2207",f6de67f9:"2900","21b27731":"3798","0e384e19":"3976","393be207":"4134","8be1f15d":"4323",c4e87715:"4353",d94a41cc:"4580","1df93b7f":"4583","867ce809":"4705","1e10f605":"5071","5240f2c1":"5082",f7d2b7bf:"5173","7569d55b":"5524",aba21aa0:"5742",f36aa3f3:"5808","1f391b9e":"6061","6f6f2b68":"6233",cf0dfdd1:"6235","6a577544":"6424","2d404bd3":"6596",a989571e:"6898","3740dcc7":"6948","14eb3368":"6969",a7bd4aaa:"7098","9419d97c":"7213",a7f4dc0a:"7359","2a1428c8":"7504","01070055":"7791",e0c86ee0:"8089","49d0ab44":"8539","2c91c66b":"8747","85a0f18d":"8918","5e8a6b04":"8952",a94703ab:"9048",c539bf3f:"9100","6ad7f408":"9249",b8d4edc5:"9434","5e95c892":"9647","61f1b472":"9666","6e6103cc":"9926"}[e]||e,b.p+b.u(e)},(()=>{var e={5354:0,1869:0};b.f.j=(a,t)=>{var c=b.o(e,a)?e[a]:void 0;if(0!==c)if(c)t.push(c[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var r=new Promise((t,r)=>c=e[a]=[t,r]);t.push(c[2]=r);var f=b.p+b.u(a),d=new Error;b.l(f,t=>{if(b.o(e,a)&&(0!==(c=e[a])&&(e[a]=void 0),c)){var r=t&&("load"===t.type?"missing":t.type),f=t&&t.target&&t.target.src;d.message="Loading chunk "+a+" failed.\n("+r+": "+f+")",d.name="ChunkLoadError",d.type=r,d.request=f,c[1](d)}},"chunk-"+a,a)}},b.O.j=a=>0===e[a];var a=(a,t)=>{var c,r,f=t[0],d=t[1],o=t[2],n=0;if(f.some(a=>0!==e[a])){for(c in d)b.o(d,c)&&(b.m[c]=d[c]);if(o)var i=o(b)}for(a&&a(t);n Development | Oracle Database Metrics Exporter - + diff --git a/docs/docs/advanced/go-runtime/index.html b/docs/docs/advanced/go-runtime/index.html index 9f2305b9..8af0758d 100644 --- a/docs/docs/advanced/go-runtime/index.html +++ b/docs/docs/advanced/go-runtime/index.html @@ -4,7 +4,7 @@ Configuring the Go Runtime | Oracle Database Metrics Exporter - + diff --git a/docs/docs/advanced/txeventq/index.html b/docs/docs/advanced/txeventq/index.html index f218c6be..b597a658 100644 --- a/docs/docs/advanced/txeventq/index.html +++ b/docs/docs/advanced/txeventq/index.html @@ -4,7 +4,7 @@ Monitoring TxEventQ | Oracle Database Metrics Exporter - + diff --git a/docs/docs/category/advanced/index.html b/docs/docs/category/advanced/index.html index 29c26862..458360cb 100644 --- a/docs/docs/category/advanced/index.html +++ b/docs/docs/category/advanced/index.html @@ -4,7 +4,7 @@ Advanced | Oracle Database Metrics Exporter - + diff --git a/docs/docs/category/configuration/index.html b/docs/docs/category/configuration/index.html index 9ff57335..58ba9d00 100644 --- a/docs/docs/category/configuration/index.html +++ b/docs/docs/category/configuration/index.html @@ -4,7 +4,7 @@ Configuration | Oracle Database Metrics Exporter - + diff --git a/docs/docs/category/getting-started/index.html b/docs/docs/category/getting-started/index.html index 8fbfffac..cdbe2bd4 100644 --- a/docs/docs/category/getting-started/index.html +++ b/docs/docs/category/getting-started/index.html @@ -4,7 +4,7 @@ Getting Started | Oracle Database Metrics Exporter - + diff --git a/docs/docs/category/releases/index.html b/docs/docs/category/releases/index.html index 8ccce317..312d3b7c 100644 --- a/docs/docs/category/releases/index.html +++ b/docs/docs/category/releases/index.html @@ -4,7 +4,7 @@ Releases | Oracle Database Metrics Exporter - + diff --git a/docs/docs/configuration/alert-logs/index.html b/docs/docs/configuration/alert-logs/index.html index 6f3cb01b..20c2ad66 100644 --- a/docs/docs/configuration/alert-logs/index.html +++ b/docs/docs/configuration/alert-logs/index.html @@ -4,7 +4,7 @@ Alert Logs | Oracle Database Metrics Exporter - + diff --git a/docs/docs/configuration/azure-vault/index.html b/docs/docs/configuration/azure-vault/index.html index f8c63096..7d9be0e8 100644 --- a/docs/docs/configuration/azure-vault/index.html +++ b/docs/docs/configuration/azure-vault/index.html @@ -4,7 +4,7 @@ Azure Vault | Oracle Database Metrics Exporter - + diff --git a/docs/docs/configuration/config-file/index.html b/docs/docs/configuration/config-file/index.html index c9c1e976..62df085f 100644 --- a/docs/docs/configuration/config-file/index.html +++ b/docs/docs/configuration/config-file/index.html @@ -4,7 +4,7 @@ Exporter Config File | Oracle Database Metrics Exporter - + @@ -17,6 +17,6 @@
    # Example Oracle Database Metrics Exporter Configuration file.
    # Environment variables of the form ${VAR_NAME} will be expanded.
    # If you include a config value that contains a '$' character, escape that '$' with another '$', e.g.,
    # "$test$pwd" => "$$test$$pwd"
    # Otherwise, the value will be expanded as an environment variable.

    # Example Oracle Database Metrics Exporter Configuration file.
    # Environment variables of the form ${VAR_NAME} will be expanded.

    databases:
    ## Path on which metrics will be served
    # metricsPath: /metrics
    ## Database connection information for the "default" database.
    default:
    ## Database username
    username: ${DB_USERNAME}
    ## Database password
    password: ${DB_PASSWORD}
    ## Database password file
    ## If specified, will load the database password from a file.
    # passwordFile: ${DB_PASSWORD_FILE}
    ## Database connection url
    url: localhost:1521/freepdb1

    ## Metrics query timeout for this database, in seconds
    queryTimeout: 5

    ## Rely on Oracle Database External Authentication by network or OS
    # externalAuth: false
    ## Database role
    # role: SYSDBA
    ## Path to Oracle Database wallet, if using wallet
    # tnsAdmin: /path/to/database/wallet

    ### Connection settings:
    ### Either the go-sql or Oracle Database connection pool may be used.
    ### To use the Oracle Database connection pool over the go-sql connection pool,
    ### set maxIdleConns to zero and configure the pool* settings.

    ### Connection pooling settings for the go-sql connection pool
    ## Max open connections for this database using go-sql connection pool
    maxOpenConns: 10
    ## Max idle connections for this database using go-sql connection pool
    maxIdleConns: 10

    ### Connection pooling settings for the Oracle Database connection pool
    ## Oracle Database connection pool increment.
    # poolIncrement: 1
    ## Oracle Database Connection pool maximum size
    # poolMaxConnections: 15
    ## Oracle Database Connection pool minimum size
    # poolMinConnections: 15

    ## Arbitrary labels to add to each metric scraped from this database
    # labels:
    # label_name1: label_value1
    # label_name2: label_value2

    metrics:
    ## How often to scrape metrics. If not provided, metrics will be scraped on request.
    # scrapeInterval: 15s
    ## Path to default metrics file.
    default: default-metrics.toml
    ## Paths to any custom metrics files
    custom:
    - custom-metrics-example/custom-metrics.toml

    log:
    # Path of log file
    destination: /opt/alert.log
    # Interval of log updates
    interval: 15s
    ## Set disable to 1 to disable logging
    # disable: 0

    # Optionally configure prometheus webserver
    #web:
    # listenAddresses: [':9161']
    # systemdSocket: true|false
    # configFile: /path/to/webconfigfile

    Config file in a container image

    To add your custom config file to a container image, you can layer the base exporter image and include that config:

    -
    FROM container-registry.oracle.com/database/observability-exporter:2.0.2
    COPY my-exporter-config.yaml /
    ENTRYPOINT ["/oracledb_exporter", "--config.file", "/my-exporter-config.yaml"]
    +
    FROM container-registry.oracle.com/database/observability-exporter:2.0.3
    COPY my-exporter-config.yaml /
    ENTRYPOINT ["/oracledb_exporter", "--config.file", "/my-exporter-config.yaml"]
    \ No newline at end of file diff --git a/docs/docs/configuration/custom-metrics/index.html b/docs/docs/configuration/custom-metrics/index.html index 162c2a15..7e9399ad 100644 --- a/docs/docs/configuration/custom-metrics/index.html +++ b/docs/docs/configuration/custom-metrics/index.html @@ -4,7 +4,7 @@ Custom Metrics | Oracle Database Metrics Exporter - + @@ -40,6 +40,6 @@

    Ex An example of custom metrics for Transacational Event Queues is also provided.

    Customize metrics in a container image

    If you run the exporter as a container image and want to include your custom metrics in the image itself, you can use the following example Dockerfile to create a new image:

    -
    FROM container-registry.oracle.com/database/observability-exporter:2.0.2
    COPY custom-metrics.toml /
    ENTRYPOINT ["/oracledb_exporter", "--custom.metrics", "/custom-metrics.toml"]
    +
    FROM container-registry.oracle.com/database/observability-exporter:2.0.3
    COPY custom-metrics.toml /
    ENTRYPOINT ["/oracledb_exporter", "--custom.metrics", "/custom-metrics.toml"]
    \ No newline at end of file diff --git a/docs/docs/configuration/multiple-databases/index.html b/docs/docs/configuration/multiple-databases/index.html index a40b1dc9..b4dac567 100644 --- a/docs/docs/configuration/multiple-databases/index.html +++ b/docs/docs/configuration/multiple-databases/index.html @@ -4,7 +4,7 @@ Multiple Databases | Oracle Database Metrics Exporter - + diff --git a/docs/docs/configuration/oci-vault/index.html b/docs/docs/configuration/oci-vault/index.html index 2646b090..9ca4ca70 100644 --- a/docs/docs/configuration/oci-vault/index.html +++ b/docs/docs/configuration/oci-vault/index.html @@ -4,7 +4,7 @@ OCI Vault | Oracle Database Metrics Exporter - + diff --git a/docs/docs/configuration/oracle-wallet/index.html b/docs/docs/configuration/oracle-wallet/index.html index be5d0d31..9ef4d6a8 100644 --- a/docs/docs/configuration/oracle-wallet/index.html +++ b/docs/docs/configuration/oracle-wallet/index.html @@ -4,7 +4,7 @@ Oracle Wallet (mTLS) | Oracle Database Metrics Exporter - + @@ -21,7 +21,7 @@
    databases:
    mydb:
    username: admin
    password: <REPLACE ME>
    # TNS Name from wallet tnsnames.ora file, e.g., mydb_high
    url: <TNS Name>

    If you are running the exporter as a container, you can mount the wallet as a volume. For example, mounting the ./wallet directory to the /wallet location:

    -
    docker run -it --rm \
    -e DB_USERNAME=pdbadmin \
    -e DB_PASSWORD=Welcome12345 \
    -e DB_CONNECT_STRING=devdb_tp \
    -v ./wallet:/wallet \
    -p 9161:9161 \
    container-registry.oracle.com/database/observability-exporter:2.0.2
    +
    docker run -it --rm \
    -e DB_USERNAME=pdbadmin \
    -e DB_PASSWORD=Welcome12345 \
    -e DB_CONNECT_STRING=devdb_tp \
    -v ./wallet:/wallet \
    -p 9161:9161 \
    container-registry.oracle.com/database/observability-exporter:2.0.3

    mTLS for multiple databases with Oracle Wallet

    The Oracle Database Metrics exporter uses ODPI-C, which can only initalize the TNS aliases from a tnsnames.ora file once per process. To work around this, the exporter can be configured to read from a "combined" tnsnames.ora file containing all TNS aliases for connections in a multi-database configuration.

      diff --git a/docs/docs/getting-started/basics/index.html b/docs/docs/getting-started/basics/index.html index 10dfa6ef..38a13e2d 100644 --- a/docs/docs/getting-started/basics/index.html +++ b/docs/docs/getting-started/basics/index.html @@ -4,7 +4,7 @@ Installation | Oracle Database Metrics Exporter - + @@ -40,7 +40,7 @@

      Simple con
    1. DB_ROLE (Optional) can be set to SYSDBA, SYSOPER, SYSBACKUP, SYSDG, SYSKM, SYSRAC or SYSASM if you want to connect with one of those roles, however Oracle recommends that you connect with the lowest possible privileges and roles necessary for the exporter to run.
    2. To run the exporter in a container and expose the port, use a command like this, with the appropriate values for the environment variables:

      -
      docker run -it --rm \
      -e DB_USERNAME=pdbadmin \
      -e DB_PASSWORD=Welcome12345 \
      -e DB_CONNECT_STRING=free23ai:1521/freepdb \
      -p 9161:9161 \
      container-registry.oracle.com/database/observability-exporter:2.0.2
      +
      docker run -it --rm \
      -e DB_USERNAME=pdbadmin \
      -e DB_PASSWORD=Welcome12345 \
      -e DB_CONNECT_STRING=free23ai:1521/freepdb \
      -p 9161:9161 \
      container-registry.oracle.com/database/observability-exporter:2.0.3

      Standalone Binary

      Pre-compiled versions for Linux, ARM and Darwin 64-bit can be found under releases.

      In order to run, you'll need the Oracle Instant Client Basic for your operating system. Only the basic version is required for the exporter.

      diff --git a/docs/docs/getting-started/default-metrics/index.html b/docs/docs/getting-started/default-metrics/index.html index d132efb0..7363f501 100644 --- a/docs/docs/getting-started/default-metrics/index.html +++ b/docs/docs/getting-started/default-metrics/index.html @@ -4,7 +4,7 @@ Default Metrics | Oracle Database Metrics Exporter - + diff --git a/docs/docs/getting-started/grafana-dashboards/index.html b/docs/docs/getting-started/grafana-dashboards/index.html index 127cc995..aa9738e2 100644 --- a/docs/docs/getting-started/grafana-dashboards/index.html +++ b/docs/docs/getting-started/grafana-dashboards/index.html @@ -4,7 +4,7 @@ Grafana Dashboards | Oracle Database Metrics Exporter - + diff --git a/docs/docs/getting-started/kubernetes/index.html b/docs/docs/getting-started/kubernetes/index.html index 5a60d77e..267bb49e 100644 --- a/docs/docs/getting-started/kubernetes/index.html +++ b/docs/docs/getting-started/kubernetes/index.html @@ -4,7 +4,7 @@ Kubernetes | Oracle Database Metrics Exporter - + diff --git a/docs/docs/intro/index.html b/docs/docs/intro/index.html index 0d353518..691bd67d 100644 --- a/docs/docs/intro/index.html +++ b/docs/docs/intro/index.html @@ -4,7 +4,7 @@ OpenTelemetry Metrics for Oracle Database | Oracle Database Metrics Exporter - + diff --git a/docs/docs/next/advanced/development/index.html b/docs/docs/next/advanced/development/index.html index 0c0cfba4..24ff0db6 100644 --- a/docs/docs/next/advanced/development/index.html +++ b/docs/docs/next/advanced/development/index.html @@ -4,7 +4,7 @@ Development | Oracle Database Metrics Exporter - + diff --git a/docs/docs/next/advanced/go-runtime/index.html b/docs/docs/next/advanced/go-runtime/index.html index 174b0929..6b8eb311 100644 --- a/docs/docs/next/advanced/go-runtime/index.html +++ b/docs/docs/next/advanced/go-runtime/index.html @@ -4,7 +4,7 @@ Configuring the Go Runtime | Oracle Database Metrics Exporter - + diff --git a/docs/docs/next/advanced/txeventq/index.html b/docs/docs/next/advanced/txeventq/index.html index 59045ca9..979c84c2 100644 --- a/docs/docs/next/advanced/txeventq/index.html +++ b/docs/docs/next/advanced/txeventq/index.html @@ -4,7 +4,7 @@ Monitoring TxEventQ | Oracle Database Metrics Exporter - + diff --git a/docs/docs/next/category/advanced/index.html b/docs/docs/next/category/advanced/index.html index e53fe9a5..9fe77ee3 100644 --- a/docs/docs/next/category/advanced/index.html +++ b/docs/docs/next/category/advanced/index.html @@ -4,7 +4,7 @@ Advanced | Oracle Database Metrics Exporter - + diff --git a/docs/docs/next/category/configuration/index.html b/docs/docs/next/category/configuration/index.html index d33af8cc..8fb1c5c3 100644 --- a/docs/docs/next/category/configuration/index.html +++ b/docs/docs/next/category/configuration/index.html @@ -4,7 +4,7 @@ Configuration | Oracle Database Metrics Exporter - + diff --git a/docs/docs/next/category/getting-started/index.html b/docs/docs/next/category/getting-started/index.html index 55e9c382..400e2032 100644 --- a/docs/docs/next/category/getting-started/index.html +++ b/docs/docs/next/category/getting-started/index.html @@ -4,7 +4,7 @@ Getting Started | Oracle Database Metrics Exporter - + diff --git a/docs/docs/next/category/releases/index.html b/docs/docs/next/category/releases/index.html index e9318398..44a476ff 100644 --- a/docs/docs/next/category/releases/index.html +++ b/docs/docs/next/category/releases/index.html @@ -4,7 +4,7 @@ Releases | Oracle Database Metrics Exporter - + diff --git a/docs/docs/next/configuration/alert-logs/index.html b/docs/docs/next/configuration/alert-logs/index.html index 4ea2af0c..4f074398 100644 --- a/docs/docs/next/configuration/alert-logs/index.html +++ b/docs/docs/next/configuration/alert-logs/index.html @@ -4,7 +4,7 @@ Alert Logs | Oracle Database Metrics Exporter - + diff --git a/docs/docs/next/configuration/azure-vault/index.html b/docs/docs/next/configuration/azure-vault/index.html index 1aca1298..7f97c61d 100644 --- a/docs/docs/next/configuration/azure-vault/index.html +++ b/docs/docs/next/configuration/azure-vault/index.html @@ -4,7 +4,7 @@ Azure Vault | Oracle Database Metrics Exporter - + diff --git a/docs/docs/next/configuration/config-file/index.html b/docs/docs/next/configuration/config-file/index.html index 324ef296..e2ebbfd1 100644 --- a/docs/docs/next/configuration/config-file/index.html +++ b/docs/docs/next/configuration/config-file/index.html @@ -4,7 +4,7 @@ Exporter Config File | Oracle Database Metrics Exporter - + @@ -17,6 +17,6 @@
      # Example Oracle Database Metrics Exporter Configuration file.
      # Environment variables of the form ${VAR_NAME} will be expanded.
      # If you include a config value that contains a '$' character, escape that '$' with another '$', e.g.,
      # "$test$pwd" => "$$test$$pwd"
      # Otherwise, the value will be expanded as an environment variable.

      # Example Oracle Database Metrics Exporter Configuration file.
      # Environment variables of the form ${VAR_NAME} will be expanded.

      databases:
      ## Path on which metrics will be served
      # metricsPath: /metrics
      ## Database connection information for the "default" database.
      default:
      ## Database username
      username: ${DB_USERNAME}
      ## Database password
      password: ${DB_PASSWORD}
      ## Database password file
      ## If specified, will load the database password from a file.
      # passwordFile: ${DB_PASSWORD_FILE}
      ## Database connection url
      url: localhost:1521/freepdb1

      ## Metrics query timeout for this database, in seconds
      queryTimeout: 5

      ## Rely on Oracle Database External Authentication by network or OS
      # externalAuth: false
      ## Database role
      # role: SYSDBA
      ## Path to Oracle Database wallet, if using wallet
      # tnsAdmin: /path/to/database/wallet

      ### Connection settings:
      ### Either the go-sql or Oracle Database connection pool may be used.
      ### To use the Oracle Database connection pool over the go-sql connection pool,
      ### set maxIdleConns to zero and configure the pool* settings.

      ### Connection pooling settings for the go-sql connection pool
      ## Max open connections for this database using go-sql connection pool
      maxOpenConns: 10
      ## Max idle connections for this database using go-sql connection pool
      maxIdleConns: 10

      ### Connection pooling settings for the Oracle Database connection pool
      ## Oracle Database connection pool increment.
      # poolIncrement: 1
      ## Oracle Database Connection pool maximum size
      # poolMaxConnections: 15
      ## Oracle Database Connection pool minimum size
      # poolMinConnections: 15

      ## Arbitrary labels to add to each metric scraped from this database
      # labels:
      # label_name1: label_value1
      # label_name2: label_value2

      metrics:
      ## How often to scrape metrics. If not provided, metrics will be scraped on request.
      # scrapeInterval: 15s
      ## Path to default metrics file.
      default: default-metrics.toml
      ## Paths to any custom metrics files
      custom:
      - custom-metrics-example/custom-metrics.toml

      log:
      # Path of log file
      destination: /opt/alert.log
      # Interval of log updates
      interval: 15s
      ## Set disable to 1 to disable logging
      # disable: 0

      # Optionally configure prometheus webserver
      #web:
      # listenAddresses: [':9161']
      # systemdSocket: true|false
      # configFile: /path/to/webconfigfile

      Config file in a container image

      To add your custom config file to a container image, you can layer the base exporter image and include that config:

      -
      FROM container-registry.oracle.com/database/observability-exporter:2.0.2
      COPY my-exporter-config.yaml /
      ENTRYPOINT ["/oracledb_exporter", "--config.file", "/my-exporter-config.yaml"]
      +
      FROM container-registry.oracle.com/database/observability-exporter:2.0.3
      COPY my-exporter-config.yaml /
      ENTRYPOINT ["/oracledb_exporter", "--config.file", "/my-exporter-config.yaml"]
      \ No newline at end of file diff --git a/docs/docs/next/configuration/custom-metrics/index.html b/docs/docs/next/configuration/custom-metrics/index.html index 4e22f03a..2a720f45 100644 --- a/docs/docs/next/configuration/custom-metrics/index.html +++ b/docs/docs/next/configuration/custom-metrics/index.html @@ -4,7 +4,7 @@ Custom Metrics | Oracle Database Metrics Exporter - + @@ -40,6 +40,6 @@

      Ex An example of custom metrics for Transacational Event Queues is also provided.

      Customize metrics in a container image

      If you run the exporter as a container image and want to include your custom metrics in the image itself, you can use the following example Dockerfile to create a new image:

      -
      FROM container-registry.oracle.com/database/observability-exporter:2.0.2
      COPY custom-metrics.toml /
      ENTRYPOINT ["/oracledb_exporter", "--custom.metrics", "/custom-metrics.toml"]
      +
      FROM container-registry.oracle.com/database/observability-exporter:2.0.3
      COPY custom-metrics.toml /
      ENTRYPOINT ["/oracledb_exporter", "--custom.metrics", "/custom-metrics.toml"]
      \ No newline at end of file diff --git a/docs/docs/next/configuration/multiple-databases/index.html b/docs/docs/next/configuration/multiple-databases/index.html index ad24aaf2..0bd2bd03 100644 --- a/docs/docs/next/configuration/multiple-databases/index.html +++ b/docs/docs/next/configuration/multiple-databases/index.html @@ -4,7 +4,7 @@ Multiple Databases | Oracle Database Metrics Exporter - + diff --git a/docs/docs/next/configuration/oci-vault/index.html b/docs/docs/next/configuration/oci-vault/index.html index 8ea5c87f..f0a381f1 100644 --- a/docs/docs/next/configuration/oci-vault/index.html +++ b/docs/docs/next/configuration/oci-vault/index.html @@ -4,7 +4,7 @@ OCI Vault | Oracle Database Metrics Exporter - + diff --git a/docs/docs/next/configuration/oracle-wallet/index.html b/docs/docs/next/configuration/oracle-wallet/index.html index 4065f3cc..d090a65f 100644 --- a/docs/docs/next/configuration/oracle-wallet/index.html +++ b/docs/docs/next/configuration/oracle-wallet/index.html @@ -4,7 +4,7 @@ Oracle Wallet (mTLS) | Oracle Database Metrics Exporter - + @@ -21,7 +21,7 @@
    databases:
    mydb:
    username: admin
    password: <REPLACE ME>
    # TNS Name from wallet tnsnames.ora file, e.g., mydb_high
    url: <TNS Name>

    If you are running the exporter as a container, you can mount the wallet as a volume. For example, mounting the ./wallet directory to the /wallet location:

    -
    docker run -it --rm \
    -e DB_USERNAME=pdbadmin \
    -e DB_PASSWORD=Welcome12345 \
    -e DB_CONNECT_STRING=devdb_tp \
    -v ./wallet:/wallet \
    -p 9161:9161 \
    container-registry.oracle.com/database/observability-exporter:2.0.2
    +
    docker run -it --rm \
    -e DB_USERNAME=pdbadmin \
    -e DB_PASSWORD=Welcome12345 \
    -e DB_CONNECT_STRING=devdb_tp \
    -v ./wallet:/wallet \
    -p 9161:9161 \
    container-registry.oracle.com/database/observability-exporter:2.0.3

    mTLS for multiple databases with Oracle Wallet

    The Oracle Database Metrics exporter uses ODPI-C, which can only initalize the TNS aliases from a tnsnames.ora file once per process. To work around this, the exporter can be configured to read from a "combined" tnsnames.ora file containing all TNS aliases for connections in a multi-database configuration.

      diff --git a/docs/docs/next/getting-started/basics/index.html b/docs/docs/next/getting-started/basics/index.html index cfc7f9c8..5052b71e 100644 --- a/docs/docs/next/getting-started/basics/index.html +++ b/docs/docs/next/getting-started/basics/index.html @@ -4,7 +4,7 @@ Installation | Oracle Database Metrics Exporter - + @@ -40,7 +40,7 @@

      Simple con
    1. DB_ROLE (Optional) can be set to SYSDBA, SYSOPER, SYSBACKUP, SYSDG, SYSKM, SYSRAC or SYSASM if you want to connect with one of those roles, however Oracle recommends that you connect with the lowest possible privileges and roles necessary for the exporter to run.
    2. To run the exporter in a container and expose the port, use a command like this, with the appropriate values for the environment variables:

      -
      docker run -it --rm \
      -e DB_USERNAME=pdbadmin \
      -e DB_PASSWORD=Welcome12345 \
      -e DB_CONNECT_STRING=free23ai:1521/freepdb \
      -p 9161:9161 \
      container-registry.oracle.com/database/observability-exporter:2.0.2
      +
      docker run -it --rm \
      -e DB_USERNAME=pdbadmin \
      -e DB_PASSWORD=Welcome12345 \
      -e DB_CONNECT_STRING=free23ai:1521/freepdb \
      -p 9161:9161 \
      container-registry.oracle.com/database/observability-exporter:2.0.3

      Standalone Binary

      Pre-compiled versions for Linux, ARM and Darwin 64-bit can be found under releases.

      In order to run, you'll need the Oracle Instant Client Basic for your operating system. Only the basic version is required for the exporter.

      diff --git a/docs/docs/next/getting-started/default-metrics/index.html b/docs/docs/next/getting-started/default-metrics/index.html index 6a46c031..4e89fc33 100644 --- a/docs/docs/next/getting-started/default-metrics/index.html +++ b/docs/docs/next/getting-started/default-metrics/index.html @@ -4,7 +4,7 @@ Default Metrics | Oracle Database Metrics Exporter - + diff --git a/docs/docs/next/getting-started/grafana-dashboards/index.html b/docs/docs/next/getting-started/grafana-dashboards/index.html index f8cdd379..603d885f 100644 --- a/docs/docs/next/getting-started/grafana-dashboards/index.html +++ b/docs/docs/next/getting-started/grafana-dashboards/index.html @@ -4,7 +4,7 @@ Grafana Dashboards | Oracle Database Metrics Exporter - + diff --git a/docs/docs/next/getting-started/kubernetes/index.html b/docs/docs/next/getting-started/kubernetes/index.html index a32534b3..ff909a48 100644 --- a/docs/docs/next/getting-started/kubernetes/index.html +++ b/docs/docs/next/getting-started/kubernetes/index.html @@ -4,7 +4,7 @@ Kubernetes | Oracle Database Metrics Exporter - + diff --git a/docs/docs/next/intro/index.html b/docs/docs/next/intro/index.html index 394977de..3839845d 100644 --- a/docs/docs/next/intro/index.html +++ b/docs/docs/next/intro/index.html @@ -4,7 +4,7 @@ OpenTelemetry Metrics for Oracle Database | Oracle Database Metrics Exporter - + diff --git a/docs/docs/next/releases/changelog/index.html b/docs/docs/next/releases/changelog/index.html index f9bcdadf..0deda391 100644 --- a/docs/docs/next/releases/changelog/index.html +++ b/docs/docs/next/releases/changelog/index.html @@ -4,7 +4,7 @@ Changelog | Oracle Database Metrics Exporter - + diff --git a/docs/docs/next/releases/roadmap/index.html b/docs/docs/next/releases/roadmap/index.html index da618979..1d18ad0a 100644 --- a/docs/docs/next/releases/roadmap/index.html +++ b/docs/docs/next/releases/roadmap/index.html @@ -4,7 +4,7 @@ Roadmap | Oracle Database Metrics Exporter - + diff --git a/docs/docs/releases/changelog/index.html b/docs/docs/releases/changelog/index.html index 0739ee71..225a9811 100644 --- a/docs/docs/releases/changelog/index.html +++ b/docs/docs/releases/changelog/index.html @@ -4,7 +4,7 @@ Changelog | Oracle Database Metrics Exporter - + diff --git a/docs/docs/releases/roadmap/index.html b/docs/docs/releases/roadmap/index.html index bf98e6cc..8c540282 100644 --- a/docs/docs/releases/roadmap/index.html +++ b/docs/docs/releases/roadmap/index.html @@ -4,7 +4,7 @@ Roadmap | Oracle Database Metrics Exporter - + diff --git a/docs/index.html b/docs/index.html index bd00a5ca..9dd29d02 100644 --- a/docs/index.html +++ b/docs/index.html @@ -4,7 +4,7 @@ Oracle Database Metrics Exporter - + diff --git a/docs/markdown-page/index.html b/docs/markdown-page/index.html index 2e198a91..15d5ebde 100644 --- a/docs/markdown-page/index.html +++ b/docs/markdown-page/index.html @@ -4,7 +4,7 @@ Markdown page example | Oracle Database Metrics Exporter - +