2026-03-31 11:23:29 +02:00
|
|
|
|
<!DOCTYPE html>
|
|
|
|
|
|
<html lang="de">
|
2026-03-30 13:06:03 +02:00
|
|
|
|
<head>
|
2026-03-31 11:23:29 +02:00
|
|
|
|
<meta charset="UTF-8" />
|
|
|
|
|
|
<title>BeWo – Serverstatus</title>
|
|
|
|
|
|
<style>
|
|
|
|
|
|
body {
|
|
|
|
|
|
font-family: sans-serif;
|
|
|
|
|
|
padding: 2rem;
|
|
|
|
|
|
background: #f5f5f5;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
h1 {
|
|
|
|
|
|
color: #333;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.ok {
|
|
|
|
|
|
color: green;
|
|
|
|
|
|
font-weight: bold;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.err {
|
|
|
|
|
|
color: red;
|
|
|
|
|
|
font-weight: bold;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
table {
|
|
|
|
|
|
border-collapse: collapse;
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
max-width: 600px;
|
|
|
|
|
|
margin-top: 1rem;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
td, th {
|
|
|
|
|
|
border: 1px solid #ccc;
|
|
|
|
|
|
padding: 8px 12px;
|
|
|
|
|
|
text-align: left;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
th {
|
|
|
|
|
|
background: #eee;
|
|
|
|
|
|
}
|
|
|
|
|
|
</style>
|
2026-03-30 13:06:03 +02:00
|
|
|
|
</head>
|
|
|
|
|
|
<body>
|
2026-03-31 11:23:29 +02:00
|
|
|
|
<h1>BeWo Serverstatus</h1>
|
|
|
|
|
|
<p>Tenant: <span id="tenant">–</span></p>
|
|
|
|
|
|
<p>Serverzeit: <span id="time">–</span></p>
|
|
|
|
|
|
<p>Version: <span id="version">–</span></p>
|
|
|
|
|
|
<p>Datenbank: <span id="db">–</span></p>
|
|
|
|
|
|
|
|
|
|
|
|
<h2>Services</h2>
|
|
|
|
|
|
<table>
|
|
|
|
|
|
<thead><tr><th>Service</th><th>Status</th><th>Meldung</th></tr></thead>
|
|
|
|
|
|
<tbody id="services"></tbody>
|
|
|
|
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
<script>
|
|
|
|
|
|
function getTenant() {
|
|
|
|
|
|
const params = new URLSearchParams(window.location.search);
|
|
|
|
|
|
return params.get('Tenant') || '';
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
async function load() {
|
|
|
|
|
|
const tenant = getTenant();
|
|
|
|
|
|
const url = tenant
|
|
|
|
|
|
? `StatusService.svc/Status?Tenant=${encodeURIComponent(tenant)}`
|
|
|
|
|
|
: 'StatusService.svc/Status';
|
|
|
|
|
|
|
|
|
|
|
|
const res = await fetch(url);
|
|
|
|
|
|
const data = await res.json();
|
|
|
|
|
|
|
|
|
|
|
|
document.getElementById('tenant').textContent = data.Tenant || '–';
|
|
|
|
|
|
document.getElementById('time').textContent = data.ServerTime;
|
|
|
|
|
|
document.getElementById('version').textContent = data.Version;
|
|
|
|
|
|
|
|
|
|
|
|
const db = document.getElementById('db');
|
|
|
|
|
|
db.textContent = data.DatabaseOk ? '✔ OK' : '✘ Fehler';
|
|
|
|
|
|
db.className = data.DatabaseOk ? 'ok' : 'err';
|
|
|
|
|
|
|
|
|
|
|
|
const tbody = document.getElementById('services');
|
|
|
|
|
|
tbody.innerHTML = '';
|
|
|
|
|
|
for (const svc of data.Services) {
|
|
|
|
|
|
const cls = svc.IsOk ? 'ok' : 'err';
|
|
|
|
|
|
tbody.innerHTML += `
|
|
|
|
|
|
<tr>
|
|
|
|
|
|
<td>${svc.Name}</td>
|
|
|
|
|
|
<td class="${cls}">${svc.IsOk ? '✔ OK' : '✘ Fehler'}</td>
|
|
|
|
|
|
<td>${svc.Message}</td>
|
|
|
|
|
|
</tr>`;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
load();
|
|
|
|
|
|
setInterval(load, 30000); // alle 30 Sek. aktualisieren</script>
|
2026-03-30 13:06:03 +02:00
|
|
|
|
</body>
|
2026-03-31 11:23:29 +02:00
|
|
|
|
</html>
|