openc3-cosmos-tool-docs 6.8.1 → 6.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +5 -5
- data/Rakefile +1 -1
- data/tools/staticdocs/404.html +2 -2
- data/tools/staticdocs/assets/css/styles.946be27d.css +1 -0
- data/tools/staticdocs/assets/js/019369f3.64763f3d.js +1 -0
- data/tools/staticdocs/assets/js/058ffc22.4be515f5.js +1 -0
- data/tools/staticdocs/assets/js/0686a885.3d58085e.js +1 -0
- data/tools/staticdocs/assets/js/078dbab0.f2cbcc66.js +1 -0
- data/tools/staticdocs/assets/js/{0f5d161c.0727eb1b.js → 0f5d161c.978b9fee.js} +1 -1
- data/tools/staticdocs/assets/js/0ff569c9.27128023.js +1 -0
- data/tools/staticdocs/assets/js/10209fc9.669ef887.js +1 -0
- data/tools/staticdocs/assets/js/103cc3be.1a538098.js +1 -0
- data/tools/staticdocs/assets/js/{13196248.9e1ebaa5.js → 13196248.f932d5bd.js} +1 -1
- data/tools/staticdocs/assets/js/{13c1b4e4.6446ccbc.js → 13c1b4e4.9735bb59.js} +1 -1
- data/tools/staticdocs/assets/js/1c0a0c05.427f2699.js +1 -0
- data/tools/staticdocs/assets/js/{1e02e6a3.a89f2446.js → 1e02e6a3.da7b7250.js} +1 -1
- data/tools/staticdocs/assets/js/{2047b354.0955283c.js → 2047b354.c86efa5f.js} +1 -1
- data/tools/staticdocs/assets/js/22b3ac48.1932e5a5.js +1 -0
- data/tools/staticdocs/assets/js/26b8abb2.858cb22d.js +1 -0
- data/tools/staticdocs/assets/js/2bb7bf90.78594fbb.js +1 -0
- data/tools/staticdocs/assets/js/2c15ad40.1b2d4730.js +1 -0
- data/tools/staticdocs/assets/js/3326.2db66e1b.js +4 -0
- data/tools/staticdocs/assets/js/3402.80344ef5.js +1 -0
- data/tools/staticdocs/assets/js/35398c5c.8a74eece.js +1 -0
- data/tools/staticdocs/assets/js/{3dd7ef3b.f43cd057.js → 3dd7ef3b.ceb26a04.js} +1 -1
- data/tools/staticdocs/assets/js/40365d27.f6769d57.js +1 -0
- data/tools/staticdocs/assets/js/4071.821f3b2b.js +1 -0
- data/tools/staticdocs/assets/js/{411898ad.28293824.js → 411898ad.8ed3452c.js} +1 -1
- data/tools/staticdocs/assets/js/42170351.7ff72adc.js +1 -0
- data/tools/staticdocs/assets/js/43652efd.ec6bb7e9.js +1 -0
- data/tools/staticdocs/assets/js/5072.9a0a2752.js +1 -0
- data/tools/staticdocs/assets/js/{53ca7c5b.9468b8ed.js → 53ca7c5b.3ae5bb0f.js} +1 -1
- data/tools/staticdocs/assets/js/54d0d530.2f7aa091.js +1 -0
- data/tools/staticdocs/assets/js/5525.dd1645b0.js +101 -0
- data/tools/staticdocs/assets/js/59ed27a4.695b2435.js +1 -0
- data/tools/staticdocs/assets/js/5b233ba7.b0d1a8b1.js +1 -0
- data/tools/staticdocs/assets/js/5bc719f6.c731b998.js +1 -0
- data/tools/staticdocs/assets/js/5c6ce5ec.211ced47.js +1 -0
- data/tools/staticdocs/assets/js/5e3ed378.821e5ed4.js +1 -0
- data/tools/staticdocs/assets/js/5fe211ef.9d68057c.js +1 -0
- data/tools/staticdocs/assets/js/6246.60dfff30.js +1 -0
- data/tools/staticdocs/assets/js/6831b732.dc5bae56.js +1 -0
- data/tools/staticdocs/assets/js/696b4199.d197d085.js +1 -0
- data/tools/staticdocs/assets/js/6b210247.d400f853.js +1 -0
- data/tools/staticdocs/assets/js/6b65133b.3550bdf0.js +1 -0
- data/tools/staticdocs/assets/js/6f92e431.0bc45585.js +1 -0
- data/tools/staticdocs/assets/js/72c6d8a8.7e6fb4fd.js +1 -0
- data/tools/staticdocs/assets/js/75e64983.338d2338.js +1 -0
- data/tools/staticdocs/assets/js/867640d5.555ba5ca.js +1 -0
- data/tools/staticdocs/assets/js/89e76475.a301b5e3.js +1 -0
- data/tools/staticdocs/assets/js/8b939c74.0ebaed2a.js +1 -0
- data/tools/staticdocs/assets/js/8f7843ee.e33ef7db.js +1 -0
- data/tools/staticdocs/assets/js/9424f0b3.4b6f004e.js +1 -0
- data/tools/staticdocs/assets/js/{8434.a3e5442b.js → 9623.44668503.js} +1 -1
- data/tools/staticdocs/assets/js/{964eb012.4253acd5.js → 964eb012.c7f626c5.js} +1 -1
- data/tools/staticdocs/assets/js/97535711.a6342866.js +1 -0
- data/tools/staticdocs/assets/js/99581c43.2bd0766d.js +1 -0
- data/tools/staticdocs/assets/js/{9d6e81d0.b9f15524.js → 9d6e81d0.879c9e9e.js} +1 -1
- data/tools/staticdocs/assets/js/9fb6059a.ce4de002.js +1 -0
- data/tools/staticdocs/assets/js/a677c089.758701f0.js +1 -0
- data/tools/staticdocs/assets/js/a9987364.e29e8a93.js +1 -0
- data/tools/staticdocs/assets/js/a9b2dc27.b7e66efd.js +1 -0
- data/tools/staticdocs/assets/js/aa6b6c1b.6bcbf484.js +1 -0
- data/tools/staticdocs/assets/js/b062d239.2cebb42b.js +1 -0
- data/tools/staticdocs/assets/js/b38a6d74.bb58fcec.js +1 -0
- data/tools/staticdocs/assets/js/b4596165.9e7f0be7.js +1 -0
- data/tools/staticdocs/assets/js/b6d70f94.5e40680e.js +1 -0
- data/tools/staticdocs/assets/js/{b9f60ba6.2c4823f0.js → b9f60ba6.63638354.js} +1 -1
- data/tools/staticdocs/assets/js/bd0034eb.9f460215.js +1 -0
- data/tools/staticdocs/assets/js/c24eae19.2ef0c706.js +1 -0
- data/tools/staticdocs/assets/js/cb8c3f08.28d962a4.js +1 -0
- data/tools/staticdocs/assets/js/cd879be4.782edb7f.js +1 -0
- data/tools/staticdocs/assets/js/cf1c01b8.7d5b6d66.js +1 -0
- data/tools/staticdocs/assets/js/d1b923aa.c012712f.js +1 -0
- data/tools/staticdocs/assets/js/d1bfc316.13a64896.js +1 -0
- data/tools/staticdocs/assets/js/d24bf9b6.bb93853a.js +1 -0
- data/tools/staticdocs/assets/js/d57a4b5d.e9712631.js +1 -0
- data/tools/staticdocs/assets/js/d59d8a14.79f4b29e.js +1 -0
- data/tools/staticdocs/assets/js/d5d77c37.6b4ab31e.js +1 -0
- data/tools/staticdocs/assets/js/d66bf9c0.ca34a583.js +1 -0
- data/tools/staticdocs/assets/js/d8ca4191.599a241b.js +1 -0
- data/tools/staticdocs/assets/js/d9b92eba.44fde84d.js +1 -0
- data/tools/staticdocs/assets/js/db8fa1d0.39b9fdb6.js +1 -0
- data/tools/staticdocs/assets/js/dbe31111.4e811739.js +1 -0
- data/tools/staticdocs/assets/js/{dc5f7beb.15b70d4b.js → dc5f7beb.c703e464.js} +1 -1
- data/tools/staticdocs/assets/js/e501b0d1.c00adfa4.js +1 -0
- data/tools/staticdocs/assets/js/f15615f1.8591b830.js +1 -0
- data/tools/staticdocs/assets/js/f75a5f33.f16b6dd5.js +1 -0
- data/tools/staticdocs/assets/js/{fd886806.f7bfd80c.js → fd886806.fb8a587e.js} +1 -1
- data/tools/staticdocs/assets/js/main.331b7e10.js +38 -0
- data/tools/staticdocs/assets/js/runtime~main.53a0c91e.js +1 -0
- data/tools/staticdocs/docs/configuration/accessors.html +46 -46
- data/tools/staticdocs/docs/configuration/command.html +97 -97
- data/tools/staticdocs/docs/configuration/conversions.html +53 -53
- data/tools/staticdocs/docs/configuration/format.html +22 -22
- data/tools/staticdocs/docs/configuration/interfaces.html +55 -55
- data/tools/staticdocs/docs/configuration/limits-response.html +10 -10
- data/tools/staticdocs/docs/configuration/plugins.html +127 -127
- data/tools/staticdocs/docs/configuration/processors.html +17 -17
- data/tools/staticdocs/docs/configuration/protocols.html +66 -66
- data/tools/staticdocs/docs/configuration/ssl-tls.html +15 -15
- data/tools/staticdocs/docs/configuration/table.html +53 -53
- data/tools/staticdocs/docs/configuration/target.html +21 -21
- data/tools/staticdocs/docs/configuration/telemetry-screens.html +289 -289
- data/tools/staticdocs/docs/configuration/telemetry.html +86 -86
- data/tools/staticdocs/docs/configuration.html +2 -2
- data/tools/staticdocs/docs/development/curl.html +14 -14
- data/tools/staticdocs/docs/development/developing.html +27 -27
- data/tools/staticdocs/docs/development/json-api.html +15 -15
- data/tools/staticdocs/docs/development/log-structure.html +13 -13
- data/tools/staticdocs/docs/development/roadmap.html +4 -4
- data/tools/staticdocs/docs/development/streaming-api.html +24 -24
- data/tools/staticdocs/docs/development/testing.html +20 -20
- data/tools/staticdocs/docs/development.html +2 -2
- data/tools/staticdocs/docs/getting-started/cli.html +39 -39
- data/tools/staticdocs/docs/getting-started/generators.html +25 -25
- data/tools/staticdocs/docs/getting-started/gettingstarted.html +19 -19
- data/tools/staticdocs/docs/getting-started/installation.html +23 -21
- data/tools/staticdocs/docs/getting-started/key-concepts.html +20 -20
- data/tools/staticdocs/docs/getting-started/podman.html +23 -23
- data/tools/staticdocs/docs/getting-started/requirements.html +19 -19
- data/tools/staticdocs/docs/getting-started/upgrading.html +47 -47
- data/tools/staticdocs/docs/getting-started.html +2 -2
- data/tools/staticdocs/docs/guides/bridges.html +19 -12
- data/tools/staticdocs/docs/guides/cfs.html +32 -32
- data/tools/staticdocs/docs/guides/custom-widgets.html +36 -36
- data/tools/staticdocs/docs/guides/dynamic-packets.html +8 -8
- data/tools/staticdocs/docs/guides/exposing-microservices.html +11 -11
- data/tools/staticdocs/docs/guides/little-endian-bitfields.html +4 -4
- data/tools/staticdocs/docs/guides/local-mode.html +13 -13
- data/tools/staticdocs/docs/guides/logging.html +9 -9
- data/tools/staticdocs/docs/guides/monitoring.html +18 -18
- data/tools/staticdocs/docs/guides/performance.html +10 -10
- data/tools/staticdocs/docs/guides/raspberrypi.html +4 -4
- data/tools/staticdocs/docs/guides/reference-architectures.html +6 -6
- data/tools/staticdocs/docs/guides/script-writing.html +80 -80
- data/tools/staticdocs/docs/guides/scripting-api.html +707 -635
- data/tools/staticdocs/docs/guides/troubleshooting.html +8 -7
- data/tools/staticdocs/docs/guides.html +2 -2
- data/tools/staticdocs/docs/meta/contributing.html +12 -12
- data/tools/staticdocs/docs/meta/licenses.html +9 -9
- data/tools/staticdocs/docs/meta/philosophy.html +3 -3
- data/tools/staticdocs/docs/meta/xtce.html +12 -12
- data/tools/staticdocs/docs/meta.html +2 -2
- data/tools/staticdocs/docs/privacy.html +17 -17
- data/tools/staticdocs/docs/tools/admin.html +24 -24
- data/tools/staticdocs/docs/tools/autonomic.html +19 -19
- data/tools/staticdocs/docs/tools/bucket-explorer.html +9 -9
- data/tools/staticdocs/docs/tools/calendar.html +18 -18
- data/tools/staticdocs/docs/tools/cmd-sender.html +14 -14
- data/tools/staticdocs/docs/tools/cmd-tlm-server.html +20 -20
- data/tools/staticdocs/docs/tools/command-history.html +6 -6
- data/tools/staticdocs/docs/tools/command-queue.html +8 -8
- data/tools/staticdocs/docs/tools/data-extractor.html +25 -25
- data/tools/staticdocs/docs/tools/data-viewer.html +11 -11
- data/tools/staticdocs/docs/tools/handbooks.html +4 -4
- data/tools/staticdocs/docs/tools/limits-monitor.html +16 -16
- data/tools/staticdocs/docs/tools/log-explorer.html +9 -9
- data/tools/staticdocs/docs/tools/packet-viewer.html +12 -12
- data/tools/staticdocs/docs/tools/script-runner.html +43 -43
- data/tools/staticdocs/docs/tools/systemhealth.html +21 -21
- data/tools/staticdocs/docs/tools/table-manager.html +11 -11
- data/tools/staticdocs/docs/tools/tlm-grapher.html +22 -22
- data/tools/staticdocs/docs/tools/tlm-viewer.html +16 -16
- data/tools/staticdocs/docs/tools.html +2 -2
- data/tools/staticdocs/docs.html +11 -11
- data/tools/staticdocs/index.html +2 -2
- data/tools/staticdocs/lunr-index-1759527994448.json +1 -0
- data/tools/staticdocs/lunr-index.json +1 -1
- data/tools/staticdocs/markdown-page.html +3 -3
- data/tools/staticdocs/search-doc-1759527994448.json +1 -0
- data/tools/staticdocs/search-doc.json +1 -1
- metadata +92 -92
- data/tools/staticdocs/assets/css/styles.0edf3032.css +0 -1
- data/tools/staticdocs/assets/js/019369f3.5366d64b.js +0 -1
- data/tools/staticdocs/assets/js/058ffc22.31b5fa22.js +0 -1
- data/tools/staticdocs/assets/js/0686a885.eb311155.js +0 -1
- data/tools/staticdocs/assets/js/078dbab0.974abc47.js +0 -1
- data/tools/staticdocs/assets/js/0ff569c9.c8815d72.js +0 -1
- data/tools/staticdocs/assets/js/10209fc9.ae369363.js +0 -1
- data/tools/staticdocs/assets/js/103cc3be.32c30401.js +0 -1
- data/tools/staticdocs/assets/js/1085.d1eba438.js +0 -1
- data/tools/staticdocs/assets/js/1319.d9ec0592.js +0 -101
- data/tools/staticdocs/assets/js/1c0a0c05.a24e9a5c.js +0 -1
- data/tools/staticdocs/assets/js/22b3ac48.81906212.js +0 -1
- data/tools/staticdocs/assets/js/26b8abb2.9d3cbdeb.js +0 -1
- data/tools/staticdocs/assets/js/2bb7bf90.a04c2a3c.js +0 -1
- data/tools/staticdocs/assets/js/2c15ad40.38a25aed.js +0 -1
- data/tools/staticdocs/assets/js/35398c5c.d3ee7838.js +0 -1
- data/tools/staticdocs/assets/js/40365d27.db29df30.js +0 -1
- data/tools/staticdocs/assets/js/42170351.c5a07a3b.js +0 -1
- data/tools/staticdocs/assets/js/43652efd.35825078.js +0 -1
- data/tools/staticdocs/assets/js/5074.653f3924.js +0 -1
- data/tools/staticdocs/assets/js/5410.60ab1dba.js +0 -1
- data/tools/staticdocs/assets/js/54d0d530.dfcfecc5.js +0 -1
- data/tools/staticdocs/assets/js/59ed27a4.8eb3444b.js +0 -1
- data/tools/staticdocs/assets/js/5b233ba7.814a9779.js +0 -1
- data/tools/staticdocs/assets/js/5bc719f6.ea5fa091.js +0 -1
- data/tools/staticdocs/assets/js/5c6ce5ec.dde1bfbc.js +0 -1
- data/tools/staticdocs/assets/js/5e3ed378.6deb22ed.js +0 -1
- data/tools/staticdocs/assets/js/5fe211ef.622c8b76.js +0 -1
- data/tools/staticdocs/assets/js/6242.bdac32c1.js +0 -4
- data/tools/staticdocs/assets/js/6831b732.7cf97282.js +0 -1
- data/tools/staticdocs/assets/js/696b4199.b96d263c.js +0 -1
- data/tools/staticdocs/assets/js/6b210247.75ed74f4.js +0 -1
- data/tools/staticdocs/assets/js/6b65133b.8ceb772d.js +0 -1
- data/tools/staticdocs/assets/js/6f92e431.11fea7a0.js +0 -1
- data/tools/staticdocs/assets/js/72c6d8a8.241ba59b.js +0 -1
- data/tools/staticdocs/assets/js/75e64983.c8cb1f1a.js +0 -1
- data/tools/staticdocs/assets/js/867640d5.a02df5f7.js +0 -1
- data/tools/staticdocs/assets/js/8851.4837d29a.js +0 -1
- data/tools/staticdocs/assets/js/89e76475.cdd88da3.js +0 -1
- data/tools/staticdocs/assets/js/8b939c74.c9ac09c3.js +0 -1
- data/tools/staticdocs/assets/js/8f7843ee.676b5d36.js +0 -1
- data/tools/staticdocs/assets/js/9424f0b3.a3b9746a.js +0 -1
- data/tools/staticdocs/assets/js/97535711.2a29c3e7.js +0 -1
- data/tools/staticdocs/assets/js/99581c43.791cdc39.js +0 -1
- data/tools/staticdocs/assets/js/9fb6059a.5f39bd90.js +0 -1
- data/tools/staticdocs/assets/js/a677c089.2695e35a.js +0 -1
- data/tools/staticdocs/assets/js/a9987364.71b17b00.js +0 -1
- data/tools/staticdocs/assets/js/a9b2dc27.c8eb51b6.js +0 -1
- data/tools/staticdocs/assets/js/aa6b6c1b.2d0fadd1.js +0 -1
- data/tools/staticdocs/assets/js/b062d239.e240f32e.js +0 -1
- data/tools/staticdocs/assets/js/b38a6d74.7363be85.js +0 -1
- data/tools/staticdocs/assets/js/b4596165.2a473696.js +0 -1
- data/tools/staticdocs/assets/js/b6d70f94.dda7b69f.js +0 -1
- data/tools/staticdocs/assets/js/bd0034eb.7282117c.js +0 -1
- data/tools/staticdocs/assets/js/c24eae19.60c8e0c8.js +0 -1
- data/tools/staticdocs/assets/js/cb8c3f08.2466362b.js +0 -1
- data/tools/staticdocs/assets/js/cd879be4.6a299bce.js +0 -1
- data/tools/staticdocs/assets/js/cf1c01b8.1913e9f8.js +0 -1
- data/tools/staticdocs/assets/js/d1b923aa.482b8f7b.js +0 -1
- data/tools/staticdocs/assets/js/d1bfc316.ada87033.js +0 -1
- data/tools/staticdocs/assets/js/d24bf9b6.2b9e8d63.js +0 -1
- data/tools/staticdocs/assets/js/d57a4b5d.bf08c8f5.js +0 -1
- data/tools/staticdocs/assets/js/d59d8a14.479869f6.js +0 -1
- data/tools/staticdocs/assets/js/d5d77c37.199e159b.js +0 -1
- data/tools/staticdocs/assets/js/d66bf9c0.210077a2.js +0 -1
- data/tools/staticdocs/assets/js/d8ca4191.57f74139.js +0 -1
- data/tools/staticdocs/assets/js/d9b92eba.015f5324.js +0 -1
- data/tools/staticdocs/assets/js/db8fa1d0.1c778ff1.js +0 -1
- data/tools/staticdocs/assets/js/dbe31111.37d6f071.js +0 -1
- data/tools/staticdocs/assets/js/e501b0d1.c42aad75.js +0 -1
- data/tools/staticdocs/assets/js/f15615f1.a8a415cb.js +0 -1
- data/tools/staticdocs/assets/js/f75a5f33.4d2501bc.js +0 -1
- data/tools/staticdocs/assets/js/main.994f9f74.js +0 -38
- data/tools/staticdocs/assets/js/runtime~main.44311138.js +0 -1
- data/tools/staticdocs/lunr-index-1757781681330.json +0 -1
- data/tools/staticdocs/search-doc-1757781681330.json +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7904e9a8b91da6861de1867fbed471d0d6bfd76893deb1c09d24fb3ab17021f7
|
4
|
+
data.tar.gz: 1e88ad64713ab21681bfa62cccbc4f89032ff9010fa5177ce64fe52d3aaa7b11
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bc713eaec1ced9ba9a52f5504de3ad50a957e551b0b015fc7ec3441186da10abede7c9b6e69a7794c6a6b7088f73e00ee4985f92b5382773cc89425c70d12a9f
|
7
|
+
data.tar.gz: 0057f24ed0ab615334a3e3f9a9c72c902b83cbb461149ff8737a9d074db7a6ad22b9a1f5fbda1a13e8d657f783dee829bdf4ad5e62fbda8e63a7a19dce49952e
|
data/README.md
CHANGED
@@ -6,13 +6,13 @@ This website is built using [Docusaurus 2](https://docusaurus.io/), a modern sta
|
|
6
6
|
### Installation
|
7
7
|
|
8
8
|
```
|
9
|
-
$
|
9
|
+
$ pnpm install --frozen-lockfile --ignore-scripts
|
10
10
|
```
|
11
11
|
|
12
12
|
### Local Development
|
13
13
|
|
14
14
|
```
|
15
|
-
$
|
15
|
+
$ pnpm start
|
16
16
|
```
|
17
17
|
|
18
18
|
This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server.
|
@@ -20,7 +20,7 @@ This command starts a local development server and opens up a browser window. Mo
|
|
20
20
|
### Build
|
21
21
|
|
22
22
|
```
|
23
|
-
$
|
23
|
+
$ pnpm build
|
24
24
|
```
|
25
25
|
|
26
26
|
This command generates static content into the `build` directory and can be served using any static contents hosting service.
|
@@ -30,13 +30,13 @@ This command generates static content into the `build` directory and can be serv
|
|
30
30
|
Using SSH:
|
31
31
|
|
32
32
|
```
|
33
|
-
$ USE_SSH=true
|
33
|
+
$ USE_SSH=true pnpm deploy
|
34
34
|
```
|
35
35
|
|
36
36
|
Not using SSH:
|
37
37
|
|
38
38
|
```
|
39
|
-
$ GIT_USER=<Your GitHub username>
|
39
|
+
$ GIT_USER=<Your GitHub username> pnpm deploy
|
40
40
|
```
|
41
41
|
|
42
42
|
If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch.
|
data/Rakefile
CHANGED
@@ -37,6 +37,6 @@ task :build => [:require_version] do
|
|
37
37
|
end
|
38
38
|
# Build the widgets in the src directory using sh built into Rake:
|
39
39
|
# https://rubydoc.info/gems/rake/FileUtils#sh-instance_method
|
40
|
-
sh('
|
40
|
+
sh('pnpm', 'run', 'build-plugin')
|
41
41
|
sh('gem', 'build', PLUGIN_NAME)
|
42
42
|
end
|
data/tools/staticdocs/404.html
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
<!doctype html><html lang=en dir=ltr class="plugin-native plugin-id-default" data-has-hydrated=false><meta charset=UTF-8><meta name=generator content="Docusaurus v3.
|
1
|
+
<!doctype html><html lang=en dir=ltr class="plugin-native plugin-id-default" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.9.1"><title data-rh=true>Page Not Found | OpenC3 Docs</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta data-rh=true property=og:url content=https://docs.openc3.com/tools/staticdocs/404.html /><meta data-rh=true property=og:locale content=en /><meta data-rh=true name=docusaurus_locale content=en /><meta data-rh=true name=docusaurus_tag content=default /><meta data-rh=true name=docsearch:language content=en /><meta data-rh=true name=docsearch:docusaurus_tag content=default /><meta data-rh=true property=og:title content="Page Not Found | OpenC3 Docs"/><link data-rh=true rel=icon href=/tools/staticdocs/img/favicon.png /><link data-rh=true rel=canonical href=https://docs.openc3.com/tools/staticdocs/404.html /><link data-rh=true rel=alternate href=https://docs.openc3.com/tools/staticdocs/404.html hreflang=en /><link data-rh=true rel=alternate href=https://docs.openc3.com/tools/staticdocs/404.html hreflang=x-default /><link rel=stylesheet href=/tools/staticdocs/assets/css/styles.946be27d.css /><script src=/tools/staticdocs/assets/js/runtime~main.53a0c91e.js defer></script><script src=/tools/staticdocs/assets/js/main.331b7e10.js defer></script></head><body class=navigation-with-keyboard><svg style="display: none;"><defs>
|
2
2
|
<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
|
3
3
|
</defs></svg>
|
4
|
-
<script>!function(){var t
|
4
|
+
<script>!function(){var t;document.documentElement.setAttribute("data-theme",t||"dark"),document.documentElement.setAttribute("data-theme-choice",t||"dark")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id=__docusaurus><link rel=preload as=image href=/tools/staticdocs/img/logo.svg /><div role=region aria-label="Skip to main content"><a class=skipToContent_TKVD href=#__docusaurus_skipToContent_fallback>Skip to main content</a></div><nav aria-label=Main class="theme-layout-navbar navbar navbar--fixed-top"><div class=navbar__inner><div class="theme-layout-navbar-left navbar__items"><button aria-label="Toggle navigation bar" aria-expanded=false class="navbar__toggle clean-btn" type=button><svg width=30 height=30 viewBox="0 0 30 30" aria-hidden=true><path stroke=currentColor stroke-linecap=round stroke-miterlimit=10 stroke-width=2 d="M4 7h22M4 15h22M4 23h22"/></svg></button><a class=navbar__brand href=/tools/staticdocs/><div class=navbar__logo><img src=/tools/staticdocs/img/logo.svg alt="OpenC3 Logo" class="themedComponent_hQOn themedComponent--light_cpFH"/><img src=/tools/staticdocs/img/logo.svg alt="OpenC3 Logo" class="themedComponent_hQOn themedComponent--dark_whA_"/></div><b class="navbar__title text--truncate">OpenC3 Docs</b></a><a class="navbar__item navbar__link" href=/tools/staticdocs/docs>Documentation</a><a href=https://openc3.com/enterprise/ target=_blank rel="noopener noreferrer" class="navbar__item navbar__link">Enterprise</a></div><div class="theme-layout-navbar-right navbar__items navbar__items--right"><div class=navbarSearchContainer_YWZZ><div class=navbar__search><span aria-label="expand searchbar" role=button class=search-icon tabindex=0></span><input id=search_input_react type=search placeholder=Loading... aria-label=Search class="navbar__search-input search-bar" disabled/></div></div></div></div><div role=presentation class=navbar-sidebar__backdrop></div></nav><div id=__docusaurus_skipToContent_fallback class="theme-layout-main main-wrapper mainWrapper_E2as"><main class="container margin-vert--xl"><div class=row><div class="col col--6 col--offset-3"><h1 class=hero__title>Page Not Found</h1><p>We could not find what you were looking for.<p>Please contact the owner of the site that linked you to the original URL and let them know their link is broken.</div></div></main></div><footer class="theme-layout-footer footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="theme-layout-footer-column col footer__col"><div class=footer__title>Homepage</div><ul class="footer__items clean-list"><li class=footer__item><a href=https://openc3.com target=_blank rel="noopener noreferrer" class=footer__link-item>Home</a></ul></div><div class="theme-layout-footer-column col footer__col"><div class=footer__title>Docs</div><ul class="footer__items clean-list"><li class=footer__item><a class=footer__link-item href=/tools/staticdocs/docs>Documentation</a></ul></div><div class="theme-layout-footer-column col footer__col"><div class=footer__title>Community</div><ul class="footer__items clean-list"><li class=footer__item><a href=https://www.linkedin.com/company/openc3 target=_blank rel="noopener noreferrer" class=footer__link-item>LinkedIn<svg width=13.5 height=13.5 aria-label="(opens in new tab)" class=iconExternalLink_mMqu><use href=#theme-svg-external-link /></svg></a></ul></div><div class="theme-layout-footer-column col footer__col"><div class=footer__title>More</div><ul class="footer__items clean-list"><li class=footer__item><a href=https://github.com/OpenC3/cosmos target=_blank rel="noopener noreferrer" class=footer__link-item>GitHub<svg width=13.5 height=13.5 aria-label="(opens in new tab)" class=iconExternalLink_mMqu><use href=#theme-svg-external-link /></svg></a><li class=footer__item><a class=footer__link-item href=/tools/staticdocs/docs/privacy>Privacy</a></ul></div></div><div class="footer__bottom text--center"><div class=footer__copyright>Copyright © 2025 OpenC3, Inc.</div></div></div></footer></div></body>
|
@@ -0,0 +1 @@
|
|
1
|
+
@layer docusaurus.infima{:root{--ifm-color-scheme:light;--ifm-dark-value:10%;--ifm-darker-value:15%;--ifm-darkest-value:30%;--ifm-light-value:15%;--ifm-lighter-value:30%;--ifm-lightest-value:50%;--ifm-contrast-background-value:90%;--ifm-contrast-foreground-value:70%;--ifm-contrast-background-dark-value:70%;--ifm-contrast-foreground-dark-value:90%;--ifm-color-primary:#3578e5;--ifm-color-secondary:#ebedf0;--ifm-color-success:#00a400;--ifm-color-info:#54c7ec;--ifm-color-warning:#ffba00;--ifm-color-danger:#fa383e;--ifm-color-primary-dark:#306cce;--ifm-color-primary-darker:#2d66c3;--ifm-color-primary-darkest:#2554a0;--ifm-color-primary-light:#538ce9;--ifm-color-primary-lighter:#72a1ed;--ifm-color-primary-lightest:#9abcf2;--ifm-color-primary-contrast-background:#ebf2fc;--ifm-color-primary-contrast-foreground:#102445;--ifm-color-secondary-dark:#d4d5d8;--ifm-color-secondary-darker:#c8c9cc;--ifm-color-secondary-darkest:#a4a6a8;--ifm-color-secondary-light:#eef0f2;--ifm-color-secondary-lighter:#f1f2f5;--ifm-color-secondary-lightest:#f5f6f8;--ifm-color-secondary-contrast-background:#fdfdfe;--ifm-color-secondary-contrast-foreground:#474748;--ifm-color-success-dark:#009400;--ifm-color-success-darker:#008b00;--ifm-color-success-darkest:#007300;--ifm-color-success-light:#26b226;--ifm-color-success-lighter:#4dbf4d;--ifm-color-success-lightest:#80d280;--ifm-color-success-contrast-background:#e6f6e6;--ifm-color-success-contrast-foreground:#003100;--ifm-color-info-dark:#4cb3d4;--ifm-color-info-darker:#47a9c9;--ifm-color-info-darkest:#3b8ba5;--ifm-color-info-light:#6ecfef;--ifm-color-info-lighter:#87d8f2;--ifm-color-info-lightest:#aae3f6;--ifm-color-info-contrast-background:#eef9fd;--ifm-color-info-contrast-foreground:#193c47;--ifm-color-warning-dark:#e6a700;--ifm-color-warning-darker:#d99e00;--ifm-color-warning-darkest:#b38200;--ifm-color-warning-light:#ffc426;--ifm-color-warning-lighter:#ffcf4d;--ifm-color-warning-lightest:#ffdd80;--ifm-color-warning-contrast-background:#fff8e6;--ifm-color-warning-contrast-foreground:#4d3800;--ifm-color-danger-dark:#e13238;--ifm-color-danger-darker:#d53035;--ifm-color-danger-darkest:#af272b;--ifm-color-danger-light:#fb565b;--ifm-color-danger-lighter:#fb7478;--ifm-color-danger-lightest:#fd9c9f;--ifm-color-danger-contrast-background:#ffebec;--ifm-color-danger-contrast-foreground:#4b1113;--ifm-color-white:#fff;--ifm-color-black:#000;--ifm-color-gray-0:var(--ifm-color-white);--ifm-color-gray-100:#f5f6f7;--ifm-color-gray-200:#ebedf0;--ifm-color-gray-300:#dadde1;--ifm-color-gray-400:#ccd0d5;--ifm-color-gray-500:#bec3c9;--ifm-color-gray-600:#8d949e;--ifm-color-gray-700:#606770;--ifm-color-gray-800:#444950;--ifm-color-gray-900:#1c1e21;--ifm-color-gray-1000:var(--ifm-color-black);--ifm-color-emphasis-0:var(--ifm-color-gray-0);--ifm-color-emphasis-100:var(--ifm-color-gray-100);--ifm-color-emphasis-200:var(--ifm-color-gray-200);--ifm-color-emphasis-300:var(--ifm-color-gray-300);--ifm-color-emphasis-400:var(--ifm-color-gray-400);--ifm-color-emphasis-500:var(--ifm-color-gray-500);--ifm-color-emphasis-600:var(--ifm-color-gray-600);--ifm-color-emphasis-700:var(--ifm-color-gray-700);--ifm-color-emphasis-800:var(--ifm-color-gray-800);--ifm-color-emphasis-900:var(--ifm-color-gray-900);--ifm-color-emphasis-1000:var(--ifm-color-gray-1000);--ifm-color-content:var(--ifm-color-emphasis-900);--ifm-color-content-inverse:var(--ifm-color-emphasis-0);--ifm-color-content-secondary:#525860;--ifm-background-color:transparent;--ifm-background-surface-color:var(--ifm-color-content-inverse);--ifm-global-border-width:1px;--ifm-global-radius:.4rem;--ifm-hover-overlay:#0000000d;--ifm-font-color-base:var(--ifm-color-content);--ifm-font-color-base-inverse:var(--ifm-color-content-inverse);--ifm-font-color-secondary:var(--ifm-color-content-secondary);--ifm-font-family-base:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--ifm-font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--ifm-font-size-base:100%;--ifm-font-weight-light:300;--ifm-font-weight-normal:400;--ifm-font-weight-semibold:500;--ifm-font-weight-bold:700;--ifm-font-weight-base:var(--ifm-font-weight-normal);--ifm-line-height-base:1.65;--ifm-global-spacing:1rem;--ifm-spacing-vertical:var(--ifm-global-spacing);--ifm-spacing-horizontal:var(--ifm-global-spacing);--ifm-transition-fast:.2s;--ifm-transition-slow:.4s;--ifm-transition-timing-default:cubic-bezier(.08,.52,.52,1);--ifm-global-shadow-lw:0 1px 2px 0 #0000001a;--ifm-global-shadow-md:0 5px 40px #0003;--ifm-global-shadow-tl:0 12px 28px 0 #0003,0 2px 4px 0 #0000001a;--ifm-z-index-dropdown:100;--ifm-z-index-fixed:200;--ifm-z-index-overlay:400;--ifm-container-width:1140px;--ifm-container-width-xl:1320px;--ifm-code-background:#f6f7f8;--ifm-code-border-radius:var(--ifm-global-radius);--ifm-code-font-size:90%;--ifm-code-padding-horizontal:.1rem;--ifm-code-padding-vertical:.1rem;--ifm-pre-background:var(--ifm-code-background);--ifm-pre-border-radius:var(--ifm-code-border-radius);--ifm-pre-color:inherit;--ifm-pre-line-height:1.45;--ifm-pre-padding:1rem;--ifm-heading-color:inherit;--ifm-heading-margin-top:0;--ifm-heading-margin-bottom:var(--ifm-spacing-vertical);--ifm-heading-font-family:var(--ifm-font-family-base);--ifm-heading-font-weight:var(--ifm-font-weight-bold);--ifm-heading-line-height:1.25;--ifm-h1-font-size:2rem;--ifm-h2-font-size:1.5rem;--ifm-h3-font-size:1.25rem;--ifm-h4-font-size:1rem;--ifm-h5-font-size:.875rem;--ifm-h6-font-size:.85rem;--ifm-image-alignment-padding:1.25rem;--ifm-leading-desktop:1.25;--ifm-leading:calc(var(--ifm-leading-desktop)*1rem);--ifm-list-left-padding:2rem;--ifm-list-margin:1rem;--ifm-list-item-margin:.25rem;--ifm-list-paragraph-margin:1rem;--ifm-table-cell-padding:.75rem;--ifm-table-background:transparent;--ifm-table-stripe-background:#00000008;--ifm-table-border-width:1px;--ifm-table-border-color:var(--ifm-color-emphasis-300);--ifm-table-head-background:inherit;--ifm-table-head-color:inherit;--ifm-table-head-font-weight:var(--ifm-font-weight-bold);--ifm-table-cell-color:inherit;--ifm-link-color:var(--ifm-color-primary);--ifm-link-decoration:none;--ifm-link-hover-color:var(--ifm-link-color);--ifm-link-hover-decoration:underline;--ifm-paragraph-margin-bottom:var(--ifm-leading);--ifm-blockquote-font-size:var(--ifm-font-size-base);--ifm-blockquote-border-left-width:2px;--ifm-blockquote-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-blockquote-padding-vertical:0;--ifm-blockquote-shadow:none;--ifm-blockquote-color:var(--ifm-color-emphasis-800);--ifm-blockquote-border-color:var(--ifm-color-emphasis-300);--ifm-hr-background-color:var(--ifm-color-emphasis-500);--ifm-hr-height:1px;--ifm-hr-margin-vertical:1.5rem;--ifm-scrollbar-size:7px;--ifm-scrollbar-track-background-color:#f1f1f1;--ifm-scrollbar-thumb-background-color:silver;--ifm-scrollbar-thumb-hover-background-color:#a7a7a7;--ifm-alert-background-color:inherit;--ifm-alert-border-color:inherit;--ifm-alert-border-radius:var(--ifm-global-radius);--ifm-alert-border-width:0px;--ifm-alert-border-left-width:5px;--ifm-alert-color:var(--ifm-font-color-base);--ifm-alert-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-alert-padding-vertical:var(--ifm-spacing-vertical);--ifm-alert-shadow:var(--ifm-global-shadow-lw);--ifm-avatar-intro-margin:1rem;--ifm-avatar-intro-alignment:inherit;--ifm-avatar-photo-size:3rem;--ifm-badge-background-color:inherit;--ifm-badge-border-color:inherit;--ifm-badge-border-radius:var(--ifm-global-radius);--ifm-badge-border-width:var(--ifm-global-border-width);--ifm-badge-color:var(--ifm-color-white);--ifm-badge-padding-horizontal:calc(var(--ifm-spacing-horizontal)*.5);--ifm-badge-padding-vertical:calc(var(--ifm-spacing-vertical)*.25);--ifm-breadcrumb-border-radius:1.5rem;--ifm-breadcrumb-spacing:.5rem;--ifm-breadcrumb-color-active:var(--ifm-color-primary);--ifm-breadcrumb-item-background-active:var(--ifm-hover-overlay);--ifm-breadcrumb-padding-horizontal:.8rem;--ifm-breadcrumb-padding-vertical:.4rem;--ifm-breadcrumb-size-multiplier:1;--ifm-breadcrumb-separator:url("data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" x=\"0px\" y=\"0px\" viewBox=\"0 0 256 256\"><g><g><polygon points=\"79.093,0 48.907,30.187 146.72,128 48.907,225.813 79.093,256 207.093,128\"/></g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g></svg>");--ifm-breadcrumb-separator-filter:none;--ifm-breadcrumb-separator-size:.5rem;--ifm-breadcrumb-separator-size-multiplier:1.25;--ifm-button-background-color:inherit;--ifm-button-border-color:var(--ifm-button-background-color);--ifm-button-border-width:var(--ifm-global-border-width);--ifm-button-color:var(--ifm-font-color-base-inverse);--ifm-button-font-weight:var(--ifm-font-weight-bold);--ifm-button-padding-horizontal:1.5rem;--ifm-button-padding-vertical:.375rem;--ifm-button-size-multiplier:1;--ifm-button-transition-duration:var(--ifm-transition-fast);--ifm-button-border-radius:calc(var(--ifm-global-radius)*var(--ifm-button-size-multiplier));--ifm-button-group-spacing:2px;--ifm-card-background-color:var(--ifm-background-surface-color);--ifm-card-border-radius:calc(var(--ifm-global-radius)*2);--ifm-card-horizontal-spacing:var(--ifm-global-spacing);--ifm-card-vertical-spacing:var(--ifm-global-spacing);--ifm-toc-border-color:var(--ifm-color-emphasis-300);--ifm-toc-link-color:var(--ifm-color-content-secondary);--ifm-toc-padding-vertical:.5rem;--ifm-toc-padding-horizontal:.5rem;--ifm-dropdown-background-color:var(--ifm-background-surface-color);--ifm-dropdown-font-weight:var(--ifm-font-weight-semibold);--ifm-dropdown-link-color:var(--ifm-font-color-base);--ifm-dropdown-hover-background-color:var(--ifm-hover-overlay);--ifm-footer-background-color:var(--ifm-color-emphasis-100);--ifm-footer-color:inherit;--ifm-footer-link-color:var(--ifm-color-emphasis-700);--ifm-footer-link-hover-color:var(--ifm-color-primary);--ifm-footer-link-horizontal-spacing:.5rem;--ifm-footer-padding-horizontal:calc(var(--ifm-spacing-horizontal)*2);--ifm-footer-padding-vertical:calc(var(--ifm-spacing-vertical)*2);--ifm-footer-title-color:inherit;--ifm-footer-logo-max-width:min(30rem,90vw);--ifm-hero-background-color:var(--ifm-background-surface-color);--ifm-hero-text-color:var(--ifm-color-emphasis-800);--ifm-menu-color:var(--ifm-color-emphasis-700);--ifm-menu-color-active:var(--ifm-color-primary);--ifm-menu-color-background-active:var(--ifm-hover-overlay);--ifm-menu-color-background-hover:var(--ifm-hover-overlay);--ifm-menu-link-padding-horizontal:.75rem;--ifm-menu-link-padding-vertical:.375rem;--ifm-menu-link-sublist-icon:url("data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16px\" height=\"16px\" viewBox=\"0 0 24 24\"><path fill=\"rgba(0,0,0,0.5)\" d=\"M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z\"></path></svg>");--ifm-menu-link-sublist-icon-filter:none;--ifm-navbar-background-color:var(--ifm-background-surface-color);--ifm-navbar-height:3.75rem;--ifm-navbar-item-padding-horizontal:.75rem;--ifm-navbar-item-padding-vertical:.25rem;--ifm-navbar-link-color:var(--ifm-font-color-base);--ifm-navbar-link-hover-color:var(--ifm-color-primary);--ifm-navbar-link-active-color:var(--ifm-link-color);--ifm-navbar-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-navbar-padding-vertical:calc(var(--ifm-spacing-vertical)*.5);--ifm-navbar-shadow:var(--ifm-global-shadow-lw);--ifm-navbar-search-input-background-color:var(--ifm-color-emphasis-200);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-800);--ifm-navbar-search-input-placeholder-color:var(--ifm-color-emphasis-500);--ifm-navbar-search-input-icon:url("data:image/svg+xml;utf8,<svg fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" height=\"16px\" width=\"16px\"><path d=\"M6.02945,10.20327a4.17382,4.17382,0,1,1,4.17382-4.17382A4.15609,4.15609,0,0,1,6.02945,10.20327Zm9.69195,4.2199L10.8989,9.59979A5.88021,5.88021,0,0,0,12.058,6.02856,6.00467,6.00467,0,1,0,9.59979,10.8989l4.82338,4.82338a.89729.89729,0,0,0,1.29912,0,.89749.89749,0,0,0-.00087-1.29909Z\" /></svg>");--ifm-navbar-sidebar-width:83vw;--ifm-pagination-border-radius:var(--ifm-global-radius);--ifm-pagination-color-active:var(--ifm-color-primary);--ifm-pagination-font-size:1rem;--ifm-pagination-item-active-background:var(--ifm-hover-overlay);--ifm-pagination-page-spacing:.2em;--ifm-pagination-padding-horizontal:calc(var(--ifm-spacing-horizontal)*1);--ifm-pagination-padding-vertical:calc(var(--ifm-spacing-vertical)*.25);--ifm-pagination-nav-border-radius:var(--ifm-global-radius);--ifm-pagination-nav-color-hover:var(--ifm-color-primary);--ifm-pills-color-active:var(--ifm-color-primary);--ifm-pills-color-background-active:var(--ifm-hover-overlay);--ifm-pills-spacing:.125rem;--ifm-tabs-color:var(--ifm-font-color-secondary);--ifm-tabs-color-active:var(--ifm-color-primary);--ifm-tabs-color-active-border:var(--ifm-tabs-color-active);--ifm-tabs-padding-horizontal:1rem;--ifm-tabs-padding-vertical:1rem}*{box-sizing:border-box}html{background-color:var(--ifm-background-color);color:var(--ifm-font-color-base);color-scheme:var(--ifm-color-scheme);font:var(--ifm-font-size-base)/var(--ifm-line-height-base)var(--ifm-font-family-base);-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent;text-rendering:optimizelegibility;-webkit-text-size-adjust:100%;text-size-adjust:100%}body{word-wrap:break-word;margin:0}iframe{color-scheme:normal;border:0}.container{max-width:var(--ifm-container-width);padding:0 var(--ifm-spacing-horizontal);width:100%;margin:0 auto}.container--fluid{max-width:inherit}.row{margin:0 calc(var(--ifm-spacing-horizontal)*-1);flex-wrap:wrap;display:flex}.row--no-gutters{margin-left:0;margin-right:0}.row--no-gutters>.col{padding-left:0;padding-right:0}.row--align-top{align-items:flex-start}.row--align-bottom{align-items:flex-end}.row--align-center{align-items:center}.row--align-stretch{align-items:stretch}.row--align-baseline{align-items:baseline}.col{--ifm-col-width:100%;max-width:var(--ifm-col-width);padding:0 var(--ifm-spacing-horizontal);flex:1 0;width:100%;margin-left:0}.col[class*=col--]{flex:0 0 var(--ifm-col-width)}.col--1{--ifm-col-width:calc(1/12*100%)}.col--offset-1{margin-left:8.33333%}.col--2{--ifm-col-width:calc(2/12*100%)}.col--offset-2{margin-left:16.6667%}.col--3{--ifm-col-width:calc(3/12*100%)}.col--offset-3{margin-left:25%}.col--4{--ifm-col-width:calc(4/12*100%)}.col--offset-4{margin-left:33.3333%}.col--5{--ifm-col-width:calc(5/12*100%)}.col--offset-5{margin-left:41.6667%}.col--6{--ifm-col-width:calc(6/12*100%)}.col--offset-6{margin-left:50%}.col--7{--ifm-col-width:calc(7/12*100%)}.col--offset-7{margin-left:58.3333%}.col--8{--ifm-col-width:calc(8/12*100%)}.col--offset-8{margin-left:66.6667%}.col--9{--ifm-col-width:calc(9/12*100%)}.col--offset-9{margin-left:75%}.col--10{--ifm-col-width:calc(10/12*100%)}.col--offset-10{margin-left:83.3333%}.col--11{--ifm-col-width:calc(11/12*100%)}.col--offset-11{margin-left:91.6667%}.col--12{--ifm-col-width:calc(12/12*100%)}.col--offset-12{margin-left:100%}.margin--none{margin:0!important}.margin-top--none{margin-top:0!important}.margin-left--none{margin-left:0!important}.margin-bottom--none{margin-bottom:0!important}.margin-right--none{margin-right:0!important}.margin-vert--none{margin-top:0!important;margin-bottom:0!important}.margin-horiz--none{margin-left:0!important;margin-right:0!important}.margin--xs{margin:.25rem!important}.margin-top--xs{margin-top:.25rem!important}.margin-left--xs{margin-left:.25rem!important}.margin-bottom--xs{margin-bottom:.25rem!important}.margin-right--xs{margin-right:.25rem!important}.margin-vert--xs{margin-top:.25rem!important;margin-bottom:.25rem!important}.margin-horiz--xs{margin-left:.25rem!important;margin-right:.25rem!important}.margin--sm{margin:.5rem!important}.margin-top--sm{margin-top:.5rem!important}.margin-left--sm{margin-left:.5rem!important}.margin-bottom--sm{margin-bottom:.5rem!important}.margin-right--sm{margin-right:.5rem!important}.margin-vert--sm{margin-top:.5rem!important;margin-bottom:.5rem!important}.margin-horiz--sm{margin-left:.5rem!important;margin-right:.5rem!important}.margin--md{margin:1rem!important}.margin-top--md{margin-top:1rem!important}.margin-left--md{margin-left:1rem!important}.margin-bottom--md{margin-bottom:1rem!important}.margin-right--md{margin-right:1rem!important}.margin-vert--md{margin-top:1rem!important;margin-bottom:1rem!important}.margin-horiz--md{margin-left:1rem!important;margin-right:1rem!important}.margin--lg{margin:2rem!important}.margin-top--lg{margin-top:2rem!important}.margin-left--lg{margin-left:2rem!important}.margin-bottom--lg{margin-bottom:2rem!important}.margin-right--lg{margin-right:2rem!important}.margin-vert--lg{margin-top:2rem!important;margin-bottom:2rem!important}.margin-horiz--lg{margin-left:2rem!important;margin-right:2rem!important}.margin--xl{margin:5rem!important}.margin-top--xl{margin-top:5rem!important}.margin-left--xl{margin-left:5rem!important}.margin-bottom--xl{margin-bottom:5rem!important}.margin-right--xl{margin-right:5rem!important}.margin-vert--xl{margin-top:5rem!important;margin-bottom:5rem!important}.margin-horiz--xl{margin-left:5rem!important;margin-right:5rem!important}.padding--none{padding:0!important}.padding-top--none{padding-top:0!important}.padding-left--none{padding-left:0!important}.padding-bottom--none{padding-bottom:0!important}.padding-right--none{padding-right:0!important}.padding-vert--none{padding-top:0!important;padding-bottom:0!important}.padding-horiz--none{padding-left:0!important;padding-right:0!important}.padding--xs{padding:.25rem!important}.padding-top--xs{padding-top:.25rem!important}.padding-left--xs{padding-left:.25rem!important}.padding-bottom--xs{padding-bottom:.25rem!important}.padding-right--xs{padding-right:.25rem!important}.padding-vert--xs{padding-top:.25rem!important;padding-bottom:.25rem!important}.padding-horiz--xs{padding-left:.25rem!important;padding-right:.25rem!important}.padding--sm{padding:.5rem!important}.padding-top--sm{padding-top:.5rem!important}.padding-left--sm{padding-left:.5rem!important}.padding-bottom--sm{padding-bottom:.5rem!important}.padding-right--sm{padding-right:.5rem!important}.padding-vert--sm{padding-top:.5rem!important;padding-bottom:.5rem!important}.padding-horiz--sm{padding-left:.5rem!important;padding-right:.5rem!important}.padding--md{padding:1rem!important}.padding-top--md{padding-top:1rem!important}.padding-left--md{padding-left:1rem!important}.padding-bottom--md{padding-bottom:1rem!important}.padding-right--md{padding-right:1rem!important}.padding-vert--md{padding-top:1rem!important;padding-bottom:1rem!important}.padding-horiz--md{padding-left:1rem!important;padding-right:1rem!important}.padding--lg{padding:2rem!important}.padding-top--lg{padding-top:2rem!important}.padding-left--lg{padding-left:2rem!important}.padding-bottom--lg{padding-bottom:2rem!important}.padding-right--lg{padding-right:2rem!important}.padding-vert--lg{padding-top:2rem!important;padding-bottom:2rem!important}.padding-horiz--lg{padding-left:2rem!important;padding-right:2rem!important}.padding--xl{padding:5rem!important}.padding-top--xl{padding-top:5rem!important}.padding-left--xl{padding-left:5rem!important}.padding-bottom--xl{padding-bottom:5rem!important}.padding-right--xl{padding-right:5rem!important}.padding-vert--xl{padding-top:5rem!important;padding-bottom:5rem!important}.padding-horiz--xl{padding-left:5rem!important;padding-right:5rem!important}code{background-color:var(--ifm-code-background);border-radius:var(--ifm-code-border-radius);font-family:var(--ifm-font-family-monospace);font-size:var(--ifm-code-font-size);padding:var(--ifm-code-padding-vertical)var(--ifm-code-padding-horizontal);vertical-align:middle;border:.1rem solid #0000001a}a code{color:inherit}pre{background-color:var(--ifm-pre-background);border-radius:var(--ifm-pre-border-radius);color:var(--ifm-pre-color);font:var(--ifm-code-font-size)/var(--ifm-pre-line-height)var(--ifm-font-family-monospace);margin:0 0 var(--ifm-spacing-vertical);padding:var(--ifm-pre-padding);overflow:auto}pre code{font-size:100%;line-height:inherit;background-color:#0000;border:none;padding:0}kbd{background-color:var(--ifm-color-emphasis-0);border:1px solid var(--ifm-color-emphasis-400);box-shadow:inset 0 -1px 0 var(--ifm-color-emphasis-400);color:var(--ifm-color-emphasis-800);font:80% var(--ifm-font-family-monospace);border-radius:.2rem;padding:.15rem .3rem}h1,h2,h3,h4,h5,h6{color:var(--ifm-heading-color);font-family:var(--ifm-heading-font-family);font-weight:var(--ifm-heading-font-weight);line-height:var(--ifm-heading-line-height);margin:var(--ifm-heading-margin-top)0 var(--ifm-heading-margin-bottom)0}h1{font-size:var(--ifm-h1-font-size)}h2{font-size:var(--ifm-h2-font-size)}h3{font-size:var(--ifm-h3-font-size)}h4{font-size:var(--ifm-h4-font-size)}h5{font-size:var(--ifm-h5-font-size)}h6{font-size:var(--ifm-h6-font-size)}img{max-width:100%}img[align=right]{padding-left:var(--image-alignment-padding)}img[align=left]{padding-right:var(--image-alignment-padding)}.markdown{--ifm-h1-vertical-rhythm-top:3;--ifm-h2-vertical-rhythm-top:2;--ifm-h3-vertical-rhythm-top:1.5;--ifm-heading-vertical-rhythm-top:1.25;--ifm-h1-vertical-rhythm-bottom:1.25;--ifm-heading-vertical-rhythm-bottom:1}.markdown:before{content:"";display:table}.markdown:after{clear:both;content:"";display:table}.markdown>:last-child{margin-bottom:0!important}.markdown h1:first-child{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-h1-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown>h2{--ifm-h2-font-size:2rem;margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading));margin-top:calc(var(--ifm-h2-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h3{--ifm-h3-font-size:1.5rem;margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading));margin-top:calc(var(--ifm-h3-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading));margin-top:calc(var(--ifm-heading-vertical-rhythm-top)*var(--ifm-leading))}.markdown>pre,.markdown>ul,.markdown>p{margin-bottom:var(--ifm-leading)}.markdown li{word-wrap:break-word}.markdown li>p{margin-top:var(--ifm-list-paragraph-margin)}.markdown li+li{margin-top:var(--ifm-list-item-margin)}ul,ol{margin:0 0 var(--ifm-list-margin);padding-left:var(--ifm-list-left-padding)}ol ol,ul ol{list-style-type:lower-roman}ul ul,ul ol,ol ol,ol ul{margin:0}ul ul ol,ul ol ol,ol ul ol,ol ol ol{list-style-type:lower-alpha}table{border-collapse:collapse;margin-bottom:var(--ifm-spacing-vertical);display:block;overflow:auto}table thead tr{border-bottom:2px solid var(--ifm-table-border-color)}table thead{background-color:var(--ifm-table-stripe-background)}table tr{background-color:var(--ifm-table-background);border-top:var(--ifm-table-border-width)solid var(--ifm-table-border-color)}table tr:nth-child(2n){background-color:var(--ifm-table-stripe-background)}table th,table td{border:var(--ifm-table-border-width)solid var(--ifm-table-border-color);padding:var(--ifm-table-cell-padding)}table th{background-color:var(--ifm-table-head-background);color:var(--ifm-table-head-color);font-weight:var(--ifm-table-head-font-weight)}table td{color:var(--ifm-table-cell-color)}strong{font-weight:var(--ifm-font-weight-bold)}a{color:var(--ifm-link-color);-webkit-text-decoration:var(--ifm-link-decoration);text-decoration:var(--ifm-link-decoration);transition:color var(--ifm-transition-fast)var(--ifm-transition-timing-default)}a:hover{color:var(--ifm-link-hover-color);-webkit-text-decoration:var(--ifm-link-hover-decoration);text-decoration:var(--ifm-link-hover-decoration)}a:not([href]){-webkit-text-decoration:none;text-decoration:none}p{margin:0 0 var(--ifm-paragraph-margin-bottom)}blockquote{border-left:var(--ifm-blockquote-border-left-width)solid var(--ifm-blockquote-border-color);box-shadow:var(--ifm-blockquote-shadow);color:var(--ifm-blockquote-color);font-size:var(--ifm-blockquote-font-size);margin:0 0 var(--ifm-spacing-vertical);padding:var(--ifm-blockquote-padding-vertical)var(--ifm-blockquote-padding-horizontal)}blockquote>:first-child{margin-top:0}blockquote>:last-child{margin-bottom:0}hr{background-color:var(--ifm-hr-background-color);height:var(--ifm-hr-height);margin:var(--ifm-hr-margin-vertical)0;border:0}.shadow--lw{box-shadow:var(--ifm-global-shadow-lw)!important}.shadow--md{box-shadow:var(--ifm-global-shadow-md)!important}.shadow--tl{box-shadow:var(--ifm-global-shadow-tl)!important}.text--primary{color:var(--ifm-color-primary)}.text--secondary{color:var(--ifm-color-secondary)}.text--success{color:var(--ifm-color-success)}.text--info{color:var(--ifm-color-info)}.text--warning{color:var(--ifm-color-warning)}.text--danger{color:var(--ifm-color-danger)}.text--center{text-align:center}.text--left{text-align:left}.text--justify{text-align:justify}.text--right{text-align:right}.text--capitalize{text-transform:capitalize}.text--lowercase{text-transform:lowercase}.text--uppercase{text-transform:uppercase}.text--light{font-weight:var(--ifm-font-weight-light)}.text--normal{font-weight:var(--ifm-font-weight-normal)}.text--semibold{font-weight:var(--ifm-font-weight-semibold)}.text--bold{font-weight:var(--ifm-font-weight-bold)}.text--italic{font-style:italic}.text--truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.text--break{word-wrap:break-word!important;word-break:break-word!important}.text--no-decoration,.text--no-decoration:hover{-webkit-text-decoration:none;text-decoration:none}.clean-btn{color:inherit;cursor:pointer;background:0 0;border:none;padding:0;font-family:inherit}.clean-list{padding-left:0;list-style:none}.alert--primary{--ifm-alert-background-color:var(--ifm-color-primary-contrast-background);--ifm-alert-background-color-highlight:#3578e526;--ifm-alert-foreground-color:var(--ifm-color-primary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-primary-dark)}.alert--secondary{--ifm-alert-background-color:var(--ifm-color-secondary-contrast-background);--ifm-alert-background-color-highlight:#ebedf026;--ifm-alert-foreground-color:var(--ifm-color-secondary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-secondary-dark)}.alert--success{--ifm-alert-background-color:var(--ifm-color-success-contrast-background);--ifm-alert-background-color-highlight:#00a40026;--ifm-alert-foreground-color:var(--ifm-color-success-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-success-dark)}.alert--info{--ifm-alert-background-color:var(--ifm-color-info-contrast-background);--ifm-alert-background-color-highlight:#54c7ec26;--ifm-alert-foreground-color:var(--ifm-color-info-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-info-dark)}.alert--warning{--ifm-alert-background-color:var(--ifm-color-warning-contrast-background);--ifm-alert-background-color-highlight:#ffba0026;--ifm-alert-foreground-color:var(--ifm-color-warning-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-warning-dark)}.alert--danger{--ifm-alert-background-color:var(--ifm-color-danger-contrast-background);--ifm-alert-background-color-highlight:#fa383e26;--ifm-alert-foreground-color:var(--ifm-color-danger-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-danger-dark)}.alert{--ifm-code-background:var(--ifm-alert-background-color-highlight);--ifm-link-color:var(--ifm-alert-foreground-color);--ifm-link-hover-color:var(--ifm-alert-foreground-color);--ifm-link-decoration:underline;--ifm-tabs-color:var(--ifm-alert-foreground-color);--ifm-tabs-color-active:var(--ifm-alert-foreground-color);--ifm-tabs-color-active-border:var(--ifm-alert-border-color);background-color:var(--ifm-alert-background-color);border:var(--ifm-alert-border-width)solid var(--ifm-alert-border-color);border-left-width:var(--ifm-alert-border-left-width);border-radius:var(--ifm-alert-border-radius);box-shadow:var(--ifm-alert-shadow);color:var(--ifm-alert-foreground-color);padding:var(--ifm-alert-padding-vertical)var(--ifm-alert-padding-horizontal)}.alert__heading{font:bold var(--ifm-h5-font-size)/var(--ifm-heading-line-height)var(--ifm-heading-font-family);text-transform:uppercase;align-items:center;margin-bottom:.5rem;display:flex}.alert__icon{margin-right:.4em;display:inline-flex}.alert__icon svg{fill:var(--ifm-alert-foreground-color);stroke:var(--ifm-alert-foreground-color);stroke-width:0}.alert .close{color:var(--ifm-alert-foreground-color);margin:calc(var(--ifm-alert-padding-vertical)*-1)calc(var(--ifm-alert-padding-horizontal)*-1)0 0;opacity:.75}.alert .close:hover,.alert .close:focus{opacity:1}.alert a{-webkit-text-decoration-color:var(--ifm-alert-border-color);text-decoration-color:var(--ifm-alert-border-color)}.alert a:hover{text-decoration-thickness:2px}.avatar{column-gap:var(--ifm-avatar-intro-margin);display:flex}.avatar__photo{height:var(--ifm-avatar-photo-size);width:var(--ifm-avatar-photo-size);border-radius:50%;display:block;overflow:hidden}.avatar__photo--sm{--ifm-avatar-photo-size:2rem}.avatar__photo--lg{--ifm-avatar-photo-size:4rem}.avatar__photo--xl{--ifm-avatar-photo-size:6rem}.avatar__intro{text-align:var(--ifm-avatar-intro-alignment);flex-direction:column;flex:1;justify-content:center;display:flex}.avatar__name{font:bold var(--ifm-h4-font-size)/var(--ifm-heading-line-height)var(--ifm-font-family-base)}.avatar__subtitle{margin-top:.25rem}.avatar--vertical{--ifm-avatar-intro-alignment:center;--ifm-avatar-intro-margin:.5rem;flex-direction:column;align-items:center}.badge{background-color:var(--ifm-badge-background-color);border:var(--ifm-badge-border-width)solid var(--ifm-badge-border-color);border-radius:var(--ifm-badge-border-radius);color:var(--ifm-badge-color);font-size:75%;font-weight:var(--ifm-font-weight-bold);padding:var(--ifm-badge-padding-vertical)var(--ifm-badge-padding-horizontal);line-height:1;display:inline-block}.badge--primary{--ifm-badge-background-color:var(--ifm-color-primary);--ifm-badge-border-color:var(--ifm-badge-background-color)}.badge--secondary{--ifm-badge-background-color:var(--ifm-color-secondary);--ifm-badge-border-color:var(--ifm-badge-background-color);color:var(--ifm-color-black)}.badge--success{--ifm-badge-background-color:var(--ifm-color-success);--ifm-badge-border-color:var(--ifm-badge-background-color)}.badge--info{--ifm-badge-background-color:var(--ifm-color-info);--ifm-badge-border-color:var(--ifm-badge-background-color)}.badge--warning{--ifm-badge-background-color:var(--ifm-color-warning);--ifm-badge-border-color:var(--ifm-badge-background-color)}.badge--danger{--ifm-badge-background-color:var(--ifm-color-danger);--ifm-badge-border-color:var(--ifm-badge-background-color)}.breadcrumbs{margin-bottom:0;padding-left:0}.breadcrumbs__item{display:inline-block}.breadcrumbs__item:not(:last-child):after{background:var(--ifm-breadcrumb-separator)center;content:" ";filter:var(--ifm-breadcrumb-separator-filter);height:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier));margin:0 var(--ifm-breadcrumb-spacing);opacity:.5;width:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier));display:inline-block}.breadcrumbs__item--active .breadcrumbs__link{background:var(--ifm-breadcrumb-item-background-active);color:var(--ifm-breadcrumb-color-active)}.breadcrumbs__link{border-radius:var(--ifm-breadcrumb-border-radius);color:var(--ifm-font-color-base);font-size:calc(1rem*var(--ifm-breadcrumb-size-multiplier));padding:calc(var(--ifm-breadcrumb-padding-vertical)*var(--ifm-breadcrumb-size-multiplier))calc(var(--ifm-breadcrumb-padding-horizontal)*var(--ifm-breadcrumb-size-multiplier));transition-property:background,color;transition-duration:var(--ifm-transition-fast);transition-timing-function:var(--ifm-transition-timing-default);display:inline-block}.breadcrumbs__link:link:hover,.breadcrumbs__link:visited:hover,area[href].breadcrumbs__link:hover,.breadcrumbs__link:any-link:hover{background:var(--ifm-breadcrumb-item-background-active);-webkit-text-decoration:none;text-decoration:none}.breadcrumbs--sm{--ifm-breadcrumb-size-multiplier:.8}.breadcrumbs--lg{--ifm-breadcrumb-size-multiplier:1.2}.button{background-color:var(--ifm-button-background-color);border:var(--ifm-button-border-width)solid var(--ifm-button-border-color);border-radius:var(--ifm-button-border-radius);color:var(--ifm-button-color);cursor:pointer;font-size:calc(.875rem*var(--ifm-button-size-multiplier));font-weight:var(--ifm-button-font-weight);padding:calc(var(--ifm-button-padding-vertical)*var(--ifm-button-size-multiplier))calc(var(--ifm-button-padding-horizontal)*var(--ifm-button-size-multiplier));text-align:center;-webkit-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap;transition-property:color,background,border-color;transition-duration:var(--ifm-button-transition-duration);transition-timing-function:var(--ifm-transition-timing-default);line-height:1.5;display:inline-block}.button:hover{color:var(--ifm-button-color);-webkit-text-decoration:none;text-decoration:none}.button--outline{--ifm-button-background-color:transparent;--ifm-button-color:var(--ifm-button-border-color)}.button--outline:hover{--ifm-button-background-color:var(--ifm-button-border-color)}.button--outline:hover,.button--outline:active,.button--outline.button--active{--ifm-button-color:var(--ifm-font-color-base-inverse)}.button--link{--ifm-button-background-color:transparent;--ifm-button-border-color:transparent;color:var(--ifm-link-color);-webkit-text-decoration:var(--ifm-link-decoration);text-decoration:var(--ifm-link-decoration)}.button--link:hover,.button--link:active,.button--link.button--active{color:var(--ifm-link-hover-color);-webkit-text-decoration:var(--ifm-link-hover-decoration);text-decoration:var(--ifm-link-hover-decoration)}.button.disabled,.button:disabled,.button[disabled]{opacity:.65;pointer-events:none}.button--sm{--ifm-button-size-multiplier:.8}.button--lg{--ifm-button-size-multiplier:1.35}.button--block{width:100%;display:block}.button.button--secondary{color:var(--ifm-color-gray-900)}.button.button--secondary.button--outline:not(.button--active):not(:hover){color:var(--ifm-font-color-base)}:where(.button--primary){--ifm-button-background-color:var(--ifm-color-primary);--ifm-button-border-color:var(--ifm-color-primary)}:where(.button--primary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-primary-dark);--ifm-button-border-color:var(--ifm-color-primary-dark)}.button--primary:active,.button--primary.button--active{--ifm-button-background-color:var(--ifm-color-primary-darker);--ifm-button-border-color:var(--ifm-color-primary-darker)}:where(.button--secondary){--ifm-button-background-color:var(--ifm-color-secondary);--ifm-button-border-color:var(--ifm-color-secondary)}:where(.button--secondary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-secondary-dark);--ifm-button-border-color:var(--ifm-color-secondary-dark)}.button--secondary:active,.button--secondary.button--active{--ifm-button-background-color:var(--ifm-color-secondary-darker);--ifm-button-border-color:var(--ifm-color-secondary-darker)}:where(.button--success){--ifm-button-background-color:var(--ifm-color-success);--ifm-button-border-color:var(--ifm-color-success)}:where(.button--success):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-success-dark);--ifm-button-border-color:var(--ifm-color-success-dark)}.button--success:active,.button--success.button--active{--ifm-button-background-color:var(--ifm-color-success-darker);--ifm-button-border-color:var(--ifm-color-success-darker)}:where(.button--info){--ifm-button-background-color:var(--ifm-color-info);--ifm-button-border-color:var(--ifm-color-info)}:where(.button--info):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-info-dark);--ifm-button-border-color:var(--ifm-color-info-dark)}.button--info:active,.button--info.button--active{--ifm-button-background-color:var(--ifm-color-info-darker);--ifm-button-border-color:var(--ifm-color-info-darker)}:where(.button--warning){--ifm-button-background-color:var(--ifm-color-warning);--ifm-button-border-color:var(--ifm-color-warning)}:where(.button--warning):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-warning-dark);--ifm-button-border-color:var(--ifm-color-warning-dark)}.button--warning:active,.button--warning.button--active{--ifm-button-background-color:var(--ifm-color-warning-darker);--ifm-button-border-color:var(--ifm-color-warning-darker)}:where(.button--danger){--ifm-button-background-color:var(--ifm-color-danger);--ifm-button-border-color:var(--ifm-color-danger)}:where(.button--danger):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-danger-dark);--ifm-button-border-color:var(--ifm-color-danger-dark)}.button--danger:active,.button--danger.button--active{--ifm-button-background-color:var(--ifm-color-danger-darker);--ifm-button-border-color:var(--ifm-color-danger-darker)}.button-group{gap:var(--ifm-button-group-spacing);display:inline-flex}.button-group>.button:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.button-group>.button:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.button-group--block{justify-content:stretch;display:flex}.button-group--block>.button{flex-grow:1}.card{background-color:var(--ifm-card-background-color);border-radius:var(--ifm-card-border-radius);box-shadow:var(--ifm-global-shadow-lw);flex-direction:column;display:flex;overflow:hidden}.card--full-height{height:100%}.card__image{padding-top:var(--ifm-card-vertical-spacing)}.card__image:first-child{padding-top:0}.card__header,.card__body,.card__footer{padding:var(--ifm-card-vertical-spacing)var(--ifm-card-horizontal-spacing)}.card__header:not(:last-child),.card__body:not(:last-child),.card__footer:not(:last-child){padding-bottom:0}.card__header>:last-child,.card__body>:last-child,.card__footer>:last-child{margin-bottom:0}.card__footer{margin-top:auto}.table-of-contents{padding:var(--ifm-toc-padding-vertical)0;margin-bottom:0;font-size:.8rem}.table-of-contents,.table-of-contents ul{padding-left:var(--ifm-toc-padding-horizontal);list-style:none}.table-of-contents li{margin:var(--ifm-toc-padding-vertical)var(--ifm-toc-padding-horizontal)}.table-of-contents__left-border{border-left:1px solid var(--ifm-toc-border-color)}.table-of-contents__link{color:var(--ifm-toc-link-color);display:block}.table-of-contents__link:hover,.table-of-contents__link:hover code,.table-of-contents__link--active,.table-of-contents__link--active code{color:var(--ifm-color-primary);-webkit-text-decoration:none;text-decoration:none}.close{color:var(--ifm-color-black);float:right;font-size:1.5rem;font-weight:var(--ifm-font-weight-bold);opacity:.5;transition:opacity var(--ifm-transition-fast)var(--ifm-transition-timing-default);padding:1rem;line-height:1}.close:hover{opacity:.7}.close:focus{opacity:.8}.dropdown{font-weight:var(--ifm-dropdown-font-weight);vertical-align:top;display:inline-flex;position:relative}.dropdown--hoverable:hover .dropdown__menu,.dropdown--show .dropdown__menu{opacity:1;pointer-events:all;visibility:visible;transform:translateY(-1px)}.dropdown--right .dropdown__menu{left:inherit;right:0}.dropdown--nocaret .navbar__link:after{content:none!important}.dropdown__menu{background-color:var(--ifm-dropdown-background-color);border-radius:var(--ifm-global-radius);box-shadow:var(--ifm-global-shadow-md);opacity:0;pointer-events:none;min-width:10rem;max-height:80vh;left:0;top:calc(100% - var(--ifm-navbar-item-padding-vertical) + .3rem);visibility:hidden;z-index:var(--ifm-z-index-dropdown);transition-property:opacity,transform,visibility;transition-duration:var(--ifm-transition-fast);transition-timing-function:var(--ifm-transition-timing-default);padding:.5rem;list-style:none;position:absolute;overflow-y:auto;transform:translateY(-.625rem)}.dropdown__link{color:var(--ifm-dropdown-link-color);white-space:nowrap;border-radius:.25rem;margin-top:.2rem;padding:.25rem .5rem;font-size:.875rem;display:block}.dropdown__link:hover,.dropdown__link--active{background-color:var(--ifm-dropdown-hover-background-color);color:var(--ifm-dropdown-link-color);-webkit-text-decoration:none;text-decoration:none}.dropdown__link--active,.dropdown__link--active:hover{--ifm-dropdown-link-color:var(--ifm-link-color)}.dropdown>.navbar__link:after{content:"";border:.4em solid #0000;border-top-color:currentColor;border-bottom:0 solid;margin-left:.3em;display:inline-block;position:relative;top:2px;transform:translateY(-50%)}.footer{background-color:var(--ifm-footer-background-color);color:var(--ifm-footer-color);padding:var(--ifm-footer-padding-vertical)var(--ifm-footer-padding-horizontal)}.footer--dark{--ifm-footer-background-color:#303846;--ifm-footer-color:var(--ifm-footer-link-color);--ifm-footer-link-color:var(--ifm-color-secondary);--ifm-footer-title-color:var(--ifm-color-white)}.footer__links{margin-bottom:1rem}.footer__link-item{color:var(--ifm-footer-link-color);line-height:2}.footer__link-item:hover{color:var(--ifm-footer-link-hover-color)}.footer__link-separator{margin:0 var(--ifm-footer-link-horizontal-spacing)}.footer__logo{max-width:var(--ifm-footer-logo-max-width);margin-top:1rem}.footer__title{color:var(--ifm-footer-title-color);font:bold var(--ifm-h4-font-size)/var(--ifm-heading-line-height)var(--ifm-font-family-base);margin-bottom:var(--ifm-heading-margin-bottom)}.footer__item{margin-top:0}.footer__items{margin-bottom:0}[type=checkbox]{padding:0}.hero{background-color:var(--ifm-hero-background-color);color:var(--ifm-hero-text-color);align-items:center;padding:4rem 2rem;display:flex}.hero--primary{--ifm-hero-background-color:var(--ifm-color-primary);--ifm-hero-text-color:var(--ifm-font-color-base-inverse)}.hero--dark{--ifm-hero-background-color:#303846;--ifm-hero-text-color:var(--ifm-color-white)}.hero__title{font-size:3rem}.hero__subtitle{font-size:1.5rem}.menu{font-weight:var(--ifm-font-weight-semibold);overflow-x:hidden}.menu__list{margin:0;padding-left:0;list-style:none}.menu__list .menu__list{padding-left:var(--ifm-menu-link-padding-horizontal);flex:0 0 100%;margin-top:.25rem}.menu__list-item:not(:first-child){margin-top:.25rem}.menu__list-item--collapsed .menu__list{height:0;overflow:hidden}.menu__list-item--collapsed .menu__link--sublist:after,.menu__list-item--collapsed .menu__caret:before{transform:rotate(90deg)}.menu__list-item-collapsible{transition:background var(--ifm-transition-fast)var(--ifm-transition-timing-default);border-radius:.25rem;flex-wrap:wrap;display:flex;position:relative}.menu__list-item-collapsible:hover,.menu__list-item-collapsible--active{background:var(--ifm-menu-color-background-hover)}.menu__list-item-collapsible .menu__link:hover,.menu__list-item-collapsible .menu__link--active{background:0 0!important}.menu__link,.menu__caret{transition:background var(--ifm-transition-fast)var(--ifm-transition-timing-default);border-radius:.25rem;align-items:center;display:flex}.menu__link:hover,.menu__caret:hover{background:var(--ifm-menu-color-background-hover)}.menu__link{color:var(--ifm-menu-color);padding:var(--ifm-menu-link-padding-vertical)var(--ifm-menu-link-padding-horizontal);flex:1;line-height:1.25}.menu__link:hover{color:var(--ifm-menu-color);transition:color var(--ifm-transition-fast)var(--ifm-transition-timing-default);-webkit-text-decoration:none;text-decoration:none}.menu__link--sublist-caret:after{content:"";background:var(--ifm-menu-link-sublist-icon)50%/2rem 2rem;min-width:1.25rem;filter:var(--ifm-menu-link-sublist-icon-filter);width:1.25rem;height:1.25rem;transition:transform var(--ifm-transition-fast)linear;margin-left:auto;transform:rotate(180deg)}.menu__link--active,.menu__link--active:hover{color:var(--ifm-menu-color-active)}.menu__link--active:not(.menu__link--sublist){background-color:var(--ifm-menu-color-background-active)}.menu__caret{padding:var(--ifm-menu-link-padding-vertical)var(--ifm-menu-link-padding-horizontal)}.menu__caret:before{content:"";background:var(--ifm-menu-link-sublist-icon)50%/2rem 2rem;filter:var(--ifm-menu-link-sublist-icon-filter);width:1.25rem;height:1.25rem;transition:transform var(--ifm-transition-fast)linear;transform:rotate(180deg)}html[data-theme=dark],.navbar--dark{--ifm-menu-link-sublist-icon-filter:invert(100%)sepia(94%)saturate(17%)hue-rotate(223deg)brightness(104%)contrast(98%)}.navbar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-navbar-shadow);height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical)var(--ifm-navbar-padding-horizontal);display:flex}.navbar>.container,.navbar>.container-fluid{display:flex}.navbar--fixed-top{z-index:var(--ifm-z-index-fixed);position:sticky;top:0}.navbar__inner{flex-wrap:wrap;justify-content:space-between;width:100%;display:flex}.navbar__brand{color:var(--ifm-navbar-link-color);align-items:center;min-width:0;margin-right:1rem;display:flex}.navbar__brand:hover{color:var(--ifm-navbar-link-hover-color);-webkit-text-decoration:none;text-decoration:none}.navbar__title{flex:auto}.navbar__toggle{margin-right:.5rem;display:none}.navbar__logo{flex:none;height:2rem;margin-right:.5rem}.navbar__logo img{height:100%}.navbar__items{flex:1;align-items:center;min-width:0;display:flex}.navbar__items--center{flex:none}.navbar__items--center .navbar__brand{margin:0}.navbar__items--center+.navbar__items--right{flex:1}.navbar__items--right{flex:none;justify-content:flex-end}.navbar__items--right>:last-child{padding-right:0}.navbar__item{padding:var(--ifm-navbar-item-padding-vertical)var(--ifm-navbar-item-padding-horizontal);display:inline-block}.navbar__item.dropdown .navbar__link:not([href]){pointer-events:none}.navbar__link{color:var(--ifm-navbar-link-color);font-weight:var(--ifm-font-weight-semibold)}.navbar__link:hover,.navbar__link--active{color:var(--ifm-navbar-link-hover-color);-webkit-text-decoration:none;text-decoration:none}.navbar--dark,.navbar--primary{--ifm-menu-color:var(--ifm-color-gray-300);--ifm-navbar-link-color:var(--ifm-color-gray-100);--ifm-navbar-search-input-background-color:#ffffff1a;--ifm-navbar-search-input-placeholder-color:#ffffff80;color:var(--ifm-color-white)}.navbar--dark{--ifm-navbar-background-color:#242526;--ifm-navbar-link-hover-color:var(--ifm-color-primary);--ifm-menu-color-background-active:#ffffff0d;--ifm-navbar-search-input-color:var(--ifm-color-white)}.navbar--primary{--ifm-navbar-background-color:var(--ifm-color-primary);--ifm-navbar-link-hover-color:var(--ifm-color-white);--ifm-menu-color-active:var(--ifm-color-white);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-500)}.navbar__search-input{appearance:none;background:var(--ifm-navbar-search-input-background-color)var(--ifm-navbar-search-input-icon)no-repeat .75rem center/1rem 1rem;color:var(--ifm-navbar-search-input-color);cursor:text;border:none;border-radius:2rem;width:12.5rem;height:2rem;padding:0 .5rem 0 2.25rem;font-size:1rem;display:inline-block}.navbar__search-input::placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.navbar-sidebar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-global-shadow-md);opacity:0;visibility:hidden;width:var(--ifm-navbar-sidebar-width);transition-property:opacity,visibility,transform;transition-duration:var(--ifm-transition-fast);transition-timing-function:ease-in-out;position:fixed;top:0;bottom:0;left:0;overflow-x:hidden;transform:translate(-100%)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar--show .navbar-sidebar__backdrop{opacity:1;visibility:visible}.navbar-sidebar--show .navbar-sidebar{transform:translate(0,0)}.navbar-sidebar__backdrop{opacity:0;visibility:hidden;transition-property:opacity,visibility;transition-duration:var(--ifm-transition-fast);background-color:#0009;transition-timing-function:ease-in-out;position:fixed;inset:0}.navbar-sidebar__brand{box-shadow:var(--ifm-navbar-shadow);height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical)var(--ifm-navbar-padding-horizontal);flex:1;align-items:center;display:flex}.navbar-sidebar__items{height:calc(100% - var(--ifm-navbar-height));transition:transform var(--ifm-transition-fast)ease-in-out;display:flex;transform:translateZ(0)}.navbar-sidebar__items--show-secondary{transform:translate3d(calc((var(--ifm-navbar-sidebar-width))*-1),0,0)}.navbar-sidebar__item{width:calc(var(--ifm-navbar-sidebar-width));flex-shrink:0;padding:.5rem}.navbar-sidebar__back{background:var(--ifm-menu-color-background-active);font-size:15px;font-weight:var(--ifm-button-font-weight);text-align:left;width:calc(100% + 1rem);margin:0 0 .2rem -.5rem;padding:.6rem 1.5rem;position:relative;top:-.5rem}.navbar-sidebar__close{margin-left:auto;display:flex}.pagination{column-gap:var(--ifm-pagination-page-spacing);font-size:var(--ifm-pagination-font-size);padding-left:0;display:flex}.pagination--sm{--ifm-pagination-font-size:.8rem;--ifm-pagination-padding-horizontal:.8rem;--ifm-pagination-padding-vertical:.2rem}.pagination--lg{--ifm-pagination-font-size:1.2rem;--ifm-pagination-padding-horizontal:1.2rem;--ifm-pagination-padding-vertical:.3rem}.pagination__item{display:inline-flex}.pagination__item>span{padding:var(--ifm-pagination-padding-vertical)}.pagination__item--active .pagination__link{background:var(--ifm-pagination-item-active-background);color:var(--ifm-pagination-color-active)}.pagination__item:not(.pagination__item--active):hover .pagination__link{background:var(--ifm-pagination-item-active-background)}.pagination__item--disabled,.pagination__item[disabled]{opacity:.25;pointer-events:none}.pagination__link{border-radius:var(--ifm-pagination-border-radius);color:var(--ifm-font-color-base);padding:var(--ifm-pagination-padding-vertical)var(--ifm-pagination-padding-horizontal);transition:background var(--ifm-transition-fast)var(--ifm-transition-timing-default);display:inline-block}.pagination__link:hover{-webkit-text-decoration:none;text-decoration:none}.pagination-nav{grid-gap:var(--ifm-spacing-horizontal);gap:var(--ifm-spacing-horizontal);grid-template-columns:repeat(2,1fr);display:grid}.pagination-nav__link{border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-pagination-nav-border-radius);height:100%;line-height:var(--ifm-heading-line-height);padding:var(--ifm-global-spacing);transition:border-color var(--ifm-transition-fast)var(--ifm-transition-timing-default);display:block}.pagination-nav__link:hover{border-color:var(--ifm-pagination-nav-color-hover);-webkit-text-decoration:none;text-decoration:none}.pagination-nav__link--next{text-align:right;grid-column:2/3}.pagination-nav__label{font-size:var(--ifm-h4-font-size);font-weight:var(--ifm-heading-font-weight);word-break:break-word}.pagination-nav__link--prev .pagination-nav__label:before{content:"« "}.pagination-nav__link--next .pagination-nav__label:after{content:" »"}.pagination-nav__sublabel{color:var(--ifm-color-content-secondary);font-size:var(--ifm-h5-font-size);font-weight:var(--ifm-font-weight-semibold);margin-bottom:.25rem}.pills{gap:var(--ifm-pills-spacing);padding-left:0;display:flex}.pills__item{cursor:pointer;font-weight:var(--ifm-font-weight-bold);transition:background var(--ifm-transition-fast)var(--ifm-transition-timing-default);border-radius:.5rem;padding:.25rem 1rem;display:inline-block}.pills__item--active{background:var(--ifm-pills-color-background-active);color:var(--ifm-pills-color-active)}.pills__item:not(.pills__item--active):hover{background:var(--ifm-pills-color-background-active)}.pills--block{justify-content:stretch}.pills--block .pills__item{text-align:center;flex-grow:1}.tabs{color:var(--ifm-tabs-color);font-weight:var(--ifm-font-weight-bold);margin-bottom:0;padding-left:0;display:flex;overflow-x:auto}.tabs__item{border-radius:var(--ifm-global-radius);cursor:pointer;padding:var(--ifm-tabs-padding-vertical)var(--ifm-tabs-padding-horizontal);transition:background-color var(--ifm-transition-fast)var(--ifm-transition-timing-default);border-bottom:3px solid #0000;display:inline-flex}.tabs__item--active{border-bottom-color:var(--ifm-tabs-color-active-border);color:var(--ifm-tabs-color-active);border-bottom-right-radius:0;border-bottom-left-radius:0}.tabs__item:hover{background-color:var(--ifm-hover-overlay)}.tabs--block{justify-content:stretch}.tabs--block .tabs__item{flex-grow:1;justify-content:center}html[data-theme=dark]{--ifm-color-scheme:dark;--ifm-color-emphasis-0:var(--ifm-color-gray-1000);--ifm-color-emphasis-100:var(--ifm-color-gray-900);--ifm-color-emphasis-200:var(--ifm-color-gray-800);--ifm-color-emphasis-300:var(--ifm-color-gray-700);--ifm-color-emphasis-400:var(--ifm-color-gray-600);--ifm-color-emphasis-500:var(--ifm-color-gray-500);--ifm-color-emphasis-600:var(--ifm-color-gray-400);--ifm-color-emphasis-700:var(--ifm-color-gray-300);--ifm-color-emphasis-800:var(--ifm-color-gray-200);--ifm-color-emphasis-900:var(--ifm-color-gray-100);--ifm-color-emphasis-1000:var(--ifm-color-gray-0);--ifm-background-color:#1b1b1d;--ifm-background-surface-color:#242526;--ifm-hover-overlay:#ffffff0d;--ifm-color-content:#e3e3e3;--ifm-color-content-secondary:#fff;--ifm-breadcrumb-separator-filter:invert(64%)sepia(11%)saturate(0%)hue-rotate(149deg)brightness(99%)contrast(95%);--ifm-code-background:#ffffff1a;--ifm-scrollbar-track-background-color:#444;--ifm-scrollbar-thumb-background-color:#686868;--ifm-scrollbar-thumb-hover-background-color:#7a7a7a;--ifm-table-stripe-background:#ffffff12;--ifm-toc-border-color:var(--ifm-color-emphasis-200);--ifm-color-primary-contrast-background:#102445;--ifm-color-primary-contrast-foreground:#ebf2fc;--ifm-color-secondary-contrast-background:#474748;--ifm-color-secondary-contrast-foreground:#fdfdfe;--ifm-color-success-contrast-background:#003100;--ifm-color-success-contrast-foreground:#e6f6e6;--ifm-color-info-contrast-background:#193c47;--ifm-color-info-contrast-foreground:#eef9fd;--ifm-color-warning-contrast-background:#4d3800;--ifm-color-warning-contrast-foreground:#fff8e6;--ifm-color-danger-contrast-background:#4b1113;--ifm-color-danger-contrast-foreground:#ffebec}@media (width>=1440px){.container{max-width:var(--ifm-container-width-xl)}}@media (width<=996px){.col{--ifm-col-width:100%;flex-basis:var(--ifm-col-width);margin-left:0}.footer{--ifm-footer-padding-horizontal:0}.footer__link-separator{display:none}.footer__col{margin-bottom:calc(var(--ifm-spacing-vertical)*3)}.footer__link-item{width:max-content;display:block}.hero{padding-left:0;padding-right:0}.navbar>.container,.navbar>.container-fluid{padding:0}.navbar__toggle{display:inherit}.navbar__item{display:none}.navbar__search-input{width:9rem}.pills--block,.tabs--block{flex-direction:column}}@media (width<=576px){.markdown h1:first-child{--ifm-h1-font-size:2rem}.markdown>h2{--ifm-h2-font-size:1.5rem}.markdown>h3{--ifm-h3-font-size:1.25rem}}@media (pointer:fine){.thin-scrollbar{scrollbar-width:thin}.thin-scrollbar::-webkit-scrollbar{height:var(--ifm-scrollbar-size);width:var(--ifm-scrollbar-size)}.thin-scrollbar::-webkit-scrollbar-track{background:var(--ifm-scrollbar-track-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb{background:var(--ifm-scrollbar-thumb-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--ifm-scrollbar-thumb-hover-background-color)}}@media (prefers-reduced-motion:reduce){:root{--ifm-transition-fast:0s;--ifm-transition-slow:0s}}@media print{.table-of-contents,.footer,.menu,.navbar,.pagination-nav{display:none}.tabs{page-break-inside:avoid}}}@layer docusaurus.theme-common{body:not(.navigation-with-keyboard) :not(input):focus{outline:none}.themedComponent_hQOn{display:none}[data-theme=light] .themedComponent--light_cpFH,[data-theme=dark] .themedComponent--dark_whA_,html:not([data-theme]) .themedComponent--light_cpFH{display:initial}.errorBoundaryError_ngqA{white-space:pre-wrap;color:red}.errorBoundaryFallback_Df3g{color:red;padding:.55rem}.details_EA15{--docusaurus-details-summary-arrow-size:.38rem;--docusaurus-details-transition:transform .2s ease;--docusaurus-details-decoration-color:grey}.details_EA15>summary{cursor:pointer;padding-left:1rem;list-style:none;position:relative}.details_EA15>summary::-webkit-details-marker{display:none}.details_EA15>summary:before{content:"";border-width:var(--docusaurus-details-summary-arrow-size);border-style:solid;border-color:transparent transparent transparent var(--docusaurus-details-decoration-color);transition:var(--docusaurus-details-transition);transform-origin:calc(var(--docusaurus-details-summary-arrow-size)/2)50%;position:absolute;top:.45rem;left:0;transform:rotate(0)}.details_EA15[open]:not(.isBrowser_PcRV)>summary:before,.details_EA15[data-collapsed=false].isBrowser_PcRV>summary:before{transform:rotate(90deg)}.collapsibleContent_CnTi{border-top:1px solid var(--docusaurus-details-decoration-color);margin-top:1rem;padding-top:1rem}.collapsibleContent_CnTi p:last-child,.details_EA15>summary>p:last-child{margin-bottom:0}}@layer docusaurus.theme-classic{:root{--docusaurus-progress-bar-color:var(--ifm-color-primary)}#nprogress{pointer-events:none}#nprogress .bar{background:var(--docusaurus-progress-bar-color);z-index:1031;width:100%;height:2px;position:fixed;top:0;left:0}#nprogress .peg{width:100px;height:100%;box-shadow:0 0 10px var(--docusaurus-progress-bar-color),0 0 5px var(--docusaurus-progress-bar-color);opacity:1;position:absolute;right:0;transform:rotate(3deg)translateY(-4px)}.skipToContent_TKVD{z-index:calc(var(--ifm-z-index-fixed) + 1);padding:calc(var(--ifm-global-spacing)/2)var(--ifm-global-spacing);color:var(--ifm-color-emphasis-900);background-color:var(--ifm-background-surface-color);position:fixed;top:1rem;left:100%}.skipToContent_TKVD:focus{box-shadow:var(--ifm-global-shadow-md);left:1rem}.closeButton_9IW8{padding:0;line-height:0}.content_sr__{text-align:center;padding:5px 0;font-size:85%}.content_sr__ a{color:inherit;-webkit-text-decoration:underline;text-decoration:underline}:root{--docusaurus-announcement-bar-height:auto}.announcementBar_oqTz{height:var(--docusaurus-announcement-bar-height);background-color:var(--ifm-color-white);color:var(--ifm-color-black);border-bottom:1px solid var(--ifm-color-emphasis-100);align-items:center;display:flex}html[data-announcement-bar-initially-dismissed=true] .announcementBar_oqTz{display:none}.announcementBarPlaceholder_avf_{flex:0 0 10px}.announcementBarClose_dC3Y{flex:0 0 30px;align-self:stretch}.announcementBarContent_t2UY{flex:auto}@media print{.announcementBar_oqTz{display:none}}@media (width>=997px){:root{--docusaurus-announcement-bar-height:30px}.announcementBarPlaceholder_avf_,.announcementBarClose_dC3Y{flex-basis:50px}}.toggle_uYZL{width:2rem;height:2rem}.toggleButton_Wj62{-webkit-tap-highlight-color:transparent;width:100%;height:100%;transition:background var(--ifm-transition-fast);border-radius:50%;justify-content:center;align-items:center;display:flex}.toggleButton_Wj62:hover{background:var(--ifm-color-emphasis-200)}.toggleIcon_YNHb{display:none}[data-theme-choice=system] .systemToggleIcon_x9QH,[data-theme-choice=light] .lightToggleIcon_hIbN,[data-theme-choice=dark] .darkToggleIcon_IQyx{display:initial}.toggleButtonDisabled_A6HD{cursor:not-allowed}.darkNavbarColorModeToggle_NTux:hover{background:var(--ifm-color-gray-800)}.iconExternalLink_mMqu{margin-left:.3rem}.dropdownNavbarItemMobile_zNKG{cursor:pointer}.iconLanguage_edBy{vertical-align:text-bottom;margin-right:5px}.navbarSearchContainer_YWZZ:empty{display:none}@media (width<=996px){.navbarSearchContainer_YWZZ{right:var(--ifm-navbar-padding-horizontal);position:absolute}}@media (width>=997px){.navbarSearchContainer_YWZZ{padding:0 var(--ifm-navbar-item-padding-horizontal)}}.navbarHideable_TI6f{transition:transform var(--ifm-transition-fast)ease}.navbarHidden_gbF5{transform:translateY(calc(-100% - 2px))}@media (width<=996px){.colorModeToggle_bPuK{display:none}}.navbar__items--right>:last-child{padding-right:0}.footerLogoLink_wU1r{opacity:.5;transition:opacity var(--ifm-transition-fast)var(--ifm-transition-timing-default)}.footerLogoLink_wU1r:hover{opacity:1}.anchorWithStickyNavbar_TUrh{scroll-margin-top:calc(var(--ifm-navbar-height) + .5rem)}.anchorWithHideOnScrollNavbar_asqz{scroll-margin-top:.5rem}.hash-link{opacity:0;transition:opacity var(--ifm-transition-fast);-webkit-user-select:none;user-select:none;padding-left:.5rem}.hash-link:before{content:"#"}.hash-link:focus,:hover>.hash-link{opacity:1}html,body{height:100%}.mainWrapper_E2as{flex-direction:column;flex:1 0 auto;display:flex}.docusaurus-mt-lg{margin-top:3rem}#__docusaurus{flex-direction:column;min-height:100%;display:flex}.backToTopButton_C8jb{background-color:var(--ifm-color-emphasis-200);width:3rem;height:3rem;z-index:calc(var(--ifm-z-index-fixed) - 1);box-shadow:var(--ifm-global-shadow-lw);transition:all var(--ifm-transition-fast)var(--ifm-transition-timing-default);opacity:0;visibility:hidden;border-radius:50%;position:fixed;bottom:1.3rem;right:1.3rem;transform:scale(0)}.backToTopButton_C8jb:after{content:" ";-webkit-mask:var(--ifm-menu-link-sublist-icon)50%/2rem 2rem no-repeat;-webkit-mask:var(--ifm-menu-link-sublist-icon)50%/2rem 2rem no-repeat;mask:var(--ifm-menu-link-sublist-icon)50%/2rem 2rem no-repeat;background-color:var(--ifm-color-emphasis-1000);width:100%;height:100%;display:inline-block}@media (hover:hover){.backToTopButton_C8jb:hover{background-color:var(--ifm-color-emphasis-300)}}.backToTopButtonShow_l6vj{opacity:1;visibility:visible;transform:scale(1)}:root{--docusaurus-collapse-button-bg:transparent;--docusaurus-collapse-button-bg-hover:#0000001a}[data-theme=dark]:root{--docusaurus-collapse-button-bg:#ffffff0d;--docusaurus-collapse-button-bg-hover:#ffffff1a}@media (width>=997px){.collapseSidebarButton_YYLQ{background-color:var(--docusaurus-collapse-button-bg);border:1px solid var(--ifm-toc-border-color);border-radius:0;height:40px;position:sticky;bottom:0;display:block!important}.collapseSidebarButtonIcon_sZTw{margin-top:4px;transform:rotate(180deg)}[dir=rtl] .collapseSidebarButtonIcon_sZTw{transform:rotate(0)}.collapseSidebarButton_YYLQ:hover,.collapseSidebarButton_YYLQ:focus{background-color:var(--docusaurus-collapse-button-bg-hover)}}.collapseSidebarButton_YYLQ{margin:0;display:none}.menuExternalLink_mBix{align-items:center}.linkLabel_THKR{line-clamp:2;-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.categoryLink_m86C{overflow:hidden}.menu__link--sublist-caret:after{margin-left:var(--ifm-menu-link-padding-vertical)}.categoryLinkLabel_gwYM{line-clamp:2;-webkit-line-clamp:2;-webkit-box-orient:vertical;flex:1;display:-webkit-box;overflow:hidden}@media (width>=997px){.menuHtmlItem_hBx7{padding:var(--ifm-menu-link-padding-vertical)var(--ifm-menu-link-padding-horizontal)}.menu_cdbq{flex-grow:1;padding:.5rem}@supports (scrollbar-gutter:stable){.menu_cdbq{scrollbar-gutter:stable;padding:.5rem 0 .5rem .5rem}}.menuWithAnnouncementBar_GcyL{margin-bottom:var(--docusaurus-announcement-bar-height)}.sidebar_mbPS{height:100%;padding-top:var(--ifm-navbar-height);width:var(--doc-sidebar-width);flex-direction:column;display:flex}.sidebarWithHideableNavbar_jdTO{padding-top:0}.sidebarHidden_UNPX{opacity:0;visibility:hidden}.sidebarLogo_GIJc{margin:0 var(--ifm-navbar-padding-horizontal);min-height:var(--ifm-navbar-height);max-height:var(--ifm-navbar-height);align-items:center;color:inherit!important;-webkit-text-decoration:none!important;text-decoration:none!important;display:flex!important}.sidebarLogo_GIJc img{height:2rem;margin-right:.5rem}}.sidebarLogo_GIJc{display:none}@media (width>=997px){.expandButton_Ldoy{width:100%;height:100%;transition:background-color var(--ifm-transition-fast)ease;background-color:var(--docusaurus-collapse-button-bg);justify-content:center;align-items:center;display:flex;position:absolute;top:0;right:0}.expandButton_Ldoy:hover,.expandButton_Ldoy:focus{background-color:var(--docusaurus-collapse-button-bg-hover)}.expandButtonIcon_jufZ{transform:rotate(0)}[dir=rtl] .expandButtonIcon_jufZ{transform:rotate(180deg)}}:root{--doc-sidebar-width:300px;--doc-sidebar-hidden-width:30px}.docSidebarContainer_akt7{display:none}@media (width>=997px){.docSidebarContainer_akt7{width:var(--doc-sidebar-width);margin-top:calc(-1*var(--ifm-navbar-height));border-right:1px solid var(--ifm-toc-border-color);will-change:width;transition:width var(--ifm-transition-fast)ease;clip-path:inset(0);display:block}.docSidebarContainerHidden_FSxR{width:var(--doc-sidebar-hidden-width);cursor:pointer}.sidebarViewport__oqk{height:100%;max-height:100vh;position:sticky;top:0}}.docMainContainer_Aig4{width:100%;display:flex}@media (width>=997px){.docMainContainer_Aig4{max-width:calc(100% - var(--doc-sidebar-width));flex-grow:1}.docMainContainerEnhanced_sLKf{max-width:calc(100% - var(--doc-sidebar-hidden-width))}.docItemWrapperEnhanced_XrWj{max-width:calc(var(--ifm-container-width) + var(--doc-sidebar-width))!important}}.docRoot_qfDj{width:100%;display:flex}.docsWrapper_helv{flex:1 0 auto;display:flex}:root{--docusaurus-tag-list-border:var(--ifm-color-emphasis-300)}.tag_Pkja{border:1px solid var(--docusaurus-tag-list-border);transition:border var(--ifm-transition-fast)}.tag_Pkja:hover{--docusaurus-tag-list-border:var(--ifm-link-color);-webkit-text-decoration:none;text-decoration:none}.tagRegular_DBv2{border-radius:var(--ifm-global-radius);padding:.2rem .5rem .3rem;font-size:90%}.tagWithCount_mYGj{border-left:0;align-items:center;padding:0 .5rem 0 1rem;display:flex;position:relative}.tagWithCount_mYGj:before,.tagWithCount_mYGj:after{content:"";border:1px solid var(--docusaurus-tag-list-border);transition:inherit;position:absolute;top:50%}.tagWithCount_mYGj:before{border-bottom:0;border-right:0;width:1.18rem;height:1.18rem;right:100%;transform:translate(50%,-50%)rotate(-45deg)}.tagWithCount_mYGj:after{border-radius:50%;width:.5rem;height:.5rem;left:0;transform:translateY(-50%)}.tagWithCount_mYGj span{background:var(--ifm-color-secondary);color:var(--ifm-color-black);border-radius:var(--ifm-global-radius);margin-left:.3rem;padding:.1rem .4rem;font-size:.7rem;line-height:1.2}.tags_C39N{display:inline}.tag_VoFo{margin:0 .4rem .5rem 0;display:inline-block}.docCardListItem_Sndl{margin-bottom:2rem}.docCardListItem_Sndl>*{height:100%}.codeBlockContainer_pOyF{background:var(--prism-background-color);color:var(--prism-color);margin-bottom:var(--ifm-leading);box-shadow:var(--ifm-global-shadow-lw);border-radius:var(--ifm-code-border-radius)}.codeBlock_mQyU{--ifm-pre-background:var(--prism-background-color);margin:0;padding:0}.codeBlockStandalone_ItTG{padding:0}.codeBlockLines_oRU6{font:inherit;float:left;min-width:100%;padding:var(--ifm-pre-padding)}.codeBlockLinesWithNumbering_TKEe{padding:var(--ifm-pre-padding)0;display:table}@media print{.codeBlockLines_oRU6{white-space:pre-wrap}}:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.codeLine_DqHm{counter-increment:line-count;display:table-row}.codeLineNumber_X_4F{text-align:right;width:1%;padding:0 var(--ifm-pre-padding);background:var(--ifm-pre-background);overflow-wrap:normal;display:table-cell;position:sticky;left:0}.codeLineNumber_X_4F:before{content:counter(line-count);opacity:.4}.theme-code-block-highlighted-line .codeLineNumber_X_4F:before{opacity:.8}.codeLineContent_qnBq{padding-right:var(--ifm-pre-padding)}.theme-code-block:hover .copyButtonCopied_ue1Z{opacity:1!important}.copyButtonIcons_C_uL{width:1.125rem;height:1.125rem;position:relative}.copyButtonIcon_nrDZ,.copyButtonSuccessIcon__n5M{fill:currentColor;opacity:inherit;width:inherit;height:inherit;transition:all var(--ifm-transition-fast)ease;position:absolute;top:0;left:0}.copyButtonSuccessIcon__n5M{opacity:0;color:#00d600;top:50%;left:50%;transform:translate(-50%,-50%)scale(.33)}.copyButtonCopied_ue1Z .copyButtonIcon_nrDZ{opacity:0;transform:scale(.33)}.copyButtonCopied_ue1Z .copyButtonSuccessIcon__n5M{opacity:1;transition-delay:75ms;transform:translate(-50%,-50%)scale(1)}.wordWrapButtonIcon_BhX8{width:1.2rem;height:1.2rem}.wordWrapButtonEnabled_e1RO .wordWrapButtonIcon_BhX8{color:var(--ifm-color-primary)}.buttonGroup_mbYt{right:calc(var(--ifm-pre-padding)/2);top:calc(var(--ifm-pre-padding)/2);column-gap:.2rem;display:flex;position:absolute}.buttonGroup_mbYt button{background:var(--prism-background-color);color:var(--prism-color);border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-global-radius);transition:opacity var(--ifm-transition-fast)ease-in-out;opacity:0;align-items:center;padding:.4rem;line-height:0;display:flex}.buttonGroup_mbYt button:focus-visible,.buttonGroup_mbYt button:hover{opacity:1!important}.theme-code-block:hover .buttonGroup_mbYt button{opacity:.4}.codeBlockContent_OnWH{border-radius:inherit;direction:ltr;position:relative}.codeBlockTitle_V4Zd{border-bottom:1px solid var(--ifm-color-emphasis-300);font-size:var(--ifm-code-font-size);padding:.75rem var(--ifm-pre-padding);border-top-left-radius:inherit;border-top-right-radius:inherit;font-weight:500}.codeBlockTitle_V4Zd+.codeBlockContent_OnWH .codeBlock_KN1Z{border-top-left-radius:0;border-top-right-radius:0}.footnoteRefStickyNavbar_OlTD{scroll-margin-top:calc(var(--ifm-navbar-height) + .5rem)}.footnoteRefHideOnScrollNavbar_sQeA{scroll-margin-top:.5rem}.details_a6l6{--docusaurus-details-decoration-color:var(--ifm-alert-border-color);--docusaurus-details-transition:transform var(--ifm-transition-fast)ease;margin:0 0 var(--ifm-spacing-vertical);border:1px solid var(--ifm-alert-border-color)}.containsTaskList_VhjW{list-style:none}:not(.containsTaskList_VhjW>li)>.containsTaskList_VhjW{padding-left:0}.iconEdit_CuGa{vertical-align:sub;margin-right:.3em}.img_m1Wr{height:auto}.lastUpdated_h4bd{margin-top:.2rem;font-size:smaller;font-style:italic}@media (width>=997px){.lastUpdated_h4bd{text-align:right}}.tocCollapsibleButton_c5np{font-size:inherit;justify-content:space-between;align-items:center;width:100%;padding:.4rem .8rem;display:flex}.tocCollapsibleButton_c5np:after{content:"";background:var(--ifm-menu-link-sublist-icon)50% 50%/2rem 2rem no-repeat;filter:var(--ifm-menu-link-sublist-icon-filter);width:1.25rem;height:1.25rem;transition:transform var(--ifm-transition-fast);transform:rotate(180deg)}.tocCollapsibleButtonExpanded_rDQM:after{transform:none}.tocCollapsible_xgee{background-color:var(--ifm-menu-color-background-active);border-radius:var(--ifm-global-radius);margin:1rem 0}.tocCollapsibleContent_dVug>ul{border-left:none;border-top:1px solid var(--ifm-color-emphasis-300);padding:.2rem 0;font-size:15px}.tocCollapsibleContent_dVug ul li{margin:.4rem .8rem}.tocCollapsibleContent_dVug a{display:block}.tocCollapsibleExpanded_pTmQ{transform:none}@media (width>=997px){.tocMobile_JnGb{display:none}}@media print{.tocMobile_JnGb{display:none}}.admonition_AUqJ{margin-bottom:1em}.admonitionHeading_V_Ab{font:var(--ifm-heading-font-weight)var(--ifm-h5-font-size)/var(--ifm-heading-line-height)var(--ifm-heading-font-family);text-transform:uppercase}.admonitionHeading_V_Ab:not(:last-child){margin-bottom:.3rem}.admonitionHeading_V_Ab code{text-transform:none}.admonitionIcon_ZQS8{vertical-align:middle;margin-right:.4em;display:inline-block}.admonitionIcon_ZQS8 svg{width:1.6em;height:1.6em;fill:var(--ifm-alert-foreground-color);display:inline-block}.admonitionContent_ISwi>:last-child{margin-bottom:0}.tabList_MlhV{margin-bottom:var(--ifm-leading)}.tabItem_Rn5s{margin-top:0!important}.tabItem_Jyrm>:last-child{margin-bottom:0}.tableOfContents_rhgf{max-height:calc(100vh - (var(--ifm-navbar-height) + 2rem));top:calc(var(--ifm-navbar-height) + 1rem);position:sticky;overflow-y:auto}@media (width<=996px){.tableOfContents_rhgf{display:none}.docItemContainer_UrJX{padding:0 .3rem}}.mdxPageWrapper_E3BN{justify-content:center}.breadcrumbHomeIcon_u_XA{vertical-align:top;width:1.1rem;height:1.1rem;position:relative;top:1px}.breadcrumbsContainer_rdSc{--ifm-breadcrumb-size-multiplier:.8;margin-bottom:.8rem}.docItemContainer_jIg7 header+*,.docItemContainer_jIg7 article>:first-child{margin-top:0}@media (width>=997px){.docItemCol_rdr9,.generatedIndexPage_Elzq{max-width:75%!important}}.title_CPuW{--ifm-h1-font-size:3rem;margin-bottom:calc(1.25*var(--ifm-leading))}}@layer docusaurus.core{#__docusaurus-base-url-issue-banner-container{display:none}}@layer docusaurus.plugin-debug,docusaurus.theme-mermaid,docusaurus.theme-live-codeblock,docusaurus.theme-search-algolia.docsearch,docusaurus.theme-search-algolia;:root{--ifm-color-primary:#4dacff;--ifm-color-primary-dark:#4dacff;--ifm-color-primary-darker:#4dacff;--ifm-color-primary-darkest:#4dacff;--ifm-color-primary-light:#4dacff;--ifm-color-primary-lighter:#4dacff;--ifm-color-primary-lightest:#4dacff;--ifm-code-font-size:95%;--docusaurus-highlighted-code-line-bg:#0000001a}[data-theme=dark]{--ifm-color-primary:#4dacff;--ifm-color-primary-dark:#4dacff;--ifm-color-primary-darker:#4dacff;--ifm-color-primary-darkest:#4dacff;--ifm-color-primary-light:#4dacff;--ifm-color-primary-lighter:#4dacff;--ifm-color-primary-lightest:#4dacff;--docusaurus-highlighted-code-line-bg:#0000004d}img{width:auto;height:auto}img[alt=WIDTH]{width:260px}img[alt=HEIGHT]{width:200px}img[alt=MARGIN]{width:180px}img[alt=PADDING],img[alt=BACKCOLOR],img[alt=TEXTCOLOR],img[alt=BORDERCOLOR]{width:200px}img[alt=RAW]{width:180px}img[alt=SUBSETTING]{width:360px}img[alt=NAMED_WIDGET],img[alt=VERTICAL],img[alt=VERTICALBOX]{width:200px}img[alt=HORIZONTAL]{width:500px}img[alt=HORIZONTALBOX]{width:200px}img[alt=MATRIXBYCOLUMNS]{width:220px}img[alt=SCROLLWINDOW]{width:180px}img[alt=TABITEM]{width:200px}img[alt=IFRAME]{width:800px}img[alt=LABEL]{width:220px}img[alt=HORIZONTALLINE],img[alt=TITLE],img[alt=SPACER]{width:180px}img[alt=ARRAYPLOT]{width:600px}img[alt=ARRAY]{width:220px}img[alt=BLOCK]{width:500px}img[alt=FORMATVALUE]{width:200px}img[alt=LABELLED]{width:180px}img[alt=LABELPROGRESSBAR]{width:320px}img[alt=LABELVALUE],img[alt=LABELVALUEDESC]{width:300px}img[alt=LABELVALUELIMITSCOLUMN]{width:180px}img[alt=LABELVALUERANGEBAR]{width:500px}img[alt=LED],img[alt=LIMITSBAR],img[alt=LIMITSCOLUMN]{width:200px}img[alt=LIMITSCOLOR]{width:220px}img[alt=VALUELIMITSBAR]{width:300px}img[alt=VALUELIMITSCOLUMN]{width:180px}img[alt=VALUERANGEBAR]{width:220px}img[alt=LINEGRAPH],img[alt=SPARKLINE]{width:400px}img[alt=LABELSPARKLINE],img[alt=IMAGEVIEWER],img[alt=PROGRESSBAR],img[alt=RANGEBAR],img[alt=ROLLUP],img[alt=SIGNAL],img[alt=TEXTBOX],img[alt=VALUE],img[alt=BUTTON],img[alt=CHECKBUTTON],img[alt=COMBOBOX],img[alt=DATE],img[alt=RADIOBUTTON],img[alt=TEXTFIELD],img[alt=TIME],img[alt=CANVASLABEL]{width:200px}img[alt=CANVASLABELVALUE],img[alt=CANVASIMAGE],img[alt=CANVASIMAGEVALUE]{width:220px}img[alt=CANVASLINE],img[alt=CANVASLINEVALUE],img[alt=CANVASDOT]{width:200px}.ds-dropdown-menu{max-height:80vh;overflow-y:auto}.features_t9lD{align-items:center;width:100%;padding:2rem 0;display:flex}.featureSvg_GfXr{width:200px;height:200px}.heroBanner_qdFl{text-align:center;padding:4rem 0;position:relative;overflow:hidden}@media screen and (width<=996px){.heroBanner_qdFl{padding:2rem}}.buttons_AeoN{justify-content:center;align-items:center;display:flex}.cardContainer_S8oU{--ifm-link-color:var(--ifm-color-emphasis-800);--ifm-link-hover-color:var(--ifm-color-emphasis-700);--ifm-link-hover-decoration:none;border:1px solid var(--ifm-color-emphasis-200);transition:all var(--ifm-transition-fast)ease;transition-property:border,box-shadow;box-shadow:0 1.5px 3px #00000026}.cardContainer_S8oU:hover{border-color:var(--ifm-color-primary);box-shadow:0 3px 6px #0003}.cardContainer_S8oU :last-child{margin-bottom:0}.cardTitle_HoSo{font-size:1.2rem}.cardDescription_c27F{font-size:.8rem}.algolia-docsearch-suggestion{border-bottom-color:#3a3dd1}.algolia-docsearch-suggestion--category-header{background-color:#4b54de}.algolia-docsearch-suggestion--highlight{color:#3a33d1}.algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--highlight{background-color:#4d47d5}.aa-cursor .algolia-docsearch-suggestion--content{color:#272296}.aa-cursor .algolia-docsearch-suggestion{background:#ebebfb}@media (width>=768px){.algolia-docsearch-suggestion{border-bottom-color:#7671df}.algolia-docsearch-suggestion--subcategory-column{color:#4e4726;border-right-color:#7671df}}.searchbox{white-space:nowrap;box-sizing:border-box;width:200px;display:inline-block;position:relative;visibility:visible!important;height:32px!important}.searchbox .algolia-autocomplete{width:100%;height:100%;display:block}.searchbox__wrapper{z-index:999;width:100%;height:100%;position:relative}.searchbox__input{box-sizing:border-box;vertical-align:middle;white-space:normal;appearance:none;border:0;border-radius:16px;width:100%;height:100%;padding:0 26px 0 32px;font-size:12px;transition:box-shadow .4s,background .4s;display:inline-block;box-shadow:inset 0 0 0 1px #ccc;background:#fff!important}.searchbox__input::-webkit-search-decoration{display:none}.searchbox__input::-webkit-search-cancel-button{display:none}.searchbox__input::-webkit-search-results-button{display:none}.searchbox__input::-webkit-search-results-decoration{display:none}.searchbox__input:hover{box-shadow:inset 0 0 0 1px #b3b3b3}.searchbox__input:focus,.searchbox__input:active{background:#fff;outline:0;box-shadow:inset 0 0 0 1px #aaa}.searchbox__input::placeholder{color:#aaa}.searchbox__submit{vertical-align:middle;text-align:center;width:32px;height:100%;font-size:inherit;-webkit-user-select:none;user-select:none;top:0;right:inherit;background-color:#458ee100;border:0;border-radius:16px 0 0 16px;margin:0;padding:0;position:absolute;left:0}.searchbox__submit:before{vertical-align:middle;content:"";height:100%;margin-right:-4px;display:inline-block}.searchbox__submit:hover,.searchbox__submit:active{cursor:pointer}.searchbox__submit:focus{outline:0}.searchbox__submit svg{vertical-align:middle;fill:#6d7e96;width:14px;height:14px}.searchbox__reset{cursor:pointer;font-size:inherit;-webkit-user-select:none;user-select:none;fill:#00000080;background:0 0;border:0;margin:0;padding:0;display:block;position:absolute;top:8px;right:8px}.searchbox__reset.hide{display:none}.searchbox__reset:focus{outline:0}.searchbox__reset svg{width:8px;height:8px;margin:4px;display:block}.searchbox__input:valid~.searchbox__reset{animation-name:sbx-reset-in;animation-duration:.15s;display:block}@keyframes sbx-reset-in{0%{opacity:0;transform:translate(-20%)}to{opacity:1;transform:none}}.algolia-autocomplete .ds-dropdown-menu:before{content:"";z-index:1000;background:#373940;border-top:1px solid #373940;border-right:1px solid #373940;border-radius:2px;width:14px;height:14px;display:block;position:absolute;top:-7px;transform:rotate(-45deg)}.algolia-autocomplete .ds-dropdown-menu{box-shadow:0 1px #0003,0 2px 3px #0000001a}@media (width>=601px){.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu{right:0!important;left:inherit!important}.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu:before{right:48px}.algolia-autocomplete .ds-dropdown-menu{text-align:left;z-index:999;background:0 0;border:none;border-radius:4px;min-width:500px;max-width:600px;height:auto;margin:6px 0 0;padding:0;position:relative;top:-6px}}@media (width<=600px){.algolia-autocomplete .ds-dropdown-menu{z-index:100;width:600px;max-width:calc(100% - 2rem);max-height:calc(100% - 5rem);display:block;position:fixed!important;top:50px!important;left:auto!important;right:1rem!important}.algolia-autocomplete .ds-dropdown-menu:before{right:6rem}}.algolia-autocomplete .ds-dropdown-menu .ds-suggestions{z-index:1000;position:relative}.algolia-autocomplete .ds-dropdown-menu .ds-suggestion{cursor:pointer}.algolia-autocomplete .ds-dropdown-menu [class^=ds-dataset-]{background:#fff;border-radius:4px;padding:0;position:relative;overflow:auto}.algolia-autocomplete .ds-dropdown-menu *{box-sizing:border-box}.algolia-autocomplete .algolia-docsearch-suggestion{padding:0;-webkit-text-decoration:none;text-decoration:none;display:block;position:relative;overflow:hidden}.algolia-autocomplete .ds-cursor .algolia-docsearch-suggestion--wrapper{background:#f1f1f1;box-shadow:inset -2px 0 #61dafb}.algolia-autocomplete .algolia-docsearch-suggestion--highlight{background:#ffe564;padding:.1em .05em}.algolia-autocomplete .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--category-header-lvl0 .algolia-docsearch-suggestion--highlight,.algolia-autocomplete .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--category-header-lvl1 .algolia-docsearch-suggestion--highlight{color:inherit;background:inherit}.algolia-autocomplete .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight{background:inherit;color:inherit;padding:0 0 1px;box-shadow:inset 0 -2px #458ee1cc}.algolia-autocomplete .algolia-docsearch-suggestion--content{float:right;cursor:pointer;width:70%;padding:5.33333px 0 5.33333px 10.6667px;display:block;position:relative}.algolia-autocomplete .algolia-docsearch-suggestion--content:before{content:"";background:#ececec;width:1px;height:100%;display:block;position:absolute;top:0;left:-1px}.algolia-autocomplete .algolia-docsearch-suggestion--category-header{letter-spacing:.08em;text-transform:uppercase;color:#fff;background-color:#373940;margin:0;padding:5px 8px;font-size:14px;font-weight:700;display:none;position:relative}.algolia-autocomplete .algolia-docsearch-suggestion--wrapper{float:left;background-color:#fff;width:100%;padding:8px 0 0}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column{float:left;text-align:right;color:#777;word-wrap:break-word;width:30%;padding:5.33333px 10.6667px;font-size:.9em;display:none;position:relative}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column:before{content:"";background:#ececec;width:1px;height:100%;display:block;position:absolute;top:0;right:0}.algolia-autocomplete .algolia-docsearch-suggestion.algolia-docsearch-suggestion__main .algolia-docsearch-suggestion--category-header,.algolia-autocomplete .algolia-docsearch-suggestion.algolia-docsearch-suggestion__secondary{display:block}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column .algolia-docsearch-suggestion--highlight{background-color:inherit;color:inherit}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-inline{display:none}.algolia-autocomplete .algolia-docsearch-suggestion--title{color:#02060c;margin-bottom:4px;font-size:.9em;font-weight:700}.algolia-autocomplete .algolia-docsearch-suggestion--text{color:#63676d;padding-right:2px;font-size:.85em;line-height:1.2em;display:block}.algolia-autocomplete .algolia-docsearch-suggestion--version{color:#a6aab1;padding-top:2px;padding-right:2px;font-size:.65em;display:block}.algolia-autocomplete .algolia-docsearch-suggestion--no-results{text-align:center;background-color:#373940;width:100%;margin-top:-8px;padding:8px 0;font-size:1.2em}.algolia-autocomplete .algolia-docsearch-suggestion--no-results .algolia-docsearch-suggestion--text{color:#fff;margin-top:4px}.algolia-autocomplete .algolia-docsearch-suggestion--no-results:before{display:none}.algolia-autocomplete .algolia-docsearch-suggestion code{color:#222;background-color:#ebebeb;border:none;border-radius:3px;padding:1px 5px;font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace;font-size:90%}.algolia-autocomplete .algolia-docsearch-suggestion code .algolia-docsearch-suggestion--highlight{background:0 0}.algolia-autocomplete .algolia-docsearch-suggestion.algolia-docsearch-suggestion__main .algolia-docsearch-suggestion--category-header{color:#fff;display:block}.algolia-autocomplete .algolia-docsearch-suggestion.algolia-docsearch-suggestion__secondary .algolia-docsearch-suggestion--subcategory-column{display:block}.algolia-autocomplete .algolia-docsearch-footer{z-index:2000;float:right;background-color:#fff;width:100%;height:30px;font-size:0;line-height:0}.algolia-autocomplete .algolia-docsearch-footer--logo{text-indent:-9000px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 130 18'%3E%3Cdefs%3E%3ClinearGradient id='a' x1='-36.87%25' x2='129.43%25' y1='134.94%25' y2='-27.7%25'%3E%3Cstop stop-color='%252300AEFF' offset='0%25'/%3E%3Cstop stop-color='%25233369E7' offset='100%25'/%3E%3C/linearGradient%3E%3C/defs%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath fill='url(%2523a)' d='M59.4.02h13.3a2.37 2.37 0 0 1 2.38 2.37V15.6a2.37 2.37 0 0 1-2.38 2.36H59.4a2.37 2.37 0 0 1-2.38-2.36V2.38A2.37 2.37 0 0 1 59.4.02z'/%3E%3Cpath fill='%2523FFF' d='M66.26 4.56c-2.82 0-5.1 2.27-5.1 5.08 0 2.8 2.28 5.07 5.1 5.07 2.8 0 5.1-2.26 5.1-5.07 0-2.8-2.28-5.07-5.1-5.07zm0 8.65c-2 0-3.6-1.6-3.6-3.56 0-1.97 1.6-3.58 3.6-3.58 1.98 0 3.6 1.6 3.6 3.58a3.58 3.58 0 0 1-3.6 3.57zm0-6.4v2.66c0 .07.08.13.15.1l2.4-1.24c.04-.02.06-.1.03-.14a2.96 2.96 0 0 0-2.46-1.5c-.06 0-.1.05-.1.1zm-3.33-1.96l-.3-.3a.78.78 0 0 0-1.12 0l-.36.36a.77.77 0 0 0 0 1.1l.3.3c.05.05.13.04.17 0 .2-.25.4-.5.6-.7.23-.23.46-.43.7-.6.07-.04.07-.1.03-.16zm5-.8V3.4a.78.78 0 0 0-.78-.78h-1.83a.78.78 0 0 0-.78.78v.63c0 .07.06.12.14.1a5.74 5.74 0 0 1 1.58-.22c.52 0 1.04.07 1.54.2a.1.1 0 0 0 .13-.1z'/%3E%3Cpath fill='%2523182359' d='M102.16 13.76c0 1.46-.37 2.52-1.12 3.2-.75.67-1.9 1-3.44 1-.56 0-1.74-.1-2.67-.3l.34-1.7c.78.17 1.82.2 2.36.2.86 0 1.48-.16 1.84-.5.37-.36.55-.88.55-1.57v-.35a6.37 6.37 0 0 1-.84.3 4.15 4.15 0 0 1-1.2.17 4.5 4.5 0 0 1-1.6-.28 3.38 3.38 0 0 1-1.26-.82 3.74 3.74 0 0 1-.8-1.35c-.2-.54-.3-1.5-.3-2.2 0-.67.1-1.5.3-2.06a3.92 3.92 0 0 1 .9-1.43 4.12 4.12 0 0 1 1.45-.92 5.3 5.3 0 0 1 1.94-.37c.7 0 1.35.1 1.97.2a15.86 15.86 0 0 1 1.6.33v8.46zm-5.95-4.2c0 .9.2 1.88.6 2.3.4.4.9.62 1.53.62.34 0 .66-.05.96-.15a2.75 2.75 0 0 0 .73-.33V6.7a8.53 8.53 0 0 0-1.42-.17c-.76-.02-1.36.3-1.77.8-.4.5-.62 1.4-.62 2.23zm16.13 0c0 .72-.1 1.26-.32 1.85a4.4 4.4 0 0 1-.9 1.53c-.38.42-.85.75-1.4.98-.54.24-1.4.37-1.8.37-.43 0-1.27-.13-1.8-.36a4.1 4.1 0 0 1-1.4-.97 4.5 4.5 0 0 1-.92-1.52 5.04 5.04 0 0 1-.33-1.84c0-.72.1-1.4.32-2 .22-.6.53-1.1.92-1.5.4-.43.86-.75 1.4-.98a4.55 4.55 0 0 1 1.78-.34 4.7 4.7 0 0 1 1.8.34c.54.23 1 .55 1.4.97.38.42.68.92.9 1.5.23.6.35 1.3.35 2zm-2.2 0c0-.92-.2-1.7-.6-2.22-.38-.54-.94-.8-1.64-.8-.72 0-1.27.26-1.67.8-.4.54-.58 1.3-.58 2.22 0 .93.2 1.56.6 2.1.38.54.94.8 1.64.8s1.25-.26 1.65-.8c.4-.55.6-1.17.6-2.1zm6.97 4.7c-3.5.02-3.5-2.8-3.5-3.27L113.57.92l2.15-.34v10c0 .25 0 1.87 1.37 1.88v1.8zm3.77 0h-2.15v-9.2l2.15-.33v9.54zM119.8 3.74c.7 0 1.3-.58 1.3-1.3 0-.7-.58-1.3-1.3-1.3-.73 0-1.3.6-1.3 1.3 0 .72.58 1.3 1.3 1.3zm6.43 1c.7 0 1.3.1 1.78.27.5.18.88.42 1.17.73.28.3.5.74.6 1.18.13.46.2.95.2 1.5v5.47a25.24 25.24 0 0 1-1.5.25c-.67.1-1.42.15-2.25.15a6.83 6.83 0 0 1-1.52-.16 3.2 3.2 0 0 1-1.18-.5 2.46 2.46 0 0 1-.76-.9c-.18-.37-.27-.9-.27-1.44 0-.52.1-.85.3-1.2.2-.37.48-.67.83-.9a3.6 3.6 0 0 1 1.23-.5 7.07 7.07 0 0 1 2.2-.1l.83.16v-.35c0-.25-.03-.48-.1-.7a1.5 1.5 0 0 0-.3-.58c-.15-.18-.34-.3-.58-.4a2.54 2.54 0 0 0-.92-.17c-.5 0-.94.06-1.35.13-.4.08-.75.16-1 .25l-.27-1.74c.27-.1.67-.18 1.2-.28a9.34 9.34 0 0 1 1.65-.14zm.18 7.74c.66 0 1.15-.04 1.5-.1V10.2a5.1 5.1 0 0 0-2-.1c-.23.03-.45.1-.64.2a1.17 1.17 0 0 0-.47.38c-.13.17-.18.26-.18.52 0 .5.17.8.5.98.32.2.74.3 1.3.3zM84.1 4.8c.72 0 1.3.08 1.8.26.48.17.87.42 1.15.73.3.3.5.72.6 1.17.14.45.2.94.2 1.47v5.48a25.24 25.24 0 0 1-1.5.26c-.67.1-1.42.14-2.25.14a6.83 6.83 0 0 1-1.52-.16 3.2 3.2 0 0 1-1.18-.5 2.46 2.46 0 0 1-.76-.9c-.18-.38-.27-.9-.27-1.44 0-.53.1-.86.3-1.22.2-.36.5-.65.84-.88a3.6 3.6 0 0 1 1.24-.5 7.07 7.07 0 0 1 2.2-.1c.26.03.54.08.84.15v-.35c0-.24-.03-.48-.1-.7a1.5 1.5 0 0 0-.3-.58c-.15-.17-.34-.3-.58-.4a2.54 2.54 0 0 0-.9-.15c-.5 0-.96.05-1.37.12-.4.07-.75.15-1 .24l-.26-1.75c.27-.08.67-.17 1.18-.26a8.9 8.9 0 0 1 1.66-.15zm.2 7.73c.65 0 1.14-.04 1.48-.1v-2.17a5.1 5.1 0 0 0-1.98-.1c-.24.03-.46.1-.65.18a1.17 1.17 0 0 0-.47.4c-.12.17-.17.26-.17.52 0 .5.18.8.5.98.32.2.75.3 1.3.3zm8.68 1.74c-3.5 0-3.5-2.82-3.5-3.28L89.45.92 91.6.6v10c0 .25 0 1.87 1.38 1.88v1.8z'/%3E%3Cpath fill='%25231D3657' d='M5.03 11.03c0 .7-.26 1.24-.76 1.64-.5.4-1.2.6-2.1.6-.88 0-1.6-.14-2.17-.42v-1.2c.36.16.74.3 1.14.38.4.1.78.15 1.13.15.5 0 .88-.1 1.12-.3a.94.94 0 0 0 .35-.77.98.98 0 0 0-.33-.74c-.22-.2-.68-.44-1.37-.72-.72-.3-1.22-.62-1.52-1C.23 8.27.1 7.82.1 7.3c0-.65.22-1.17.7-1.55.46-.37 1.08-.56 1.86-.56.76 0 1.5.16 2.25.48l-.4 1.05c-.7-.3-1.32-.44-1.87-.44-.4 0-.73.08-.94.26a.9.9 0 0 0-.33.72c0 .2.04.38.12.52.08.15.22.3.42.4.2.14.55.3 1.06.52.58.24 1 .47 1.27.67.27.2.47.44.6.7.12.26.18.57.18.92zM9 13.27c-.92 0-1.64-.27-2.16-.8-.52-.55-.78-1.3-.78-2.24 0-.97.24-1.73.72-2.3.5-.54 1.15-.82 2-.82.78 0 1.4.25 1.85.72.46.48.7 1.14.7 1.97v.67H7.35c0 .58.17 1.02.46 1.33.3.3.7.47 1.24.47.36 0 .68-.04.98-.1a5.1 5.1 0 0 0 .98-.33v1.02a3.87 3.87 0 0 1-.94.32 5.72 5.72 0 0 1-1.08.1zm-.22-5.2c-.4 0-.73.12-.97.38s-.37.62-.42 1.1h2.7c0-.48-.13-.85-.36-1.1-.23-.26-.54-.38-.94-.38zm7.7 5.1l-.26-.84h-.05c-.28.36-.57.6-.86.74-.28.13-.65.2-1.1.2-.6 0-1.05-.16-1.38-.48-.32-.32-.5-.77-.5-1.34 0-.62.24-1.08.7-1.4.45-.3 1.14-.47 2.07-.5l1.02-.03V9.2c0-.37-.1-.65-.27-.84-.17-.2-.45-.28-.82-.28-.3 0-.6.04-.88.13a6.68 6.68 0 0 0-.8.33l-.4-.9a4.4 4.4 0 0 1 1.05-.4 4.86 4.86 0 0 1 1.08-.12c.76 0 1.33.18 1.7.5.4.33.6.85.6 1.56v4h-.9zm-1.9-.87c.47 0 .83-.13 1.1-.38.3-.26.43-.62.43-1.08v-.52l-.76.03c-.6.03-1.02.13-1.3.3s-.4.45-.4.82c0 .26.08.47.24.6.16.16.4.23.7.23zm7.57-5.2c.25 0 .46.03.62.06l-.12 1.18a2.38 2.38 0 0 0-.56-.06c-.5 0-.92.16-1.24.5-.3.32-.47.75-.47 1.27v3.1h-1.27V7.23h1l.16 1.05h.05c.2-.36.45-.64.77-.85a1.83 1.83 0 0 1 1.02-.3zm4.12 6.17c-.9 0-1.58-.27-2.05-.8-.47-.52-.7-1.27-.7-2.25 0-1 .24-1.77.73-2.3.5-.54 1.2-.8 2.12-.8.63 0 1.2.1 1.7.34l-.4 1c-.52-.2-.96-.3-1.3-.3-1.04 0-1.55.68-1.55 2.05 0 .67.13 1.17.38 1.5.26.34.64.5 1.13.5a3.23 3.23 0 0 0 1.6-.4v1.1a2.53 2.53 0 0 1-.73.28 4.36 4.36 0 0 1-.93.08zm8.28-.1h-1.27V9.5c0-.45-.1-.8-.28-1.02-.18-.23-.47-.34-.88-.34-.53 0-.9.16-1.16.48-.25.3-.38.85-.38 1.6v2.94h-1.26V4.8h1.26v2.12c0 .34-.02.7-.06 1.1h.08a1.76 1.76 0 0 1 .72-.67c.3-.16.66-.24 1.07-.24 1.43 0 2.15.74 2.15 2.2v3.86zM42.2 7.1c.74 0 1.32.28 1.73.82.4.53.62 1.3.62 2.26 0 .97-.2 1.73-.63 2.27-.42.54-1 .82-1.75.82s-1.33-.27-1.75-.8h-.08l-.23.7h-.94V4.8h1.26v2l-.02.64-.03.56h.05c.4-.6 1-.9 1.78-.9zm-.33 1.04c-.5 0-.88.15-1.1.45-.22.3-.34.8-.35 1.5v.08c0 .72.12 1.24.35 1.57.23.32.6.48 1.12.48.44 0 .78-.17 1-.53.24-.35.36-.87.36-1.53 0-1.35-.47-2.03-1.4-2.03zm3.24-.92h1.4l1.2 3.37c.18.47.3.92.36 1.34h.04l.18-.72 1.37-4H51l-2.53 6.73c-.46 1.23-1.23 1.85-2.3 1.85-.3 0-.56-.03-.83-.1v-1c.2.05.4.08.65.08.6 0 1.03-.36 1.28-1.06l.22-.56-2.4-5.94z'/%3E%3C/g%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:100%;width:110px;height:100%;margin-left:auto;margin-right:5px;display:block;overflow:hidden}html[data-theme=dark] .algolia-docsearch-suggestion--category-header,html[data-theme=dark] .algolia-docsearch-suggestion--wrapper,html[data-theme=dark] .algolia-docsearch-footer{background:var(--ifm-background-color)!important;color:var(--ifm-font-color-base)!important}html[data-theme=dark] .algolia-docsearch-suggestion--title{color:var(--ifm-font-color-base)!important}html[data-theme=dark] .ds-cursor .algolia-docsearch-suggestion--wrapper{background:var(--ifm-background-surface-color)!important}mark{background-color:#add8e6}
|
@@ -0,0 +1 @@
|
|
1
|
+
"use strict";(self.webpackChunkdocs_openc3_com=self.webpackChunkdocs_openc3_com||[]).push([["9165"],{2989:function(e,n,t){t.r(n),t.d(n,{frontMatter:()=>i,toc:()=>l,default:()=>h,metadata:()=>o,assets:()=>c,contentTitle:()=>a});var o=JSON.parse('{"id":"guides/monitoring","title":"Monitoring","description":"Various ways to monitor COSMOS internals","source":"@site/docs/guides/monitoring.md","sourceDirName":"guides","slug":"/guides/monitoring","permalink":"/tools/staticdocs/docs/guides/monitoring","draft":false,"unlisted":false,"editUrl":"https://github.com/OpenC3/cosmos/tree/main/docs.openc3.com/docs/guides/monitoring.md","tags":[],"version":"current","frontMatter":{"title":"Monitoring","description":"Various ways to monitor COSMOS internals","sidebar_custom_props":{"myEmoji":"\u{1F5A5}\uFE0F"}},"sidebar":"defaultSidebar","previous":{"title":"Logging","permalink":"/tools/staticdocs/docs/guides/logging"},"next":{"title":"Performance","permalink":"/tools/staticdocs/docs/guides/performance"}}'),s=t(7259),r=t(677);let i={title:"Monitoring",description:"Various ways to monitor COSMOS internals",sidebar_custom_props:{myEmoji:"\u{1F5A5}\uFE0F"}},a,c={},l=[{value:"Monitoring and observability",id:"monitoring-and-observability",level:3},{value:"Fluent/Fluentd",id:"fluentfluentd",level:3},{value:"Notes",id:"notes",level:4},{value:"OpenDistro",id:"opendistro",level:3},{value:"Notes",id:"notes-1",level:4},{value:"Prometheus",id:"prometheus",level:3},{value:"Notes",id:"notes-2",level:4},{value:"Grafana",id:"grafana",level:3},{value:"Notes",id:"notes-3",level:4}];function d(e){let n={a:"a",admonition:"admonition",blockquote:"blockquote",code:"code",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h3,{id:"monitoring-and-observability",children:"Monitoring and observability"}),"\n",(0,s.jsx)(n.admonition,{title:"Example Only",type:"warning",children:(0,s.jsx)(n.p,{children:"Monitoring with Fluentd is not officially supported by OpenC3 and the documentation here is simply an example of how this could be performed."})}),"\n",(0,s.jsxs)(n.p,{children:["With moving COSMOS to container based service, we needed a better way to monitor the internals of COSMOS. So here is some information on external services that you can use to monitor COSMOS. If you want to read more about ",(0,s.jsx)(n.a,{href:"https://sre.google/sre-book/monitoring-distributed-systems/",children:"Monitoring Distributed Systems"})]}),"\n",(0,s.jsx)(n.h3,{id:"fluentfluentd",children:(0,s.jsx)(n.a,{href:"https://www.fluentd.org/guides/recipes/docker-logging",children:"Fluent/Fluentd"})}),"\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsx)(n.p,{children:"Fluentd is an open source data collector, which lets you unify the data collection and consumption for a better use and understanding of data."}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"notes",children:"Notes"}),"\n",(0,s.jsx)(n.p,{children:"in_docker.conf"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"<source>\n @type forward\n port 24224\n bind 0.0.0.0\n</source>\n<match *.metric>\n @type copy\n <store>\n @type elasticsearch\n host openc3-elasticsearch\n port 9200\n logstash_format true\n logstash_prefix metric\n logstash_dateformat %Y%m%d\n include_tag_key true\n type_name access_log\n tag_key @log_name\n flush_interval 1s\n </store>\n <store>\n @type stdout\n </store>\n</match>\n<match *__openc3.log>\n @type copy\n <store>\n @type elasticsearch\n host openc3-elasticsearch\n port 9200\n logstash_format true\n logstash_prefix openc3\n logstash_dateformat %Y%m%d\n include_tag_key true\n type_name access_log\n tag_key @log_name\n flush_interval 1s\n </store>\n <store>\n @type stdout\n </store>\n</match>\n<match *.**>\n @type copy\n <store>\n @type elasticsearch\n host openc3-elasticsearch\n port 9200\n logstash_format true\n logstash_prefix fluentd\n logstash_dateformat %Y%m%d\n include_tag_key true\n type_name access_log\n tag_key @log_name\n flush_interval 1s\n </store>\n <store>\n @type stdout\n </store>\n</match>\n"})}),"\n",(0,s.jsx)(n.p,{children:"Dockerfile"}),"\n",(0,s.jsxs)(n.p,{children:["NOTE: If building on a Macbook (for example) you should use the architecture specific build in the FROM line, e.g. ",(0,s.jsx)(n.code,{children:"FROM arm64v8/fluentd:v1.18-1"})]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"FROM fluent/fluentd:v1.18-1\n\nCOPY ./in_docker.conf /fluentd/etc/fluent.conf\nUSER root\nRUN gem install fluent-plugin-elasticsearch --no-document --version 5.4.3 \\\n && gem install fluent-plugin-prometheus --no-document --version 2.2.0\nUSER fluent\n"})}),"\n",(0,s.jsx)(n.h3,{id:"opendistro",children:(0,s.jsx)(n.a,{href:"https://opendistro.github.io/for-elasticsearch-docs/",children:"OpenDistro"})}),"\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsx)(n.p,{children:"Open Distro for Elasticsearch provides a powerful, easy-to-use event monitoring and alerting system, enabling you to monitor your data and send notifications automatically to your stakeholders. With an intuitive Kibana interface and powerful API, it is easy to set up and manage alerts."}),"\n"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://opendistro.github.io/for-elasticsearch-docs/docs/install/docker/",children:"Docker"})}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"notes-1",children:"Notes"}),"\n",(0,s.jsx)(n.p,{children:"When testing this I found that depending on how you ingest your logs into the opendistro I found I had to disable security. Here is an example of the docker file."}),"\n",(0,s.jsx)(n.p,{children:"Dockerfile"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"FROM amazon/opendistro-for-elasticsearch:1.12.0\n\nRUN /usr/share/elasticsearch/bin/elasticsearch-plugin remove opendistro_security\n"})}),"\n",(0,s.jsx)(n.h3,{id:"prometheus",children:(0,s.jsx)(n.a,{href:"https://prometheus.io/",children:"Prometheus"})}),"\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsx)(n.p,{children:"Prometheus scrapes metrics from instrumented jobs, either directly or via an intermediary push gateway for short-lived jobs. It stores all scraped samples locally and runs rules over this data to either aggregate and record new time series from existing data or generate alerts. Grafana or other API consumers can be used to visualize the collected data."}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"notes-2",children:"Notes"}),"\n",(0,s.jsx)(n.p,{children:"prometheus.yaml"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:'global:\n scrape_interval: 15s\n evaluation_interval: 15s\n\nrule_files:\n # - "first.rules"\n # - "second.rules"\n\nscrape_configs:\n - job_name: prometheus\n static_configs:\n - targets: ["localhost:9090"]\n\n - job_name: openc3-internal-metrics\n metrics_path: "/openc3-api/internal/metrics"\n static_configs:\n - targets: ["openc3-cmd-tlm-api:2901"]\n\n - job_name: openc3-cmd-tlm-api\n metrics_path: "/openc3-api/metrics"\n static_configs:\n - targets: ["openc3-cmd-tlm-api:2901"]\n\n - job_name: openc3-script-runner-api\n metrics_path: "/script-api/metrics"\n static_configs:\n - targets: ["openc3-script-runner-api:2902"]\n\n - job_name: minio-job\n metrics_path: /minio/v2/metrics/cluster\n scheme: http\n static_configs:\n - targets: [\'openc3-minio:9000\']\n'})}),"\n",(0,s.jsx)(n.p,{children:"Dockerfile"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"FROM prom/prometheus:v3.2.1\nADD prometheus.yaml /etc/prometheus/\n"})}),"\n",(0,s.jsx)(n.h3,{id:"grafana",children:(0,s.jsx)(n.a,{href:"https://grafana.com/",children:"Grafana"})}),"\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsx)(n.p,{children:"Grafana is a multi-platform open source analytics and interactive visualization web application. It provides charts, graphs, and alerts for the web when connected to supported data sources."}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"notes-3",children:"Notes"}),"\n",(0,s.jsx)(n.p,{children:"datasource.yaml"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"apiVersion: 1\n\ndatasources:\n - name: Prometheus\n type: prometheus\n # Access mode - proxy (server in the UI) or direct (browser in the UI).\n access: proxy\n url: http://openc3-prometheus:9090\n"})}),"\n",(0,s.jsx)(n.p,{children:"Dockerfile"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"FROM grafana/grafana\n\nCOPY datasource.yaml /etc/grafana/provisioning/datasources/\n"})})]})}function h(e={}){let{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},677:function(e,n,t){t.d(n,{R:()=>i,x:()=>a});var o=t(6363);let s={},r=o.createContext(s);function i(e){let n=o.useContext(r);return o.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(s):e.components||s:i(e.components),o.createElement(r.Provider,{value:n},e.children)}}}]);
|
@@ -0,0 +1 @@
|
|
1
|
+
"use strict";(self.webpackChunkdocs_openc3_com=self.webpackChunkdocs_openc3_com||[]).push([["3430"],{7493:function(e,n,i){i.r(n),i.d(n,{frontMatter:()=>o,toc:()=>d,default:()=>m,metadata:()=>t,assets:()=>a,contentTitle:()=>s});var t=JSON.parse('{"id":"meta/xtce","title":"XTCE Support","description":"XTCE Command and Telemetry Definition Standard","source":"@site/docs/meta/xtce.md","sourceDirName":"meta","slug":"/meta/xtce","permalink":"/tools/staticdocs/docs/meta/xtce","draft":false,"unlisted":false,"editUrl":"https://github.com/OpenC3/cosmos/tree/main/docs.openc3.com/docs/meta/xtce.md","tags":[],"version":"current","frontMatter":{"title":"XTCE Support","description":"XTCE Command and Telemetry Definition Standard","sidebar_custom_props":{"myEmoji":"\u{1F635}"}},"sidebar":"defaultSidebar","previous":{"title":"Philosophy","permalink":"/tools/staticdocs/docs/meta/philosophy"},"next":{"title":"OpenC3, Inc. Privacy Policy","permalink":"/tools/staticdocs/docs/privacy"}}'),r=i(7259),l=i(677);let o={title:"XTCE Support",description:"XTCE Command and Telemetry Definition Standard",sidebar_custom_props:{myEmoji:"\u{1F635}"}},s,a={},d=[{value:"Running COSMOS using an .xtce definition file",id:"running-cosmos-using-an-xtce-definition-file",level:2},{value:"Converting a .xtce file into a COSMOS configuration",id:"converting-a-xtce-file-into-a-cosmos-configuration",level:2},{value:"Converting a COSMOS Configuration to XTCE",id:"converting-a-cosmos-configuration-to-xtce",level:2},{value:"High-level Overview of Current Support",id:"high-level-overview-of-current-support",level:2},{value:"Supported Elements and Attributes",id:"supported-elements-and-attributes",level:2},{value:"Ignored Elements",id:"ignored-elements",level:2},{value:"Unsupported Elements",id:"unsupported-elements",level:2}];function c(e){let n={a:"a",code:"code",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,l.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(n.p,{children:["COSMOS now has support for the ",(0,r.jsx)(n.a,{href:"https://www.omg.org/xtce/index.htm",children:"XTCE Command and Telemetry Definition Standard"}),". This is an open standard designed to allow command and telemetry definitions to be transferred between different ground systems. COSMOS can run directly using the .xtce files, or can convert them into the COSMOS configuration file format."]}),"\n",(0,r.jsx)(n.h2,{id:"running-cosmos-using-an-xtce-definition-file",children:"Running COSMOS using an .xtce definition file"}),"\n",(0,r.jsx)(n.p,{children:"A single .xtce file containing the command and telemetry definitions for a target can be used in place of the normal COSMOS command and telemetry definition files. Simply place the target's .xtce file in the target's cmd_tlm folder and COSMOS will use it for the command and telemetry definitions."}),"\n",(0,r.jsx)(n.h2,{id:"converting-a-xtce-file-into-a-cosmos-configuration",children:"Converting a .xtce file into a COSMOS configuration"}),"\n",(0,r.jsx)(n.p,{children:"Use the following command to convert a .xtce file into COSMOS configuration files. The converted configuration files will be placed into a target folder in the given output directory."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:"openc3.bat cli xtce_converter --import <xtce_filename> --output <output_dir>\n"})}),"\n",(0,r.jsx)(n.h2,{id:"converting-a-cosmos-configuration-to-xtce",children:"Converting a COSMOS Configuration to XTCE"}),"\n",(0,r.jsx)(n.p,{children:"Use the following command to convert your openc3 plugin into .xtce files, one per target. The converted .xtce files will be placed into a target folder in the given output directory."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:"openc3.bat cli xtce_converter --plugin <plugin.gem> --output <output_dir>\n"})}),"\n",(0,r.jsx)(n.h2,{id:"high-level-overview-of-current-support",children:"High-level Overview of Current Support"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:"Integer, Float, Enumerated, String, and Binary Parameter/Argument Types are Supported"}),"\n",(0,r.jsx)(n.li,{children:"All DataEncodings are supported"}),"\n",(0,r.jsx)(n.li,{children:"Telemetry and Commands are Supported"}),"\n",(0,r.jsx)(n.li,{children:"Packet Identification is supported"}),"\n",(0,r.jsx)(n.li,{children:"States are supported"}),"\n",(0,r.jsx)(n.li,{children:"Units are supported"}),"\n",(0,r.jsx)(n.li,{children:"PolynomialCalibrators are supported"}),"\n",(0,r.jsx)(n.li,{children:"Only one SpaceSystem per .xtce file"}),"\n",(0,r.jsx)(n.li,{children:"Packets should not have gaps between items"}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"supported-elements-and-attributes",children:"Supported Elements and Attributes"}),"\n",(0,r.jsx)(n.p,{children:"The following elements and associated attributes are currently supported."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"SpaceSystem"}),"\n",(0,r.jsx)(n.li,{children:"TelemetryMetaData"}),"\n",(0,r.jsx)(n.li,{children:"CommandMetaData"}),"\n",(0,r.jsx)(n.li,{children:"ParameterTypeSet"}),"\n",(0,r.jsx)(n.li,{children:"EnumerationList"}),"\n",(0,r.jsx)(n.li,{children:"ParameterSet"}),"\n",(0,r.jsx)(n.li,{children:"ContainerSet"}),"\n",(0,r.jsx)(n.li,{children:"EntryList"}),"\n",(0,r.jsx)(n.li,{children:"DefaultCalibrator"}),"\n",(0,r.jsx)(n.li,{children:"DefaultAlarm"}),"\n",(0,r.jsx)(n.li,{children:"RestrictionCriteria"}),"\n",(0,r.jsx)(n.li,{children:"ComparisonList"}),"\n",(0,r.jsx)(n.li,{children:"MetaCommandSet"}),"\n",(0,r.jsx)(n.li,{children:"DefaultCalibrator"}),"\n",(0,r.jsx)(n.li,{children:"ArgumentTypeSet"}),"\n",(0,r.jsx)(n.li,{children:"ArgumentList"}),"\n",(0,r.jsx)(n.li,{children:"ArgumentAssignmentList"}),"\n",(0,r.jsx)(n.li,{children:"EnumeratedParameterType"}),"\n",(0,r.jsx)(n.li,{children:"EnumeratedArgumentType"}),"\n",(0,r.jsx)(n.li,{children:"IntegerParameterType"}),"\n",(0,r.jsx)(n.li,{children:"IntegerArgumentType"}),"\n",(0,r.jsx)(n.li,{children:"FloatParameterType"}),"\n",(0,r.jsx)(n.li,{children:"FloatArgumentType"}),"\n",(0,r.jsx)(n.li,{children:"StringParameterType"}),"\n",(0,r.jsx)(n.li,{children:"StringArgumentType"}),"\n",(0,r.jsx)(n.li,{children:"BinaryParameterType"}),"\n",(0,r.jsx)(n.li,{children:"BinaryArgumentType"}),"\n",(0,r.jsx)(n.li,{children:"IntegerDataEncoding"}),"\n",(0,r.jsx)(n.li,{children:"FloatDataEncoding"}),"\n",(0,r.jsx)(n.li,{children:"StringDataEncoding"}),"\n",(0,r.jsx)(n.li,{children:"BinaryDataEncoding'"}),"\n",(0,r.jsx)(n.li,{children:"SizeInBits"}),"\n",(0,r.jsx)(n.li,{children:"FixedValue"}),"\n",(0,r.jsx)(n.li,{children:"UnitSet"}),"\n",(0,r.jsx)(n.li,{children:"Unit"}),"\n",(0,r.jsx)(n.li,{children:"PolynomialCalibrator"}),"\n",(0,r.jsx)(n.li,{children:"Term"}),"\n",(0,r.jsx)(n.li,{children:"StaticAlarmRanges"}),"\n",(0,r.jsx)(n.li,{children:"WarningRange"}),"\n",(0,r.jsx)(n.li,{children:"CriticalRange"}),"\n",(0,r.jsx)(n.li,{children:"ValidRange"}),"\n",(0,r.jsx)(n.li,{children:"Enumeration"}),"\n",(0,r.jsx)(n.li,{children:"Parameter"}),"\n",(0,r.jsx)(n.li,{children:"Argument"}),"\n",(0,r.jsx)(n.li,{children:"ParameterProperties"}),"\n",(0,r.jsx)(n.li,{children:"SequenceContainer"}),"\n",(0,r.jsx)(n.li,{children:"BaseContainer"}),"\n",(0,r.jsx)(n.li,{children:"LongDescription"}),"\n",(0,r.jsx)(n.li,{children:"ParameterRefEntry"}),"\n",(0,r.jsx)(n.li,{children:"ArgumentRefEntry"}),"\n",(0,r.jsx)(n.li,{children:"BaseMetaCommand"}),"\n",(0,r.jsx)(n.li,{children:"Comparison"}),"\n",(0,r.jsx)(n.li,{children:"MetaCommand"}),"\n",(0,r.jsx)(n.li,{children:"BaseMetaCommand"}),"\n",(0,r.jsx)(n.li,{children:"CommandContainer"}),"\n",(0,r.jsx)(n.li,{children:"ArgumentAssignment"}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"ignored-elements",children:"Ignored Elements"}),"\n",(0,r.jsx)(n.p,{children:"The following elements are simply ignored by COSMOS:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Header"}),"\n",(0,r.jsx)(n.li,{children:"AliasSet"}),"\n",(0,r.jsx)(n.li,{children:"Alias"}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"unsupported-elements",children:"Unsupported Elements"}),"\n",(0,r.jsx)(n.p,{children:"Any elements not listed above are currently unsupported. Near term support for the following elements and features are planned and priority will be determined by user requests."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"SplineCalibrator"}),"\n",(0,r.jsx)(n.li,{children:"Alternate methods of specifying offsets into containers"}),"\n",(0,r.jsx)(n.li,{children:"Output to the XUSP standard"}),"\n",(0,r.jsx)(n.li,{children:"Additional Data Types"}),"\n",(0,r.jsx)(n.li,{children:"Container References"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"If there is a particular element or feature you need supported please submit a ticket on Github."})]})}function m(e={}){let{wrapper:n}={...(0,l.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},677:function(e,n,i){i.d(n,{R:()=>o,x:()=>s});var t=i(6363);let r={},l=t.createContext(r);function o(e){let n=t.useContext(l);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(r):e.components||r:o(e.components),t.createElement(l.Provider,{value:n},e.children)}}}]);
|
@@ -0,0 +1 @@
|
|
1
|
+
"use strict";(self.webpackChunkdocs_openc3_com=self.webpackChunkdocs_openc3_com||[]).push([["9650"],{3448:function(e,t,n){n.r(t),n.d(t,{frontMatter:()=>d,toc:()=>l,default:()=>o,metadata:()=>r,assets:()=>c,contentTitle:()=>a});var r=JSON.parse('{"id":"development/log-structure","title":"Log Structure","description":"Structure of the COSMOS log file","source":"@site/docs/development/log-structure.md","sourceDirName":"development","slug":"/development/log-structure","permalink":"/tools/staticdocs/docs/development/log-structure","draft":false,"unlisted":false,"editUrl":"https://github.com/OpenC3/cosmos/tree/main/docs.openc3.com/docs/development/log-structure.md","tags":[],"version":"current","frontMatter":{"title":"Log Structure","description":"Structure of the COSMOS log file","sidebar_custom_props":{"myEmoji":"\u{1FAB5}"}},"sidebar":"defaultSidebar","previous":{"title":"JSON API","permalink":"/tools/staticdocs/docs/development/json-api"},"next":{"title":"Roadmap","permalink":"/tools/staticdocs/docs/development/roadmap"}}'),i=n(7259),s=n(677);let d={title:"Log Structure",description:"Structure of the COSMOS log file",sidebar_custom_props:{myEmoji:"\u{1FAB5}"}},a,c={},l=[{value:"Packet Log File Format",id:"packet-log-file-format",level:2},{value:"File Header",id:"file-header",level:3},{value:"Entry Types",id:"entry-types",level:3},{value:"Common Entry Format",id:"common-entry-format",level:4},{value:"Target Declaration Entry",id:"target-declaration-entry",level:4},{value:"Packet Declaration Entry",id:"packet-declaration-entry",level:4},{value:"Raw Packet and JSON Packet Entries",id:"raw-packet-and-json-packet-entries",level:4},{value:"Offset Marker Entry",id:"offset-marker-entry",level:4},{value:"Key Map Entry",id:"key-map-entry",level:4}];function h(e){let t={h2:"h2",h3:"h3",h4:"h4",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.p,{children:"Updated: 8-21-2023 to the format as of OpenC3 COSMOS 5.11.0"}),"\n",(0,i.jsx)(t.h2,{id:"packet-log-file-format",children:"Packet Log File Format"}),"\n",(0,i.jsx)(t.p,{children:"Packet logs in OpenC3 COSMOS 5 are used to store raw binary packets as received from various targets, as\nwell as decommutated packets stored as JSON structures."}),"\n",(0,i.jsx)(t.h3,{id:"file-header",children:"File Header"}),"\n",(0,i.jsx)(t.p,{children:'COSMOS 5 Packet log files start with the 8-character sequence "COSMOS5_". This can be used to identify the type of file independent of filename and differentiate them from newer and older versions.'}),"\n",(0,i.jsx)(t.h3,{id:"entry-types",children:"Entry Types"}),"\n",(0,i.jsx)(t.p,{children:"Packet log files have 6 different entry types with room for future expansion. All entry headers are big endian binary data."}),"\n",(0,i.jsx)(t.h4,{id:"common-entry-format",children:"Common Entry Format"}),"\n",(0,i.jsx)(t.p,{children:"This common format is used for all packet log entries:"}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Field"}),(0,i.jsx)(t.th,{children:"Data Type"}),(0,i.jsx)(t.th,{children:"Description"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Length"}),(0,i.jsx)(t.td,{children:"32-bit Unsigned Integer"}),(0,i.jsx)(t.td,{children:"Total length of the entry in bytes not including the length field. Max entry size is therefore 4GiB."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Entry Type"}),(0,i.jsx)(t.td,{children:"4-bit Unsigned Integer"}),(0,i.jsxs)(t.td,{children:["Entry Type:",(0,i.jsx)("br",{}),"1 = Target Declaration",(0,i.jsx)("br",{}),"2 = Packet Declaraction",(0,i.jsx)("br",{}),"3 = Raw Packet",(0,i.jsx)("br",{}),"4 = JSON/CBOR Packet",(0,i.jsx)("br",{}),"5 = Offset Marker",(0,i.jsx)("br",{}),"6 = Key Map"]})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Cmd/Tlm Flag"}),(0,i.jsx)(t.td,{children:"1-bit Unsigned Integer"}),(0,i.jsxs)(t.td,{children:["1 = Command",(0,i.jsx)("br",{}),"0 = Telemetry"]})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Stored Flag"}),(0,i.jsx)(t.td,{children:"1-bit Unsigned Integer"}),(0,i.jsxs)(t.td,{children:["1 = Stored Data",(0,i.jsx)("br",{}),"0 = Realtime Data"]})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Id Flag"}),(0,i.jsx)(t.td,{children:"1-bit Unsigned Integer"}),(0,i.jsxs)(t.td,{children:["1 = ID present",(0,i.jsx)("br",{}),"0 = ID not present"]})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"CBOR Flag"}),(0,i.jsx)(t.td,{children:"1-bit Unsigned Integer"}),(0,i.jsxs)(t.td,{children:['Only Valid for "JSON/CBOR Packets"',(0,i.jsx)("br",{}),"1 = CBOR Data",(0,i.jsx)("br",{}),"0 = JSON Data"]})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Extra Flag"}),(0,i.jsx)(t.td,{children:"1-bit Unsigned Integer"}),(0,i.jsxs)(t.td,{children:["1 = Extra present",(0,i.jsx)("br",{}),"0 = Extra Not Present (Added COSMOS 5.11)"]})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Received Time Flag"}),(0,i.jsx)(t.td,{children:"1-bit Unsigned Integer"}),(0,i.jsxs)(t.td,{children:["1 = Received Time Present",(0,i.jsx)("br",{}),"0 = No Received Time (Added COSMOS 5.11.0)"]})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Reserved"}),(0,i.jsx)(t.td,{children:"6-bit Unsigned Integer"}),(0,i.jsx)(t.td,{children:"Reserved for Future expansion. Should be set to 0 if unused."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Entry Data"}),(0,i.jsx)(t.td,{children:"Variable"}),(0,i.jsx)(t.td,{children:"Unique data based on entry type. See Entry Types Below"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Id (Optional)"}),(0,i.jsx)(t.td,{children:"32-byte Binary Hash"}),(0,i.jsx)(t.td,{children:"If the ID field is set, this is a binary 256-bit SHA-256 hash uniquely identifying a target configuration or packet configuration"})]})]})]}),"\n",(0,i.jsx)(t.h4,{id:"target-declaration-entry",children:"Target Declaration Entry"}),"\n",(0,i.jsx)(t.p,{children:"Declares the name of a target the first time it is seen when writing the log file."}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Field"}),(0,i.jsx)(t.th,{children:"Data Type"}),(0,i.jsx)(t.th,{children:"Description"})]})}),(0,i.jsx)(t.tbody,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Target Name"}),(0,i.jsx)(t.td,{children:"Variable-Length ASCII String"}),(0,i.jsx)(t.td,{children:"Target Name"})]})})]}),"\n",(0,i.jsx)(t.h4,{id:"packet-declaration-entry",children:"Packet Declaration Entry"}),"\n",(0,i.jsx)(t.p,{children:"Declares the name of a packet the first time it is seen when writing the log file. References the associated target name by index."}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Field"}),(0,i.jsx)(t.th,{children:"Data Type"}),(0,i.jsx)(t.th,{children:"Description"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Target Index"}),(0,i.jsx)(t.td,{children:"16-bit Unsigned Integer"}),(0,i.jsx)(t.td,{children:"Index into a dynamically built table of target names, generated from the order of the target declarations in the file. The first target declaration gets index 0, the second target declaration gets index 1, etc."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Packet Name"}),(0,i.jsx)(t.td,{children:"Variable-Length ASCII String"}),(0,i.jsx)(t.td,{children:"Packet Name"})]})]})]}),"\n",(0,i.jsx)(t.h4,{id:"raw-packet-and-json-packet-entries",children:"Raw Packet and JSON Packet Entries"}),"\n",(0,i.jsx)(t.p,{children:'Holds the main data for a packet. Raw packets are the data before the COSMOS decommutation phase. "JSON" packets are the data after decommutation. Note that "JSON" packets are now generally stored as CBOR rather than JSON to reduce storage size.'}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Field"}),(0,i.jsx)(t.th,{children:"Data Type"}),(0,i.jsx)(t.th,{children:"Description"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Packet Index"}),(0,i.jsx)(t.td,{children:"16-bit Unsigned Integer"}),(0,i.jsx)(t.td,{children:"Index into a dynamically built table of cmd_or_tlm/target name/packet name tuples, generated from the order of the packet declarations in the file. The first packet declaration gets index 0, the second packet declaration gets index 1, etc. This limits the max number of unique packet types in a single file to 65536."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Packet Timestamp"}),(0,i.jsx)(t.td,{children:"64-bit Unsigned Integer"}),(0,i.jsx)(t.td,{children:"Packet timestamp in nanoseconds from the unix epoch (Jan 1st, 1970, midnight). This field contains the \u201Cpacket time\u201D for both Raw and JSON packet entries (which are used to store decommutated date). For JSON packet entries, the packet received time can also be extracted from the JSON data if needed."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Received Timestamp (Optional)"}),(0,i.jsx)(t.td,{children:"64-bit Unsigned Integer"}),(0,i.jsx)(t.td,{children:"Only present if Received Time Flag is Set (Only currently in Raw log files). Received timestamp in nanoseconds from the unix epoch (Jan 1st, 1970, midnight). This field contains the received time\u201D for both Raw packet entries (which are used to store decommutated date). For JSON packet entries, the packet received time can be extracted from the JSON data if needed."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Extra Length (Optional)"}),(0,i.jsx)(t.td,{children:"32-bit Unsigned Integer"}),(0,i.jsx)(t.td,{children:"Only Present if Extra Flag is Set. Length of extra data in bytes not including itself."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Extra Data (Optional)"}),(0,i.jsx)(t.td,{children:"Variable-Length Block Data"}),(0,i.jsx)(t.td,{children:"Only Present if Extra Flag is Set. CBOR or JSON encoded object of extra data."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Packet Data"}),(0,i.jsx)(t.td,{children:"Variable-Length Block Data"}),(0,i.jsx)(t.td,{children:"The Raw binary packet data for Raw Packet entries, and ASCII JSON data (or CBOR if flag set) for JSON packet entries. Note the Common Entry Format Id field is not supported with either type of packet entry."})]})]})]}),"\n",(0,i.jsx)(t.h4,{id:"offset-marker-entry",children:"Offset Marker Entry"}),"\n",(0,i.jsx)(t.p,{children:"This contains the Redis stream offset for the last packet stored in this log file. This entry allows for a seamless transition from log files to Redis streams holding the most recent data received by COSMOS."}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Field"}),(0,i.jsx)(t.th,{children:"Data Type"}),(0,i.jsx)(t.th,{children:"Description"})]})}),(0,i.jsx)(t.tbody,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Offset Marker"}),(0,i.jsx)(t.td,{children:"Variable-Length ASCII String"}),(0,i.jsx)(t.td,{children:"Redis Offset Marker"})]})})]}),"\n",(0,i.jsx)(t.h4,{id:"key-map-entry",children:"Key Map Entry"}),"\n",(0,i.jsx)(t.p,{children:"The key map entry is used to further reduce log file sizes by reducing the size of the names of the decommutated values. Each value is given a numeric name counting up from 0 which drastically reduces decommutated data size. Note: This could be further enhanced in the future by changing to a denser encoding similar to base64. The key map is generated on the first reception of a packet. If future packets have different keys, then the names are used as-is and no reduction is gained. Typically packet keys don't change within a file."}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Field"}),(0,i.jsx)(t.th,{children:"Data Type"}),(0,i.jsx)(t.th,{children:"Description"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Packet Index"}),(0,i.jsx)(t.td,{children:"16-bit Unsigned Integer"}),(0,i.jsx)(t.td,{children:"Index into a dynamically built table of packet names, generated from the order of the packet declarations in the file. The first packet declaration gets index 0, the second packet declaration gets index 1, etc."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Key Map"}),(0,i.jsx)(t.td,{children:"Variable-Length ASCII String"}),(0,i.jsx)(t.td,{children:"Key Map Data with Mapping from numeric key to actual packet item name"})]})]})]})]})}function o(e={}){let{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},677:function(e,t,n){n.d(t,{R:()=>d,x:()=>a});var r=n(6363);let i={},s=r.createContext(i);function d(e){let t=r.useContext(s);return r.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(i):e.components||i:d(e.components),r.createElement(s.Provider,{value:t},e.children)}}}]);
|
@@ -0,0 +1 @@
|
|
1
|
+
"use strict";(self.webpackChunkdocs_openc3_com=self.webpackChunkdocs_openc3_com||[]).push([["5962"],{7091:function(e,t,n){n.r(t),n.d(t,{frontMatter:()=>s,toc:()=>d,default:()=>i,metadata:()=>o,assets:()=>p,contentTitle:()=>c});var o=JSON.parse('{"type":"mdx","permalink":"/tools/staticdocs/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}'),a=n(7259),r=n(677);let s={title:"Markdown page example"},c="Markdown page example",p={},d=[];function l(e){let t={h1:"h1",header:"header",p:"p",...(0,r.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.header,{children:(0,a.jsx)(t.h1,{id:"markdown-page-example",children:"Markdown page example"})}),"\n",(0,a.jsx)(t.p,{children:"You don't need React to write simple standalone pages."})]})}function i(e={}){let{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(l,{...e})}):l(e)}},677:function(e,t,n){n.d(t,{R:()=>s,x:()=>c});var o=n(6363);let a={},r=o.createContext(a);function s(e){let t=o.useContext(r);return o.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),o.createElement(r.Provider,{value:t},e.children)}}}]);
|
@@ -1 +1 @@
|
|
1
|
-
"use strict";(self.webpackChunkdocs_openc3_com=self.webpackChunkdocs_openc3_com||[]).push([["7804"],{739:function(e,t,n){n.r(t),n.d(t,{frontMatter:()=>o,toc:()=>l,default:()=>p,metadata:()=>i,assets:()=>a,contentTitle:()=>c});var i=JSON.parse('{"id":"tools/script-runner","title":"Script Runner","description":"Run Python or Ruby scripts to send commands and check telemetry","source":"@site/docs/tools/script-runner.md","sourceDirName":"tools","slug":"/tools/script-runner","permalink":"/tools/staticdocs/docs/tools/script-runner","draft":false,"unlisted":false,"editUrl":"https://github.com/OpenC3/cosmos/tree/main/docs.openc3.com/docs/tools/script-runner.md","tags":[],"version":"current","frontMatter":{"title":"Script Runner","description":"Run Python or Ruby scripts to send commands and check telemetry","sidebar_custom_props":{"myEmoji":"\u{1F3C3}\u200D\u27A1\uFE0F"}},"sidebar":"defaultSidebar","previous":{"title":"Packet Viewer","permalink":"/tools/staticdocs/docs/tools/packet-viewer"},"next":{"title":"System Health (Enterprise)","permalink":"/tools/staticdocs/docs/tools/systemhealth"}}'),r=n(1085),s=n(2600);let o={title:"Script Runner",description:"Run Python or Ruby scripts to send commands and check telemetry",sidebar_custom_props:{myEmoji:"\u{1F3C3}\u200D\u27A1\uFE0F"}},c,a={},l=[{value:"Introduction",id:"introduction",level:2},{value:"Script Runner Menus",id:"script-runner-menus",level:2},{value:"File Menu Items",id:"file-menu-items",level:3},{value:"File Open",id:"file-open",level:4},{value:"File Save As",id:"file-save-as",level:4},{value:"Script Menu Items",id:"script-menu-items",level:3},{value:"Running Scripts",id:"running-scripts",level:2},{value:"Right Click Script",id:"right-click-script",level:3},{value:"Script Environment Variables",id:"script-environment-variables",level:2},{value:"Running Script Suites",id:"running-script-suites",level:2},{value:"Group",id:"group",level:3},{value:"Suite",id:"suite",level:3},{value:"Script Suite Options",id:"script-suite-options",level:3},{value:"Pause on Error",id:"pause-on-error",level:4},{value:"Continue after Error",id:"continue-after-error",level:4},{value:"Abort after Error",id:"abort-after-error",level:4},{value:"Manual",id:"manual",level:4},{value:"Loop",id:"loop",level:4},{value:"Break Loop on Error",id:"break-loop-on-error",level:4},{value:"Debugging Scripts",id:"debugging-scripts",level:2}];function d(e){let t={a:"a",code:"code",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h2,{id:"introduction",children:"Introduction"}),"\n",(0,r.jsx)(t.p,{children:"Script Runner is both an editor of COSMOS scripts as well as executes scripts. Script files are stored within a COSMOS target and Script Runner provides the ability to open, save, download and delete these files. When a suite of scripts is opened, Script Runner provides additional options to run individual scripts, groups of scripts, or entire suites."}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"Script Runner",src:n(1949).A+"",width:"1273",height:"929"})}),"\n",(0,r.jsx)(t.h2,{id:"script-runner-menus",children:"Script Runner Menus"}),"\n",(0,r.jsx)(t.h3,{id:"file-menu-items",children:"File Menu Items"}),"\n",(0,r.jsx)("img",{src:n(5145).A,alt:"File Menu",style:{float:"left","margin-right":"50px",height:"250px"}}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"Clears the editor and filename"}),"\n",(0,r.jsx)(t.li,{children:"Creates a new test suite in Ruby or Python"}),"\n",(0,r.jsx)(t.li,{children:"Opens a dialog to select a file to open"}),"\n",(0,r.jsx)(t.li,{children:"Opens a recently used file"}),"\n",(0,r.jsx)(t.li,{children:"Saves the currently opened file to disk"}),"\n",(0,r.jsx)(t.li,{children:"Rename the current file"}),"\n",(0,r.jsx)(t.li,{children:"Downloads the current file to the browser"}),"\n",(0,r.jsxs)(t.li,{children:["Deletes the current file (Permanently!)","\n",(0,r.jsx)("br",{}),"\n",(0,r.jsx)("br",{}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.h4,{id:"file-open",children:"File Open"}),"\n",(0,r.jsx)(t.p,{children:"The File Open Dialog displays a tree view of the installed targets. You can manually open the folders and browse for the file you want. You can also use the search box at the top and start typing part of the filename to filter the results."}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"File Open",src:n(2962).A+"",width:"597",height:"599"})}),"\n",(0,r.jsx)(t.h4,{id:"file-save-as",children:"File Save As"}),"\n",(0,r.jsx)(t.p,{children:"When saving a file for the first time, or using File Save As, the File Save As Dialog appears. It works similar to the File Open Dialog displaying the tree view of the installed targets. You must select a folder by clicking the folder name and then filling out the Filename field with a filename before clicking Ok. You will be prompted before over-writing an existing file."}),"\n",(0,r.jsx)(t.h3,{id:"script-menu-items",children:"Script Menu Items"}),"\n",(0,r.jsx)("img",{src:n(2492).A,alt:"Script Menu",style:{float:"left","margin-right":"50px",height:"330px"}}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"Display started and finished scripts"}),"\n",(0,r.jsx)(t.li,{children:"Show environment variables"}),"\n",(0,r.jsx)(t.li,{children:"Show defined metadata"}),"\n",(0,r.jsx)(t.li,{children:"Show overridden telemetry values"}),"\n",(0,r.jsx)(t.li,{children:"Perform a syntax check"}),"\n",(0,r.jsx)(t.li,{children:"Perform a script mnemonic check"}),"\n",(0,r.jsx)(t.li,{children:"View the instrumented script"}),"\n",(0,r.jsx)(t.li,{children:"Shows the script call stack"}),"\n",(0,r.jsxs)(t.li,{children:["Display the ",(0,r.jsx)(t.a,{href:"/tools/staticdocs/docs/tools/script-runner#debugging-scripts",children:"debug"})," prompt"]}),"\n",(0,r.jsx)(t.li,{children:"Disconnect from real interfaces"}),"\n",(0,r.jsx)(t.li,{children:"Delete all script breakpoints"}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"The Execution Status popup lists the currently running scripts. This allows other users to connect to running scripts and follow along with the currently executing script. It also lists previously executed scripts so you can download the script log."}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"Running Scripts",src:n(6615).A+"",width:"1508",height:"505"})}),"\n",(0,r.jsx)(t.h2,{id:"running-scripts",children:"Running Scripts"}),"\n",(0,r.jsx)(t.p,{children:"Running a regular script is simply a matter of opening it and clicking the Start button. By default when you open a script the Filename is updated and the editor loads the script."}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"checks.rb",src:n(221).A+"",width:"3414",height:"1468"})}),"\n",(0,r.jsx)(t.p,{children:"Once you click Start the script is spawned in the Server and the Script State becomes Connecting."}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"connecting",src:n(2729).A+"",width:"1273",height:"68"})}),"\n",(0,r.jsx)(t.p,{children:"At that point the currently executing line is marked with green. If an error is encountered the line turns red and and the Pause button changes to Retry to allow the line to be re-tried."}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"error",src:n(1713).A+"",width:"1273",height:"527"})}),"\n",(0,r.jsx)(t.p,{children:"This allows checks that depend on telemetry changing to potentially be retried as telemetry is being updated live in the background. You can also click Go to continue pass the error or Stop to end the script execution."}),"\n",(0,r.jsx)(t.h3,{id:"right-click-script",children:"Right Click Script"}),"\n",(0,r.jsx)(t.p,{children:"Right clicking a script brings up several options:"}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"right-click",src:n(5660).A+"",width:"3418",height:"1476"})}),"\n",(0,r.jsx)(t.p,{children:"'Execute selection' causes the selected piece of code to be copied to a fresh Script Runner tab and executed independently of the current script. This is useful to run a selected section of code but be careful of references to other variables that are not selected. COSMOS will not be able to reference undefined variables!"}),"\n",(0,r.jsx)(t.p,{children:"'Run from here' causes everything from the current location of the cursor to be copied to a fresh Script Runner tab and executed independently of the current script. This is useful to avoid executing earlier pieces of code but be careful of references to other variables that are not selected. COSMOS will not be able to reference undefined variables!"}),"\n",(0,r.jsx)(t.p,{children:"'Clear all breakpoints' allows you to quickly clear breakpoints set by clicking on the editor line number."}),"\n",(0,r.jsx)(t.h2,{id:"script-environment-variables",children:"Script Environment Variables"}),"\n",(0,r.jsx)(t.p,{children:'Environment variables are used for storing information about the runtime environment of a running script. If your script depends on environment variables, you can access the "Script Environment Variables" dialog by clicking on the "(x)" icon next to the "Start" button.'}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"environment-variables",src:n(2338).A+"",width:"1254",height:"536"})}),"\n",(0,r.jsx)(t.p,{children:'Click the "+" icon to add a new environment variable, and set its name and value in the text fields. These can then be read in your Ruby and Python scripts.'}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-ruby",children:"# Ruby\nputs ENV['MYVAR'] # prints \"foo\"\n"})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-python",children:"# Python\nimport os\n\nprint(os.environ['MYVAR']) # prints \"foo\"\n"})}),"\n",(0,r.jsx)(t.h2,{id:"running-script-suites",children:"Running Script Suites"}),"\n",(0,r.jsx)(t.p,{children:"If a script is structured as a Suite it automatically causes Script Runner to parse the file to populate the Suite, Group, and Script drop down menus."}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"Suite Script",src:n(8783).A+"",width:"3420",height:"1654"})}),"\n",(0,r.jsx)(t.p,{children:"To generate a new Suite use the File -> New Suite and then choose either Ruby or Python to create a Suite in that language."}),"\n",(0,r.jsx)(t.h3,{id:"group",children:"Group"}),"\n",(0,r.jsx)(t.p,{children:"The Group class contains the methods used to run the test or operations. Any methods starting with 'script', 'op', or 'test' which are implemented inside a Group class are automatically included as scripts to run. For example, in the above image, you'll notice the 'script_power_on' is in the Script drop down menu. Here's another simple Ruby example:"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-ruby",children:'require \'openc3/script/suite.rb\'\nclass ExampleGroup < OpenC3::Group\n def setup\n puts "setup"\n end\n def script_1\n puts "script 1"\n end\n def teardown\n puts "teardown"\n end\nend\n'})}),"\n",(0,r.jsx)(t.p,{children:"Equivalent Python example:"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-python",children:'from openc3.script.suite import Suite, Group\nclass ExampleGroup(Group):\n def setup(self):\n print("setup")\n def script_1(self):\n print("script 1")\n def teardown(self):\n print("teardown")\n'})}),"\n",(0,r.jsx)(t.p,{children:"The setup and teardown methods are special methods which enable the Setup and Teardown buttons next to the Group drop down menu. Clicking these buttons runs the associated method."}),"\n",(0,r.jsx)(t.h3,{id:"suite",children:"Suite"}),"\n",(0,r.jsx)(t.p,{children:"Groups are added to Suites by creating a class inheriting from Suite and then calling the add_group method. For example in Ruby:"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-ruby",children:'class MySuite < OpenC3::Suite\n def initialize\n add_group(\'ExampleGroup\')\n end\n def setup\n puts "Suite setup"\n end\n def teardown\n puts "Suite teardown"\n end\nend\n'})}),"\n",(0,r.jsx)(t.p,{children:"In Python:"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-python",children:'from openc3.script.suite import Suite, Group\nclass MySuite(Suite):\n def __init__(self):\n self.add_group(ExampleGroup)\n def setup(self):\n print("Suite setup")\n def teardown(self):\n print("Suite teardown")\n'})}),"\n",(0,r.jsx)(t.p,{children:"Again there are setup and teardown methods which enable the Setup and Teardown buttons next to the Suite drop down menu."}),"\n",(0,r.jsx)(t.p,{children:"Multiple Suites and Groups can be created in the same file and will be parsed and added to the drop down menus. Clicking Start at the Suite level will run ALL Groups and ALL Scripts within each Group. Similarly, clicking Start at the Group level will run all Scripts in the Group. Clicking Start next to the Script will run just the single Script."}),"\n",(0,r.jsx)(t.h3,{id:"script-suite-options",children:"Script Suite Options"}),"\n",(0,r.jsx)(t.p,{children:"Opening a Script Suite creates six checkboxes which provide options to the running script."}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"Suite Checkboxes",src:n(7319).A+"",width:"464",height:"145"})}),"\n",(0,r.jsx)(t.h4,{id:"pause-on-error",children:"Pause on Error"}),"\n",(0,r.jsx)(t.p,{children:"Pauses the script if an error is encountered. This is the default and identical to how normal scripts are executed. Unchecking this box allows the script to continue past errors without user intervention. Similar to the User clicking Go upon encountering an error."}),"\n",(0,r.jsx)(t.h4,{id:"continue-after-error",children:"Continue after Error"}),"\n",(0,r.jsx)(t.p,{children:"Continue the script if an error is encountered. This is the default and identical to how normal scripts are executed. Unchecking this box means that the script will end after the first encountered error and execution will continue with any other scripts in the Suite/Group."}),"\n",(0,r.jsx)(t.h4,{id:"abort-after-error",children:"Abort after Error"}),"\n",(0,r.jsx)(t.p,{children:"Abort the entire execution upon encountering an error. If the first Script in a Suite's Group encounters an error the entire Suite will stop execution. Note, if Continue after Error is set, the current script is allowed to continue and complete."}),"\n",(0,r.jsx)(t.h4,{id:"manual",children:"Manual"}),"\n",(0,r.jsxs)(t.p,{children:["In Ruby, sets the global variable called ",(0,r.jsx)(t.code,{children:"$manual"})," to true. In Python, sets ",(0,r.jsx)(t.code,{children:"RunningScript.manual"})," to True. Setting this box only allows the script author to determine if the operator wants to execute manual steps or not. It is up the script author to use the variable in their scripts."]}),"\n",(0,r.jsx)(t.h4,{id:"loop",children:"Loop"}),"\n",(0,r.jsx)(t.p,{children:"Loop whatever the user started continuously. If the user clicks Start next to the Group then the entire Group will be looped. This is useful to catch and debug those tricky timing errors that only sometimes happen."}),"\n",(0,r.jsx)(t.h4,{id:"break-loop-on-error",children:"Break Loop on Error"}),"\n",(0,r.jsx)(t.p,{children:"Break the loop if an Error occurs. Only available if the Loop option is set."}),"\n",(0,r.jsx)(t.h2,{id:"debugging-scripts",children:"Debugging Scripts"}),"\n",(0,r.jsxs)(t.p,{children:["When you enable the Debug prompt an additional line appears between the script and the Log Messages. You can type local variables to cause them to be output in the Log Messages. You can also set local variables by typing ",(0,r.jsx)(t.code,{children:"var = 10"}),"."]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"Debug",src:n(9650).A+"",width:"1273",height:"748"})}),"\n",(0,r.jsx)(t.p,{children:"The Step button allows you to step line by line through the script. Clicking Go continues regular execution."})]})}function p(e={}){let{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},5145:function(e,t,n){n.d(t,{A:()=>i});let i=n.p+"assets/images/file_menu-470589e527d9e82ce40e0c7d4a865e33d19b42350c2429dba97186d168137b6d.png"},2492:function(e,t,n){n.d(t,{A:()=>i});let i=n.p+"assets/images/script_menu-5a10df89d9806a59b41ef990fc1181c46c7ffa00496021efceb22c0f31dcc9cc.png"},221:function(e,t,n){n.d(t,{A:()=>i});let i=n.p+"assets/images/checks_rb-4e28c3a8422638404e790054f83f6a61592f5cf848ff6d9bd1ce228813622c9a.png"},2729:function(e,t,n){n.d(t,{A:()=>i});let i=n.p+"assets/images/connecting-0f804651a891ef6112a51ba8b2e4d8dcb46e3462dcbc94e7b3c75bff20fc04e7.png"},9650:function(e,t,n){n.d(t,{A:()=>i});let i=n.p+"assets/images/debug-3103972d64395b50fff5808661fb846ae2de7d5934548ca5b88032f1ae12c541.png"},2338:function(e,t,n){n.d(t,{A:()=>i});let i=n.p+"assets/images/environment_variables-72bbb71e6f428ec5efa340eb402289b6d42a84d3c5ce724025d32415242dec09.png"},2962:function(e,t,n){n.d(t,{A:()=>i});let i=n.p+"assets/images/file_open-a5bc9e5ef73c12913ea4882498ceb52f93c73afaf5bb0c1083c4c1ee402f571d.png"},5660:function(e,t,n){n.d(t,{A:()=>i});let i=n.p+"assets/images/right_click-81df09085fe9f75805cf35b5876177789eef0d879b54a734a8395e3817f1959d.png"},6615:function(e,t,n){n.d(t,{A:()=>i});let i=n.p+"assets/images/running_scripts-694a1b310d42791acf64cf76ea370bb273084954107d5e6e2caf15f4fb50e634.png"},1713:function(e,t,n){n.d(t,{A:()=>i});let i=n.p+"assets/images/script_error-2061222e00f5e5190a4407be1f8999200badca9b3137659de007e27cf1708dc0.png"},1949:function(e,t,n){n.d(t,{A:()=>i});let i=n.p+"assets/images/script_runner-31f6bfcb631b788ff0bf792ac21da30aaa503ca926b10a22d4337114effc28f0.png"},8783:function(e,t,n){n.d(t,{A:()=>i});let i=n.p+"assets/images/script_suite-0d1f45f9226d3ac0ed12d5ce91220dccf88402fd8582c4512acc8886a3cf2249.png"},7319:function(e,t,n){n.d(t,{A:()=>i});let i=n.p+"assets/images/suite_checkboxes-af8452153dbc2143718fefcfc7d441e05f42c241b3c10d4f41200ae576f68063.png"},2600:function(e,t,n){n.d(t,{R:()=>o,x:()=>c});var i=n(4041);let r={},s=i.createContext(r);function o(e){let t=i.useContext(s);return i.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),i.createElement(s.Provider,{value:t},e.children)}}}]);
|
1
|
+
"use strict";(self.webpackChunkdocs_openc3_com=self.webpackChunkdocs_openc3_com||[]).push([["7804"],{4683:function(e,t,n){n.r(t),n.d(t,{frontMatter:()=>o,toc:()=>l,default:()=>p,metadata:()=>i,assets:()=>a,contentTitle:()=>c});var i=JSON.parse('{"id":"tools/script-runner","title":"Script Runner","description":"Run Python or Ruby scripts to send commands and check telemetry","source":"@site/docs/tools/script-runner.md","sourceDirName":"tools","slug":"/tools/script-runner","permalink":"/tools/staticdocs/docs/tools/script-runner","draft":false,"unlisted":false,"editUrl":"https://github.com/OpenC3/cosmos/tree/main/docs.openc3.com/docs/tools/script-runner.md","tags":[],"version":"current","frontMatter":{"title":"Script Runner","description":"Run Python or Ruby scripts to send commands and check telemetry","sidebar_custom_props":{"myEmoji":"\u{1F3C3}\u200D\u27A1\uFE0F"}},"sidebar":"defaultSidebar","previous":{"title":"Packet Viewer","permalink":"/tools/staticdocs/docs/tools/packet-viewer"},"next":{"title":"System Health (Enterprise)","permalink":"/tools/staticdocs/docs/tools/systemhealth"}}'),r=n(7259),s=n(677);let o={title:"Script Runner",description:"Run Python or Ruby scripts to send commands and check telemetry",sidebar_custom_props:{myEmoji:"\u{1F3C3}\u200D\u27A1\uFE0F"}},c,a={},l=[{value:"Introduction",id:"introduction",level:2},{value:"Script Runner Menus",id:"script-runner-menus",level:2},{value:"File Menu Items",id:"file-menu-items",level:3},{value:"File Open",id:"file-open",level:4},{value:"File Save As",id:"file-save-as",level:4},{value:"Script Menu Items",id:"script-menu-items",level:3},{value:"Running Scripts",id:"running-scripts",level:2},{value:"Right Click Script",id:"right-click-script",level:3},{value:"Script Environment Variables",id:"script-environment-variables",level:2},{value:"Running Script Suites",id:"running-script-suites",level:2},{value:"Group",id:"group",level:3},{value:"Suite",id:"suite",level:3},{value:"Script Suite Options",id:"script-suite-options",level:3},{value:"Pause on Error",id:"pause-on-error",level:4},{value:"Continue after Error",id:"continue-after-error",level:4},{value:"Abort after Error",id:"abort-after-error",level:4},{value:"Manual",id:"manual",level:4},{value:"Loop",id:"loop",level:4},{value:"Break Loop on Error",id:"break-loop-on-error",level:4},{value:"Debugging Scripts",id:"debugging-scripts",level:2}];function d(e){let t={a:"a",code:"code",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h2,{id:"introduction",children:"Introduction"}),"\n",(0,r.jsx)(t.p,{children:"Script Runner is both an editor of COSMOS scripts as well as executes scripts. Script files are stored within a COSMOS target and Script Runner provides the ability to open, save, download and delete these files. When a suite of scripts is opened, Script Runner provides additional options to run individual scripts, groups of scripts, or entire suites."}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"Script Runner",src:n(5568).A+"",width:"1273",height:"929"})}),"\n",(0,r.jsx)(t.h2,{id:"script-runner-menus",children:"Script Runner Menus"}),"\n",(0,r.jsx)(t.h3,{id:"file-menu-items",children:"File Menu Items"}),"\n",(0,r.jsx)("img",{src:n(9989).A,alt:"File Menu",style:{float:"left","margin-right":"50px",height:"250px"}}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"Clears the editor and filename"}),"\n",(0,r.jsx)(t.li,{children:"Creates a new test suite in Ruby or Python"}),"\n",(0,r.jsx)(t.li,{children:"Opens a dialog to select a file to open"}),"\n",(0,r.jsx)(t.li,{children:"Opens a recently used file"}),"\n",(0,r.jsx)(t.li,{children:"Saves the currently opened file to disk"}),"\n",(0,r.jsx)(t.li,{children:"Rename the current file"}),"\n",(0,r.jsx)(t.li,{children:"Downloads the current file to the browser"}),"\n",(0,r.jsxs)(t.li,{children:["Deletes the current file (Permanently!)","\n",(0,r.jsx)("br",{}),"\n",(0,r.jsx)("br",{}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.h4,{id:"file-open",children:"File Open"}),"\n",(0,r.jsx)(t.p,{children:"The File Open Dialog displays a tree view of the installed targets. You can manually open the folders and browse for the file you want. You can also use the search box at the top and start typing part of the filename to filter the results."}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"File Open",src:n(2499).A+"",width:"597",height:"599"})}),"\n",(0,r.jsx)(t.h4,{id:"file-save-as",children:"File Save As"}),"\n",(0,r.jsx)(t.p,{children:"When saving a file for the first time, or using File Save As, the File Save As Dialog appears. It works similar to the File Open Dialog displaying the tree view of the installed targets. You must select a folder by clicking the folder name and then filling out the Filename field with a filename before clicking Ok. You will be prompted before over-writing an existing file."}),"\n",(0,r.jsx)(t.h3,{id:"script-menu-items",children:"Script Menu Items"}),"\n",(0,r.jsx)("img",{src:n(4024).A,alt:"Script Menu",style:{float:"left","margin-right":"50px",height:"330px"}}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"Display started and finished scripts"}),"\n",(0,r.jsx)(t.li,{children:"Show environment variables"}),"\n",(0,r.jsx)(t.li,{children:"Show defined metadata"}),"\n",(0,r.jsx)(t.li,{children:"Show overridden telemetry values"}),"\n",(0,r.jsx)(t.li,{children:"Perform a syntax check"}),"\n",(0,r.jsx)(t.li,{children:"Perform a script mnemonic check"}),"\n",(0,r.jsx)(t.li,{children:"View the instrumented script"}),"\n",(0,r.jsx)(t.li,{children:"Shows the script call stack"}),"\n",(0,r.jsxs)(t.li,{children:["Display the ",(0,r.jsx)(t.a,{href:"/tools/staticdocs/docs/tools/script-runner#debugging-scripts",children:"debug"})," prompt"]}),"\n",(0,r.jsx)(t.li,{children:"Disconnect from real interfaces"}),"\n",(0,r.jsx)(t.li,{children:"Delete all script breakpoints"}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"The Execution Status popup lists the currently running scripts. This allows other users to connect to running scripts and follow along with the currently executing script. It also lists previously executed scripts so you can download the script log."}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"Running Scripts",src:n(6082).A+"",width:"1508",height:"505"})}),"\n",(0,r.jsx)(t.h2,{id:"running-scripts",children:"Running Scripts"}),"\n",(0,r.jsx)(t.p,{children:"Running a regular script is simply a matter of opening it and clicking the Start button. By default when you open a script the Filename is updated and the editor loads the script."}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"checks.rb",src:n(292).A+"",width:"3414",height:"1468"})}),"\n",(0,r.jsx)(t.p,{children:"Once you click Start the script is spawned in the Server and the Script State becomes Connecting."}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"connecting",src:n(2010).A+"",width:"1273",height:"68"})}),"\n",(0,r.jsx)(t.p,{children:"At that point the currently executing line is marked with green. If an error is encountered the line turns red and and the Pause button changes to Retry to allow the line to be re-tried."}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"error",src:n(4770).A+"",width:"1273",height:"527"})}),"\n",(0,r.jsx)(t.p,{children:"This allows checks that depend on telemetry changing to potentially be retried as telemetry is being updated live in the background. You can also click Go to continue pass the error or Stop to end the script execution."}),"\n",(0,r.jsx)(t.h3,{id:"right-click-script",children:"Right Click Script"}),"\n",(0,r.jsx)(t.p,{children:"Right clicking a script brings up several options:"}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"right-click",src:n(5653).A+"",width:"3418",height:"1476"})}),"\n",(0,r.jsx)(t.p,{children:"'Execute selection' causes the selected piece of code to be copied to a fresh Script Runner tab and executed independently of the current script. This is useful to run a selected section of code but be careful of references to other variables that are not selected. COSMOS will not be able to reference undefined variables!"}),"\n",(0,r.jsx)(t.p,{children:"'Run from here' causes everything from the current location of the cursor to be copied to a fresh Script Runner tab and executed independently of the current script. This is useful to avoid executing earlier pieces of code but be careful of references to other variables that are not selected. COSMOS will not be able to reference undefined variables!"}),"\n",(0,r.jsx)(t.p,{children:"'Clear all breakpoints' allows you to quickly clear breakpoints set by clicking on the editor line number."}),"\n",(0,r.jsx)(t.h2,{id:"script-environment-variables",children:"Script Environment Variables"}),"\n",(0,r.jsx)(t.p,{children:'Environment variables are used for storing information about the runtime environment of a running script. If your script depends on environment variables, you can access the "Script Environment Variables" dialog by clicking on the "(x)" icon next to the "Start" button.'}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"environment-variables",src:n(5295).A+"",width:"1254",height:"536"})}),"\n",(0,r.jsx)(t.p,{children:'Click the "+" icon to add a new environment variable, and set its name and value in the text fields. These can then be read in your Ruby and Python scripts.'}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-ruby",children:"# Ruby\nputs ENV['MYVAR'] # prints \"foo\"\n"})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-python",children:"# Python\nimport os\n\nprint(os.environ['MYVAR']) # prints \"foo\"\n"})}),"\n",(0,r.jsx)(t.h2,{id:"running-script-suites",children:"Running Script Suites"}),"\n",(0,r.jsx)(t.p,{children:"If a script is structured as a Suite it automatically causes Script Runner to parse the file to populate the Suite, Group, and Script drop down menus."}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"Suite Script",src:n(8108).A+"",width:"3420",height:"1654"})}),"\n",(0,r.jsx)(t.p,{children:"To generate a new Suite use the File -> New Suite and then choose either Ruby or Python to create a Suite in that language."}),"\n",(0,r.jsx)(t.h3,{id:"group",children:"Group"}),"\n",(0,r.jsx)(t.p,{children:"The Group class contains the methods used to run the test or operations. Any methods starting with 'script', 'op', or 'test' which are implemented inside a Group class are automatically included as scripts to run. For example, in the above image, you'll notice the 'script_power_on' is in the Script drop down menu. Here's another simple Ruby example:"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-ruby",children:'require \'openc3/script/suite.rb\'\nclass ExampleGroup < OpenC3::Group\n def setup\n puts "setup"\n end\n def script_1\n puts "script 1"\n end\n def teardown\n puts "teardown"\n end\nend\n'})}),"\n",(0,r.jsx)(t.p,{children:"Equivalent Python example:"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-python",children:'from openc3.script.suite import Suite, Group\nclass ExampleGroup(Group):\n def setup(self):\n print("setup")\n def script_1(self):\n print("script 1")\n def teardown(self):\n print("teardown")\n'})}),"\n",(0,r.jsx)(t.p,{children:"The setup and teardown methods are special methods which enable the Setup and Teardown buttons next to the Group drop down menu. Clicking these buttons runs the associated method."}),"\n",(0,r.jsx)(t.h3,{id:"suite",children:"Suite"}),"\n",(0,r.jsx)(t.p,{children:"Groups are added to Suites by creating a class inheriting from Suite and then calling the add_group method. For example in Ruby:"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-ruby",children:'class MySuite < OpenC3::Suite\n def initialize\n add_group(\'ExampleGroup\')\n end\n def setup\n puts "Suite setup"\n end\n def teardown\n puts "Suite teardown"\n end\nend\n'})}),"\n",(0,r.jsx)(t.p,{children:"In Python:"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-python",children:'from openc3.script.suite import Suite, Group\nclass MySuite(Suite):\n def __init__(self):\n self.add_group(ExampleGroup)\n def setup(self):\n print("Suite setup")\n def teardown(self):\n print("Suite teardown")\n'})}),"\n",(0,r.jsx)(t.p,{children:"Again there are setup and teardown methods which enable the Setup and Teardown buttons next to the Suite drop down menu."}),"\n",(0,r.jsx)(t.p,{children:"Multiple Suites and Groups can be created in the same file and will be parsed and added to the drop down menus. Clicking Start at the Suite level will run ALL Groups and ALL Scripts within each Group. Similarly, clicking Start at the Group level will run all Scripts in the Group. Clicking Start next to the Script will run just the single Script."}),"\n",(0,r.jsx)(t.h3,{id:"script-suite-options",children:"Script Suite Options"}),"\n",(0,r.jsx)(t.p,{children:"Opening a Script Suite creates six checkboxes which provide options to the running script."}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"Suite Checkboxes",src:n(1992).A+"",width:"464",height:"145"})}),"\n",(0,r.jsx)(t.h4,{id:"pause-on-error",children:"Pause on Error"}),"\n",(0,r.jsx)(t.p,{children:"Pauses the script if an error is encountered. This is the default and identical to how normal scripts are executed. Unchecking this box allows the script to continue past errors without user intervention. Similar to the User clicking Go upon encountering an error."}),"\n",(0,r.jsx)(t.h4,{id:"continue-after-error",children:"Continue after Error"}),"\n",(0,r.jsx)(t.p,{children:"Continue the script if an error is encountered. This is the default and identical to how normal scripts are executed. Unchecking this box means that the script will end after the first encountered error and execution will continue with any other scripts in the Suite/Group."}),"\n",(0,r.jsx)(t.h4,{id:"abort-after-error",children:"Abort after Error"}),"\n",(0,r.jsx)(t.p,{children:"Abort the entire execution upon encountering an error. If the first Script in a Suite's Group encounters an error the entire Suite will stop execution. Note, if Continue after Error is set, the current script is allowed to continue and complete."}),"\n",(0,r.jsx)(t.h4,{id:"manual",children:"Manual"}),"\n",(0,r.jsxs)(t.p,{children:["In Ruby, sets the global variable called ",(0,r.jsx)(t.code,{children:"$manual"})," to true. In Python, sets ",(0,r.jsx)(t.code,{children:"RunningScript.manual"})," to True. Setting this box only allows the script author to determine if the operator wants to execute manual steps or not. It is up the script author to use the variable in their scripts."]}),"\n",(0,r.jsx)(t.h4,{id:"loop",children:"Loop"}),"\n",(0,r.jsx)(t.p,{children:"Loop whatever the user started continuously. If the user clicks Start next to the Group then the entire Group will be looped. This is useful to catch and debug those tricky timing errors that only sometimes happen."}),"\n",(0,r.jsx)(t.h4,{id:"break-loop-on-error",children:"Break Loop on Error"}),"\n",(0,r.jsx)(t.p,{children:"Break the loop if an Error occurs. Only available if the Loop option is set."}),"\n",(0,r.jsx)(t.h2,{id:"debugging-scripts",children:"Debugging Scripts"}),"\n",(0,r.jsxs)(t.p,{children:["When you enable the Debug prompt an additional line appears between the script and the Log Messages. You can type local variables to cause them to be output in the Log Messages. You can also set local variables by typing ",(0,r.jsx)(t.code,{children:"var = 10"}),"."]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"Debug",src:n(8340).A+"",width:"1273",height:"748"})}),"\n",(0,r.jsx)(t.p,{children:"The Step button allows you to step line by line through the script. Clicking Go continues regular execution."})]})}function p(e={}){let{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},9989:function(e,t,n){n.d(t,{A:()=>i});let i=n.p+"assets/images/file_menu-470589e527d9e82ce40e0c7d4a865e33d19b42350c2429dba97186d168137b6d.png"},4024:function(e,t,n){n.d(t,{A:()=>i});let i=n.p+"assets/images/script_menu-5a10df89d9806a59b41ef990fc1181c46c7ffa00496021efceb22c0f31dcc9cc.png"},292:function(e,t,n){n.d(t,{A:()=>i});let i=n.p+"assets/images/checks_rb-4e28c3a8422638404e790054f83f6a61592f5cf848ff6d9bd1ce228813622c9a.png"},2010:function(e,t,n){n.d(t,{A:()=>i});let i=n.p+"assets/images/connecting-0f804651a891ef6112a51ba8b2e4d8dcb46e3462dcbc94e7b3c75bff20fc04e7.png"},8340:function(e,t,n){n.d(t,{A:()=>i});let i=n.p+"assets/images/debug-3103972d64395b50fff5808661fb846ae2de7d5934548ca5b88032f1ae12c541.png"},5295:function(e,t,n){n.d(t,{A:()=>i});let i=n.p+"assets/images/environment_variables-72bbb71e6f428ec5efa340eb402289b6d42a84d3c5ce724025d32415242dec09.png"},2499:function(e,t,n){n.d(t,{A:()=>i});let i=n.p+"assets/images/file_open-a5bc9e5ef73c12913ea4882498ceb52f93c73afaf5bb0c1083c4c1ee402f571d.png"},5653:function(e,t,n){n.d(t,{A:()=>i});let i=n.p+"assets/images/right_click-81df09085fe9f75805cf35b5876177789eef0d879b54a734a8395e3817f1959d.png"},6082:function(e,t,n){n.d(t,{A:()=>i});let i=n.p+"assets/images/running_scripts-694a1b310d42791acf64cf76ea370bb273084954107d5e6e2caf15f4fb50e634.png"},4770:function(e,t,n){n.d(t,{A:()=>i});let i=n.p+"assets/images/script_error-2061222e00f5e5190a4407be1f8999200badca9b3137659de007e27cf1708dc0.png"},5568:function(e,t,n){n.d(t,{A:()=>i});let i=n.p+"assets/images/script_runner-31f6bfcb631b788ff0bf792ac21da30aaa503ca926b10a22d4337114effc28f0.png"},8108:function(e,t,n){n.d(t,{A:()=>i});let i=n.p+"assets/images/script_suite-0d1f45f9226d3ac0ed12d5ce91220dccf88402fd8582c4512acc8886a3cf2249.png"},1992:function(e,t,n){n.d(t,{A:()=>i});let i=n.p+"assets/images/suite_checkboxes-af8452153dbc2143718fefcfc7d441e05f42c241b3c10d4f41200ae576f68063.png"},677:function(e,t,n){n.d(t,{R:()=>o,x:()=>c});var i=n(6363);let r={},s=i.createContext(r);function o(e){let t=i.useContext(s);return i.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),i.createElement(s.Provider,{value:t},e.children)}}}]);
|
@@ -0,0 +1 @@
|
|
1
|
+
"use strict";(self.webpackChunkdocs_openc3_com=self.webpackChunkdocs_openc3_com||[]).push([["594"],{7084:function(e,t,n){n.r(t),n.d(t,{frontMatter:()=>a,toc:()=>d,default:()=>h,metadata:()=>i,assets:()=>c,contentTitle:()=>r});var i=JSON.parse('{"id":"introduction","title":"Introduction","description":"This site aims to be a comprehensive guide to OpenC3 COSMOS. We\'ll cover topics such as getting your configuration up and running, developing test and operations scripts, building custom telemetry screens, and give you some advice on participating in the future development of COSMOS itself.","source":"@site/docs/introduction.md","sourceDirName":".","slug":"/","permalink":"/tools/staticdocs/docs/","draft":false,"unlisted":false,"editUrl":"https://github.com/OpenC3/cosmos/tree/main/docs.openc3.com/docs/introduction.md","tags":[],"version":"current","sidebarPosition":0,"frontMatter":{"title":"Introduction","sidebar_position":0,"slug":"/"},"sidebar":"defaultSidebar","next":{"title":"Getting Started","permalink":"/tools/staticdocs/docs/getting-started"}}'),s=n(7259),o=n(677);let a={title:"Introduction",sidebar_position:0,slug:"/"},r,c={},d=[{value:"So what is COSMOS, exactly?",id:"so-what-is-cosmos-exactly",level:2},{value:"COSMOS Architecture",id:"cosmos-architecture",level:3},{value:"Helpful Hints",id:"helpful-hints",level:2}];function l(e){let t={a:"a",admonition:"admonition",h2:"h2",h3:"h3",img:"img",p:"p",...(0,o.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.p,{children:"This site aims to be a comprehensive guide to OpenC3 COSMOS. We'll cover topics such as getting your configuration up and running, developing test and operations scripts, building custom telemetry screens, and give you some advice on participating in the future development of COSMOS itself."}),"\n",(0,s.jsx)(t.h2,{id:"so-what-is-cosmos-exactly",children:"So what is COSMOS, exactly?"}),"\n",(0,s.jsx)(t.p,{children:"COSMOS is a suite of applications that can be used to control a set of embedded systems. These systems can be anything from test equipment (power supplies, oscilloscopes, switched power strips, UPS devices, etc), to development boards (Arduinos, Raspberry Pi, Beaglebone, etc), to satellites."}),"\n",(0,s.jsx)(t.h3,{id:"cosmos-architecture",children:"COSMOS Architecture"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"COSMOS Architecture",src:n(8212).A+"",width:"1155",height:"538"})}),"\n",(0,s.jsx)(t.p,{children:"COSMOS 5 is a cloud native, containerized, microservice oriented command and control system. All the COSMOS microservices are docker containers which is why Docker is shown containing the entire COSMOS system. The green boxes on the left represent external embedded systems (Targets) which COSMOS connects to. The Redis data store contains the configuration for all the microservices, the current value table, as well as data streams containing decommutated data. The Minio data store contains plugins, targets, configuration data, text logs as well as binary logs of all the raw, decommutated, and reduced data. Users interact with COSMOS from a web browser which routes through the internal Traefik load balancer."}),"\n",(0,s.jsx)(t.p,{children:"Keep reading for an in-depth discussion of each of the COSMOS Tools."}),"\n",(0,s.jsx)(t.h2,{id:"helpful-hints",children:"Helpful Hints"}),"\n",(0,s.jsx)(t.p,{children:"Throughout this guide there are a number of small-but-handy pieces of\ninformation that can make using COSMOS easier, more interesting, and less\nhazardous. Here's what to look out for."}),"\n",(0,s.jsx)(t.admonition,{title:"ProTips\u2122 help you get more from COSMOS",type:"note",children:(0,s.jsx)(t.p,{children:"These are tips and tricks that will help you be a COSMOS wizard!"})}),"\n",(0,s.jsx)(t.admonition,{title:"Notes are handy pieces of information",type:"info",children:(0,s.jsx)(t.p,{children:"These are for the extra tidbits sometimes necessary to understand COSMOS."})}),"\n",(0,s.jsx)(t.admonition,{title:"Warnings help you not blow things up",type:"warning",children:(0,s.jsx)(t.p,{children:"Be aware of these messages if you wish to avoid certain death."})}),"\n",(0,s.jsx)(t.admonition,{title:"Find a problem in the documentation or in COSMOS itself?",type:"note",children:(0,s.jsxs)(t.p,{children:["Both using and hacking on COSMOS should be fun, simple, and easy, so if for\nsome reason you find it's a pain, please ",(0,s.jsx)(t.a,{href:"https://github.com/OpenC3/cosmos/issues/new/choose",children:"create an issue"})," on\nGitHub describing your experience so we can make it better."]})})]})}function h(e={}){let{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},8212:function(e,t,n){n.d(t,{A:()=>i});let i=n.p+"assets/images/architecture-b78f12eba076a0c07af7abdd9dd4187c59aa6b4f5c51b47ad03f73e9f98a6ed6.png"},677:function(e,t,n){n.d(t,{R:()=>a,x:()=>r});var i=n(6363);let s={},o=i.createContext(s);function a(e){let t=i.useContext(o);return i.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),i.createElement(o.Provider,{value:t},e.children)}}}]);
|
@@ -0,0 +1 @@
|
|
1
|
+
"use strict";(self.webpackChunkdocs_openc3_com=self.webpackChunkdocs_openc3_com||[]).push([["7564"],{5878:function(e,t,o){o.r(t),o.d(t,{frontMatter:()=>i,toc:()=>d,default:()=>l,metadata:()=>s,assets:()=>r,contentTitle:()=>c});var s=JSON.parse('{"id":"tools/command-history","title":"Command History (Enterprise)","description":"See all the commands sent, by whom, and if successful","source":"@site/docs/tools/command-history.md","sourceDirName":"tools","slug":"/tools/command-history","permalink":"/tools/staticdocs/docs/tools/command-history","draft":false,"unlisted":false,"editUrl":"https://github.com/OpenC3/cosmos/tree/main/docs.openc3.com/docs/tools/command-history.md","tags":[],"version":"current","frontMatter":{"title":"Command History (Enterprise)","description":"See all the commands sent, by whom, and if successful","sidebar_custom_props":{"myEmoji":"\u{1F4CB}"}},"sidebar":"defaultSidebar","previous":{"title":"Command and Telemetry Server","permalink":"/tools/staticdocs/docs/tools/cmd-tlm-server"},"next":{"title":"Command Queue (Enterprise)","permalink":"/tools/staticdocs/docs/tools/command-queue"}}'),n=o(7259),a=o(677);let i={title:"Command History (Enterprise)",description:"See all the commands sent, by whom, and if successful",sidebar_custom_props:{myEmoji:"\u{1F4CB}"}},c,r={},d=[{value:"Introduction",id:"introduction",level:2},{value:"Selecting Time",id:"selecting-time",level:3},{value:"Commands Table",id:"commands-table",level:2}];function m(e){let t={a:"a",h2:"h2",h3:"h3",img:"img",p:"p",...(0,a.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h2,{id:"introduction",children:"Introduction"}),"\n",(0,n.jsx)(t.p,{children:"Command History provides the ability to see all the commands sent in COSMOS. Commands are listed in time execution order and include who sent the command and whether they were successful (if validated)."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Command History",src:o(7644).A+"",width:"2878",height:"1660"})}),"\n",(0,n.jsx)(t.h3,{id:"selecting-time",children:"Selecting Time"}),"\n",(0,n.jsx)(t.p,{children:"By default, Command History displays the last hour of commands and then continues streaming commands as they are sent. You can select a different time range using the start date / time and end date / time choosers."}),"\n",(0,n.jsx)(t.h2,{id:"commands-table",children:"Commands Table"}),"\n",(0,n.jsx)(t.p,{children:"The commands table is sorted by Time and list the User (or process), the Command, the Result and an optional Description."}),"\n",(0,n.jsx)(t.p,{children:"As shown above, the User can be an actual user in the system (admin, operator) or a background process (DEFAULT__MULTI__INST, DEFAULT__DECOM__INST2)."}),"\n",(0,n.jsxs)(t.p,{children:["The Result field is the result of executing Command Validators established by the ",(0,n.jsx)(t.a,{href:"../configuration/command#validator",children:"VALIDATOR"})," keyword. Command Validators are either a Ruby or Python class which is used to validate the command success or failure with both a pre_check and post_check method. Usually when a command fails, a description is given as in the example above."]}),"\n",(0,n.jsxs)(t.p,{children:["For more information read the ",(0,n.jsx)(t.a,{href:"../configuration/command#validator",children:"VALIDATOR"})," documentation and also see the ",(0,n.jsx)(t.a,{href:"https://github.com/OpenC3/cosmos/blob/main/openc3-cosmos-init/plugins/packages/openc3-cosmos-demo/targets/INST/lib/inst_cmd_validator.rb",children:"Ruby Example"})," and the ",(0,n.jsx)(t.a,{href:"https://github.com/OpenC3/cosmos/blob/main/openc3-cosmos-init/plugins/packages/openc3-cosmos-demo/targets/INST2/lib/inst2_cmd_validator.py",children:"Python Example"})," in the ",(0,n.jsx)(t.a,{href:"https://github.com/OpenC3/cosmos/tree/main/openc3-cosmos-init/plugins/packages/openc3-cosmos-demo",children:"COSMOS Demo"}),"."]})]})}function l(e={}){let{wrapper:t}={...(0,a.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(m,{...e})}):m(e)}},7644:function(e,t,o){o.d(t,{A:()=>s});let s=o.p+"assets/images/command_history-ecc9b618661ad0aefa0700047a8ab3b094372f2aa427e9fcd270dcd352a30408.png"},677:function(e,t,o){o.d(t,{R:()=>i,x:()=>c});var s=o(6363);let n={},a=s.createContext(n);function i(e){let t=s.useContext(a);return s.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),s.createElement(a.Provider,{value:t},e.children)}}}]);
|