/* startup, load groups from database */ var groupIds = []; var groupZones = []; async function loadAlarms(groupId) { let data; try { const res = await fetch('http://localhost:9050/api/slr?id=' + groupId); data = await res.json(); updateData(data, groupId); } catch(error) { console.error(error); } } function updateData(data, groupId) { var table = document.getElementById('table-' + groupId); for (var i = 0; i < data.length; i++) { let row_id = "row_" + groupId + "_" + data[i].MMSI; row = document.getElementById(row_id); if(row == null) { // not found, create new row row = document.createElement('tr'); row.setAttribute("id", row_id); // add leading cells var td1 = document.createElement('td'); //td1.innerHTML = data[i].Name; row.appendChild(td1); var td2 = document.createElement('td'); row.appendChild(td2); var td3 = document.createElement('td'); // td3.innerHTML = data[i].IMO; row.appendChild(td3); // create dummy cells for each zone for(var j = 0; j < groupZones[groupId].length; j++) { var td = document.createElement('td'); td.id = "cell_" + groupId + "_" + groupZones[groupId][j] + "_" + data[i].MMSI; row.appendChild(td); } // add trailing cells var td4 = document.createElement('td'); //td4.innerHTML = data[i].NavStatus; row.appendChild(td4); var td5 = document.createElement('td'); //td5.innerHTML = data[i].MMSI; row.appendChild(td5); var td6 = document.createElement('td'); //td6.innerHTML = data[i].Destination; row.appendChild(td6); table.childNodes[1].appendChild(row); // append row to tbody subelement } const colCount = row.childNodes.length; row.childNodes[0].innerHTML = data[i].Name; // TODO: incoming/outgoing symbol row.childNodes[2].innerHTML = data[i].IMO; // find alarm cell and set value let cellId = "cell_" + groupId + "_" + data[i].MonitorZoneId + "_" + data[i].MMSI; var cell = document.getElementById(cellId); if(cell != null) { const timestamp = Date.parse(data[i].Timestamp_First); const d = new Date(timestamp); cell.innerHTML = ("0" + d.getHours()).slice(-2) + ":" + ("0" + d.getMinutes()).slice(-2) + " " + d.getDate() + "." + (d.getMonth() + 1) + "." + ("" + d.getFullYear()).slice(-2); } row.childNodes[colCount - 3].innerHTML = data[i].NavStatus; row.childNodes[colCount - 2].innerHTML = data[i].MMSI; row.childNodes[colCount - 1].innerHTML = data[i].Destination; } // TODO: remove rows (after an interval) that are not in the result set any more } function update() { for(var i = 0; i < groupIds.length; i++) { loadAlarms(groupIds[i]); } } function createAreas() { fetch('http://localhost:9050/api/zones') .then(function (response) { return response.json(); }) .then(function (data) { createAreasFromData(data); }) .catch(function (err) { console.log('error: ' + err); }); function createAreasFromData(data) { var root_div = document.getElementById('root-div'); for (var i = 0; i < data.length; i++) { groupIds.push(data[i].Id); groupZones[data[i].Id] = []; var aDiv = document.createElement('div'); aDiv.className = ''; aDiv.id = 'group-' + data[i].Id; aDiv.innerHTML = data[i].Name; root_div.appendChild(aDiv); // create table header with zones var aTable = document.createElement('table'); aTable.id = 'table-' + data[i].Id; aTable.className = "styled-table"; var thead = document.createElement('thead'); aTable.appendChild(thead); var tr = document.createElement('tr'); thead.appendChild(tr); var th1 = document.createElement('th'); th1.innerHTML='Name'; tr.appendChild(th1); var th2 = document.createElement('th'); th2.innerHTML='E/A'; tr.appendChild(th2); var th3 = document.createElement('th'); th3.innerHTML='IMO'; tr.appendChild(th3); for(var j = 0; j < data[i].Zones.length; j++) { groupZones[data[i].Id].push(data[i].Zones[j].Id); var aTH = document.createElement('th'); aTH.id = 'zone-' + data[i].Zones[j].Id; aTH.innerHTML = data[i].Zones[j].Name; tr.appendChild(aTH); } var th4 = document.createElement('th'); th4.innerHTML='Nav. status'; tr.appendChild(th4); var th5 = document.createElement('th'); th5.innerHTML='MMSI'; tr.appendChild(th5); var th6 = document.createElement('th'); th6.innerHTML='Destination'; tr.appendChild(th6); aTable.appendChild(document.createElement('tbody')); aDiv.appendChild(aTable); aDiv.appendChild(document.createElement('hr')); } setInterval(function () { update(); }, 15000); } }