mirror of
https://github.com/Noratrieb/uptime.git
synced 2026-01-14 16:45:06 +01:00
Add commit to page
This commit is contained in:
parent
ef0de0124a
commit
1f89aae3de
4 changed files with 115 additions and 75 deletions
2
build.rs
2
build.rs
|
|
@ -23,7 +23,7 @@ fn try_get_commit() -> eyre::Result<String> {
|
||||||
|
|
||||||
let stdout = String::from_utf8(stdout)?;
|
let stdout = String::from_utf8(stdout)?;
|
||||||
|
|
||||||
Ok(stdout.trim().to_owned())
|
Ok(stdout.trim()[0..8].to_owned())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn has_no_changes() -> eyre::Result<bool> {
|
fn has_no_changes() -> eyre::Result<bool> {
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,8 @@ use client::Client;
|
||||||
pub use config::{read_config, Config, WebsiteConfig};
|
pub use config::{read_config, Config, WebsiteConfig};
|
||||||
pub use web::axum_server;
|
pub use web::axum_server;
|
||||||
|
|
||||||
const USER_AGENT: &str = concat!("uptime/", env!("GIT_COMMIT"));
|
const USER_AGENT: &str = concat!("github:Nilstrieb/uptime/", env!("GIT_COMMIT"));
|
||||||
|
const VERSION: &str = env!("GIT_COMMIT");
|
||||||
|
|
||||||
pub async fn check_timer(config: Config, db: Arc<Pool<Sqlite>>) -> Result<ⵑ> {
|
pub async fn check_timer(config: Config, db: Arc<Pool<Sqlite>>) -> Result<ⵑ> {
|
||||||
let req_client = reqwest::Client::builder()
|
let req_client = reqwest::Client::builder()
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,7 @@ async fn render_root(db: Arc<Pool<Sqlite>>) -> Result<String> {
|
||||||
|
|
||||||
let status = compute_status(checks);
|
let status = compute_status(checks);
|
||||||
|
|
||||||
let html = RootTemplate { status }
|
let html = RootTemplate { status, version: crate::VERSION }
|
||||||
.render()
|
.render()
|
||||||
.wrap_err("error rendering template")?;
|
.wrap_err("error rendering template")?;
|
||||||
Ok(html)
|
Ok(html)
|
||||||
|
|
@ -212,4 +212,5 @@ struct WebsiteStatus {
|
||||||
#[template(path = "index.html")]
|
#[template(path = "index.html")]
|
||||||
struct RootTemplate {
|
struct RootTemplate {
|
||||||
status: Vec<WebsiteStatus>,
|
status: Vec<WebsiteStatus>,
|
||||||
|
version: &'static str,
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8" />
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Uptime</title>
|
<title>Uptime</title>
|
||||||
<style>
|
<style>
|
||||||
html {
|
html {
|
||||||
|
|
@ -53,16 +53,31 @@
|
||||||
.check-result-unknown {
|
.check-result-unknown {
|
||||||
background-color: grey;
|
background-color: grey;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.footer {
|
||||||
|
margin-top: 20px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 10px;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<main>
|
<main>
|
||||||
{% for check in status %}
|
{% for check in status %}
|
||||||
|
|
||||||
<h2>{{ check.website }}</h2>
|
<h2>{{ check.website }}</h2>
|
||||||
<p>Uptime: {{ check.ok_ratio }} ({{ check.count_ok }}/{{ check.total_requests }})</p>
|
<p>
|
||||||
|
Uptime: {{ check.ok_ratio }} ({{ check.count_ok }}/{{
|
||||||
|
check.total_requests }})
|
||||||
|
</p>
|
||||||
{% if check.last_ok.is_some() %}
|
{% if check.last_ok.is_some() %}
|
||||||
<p>Last OK: <span class="utc-timestamp">{{ check.last_ok.as_deref().unwrap() }}</span></p>
|
<p>
|
||||||
|
Last OK:
|
||||||
|
<span class="utc-timestamp"
|
||||||
|
>{{ check.last_ok.as_deref().unwrap() }}</span
|
||||||
|
>
|
||||||
|
</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<div class="check-result-bar-container">
|
<div class="check-result-bar-container">
|
||||||
|
|
@ -71,10 +86,15 @@
|
||||||
<div class="check-result {{ result.as_class() }}"></div>
|
<div class="check-result {{ result.as_class() }}"></div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
{% if check.bar_info.first_time.is_some() && check.bar_info.last_time.is_some() %}
|
{% if check.bar_info.first_time.is_some() &&
|
||||||
|
check.bar_info.last_time.is_some() %}
|
||||||
<div class="check-result-bar-labels">
|
<div class="check-result-bar-labels">
|
||||||
<span class="utc-timestamp">{{ check.bar_info.first_time.unwrap().render_nicely() }}</span>
|
<span class="utc-timestamp"
|
||||||
<span class="utc-timestamp">{{ check.bar_info.last_time.unwrap().render_nicely() }}</span>
|
>{{ check.bar_info.first_time.unwrap().render_nicely() }}</span
|
||||||
|
>
|
||||||
|
<span class="utc-timestamp"
|
||||||
|
>{{ check.bar_info.last_time.unwrap().render_nicely() }}</span
|
||||||
|
>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -82,16 +102,34 @@
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
|
<footer class="footer">
|
||||||
|
<span>uptime {{ version }}</span>
|
||||||
|
<a href="https://github.com/Nilstrieb/uptime">
|
||||||
|
<svg
|
||||||
|
viewBox="0 0 16 16"
|
||||||
|
width="32"
|
||||||
|
height="32"
|
||||||
|
aria-labelledby="github-logo-title"
|
||||||
|
>
|
||||||
|
<title id="github-logo-title">GitHub</title>
|
||||||
|
<path
|
||||||
|
fill="black"
|
||||||
|
d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z"
|
||||||
|
></path>
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
</footer>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
const timestamps = document.querySelectorAll(".utc-timestamp");
|
const timestamps = document.querySelectorAll(".utc-timestamp");
|
||||||
timestamps.forEach((timestamp) => {
|
timestamps.forEach((timestamp) => {
|
||||||
const date = new Date(timestamp.innerText);
|
const date = new Date(timestamp.innerText);
|
||||||
const formatted = new Intl.DateTimeFormat([], {
|
const formatted = new Intl.DateTimeFormat([], {
|
||||||
dateStyle: "short",
|
dateStyle: "short",
|
||||||
timeStyle: "short"
|
timeStyle: "short",
|
||||||
}).format(date);
|
}).format(date);
|
||||||
timestamp.innerText = formatted;
|
timestamp.innerText = formatted;
|
||||||
})
|
});
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
Loading…
Add table
Add a link
Reference in a new issue