172 lines
5.7 KiB
HTML
172 lines
5.7 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="de">
|
||
<head>
|
||
<meta charset="UTF-8" />
|
||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||
<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;
|
||
}
|
||
|
||
.msg {
|
||
white-space: pre-wrap;
|
||
}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
<h1>BeWo Serverstatus</h1>
|
||
<p id="jsprobe" style="background:#ffe08a; padding:6px;">JavaScript wird NICHT ausgeführt (Active Scripting blockiert?)</p>
|
||
<script type="text/javascript">
|
||
document.getElementById('jsprobe').innerHTML = 'JavaScript laeuft ✔';
|
||
document.getElementById('jsprobe').style.background = '#c7f0c7';
|
||
</script>
|
||
<p id="error" class="err" style="display:none; white-space:pre-wrap; border:1px solid red; padding:8px; background:#fee;"></p>
|
||
<p>Tenant: <span id="tenant">–</span></p>
|
||
<p>Serverzeit: <span id="time">–</span></p>
|
||
<p>Serverversion: <span id="serverversion">–</span></p>
|
||
<p>Assemblyversion: <span id="assemblyversion">–</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 type="text/javascript">
|
||
// ES5 / IE11-kompatibel: kein fetch, async, Template-Strings, URLSearchParams, Arrow-Funktionen.
|
||
|
||
function getParam(name) {
|
||
var query = window.location.search.substring(1);
|
||
var pairs = query.split('&');
|
||
for (var i = 0; i < pairs.length; i++) {
|
||
var kv = pairs[i].split('=');
|
||
if (decodeURIComponent(kv[0]) === name) {
|
||
return decodeURIComponent((kv[1] || '').replace(/\+/g, ' '));
|
||
}
|
||
}
|
||
return '';
|
||
}
|
||
|
||
function getTenant() {
|
||
return getParam('tenant');
|
||
}
|
||
|
||
function getKey() {
|
||
return getParam('key');
|
||
}
|
||
|
||
function showError(msg) {
|
||
var err = document.getElementById('error');
|
||
err.innerHTML = '';
|
||
err.appendChild(document.createTextNode(msg));
|
||
err.style.display = 'block';
|
||
}
|
||
|
||
function esc(value) {
|
||
var div = document.createElement('div');
|
||
div.appendChild(document.createTextNode(value == null ? '' : value));
|
||
return div.innerHTML;
|
||
}
|
||
|
||
function render(data) {
|
||
document.getElementById('error').style.display = 'none';
|
||
document.getElementById('tenant').innerHTML = getTenant() || '–';
|
||
document.getElementById('time').innerHTML = esc(data.ServerTime);
|
||
document.getElementById('serverversion').innerHTML = esc(data.ServerVersion);
|
||
document.getElementById('assemblyversion').innerHTML = esc(data.AssemblyVersion);
|
||
|
||
var db = document.getElementById('db');
|
||
db.innerHTML = data.DatabaseOk ? '✔ OK' : '✘ Fehler';
|
||
db.className = data.DatabaseOk ? 'ok' : 'err';
|
||
|
||
var services = data.Services || [];
|
||
var rows = '';
|
||
for (var i = 0; i < services.length; i++) {
|
||
var svc = services[i];
|
||
var cls = svc.IsOk ? 'ok' : 'err';
|
||
var symbol = svc.IsOk ? '✔ OK' : '✘ Fehler';
|
||
rows += '<tr>'
|
||
+ '<td>' + esc(svc.Name) + '</td>'
|
||
+ '<td class="' + cls + '">' + symbol + '</td>'
|
||
+ '<td class="msg">' + esc(svc.Message) + '</td>'
|
||
+ '</tr>';
|
||
}
|
||
document.getElementById('services').innerHTML = rows;
|
||
}
|
||
|
||
function load() {
|
||
var tenant = getTenant();
|
||
var url = 'StatusService.svc/Status';
|
||
if (tenant) {
|
||
url += '?Tenant=' + encodeURIComponent(tenant);
|
||
}
|
||
// Cache-Buster: IE cached GET-Anfragen sonst aggressiv.
|
||
url += (url.indexOf('?') >= 0 ? '&' : '?') + '_=' + new Date().getTime();
|
||
|
||
var xhr = new XMLHttpRequest();
|
||
xhr.open('GET', url, true);
|
||
xhr.setRequestHeader('AppStatusApiKey', getKey());
|
||
xhr.onreadystatechange = function () {
|
||
if (xhr.readyState !== 4) {
|
||
return;
|
||
}
|
||
var raw = xhr.responseText;
|
||
var data;
|
||
try {
|
||
data = JSON.parse(raw);
|
||
} catch (e) {
|
||
showError('Keine gueltige JSON-Antwort (HTTP ' + xhr.status + '). Antwort: ' + raw);
|
||
return;
|
||
}
|
||
if ((xhr.status < 200 || xhr.status >= 300) && !data.Services) {
|
||
showError('Fehler vom Server (HTTP ' + xhr.status + '): ' + raw);
|
||
return;
|
||
}
|
||
render(data);
|
||
};
|
||
xhr.onerror = function () {
|
||
showError('Netzwerkfehler beim Aufruf von ' + url);
|
||
};
|
||
xhr.send();
|
||
}
|
||
|
||
load();
|
||
setInterval(load, 30000); // alle 30 Sek. aktualisieren
|
||
</script>
|
||
</body>
|
||
</html> |