diff --git a/docs/deployment-kubernetes-azure.md b/docs/deployment-kubernetes-azure.md index 4aeeb01040c6a22e389467ece64c92d13c6b0869..3d3d5775346902693454c29175ce028f3d897b16 100644 --- a/docs/deployment-kubernetes-azure.md +++ b/docs/deployment-kubernetes-azure.md @@ -49,6 +49,6 @@ in your Kubernetes Cluster). We recommend to create a [Container](https://learn.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction#containers) for the -[Upload Service](/system-services-upload/) to deposit files and mount the BLOB storage +[Upload Service](../system-services-upload) to deposit files and mount the BLOB storage via CSI drivers into the *Deployment*. It greatly increases the available interfaces (see below) for file uploads and provides a highly-available filesystem for the many deployments that need to use the files. diff --git a/docs/deployment-kubernetes-minikube.md b/docs/deployment-kubernetes-minikube.md index 5b8785584e757f91e22ecacb985fe34c0fa7a214..db2d7fcdc83af372f770b9e6fb0bd596abb87b4e 100644 --- a/docs/deployment-kubernetes-minikube.md +++ b/docs/deployment-kubernetes-minikube.md @@ -83,9 +83,9 @@ in the cluster. In our test deployment we obtained a certificate from Let's Encr ### Fileshare -Since the Upload Service uses a shared filesystem with the [Analyst Service](/system-services-analyse/), -[Metadata Service](/system-services-metadata/) and -[Data Database](/system-databases-data/), the dynamic provision of the *PersistentVolume* +Since the Upload Service uses a shared filesystem with the [Analyst Service](../system-services-analyse), +[Metadata Service](../system-services-metadata) and +[Data Database](../system-databases-data), the dynamic provision of the *PersistentVolume* by the *PersistentVolumeClaim* of [`pvc.yaml`](https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-deployment/-/blob/master/charts/dbrepo-core/templates/upload-service/pvc.yaml) needs to happen statically. You can make use of the host's filesystem and mount it in each of those deployments. diff --git a/docs/images/data-ingest.svg b/docs/images/data-ingest.svg new file mode 100644 index 0000000000000000000000000000000000000000..cc0c77f387a523012717d162653d7400a7080146 --- /dev/null +++ b/docs/images/data-ingest.svg @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="447px" height="385px" viewBox="-0.5 -0.5 447 385"><defs/><g><path d="M 259 83 L 259 112 L 258.61 134.63" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><path d="M 258.52 139.88 L 255.14 132.82 L 258.61 134.63 L 262.14 132.94 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 111px; margin-left: 259px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">5672/tcp</div></div></div></foreignObject><text x="259" y="115" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">5672/tcp</text></switch></g><ellipse cx="258.5" cy="7.5" rx="7.5" ry="7.5" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><path d="M 258.5 15 L 258.5 40 M 258.5 20 L 243.5 20 M 258.5 20 L 273.5 20 M 258.5 40 L 243.5 60 M 258.5 40 L 273.5 60" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 67px; margin-left: 259px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: nowrap;"><b>AMQP</b></div></div></div></foreignObject><text x="259" y="79" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">AMQP</text></switch></g><path d="M 258.5 181 L 258.5 216.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 258.5 221.88 L 255 214.88 L 258.5 216.63 L 262 214.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 198px; margin-left: 258px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">5672/tcp</div></div></div></foreignObject><text x="258" y="201" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">5672/tcp</text></switch></g><path d="M 291 181 L 291 203 L 341 203 L 341 290.5 L 379.63 290.5" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 384.88 290.5 L 377.88 294 L 379.63 290.5 L 377.88 287 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 256px; margin-left: 340px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">3306/tcp</div></div></div></foreignObject><text x="340" y="259" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">3306/tcp</text></switch></g><path d="M 226 181 L 226 203 L 175 203 L 175 336.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 175 341.88 L 171.5 334.88 L 175 336.63 L 178.5 334.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 250px; margin-left: 174px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">80/tcp</div></div></div></foreignObject><text x="174" y="254" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">80/tcp</text></switch></g><rect x="193.5" y="141" width="130" height="40" rx="6" ry="6" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 128px; height: 1px; padding-top: 161px; margin-left: 195px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Gateway Service</div></div></div></foreignObject><text x="259" y="165" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Gateway Service</text></switch></g><ellipse cx="410" cy="40.5" rx="7.5" ry="7.5" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><path d="M 410 48 L 410 73 M 410 53 L 395 53 M 410 53 L 425 53 M 410 73 L 395 93 M 410 73 L 425 93" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 100px; margin-left: 410px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: nowrap;"><b>JDBC</b></div></div></div></foreignObject><text x="410" y="112" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">JDBC</text></switch></g><path d="M 330.37 163 L 411 163 L 411 119.37" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><path d="M 325.12 163 L 332.12 159.5 L 330.37 163 L 332.12 166.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 411 114.12 L 414.5 121.12 L 411 119.37 L 407.5 121.12 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 163px; margin-left: 371px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">3306/tcp</div></div></div></foreignObject><text x="371" y="166" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">3306/tcp</text></switch></g><path d="M 91 63 L 28 63 L 28 277 L 48 277" fill="none" stroke="#b3b3b3" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><path d="M 44 281 L 36 273 M 44 273 L 36 281" fill="none" stroke="#b3b3b3" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 148px; margin-left: 28px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;"><font color="#b3b3b3">(not used in<br />the default<br />config)</font></div></div></div></foreignObject><text x="28" y="152" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">(not used in...</text></switch></g><ellipse cx="106" cy="40.5" rx="7.5" ry="7.5" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><path d="M 106 48 L 106 73 M 106 53 L 91 53 M 106 53 L 121 53 M 106 73 L 91 93 M 106 73 L 121 93" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 100px; margin-left: 106px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: nowrap;"><b>API</b></div></div></div></foreignObject><text x="106" y="112" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">API</text></switch></g><path d="M 106 119.37 L 106 163 L 187.63 163" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><path d="M 106 114.12 L 109.5 121.12 L 106 119.37 L 102.5 121.12 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 192.88 163 L 185.88 166.5 L 187.63 163 L 185.88 159.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 163px; margin-left: 141px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">80/tcp</div></div></div></foreignObject><text x="141" y="166" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">80/tcp</text></switch></g><path d="M 386 278 C 386 269.72 399.43 263 416 263 C 423.96 263 431.59 264.58 437.21 267.39 C 442.84 270.21 446 274.02 446 278 L 446 328 C 446 336.28 432.57 343 416 343 C 399.43 343 386 336.28 386 328 Z" fill="#fff2cc" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 446 278 C 446 286.28 432.57 293 416 293 C 399.43 293 386 286.28 386 278" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 58px; height: 1px; padding-top: 316px; margin-left: 387px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">data-db</div></div></div></foreignObject><text x="416" y="320" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">data-db</text></switch></g><path d="M 306.5 303 L 379.63 303" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 384.88 303 L 377.88 306.5 L 379.63 303 L 377.88 299.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 302px; margin-left: 340px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">3306/tcp</div></div></div></foreignObject><text x="340" y="306" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">3306/tcp</text></switch></g><rect x="210.5" y="283" width="96" height="40" rx="6" ry="6" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 94px; height: 1px; padding-top: 303px; margin-left: 211px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Data Service<br />(Spring AMQP)</div></div></div></foreignObject><text x="258" y="307" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Data Service...</text></switch></g><path d="M 258.5 263 L 258.5 276.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 258.5 281.88 L 255 274.88 L 258.5 276.63 L 262 274.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><rect x="210.5" y="223" width="96" height="40" rx="6" ry="6" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 94px; height: 1px; padding-top: 243px; margin-left: 211px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Broker Service<br />(RabbitMQ)</div></div></div></foreignObject><text x="258" y="247" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Broker Service...</text></switch></g><path d="M 223 363 L 341 363 L 341 315.5 L 379.63 315.5" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 384.88 315.5 L 377.88 319 L 379.63 315.5 L 377.88 312 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 363px; margin-left: 291px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">3306/tcp</div></div></div></foreignObject><text x="291" y="367" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">3306/tcp</text></switch></g><rect x="127" y="343" width="96" height="40" rx="6" ry="6" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 94px; height: 1px; padding-top: 363px; margin-left: 128px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Data Service<br />(Spring AMQP)</div></div></div></foreignObject><text x="175" y="367" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Data Service...</text></switch></g><path d="M 96 250.63 L 96 193 L 207.42 193 L 207.41 180.64" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 96 255.88 L 92.5 248.88 L 96 250.63 L 99.5 248.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 215px; margin-left: 98px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">80/tcp</div></div></div></foreignObject><text x="98" y="218" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">80/tcp</text></switch></g><path d="M 96 297 L 96 363 L 120.63 363" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 125.88 363 L 118.88 366.5 L 120.63 363 L 118.88 359.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><rect x="48" y="257" width="96" height="40" rx="6" ry="6" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 94px; height: 1px; padding-top: 277px; margin-left: 49px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Upload Service<br />(TUS)</div></div></div></foreignObject><text x="96" y="281" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Upload Service...</text></switch></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg> \ No newline at end of file diff --git a/docs/system-databases-search.md b/docs/system-databases-search.md index 74eae821e1b79b518f7b51fb1179a483baa966cc..3ad386209d940b949dfc2f9f48fe8e8bd277c300 100644 --- a/docs/system-databases-search.md +++ b/docs/system-databases-search.md @@ -14,12 +14,15 @@ author: Martin Weise ## Overview -It processes search requests from the Gateway Service for full-text lookups in the metadata database. We use -[Elasticsearch](https://www.elastic.co/) in the reference implementation. The search database implements Elastic Search -and creates a retrievable index on all databases that is getting updated with each save operation on databases in the -metadata database. +It processes search requests from the Gateway Service for full-text lookups in +the [Metadata Database](../system-databases-metadata). We use [OpenSearch](https://opensearch.org/) in the default +configuration and create a searchable index on all databases that is updated regularly by +the [Mirror Service](../system-services-mirror). -All requests need to be authenticated, by default the credentials `elastic:elastic` are used. +All requests need to be authenticated, by default the credentials `admin:admin` are used. + +Please see the [Search Database Dashboard](../system-other-search-dashboard) for information how to inspect the Search +Database more efficient. ## Limitations diff --git a/docs/system-other-search-dashboard.md b/docs/system-other-search-dashboard.md new file mode 100644 index 0000000000000000000000000000000000000000..f5f92def353597eb87fbcf362216493cd73ec0bb --- /dev/null +++ b/docs/system-other-search-dashboard.md @@ -0,0 +1,25 @@ +--- +author: Martin Weise +--- + +# Search Database Dashboard + +## tl;dr + +!!! debug "Debug Information" + + * Ports: 5601/tcp + * UI: `http://:5601/` + +## Overview + +It provides a *graphical user interface* (GUI) for an administrator to interact with +the [Search Database](../system-databases-search). + +## Limitations + +(none) + +## Security + +(none) diff --git a/docs/system-other-ui.md b/docs/system-other-ui.md index 216e80713ff650295ba46ee6ab327b4bb03e8061..85faaeb7c1a44410e6329c581190335fc9ed47e4 100644 --- a/docs/system-other-ui.md +++ b/docs/system-other-ui.md @@ -4,15 +4,27 @@ author: Martin Weise # UI +## tl;dr + !!! debug "Debug Information" * Ports: 3000/tcp, 9100/tcp * Prometheus: `http://:9100/metrics` * UI: `http://:3000/` +## Overview + It provides a *graphical user interface* (GUI) for a researcher to interact with the database repository's API. <figure markdown>  <figcaption>Architecture of the UI microservice</figcaption> </figure> + +## Limitations + +(none) + +## Security + +(none) diff --git a/docs/system.md b/docs/system.md index f5eee00b9562d12f4807ef2060d0bddc68479963..c1cc7725842803ad95154238dab2526a455c3d1e 100644 --- a/docs/system.md +++ b/docs/system.md @@ -11,3 +11,9 @@ author: Martin Weise We invite all open-source developers to help us fixing bugs and introducing features to the source code. Get involved by sending a mail to Prof. Andreas Rauber and Projektass. Martin Weise. +## Data Ingest + +<figure markdown> + +<figcaption>Modes of data ingest</figcaption> +</figure> diff --git a/misc/architecture.drawio b/misc/architecture.drawio index fe9e2b023b5e56c41a606eece6cad51c132b02ce..a8d855b79d79e5ed753b2c7cb5025b48fc93601d 100644 --- a/misc/architecture.drawio +++ b/misc/architecture.drawio @@ -1,4 +1,4 @@ -<mxfile host="Electron" modified="2023-10-12T09:52:54.322Z" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/21.1.2 Chrome/106.0.5249.199 Electron/21.4.3 Safari/537.36" etag="0r1qt_yaWFpHhzOEASeC" version="21.1.2" type="device" pages="7"> +<mxfile host="Electron" modified="2023-10-12T12:06:15.344Z" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/21.1.2 Chrome/106.0.5249.199 Electron/21.4.3 Safari/537.36" etag="TZYPGr9GyEHSU3c5VvbN" version="21.1.2" type="device" pages="7"> <diagram id="mvBsv1rP8O80Qe3yGnn_" name="docker-compose"> <mxGraphModel dx="1434" dy="822" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0"> <root> @@ -2404,26 +2404,11 @@ </mxGraphModel> </diagram> <diagram id="e2fuorb2m_XjboQ7R7_y" name="Data Ingest"> - <mxGraphModel dx="717" dy="411" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0"> + <mxGraphModel dx="1195" dy="685" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0"> <root> <mxCell id="0" /> <mxCell id="1" parent="0" /> - <mxCell id="JkB3rZmVi6YrdEwAjtGV-15" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;startArrow=classic;startFill=1;endArrow=none;endFill=0;dashed=1;" edge="1" parent="1" source="JkB3rZmVi6YrdEwAjtGV-17"> - <mxGeometry relative="1" as="geometry"> - <mxPoint x="276" y="203" as="targetPoint" /> - <mxPoint x="157.5" y="384" as="sourcePoint" /> - <Array as="points"> - <mxPoint x="153" y="202" /> - <mxPoint x="276" y="202" /> - </Array> - </mxGeometry> - </mxCell> - <mxCell id="JkB3rZmVi6YrdEwAjtGV-16" value="<u>443</u>/tcp" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="JkB3rZmVi6YrdEwAjtGV-15"> - <mxGeometry x="-0.2154" y="-1" relative="1" as="geometry"> - <mxPoint as="offset" /> - </mxGeometry> - </mxCell> - <mxCell id="0VJCIkSjTVNNat6pGbHc-1" value="<u>5671</u>/tcp<br>5672/tcp" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;strokeColor=#000000;startArrow=classic;startFill=1;dashed=1;" parent="1" target="0VJCIkSjTVNNat6pGbHc-3" edge="1"> + <mxCell id="0VJCIkSjTVNNat6pGbHc-1" value="5672/tcp" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;strokeColor=#000000;startArrow=none;startFill=0;dashed=1;" parent="1" target="0VJCIkSjTVNNat6pGbHc-3" edge="1"> <mxGeometry x="-0.028" relative="1" as="geometry"> <mxPoint x="448" y="220" as="sourcePoint" /> <mxPoint as="offset" /> @@ -2432,7 +2417,7 @@ <mxCell id="0VJCIkSjTVNNat6pGbHc-2" value="<b>AMQP</b>" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" parent="1" vertex="1"> <mxGeometry x="432.5" y="137" width="30" height="60" as="geometry" /> </mxCell> - <mxCell id="0VJCIkSjTVNNat6pGbHc-30" value="<u>5671</u>/tcp<br>5672/tcp" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="0VJCIkSjTVNNat6pGbHc-3" target="0VJCIkSjTVNNat6pGbHc-29" edge="1"> + <mxCell id="0VJCIkSjTVNNat6pGbHc-30" value="5672/tcp" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="0VJCIkSjTVNNat6pGbHc-3" target="0VJCIkSjTVNNat6pGbHc-29" edge="1"> <mxGeometry x="-0.1905" y="-1" relative="1" as="geometry"> <mxPoint as="offset" /> </mxGeometry> @@ -2465,7 +2450,7 @@ <mxPoint as="offset" /> </mxGeometry> </mxCell> - <mxCell id="0VJCIkSjTVNNat6pGbHc-3" value="NGINX Ingress Controller" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1"> + <mxCell id="0VJCIkSjTVNNat6pGbHc-3" value="Gateway Service" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxGeometry x="382.5" y="278" width="130" height="40" as="geometry" /> </mxCell> <mxCell id="0VJCIkSjTVNNat6pGbHc-7" value="<b>JDBC</b>" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" parent="1" vertex="1"> @@ -2478,10 +2463,18 @@ <mxPoint x="600" y="250" as="targetPoint" /> </mxGeometry> </mxCell> + <mxCell id="SPLHNWc1rHttcZ-O3PPf-2" value="<font color="#b3b3b3">(not used in<br>the default<br>config)</font>" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;endArrow=cross;endFill=0;dashed=1;strokeColor=#B3B3B3;" edge="1" parent="1" source="0VJCIkSjTVNNat6pGbHc-9" target="JkB3rZmVi6YrdEwAjtGV-5"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="217" y="200" /> + <mxPoint x="217" y="414" /> + </Array> + </mxGeometry> + </mxCell> <mxCell id="0VJCIkSjTVNNat6pGbHc-9" value="<b>API</b>" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" parent="1" vertex="1"> <mxGeometry x="280" y="170" width="30" height="60" as="geometry" /> </mxCell> - <mxCell id="0VJCIkSjTVNNat6pGbHc-10" value="<u>443</u>/tcp<br>80/tcp" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#000000;startArrow=classic;startFill=1;dashed=1;" parent="1" edge="1"> + <mxCell id="0VJCIkSjTVNNat6pGbHc-10" value="80/tcp" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#000000;startArrow=classic;startFill=1;dashed=1;" parent="1" edge="1"> <mxGeometry x="0.2319" relative="1" as="geometry"> <mxPoint x="295" y="250" as="sourcePoint" /> <mxPoint as="offset" /> @@ -2491,10 +2484,7 @@ </Array> </mxGeometry> </mxCell> - <mxCell id="0VJCIkSjTVNNat6pGbHc-11" value="TLS/SSL secured channels are marked with <u>underline</u>" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" parent="1" vertex="1"> - <mxGeometry x="292.5" y="540" width="310" height="30" as="geometry" /> - </mxCell> - <mxCell id="0VJCIkSjTVNNat6pGbHc-13" value="data-db" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;" parent="1" vertex="1"> + <mxCell id="0VJCIkSjTVNNat6pGbHc-13" value="data-db" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;fillColor=#fff2cc;strokeColor=#000000;" parent="1" vertex="1"> <mxGeometry x="575" y="400" width="60" height="80" as="geometry" /> </mxCell> <mxCell id="0VJCIkSjTVNNat6pGbHc-37" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="0VJCIkSjTVNNat6pGbHc-26" target="0VJCIkSjTVNNat6pGbHc-13" edge="1"> @@ -2530,7 +2520,7 @@ <mxCell id="0VJCIkSjTVNNat6pGbHc-33" value="Data Service<br>(Spring AMQP)" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxGeometry x="316" y="480" width="96" height="40" as="geometry" /> </mxCell> - <mxCell id="JkB3rZmVi6YrdEwAjtGV-6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.107;entryY=0.991;entryDx=0;entryDy=0;entryPerimeter=0;startArrow=classic;startFill=1;endArrow=none;endFill=0;" edge="1" parent="1" source="JkB3rZmVi6YrdEwAjtGV-5" target="0VJCIkSjTVNNat6pGbHc-3"> + <mxCell id="JkB3rZmVi6YrdEwAjtGV-6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.107;entryY=0.991;entryDx=0;entryDy=0;entryPerimeter=0;startArrow=classic;startFill=1;endArrow=none;endFill=0;" parent="1" source="JkB3rZmVi6YrdEwAjtGV-5" target="0VJCIkSjTVNNat6pGbHc-3" edge="1"> <mxGeometry relative="1" as="geometry"> <Array as="points"> <mxPoint x="285" y="330" /> @@ -2538,29 +2528,16 @@ </Array> </mxGeometry> </mxCell> - <mxCell id="JkB3rZmVi6YrdEwAjtGV-7" value="80/tcp" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="JkB3rZmVi6YrdEwAjtGV-6"> + <mxCell id="JkB3rZmVi6YrdEwAjtGV-7" value="80/tcp" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="JkB3rZmVi6YrdEwAjtGV-6" vertex="1" connectable="0"> <mxGeometry x="-0.5492" y="-2" relative="1" as="geometry"> <mxPoint as="offset" /> </mxGeometry> </mxCell> - <mxCell id="JkB3rZmVi6YrdEwAjtGV-14" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="JkB3rZmVi6YrdEwAjtGV-5" target="JkB3rZmVi6YrdEwAjtGV-17"> - <mxGeometry relative="1" as="geometry"> - <mxPoint x="192.5" y="414" as="targetPoint" /> - </mxGeometry> - </mxCell> - <mxCell id="JkB3rZmVi6YrdEwAjtGV-5" value="Upload Service<br>(TUS)" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="237" y="394" width="96" height="40" as="geometry" /> - </mxCell> - <mxCell id="JkB3rZmVi6YrdEwAjtGV-18" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;dashed=1;strokeColor=#B3B3B3;" edge="1" parent="1" source="JkB3rZmVi6YrdEwAjtGV-17" target="0VJCIkSjTVNNat6pGbHc-33"> + <mxCell id="SPLHNWc1rHttcZ-O3PPf-1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="JkB3rZmVi6YrdEwAjtGV-5" target="0VJCIkSjTVNNat6pGbHc-33"> <mxGeometry relative="1" as="geometry" /> </mxCell> - <mxCell id="JkB3rZmVi6YrdEwAjtGV-19" value="PersistentVolumeClaim" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontColor=#B3B3B3;" vertex="1" connectable="0" parent="JkB3rZmVi6YrdEwAjtGV-18"> - <mxGeometry x="0.0766" y="2" relative="1" as="geometry"> - <mxPoint as="offset" /> - </mxGeometry> - </mxCell> - <mxCell id="JkB3rZmVi6YrdEwAjtGV-17" value="Azure BLOB<br>Container" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="1"> - <mxGeometry x="113" y="374" width="80" height="80" as="geometry" /> + <mxCell id="JkB3rZmVi6YrdEwAjtGV-5" value="Upload Service<br>(TUS)" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1"> + <mxGeometry x="237" y="394" width="96" height="40" as="geometry" /> </mxCell> </root> </mxGraphModel> diff --git a/mkdocs.yml b/mkdocs.yml index 3273010e00d29edce8b0f9ca41973fd75c5d0832..7894e3a85f2c8e7abb77609078c16ffc74c42f08 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,7 +1,6 @@ site_name: Database Repository repo_url: https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services repo_name: fda-services -site_url: https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/latest/ site_author: Research Unit Data Science, Technische Universität Wien copyright: CC-BY 4.0 Technische Universität Wien & Universität Wien nav: @@ -30,6 +29,7 @@ nav: - Search Database: system-databases-search.md - Other: - User Interface: system-other-ui.md + - Search Database Dashboard: system-other-search-dashboard.md - Usage: - Overview: usage-overview.md - Authentication Service: usage-auth.md