add workspace Cargo.toml and docker-compose.yml and more styles
This commit is contained in:
parent
2577edbf44
commit
44d5a3b57a
6 changed files with 2953 additions and 0 deletions
2822
Cargo.lock
generated
Normal file
2822
Cargo.lock
generated
Normal file
File diff suppressed because it is too large
Load diff
2
Cargo.toml
Normal file
2
Cargo.toml
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
[workspace]
|
||||||
|
members = [ "datafetcher","dataworker"]
|
14
datafetcher/Cargo.toml
Normal file
14
datafetcher/Cargo.toml
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
[package]
|
||||||
|
name = "datafetcher"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
chrono = "0.4.39"
|
||||||
|
maud = { version = "0.26.0", features = ["rocket"] }
|
||||||
|
reqwest = "0.12.12"
|
||||||
|
rocket = "0.5.1"
|
||||||
|
tokio = { version = "1.43.0", features = ["rt-multi-thread", "macros", "time"] }
|
||||||
|
dataworker = { path = "../dataworker" }
|
||||||
|
serde = { version = "1.0.217", features = ["derive"] }
|
||||||
|
serde_json = "1.0.137"
|
5
datafetcher/src/lib.rs
Normal file
5
datafetcher/src/lib.rs
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
use std::time::Duration;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let time_window = Duration::from_secs(3600);
|
||||||
|
}
|
100
datafetcher/src/main.rs
Normal file
100
datafetcher/src/main.rs
Normal file
|
@ -0,0 +1,100 @@
|
||||||
|
#[macro_use]
|
||||||
|
extern crate rocket;
|
||||||
|
use maud::{html, Markup, PreEscaped, DOCTYPE};
|
||||||
|
use rocket::response::stream::{Event, EventStream};
|
||||||
|
use rocket::tokio::time::{interval, Duration};
|
||||||
|
|
||||||
|
struct SsePayload {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#[get("/sse")]
|
||||||
|
async fn sse() -> EventStream![] {
|
||||||
|
EventStream! {
|
||||||
|
let mut interval = interval(Duration::from_secs(2));
|
||||||
|
loop {
|
||||||
|
interval.tick().await;
|
||||||
|
yield Event::data(format!("Updated time: {:?}", chrono::Utc::now()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[get("/")]
|
||||||
|
fn index() -> Markup {
|
||||||
|
html! {
|
||||||
|
(DOCTYPE)
|
||||||
|
html lang="en" {
|
||||||
|
head {
|
||||||
|
meta charset="utf-8";
|
||||||
|
title { "Live Updates with SSE" }
|
||||||
|
style {
|
||||||
|
"body {
|
||||||
|
color: white;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
height: 100vh;
|
||||||
|
background: rgb(34,187,195);
|
||||||
|
background: linear-gradient(0deg, rgba(34,187,195,1) 0%, rgba(102,45,253,1) 100%);
|
||||||
|
font-family: sans-serif;
|
||||||
|
}
|
||||||
|
.glassy {
|
||||||
|
background: rgba(255, 255, 255, 0.2);
|
||||||
|
border-radius: 16px;
|
||||||
|
box-shadow: 0 4px 30px rgba(0, 0, 0, 0.1);
|
||||||
|
backdrop-filter: blur(2.8px);
|
||||||
|
-webkit-backdrop-filter: blur(2.8px);
|
||||||
|
border: 1px solid rgba(255, 255, 255, 0.3);
|
||||||
|
}
|
||||||
|
.data-grid {
|
||||||
|
margin: 2em;
|
||||||
|
padding: 2em;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
border-radius: 18px;
|
||||||
|
}
|
||||||
|
.data-cell {
|
||||||
|
margin: 0.5em 1em;
|
||||||
|
padding: 1em;
|
||||||
|
border-radius: 18px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
"
|
||||||
|
}
|
||||||
|
script {
|
||||||
|
(PreEscaped("const eventSource = new EventSource('/sse');
|
||||||
|
eventSource.onmessage = (event) => {
|
||||||
|
document.getElementById('updates').innerText = event.data;
|
||||||
|
};"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
body style="" {
|
||||||
|
h1 style="align-items: center;" { "willdaten dashboard" }
|
||||||
|
div class="glassy data-grid" {
|
||||||
|
div class="glassy data-cell" {
|
||||||
|
h3 { "Fetcher" }
|
||||||
|
div id="updates" { "Waiting for updates..." }
|
||||||
|
}
|
||||||
|
div class="glassy data-cell" {
|
||||||
|
h3 { "Database" }
|
||||||
|
div id="updates" { "Waiting for updates..." }
|
||||||
|
}
|
||||||
|
div class="glassy data-cell" {
|
||||||
|
h3 { "Statistics" }
|
||||||
|
div id="updates" { "Waiting for updates..." }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[launch]
|
||||||
|
fn rocket() -> _ {
|
||||||
|
rocket::build().mount("/", routes![index, sse])
|
||||||
|
}
|
10
docker-compose.yml
Normal file
10
docker-compose.yml
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
services:
|
||||||
|
|
||||||
|
db:
|
||||||
|
image: postgres
|
||||||
|
restart: always
|
||||||
|
environment:
|
||||||
|
POSTGRES_HOST_AUTH_METHOD: trust
|
||||||
|
POSTGRES_USER: postgres
|
||||||
|
ports:
|
||||||
|
- 5432:5432
|
Loading…
Add table
Reference in a new issue