async function loadResources(){ const resources = await api(API + "/resources/active"); const mappings = await api(API + "/domainmap"); const table = document.getElementById("resources"); table.innerHTML = ""; resources.forEach(r => { let ips = ""; if(Array.isArray(r.ips)){ ips = r.ips.map(ip => "" + (ip.type || "") + " " + ip.ip + "" ).join(""); } let domains = mappings .filter(m => m.resource_id == r.id) .map(m => "🌐 " + m.domain_name + "") .join(""); const tr = document.createElement("tr"); tr.innerHTML = ` ${r.name} ${r.produkt || ""} ${r.provider || ""} ...
${r.cpu ? r.cpu + " CPU" : ""} ${r.ram ? " • " + r.ram + " RAM" : ""} ${r.disk ? " • " + r.disk : ""} ${r.os ? " • " + r.os : ""}
${domains} ${ips} `; table.appendChild(tr); }); } async function loadDomains(){ const domains = await api(API + "/domains"); const table = document.getElementById("domains"); table.innerHTML = ""; domains.forEach(d => { const tr = document.createElement("tr"); tr.innerHTML = ` ${d.domain_name} ${d.provider || ""} ${d.ip_address || ""} ${d.resource_name ? d.resource_name : "⚠ no server"} ... ${d.yearly_cost || ""} `; table.appendChild(tr); }); } async function deleteDomain(id){ if(!confirm("Domain löschen?")) return; await api(API + "/domains/" + id, { method: "DELETE" }); loadDomains(); } async function loadMapping(){ const data = await api(API + "/domainmap"); const table = document.getElementById("mapping"); table.innerHTML = ""; data.forEach(m => { const tr = document.createElement("tr"); tr.innerHTML = ` ${m.domain_name} ${m.ip_address} ${m.server_name || ""} `; table.appendChild(tr); }); } loadResources(); loadDomains(); loadMapping();