Skip to content
Snippets Groups Projects
Commit 9f16d285 authored by Martin Weise's avatar Martin Weise
Browse files

Master

parent 515b7b53
No related branches found
No related tags found
2 merge requests!296Dev,!290Master
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
<figure markdown>
![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>
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.
<figure id="fig3" markdown>
![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>
* 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
- [x] Complex views
- [x] System versioning
- [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
## 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
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
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
- [x] High-throughput real-time data import (MQTT)
- [x] Private database
- [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
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.
![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
......
---
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:
endpoints:
metadataService: "${METADATA_SERVICE_ENDPOINT:http://gateway-service}"
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:
accessKeyId: "${S3_ACCESS_KEY_ID:seaweedfsadmin}"
secretAccessKey: "${S3_SECRET_ACCESS_KEY:seaweedfsadmin}"
......
......@@ -113,9 +113,12 @@ export default {
this.loadingContainers = false
})
.catch(({code}) => {
this.loadingContainers = false
const toast = useToastInstance()
if (typeof code !== 'string') {
return
}
toast.error(this.$t(code))
this.loadingContainers = false
})
},
create () {
......@@ -128,9 +131,12 @@ export default {
this.loading = false
})
.catch(({code}) => {
this.loading = false
const toast = useToastInstance()
if (typeof code !== 'string') {
return
}
toast.error(this.$t(code))
this.loading = false
})
},
notEmpty
......
......@@ -1362,9 +1362,12 @@ export default {
this.loadingSave = false
})
.catch(({code}) => {
this.loadingSave = false
const toast = useToastInstance()
if (typeof code !== 'string') {
return
}
toast.error(this.$t(code))
this.loadingSave = false
})
.finally(() => {
this.loadingSave = false
......@@ -1384,9 +1387,12 @@ export default {
this.loadingSave = false
})
.catch(({code}) => {
this.loadingSave = false
const toast = useToastInstance()
if (typeof code !== 'string') {
return
}
toast.error(this.$t(code))
this.loadingSave = false
})
.finally(() => {
this.loadingSave = false
......
......@@ -509,9 +509,12 @@ export default {
this.loadingQuery = false
})
.catch(({code}) => {
this.loadingQuery = false
const toast = useToastInstance()
if (typeof code !== 'string') {
return
}
toast.error(this.$t(code))
this.loadingQuery = false
})
},
createView () {
......@@ -528,9 +531,12 @@ export default {
this.loadingQuery = false
})
.catch(({code}) => {
this.loadingQuery = false
const toast = useToastInstance()
if (typeof code !== 'string') {
return
}
toast.error(this.$t(code))
this.loadingQuery = false
})
},
buildQuery () {
......
......@@ -95,9 +95,12 @@ export default {
this.loadingExecute = false
})
.catch(({code}) => {
this.loadingExecute = false
const toast = useToastInstance()
if (typeof code !== 'string') {
return
}
toast.error(this.$t(code))
this.loadingExecute = false
})
.finally(() => {
this.loadingExecute = false
......@@ -111,9 +114,12 @@ export default {
this.loadingExecute = false
})
.catch(({code}) => {
this.loadingExecute = false
const toast = useToastInstance()
if (typeof code !== 'string') {
return
}
toast.error(this.$t(code))
this.loadingExecute = false
})
.finally(() => {
this.loadingExecute = false
......@@ -133,9 +139,12 @@ export default {
this.loadingCount = false
})
.catch(({code}) => {
this.loadingCount = false
const toast = useToastInstance()
if (typeof code !== 'string') {
return
}
toast.error(this.$t(code))
this.loadingCount = false
})
.finally(() => {
this.loadingCount = false
......@@ -148,9 +157,12 @@ export default {
this.loadingCount = false
})
.catch(({code}) => {
this.loadingCount = false
const toast = useToastInstance()
if (typeof code !== 'string') {
return
}
toast.error(this.$t(code))
this.loadingCount = false
})
.finally(() => {
this.loadingCount = false
......
......@@ -81,9 +81,12 @@ export default {
this.queries = queries
})
.catch(({code}) => {
this.loadingSubsets = false
const toast = useToastInstance()
if (typeof code !== 'string') {
return
}
toast.error(this.$t(code))
this.loadingSubsets = false
})
.finally(() => {
this.loadingSubsets = false
......
......@@ -41,6 +41,9 @@ export default {
})
.catch(({code}) => {
const toast = useToastInstance()
if (typeof code !== 'string') {
return
}
toast.error(this.$t(code))
})
}
......
......@@ -471,9 +471,12 @@ export default {
this.loading = false
})
.catch(({code}) => {
this.loading = false
const toast = useToastInstance()
if (typeof code !== 'string') {
return
}
toast.error(this.$t(code))
this.loading = false
})
}
}
......
......@@ -129,6 +129,9 @@ export default {
})
.catch(({code, message}) => {
const toast = useToastInstance()
if (typeof code !== 'string' || typeof message !== 'string') {
return
}
toast.error(this.$t(code) + ": " + message)
})
.finally(() => {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment