const FEST_AGENT_STATUS_URL = 'http://localhost:38473/status';
const FEST_AGENT_POLL_MS = 120000;
const FEST_AGENT_TIMEOUT_MS = 3000;
function renderFestAgentStatus(el, status) {
if (!el) {
return;
}
const online = !!(status && status.online);
const endpointId = status && status.endpointId != null ? status.endpointId : null;
if (online && endpointId != null) {
el.innerHTML =
'' +
'FestAgent · #' + endpointId +
'';
return;
}
if (online) {
el.innerHTML =
'' +
'FestAgent attivo';
return;
}
el.innerHTML =
'' +
'FestAgent non raggiungibile';
}
function fetchFestAgentStatus() {
const controller = new AbortController();
const timeoutId = setTimeout(function () {
controller.abort();
}, FEST_AGENT_TIMEOUT_MS);
return fetch(FEST_AGENT_STATUS_URL, {
method: 'GET',
headers: {
Accept: 'application/json',
},
signal: controller.signal,
})
.then(function (response) {
return response.json();
})
.then(function (data) {
return {
online: !!(data && data.ok),
endpointId: data && data.endpoint ? data.endpoint.endpoint_id : null,
};
})
.finally(function () {
clearTimeout(timeoutId);
});
}
function updateLocalFestAgentStatusFooter() {
const el = document.getElementById('status_local_festagent');
if (!el) {
return Promise.resolve(false);
}
return fetchFestAgentStatus()
.then(function (status) {
renderFestAgentStatus(el, status);
return status.online;
})
.catch(function () {
renderFestAgentStatus(el, { online: false, endpointId: null });
return false;
});
}
function startFestAgentStatusWatcher() {
if (!document.getElementById('status_local_festagent')) {
return;
}
updateLocalFestAgentStatusFooter();
if (window.__festAgentStatusInterval) {
clearInterval(window.__festAgentStatusInterval);
}
window.__festAgentStatusInterval = setInterval(updateLocalFestAgentStatusFooter, FEST_AGENT_POLL_MS);
}
function getLocalFestAgentStatus(showNotification) {
return updateLocalFestAgentStatusFooter().then(function (online) {
if (!showNotification || typeof Notyf === 'undefined') {
return online;
}
const notyf = new Notyf({
duration: 3000,
position: { x: 'right', y: 'top' },
});
if (online) {
notyf.success('FestAgent è in esecuzione');
} else {
notyf.error('FestAgent non è in esecuzione su questo PC');
}
return online;
});
}
document.addEventListener('DOMContentLoaded', startFestAgentStatusWatcher);
window.getLocalFestAgentStatus = getLocalFestAgentStatus;
window.updateLocalFestAgentStatusFooter = updateLocalFestAgentStatusFooter;
window.fetchFestAgentStatus = fetchFestAgentStatus;
window.renderFestAgentStatus = renderFestAgentStatus;