From e3c0bdb6f6c64e84923b2d4737fc9b106631f3ef Mon Sep 17 00:00:00 2001 From: Steffen Vogel Date: Thu, 18 Nov 2021 12:10:36 +0100 Subject: [PATCH] add new openapi spec --- doc/.gitignore | 6 + doc/.redocly.yaml | 14 + doc/dia/classes.dia | Bin 2446 -> 0 bytes doc/favicon.png | Bin 0 -> 716 bytes doc/index.html | 24 + doc/openapi.yaml | 798 --------- doc/openapi/README.md | 13 + doc/openapi/components/README.md | 14 + .../components/parameters/node-uuid-name.yaml | 10 + .../components/parameters/node-uuid.yaml | 7 + .../components/parameters/path-uuid.yaml | 7 + doc/openapi/components/schemas/config.yaml | 39 + .../components/schemas/config/format.yaml | 30 + .../schemas/config/formats/column.yaml | 10 + .../schemas/config/formats/csv.yaml | 10 + .../schemas/config/formats/gtnet.yaml | 10 + .../schemas/config/formats/iotagent_ul.yaml | 10 + .../schemas/config/formats/json.yaml | 10 + .../schemas/config/formats/json_edgeflex.yaml | 10 + .../schemas/config/formats/json_kafka.yaml | 10 + .../schemas/config/formats/json_reserve.yaml | 10 + .../schemas/config/formats/line.yaml | 10 + .../schemas/config/formats/protobuf.yaml | 10 + .../schemas/config/formats/raw.yaml | 10 + .../schemas/config/formats/tsv.yaml | 10 + .../schemas/config/formats/value.yaml | 10 + .../schemas/config/formats/villas_binary.yaml | 10 + .../schemas/config/formats/villas_human.yaml | 10 + .../schemas/config/formats/villas_web.yaml | 10 + .../components/schemas/config/formatspec.yaml | 20 + .../components/schemas/config/global.yaml | 69 + .../components/schemas/config/hook.yaml | 48 + .../components/schemas/config/hooklist.yaml | 36 + .../schemas/config/hooks/average.yaml | 8 + .../components/schemas/config/hooks/cast.yaml | 8 + .../schemas/config/hooks/decimate.yaml | 10 + .../components/schemas/config/hooks/dp.yaml | 8 + .../components/schemas/config/hooks/drop.yaml | 8 + .../components/schemas/config/hooks/dump.yaml | 8 + .../components/schemas/config/hooks/ebm.yaml | 8 + .../components/schemas/config/hooks/fix.yaml | 8 + .../components/schemas/config/hooks/gate.yaml | 8 + .../schemas/config/hooks/jitter_calc.yaml | 8 + .../schemas/config/hooks/limit_rate.yaml | 8 + .../schemas/config/hooks/limit_value.yaml | 8 + .../components/schemas/config/hooks/lua.yaml | 8 + .../components/schemas/config/hooks/ma.yaml | 8 + .../schemas/config/hooks/pmu_dft.yaml | 8 + .../schemas/config/hooks/pps_ts.yaml | 8 + .../schemas/config/hooks/print.yaml | 11 + .../schemas/config/hooks/restart.yaml | 8 + .../components/schemas/config/hooks/rms.yaml | 8 + .../schemas/config/hooks/scale.yaml | 8 + .../schemas/config/hooks/shift_seq.yaml | 8 + .../schemas/config/hooks/shift_ts.yaml | 8 + .../schemas/config/hooks/skip_first.yaml | 8 + .../schemas/config/hooks/stats.yaml | 8 + .../components/schemas/config/hooks/ts.yaml | 8 + .../components/schemas/config/http.yaml | 23 + .../components/schemas/config/logging.yaml | 70 + .../components/schemas/config/netem.yaml | 52 + .../components/schemas/config/node.yaml | 97 ++ .../components/schemas/config/nodes/amqp.yaml | 10 + .../components/schemas/config/nodes/can.yaml | 10 + .../schemas/config/nodes/comedi.yaml | 10 + .../schemas/config/nodes/ethercat.yaml | 10 + .../components/schemas/config/nodes/exec.yaml | 10 + .../components/schemas/config/nodes/file.yaml | 10 + .../components/schemas/config/nodes/fpga.yaml | 10 + .../schemas/config/nodes/iec61850-8-1.yaml | 10 + .../schemas/config/nodes/iec61850-9-2.yaml | 10 + .../schemas/config/nodes/infiniband.yaml | 10 + .../schemas/config/nodes/influxdb.yaml | 10 + .../schemas/config/nodes/kafka.yaml | 10 + .../schemas/config/nodes/loopback.yaml | 10 + .../components/schemas/config/nodes/mqtt.yaml | 10 + .../schemas/config/nodes/nanomsg.yaml | 10 + .../components/schemas/config/nodes/ngsi.yaml | 10 + .../components/schemas/config/nodes/opal.yaml | 10 + .../schemas/config/nodes/redis.yaml | 10 + .../components/schemas/config/nodes/rtp.yaml | 10 + .../schemas/config/nodes/shmem.yaml | 10 + .../schemas/config/nodes/signal.yaml | 10 + .../schemas/config/nodes/signal_v2.yaml | 10 + .../schemas/config/nodes/socket.yaml | 10 + .../schemas/config/nodes/stats.yaml | 10 + .../schemas/config/nodes/temper.yaml | 10 + .../schemas/config/nodes/test_rtt.yaml | 10 + .../schemas/config/nodes/uldaq.yaml | 10 + .../schemas/config/nodes/websocket.yaml | 10 + .../schemas/config/nodes/zeromq.yaml | 10 + .../components/schemas/config/path.yaml | 89 + .../components/schemas/config/signaldef.yaml | 54 + .../components/schemas/config/signallist.yaml | 43 + .../components/schemas/formats/edgeflex.yaml} | 28 +- .../components/schemas/formats/igor.yaml} | 44 +- .../schemas/formats/sogno-old.yaml} | 14 +- .../components/schemas/formats/sogno.yaml} | 7 +- doc/openapi/openapi.yaml | 146 ++ doc/openapi/paths/README.md | 105 ++ doc/openapi/paths/capabilities.yaml | 94 + doc/openapi/paths/config.yaml | 54 + doc/openapi/paths/graph.{format}.yaml | 53 + .../paths/node/node@{uuid-or-name}.yaml | 33 + .../node/node@{uuid-or-name}@file@rewind.yaml | 13 + .../node/node@{uuid-or-name}@file@seek.yaml | 27 + .../paths/node/node@{uuid-or-name}@pause.yaml | 13 + .../node/node@{uuid-or-name}@restart.yaml | 13 + .../node/node@{uuid-or-name}@resume.yaml | 13 + .../paths/node/node@{uuid-or-name}@start.yaml | 12 + .../paths/node/node@{uuid-or-name}@stats.yaml | 139 ++ .../node/node@{uuid-or-name}@stats@reset.yaml | 12 + .../paths/node/node@{uuid-or-name}@stop.yaml | 12 + doc/openapi/paths/nodes.yaml | 71 + doc/openapi/paths/path/path@{uuid}.yaml | 33 + doc/openapi/paths/path/path@{uuid}@start.yaml | 12 + doc/openapi/paths/path/path@{uuid}@stop.yaml | 12 + doc/openapi/paths/paths.yaml | 48 + doc/openapi/paths/restart.yaml | 36 + doc/openapi/paths/shutdown.yaml | 11 + doc/openapi/paths/status.yaml | 56 + doc/package-lock.json | 1546 +++++++++++++++++ doc/package.json | 13 + doc/schema/config.yaml | 185 -- 124 files changed, 4042 insertions(+), 1031 deletions(-) create mode 100644 doc/.redocly.yaml delete mode 100644 doc/dia/classes.dia create mode 100644 doc/favicon.png create mode 100644 doc/index.html delete mode 100644 doc/openapi.yaml create mode 100644 doc/openapi/README.md create mode 100644 doc/openapi/components/README.md create mode 100644 doc/openapi/components/parameters/node-uuid-name.yaml create mode 100644 doc/openapi/components/parameters/node-uuid.yaml create mode 100644 doc/openapi/components/parameters/path-uuid.yaml create mode 100644 doc/openapi/components/schemas/config.yaml create mode 100644 doc/openapi/components/schemas/config/format.yaml create mode 100644 doc/openapi/components/schemas/config/formats/column.yaml create mode 100644 doc/openapi/components/schemas/config/formats/csv.yaml create mode 100644 doc/openapi/components/schemas/config/formats/gtnet.yaml create mode 100644 doc/openapi/components/schemas/config/formats/iotagent_ul.yaml create mode 100644 doc/openapi/components/schemas/config/formats/json.yaml create mode 100644 doc/openapi/components/schemas/config/formats/json_edgeflex.yaml create mode 100644 doc/openapi/components/schemas/config/formats/json_kafka.yaml create mode 100644 doc/openapi/components/schemas/config/formats/json_reserve.yaml create mode 100644 doc/openapi/components/schemas/config/formats/line.yaml create mode 100644 doc/openapi/components/schemas/config/formats/protobuf.yaml create mode 100644 doc/openapi/components/schemas/config/formats/raw.yaml create mode 100644 doc/openapi/components/schemas/config/formats/tsv.yaml create mode 100644 doc/openapi/components/schemas/config/formats/value.yaml create mode 100644 doc/openapi/components/schemas/config/formats/villas_binary.yaml create mode 100644 doc/openapi/components/schemas/config/formats/villas_human.yaml create mode 100644 doc/openapi/components/schemas/config/formats/villas_web.yaml create mode 100644 doc/openapi/components/schemas/config/formatspec.yaml create mode 100644 doc/openapi/components/schemas/config/global.yaml create mode 100644 doc/openapi/components/schemas/config/hook.yaml create mode 100644 doc/openapi/components/schemas/config/hooklist.yaml create mode 100644 doc/openapi/components/schemas/config/hooks/average.yaml create mode 100644 doc/openapi/components/schemas/config/hooks/cast.yaml create mode 100644 doc/openapi/components/schemas/config/hooks/decimate.yaml create mode 100644 doc/openapi/components/schemas/config/hooks/dp.yaml create mode 100644 doc/openapi/components/schemas/config/hooks/drop.yaml create mode 100644 doc/openapi/components/schemas/config/hooks/dump.yaml create mode 100644 doc/openapi/components/schemas/config/hooks/ebm.yaml create mode 100644 doc/openapi/components/schemas/config/hooks/fix.yaml create mode 100644 doc/openapi/components/schemas/config/hooks/gate.yaml create mode 100644 doc/openapi/components/schemas/config/hooks/jitter_calc.yaml create mode 100644 doc/openapi/components/schemas/config/hooks/limit_rate.yaml create mode 100644 doc/openapi/components/schemas/config/hooks/limit_value.yaml create mode 100644 doc/openapi/components/schemas/config/hooks/lua.yaml create mode 100644 doc/openapi/components/schemas/config/hooks/ma.yaml create mode 100644 doc/openapi/components/schemas/config/hooks/pmu_dft.yaml create mode 100644 doc/openapi/components/schemas/config/hooks/pps_ts.yaml create mode 100644 doc/openapi/components/schemas/config/hooks/print.yaml create mode 100644 doc/openapi/components/schemas/config/hooks/restart.yaml create mode 100644 doc/openapi/components/schemas/config/hooks/rms.yaml create mode 100644 doc/openapi/components/schemas/config/hooks/scale.yaml create mode 100644 doc/openapi/components/schemas/config/hooks/shift_seq.yaml create mode 100644 doc/openapi/components/schemas/config/hooks/shift_ts.yaml create mode 100644 doc/openapi/components/schemas/config/hooks/skip_first.yaml create mode 100644 doc/openapi/components/schemas/config/hooks/stats.yaml create mode 100644 doc/openapi/components/schemas/config/hooks/ts.yaml create mode 100644 doc/openapi/components/schemas/config/http.yaml create mode 100644 doc/openapi/components/schemas/config/logging.yaml create mode 100644 doc/openapi/components/schemas/config/netem.yaml create mode 100644 doc/openapi/components/schemas/config/node.yaml create mode 100644 doc/openapi/components/schemas/config/nodes/amqp.yaml create mode 100644 doc/openapi/components/schemas/config/nodes/can.yaml create mode 100644 doc/openapi/components/schemas/config/nodes/comedi.yaml create mode 100644 doc/openapi/components/schemas/config/nodes/ethercat.yaml create mode 100644 doc/openapi/components/schemas/config/nodes/exec.yaml create mode 100644 doc/openapi/components/schemas/config/nodes/file.yaml create mode 100644 doc/openapi/components/schemas/config/nodes/fpga.yaml create mode 100644 doc/openapi/components/schemas/config/nodes/iec61850-8-1.yaml create mode 100644 doc/openapi/components/schemas/config/nodes/iec61850-9-2.yaml create mode 100644 doc/openapi/components/schemas/config/nodes/infiniband.yaml create mode 100644 doc/openapi/components/schemas/config/nodes/influxdb.yaml create mode 100644 doc/openapi/components/schemas/config/nodes/kafka.yaml create mode 100644 doc/openapi/components/schemas/config/nodes/loopback.yaml create mode 100644 doc/openapi/components/schemas/config/nodes/mqtt.yaml create mode 100644 doc/openapi/components/schemas/config/nodes/nanomsg.yaml create mode 100644 doc/openapi/components/schemas/config/nodes/ngsi.yaml create mode 100644 doc/openapi/components/schemas/config/nodes/opal.yaml create mode 100644 doc/openapi/components/schemas/config/nodes/redis.yaml create mode 100644 doc/openapi/components/schemas/config/nodes/rtp.yaml create mode 100644 doc/openapi/components/schemas/config/nodes/shmem.yaml create mode 100644 doc/openapi/components/schemas/config/nodes/signal.yaml create mode 100644 doc/openapi/components/schemas/config/nodes/signal_v2.yaml create mode 100644 doc/openapi/components/schemas/config/nodes/socket.yaml create mode 100644 doc/openapi/components/schemas/config/nodes/stats.yaml create mode 100644 doc/openapi/components/schemas/config/nodes/temper.yaml create mode 100644 doc/openapi/components/schemas/config/nodes/test_rtt.yaml create mode 100644 doc/openapi/components/schemas/config/nodes/uldaq.yaml create mode 100644 doc/openapi/components/schemas/config/nodes/websocket.yaml create mode 100644 doc/openapi/components/schemas/config/nodes/zeromq.yaml create mode 100644 doc/openapi/components/schemas/config/path.yaml create mode 100644 doc/openapi/components/schemas/config/signaldef.yaml create mode 100644 doc/openapi/components/schemas/config/signallist.yaml rename doc/{schema/format/acs-pmu-edgeflex.yaml => openapi/components/schemas/formats/edgeflex.yaml} (63%) rename doc/{schema/format/acs-pmu-igor.yaml => openapi/components/schemas/formats/igor.yaml} (68%) rename doc/{schema/format/acs-pmu-sogno-old.yaml => openapi/components/schemas/formats/sogno-old.yaml} (87%) rename doc/{schema/format/acs-pmu-sogno.yaml => openapi/components/schemas/formats/sogno.yaml} (92%) create mode 100644 doc/openapi/openapi.yaml create mode 100644 doc/openapi/paths/README.md create mode 100644 doc/openapi/paths/capabilities.yaml create mode 100644 doc/openapi/paths/config.yaml create mode 100644 doc/openapi/paths/graph.{format}.yaml create mode 100644 doc/openapi/paths/node/node@{uuid-or-name}.yaml create mode 100644 doc/openapi/paths/node/node@{uuid-or-name}@file@rewind.yaml create mode 100644 doc/openapi/paths/node/node@{uuid-or-name}@file@seek.yaml create mode 100644 doc/openapi/paths/node/node@{uuid-or-name}@pause.yaml create mode 100644 doc/openapi/paths/node/node@{uuid-or-name}@restart.yaml create mode 100644 doc/openapi/paths/node/node@{uuid-or-name}@resume.yaml create mode 100644 doc/openapi/paths/node/node@{uuid-or-name}@start.yaml create mode 100644 doc/openapi/paths/node/node@{uuid-or-name}@stats.yaml create mode 100644 doc/openapi/paths/node/node@{uuid-or-name}@stats@reset.yaml create mode 100644 doc/openapi/paths/node/node@{uuid-or-name}@stop.yaml create mode 100644 doc/openapi/paths/nodes.yaml create mode 100644 doc/openapi/paths/path/path@{uuid}.yaml create mode 100644 doc/openapi/paths/path/path@{uuid}@start.yaml create mode 100644 doc/openapi/paths/path/path@{uuid}@stop.yaml create mode 100644 doc/openapi/paths/paths.yaml create mode 100644 doc/openapi/paths/restart.yaml create mode 100644 doc/openapi/paths/shutdown.yaml create mode 100644 doc/openapi/paths/status.yaml create mode 100644 doc/package-lock.json create mode 100644 doc/package.json delete mode 100644 doc/schema/config.yaml diff --git a/doc/.gitignore b/doc/.gitignore index 4367453f3..b3fbf1bb9 100644 --- a/doc/.gitignore +++ b/doc/.gitignore @@ -1,3 +1,9 @@ html/ doxygen_sqlite3.db warnings.log + +# Dir for bundles +dist +node_modules +dist.yaml +redoc-static.html diff --git a/doc/.redocly.yaml b/doc/.redocly.yaml new file mode 100644 index 000000000..47dc94ec0 --- /dev/null +++ b/doc/.redocly.yaml @@ -0,0 +1,14 @@ +# See https://redoc.ly/docs/cli/configuration/ for more information. +apiDefinitions: + main: openapi/openapi.yaml +lint: + extends: + - recommended + rules: + no-unused-components: warning +referenceDocs: + htmlTemplate: ./index.html + theme: + colors: + primary: + main: "#32329f" diff --git a/doc/dia/classes.dia b/doc/dia/classes.dia deleted file mode 100644 index 2e9f1c896b7fb3b321e005a78adc38b7f6842456..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2446 zcmZ{jXH*gj8^^tAG}K(x&243P9cAG{lr+PULheCca%66CCb>2DEK@8{Nl`Iz;Yd?6 zQgY_VG{oE*k!e!S@S?uG-P3tLz0dEQ=bY#F?SIbykxf6$^WQlj_7#Q5A)B0>raHO& z2$i-oT`Ok1x0RljzH})a_jz!`+qKg~!whE>AXgoZ-f1?!mwPlt?t#s>FQ+VxD*D|D{?f|6O(NqEk!+C0S1|hU3Mg$TDXk&XaMv zo%|){=Cn-VHrbxV=4P!083Q0U_W2MYA(H!NFiJBov75$HjqfOnJ0YgBbAgk0Lan`kQpVotn8UW1(`r?}`+%!tb`m1uc(O`b zm2JG08L@J>kkMN6W{Bdx1<%J@@60G{w>gF^4}GPh-d5`<6tKDad;=n3kN9UX+Ur?2 z4JoY6-2}5w{njgX4HAtDT_T;T75n_bG$lcBbW~bX#953qxNAZbNM*dR_)QNPck4HgmDE55f`p(`G(VW{A!?BXj z++BRKe@a&%Iv9EC*f0;QQ^;deor^NtwrTQv_ppF381-!3oRxD~8aY8?DP*0QOgE&5 z$oUMtc=kqYT@2Jw%0Cn>1+pT^kD z4E~7h@7hji2Xu|@U@pmSIQpGgaB4Vbia7((b0N(4H{ygk=*#NQ(RcJ0fVpsvMDdb1 zvP7_;%*DE+^+u&ONHuFYFTy0}z;>80H{W6sF#Kp4hS^(SDeQf2>)@Y+tj>Eq--PN- z)s?-rEC$1hOkIg3sk7Xuxo<^;{q1yvLJ3AF>8KEOXZ6c=;xe}ueUTlxP1%f}?nctd zmQ4nkN(~tno*VvQwgx~}v-SDwSJyGCFN5Y)kW*@c#!o}XV=yFyFF#_@xYLI z$&LhPD+xFzo5s=tN3vZLdyA%iFs3wbIdHI1ah$7f+*7|D6!S$(ytx_AiTLS^Ayl%%x0&wxipo_Pi`(Ne8De_taev2omis|UhqdM(%0xHI%On{p&@4VDHfam+V`&r%4FN162zpu#JKU0mX}x|pYOLJN zJM*I>)Zg)fgE+G(=p(lIrsIK@fcyV22{Wx$uAfwzanT?9IjQr$Y@i-^ zU*ekD;@T~*peo#D&2r_BN@FL{cpj}kez7U3^|M;!bT{(t61qIP-Ux_;;_dhffUm!( z2K0xHV@1RHoA5CGC_QH2O%&C4QZhDXCoHW5$KNBm2>G2)pETw@FdR|fDL@qCv_ zC?VNkP+c(QxsY}~O%dgA2;~@qk708{)AFm#6in}^*2F8szqH#gkxVCm&<{IO6^K+* z$rn?Fu!zUk{^@>sNZwnY2>5?1iG9(Mb_s=Q7V>z3 zJuBqMQ+JSp8TMRJ2^R((#_c6%Fkn-Tm`4RA)E4~>xo`^WMZE6^8y}Vaw<3j4$J|^G z;%r#qxZ-w;^r^K_>P&1f6q5)hyY#kJ3}Kkz0R>dZBfz_|6EzBvRCcz2x5M zm&Td!W&?hU2M9?iH3tyI4ca$gqNo|=GWzI@Dr5b9CqdPhL*DrDCIxQ)(*7o-n0{7c zVR{XCX{T-Z=eKaqgeHnI&flM2%iN9>7knrX#c&TJ^Me2Q#ikT^B0;GKVeJ~JMNxe3 zG=9<2>yKDqEUCMwZ{?gPhzI{K;X?SahlsrF(iQMMAbC@pX3<1lJ4edo@4e7a4WJ$9 z-B^+vjcQ4BmrcUKoq@j~y;Kendp68-T5LVa9B~i7^7GD_gpD*Nin=!jmiIAuw4)%2 nt3#3WOj*7l?n*tc5P>SC*Gs+gs%hA1Psqo>@2>SG56^!9!o9;L diff --git a/doc/favicon.png b/doc/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..b5c1a2d8b44a7e0021d8ee7305a3570f7462c942 GIT binary patch literal 716 zcmV;-0yF)IP)%VB|+?Zc6U79Fd(~o z{D|pM53aYv*Xu*+;t;R ztxTS_#uaVTO10!N0#Td+sPZOI3}g;K7gmNv;&8mC}ovhoU7~Hk?V{(mxXdpITSDfy{OtD$)?{1ik>OE-luH zcgy2=!JC=`aq0k|)I?_Lm`LnXfmA*L+d4?EMnduYmsd90h0q**|exB8$z}aF>sLu4C9dhsv3+ zV=4O<7(1iQUpzOT!sZ7Nq(kL(ESf(QtyZ>>*}!!gN@a#PonP%;PEvbvSM)*{BZ#O0<&1RUAl#1Bq#zwj4wU+CUb5VXL6)`Ef<1vQcahkbbW(a@M1*!5nupxRRQ8B9DfM_0000 + + + API Reference | ReDoc + + + + + + + {{{redocHead}}} + + + {{{redocHTML}}} + + diff --git a/doc/openapi.yaml b/doc/openapi.yaml deleted file mode 100644 index a067fc0a1..000000000 --- a/doc/openapi.yaml +++ /dev/null @@ -1,798 +0,0 @@ ---- -openapi: '3.0.0' -info: - title: VILLASnode API - version: 0.10.0 - description: 'A HTTP/REST API for controlling VILLASnode remotely without the need to restart the daemon.' - termsOfService: 'https://www.fein-aachen.org/projects/villas-node/' - contact: - name: 'Steffen Vogel' - email: svogel2@eonerc.rwth-aachen.de - url: 'https://fein-aachen.org/contact/' - license: - name: GPL-v3 - url: 'https://www.gnu.org/licenses/gpl-3.0.en.html' -externalDocs: - url: 'https://villas.fein-aachen.org/doc/node.html' -servers: - - url: "https://villas.k8s.eonerc.rwth-aachen.de/api/v2" - description: "The production API server in our EONERC OpenStack Kubernetes" -tags: - - name: super-node - description: Global super-node related operations. - - name: nodes - description: Node related operations. - - name: paths - description: Path related operations. - -components: - parameters: - node-uuid: - name: uuid - description: A globally unique identifier for each node. - in: path - required: true - schema: - type: string - format: uuid - - path-uuid: - name: uuid - description: A globally unique identifier for each path. - in: path - required: true - schema: - type: string - format: uuid - - node-uuid-name: - name: uuid-or-name - description: Either a UUID or node-name - in: path - required: true - schema: - oneOf: - - type: string - format: uuid - - type: string - pattern: "[a-z0-9_-]{2,32}" - -paths: - "/status": - get: - summary: Get the current status of the VILLASnode instance. - tags: - - super-node - responses: - '200': - description: Success - content: - application/json: - examples: - example1: - value: - state: running - version: v0.10.0 - release: 1.node_uuid_unique_debug.20201015git335440d - build_id: v0.10.0-335440d-debug - build_date: '20201015' - hostname: ernie - uuid: c9d64cc7-c6e1-4dd4-8873-126318e9d42c - time_now: 1602765814.9240997 - time_started: 1602765814.3103526 - timezone: - name: CEST - offset: -3600 - dst: true - kernel: - sysname: Linux - nodename: ernie - release: 5.6.17-rt10 - version: "#5 SMP Fri Jul 10 14:02:33 CEST 2020" - machine: x86_64 - domainname: "(none)" - system: - cores_configured: 28 - cores: 28 - processes: 780 - uptime: 1379600 - load: - - 1.66259765625 - - 1.271484375 - - 1.18701171875 - ram: - total: 269994606592 - free: 262204465152 - shared: 44191744 - buffer: 130211840 - swap: - total: 4294963200 - free: 4294963200 - highmem: - total: 0 - free: 0 - - "/capabilities": - get: - summary: Get the capabilities of the VILLASnode instance. - tags: - - super-node - responses: - '200': - description: Success - content: - application/json: - examples: - example1: - value: - hooks: - - average - - average - - cast - - decimate - - dp - - drop - - dump - - ebm - - fix - - gate - - jitter_calc - - limit_rate - - pps_ts - - print - - restart - - scale - - shift_seq - - shift_ts - - skip_first - - stats - - ts - node-types: - - amqp - - can - - ethercat - - example - - exec - - file - - influxdb - - kafka - - loopback - - loopback_internal - - mqtt - - ngsi - - redis - - shmem - - signal - - socket - - stats - - temper - - test_rtt - - websocket - - zeromq - apis: - - capabilities - - config - - node - - node/file - - node/pause - - node/restart - - node/resume - - node/start - - node/stats - - node/stats/reset - - node/stop - - nodes - - path - - path/start - - path/stop - - paths - - restart - - shutdown - - status - formats: - - csv - - gtnet - - iotagent_ul - - json - - json.kafka - - json.reserve - - raw - - tsv - - value - - villas.binary - - villas.human - - villas.web - - "/config": - get: - summary: Get the currently loaded configuration. - tags: - - super-node - responses: - '200': - description: Success - content: - application/json: - examples: - example1: - value: - nodes: - udp_node1: - type: socket - layer: udp - in: - address: '*:12000' - signals: - count: 8 - type: float - out: - address: '127.0.0.1:12001' - web_node1: - type: websocket - vectorize: 2 - series: - - label: Random walk - unit: V - - label: Sine - unit: A - - label: Rect - unit: Var - - label: Ramp - unit: °C - paths: - - in: - - udp_node1 - out: - - web_node1 - hooks: - - type: decimate - ratio: 2 - - in: - - web_node1 - out: - - udp_node1 - - "/restart": - post: - summary: Restart the VILLASnode instance. - tags: - - super-node - requestBody: - required: false - content: - application/json: - schema: - type: object - properties: - config: - oneOf: - - type: string - example: "http://example.com/path/to/config.json" - description: An optional path or URI to a new configuration file which should be loaded after restarting the node. - - type: object - description: An optional JSON object containing thenew configuration which should be loaded - responses: - '200': - description: Success. The instance has been restarted. - content: - application/json: - examples: - example1: - value: - restarts: 5 - config: http://example.com/path/to/config.json - - "/shutdown": - post: - summary: Shutdown the VILLASnode instance. - tags: - - super-node - responses: - '200': - description: Success. The instance has been shut down. - - "/nodes": - get: - summary: Get a list of all configure node instances. - tags: - - nodes - responses: - '200': - description: Success - content: - application/json: - examples: - example1: - value: - - name: udp_node1 - uuid: b3df1d73-f483-f16c-5936-4ea48295615c - state: running - affinity: -1 - in: - address: '*:12000' - signals: - count: 8 - type: float - out: - address: '127.0.0.1:12001' - type: socket - layer: udp - - name: web_node1 - uuid: 19c84350-c83a-8a3b-224b-43fa591c8998 - state: running - affinity: -1 - in: - vectorize: 2 - signals: - - type: float - enabled: true - name: signal0 - - type: float - enabled: true - name: signal1 - - type: float - enabled: true - name: signal2 - - type: float - enabled: true - name: signal3 - out: - vectorize: 2 - signals: - - type: float - enabled: true - name: signal0 - - type: float - enabled: true - name: signal1 - - type: float - enabled: true - name: signal2 - type: websocket - vectorize: 2 - series: - - label: Random walk - unit: V - - label: Sine - unit: A - - label: Rect - unit: Var - - label: Ramp - unit: °C - - "/node/{uuid-or-name}": - get: - summary: Get the information of a specific node. - tags: - - nodes - parameters: - - $ref: '#/components/parameters/node-uuid-name' - responses: - '200': - description: Success - content: - application/json: - examples: - example1: - value: - name: udp_node1 - uuid: b3df1d73-f483-f16c-5936-4ea48295615c - state: running - affinity: -1 - in: - address: '*:12000' - signals: - count: 8 - type: float - out: - address: '127.0.0.1:12001' - type: socket - layer: udp - '404': - description: Error. There is no node with the given UUID or the node does not collect statistics. - - "/node/{uuid-or-name}/stats": - get: - summary: Get the statistics of a node. - tags: - - nodes - parameters: - - $ref: "#/components/parameters/node-uuid-name" - responses: - '200': - description: Success - content: - application/json: - examples: - example1: - value: - rtp.jitter: - low: 1.3293196e-316 - high: 0 - total: 0 - rtp.pkts_lost: - low: 1.3285797e-316 - high: 1.3290532e-316 - total: 0 - rtp.loss_fraction: - low: 3.0e-323 - high: 1.32907453e-316 - total: 0 - age: - low: 1.3288619e-316 - high: 1.32909588e-316 - total: 0 - owd: - low: 3.0e-323 - high: 3.0e-322 - total: 144 - higher: 0 - lower: 0 - highest: 0.099986117 - lowest: 0.09990915800000001 - mean: 0.09998063221527778 - variance: 7.736879555478282e-11 - stddev: 8.795953362472019e-06 - buckets: - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - gap_received: - low: 0 - high: 1.32743107e-316 - total: 144 - higher: 0 - lower: 0 - highest: 0.10000411000000001 - lowest: 0.09999650900000001 - mean: 0.09999998652777778 - variance: 5.701784607620545e-13 - stddev: 7.551016228045431e-07 - buckets: - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - gap_sent: - low: 1.58e-321 - high: 1.3292848e-316 - total: 144 - higher: 0 - lower: 0 - highest: 0.10004273400000001 - lowest: 0.09926839700000001 - mean: 0.09999436691666665 - variance: 3.7637473716438304e-09 - stddev: 6.134938770390321e-05 - buckets: - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - reordered: - low: 8.28904606e-315 - high: 1.32930615e-316 - total: 0 - skipped: - low: 1.32879865e-316 - high: 1.3293275e-316 - total: 0 - '404': - description: Error. There is no node with the given UUID or the node does not collect statistics. - - "/node/{uuid-or-name}/stats/reset": - post: - summary: Reset the statistics counters for a specific node. - tags: - - nodes - parameters: - - $ref: "#/components/parameters/node-uuid-name" - responses: - '200': - description: Success. The statistics of the node have been reset. - '404': - description: Error. There is no node with the given UUID. - - "/node/{uuid-or-name}/start": - post: - summary: Start a node. - tags: - - nodes - parameters: - - $ref: "#/components/parameters/node-uuid-name" - responses: - '200': - description: Success. The node has been started. - '404': - description: Error. There is no node with the given UUID. - - "/node/{uuid-or-name}/stop": - post: - summary: Stop a node. - tags: - - nodes - parameters: - - $ref: "#/components/parameters/node-uuid-name" - responses: - '200': - description: Success. The node has been stopped. - '404': - description: Error. There is no node with the given UUID. - - "/node/{uuid-or-name}/pause": - post: - summary: Pause a node. - tags: - - nodes - parameters: - - $ref: "#/components/parameters/node-uuid-name" - responses: - '200': - description: Success. The node has been paused. - '404': - description: Error. There is no node with the given UUID. - - "/node/{uuid-or-name}/resume": - post: - summary: Resume a node. - tags: - - nodes - parameters: - - $ref: "#/components/parameters/node-uuid-name" - responses: - '200': - description: Success. The node has been resumed. - '404': - description: Error. There is no node with the given UUID. - - "/node/{uuid-or-name}/restart": - post: - summary: Retart a node. - tags: - - nodes - parameters: - - $ref: "#/components/parameters/node-uuid-name" - responses: - '200': - description: Success. The node has been restarted. - '404': - description: Error. There is no node with the given UUID. - - "/node/{uuid-or-name}/file/rewind": - post: - summary: Rewind the playback file to the beginning. - tags: - - nodes - parameters: - - $ref: "#/components/parameters/node-uuid-name" - responses: - '200': - description: Success. The file has been rewound. - '404': - description: Error. There is no node with the given UUID. - - "/node/{uuid-or-name}/file/seek": - post: - summary: Rewind the playback file to the beginning. - tags: - - nodes - parameters: - - $ref: "#/components/parameters/node-uuid-name" - requestBody: - description: Sample position in file - required: true - content: - application/json: - schema: - type: object - required: - - position - properties: - position: - type: integer - example: 123 - description: Skip the first nth samples in the file. - responses: - '200': - description: Success. The read-pointer of the file has been changed. - '404': - description: Error. There is no node with the given UUID. - - "/paths": - get: - summary: Get a list of all paths. - tags: - - paths - responses: - '200': - description: Success - content: - application/json: - examples: - example1: - value: - - uuid: 251c99af-4b05-9de4-367e-2bb550412e56 - state: running - mode: any - enabled: true - builtin: true - reverse: false - original_sequence_no: true - last_sequence: false - poll: false - queuelen: 1024 - signals: [] - hooks: [] - in: - - udp_node1 - out: - - web_node1 - - uuid: 61b5674b-95fa-b35f-bff8-c877acf21e3b - state: running - mode: any - enabled: true - builtin: true - reverse: false - original_sequence_no: true - last_sequence: false - poll: false - queuelen: 1024 - signals: [] - hooks: [] - in: - - web_node1 - out: - - udp_node1 - - "/path/{uuid}": - post: - summary: Get details of a single path. - tags: - - paths - parameters: - - $ref: "#/components/parameters/path-uuid" - responses: - '200': - description: Success - content: - application/json: - examples: - example1: - value: - uuid: 251c99af-4b05-9de4-367e-2bb550412e56 - state: running - mode: any - enabled: true - builtin: true - reverse: false - original_sequence_no: true - last_sequence: false - poll: false - queuelen: 1024 - signals: [] - hooks: [] - in: - - udp_node1 - out: - - web_node1 - '404': - description: Error. There is no path with the given UUID. - - "/path/{uuid}/start": - post: - summary: Start a path. - tags: - - paths - parameters: - - $ref: "#/components/parameters/path-uuid" - responses: - '200': - description: Success. The path has been started. - '404': - description: Error. There is no path with the given UUID. - - "/path/{uuid}/stop": - post: - summary: Start a path. - tags: - - paths - parameters: - - $ref: "#/components/parameters/path-uuid" - responses: - '200': - description: Success. The path has been stopped. - '404': - description: Error. There is no path with the given UUID. - - "/graph.{format}": - get: - summary: Get a graph representation of the currently loaded configuration. - tags: - - super-node - parameters: - - in: path - name: format - schema: - type: string - description: The image format of the generated graph. - enum: - - ps - - eps - - txt - - svg - - svgz - - gif - - png - - jpg - - jpeg - - bmp - - dot - - fig - - json - - pdf - - in: query - name: layout - schema: - type: string - description: The Graphviz layout engine used for rendering the graph. - enum: - - circo - - dot - - fdp - - neato - - nop - - nop1 - - nop2 - - osage - - patchwork - - sfdp - - twopi diff --git a/doc/openapi/README.md b/doc/openapi/README.md new file mode 100644 index 000000000..ae48cf097 --- /dev/null +++ b/doc/openapi/README.md @@ -0,0 +1,13 @@ +## The `openapi` folder + +This folder contains your entrypoint `openapi.yaml`. + +That file contains references to the entire API definition. + +Here are some sections to pay attention to: + +* Top-level **description**: this accepts markdown, and Redoc and Redocly API Reference will render it at the top of the docs. Consider maintaining your markdown in a separate file and [embedding it](https://redoc.ly/docs/api-reference-docs/embedded-markdown/). Note to Redoc community edition users, the special tags are only available to the Redocly API Reference users, but you can still embed markdown. +* Security schemes: you will define the scheme(s) your API uses for security (eg OAuth2, API Key, etc...). The security schemes are used by the Redocly API Reference "Try It" API console feature. +* [Paths](paths/README.md): this defines each endpoint. A path can have one operation per http method. +* Tags: it's a good idea to organize each operation. Each tag can have a description. The description is used as a section description within the reference docs. +* Servers: a list of your servers, each with a URL. diff --git a/doc/openapi/components/README.md b/doc/openapi/components/README.md new file mode 100644 index 000000000..26eaeb5d5 --- /dev/null +++ b/doc/openapi/components/README.md @@ -0,0 +1,14 @@ +Reusable components +=========== + +* You can create the following folders here: + - `schemas` - reusable [Schema Objects](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#schemaObject) + - `responses` - reusable [Response Objects](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#responseObject) + - `parameters` - reusable [Parameter Objects](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#parameterObject) + - `examples` - reusable [Example Objects](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#exampleObject) + - `headers` - reusable [Header Objects](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#headerObject) + - `requestBodies` - reusable [Request Body Objects](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#requestBodyObject) + - `links` - reusable [Link Objects](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#linkObject) + - `callbacks` - reusable [Callback Objects](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#callbackObject) + - `securitySchemes` - reusable [Security Scheme Objects](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#securitySchemeObject) +* Filename of files inside the folders represent component name, e.g. `Customer.yaml` diff --git a/doc/openapi/components/parameters/node-uuid-name.yaml b/doc/openapi/components/parameters/node-uuid-name.yaml new file mode 100644 index 000000000..5494e3152 --- /dev/null +++ b/doc/openapi/components/parameters/node-uuid-name.yaml @@ -0,0 +1,10 @@ +name: uuid-or-name +description: Either a UUID or node-name +in: path +required: true +schema: + oneOf: + - type: string + format: uuid + - type: string + pattern: '[a-z0-9_-]{2,32}' diff --git a/doc/openapi/components/parameters/node-uuid.yaml b/doc/openapi/components/parameters/node-uuid.yaml new file mode 100644 index 000000000..e0499f60c --- /dev/null +++ b/doc/openapi/components/parameters/node-uuid.yaml @@ -0,0 +1,7 @@ +name: uuid +description: A globally unique identifier for each node. +in: path +required: true +schema: + type: string + format: uuid diff --git a/doc/openapi/components/parameters/path-uuid.yaml b/doc/openapi/components/parameters/path-uuid.yaml new file mode 100644 index 000000000..3423a9eb4 --- /dev/null +++ b/doc/openapi/components/parameters/path-uuid.yaml @@ -0,0 +1,7 @@ +name: uuid +description: A globally unique identifier for each path. +in: path +required: true +schema: + type: string + format: uuid diff --git a/doc/openapi/components/schemas/config.yaml b/doc/openapi/components/schemas/config.yaml new file mode 100644 index 000000000..1db1b9625 --- /dev/null +++ b/doc/openapi/components/schemas/config.yaml @@ -0,0 +1,39 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + +title: VILLASnode configuration file +description: Schema of the VILLASnode configuration file. + +allOf: +- type: object + required: + - nodes + + additionalProperties: false + + properties: + nodes: + type: object + title: Node list + description: | + A list of nodes to/from which this instance sends/receives sample data. + additionalProperties: + x-additionalPropertiesName: node-name + $ref: ./config/node.yaml + + paths: + title: Path list + description: | + A list of uni-directional paths which connect the nodes defined in the `nodes` list. + type: array + default: [] + items: + $ref: config/path.yaml + + http: + $ref: config/http.yaml + + logging: + $ref: config/logging.yaml + +- $ref: config/global.yaml diff --git a/doc/openapi/components/schemas/config/format.yaml b/doc/openapi/components/schemas/config/format.yaml new file mode 100644 index 000000000..fc4872938 --- /dev/null +++ b/doc/openapi/components/schemas/config/format.yaml @@ -0,0 +1,30 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +type: object + +required: +- type + +properties: + type: + type: string + +discriminator: + propertyName: type + mapping: + csv: formats/csv.yaml + iotagent_ul: formats/iotagent_ul.yaml + json: formats/json.yaml + json.reserve: formats/json_reserve.yaml + json.kafka: formats/json_kafka.yaml + json.edgeflex: formats/json_edgeflex.yaml + gtnet: formats/gtnet.yaml + protobuf: formats/protobuf.yaml + raw: formats/raw.yaml + tsv: formats/tsv.yaml + value: formats/value.yaml + villas.binary: formats/villas_binary.yaml + villas.human: formats/villas_human.yaml + villas.web: formats/villas_web.yaml diff --git a/doc/openapi/components/schemas/config/formats/column.yaml b/doc/openapi/components/schemas/config/formats/column.yaml new file mode 100644 index 000000000..f2011c967 --- /dev/null +++ b/doc/openapi/components/schemas/config/formats/column.yaml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: +- $ref: line.yaml +- type: object + properties: + delimiter: + type: string diff --git a/doc/openapi/components/schemas/config/formats/csv.yaml b/doc/openapi/components/schemas/config/formats/csv.yaml new file mode 100644 index 000000000..3e53d16b7 --- /dev/null +++ b/doc/openapi/components/schemas/config/formats/csv.yaml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: +- $ref: column.yaml +- type: object + properties: + delimiter: + type: string diff --git a/doc/openapi/components/schemas/config/formats/gtnet.yaml b/doc/openapi/components/schemas/config/formats/gtnet.yaml new file mode 100644 index 000000000..71ce22a47 --- /dev/null +++ b/doc/openapi/components/schemas/config/formats/gtnet.yaml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: +- $ref: raw.yaml +- type: object + properties: + delimiter: + type: string diff --git a/doc/openapi/components/schemas/config/formats/iotagent_ul.yaml b/doc/openapi/components/schemas/config/formats/iotagent_ul.yaml new file mode 100644 index 000000000..1047027b5 --- /dev/null +++ b/doc/openapi/components/schemas/config/formats/iotagent_ul.yaml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: +- $ref: ../format.yaml +- type: object + properties: + delimiter: + type: string diff --git a/doc/openapi/components/schemas/config/formats/json.yaml b/doc/openapi/components/schemas/config/formats/json.yaml new file mode 100644 index 000000000..1047027b5 --- /dev/null +++ b/doc/openapi/components/schemas/config/formats/json.yaml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: +- $ref: ../format.yaml +- type: object + properties: + delimiter: + type: string diff --git a/doc/openapi/components/schemas/config/formats/json_edgeflex.yaml b/doc/openapi/components/schemas/config/formats/json_edgeflex.yaml new file mode 100644 index 000000000..11d42f3e4 --- /dev/null +++ b/doc/openapi/components/schemas/config/formats/json_edgeflex.yaml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: +- $ref: json.yaml +- type: object + properties: + delimiter: + type: string diff --git a/doc/openapi/components/schemas/config/formats/json_kafka.yaml b/doc/openapi/components/schemas/config/formats/json_kafka.yaml new file mode 100644 index 000000000..11d42f3e4 --- /dev/null +++ b/doc/openapi/components/schemas/config/formats/json_kafka.yaml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: +- $ref: json.yaml +- type: object + properties: + delimiter: + type: string diff --git a/doc/openapi/components/schemas/config/formats/json_reserve.yaml b/doc/openapi/components/schemas/config/formats/json_reserve.yaml new file mode 100644 index 000000000..11d42f3e4 --- /dev/null +++ b/doc/openapi/components/schemas/config/formats/json_reserve.yaml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: +- $ref: json.yaml +- type: object + properties: + delimiter: + type: string diff --git a/doc/openapi/components/schemas/config/formats/line.yaml b/doc/openapi/components/schemas/config/formats/line.yaml new file mode 100644 index 000000000..6cc9b6588 --- /dev/null +++ b/doc/openapi/components/schemas/config/formats/line.yaml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: + - $ref: ../format.yaml + - type: object + properties: + separator: + type: string diff --git a/doc/openapi/components/schemas/config/formats/protobuf.yaml b/doc/openapi/components/schemas/config/formats/protobuf.yaml new file mode 100644 index 000000000..1047027b5 --- /dev/null +++ b/doc/openapi/components/schemas/config/formats/protobuf.yaml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: +- $ref: ../format.yaml +- type: object + properties: + delimiter: + type: string diff --git a/doc/openapi/components/schemas/config/formats/raw.yaml b/doc/openapi/components/schemas/config/formats/raw.yaml new file mode 100644 index 000000000..1047027b5 --- /dev/null +++ b/doc/openapi/components/schemas/config/formats/raw.yaml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: +- $ref: ../format.yaml +- type: object + properties: + delimiter: + type: string diff --git a/doc/openapi/components/schemas/config/formats/tsv.yaml b/doc/openapi/components/schemas/config/formats/tsv.yaml new file mode 100644 index 000000000..3e53d16b7 --- /dev/null +++ b/doc/openapi/components/schemas/config/formats/tsv.yaml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: +- $ref: column.yaml +- type: object + properties: + delimiter: + type: string diff --git a/doc/openapi/components/schemas/config/formats/value.yaml b/doc/openapi/components/schemas/config/formats/value.yaml new file mode 100644 index 000000000..1047027b5 --- /dev/null +++ b/doc/openapi/components/schemas/config/formats/value.yaml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: +- $ref: ../format.yaml +- type: object + properties: + delimiter: + type: string diff --git a/doc/openapi/components/schemas/config/formats/villas_binary.yaml b/doc/openapi/components/schemas/config/formats/villas_binary.yaml new file mode 100644 index 000000000..1047027b5 --- /dev/null +++ b/doc/openapi/components/schemas/config/formats/villas_binary.yaml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: +- $ref: ../format.yaml +- type: object + properties: + delimiter: + type: string diff --git a/doc/openapi/components/schemas/config/formats/villas_human.yaml b/doc/openapi/components/schemas/config/formats/villas_human.yaml new file mode 100644 index 000000000..f2011c967 --- /dev/null +++ b/doc/openapi/components/schemas/config/formats/villas_human.yaml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: +- $ref: line.yaml +- type: object + properties: + delimiter: + type: string diff --git a/doc/openapi/components/schemas/config/formats/villas_web.yaml b/doc/openapi/components/schemas/config/formats/villas_web.yaml new file mode 100644 index 000000000..9a9c1d39c --- /dev/null +++ b/doc/openapi/components/schemas/config/formats/villas_web.yaml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: +- $ref: villas_binary.yaml +- type: object + properties: + delimiter: + type: string diff --git a/doc/openapi/components/schemas/config/formatspec.yaml b/doc/openapi/components/schemas/config/formatspec.yaml new file mode 100644 index 000000000..8b59aee83 --- /dev/null +++ b/doc/openapi/components/schemas/config/formatspec.yaml @@ -0,0 +1,20 @@ +--- + +oneOf: +- $ref: format.yaml +- type: string + enum: + - csv + - gtnet + - iotagent_ul + - json + - json.edgeflex + - json.kafka + - json.reserve + - protobuf + - raw + - tsv + - value + - villas.binary + - villas.human + - villas.web diff --git a/doc/openapi/components/schemas/config/global.yaml b/doc/openapi/components/schemas/config/global.yaml new file mode 100644 index 000000000..faf8660f9 --- /dev/null +++ b/doc/openapi/components/schemas/config/global.yaml @@ -0,0 +1,69 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + +type: object + +properties: + + hugepages: + type: integer + default: 100 + title: Number of reserved hugepages + description: | + The number of hugepages which will be reservered by the system. + + See: https://www.kernel.org/doc/Documentation/vm/hugetlbpage.txt + + A value of zero will disable the use of huge pages. + + stats: + type: number + default: 1.0 + title: Statistics interval + description: | + Specifies the rate at which statistics about the active paths will be periodically printed to the screen. + + Setting this value to 5, will print 5 lines per second. + + A line includes information such as: + + - Source and Destination of path + - Messages received + - Messages sent + - Messages dropped + + affinity: + type: integer + default: 0 + title: Task/Process affinity mask + description: | + Restricts the exeuction of the daemon to certain CPU cores. + This technique, also called 'pinning', improves the determinism of the server by isolating the daemon processes on exclusive cores. + + A value of `0` will not change the affinity of the process. + + priority: + type: integer + default: 0 + description: | + Adjusts the scheduling priority of the deamon processes. + By default, the daemon uses a real-time optimized FIFO scheduling algorithm. + + A value of `0` will not change the priority of the process. + + idle_stop: + type: boolean + default: false + + uuid: + type: string + format: uuid + title: Super-node UUID + default: 'randomly generated' + description: | + Each VILLASnode instance is identified by a globally unique indentifier / UUID. + + This UUID can be queried by the API. + + If the setting is not provided, a UUID will be generated by hashing the active VILLASnode configuration. + This ensures that restarting the VILLASnode instance with the identical configuration will yield always the same UUID. diff --git a/doc/openapi/components/schemas/config/hook.yaml b/doc/openapi/components/schemas/config/hook.yaml new file mode 100644 index 000000000..ac9496072 --- /dev/null +++ b/doc/openapi/components/schemas/config/hook.yaml @@ -0,0 +1,48 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + +type: object + +title: Hook + +required: +- type + +properties: + type: + type: string + + enabled: + type: boolean + default: true + + priority: + type: integer + +discriminator: + propertyName: type + mapping: + average: hooks/average.yaml + cast: hooks/cast.yaml + decimate: hooks/decimate.yaml + dp: hooks/dp.yaml + dump: hooks/dump.yaml + ebm: hooks/ebm.yaml + fix: hooks/fix.yaml + gate: hooks/gate.yaml + jitter_calc: hooks/jitter_calc.yaml + limit_rate: hooks/limit_rate.yaml + limit_value: hooks/limit_value.yaml + lua: hooks/lua.yaml + ma: hooks/ma.yaml + pmu_dft: hooks/pmu_dft.yaml + pps_ts: hooks/pps_ts.yaml + print: hooks/print.yaml + restart: hooks/restart.yaml + rms: hooks/rms.yaml + scale: hooks/scale.yaml + shift_seq: hooks/shift_seq.yaml + shift_ts: hooks/shift_ts.yaml + skip_first: hooks/skip_first.yaml + stats: hooks/stats.yaml + ts: hooks/ts.yaml diff --git a/doc/openapi/components/schemas/config/hooklist.yaml b/doc/openapi/components/schemas/config/hooklist.yaml new file mode 100644 index 000000000..210d73cdd --- /dev/null +++ b/doc/openapi/components/schemas/config/hooklist.yaml @@ -0,0 +1,36 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + +type: array +items: + oneOf: + - $ref: hook.yaml + - type: string + title: Hook Name + description: Only the hook type is provided. No other settings can be configured. + enum: + - average + - cast + - decimate + - dp + - drop + - dump + - ebm + - fix + - gate + - jitter_calc + - limit_rate + - limit_value + - lua + - ma + - pmu_dft + - pps_ts + - print + - restart + - rms + - scale + - shift_seq + - shift_ts + - skip_first + - stats + - ts diff --git a/doc/openapi/components/schemas/config/hooks/average.yaml b/doc/openapi/components/schemas/config/hooks/average.yaml new file mode 100644 index 000000000..0e6e19078 --- /dev/null +++ b/doc/openapi/components/schemas/config/hooks/average.yaml @@ -0,0 +1,8 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: + - $ref: ../hook.yaml + - type: object + properties: {} diff --git a/doc/openapi/components/schemas/config/hooks/cast.yaml b/doc/openapi/components/schemas/config/hooks/cast.yaml new file mode 100644 index 000000000..0e6e19078 --- /dev/null +++ b/doc/openapi/components/schemas/config/hooks/cast.yaml @@ -0,0 +1,8 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: + - $ref: ../hook.yaml + - type: object + properties: {} diff --git a/doc/openapi/components/schemas/config/hooks/decimate.yaml b/doc/openapi/components/schemas/config/hooks/decimate.yaml new file mode 100644 index 000000000..f9338f109 --- /dev/null +++ b/doc/openapi/components/schemas/config/hooks/decimate.yaml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + +allOf: +- $ref: ../hook.yaml +- type: object + properties: + ratio: + type: integer + \ No newline at end of file diff --git a/doc/openapi/components/schemas/config/hooks/dp.yaml b/doc/openapi/components/schemas/config/hooks/dp.yaml new file mode 100644 index 000000000..0e6e19078 --- /dev/null +++ b/doc/openapi/components/schemas/config/hooks/dp.yaml @@ -0,0 +1,8 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: + - $ref: ../hook.yaml + - type: object + properties: {} diff --git a/doc/openapi/components/schemas/config/hooks/drop.yaml b/doc/openapi/components/schemas/config/hooks/drop.yaml new file mode 100644 index 000000000..0e6e19078 --- /dev/null +++ b/doc/openapi/components/schemas/config/hooks/drop.yaml @@ -0,0 +1,8 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: + - $ref: ../hook.yaml + - type: object + properties: {} diff --git a/doc/openapi/components/schemas/config/hooks/dump.yaml b/doc/openapi/components/schemas/config/hooks/dump.yaml new file mode 100644 index 000000000..0e6e19078 --- /dev/null +++ b/doc/openapi/components/schemas/config/hooks/dump.yaml @@ -0,0 +1,8 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: + - $ref: ../hook.yaml + - type: object + properties: {} diff --git a/doc/openapi/components/schemas/config/hooks/ebm.yaml b/doc/openapi/components/schemas/config/hooks/ebm.yaml new file mode 100644 index 000000000..0e6e19078 --- /dev/null +++ b/doc/openapi/components/schemas/config/hooks/ebm.yaml @@ -0,0 +1,8 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: + - $ref: ../hook.yaml + - type: object + properties: {} diff --git a/doc/openapi/components/schemas/config/hooks/fix.yaml b/doc/openapi/components/schemas/config/hooks/fix.yaml new file mode 100644 index 000000000..0e6e19078 --- /dev/null +++ b/doc/openapi/components/schemas/config/hooks/fix.yaml @@ -0,0 +1,8 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: + - $ref: ../hook.yaml + - type: object + properties: {} diff --git a/doc/openapi/components/schemas/config/hooks/gate.yaml b/doc/openapi/components/schemas/config/hooks/gate.yaml new file mode 100644 index 000000000..0e6e19078 --- /dev/null +++ b/doc/openapi/components/schemas/config/hooks/gate.yaml @@ -0,0 +1,8 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: + - $ref: ../hook.yaml + - type: object + properties: {} diff --git a/doc/openapi/components/schemas/config/hooks/jitter_calc.yaml b/doc/openapi/components/schemas/config/hooks/jitter_calc.yaml new file mode 100644 index 000000000..0e6e19078 --- /dev/null +++ b/doc/openapi/components/schemas/config/hooks/jitter_calc.yaml @@ -0,0 +1,8 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: + - $ref: ../hook.yaml + - type: object + properties: {} diff --git a/doc/openapi/components/schemas/config/hooks/limit_rate.yaml b/doc/openapi/components/schemas/config/hooks/limit_rate.yaml new file mode 100644 index 000000000..0e6e19078 --- /dev/null +++ b/doc/openapi/components/schemas/config/hooks/limit_rate.yaml @@ -0,0 +1,8 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: + - $ref: ../hook.yaml + - type: object + properties: {} diff --git a/doc/openapi/components/schemas/config/hooks/limit_value.yaml b/doc/openapi/components/schemas/config/hooks/limit_value.yaml new file mode 100644 index 000000000..0e6e19078 --- /dev/null +++ b/doc/openapi/components/schemas/config/hooks/limit_value.yaml @@ -0,0 +1,8 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: + - $ref: ../hook.yaml + - type: object + properties: {} diff --git a/doc/openapi/components/schemas/config/hooks/lua.yaml b/doc/openapi/components/schemas/config/hooks/lua.yaml new file mode 100644 index 000000000..0e6e19078 --- /dev/null +++ b/doc/openapi/components/schemas/config/hooks/lua.yaml @@ -0,0 +1,8 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: + - $ref: ../hook.yaml + - type: object + properties: {} diff --git a/doc/openapi/components/schemas/config/hooks/ma.yaml b/doc/openapi/components/schemas/config/hooks/ma.yaml new file mode 100644 index 000000000..0e6e19078 --- /dev/null +++ b/doc/openapi/components/schemas/config/hooks/ma.yaml @@ -0,0 +1,8 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: + - $ref: ../hook.yaml + - type: object + properties: {} diff --git a/doc/openapi/components/schemas/config/hooks/pmu_dft.yaml b/doc/openapi/components/schemas/config/hooks/pmu_dft.yaml new file mode 100644 index 000000000..0e6e19078 --- /dev/null +++ b/doc/openapi/components/schemas/config/hooks/pmu_dft.yaml @@ -0,0 +1,8 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: + - $ref: ../hook.yaml + - type: object + properties: {} diff --git a/doc/openapi/components/schemas/config/hooks/pps_ts.yaml b/doc/openapi/components/schemas/config/hooks/pps_ts.yaml new file mode 100644 index 000000000..0e6e19078 --- /dev/null +++ b/doc/openapi/components/schemas/config/hooks/pps_ts.yaml @@ -0,0 +1,8 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: + - $ref: ../hook.yaml + - type: object + properties: {} diff --git a/doc/openapi/components/schemas/config/hooks/print.yaml b/doc/openapi/components/schemas/config/hooks/print.yaml new file mode 100644 index 000000000..6a04e7410 --- /dev/null +++ b/doc/openapi/components/schemas/config/hooks/print.yaml @@ -0,0 +1,11 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + +allOf: +- $ref: ../hook.yaml +- type: object + properties: + prefix: + type: string + default: '' + \ No newline at end of file diff --git a/doc/openapi/components/schemas/config/hooks/restart.yaml b/doc/openapi/components/schemas/config/hooks/restart.yaml new file mode 100644 index 000000000..0e6e19078 --- /dev/null +++ b/doc/openapi/components/schemas/config/hooks/restart.yaml @@ -0,0 +1,8 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: + - $ref: ../hook.yaml + - type: object + properties: {} diff --git a/doc/openapi/components/schemas/config/hooks/rms.yaml b/doc/openapi/components/schemas/config/hooks/rms.yaml new file mode 100644 index 000000000..0e6e19078 --- /dev/null +++ b/doc/openapi/components/schemas/config/hooks/rms.yaml @@ -0,0 +1,8 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: + - $ref: ../hook.yaml + - type: object + properties: {} diff --git a/doc/openapi/components/schemas/config/hooks/scale.yaml b/doc/openapi/components/schemas/config/hooks/scale.yaml new file mode 100644 index 000000000..0e6e19078 --- /dev/null +++ b/doc/openapi/components/schemas/config/hooks/scale.yaml @@ -0,0 +1,8 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: + - $ref: ../hook.yaml + - type: object + properties: {} diff --git a/doc/openapi/components/schemas/config/hooks/shift_seq.yaml b/doc/openapi/components/schemas/config/hooks/shift_seq.yaml new file mode 100644 index 000000000..0e6e19078 --- /dev/null +++ b/doc/openapi/components/schemas/config/hooks/shift_seq.yaml @@ -0,0 +1,8 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: + - $ref: ../hook.yaml + - type: object + properties: {} diff --git a/doc/openapi/components/schemas/config/hooks/shift_ts.yaml b/doc/openapi/components/schemas/config/hooks/shift_ts.yaml new file mode 100644 index 000000000..0e6e19078 --- /dev/null +++ b/doc/openapi/components/schemas/config/hooks/shift_ts.yaml @@ -0,0 +1,8 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: + - $ref: ../hook.yaml + - type: object + properties: {} diff --git a/doc/openapi/components/schemas/config/hooks/skip_first.yaml b/doc/openapi/components/schemas/config/hooks/skip_first.yaml new file mode 100644 index 000000000..0e6e19078 --- /dev/null +++ b/doc/openapi/components/schemas/config/hooks/skip_first.yaml @@ -0,0 +1,8 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: + - $ref: ../hook.yaml + - type: object + properties: {} diff --git a/doc/openapi/components/schemas/config/hooks/stats.yaml b/doc/openapi/components/schemas/config/hooks/stats.yaml new file mode 100644 index 000000000..0e6e19078 --- /dev/null +++ b/doc/openapi/components/schemas/config/hooks/stats.yaml @@ -0,0 +1,8 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: + - $ref: ../hook.yaml + - type: object + properties: {} diff --git a/doc/openapi/components/schemas/config/hooks/ts.yaml b/doc/openapi/components/schemas/config/hooks/ts.yaml new file mode 100644 index 000000000..0e6e19078 --- /dev/null +++ b/doc/openapi/components/schemas/config/hooks/ts.yaml @@ -0,0 +1,8 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: + - $ref: ../hook.yaml + - type: object + properties: {} diff --git a/doc/openapi/components/schemas/config/http.yaml b/doc/openapi/components/schemas/config/http.yaml new file mode 100644 index 000000000..c1c78a50d --- /dev/null +++ b/doc/openapi/components/schemas/config/http.yaml @@ -0,0 +1,23 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + +type: object +properties: + port: + type: integer + default: 80 + title: Listening port + description: | + Listening port for HTTP connections. + + ssl_cert: + type: string + title: SSL Certificate Path + description: Path to an SSL certificate + example: /etc/ssl/certs/mycert.pem + + ssl_private_key: + type: string + title: SSL Private Key Path + description: Path to an SSL private key + example: /etc/ssl/private/mykey.pem diff --git a/doc/openapi/components/schemas/config/logging.yaml b/doc/openapi/components/schemas/config/logging.yaml new file mode 100644 index 000000000..45c7a4a68 --- /dev/null +++ b/doc/openapi/components/schemas/config/logging.yaml @@ -0,0 +1,70 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + +type: object +title: Logging configuration +properties: + + level: + title: The log level + description: | + This setting expects one of the allowed strings to adjust the logging level. + Use this with care! Producing a lot of IO by enabling the debug output might decrease the performance of the server. + + type: string + default: info + enum: + - trace + - debug + - info + - warning + - error + - critical + - 'off' + + file: + type: string + title: Log file name + description: | + Write all log messages to a file. + + syslog: + type: boolean + default: false + title: Enable syslog logging + description: | + If enabled VILLASnode will log to the [system log](https://en.wikipedia.org/wiki/Syslog). + + expressions: + title: Logging expressions + description: | + The logging expression allow for a fine grained control of log levels per individual logger instance. + Expressions are provided as a list of logger name pattern and the desired level. + + **Note:** The expressions are evaluated in the order of their appearance in the list. + + type: array + items: + type: object + required: + - name + - level + properties: + name: + type: string + title: Logger name filter + description: + The [glob](https://man7.org/linux/man-pages/man7/glob.7.html)-style pattern to match the names of the loggers for which the level should be adjusted. + level: + type: string + title: Log level + description: | + The level which should be used for the matched loggers. + enum: + - trace + - debug + - info + - warning + - error + - critical + - 'off' diff --git a/doc/openapi/components/schemas/config/netem.yaml b/doc/openapi/components/schemas/config/netem.yaml new file mode 100644 index 000000000..27f03cf75 --- /dev/null +++ b/doc/openapi/components/schemas/config/netem.yaml @@ -0,0 +1,52 @@ +--- + +type: object +properties: + enabled: + type: boolean + default: true + + delay: + type: number + default: 0 + description: | + Delay packets in microseconds. + + jitter: + type: number + default: 0 + title: Jitter + description: | + Apply a jitter to the packet delay (in microseconds). + + distribution: + type: string + title: Delay distribution + description: | + One of the delay distributions supported by the `tc` command (see [tc-netem(8)](https://man7.org/linux/man-pages/man8/tc-netem.8.html)). + enum: + - uniform + - normal + - pareto + - paretonormal + + loss: + type: number + default: 0 + title: Packet Loss Percentage + description: | + Percentage of packets which will be dropped. + + duplicate: + type: number + default: 0 + title: Packet Duplication Percentage + description: | + Percentage of packets which will be duplicated. + + corrupt: + type: number + default: 0 + title: Packet Corruption Percentage + description: | + Percentage of packets which will be corrupted. diff --git a/doc/openapi/components/schemas/config/node.yaml b/doc/openapi/components/schemas/config/node.yaml new file mode 100644 index 000000000..476c9a1dd --- /dev/null +++ b/doc/openapi/components/schemas/config/node.yaml @@ -0,0 +1,97 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + +type: object + +title: Node + +required: +- type + +properties: + + type: + type: string + description: | + Specifies which protocol should be used by this node. + + For a complete list of supported node-types run `villas node --help`. + + In addition to the node settings described in this section, every node type has its own specific settings + + vectorize: + type: integer + default: 1 + description: | + This setting allows to send multiple samples in a single message to the destination nodes. + + The value of this setting determines how many samples will be combined into one packet. + + hooks: + $ref: hooklist.yaml + + builtin: + type: boolean + default: true + title: Builtin hook functions + description: | + By default, each node and paths has a couple of default hooks attached to them. With this setting the attachment of built-in hooks can be disabled. + + in: + type: object + properties: + vectorize: + type: integer + minimum: 1 + + signals: + $ref: signallist.yaml + + hooks: + $ref: hooklist.yaml + + out: + type: object + properties: + + vectorize: + type: integer + + hooks: + $ref: hooklist.yaml + + netem: + $ref: netem.yaml + +discriminator: + propertyName: type + mapping: + amqp: nodes/amqp.yaml + can: nodes/can.yaml + comedi: nodes/comedi.yaml + ethercat: nodes/ethercat.yaml + exec: nodes/exec.yaml + file: nodes/file.yaml + fpga: nodes/fpga.yaml + iec61850-8-1: nodes/iec61850-8-1.yaml + iec61850-9-2: nodes/iec61850-9-2.yaml + infiniband: nodes/infiniband.yaml + influxdb: nodes/influxdb.yaml + kafka: nodes/kafka.yaml + loopback: nodes/loopback.yaml + mqtt: nodes/mqtt.yaml + nanomsg: nodes/nanomsg.yaml + ngsi: nodes/ngsi.yaml + opal: nodes/opal.yaml + redis: nodes/redis.yaml + rtp: nodes/rtp.yaml + shmem: nodes/shmem.yaml + signal.v2: nodes/signal_v2.yaml + signal: nodes/signal.yaml + socket: nodes/socket.yaml + stats: nodes/stats.yaml + temper: nodes/temper.yaml + test_rtt: nodes/test_rtt.yaml + uldaq: nodes/uldaq.yaml + websocket: nodes/websocket.yaml + zeromq: nodes/zeromq.yaml diff --git a/doc/openapi/components/schemas/config/nodes/amqp.yaml b/doc/openapi/components/schemas/config/nodes/amqp.yaml new file mode 100644 index 000000000..264dcf873 --- /dev/null +++ b/doc/openapi/components/schemas/config/nodes/amqp.yaml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: +- $ref: ../node.yaml +- type: object + properties: + format: + $ref: ../formatspec.yaml diff --git a/doc/openapi/components/schemas/config/nodes/can.yaml b/doc/openapi/components/schemas/config/nodes/can.yaml new file mode 100644 index 000000000..264dcf873 --- /dev/null +++ b/doc/openapi/components/schemas/config/nodes/can.yaml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: +- $ref: ../node.yaml +- type: object + properties: + format: + $ref: ../formatspec.yaml diff --git a/doc/openapi/components/schemas/config/nodes/comedi.yaml b/doc/openapi/components/schemas/config/nodes/comedi.yaml new file mode 100644 index 000000000..264dcf873 --- /dev/null +++ b/doc/openapi/components/schemas/config/nodes/comedi.yaml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: +- $ref: ../node.yaml +- type: object + properties: + format: + $ref: ../formatspec.yaml diff --git a/doc/openapi/components/schemas/config/nodes/ethercat.yaml b/doc/openapi/components/schemas/config/nodes/ethercat.yaml new file mode 100644 index 000000000..264dcf873 --- /dev/null +++ b/doc/openapi/components/schemas/config/nodes/ethercat.yaml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: +- $ref: ../node.yaml +- type: object + properties: + format: + $ref: ../formatspec.yaml diff --git a/doc/openapi/components/schemas/config/nodes/exec.yaml b/doc/openapi/components/schemas/config/nodes/exec.yaml new file mode 100644 index 000000000..264dcf873 --- /dev/null +++ b/doc/openapi/components/schemas/config/nodes/exec.yaml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: +- $ref: ../node.yaml +- type: object + properties: + format: + $ref: ../formatspec.yaml diff --git a/doc/openapi/components/schemas/config/nodes/file.yaml b/doc/openapi/components/schemas/config/nodes/file.yaml new file mode 100644 index 000000000..264dcf873 --- /dev/null +++ b/doc/openapi/components/schemas/config/nodes/file.yaml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: +- $ref: ../node.yaml +- type: object + properties: + format: + $ref: ../formatspec.yaml diff --git a/doc/openapi/components/schemas/config/nodes/fpga.yaml b/doc/openapi/components/schemas/config/nodes/fpga.yaml new file mode 100644 index 000000000..264dcf873 --- /dev/null +++ b/doc/openapi/components/schemas/config/nodes/fpga.yaml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: +- $ref: ../node.yaml +- type: object + properties: + format: + $ref: ../formatspec.yaml diff --git a/doc/openapi/components/schemas/config/nodes/iec61850-8-1.yaml b/doc/openapi/components/schemas/config/nodes/iec61850-8-1.yaml new file mode 100644 index 000000000..264dcf873 --- /dev/null +++ b/doc/openapi/components/schemas/config/nodes/iec61850-8-1.yaml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: +- $ref: ../node.yaml +- type: object + properties: + format: + $ref: ../formatspec.yaml diff --git a/doc/openapi/components/schemas/config/nodes/iec61850-9-2.yaml b/doc/openapi/components/schemas/config/nodes/iec61850-9-2.yaml new file mode 100644 index 000000000..264dcf873 --- /dev/null +++ b/doc/openapi/components/schemas/config/nodes/iec61850-9-2.yaml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: +- $ref: ../node.yaml +- type: object + properties: + format: + $ref: ../formatspec.yaml diff --git a/doc/openapi/components/schemas/config/nodes/infiniband.yaml b/doc/openapi/components/schemas/config/nodes/infiniband.yaml new file mode 100644 index 000000000..264dcf873 --- /dev/null +++ b/doc/openapi/components/schemas/config/nodes/infiniband.yaml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: +- $ref: ../node.yaml +- type: object + properties: + format: + $ref: ../formatspec.yaml diff --git a/doc/openapi/components/schemas/config/nodes/influxdb.yaml b/doc/openapi/components/schemas/config/nodes/influxdb.yaml new file mode 100644 index 000000000..264dcf873 --- /dev/null +++ b/doc/openapi/components/schemas/config/nodes/influxdb.yaml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: +- $ref: ../node.yaml +- type: object + properties: + format: + $ref: ../formatspec.yaml diff --git a/doc/openapi/components/schemas/config/nodes/kafka.yaml b/doc/openapi/components/schemas/config/nodes/kafka.yaml new file mode 100644 index 000000000..264dcf873 --- /dev/null +++ b/doc/openapi/components/schemas/config/nodes/kafka.yaml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: +- $ref: ../node.yaml +- type: object + properties: + format: + $ref: ../formatspec.yaml diff --git a/doc/openapi/components/schemas/config/nodes/loopback.yaml b/doc/openapi/components/schemas/config/nodes/loopback.yaml new file mode 100644 index 000000000..264dcf873 --- /dev/null +++ b/doc/openapi/components/schemas/config/nodes/loopback.yaml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: +- $ref: ../node.yaml +- type: object + properties: + format: + $ref: ../formatspec.yaml diff --git a/doc/openapi/components/schemas/config/nodes/mqtt.yaml b/doc/openapi/components/schemas/config/nodes/mqtt.yaml new file mode 100644 index 000000000..264dcf873 --- /dev/null +++ b/doc/openapi/components/schemas/config/nodes/mqtt.yaml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: +- $ref: ../node.yaml +- type: object + properties: + format: + $ref: ../formatspec.yaml diff --git a/doc/openapi/components/schemas/config/nodes/nanomsg.yaml b/doc/openapi/components/schemas/config/nodes/nanomsg.yaml new file mode 100644 index 000000000..264dcf873 --- /dev/null +++ b/doc/openapi/components/schemas/config/nodes/nanomsg.yaml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: +- $ref: ../node.yaml +- type: object + properties: + format: + $ref: ../formatspec.yaml diff --git a/doc/openapi/components/schemas/config/nodes/ngsi.yaml b/doc/openapi/components/schemas/config/nodes/ngsi.yaml new file mode 100644 index 000000000..264dcf873 --- /dev/null +++ b/doc/openapi/components/schemas/config/nodes/ngsi.yaml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: +- $ref: ../node.yaml +- type: object + properties: + format: + $ref: ../formatspec.yaml diff --git a/doc/openapi/components/schemas/config/nodes/opal.yaml b/doc/openapi/components/schemas/config/nodes/opal.yaml new file mode 100644 index 000000000..264dcf873 --- /dev/null +++ b/doc/openapi/components/schemas/config/nodes/opal.yaml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: +- $ref: ../node.yaml +- type: object + properties: + format: + $ref: ../formatspec.yaml diff --git a/doc/openapi/components/schemas/config/nodes/redis.yaml b/doc/openapi/components/schemas/config/nodes/redis.yaml new file mode 100644 index 000000000..264dcf873 --- /dev/null +++ b/doc/openapi/components/schemas/config/nodes/redis.yaml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: +- $ref: ../node.yaml +- type: object + properties: + format: + $ref: ../formatspec.yaml diff --git a/doc/openapi/components/schemas/config/nodes/rtp.yaml b/doc/openapi/components/schemas/config/nodes/rtp.yaml new file mode 100644 index 000000000..264dcf873 --- /dev/null +++ b/doc/openapi/components/schemas/config/nodes/rtp.yaml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: +- $ref: ../node.yaml +- type: object + properties: + format: + $ref: ../formatspec.yaml diff --git a/doc/openapi/components/schemas/config/nodes/shmem.yaml b/doc/openapi/components/schemas/config/nodes/shmem.yaml new file mode 100644 index 000000000..264dcf873 --- /dev/null +++ b/doc/openapi/components/schemas/config/nodes/shmem.yaml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: +- $ref: ../node.yaml +- type: object + properties: + format: + $ref: ../formatspec.yaml diff --git a/doc/openapi/components/schemas/config/nodes/signal.yaml b/doc/openapi/components/schemas/config/nodes/signal.yaml new file mode 100644 index 000000000..264dcf873 --- /dev/null +++ b/doc/openapi/components/schemas/config/nodes/signal.yaml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: +- $ref: ../node.yaml +- type: object + properties: + format: + $ref: ../formatspec.yaml diff --git a/doc/openapi/components/schemas/config/nodes/signal_v2.yaml b/doc/openapi/components/schemas/config/nodes/signal_v2.yaml new file mode 100644 index 000000000..264dcf873 --- /dev/null +++ b/doc/openapi/components/schemas/config/nodes/signal_v2.yaml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: +- $ref: ../node.yaml +- type: object + properties: + format: + $ref: ../formatspec.yaml diff --git a/doc/openapi/components/schemas/config/nodes/socket.yaml b/doc/openapi/components/schemas/config/nodes/socket.yaml new file mode 100644 index 000000000..264dcf873 --- /dev/null +++ b/doc/openapi/components/schemas/config/nodes/socket.yaml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: +- $ref: ../node.yaml +- type: object + properties: + format: + $ref: ../formatspec.yaml diff --git a/doc/openapi/components/schemas/config/nodes/stats.yaml b/doc/openapi/components/schemas/config/nodes/stats.yaml new file mode 100644 index 000000000..264dcf873 --- /dev/null +++ b/doc/openapi/components/schemas/config/nodes/stats.yaml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: +- $ref: ../node.yaml +- type: object + properties: + format: + $ref: ../formatspec.yaml diff --git a/doc/openapi/components/schemas/config/nodes/temper.yaml b/doc/openapi/components/schemas/config/nodes/temper.yaml new file mode 100644 index 000000000..264dcf873 --- /dev/null +++ b/doc/openapi/components/schemas/config/nodes/temper.yaml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: +- $ref: ../node.yaml +- type: object + properties: + format: + $ref: ../formatspec.yaml diff --git a/doc/openapi/components/schemas/config/nodes/test_rtt.yaml b/doc/openapi/components/schemas/config/nodes/test_rtt.yaml new file mode 100644 index 000000000..264dcf873 --- /dev/null +++ b/doc/openapi/components/schemas/config/nodes/test_rtt.yaml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: +- $ref: ../node.yaml +- type: object + properties: + format: + $ref: ../formatspec.yaml diff --git a/doc/openapi/components/schemas/config/nodes/uldaq.yaml b/doc/openapi/components/schemas/config/nodes/uldaq.yaml new file mode 100644 index 000000000..264dcf873 --- /dev/null +++ b/doc/openapi/components/schemas/config/nodes/uldaq.yaml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: +- $ref: ../node.yaml +- type: object + properties: + format: + $ref: ../formatspec.yaml diff --git a/doc/openapi/components/schemas/config/nodes/websocket.yaml b/doc/openapi/components/schemas/config/nodes/websocket.yaml new file mode 100644 index 000000000..264dcf873 --- /dev/null +++ b/doc/openapi/components/schemas/config/nodes/websocket.yaml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: +- $ref: ../node.yaml +- type: object + properties: + format: + $ref: ../formatspec.yaml diff --git a/doc/openapi/components/schemas/config/nodes/zeromq.yaml b/doc/openapi/components/schemas/config/nodes/zeromq.yaml new file mode 100644 index 000000000..264dcf873 --- /dev/null +++ b/doc/openapi/components/schemas/config/nodes/zeromq.yaml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + + +allOf: +- $ref: ../node.yaml +- type: object + properties: + format: + $ref: ../formatspec.yaml diff --git a/doc/openapi/components/schemas/config/path.yaml b/doc/openapi/components/schemas/config/path.yaml new file mode 100644 index 000000000..46777202f --- /dev/null +++ b/doc/openapi/components/schemas/config/path.yaml @@ -0,0 +1,89 @@ +--- +# yaml-language-server: $schema=http://json-schema.org/draft-07/schema + +type: object +title: The first anyOf schema +description: An explanation about the purpose of this instance. + +required: +- in + +properties: + in: + description: | + The in settings expects the name of one or more source nodes or mapping expressions. + + oneOf: + - type: string + - type: array + items: + type: string + + out: + description: | + The out setting expects the name of one or more destination nodes. Each sample which is processed by the path will be sent to each of the destination nodes. + + oneOf: + - type: string + - type: array + items: + type: string + + enabled: + type: boolean + default: true + description: | + The optional enabled setting can be used to temporarily disable a path. + + reverse: + type: boolean + default: false + description: | + By default, the path is unidirectional. + Meaning, that it only forwards samples from the source to the destination. + Sometimes a bidirectional path is needed. This can be accomplished by setting reverse to true. + + mode: + type: string + default: any + enum: + - any + - all + description: | + The mode setting specifies under which condition a path is triggered. + A triggered path will multiplex / merge samples from its input nodes and run the configured hook functions on them. + Afterwards the processed and merged samples will be send to all output nodes. + + Two modes are currently supported: + + - `any``: The path will trigger the path as soon as any of the masked (see `mask`) input nodes received new samples. + - `all``: The path will trigger the path as soon as all input nodes received at least one new sample. + + mask: + description: | + This setting allows masking the the input nodes which can trigger the path. + + See also `mode` setting. + + type: array + items: + type: string + description: A node-name + + rate: + type: number + minimum: 0 + default: 0 + description: | + A non-zero value will periodically trigger the path and resend the last sample again. + + A value of zero will disable this feature. + + original_sequence_no: + type: boolean + default: false + description: | + When this flag is set, the original sequence number from the source node will be used when multiplexing the nodes. + + hooks: + $ref: hooklist.yaml diff --git a/doc/openapi/components/schemas/config/signaldef.yaml b/doc/openapi/components/schemas/config/signaldef.yaml new file mode 100644 index 000000000..6c40b800f --- /dev/null +++ b/doc/openapi/components/schemas/config/signaldef.yaml @@ -0,0 +1,54 @@ +--- +type: object +properties: + name: + type: string + title: Signal name + description: | + A name which describes the signal. + example: Bus123_U + + unit: + type: string + title: Signal unit + description: + The unit of the signal. + example: V + + type: + type: string + title: Signal data-type + description: | + The data-type of the signal. + default: float + enum: + - integer + - float + - boolean + - complex + + init: + title: Initial signal value. + description: | + The initial value of the signal. + + oneOf: + - type: integer + - type: number + - type: boolean + - type: object + required: + - real + - imag + additionalProperties: false + properties: + real: + type: number + imag: + type: number + + enabled: + type: boolean + default: true + description: | + Signals can be disabled which causes them to be ignored. diff --git a/doc/openapi/components/schemas/config/signallist.yaml b/doc/openapi/components/schemas/config/signallist.yaml new file mode 100644 index 000000000..5e42e32f2 --- /dev/null +++ b/doc/openapi/components/schemas/config/signallist.yaml @@ -0,0 +1,43 @@ +--- +title: Signal list +description: | + Each node should define a list of signals which it receives. + + There are three ways to specify the input signals of a node: + +oneOf: +- type: array + title: List of signal definition objects + items: + $ref: signaldef.yaml + +- type: object + title: Signal definition with `count` + allOf: + - $ref: signaldef.yaml + - type: object + required: + - count + properties: + count: + type: integer + minimum: 1 + default: 64 + +- type: string + title: Signal format string + example: '64f' + description: | + The easiest way to specify the signals, is by using a format string. + The format string consists of one ore more characters which define the type for the signal corresponding to the position of the character in the string. + + | Character | Type | Setting for full and list mode | + |:--- |:--- |:--- | + | `f` | Floating point | "float" | + | `b` | Boolean | "boolean" | + | `i` | Integer | "integer" | + | `c` | Complex Floating point | "complex" | + + Optionally, the characters can be prefixed by an integer for easier repetition. + + **Example:** `12f3i` defines 15 signals, of which the first 12 are floating point and the last 3 are integer values. diff --git a/doc/schema/format/acs-pmu-edgeflex.yaml b/doc/openapi/components/schemas/formats/edgeflex.yaml similarity index 63% rename from doc/schema/format/acs-pmu-edgeflex.yaml rename to doc/openapi/components/schemas/formats/edgeflex.yaml index ad43cb8e1..9fdfc7f29 100644 --- a/doc/schema/format/acs-pmu-edgeflex.yaml +++ b/doc/openapi/components/schemas/formats/edgeflex.yaml @@ -1,23 +1,23 @@ --- # yaml-language-server: $schema=http://json-schema.org/draft-07/schema - -$schema: 'http://json-schema.org/draft-07/schema' -$id: 'https://villas.fein-aachen.org/formats/edgeflex.json' title: PMU measurements as used in the EdgeFlex project by Manuel description: | - VILLASnode does not support deseralization (yet) + VILLASnode does not support deseralization (yet). type: object + required: - created + properties: created: + title: Sampling timestamp description: A timestamps in miliseconds since 1970-01-01 00:00:00 type: number - min: 0 + minimum: 0 -additionalItems: +additionalProperties: description: Key-value pairs of measurements anyOf: - type: number @@ -31,12 +31,12 @@ additionalItems: imag: type: number -examples: -- - signal0: 123.456 - signal1: true - signal2: 1234 - signal3: - real: 1234.4556 - imag: 23232.12312 - created: 1633791645123 +example: +- created: 1633791645123 + signal0: 123.456 + signal1: true + signal2: 1234 + signal3: + real: 1234.4556 + imag: 23232.12312 \ No newline at end of file diff --git a/doc/schema/format/acs-pmu-igor.yaml b/doc/openapi/components/schemas/formats/igor.yaml similarity index 68% rename from doc/schema/format/acs-pmu-igor.yaml rename to doc/openapi/components/schemas/formats/igor.yaml index 19449f54d..ecb7a9269 100644 --- a/doc/schema/format/acs-pmu-igor.yaml +++ b/doc/openapi/components/schemas/formats/igor.yaml @@ -1,13 +1,10 @@ --- # yaml-language-server: $schema=http://json-schema.org/draft-07/schema - -$schema: 'http://json-schema.org/draft-07/schema' -$id: 'https://villas.fein-aachen.org/formats/edgeflex.json' title: PMU format used by Igor -examples: -- device: device1 +example: + device: device1 timestamp: '2020-05-20T10:27:57.980802+00:00' readings: - channel: BUS1-VA @@ -70,22 +67,25 @@ properties: readings: type: array items: - channel: - type: string - description: Name of the monitored bus - - magnitude: - type: number - description: Amplitude of the measured signal [V] + type: object + properties: - phase: - type: number - description: Phase of the measured signal [radian] - - frequency: - type: number - description: Frequency of the line signal [Hz] + channel: + type: string + description: Name of the monitored bus - rocof: - type: number - description: Rate of change of frequency [Hz/s] + magnitude: + type: number + description: Amplitude of the measured signal [V] + + phase: + type: number + description: Phase of the measured signal [radian] + + frequency: + type: number + description: Frequency of the line signal [Hz] + + rocof: + type: number + description: Rate of change of frequency [Hz/s] diff --git a/doc/schema/format/acs-pmu-sogno-old.yaml b/doc/openapi/components/schemas/formats/sogno-old.yaml similarity index 87% rename from doc/schema/format/acs-pmu-sogno-old.yaml rename to doc/openapi/components/schemas/formats/sogno-old.yaml index 5fe66c9f1..23770931b 100644 --- a/doc/schema/format/acs-pmu-sogno-old.yaml +++ b/doc/openapi/components/schemas/formats/sogno-old.yaml @@ -60,10 +60,10 @@ properties: - apparentpower: single phase power, unit voltampere - frequency: unit hertz -examples: - - device: pmu-abc0 - timestamp: '2021-10-07T10:11:12.1231241+02:00' - component: 7a30b61a-2913-11ec-9621-0242ac130002 - measurand: voltagemagnitude - phase: A - data: 123124 +example: + device: pmu-abc0 + timestamp: '2021-10-07T10:11:12.1231241+02:00' + component: 7a30b61a-2913-11ec-9621-0242ac130002 + measurand: voltagemagnitude + phase: A + data: 123124 diff --git a/doc/schema/format/acs-pmu-sogno.yaml b/doc/openapi/components/schemas/formats/sogno.yaml similarity index 92% rename from doc/schema/format/acs-pmu-sogno.yaml rename to doc/openapi/components/schemas/formats/sogno.yaml index 785312407..62dc63fea 100644 --- a/doc/schema/format/acs-pmu-sogno.yaml +++ b/doc/openapi/components/schemas/formats/sogno.yaml @@ -1,13 +1,10 @@ --- # yaml-language-server: $schema=http://json-schema.org/draft-07/schema - -$schema: 'http://json-schema.org/draft-07/schema' -$id: 'https://villas.fein-aachen.org/formats/edgeflex.json' title: PMU format used in SOGNO LF project -examples: -- device: device1 +example: + device: device1 timestamp: '2020-05-20T10:27:57.980802+00:00' readings: - component: BUS1 diff --git a/doc/openapi/openapi.yaml b/doc/openapi/openapi.yaml new file mode 100644 index 000000000..6616d24a4 --- /dev/null +++ b/doc/openapi/openapi.yaml @@ -0,0 +1,146 @@ +--- +openapi: 3.0.3 + +info: + title: VILLASnode API + version: 0.10.0 + + description: >- + A HTTP/REST API for controlling VILLASnode remotely without the need to + restart the daemon. + termsOfService: 'https://www.fein-aachen.org/projects/villas-node/' + + contact: + name: Steffen Vogel + email: svogel2@eonerc.rwth-aachen.de + url: 'https://fein-aachen.org/contact/' + + license: + name: GPL-v3 + url: 'https://www.gnu.org/licenses/gpl-3.0.en.html' + +externalDocs: + url: 'https://villas.fein-aachen.org/doc/node.html' + +servers: +- url: 'https://villas.k8s.eonerc.rwth-aachen.de/api/v2' + description: The production API server in our EONERC OpenStack Kubernetes + +- url: 'http://localhost:8080' + description: Your local host + +tags: +- name: super-node + x-displayName: Super Node + description: Global super-node related operations. + +- name: nodes + x-displayName: Nodes + description: Node related operations. + +- name: paths + x-displayName: Paths + description: Path related operations. + +- name: config + x-displayName: VILLASnode configuration file + description: | + This section decribes the schema of the VILLASnode configuration file. + Please use the `>` to expand the individual sub-sections. + + + +- name: format-edgeflex + x-displayName: Edgeflex Format + description: | + + +- name: format-igor + x-displayName: Igor's Format + description: | + + +- name: format-sogno + x-displayName: SOGNO Format + description: | + + +- name: format-sogno-old + x-displayName: Old SOGNO Format + description: | + + +x-tagGroups: +- name: VILLASnode APIs + tags: + - super-node + - nodes + - paths + +- name: Configuration Files + tags: + - config + +- name: Format Schemas + tags: + - format-edgeflex + - format-igor + - format-sogno + - format-sogno-old + +paths: + /status: + $ref: paths/status.yaml + /capabilities: + $ref: paths/capabilities.yaml + /config: + $ref: paths/config.yaml + /restart: + $ref: paths/restart.yaml + /shutdown: + $ref: paths/shutdown.yaml + /nodes: + $ref: paths/nodes.yaml + '/node/{uuid-or-name}': + $ref: 'paths/node/node@{uuid-or-name}.yaml' + '/node/{uuid-or-name}/stats': + $ref: 'paths/node/node@{uuid-or-name}@stats.yaml' + '/node/{uuid-or-name}/stats/reset': + $ref: 'paths/node/node@{uuid-or-name}@stats@reset.yaml' + '/node/{uuid-or-name}/start': + $ref: 'paths/node/node@{uuid-or-name}@start.yaml' + '/node/{uuid-or-name}/stop': + $ref: 'paths/node/node@{uuid-or-name}@stop.yaml' + '/node/{uuid-or-name}/pause': + $ref: 'paths/node/node@{uuid-or-name}@pause.yaml' + '/node/{uuid-or-name}/resume': + $ref: 'paths/node/node@{uuid-or-name}@resume.yaml' + '/node/{uuid-or-name}/restart': + $ref: 'paths/node/node@{uuid-or-name}@restart.yaml' + '/node/{uuid-or-name}/file/rewind': + $ref: 'paths/node/node@{uuid-or-name}@file@rewind.yaml' + '/node/{uuid-or-name}/file/seek': + $ref: 'paths/node/node@{uuid-or-name}@file@seek.yaml' + /paths: + $ref: paths/paths.yaml + '/path/{uuid}': + $ref: 'paths/path/path@{uuid}.yaml' + '/path/{uuid}/start': + $ref: 'paths/path/path@{uuid}@start.yaml' + '/path/{uuid}/stop': + $ref: 'paths/path/path@{uuid}@stop.yaml' + '/graph.{format}': + $ref: 'paths/graph.{format}.yaml' + +components: + schemas: + Config: + $ref: components/schemas/config.yaml + FormatEdgeflex: + $ref: components/schemas/formats/edgeflex.yaml + FormatIgor: + $ref: components/schemas/formats/igor.yaml + FormatSognoOld: + $ref: components/schemas/formats/sogno-old.yaml + FormatSogno: + $ref: components/schemas/formats/sogno.yaml diff --git a/doc/openapi/paths/README.md b/doc/openapi/paths/README.md new file mode 100644 index 000000000..04496597e --- /dev/null +++ b/doc/openapi/paths/README.md @@ -0,0 +1,105 @@ +Paths +===== + +Organize your path definitions within this folder. You will reference your paths from your main `openapi.yaml` entrypoint file. + +It may help you to adopt some conventions: + +* path separator token (e.g. `@`) or subfolders +* path parameter (e.g. `{example}`) +* file-per-path or file-per-operation + +There are different benefits and drawbacks to each decision. + +You can adopt any organization you wish. We have some tips for organizing paths based on common practices. + +## Each path in a separate file + +Use a predefined "path separator" and keep all of your path files in the top level of the `paths` folder. + +``` +# todo: insert tree view of paths folder +``` + +Redocly recommends using the `@` character for this case. + +In addition, Redocly recommends placing path parameters within `{}` curly braces if you adopt this style. + +#### Motivations + +* Quickly see a list of all paths. Many people think in terms of the "number" of "endpoints" (paths), and not the "number" of "operations" (paths * http methods). + +* Only the "file-per-path" option is semantically correct with the OpenAPI Specification 3.0.2. However, Redocly's openapi-cli will build valid bundles for any of the other options too. + + +#### Drawbacks + +* This may require multiple definitions per http method within a single file. +* It requires settling on a path separator (that is allowed to be used in filenames) and sticking to that convention. + +## Each operation in a separate file + +You may also place each operation in a separate file. + +In this case, if you want all paths at the top-level, you can concatenate the http method to the path name. Similar to the above option, you can + +### Files at top-level of `paths` + +You may name your files with some concatenation for the http method. For example, following a convention such as: `-.yaml`. + +#### Motivations + +* Quickly see all operations without needing to navigate subfolders. + +#### Drawbacks + +* Adopting an unusual path separator convention, instead of using subfolders. + +### Use subfolders to mirror API path structure + +Example: +``` +GET /customers + +/paths/customers/get.yaml +``` + +In this case, the path id defined within subfolders which mirror the API URL structure. + +Example with path parameter: +``` +GET /customers/{id} + +/paths/customers/{id}/get.yaml +``` + +#### Motivations + +It matches the URL structure. + +It is pretty easy to reference: + +```yaml +paths: + '/customers/{id}': + get: + $ref: ./paths/customers/{id}/get.yaml + put: + $ref: ./paths/customers/{id}/put.yaml +``` + +#### Drawbacks + +If you have a lot of nested folders, it may be confusing to reference your schemas. + +Example +``` +file: /paths/customers/{id}/timeline/{messageId}/get.yaml + +# excerpt of file + headers: + Rate-Limit-Remaining: + $ref: ../../../../../components/headers/Rate-Limit-Remaining.yaml + +``` +Notice the `../../../../../` in the ref which requires some attention to formulate correctly. While openapi-cli has a linter which suggests possible refs when there is a mistake, this is still a net drawback for APIs with deep paths. diff --git a/doc/openapi/paths/capabilities.yaml b/doc/openapi/paths/capabilities.yaml new file mode 100644 index 000000000..e84f4728c --- /dev/null +++ b/doc/openapi/paths/capabilities.yaml @@ -0,0 +1,94 @@ +get: + operationId: get-capabilities + + summary: Get the capabilities of the VILLASnode instance. + tags: + - super-node + responses: + '200': + description: Success + content: + application/json: + examples: + example1: + value: + hooks: + - average + - average + - cast + - decimate + - dp + - drop + - dump + - ebm + - fix + - gate + - jitter_calc + - limit_rate + - pps_ts + - print + - restart + - scale + - shift_seq + - shift_ts + - skip_first + - stats + - ts + node-types: + - amqp + - can + - ethercat + - example + - exec + - file + - influxdb + - kafka + - loopback + - loopback_internal + - mqtt + - ngsi + - redis + - shmem + - signal + - socket + - stats + - temper + - test_rtt + - websocket + - zeromq + apis: + - capabilities + - config + - node + - node/file + - node/pause + - node/restart + - node/resume + - node/start + - node/stats + - node/stats/reset + - node/stop + - nodes + - path + - path/start + - path/stop + - paths + - restart + - shutdown + - status + formats: + - csv + - gtnet + - iotagent_ul + - json + - json.kafka + - json.reserve + - raw + - tsv + - value + - villas.binary + - villas.human + - villas.web + + '400': + description: Failure diff --git a/doc/openapi/paths/config.yaml b/doc/openapi/paths/config.yaml new file mode 100644 index 000000000..3117cb532 --- /dev/null +++ b/doc/openapi/paths/config.yaml @@ -0,0 +1,54 @@ +get: + operationId: get-config + + summary: Get the currently loaded configuration. + tags: + - super-node + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/Config' + examples: + example1: + value: + nodes: + udp_node1: + type: socket + layer: udp + in: + address: '*:12000' + signals: + count: 8 + type: float + out: + address: '127.0.0.1:12001' + web_node1: + type: websocket + vectorize: 2 + series: + - label: Random walk + unit: V + - label: Sine + unit: A + - label: Rect + unit: Var + - label: Ramp + unit: °C + paths: + - in: + - udp_node1 + out: + - web_node1 + hooks: + - type: decimate + ratio: 2 + - in: + - web_node1 + out: + - udp_node1 + + '400': + description: Failure diff --git a/doc/openapi/paths/graph.{format}.yaml b/doc/openapi/paths/graph.{format}.yaml new file mode 100644 index 000000000..e1ea2cf30 --- /dev/null +++ b/doc/openapi/paths/graph.{format}.yaml @@ -0,0 +1,53 @@ +get: + operationId: get-graph + + summary: Get a graph representation of the currently loaded configuration. + + tags: + - super-node + + parameters: + - in: path + name: format + schema: + type: string + description: The image format of the generated graph. + enum: + - ps + - eps + - txt + - svg + - svgz + - gif + - png + - jpg + - jpeg + - bmp + - dot + - fig + - json + - pdf + + - in: query + name: layout + schema: + type: string + description: The Graphviz layout engine used for rendering the graph. + enum: + - circo + - dot + - fdp + - neato + - nop + - nop1 + - nop2 + - osage + - patchwork + - sfdp + - twopi + + responses: + '200': + description: Success + '400': + description: Failure diff --git a/doc/openapi/paths/node/node@{uuid-or-name}.yaml b/doc/openapi/paths/node/node@{uuid-or-name}.yaml new file mode 100644 index 000000000..a58c4291e --- /dev/null +++ b/doc/openapi/paths/node/node@{uuid-or-name}.yaml @@ -0,0 +1,33 @@ +get: + operationId: get-node + + summary: Get the information of a specific node. + tags: + - nodes + parameters: + - $ref: ../../components/parameters/node-uuid-name.yaml + responses: + '200': + description: Success + content: + application/json: + examples: + example1: + value: + name: udp_node1 + uuid: b3df1d73-f483-f16c-5936-4ea48295615c + state: running + affinity: -1 + in: + address: '*:12000' + signals: + count: 8 + type: float + out: + address: '127.0.0.1:12001' + type: socket + layer: udp + '404': + description: >- + Error. There is no node with the given UUID or the node does not collect + statistics. diff --git a/doc/openapi/paths/node/node@{uuid-or-name}@file@rewind.yaml b/doc/openapi/paths/node/node@{uuid-or-name}@file@rewind.yaml new file mode 100644 index 000000000..76cbaac7f --- /dev/null +++ b/doc/openapi/paths/node/node@{uuid-or-name}@file@rewind.yaml @@ -0,0 +1,13 @@ +post: + operationId: rewind-file-node + + summary: Rewind the playback file to the beginning. + tags: + - nodes + parameters: + - $ref: ../../components/parameters/node-uuid-name.yaml + responses: + '200': + description: Success. The file has been rewound. + '404': + description: Error. There is no node with the given UUID. diff --git a/doc/openapi/paths/node/node@{uuid-or-name}@file@seek.yaml b/doc/openapi/paths/node/node@{uuid-or-name}@file@seek.yaml new file mode 100644 index 000000000..0fcd76250 --- /dev/null +++ b/doc/openapi/paths/node/node@{uuid-or-name}@file@seek.yaml @@ -0,0 +1,27 @@ +post: + operationId: seek-file-node + + summary: Rewind the playback file to the beginning. + tags: + - nodes + parameters: + - $ref: ../../components/parameters/node-uuid-name.yaml + requestBody: + description: Sample position in file + required: true + content: + application/json: + schema: + type: object + required: + - position + properties: + position: + type: integer + example: 123 + description: Skip the first nth samples in the file. + responses: + '200': + description: Success. The read-pointer of the file has been changed. + '404': + description: Error. There is no node with the given UUID. diff --git a/doc/openapi/paths/node/node@{uuid-or-name}@pause.yaml b/doc/openapi/paths/node/node@{uuid-or-name}@pause.yaml new file mode 100644 index 000000000..0487b1702 --- /dev/null +++ b/doc/openapi/paths/node/node@{uuid-or-name}@pause.yaml @@ -0,0 +1,13 @@ +post: + operationId: pause-graph + + summary: Pause a node. + tags: + - nodes + parameters: + - $ref: ../../components/parameters/node-uuid-name.yaml + responses: + '200': + description: Success. The node has been paused. + '404': + description: Error. There is no node with the given UUID. diff --git a/doc/openapi/paths/node/node@{uuid-or-name}@restart.yaml b/doc/openapi/paths/node/node@{uuid-or-name}@restart.yaml new file mode 100644 index 000000000..175999261 --- /dev/null +++ b/doc/openapi/paths/node/node@{uuid-or-name}@restart.yaml @@ -0,0 +1,13 @@ +post: + operationId: restart-node + + summary: Retart a node. + tags: + - nodes + parameters: + - $ref: ../../components/parameters/node-uuid-name.yaml + responses: + '200': + description: Success. The node has been restarted. + '404': + description: Error. There is no node with the given UUID. diff --git a/doc/openapi/paths/node/node@{uuid-or-name}@resume.yaml b/doc/openapi/paths/node/node@{uuid-or-name}@resume.yaml new file mode 100644 index 000000000..b0f2f0037 --- /dev/null +++ b/doc/openapi/paths/node/node@{uuid-or-name}@resume.yaml @@ -0,0 +1,13 @@ +post: + operationId: resume-node + + summary: Resume a node. + tags: + - nodes + parameters: + - $ref: ../../components/parameters/node-uuid-name.yaml + responses: + '200': + description: Success. The node has been resumed. + '404': + description: Error. There is no node with the given UUID. diff --git a/doc/openapi/paths/node/node@{uuid-or-name}@start.yaml b/doc/openapi/paths/node/node@{uuid-or-name}@start.yaml new file mode 100644 index 000000000..38060a4d7 --- /dev/null +++ b/doc/openapi/paths/node/node@{uuid-or-name}@start.yaml @@ -0,0 +1,12 @@ +post: + operationId: start-node + summary: Start a node. + tags: + - nodes + parameters: + - $ref: ../../components/parameters/node-uuid-name.yaml + responses: + '200': + description: Success. The node has been started. + '404': + description: Error. There is no node with the given UUID. diff --git a/doc/openapi/paths/node/node@{uuid-or-name}@stats.yaml b/doc/openapi/paths/node/node@{uuid-or-name}@stats.yaml new file mode 100644 index 000000000..97e805d82 --- /dev/null +++ b/doc/openapi/paths/node/node@{uuid-or-name}@stats.yaml @@ -0,0 +1,139 @@ +get: + operationId: get-node-stats + summary: Get the statistics of a node. + tags: + - nodes + parameters: + - $ref: ../../components/parameters/node-uuid-name.yaml + responses: + '200': + description: Success + content: + application/json: + examples: + example1: + value: + rtp.jitter: + low: 1.3293196e-316 + high: 0 + total: 0 + rtp.pkts_lost: + low: 1.3285797e-316 + high: 1.3290532e-316 + total: 0 + rtp.loss_fraction: + low: 3.e-323 + high: 1.32907453e-316 + total: 0 + age: + low: 1.3288619e-316 + high: 1.32909588e-316 + total: 0 + owd: + low: 3.e-323 + high: 3.e-322 + total: 144 + higher: 0 + lower: 0 + highest: 0.099986117 + lowest: 0.09990915800000001 + mean: 0.09998063221527778 + variance: 7.736879555478282e-11 + stddev: 0.000008795953362472019 + buckets: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + gap_received: + low: 0 + high: 1.32743107e-316 + total: 144 + higher: 0 + lower: 0 + highest: 0.10000411000000001 + lowest: 0.09999650900000001 + mean: 0.09999998652777778 + variance: 5.701784607620545e-13 + stddev: 7.551016228045431e-7 + buckets: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + gap_sent: + low: 1.58e-321 + high: 1.3292848e-316 + total: 144 + higher: 0 + lower: 0 + highest: 0.10004273400000001 + lowest: 0.09926839700000001 + mean: 0.09999436691666665 + variance: 3.7637473716438304e-9 + stddev: 0.00006134938770390321 + buckets: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + reordered: + low: 8.28904606e-315 + high: 1.32930615e-316 + total: 0 + skipped: + low: 1.32879865e-316 + high: 1.3293275e-316 + total: 0 + '404': + description: >- + Error. There is no node with the given UUID or the node does not collect + statistics. diff --git a/doc/openapi/paths/node/node@{uuid-or-name}@stats@reset.yaml b/doc/openapi/paths/node/node@{uuid-or-name}@stats@reset.yaml new file mode 100644 index 000000000..50f38ccd9 --- /dev/null +++ b/doc/openapi/paths/node/node@{uuid-or-name}@stats@reset.yaml @@ -0,0 +1,12 @@ +post: + operationId: reset-node-stats + summary: Reset the statistics counters for a specific node. + tags: + - nodes + parameters: + - $ref: ../../components/parameters/node-uuid-name.yaml + responses: + '200': + description: Success. The statistics of the node have been reset. + '404': + description: Error. There is no node with the given UUID. diff --git a/doc/openapi/paths/node/node@{uuid-or-name}@stop.yaml b/doc/openapi/paths/node/node@{uuid-or-name}@stop.yaml new file mode 100644 index 000000000..370e88534 --- /dev/null +++ b/doc/openapi/paths/node/node@{uuid-or-name}@stop.yaml @@ -0,0 +1,12 @@ +post: + operationId: stop-node + summary: Stop a node. + tags: + - nodes + parameters: + - $ref: ../../components/parameters/node-uuid-name.yaml + responses: + '200': + description: Success. The node has been stopped. + '404': + description: Error. There is no node with the given UUID. diff --git a/doc/openapi/paths/nodes.yaml b/doc/openapi/paths/nodes.yaml new file mode 100644 index 000000000..603c1fa40 --- /dev/null +++ b/doc/openapi/paths/nodes.yaml @@ -0,0 +1,71 @@ +get: + operationId: get-nodes + summary: Get a list of all configure node instances. + tags: + - nodes + responses: + '200': + description: Success + content: + application/json: + examples: + example1: + value: + - name: udp_node1 + uuid: b3df1d73-f483-f16c-5936-4ea48295615c + state: running + affinity: -1 + in: + address: '*:12000' + signals: + count: 8 + type: float + out: + address: '127.0.0.1:12001' + type: socket + layer: udp + - name: web_node1 + uuid: 19c84350-c83a-8a3b-224b-43fa591c8998 + state: running + affinity: -1 + in: + vectorize: 2 + signals: + - type: float + enabled: true + name: signal0 + - type: float + enabled: true + name: signal1 + - type: float + enabled: true + name: signal2 + - type: float + enabled: true + name: signal3 + out: + vectorize: 2 + signals: + - type: float + enabled: true + name: signal0 + - type: float + enabled: true + name: signal1 + - type: float + enabled: true + name: signal2 + type: websocket + vectorize: 2 + series: + - label: Random walk + unit: V + - label: Sine + unit: A + - label: Rect + unit: Var + - label: Ramp + unit: °C + + '400': + description: Failure diff --git a/doc/openapi/paths/path/path@{uuid}.yaml b/doc/openapi/paths/path/path@{uuid}.yaml new file mode 100644 index 000000000..04550259c --- /dev/null +++ b/doc/openapi/paths/path/path@{uuid}.yaml @@ -0,0 +1,33 @@ +post: + operationId: get-path + summary: Get details of a single path. + tags: + - paths + parameters: + - $ref: ../../components/parameters/path-uuid.yaml + responses: + '200': + description: Success + content: + application/json: + examples: + example1: + value: + uuid: 251c99af-4b05-9de4-367e-2bb550412e56 + state: running + mode: any + enabled: true + builtin: true + reverse: false + original_sequence_no: true + last_sequence: false + poll: false + queuelen: 1024 + signals: [] + hooks: [] + in: + - udp_node1 + out: + - web_node1 + '404': + description: Error. There is no path with the given UUID. diff --git a/doc/openapi/paths/path/path@{uuid}@start.yaml b/doc/openapi/paths/path/path@{uuid}@start.yaml new file mode 100644 index 000000000..0807cc36c --- /dev/null +++ b/doc/openapi/paths/path/path@{uuid}@start.yaml @@ -0,0 +1,12 @@ +post: + operationId: start-path + summary: Start a path. + tags: + - paths + parameters: + - $ref: ../../components/parameters/path-uuid.yaml + responses: + '200': + description: Success. The path has been started. + '404': + description: Error. There is no path with the given UUID. diff --git a/doc/openapi/paths/path/path@{uuid}@stop.yaml b/doc/openapi/paths/path/path@{uuid}@stop.yaml new file mode 100644 index 000000000..f63f5e059 --- /dev/null +++ b/doc/openapi/paths/path/path@{uuid}@stop.yaml @@ -0,0 +1,12 @@ +post: + operationId: stop-path + summary: Start a path. + tags: + - paths + parameters: + - $ref: ../../components/parameters/path-uuid.yaml + responses: + '200': + description: Success. The path has been stopped. + '404': + description: Error. There is no path with the given UUID. diff --git a/doc/openapi/paths/paths.yaml b/doc/openapi/paths/paths.yaml new file mode 100644 index 000000000..9a023204e --- /dev/null +++ b/doc/openapi/paths/paths.yaml @@ -0,0 +1,48 @@ +get: + operationId: get-paths + summary: Get a list of all paths. + tags: + - paths + responses: + '200': + description: Success + content: + application/json: + examples: + example1: + value: + - uuid: 251c99af-4b05-9de4-367e-2bb550412e56 + state: running + mode: any + enabled: true + builtin: true + reverse: false + original_sequence_no: true + last_sequence: false + poll: false + queuelen: 1024 + signals: [] + hooks: [] + in: + - udp_node1 + out: + - web_node1 + - uuid: 61b5674b-95fa-b35f-bff8-c877acf21e3b + state: running + mode: any + enabled: true + builtin: true + reverse: false + original_sequence_no: true + last_sequence: false + poll: false + queuelen: 1024 + signals: [] + hooks: [] + in: + - web_node1 + out: + - udp_node1 + + '400': + description: Failure diff --git a/doc/openapi/paths/restart.yaml b/doc/openapi/paths/restart.yaml new file mode 100644 index 000000000..008fc992c --- /dev/null +++ b/doc/openapi/paths/restart.yaml @@ -0,0 +1,36 @@ +post: + operationId: restart + summary: Restart the VILLASnode instance. + tags: + - super-node + requestBody: + required: false + content: + application/json: + schema: + type: object + properties: + config: + oneOf: + - type: string + example: 'http://example.com/path/to/config.json' + title: URL + description: | + An optional path or URI to a new configuration file which + should be loaded after restarting the node. + + The file referenced by the URL must be a [VILLASnode configuration file](#tag/config) + - $ref: '#/components/schemas/Config' + responses: + '200': + description: Success. The instance has been restarted. + content: + application/json: + examples: + example1: + value: + restarts: 5 + config: 'http://example.com/path/to/config.json' + + '400': + description: Failure diff --git a/doc/openapi/paths/shutdown.yaml b/doc/openapi/paths/shutdown.yaml new file mode 100644 index 000000000..da170e100 --- /dev/null +++ b/doc/openapi/paths/shutdown.yaml @@ -0,0 +1,11 @@ +post: + operationId: shutdown + summary: Shutdown the VILLASnode instance. + tags: + - super-node + responses: + '200': + description: Success. The instance has been shut down. + + '400': + description: Failure diff --git a/doc/openapi/paths/status.yaml b/doc/openapi/paths/status.yaml new file mode 100644 index 000000000..6e431efce --- /dev/null +++ b/doc/openapi/paths/status.yaml @@ -0,0 +1,56 @@ +get: + operationId: get-status + summary: Get the current status of the VILLASnode instance. + tags: + - super-node + responses: + '200': + description: Success + content: + application/json: + examples: + example1: + value: + state: running + version: v0.10.0 + release: 1.node_uuid_unique_debug.20201015git335440d + build_id: v0.10.0-335440d-debug + build_date: '20201015' + hostname: ernie + uuid: c9d64cc7-c6e1-4dd4-8873-126318e9d42c + time_now: 1602765814.9240997 + time_started: 1602765814.3103526 + timezone: + name: CEST + offset: -3600 + dst: true + kernel: + sysname: Linux + nodename: ernie + release: 5.6.17-rt10 + version: '#5 SMP Fri Jul 10 14:02:33 CEST 2020' + machine: x86_64 + domainname: (none) + system: + cores_configured: 28 + cores: 28 + processes: 780 + uptime: 1379600 + load: + - 1.66259765625 + - 1.271484375 + - 1.18701171875 + ram: + total: 269994606592 + free: 262204465152 + shared: 44191744 + buffer: 130211840 + swap: + total: 4294963200 + free: 4294963200 + highmem: + total: 0 + free: 0 + + '400': + description: Failure diff --git a/doc/package-lock.json b/doc/package-lock.json new file mode 100644 index 000000000..615921d18 --- /dev/null +++ b/doc/package-lock.json @@ -0,0 +1,1546 @@ +{ + "name": "villasnode-api", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "villasnode-api", + "version": "1.0.0", + "dependencies": { + "@redocly/openapi-cli": "^1.0.0-beta.69" + } + }, + "node_modules/@redocly/ajv": { + "version": "8.6.4", + "resolved": "https://registry.npmjs.org/@redocly/ajv/-/ajv-8.6.4.tgz", + "integrity": "sha512-y9qNj0//tZtWB2jfXNK3BX18BSBp9zNR7KE7lMysVHwbZtY392OJCjm6Rb/h4UHH2r1AqjNEHFD6bRn+DqU9Mw==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@redocly/openapi-cli": { + "version": "1.0.0-beta.69", + "resolved": "https://registry.npmjs.org/@redocly/openapi-cli/-/openapi-cli-1.0.0-beta.69.tgz", + "integrity": "sha512-LVMiIl9A6n1qwwCmfOgl41CO49ULs4baBX5Xmuyi1KiduqIKFi4LWVed2JRe3ACP+QZox+kmfYllrMWvyHZk+Q==", + "dependencies": { + "@redocly/openapi-core": "^1.0.0-beta.69", + "@types/node": "^14.11.8", + "assert-node-version": "^1.0.3", + "chokidar": "^3.5.1", + "colorette": "^1.2.0", + "glob": "^7.1.6", + "glob-promise": "^3.4.0", + "handlebars": "^4.7.6", + "portfinder": "^1.0.26", + "simple-websocket": "^9.0.0", + "yargs": "17.0.1" + }, + "bin": { + "openapi": "bin/cli.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@redocly/openapi-core": { + "version": "1.0.0-beta.69", + "resolved": "https://registry.npmjs.org/@redocly/openapi-core/-/openapi-core-1.0.0-beta.69.tgz", + "integrity": "sha512-A05sPH8U26qQdZgkOQfHrL8dwY3twJ51/PY43WUuRqMdeZEu3SRcIdgLyXaIgR82ZnHC2Y/MnexE5QKtKObYJA==", + "dependencies": { + "@redocly/ajv": "^8.6.4", + "@types/node": "^14.11.8", + "colorette": "^1.2.0", + "js-levenshtein": "^1.1.6", + "js-yaml": "^4.1.0", + "lodash.isequal": "^4.5.0", + "minimatch": "^3.0.4", + "node-fetch": "^2.6.1", + "pluralize": "^8.0.0", + "yaml-ast-parser": "0.0.43" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" + }, + "node_modules/@types/node": { + "version": "14.17.33", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.33.tgz", + "integrity": "sha512-noEeJ06zbn3lOh4gqe2v7NMGS33jrulfNqYFDjjEbhpDEHR5VTxgYNQSBqBlJIsBJW3uEYDgD6kvMnrrhGzq8g==" + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/assert-node-version": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/assert-node-version/-/assert-node-version-1.0.3.tgz", + "integrity": "sha1-yupdG2pY285ZZhII3x4bnkxYD5E=", + "dependencies": { + "expected-node-version": "^1.0.0", + "semver": "^5.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/expected-node-version": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/expected-node-version/-/expected-node-version-1.0.2.tgz", + "integrity": "sha1-uNIlub9nap6H4G29YVtS/J0eOGs=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-promise": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-3.4.0.tgz", + "integrity": "sha512-q08RJ6O+eJn+dVanerAndJwIcumgbDdYiUT7zFQl3Wm1xD6fBKtah7H8ZJChj4wP+8C+QfeVy8xautR7rdmKEw==", + "dependencies": { + "@types/glob": "*" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "glob": "*" + } + }, + "node_modules/handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/js-levenshtein": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", + "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "node_modules/node-fetch": { + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", + "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dependencies": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/simple-websocket": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/simple-websocket/-/simple-websocket-9.1.0.tgz", + "integrity": "sha512-8MJPnjRN6A8UCp1I+H/dSFyjwJhp6wta4hsVRhjf8w9qBHRzxYt14RaOcjvQnhD1N4yKOddEjflwMnQM4VtXjQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "debug": "^4.3.1", + "queue-microtask": "^1.2.2", + "randombytes": "^2.1.0", + "readable-stream": "^3.6.0", + "ws": "^7.4.2" + } + }, + "node_modules/simple-websocket/node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/simple-websocket/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + }, + "node_modules/uglify-js": { + "version": "3.14.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.3.tgz", + "integrity": "sha512-mic3aOdiq01DuSVx0TseaEzMIVqebMZ0Z3vaeDhFEh9bsc24hV1TFvN74reA2vs08D0ZWfNjAcJ3UbVLaBss+g==", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/ws": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", + "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yaml-ast-parser": { + "version": "0.0.43", + "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz", + "integrity": "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==" + }, + "node_modules/yargs": { + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.0.1.tgz", + "integrity": "sha512-xBBulfCc8Y6gLFcrPvtqKz9hz8SO0l1Ni8GgDekvBX2ro0HRQImDGnikfc33cgzcYUSncapnNcZDjVFIH3f6KQ==", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "engines": { + "node": ">=10" + } + } + }, + "dependencies": { + "@redocly/ajv": { + "version": "8.6.4", + "resolved": "https://registry.npmjs.org/@redocly/ajv/-/ajv-8.6.4.tgz", + "integrity": "sha512-y9qNj0//tZtWB2jfXNK3BX18BSBp9zNR7KE7lMysVHwbZtY392OJCjm6Rb/h4UHH2r1AqjNEHFD6bRn+DqU9Mw==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "@redocly/openapi-cli": { + "version": "1.0.0-beta.69", + "resolved": "https://registry.npmjs.org/@redocly/openapi-cli/-/openapi-cli-1.0.0-beta.69.tgz", + "integrity": "sha512-LVMiIl9A6n1qwwCmfOgl41CO49ULs4baBX5Xmuyi1KiduqIKFi4LWVed2JRe3ACP+QZox+kmfYllrMWvyHZk+Q==", + "requires": { + "@redocly/openapi-core": "^1.0.0-beta.69", + "@types/node": "^14.11.8", + "assert-node-version": "^1.0.3", + "chokidar": "^3.5.1", + "colorette": "^1.2.0", + "glob": "^7.1.6", + "glob-promise": "^3.4.0", + "handlebars": "^4.7.6", + "portfinder": "^1.0.26", + "simple-websocket": "^9.0.0", + "yargs": "17.0.1" + } + }, + "@redocly/openapi-core": { + "version": "1.0.0-beta.69", + "resolved": "https://registry.npmjs.org/@redocly/openapi-core/-/openapi-core-1.0.0-beta.69.tgz", + "integrity": "sha512-A05sPH8U26qQdZgkOQfHrL8dwY3twJ51/PY43WUuRqMdeZEu3SRcIdgLyXaIgR82ZnHC2Y/MnexE5QKtKObYJA==", + "requires": { + "@redocly/ajv": "^8.6.4", + "@types/node": "^14.11.8", + "colorette": "^1.2.0", + "js-levenshtein": "^1.1.6", + "js-yaml": "^4.1.0", + "lodash.isequal": "^4.5.0", + "minimatch": "^3.0.4", + "node-fetch": "^2.6.1", + "pluralize": "^8.0.0", + "yaml-ast-parser": "0.0.43" + } + }, + "@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" + }, + "@types/node": { + "version": "14.17.33", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.33.tgz", + "integrity": "sha512-noEeJ06zbn3lOh4gqe2v7NMGS33jrulfNqYFDjjEbhpDEHR5VTxgYNQSBqBlJIsBJW3uEYDgD6kvMnrrhGzq8g==" + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "assert-node-version": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/assert-node-version/-/assert-node-version-1.0.3.tgz", + "integrity": "sha1-yupdG2pY285ZZhII3x4bnkxYD5E=", + "requires": { + "expected-node-version": "^1.0.0", + "semver": "^5.0.3" + } + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "requires": { + "lodash": "^4.17.14" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, + "expected-node-version": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/expected-node-version/-/expected-node-version-1.0.2.tgz", + "integrity": "sha1-uNIlub9nap6H4G29YVtS/J0eOGs=" + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-promise": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-3.4.0.tgz", + "integrity": "sha512-q08RJ6O+eJn+dVanerAndJwIcumgbDdYiUT7zFQl3Wm1xD6fBKtah7H8ZJChj4wP+8C+QfeVy8xautR7rdmKEw==", + "requires": { + "@types/glob": "*" + } + }, + "handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "js-levenshtein": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", + "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==" + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "requires": { + "argparse": "^2.0.1" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "node-fetch": { + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", + "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" + }, + "pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==" + }, + "portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "requires": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "simple-websocket": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/simple-websocket/-/simple-websocket-9.1.0.tgz", + "integrity": "sha512-8MJPnjRN6A8UCp1I+H/dSFyjwJhp6wta4hsVRhjf8w9qBHRzxYt14RaOcjvQnhD1N4yKOddEjflwMnQM4VtXjQ==", + "requires": { + "debug": "^4.3.1", + "queue-microtask": "^1.2.2", + "randombytes": "^2.1.0", + "readable-stream": "^3.6.0", + "ws": "^7.4.2" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + }, + "uglify-js": { + "version": "3.14.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.3.tgz", + "integrity": "sha512-mic3aOdiq01DuSVx0TseaEzMIVqebMZ0Z3vaeDhFEh9bsc24hV1TFvN74reA2vs08D0ZWfNjAcJ3UbVLaBss+g==", + "optional": true + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "requires": { + "punycode": "^2.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "ws": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", + "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", + "requires": {} + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + }, + "yaml-ast-parser": { + "version": "0.0.43", + "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz", + "integrity": "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==" + }, + "yargs": { + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.0.1.tgz", + "integrity": "sha512-xBBulfCc8Y6gLFcrPvtqKz9hz8SO0l1Ni8GgDekvBX2ro0HRQImDGnikfc33cgzcYUSncapnNcZDjVFIH3f6KQ==", + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" + } + } +} diff --git a/doc/package.json b/doc/package.json new file mode 100644 index 000000000..4bbea679b --- /dev/null +++ b/doc/package.json @@ -0,0 +1,13 @@ +{ + "name": "villasnode-api", + "version": "1.0.0", + "dependencies": { + "@redocly/openapi-cli": "^1.0.0-beta.69" + }, + "private": true, + "scripts": { + "start": "openapi preview-docs", + "build": "openapi bundle -o dist", + "test": "openapi lint" + } +} diff --git a/doc/schema/config.yaml b/doc/schema/config.yaml deleted file mode 100644 index ec10f8c41..000000000 --- a/doc/schema/config.yaml +++ /dev/null @@ -1,185 +0,0 @@ ---- -# yaml-language-server: $schema=http://json-schema.org/draft-07/schema - -$schema: 'http://json-schema.org/draft-07/schema' -$id: 'https://villas.fein-aachen.org/config.json' - -type: object -title: VILLASnode configuration file -description: Schema of the VILLASnode configuration file. -default: {} -required: -- nodes -additionalProperties: false - -properties: - - hugepages: - type: integer - title: The hugepages schema - description: An explanation about the purpose of this instance. - default: 0 - examples: - - 0 - - stats: - type: number - - affinity: - type: integer - - priority: - type: integer - - idle_stop: - type: boolean - default: false - - uuid: - type: string - format: uuid - - http: - type: object - title: The http schema - description: An explanation about the purpose of this instance. - default: {} - examples: - - htdocs: /usr/share/villas/node/web - required: - - htdocs - properties: - htdocs: - type: string - title: The htdocs schema - description: An explanation about the purpose of this instance. - default: '' - examples: - - /usr/share/villas/node/web - additionalProperties: true - - logging: - type: object - title: The logging schema - description: An explanation about the purpose of this instance. - default: {} - examples: - - level: info - required: - - level - properties: - level: - type: string - title: The level schema - description: An explanation about the purpose of this instance. - default: '' - examples: - - info - additionalProperties: true - - nodes: - type: object - title: The nodes schema - description: An explanation about the purpose of this instance. - default: {} - patternProperties: - '[a-z0-9_-]{2,32}': - type: object - title: The node schema - description: An explanation about the purpose of this instance. - default: {} - required: - - type - properties: - type: - type: string - title: The type schema - description: An explanation about the purpose of this instance. - default: '' - in: - type: object - properties: - vectorize: - type: integer - minimum: 1 - signals: - oneOf: - - type: string - - type: array - items: - type: object - properties: - name: {} - unit: - type: string - type: - type: string - enum: - - integer - - float - - boolean - - complex - init: - oneOf: - - type: integer - - type: number - - type: boolean - - type: object - required: - - real - - imag - additionalProperties: false - properties: - real: - type: number - imag: - type: number - enabled: - type: boolean - default: true - - type: object - additionalProperties: false - properties: - count: - type: integer - minimum: 1 - type: - type: string - enum: - - integer - - float - - boolean - - complex - out: - type: object - properties: - vectorize: - type: integer - additionalProperties: true - additionalProperties: false - paths: - type: array - title: The paths schema - description: An explanation about the purpose of this instance. - default: [] - additionalItems: false - items: - anyOf: - - type: object - title: The first anyOf schema - description: An explanation about the purpose of this instance. - default: {} - required: - - in - properties: - in: - type: string - title: The in schema - description: An explanation about the purpose of this instance. - default: '' - out: - type: string - title: The out schema - description: An explanation about the purpose of this instance. - default: '' - additionalProperties: true