const getModel = () => { const cp = opts?.sd_model_checkpoint || ''; if (!cp) return 'unknown model'; const noBracket = cp.replace(/\s*\[.*\]\s*$/, ''); // remove trailing [hash] const parts = noBracket.split(/[\\/]/); // split on / or \ return parts[parts.length - 1].trim() || 'unknown model'; }; async function updateIndicator(online, data, msg) { const el = document.getElementById('logo_nav'); if (!el || !data) return; const status = online ? 'online' : 'offline'; const date = new Date(); const template = ` Version: ${data.updated}
Commit: ${data.commit}
Branch: ${data.branch}
Status: ${status}
Model: ${getModel()}
Since: ${date.toLocaleString()}
`; if (online) { el.dataset.hint = template; el.style.backgroundColor = 'var(--sd-main-accent-color)'; log('monitorConnection: online', data); } else { el.dataset.hint = template; el.style.backgroundColor = 'var(--color-error)'; log('monitorConnection: offline', msg); } } async function monitorConnection() { try { const res = await authFetch(`${window.api}/version`); const data = await res.json(); const url = res.url.split('/sdapi')[0].replace('http', 'ws'); // update global url as ws need fqdn const ws = new WebSocket(`${url}/queue/join`); ws.onopen = () => updateIndicator(true, data, ''); ws.onclose = () => updateIndicator(false, data, ''); ws.onerror = (e) => updateIndicator(false, data, e.message); ws.onmessage = (evt) => log('monitorConnection: message', evt.data); } catch { /**/ } }