DOMAIN
${domainHtml}
+
+ SSL
+ ${sslHtml(site.ssl_configured)}
+
URL
@@ -254,10 +274,11 @@ function renderSiteCard(site) {
}
function updateSummary(sites) {
- const up = sites.filter(s => s.health && s.health.status === 'up').length;
+ const checked = sites.filter(s => s.health && s.health.status !== 'checking');
+ const up = checked.filter(s => s.health.status === 'up').length;
const running = sites.reduce((n, s) => n + (s.containers_running || 0), 0);
const domains = sites.filter(s => s.has_domain).length;
- document.getElementById('ss-up').textContent = up;
+ document.getElementById('ss-up').textContent = checked.length ? up : '—';
document.getElementById('ss-running').textContent = running;
document.getElementById('ss-domains').textContent = domains;
}
@@ -283,16 +304,17 @@ async function loadSites(withHealth = false) {
async function pingSite(siteId) {
const el = document.getElementById('health-' + siteId);
- if (el) el.innerHTML = healthPill({ status: 'checking' }, true);
+ if (el) el.innerHTML = healthPill({ status: 'checking' });
try {
const res = await fetch('/api/sites/' + siteId + '/health');
const health = await res.json();
const site = sitesData.find(s => s.id === siteId);
if (site) site.health = health;
- if (el) el.innerHTML = healthPill(health, site?.container_running);
+ if (el) el.innerHTML = healthPill(health);
updateSummary(sitesData);
} catch (e) {
- if (el) el.innerHTML = healthPill({ status: 'down', error: String(e) }, true);
+ if (el) el.innerHTML = healthPill({ status: 'down', error: String(e) });
+ updateSummary(sitesData);
}
}
@@ -321,6 +343,7 @@ function openSiteDetails(siteId) {
PORT MAPPING
${esc(site.port_mapping || site.port + '→' + site.internal_port)}
DOMAIN
${site.has_domain ? esc(site.domain) : '— (IP only)'}
+ SSL
${site.ssl_configured ? 'Configured' : 'Not configured'}
IP FALLBACK
${esc(site.ip_url)}
HEALTH ENDPOINT
${esc(site.health_url)}
@@ -358,7 +381,7 @@ window.closeSiteModal = closeSiteModal;
document.addEventListener('DOMContentLoaded', () => {
loadSites(true);
- setInterval(() => loadSites(false), 30000);
+ setInterval(() => loadSites(true), 60000);
});
{% endblock %}