uptime/templates/index.html
2023-09-02 18:36:27 +02:00

97 lines
No EOL
2.8 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Uptime</title>
<style>
html {
font-family: Arial, Helvetica, sans-serif;
}
.check-result-bar-container {
display: flex;
flex-direction: column;
width: 800px;
}
/* This is a bit hacky and ensures that the bar doesn't go through the right. */
@media only screen and (max-width: 810px) {
.check-result-bar-container {
width: 100%;
}
}
.check-result-bar {
display: flex;
}
.check-result-bar-labels {
margin-top: 5px;
display: flex;
justify-content: space-between;
}
.check-result {
height: 10px;
width: 100vw; /* It will be squashed. */
}
.check-result-red {
background-color: red;
}
.check-result-orange {
background-color: orange;
}
.check-result-green {
background-color: green;
}
.check-result-unknown {
background-color: grey;
}
</style>
</head>
<body>
<main>
{% for check in status %}
<h2>{{ check.website }}</h2>
<p>Uptime: {{ check.ok_ratio }} ({{ check.count_ok }}/{{ check.total_requests }})</p>
{% if check.last_ok.is_some() %}
<p>Last OK: <span class="utc-timestamp">{{ check.last_ok.as_deref().unwrap() }}</span></p>
{% endif %}
<div class="check-result-bar-container">
<div class="check-result-bar">
{% for result in check.bar_info.elems %}
<div class="check-result {{ result.as_class() }}"></div>
{% endfor %}
</div>
{% if check.bar_info.first_time.is_some() && check.bar_info.last_time.is_some() %}
<div class="check-result-bar-labels">
<span class="utc-timestamp">{{ check.bar_info.first_time.unwrap().render_nicely() }}</span>
<span class="utc-timestamp">{{ check.bar_info.last_time.unwrap().render_nicely() }}</span>
</div>
{% endif %}
</div>
{% endfor %}
</main>
<script>
const timestamps = document.querySelectorAll(".utc-timestamp");
timestamps.forEach((timestamp) => {
const date = new Date(timestamp.innerText);
const formatted = new Intl.DateTimeFormat([], {
dateStyle: "short",
timeStyle: "short"
}).format(date);
timestamp.innerText = formatted;
})
</script>
</body>
</html>