Skip to content
Snippets Groups Projects
Verified Commit 4e25b93b authored by Martin Weise's avatar Martin Weise
Browse files

Added some examples

parent 363c8cac
No related branches found
No related tags found
3 merge requests!296Dev,!293Dev,!289Dev
Showing
with 133 additions and 20 deletions
...@@ -17,7 +17,7 @@ image as well, in this example we want to mount a custom logo `my_logo.png` into ...@@ -17,7 +17,7 @@ image as well, in this example we want to mount a custom logo `my_logo.png` into
<figure markdown> <figure markdown>
![Architecture of the UI microservice](../images/screenshots/ui-config-step-1.png){ .img-border } ![Architecture of the UI microservice](../images/screenshots/ui-config-step-1.png){ .img-border }
<figcaption>Figure 2: Architecture of the UI microservice</figcaption> <figcaption>Figure 1: Architecture of the UI microservice</figcaption>
</figure> </figure>
Text values like the version :material-numeric-2-circle-outline: and title :material-numeric-3-circle-outline: can be Text values like the version :material-numeric-2-circle-outline: and title :material-numeric-3-circle-outline: can be
...@@ -48,7 +48,7 @@ User Interface on development. ...@@ -48,7 +48,7 @@ User Interface on development.
<figure id="fig3" markdown> <figure id="fig3" markdown>
![Architecture of the UI microservice](../images/architecture-ui.svg) ![Architecture of the UI microservice](../images/architecture-ui.svg)
<figcaption>Figure 3: Architecture of the User Interface</figcaption> <figcaption>Figure 2: Architecture of the User Interface</figcaption>
</figure> </figure>
* Runtime: [Bun 1+](https://bun.sh/) (preferred), *alternatively* Node.js 18+ * Runtime: [Bun 1+](https://bun.sh/) (preferred), *alternatively* Node.js 18+
......
...@@ -44,3 +44,9 @@ simple query to the `information_schema` that is maintained by the database engi ...@@ -44,3 +44,9 @@ simple query to the `information_schema` that is maintained by the database engi
- [x] Complex views - [x] Complex views
- [x] System versioning - [x] System versioning
- [x] Subset exploration - [x] Subset exploration
## Acknowledgement
This work was part of a cooperation with the [Institute of Water Quality and Resource Management](https://www.tuwien.at/cee/iwr).
<img src="../../images/logos/iwr.png" width=100 />
\ No newline at end of file
...@@ -4,18 +4,33 @@ author: Martin Weise ...@@ -4,18 +4,33 @@ author: Martin Weise
## tl;dr ## tl;dr
tbd [:fontawesome-solid-database: &nbsp;Dataset](https://dbrepo1.ec.tuwien.ac.at/database/18/info){ .md-button .md-button--primary target="_blank" }
## Description ## Description
TBD The [Pilotfabrik]() of TU Wien is monitored for energy-efficiency and productivity of machinery. In principle, certain
conditions/parameters are observed such as: electric rate of energy transfer, transmission of cooling liquid,
transmission of compressed air, acceleration, forces at work and temperatures to research on preventive/predictive
maintenance, quality of products and ultimately process efficiency and -productivity.
<figure markdown>
![](../../images/screenshots/power.png)
<figcaption>Figure 1: aaaa from <a href="https://publik.tuwien.ac.at/files/PubDat_252294.pdf">Hacksteiner (2016)</a>.</figcaption>
</figure>
## Solution ## Solution
TBD We connected our [Broker Service](../../api/broker-service) with the MQTT broker of the Pilotfabrik using a self-written
connector service, bridging the two different protocols. The tuples are ingested into DBRepo at a rate of about 10/s.
## DBRepo Features ## DBRepo Features
- [x] High-throughput real-time data import (MQTT) - [x] High-throughput real-time data import (MQTT)
- [x] Private database - [x] Private database
- [x] Public embargoed data view - [x] Public embargoed data view
## Acknowledgement
This work was part of a cooperation with the [Institute of Production Engineering and Photonic Technologies](http://ift.at/).
<img src="../../images/logos/ift.jpeg" width=100 />
...@@ -18,7 +18,10 @@ and tram schedules, subway routes, ticketing details, and real-time updates on v ...@@ -18,7 +18,10 @@ and tram schedules, subway routes, ticketing details, and real-time updates on v
We wrote an algorithm that parses open data (available) information from Wiener Linien, Vienna's public transportation We wrote an algorithm that parses open data (available) information from Wiener Linien, Vienna's public transportation
agency directly and feeds it, after some cleaning, into DBRepo on a 5-minute interval. agency directly and feeds it, after some cleaning, into DBRepo on a 5-minute interval.
![Subway Transportation Data Dashboard](images/screenshots/transportation-dashboard.png) <figure markdown>
![Subway Transportation Data Dashboard](../../images/screenshots/transportation-dashboard.png)
<caption>Figure 1: Dashboard visualizing the live data of the current interruptions.</caption>
</figure>
## DBRepo Features ## DBRepo Features
......
---
author: Martin Weise
---
## tl;dr
[:fontawesome-solid-database: &nbsp;Dataset](https://dbrepo1.ec.tuwien.ac.at/database/27/info){ .md-button .md-button--primary target="_blank" }
[:simple-jupyter: &nbsp;Notebook](https://binder.science.datalab.tuwien.ac.at/v2/git/https%3A%2F%2Fgitlab.tuwien.ac.at%2Ffairdata%2Fxps/HEAD){ .md-button .md-button--secondary target="_blank" }
## Description
X-ray Photoelectron Spectroscopy (XPS) is one of the most used methods in material sciences. Irradiation of solid
materials with X-ray radiation kicks out electrons from atoms that are near the atomic nucleus. With XPS data being
highly reproducible once machine parameters are known and understood, the demand for creating a comprehensive database
connecting material properties to compositions via XPS spectra becomes evident.
## Solution
We read XPS data from the VAMAS-encoded format and inserted it into a
[database schema](https://gitlab.tuwien.ac.at/fairdata/xps/-/blob/e17860399b1b109c72b01888766f37193dde5870/sql/create_schema.sql)
that captures the VAMAS-schema. It can then be read using the [Python Library](../../api/python).
<figure markdown>
![Jupyter Notebook](../../images/screenshots/xps-jupyter.png){ .img-border }
<figcaption>Figure 1: Jupyter Notebook accessing data on DBRepo using the Python Library.</figcaption>
</figure>
Using the DataFrame representation of the Python Library and the [`plotly`](https://pypi.org/project/plotly/) library,
we can visualize the ordinate values directly in the Jupyter Notebook.
<figure markdown>
![Three charts displaying surface analysis data of C, O and Su](../../images/screenshots/xps-chart.png){ .img-border }
<figcaption>Figure 2: Plot of ordinate values encoded within the experiment block.</figcaption>
</figure>
## DBRepo Features
- [x] Data preservation of VAMAS-encoded XPS data
- [x] Subset exploration
- [x] External visualization of the database
- [x] Replication of experiments using only open-source software
## Acknowledgement
This work was part of a cooperation with the [Institute of Applied Physics](http://www.iap.tuwien.ac.at/).
<img src="../../images/logos/iap.jpeg" width=100 />
\ No newline at end of file
.docs/images/logos/iap.jpeg

6.07 KiB

.docs/images/logos/ift.jpeg

8.1 KiB

.docs/images/logos/iwr.png

5.73 KiB

.docs/images/screenshots/power.png

367 KiB

.docs/images/screenshots/xps-chart.png

113 KiB

.docs/images/screenshots/xps-jupyter.png

98.3 KiB

...@@ -52,7 +52,7 @@ dbrepo: ...@@ -52,7 +52,7 @@ dbrepo:
endpoints: endpoints:
metadataService: "${METADATA_SERVICE_ENDPOINT:http://gateway-service}" metadataService: "${METADATA_SERVICE_ENDPOINT:http://gateway-service}"
storageService: "${S3_ENDPOINT:http://gateway-service/api/storage}" storageService: "${S3_ENDPOINT:http://gateway-service/api/storage}"
authService: "${AUTH_SERVICE_HOST:http://gateway-service/api/auth}" authService: "${AUTH_SERVICE_ENDPOINT:http://gateway-service/api/auth}"
s3: s3:
accessKeyId: "${S3_ACCESS_KEY_ID:seaweedfsadmin}" accessKeyId: "${S3_ACCESS_KEY_ID:seaweedfsadmin}"
secretAccessKey: "${S3_SECRET_ACCESS_KEY:seaweedfsadmin}" secretAccessKey: "${S3_SECRET_ACCESS_KEY:seaweedfsadmin}"
......
...@@ -113,9 +113,12 @@ export default { ...@@ -113,9 +113,12 @@ export default {
this.loadingContainers = false this.loadingContainers = false
}) })
.catch(({code}) => { .catch(({code}) => {
this.loadingContainers = false
const toast = useToastInstance() const toast = useToastInstance()
if (typeof code !== 'string') {
return
}
toast.error(this.$t(code)) toast.error(this.$t(code))
this.loadingContainers = false
}) })
}, },
create () { create () {
...@@ -128,9 +131,12 @@ export default { ...@@ -128,9 +131,12 @@ export default {
this.loading = false this.loading = false
}) })
.catch(({code}) => { .catch(({code}) => {
this.loading = false
const toast = useToastInstance() const toast = useToastInstance()
if (typeof code !== 'string') {
return
}
toast.error(this.$t(code)) toast.error(this.$t(code))
this.loading = false
}) })
}, },
notEmpty notEmpty
......
...@@ -1362,9 +1362,12 @@ export default { ...@@ -1362,9 +1362,12 @@ export default {
this.loadingSave = false this.loadingSave = false
}) })
.catch(({code}) => { .catch(({code}) => {
this.loadingSave = false
const toast = useToastInstance() const toast = useToastInstance()
if (typeof code !== 'string') {
return
}
toast.error(this.$t(code)) toast.error(this.$t(code))
this.loadingSave = false
}) })
.finally(() => { .finally(() => {
this.loadingSave = false this.loadingSave = false
...@@ -1384,9 +1387,12 @@ export default { ...@@ -1384,9 +1387,12 @@ export default {
this.loadingSave = false this.loadingSave = false
}) })
.catch(({code}) => { .catch(({code}) => {
this.loadingSave = false
const toast = useToastInstance() const toast = useToastInstance()
if (typeof code !== 'string') {
return
}
toast.error(this.$t(code)) toast.error(this.$t(code))
this.loadingSave = false
}) })
.finally(() => { .finally(() => {
this.loadingSave = false this.loadingSave = false
......
...@@ -509,9 +509,12 @@ export default { ...@@ -509,9 +509,12 @@ export default {
this.loadingQuery = false this.loadingQuery = false
}) })
.catch(({code}) => { .catch(({code}) => {
this.loadingQuery = false
const toast = useToastInstance() const toast = useToastInstance()
if (typeof code !== 'string') {
return
}
toast.error(this.$t(code)) toast.error(this.$t(code))
this.loadingQuery = false
}) })
}, },
createView () { createView () {
...@@ -528,9 +531,12 @@ export default { ...@@ -528,9 +531,12 @@ export default {
this.loadingQuery = false this.loadingQuery = false
}) })
.catch(({code}) => { .catch(({code}) => {
this.loadingQuery = false
const toast = useToastInstance() const toast = useToastInstance()
if (typeof code !== 'string') {
return
}
toast.error(this.$t(code)) toast.error(this.$t(code))
this.loadingQuery = false
}) })
}, },
buildQuery () { buildQuery () {
......
...@@ -95,9 +95,12 @@ export default { ...@@ -95,9 +95,12 @@ export default {
this.loadingExecute = false this.loadingExecute = false
}) })
.catch(({code}) => { .catch(({code}) => {
this.loadingExecute = false
const toast = useToastInstance() const toast = useToastInstance()
if (typeof code !== 'string') {
return
}
toast.error(this.$t(code)) toast.error(this.$t(code))
this.loadingExecute = false
}) })
.finally(() => { .finally(() => {
this.loadingExecute = false this.loadingExecute = false
...@@ -111,9 +114,12 @@ export default { ...@@ -111,9 +114,12 @@ export default {
this.loadingExecute = false this.loadingExecute = false
}) })
.catch(({code}) => { .catch(({code}) => {
this.loadingExecute = false
const toast = useToastInstance() const toast = useToastInstance()
if (typeof code !== 'string') {
return
}
toast.error(this.$t(code)) toast.error(this.$t(code))
this.loadingExecute = false
}) })
.finally(() => { .finally(() => {
this.loadingExecute = false this.loadingExecute = false
...@@ -133,9 +139,12 @@ export default { ...@@ -133,9 +139,12 @@ export default {
this.loadingCount = false this.loadingCount = false
}) })
.catch(({code}) => { .catch(({code}) => {
this.loadingCount = false
const toast = useToastInstance() const toast = useToastInstance()
if (typeof code !== 'string') {
return
}
toast.error(this.$t(code)) toast.error(this.$t(code))
this.loadingCount = false
}) })
.finally(() => { .finally(() => {
this.loadingCount = false this.loadingCount = false
...@@ -148,9 +157,12 @@ export default { ...@@ -148,9 +157,12 @@ export default {
this.loadingCount = false this.loadingCount = false
}) })
.catch(({code}) => { .catch(({code}) => {
this.loadingCount = false
const toast = useToastInstance() const toast = useToastInstance()
if (typeof code !== 'string') {
return
}
toast.error(this.$t(code)) toast.error(this.$t(code))
this.loadingCount = false
}) })
.finally(() => { .finally(() => {
this.loadingCount = false this.loadingCount = false
......
...@@ -81,9 +81,12 @@ export default { ...@@ -81,9 +81,12 @@ export default {
this.queries = queries this.queries = queries
}) })
.catch(({code}) => { .catch(({code}) => {
this.loadingSubsets = false
const toast = useToastInstance() const toast = useToastInstance()
if (typeof code !== 'string') {
return
}
toast.error(this.$t(code)) toast.error(this.$t(code))
this.loadingSubsets = false
}) })
.finally(() => { .finally(() => {
this.loadingSubsets = false this.loadingSubsets = false
......
...@@ -41,6 +41,9 @@ export default { ...@@ -41,6 +41,9 @@ export default {
}) })
.catch(({code}) => { .catch(({code}) => {
const toast = useToastInstance() const toast = useToastInstance()
if (typeof code !== 'string') {
return
}
toast.error(this.$t(code)) toast.error(this.$t(code))
}) })
} }
......
...@@ -471,9 +471,12 @@ export default { ...@@ -471,9 +471,12 @@ export default {
this.loading = false this.loading = false
}) })
.catch(({code}) => { .catch(({code}) => {
this.loading = false
const toast = useToastInstance() const toast = useToastInstance()
if (typeof code !== 'string') {
return
}
toast.error(this.$t(code)) toast.error(this.$t(code))
this.loading = false
}) })
} }
} }
......
...@@ -129,6 +129,9 @@ export default { ...@@ -129,6 +129,9 @@ export default {
}) })
.catch(({code, message}) => { .catch(({code, message}) => {
const toast = useToastInstance() const toast = useToastInstance()
if (typeof code !== 'string' || typeof message !== 'string') {
return
}
toast.error(this.$t(code) + ": " + message) toast.error(this.$t(code) + ": " + message)
}) })
.finally(() => { .finally(() => {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment