1
0
Fork 0
mirror of https://github.com/Ysurac/openmptcprouter-feeds.git synced 2025-02-15 03:51:51 +00:00
openmptcprouter-feeds/luci-app-dockerman/luasrc/view/dockerman/containers_running_stats.htm
2023-07-24 15:26:29 +08:00

91 lines
No EOL
4.1 KiB
HTML
Executable file

<script type="text/javascript">
const units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
function niceBytes(x) {
let l = 0, n = parseInt(x, 10) || 0;
while (n >= 1024 && ++l) {
n = n / 1024;
}
return (n.toFixed(n < 10 && l > 0 ? 1 : 0) + ' ' + units[l]);
}
fnWindowLoad = function () {
XHR.get('<%=luci.dispatcher.build_url("admin/docker/get_system_df")%>/', null, (x, info)=>{
if(!info || !info.Containers || !info.Containers.forEach) return
info.Containers.forEach(item=>{
const size_c = document.getElementsByClassName("container_size_" + item.Id)
size_c[0].title = "RW Size: " + niceBytes(item.SizeRw) + " / RootFS Size(Include Image): " + niceBytes(item.SizeRootFs)
size_c[0].innerText = "Size: " + niceBytes(item.SizeRw) + "/" + niceBytes(item.SizeRootFs)
})
})
let lines = document.querySelectorAll('[id^=cbi-containers-]')
let last_bw_tx = {}
let last_bw_rx = {}
let interval = 30
let containers = []
lines.forEach((item) => {
let containerId = item.id.match(/cbi-containers-.+_id_(.*)/)
if (!containerId) { return }
containerId = containerId[1]
if (item.getElementsByClassName("container_not_running").length > 0) { return }
XHR.poll(interval, '<%=luci.dispatcher.build_url("admin/docker/container_stats")%>/' + containerId, null, (x, info) => {
// handle stats info
if (!info) { return }
item.childNodes.forEach((cell) => {
if (cell && cell.attributes) {
if (cell.getAttribute("data-name") == "_status" || cell.childNodes[1] && cell.childNodes[1].id.match(/_status/)) {
let runningStats = cell.getElementsByClassName("container_cpu_status")
runningStats[0].innerText = "CPU: " + info.cpu_percent + "%"
runningStats = cell.getElementsByClassName("container_mem_status")
runningStats[0].innerText = "MEM: " + niceBytes(info.memory.mem_useage)
runningStats = cell.getElementsByClassName("container_network_status")
for (var eth in info.bw_rxtx) {
if (last_bw_tx[containerId] != undefined && last_bw_rx[containerId] != undefined) {
runningStats[0].innerText = '↑' + niceBytes((info.bw_rxtx[eth].bw_tx - last_bw_tx[containerId]) / interval) + '/s ↓' + niceBytes((info.bw_rxtx[eth].bw_rx - last_bw_rx[containerId]) / interval) + '/s'
}
last_bw_rx[containerId] = info.bw_rxtx[eth].bw_rx
last_bw_tx[containerId] = info.bw_rxtx[eth].bw_tx
}
}
}
})
})
// containers.push(containerId)
})
// XHR.post('<%=luci.dispatcher.build_url("admin/docker/containers_stats")%>', {
// containers: JSON.stringify(containers)
// }, (x, info) => {
// lines.forEach((item) => {
// if (!info) { return }
// let containerId = item.id.match(/cbi-containers-.+_id_(.*)/)
// if (!containerId) { return }
// containerId = containerId[1]
// if (!info[containerId]) { return }
// infoC = info[containerId]
// if (item.getElementsByClassName("container_not_running").length > 0) { return }
// item.childNodes.forEach((cell) => {
// if (cell && cell.attributes) {
// if (cell.getAttribute("data-name") == "_status" || cell.childNodes[1] && cell.childNodes[1].id.match(/_status/)) {
// let runningStats = cell.getElementsByClassName("container_cpu_status")
// runningStats[0].innerText = "CPU: " + infoC.cpu_percent + "%"
// runningStats = cell.getElementsByClassName("container_mem_status")
// runningStats[0].innerText = "MEM: " + niceBytes(infoC.memory.mem_useage)
// runningStats = cell.getElementsByClassName("container_network_status")
// for (var eth in infoC.bw_rxtx) {
// if (last_bw_tx[containerId] != undefined && last_bw_rx[containerId] != undefined) {
// runningStats[0].innerText = '↑' + niceBytes((infoC.bw_rxtx[eth].bw_tx - last_bw_tx[containerId]) / interval) + '/s ↓' + niceBytes((infoC.bw_rxtx[eth].bw_rx - last_bw_rx[containerId]) / interval) + '/s'
// }
// last_bw_rx[containerId] = infoC.bw_rxtx[eth].bw_rx
// last_bw_tx[containerId] = infoC.bw_rxtx[eth].bw_tx
// }
// }
// }
// })
// })
// })
XHR.run()
XHR.halt()
}
</script>