const sprintf = (...[string, ...args]) => { return string.replace(/{(\d+)}/g, (match, number) => args[number] ?? match); } const getJSON = async url => { const resp = await fetch(url) const json = await resp.json() return json; } const createPopup = async id => { const asics = await getJSON('/api/asictypes') asicoptions = '' asics.forEach(elem => { asicoptions += sprintf('', elem['key'], elem['value']) }) document.querySelector('body').innerHTML += sprintf(popup, id, asicoptions, 'content') } const deletePopup = id => { document.querySelector('#popup-' + id).remove() } const update = async () => { let inner = await getStats() document.querySelector('.grid').innerHTML = inner } const datafn = async () => { // return await getJSON('/api/webinit') } const data = datafn() console.log(data) const cols = 40 const rows = 40 const css = ` ` const header = '
' + '
' + 'Всего устройств: {0}, Предупреждений, {1}, Ошибки: {2}, В сети: {3}, Не в сети: {4}' + '
' + '
' const cell = '
' + '{2}' + '
' const grid = '
' + '{0}' + '
' const popup = '' const getStats = async () => { let cells = '' let info = await getJSON('/curstatus.json') for(let i = 1; i <= cols * rows; i++) { if(info.asics[i]?.status == "ok") cells += sprintf(cell, i, 'green', info.asics[i]?.hashrate) else if(info.asics[i]?.status == "warn") cells += sprintf(cell, i, 'yellow', info.asics[i]?.hashrate) else if(info.asics[i]?.status == "crit") cells += sprintf(cell, i, 'red', info.asics[i]?.hashrate) else if(info.asics[i]?.status == "off") cells += sprintf(cell, i, 'darkred', '') else cells += sprintf(cell, i, '', '') } return cells } const run = async () => { document.querySelector('body').innerHTML += css document.querySelector('body').innerHTML += sprintf(header) let inner = sprintf(grid, await getStats()) document.querySelector('body').innerHTML += inner setInterval(async () => { await update() }, 10000) } run()