diff --git a/frontend/panel.gotemplate.html b/frontend/panel.gotemplate.html index bc3a3f7..726c504 100644 --- a/frontend/panel.gotemplate.html +++ b/frontend/panel.gotemplate.html @@ -25,28 +25,16 @@ const dbTableSizes = {{ .DBTableSizes }}; const rowCountByRoom = {{ .RowCountByRoom }}; + // disk space chart - - dbTableSizes.sort((a, b) => { - return b.Bytes - a.Bytes; - }); - - const top10 = dbTableSizes.slice(0, 9); - const others = dbTableSizes.slice(9, dbTableSizes.length) - top10.push({ - Name: "others", - Bytes: others.reduce((accumulator, table) => accumulator + table.Bytes, 0) - }) - - const totalBytes = top10.reduce((accumulator, table) => accumulator + table.Bytes, 0); - - new Chart(document.getElementById('chart2'), { + const freeSpace = diskUsage.DiskSizeBytes - (diskUsage.PostgresBytes+diskUsage.MediaBytes+diskUsage.OtherBytes); + new Chart(document.getElementById('chart1'), { type: 'doughnut', data: { - labels: top10.map(table => table.Name), + labels: ["Postgres DB", "Matrix Media", "Other", "Free Space" ], datasets: [{ - label: 'filesize %', - data: top10.map(table => Math.round((table.Bytes/totalBytes)*100)), + label: 'bytes', + data: [diskUsage.PostgresBytes, diskUsage.MediaBytes, diskUsage.OtherBytes, freeSpace], borderWidth: 2 }] }, @@ -54,4 +42,69 @@ } }); + + + + // database tables chart + + dbTableSizes.sort((a, b) => { + return b.Bytes - a.Bytes; + }); + + const top6 = dbTableSizes.slice(0, 5); + const others = dbTableSizes.slice(5, dbTableSizes.length) + top6.push({ + Name: "others", + Bytes: others.reduce((accumulator, table) => accumulator + table.Bytes, 0) + }) + + const totalBytes = top6.reduce((accumulator, table) => accumulator + table.Bytes, 0); + + new Chart(document.getElementById('chart2'), { + type: 'doughnut', + data: { + labels: top6.map(table => table.Name), + datasets: [{ + label: 'filesize %', + data: top6.map(table => Math.round((table.Bytes/totalBytes)*100)), + borderWidth: 2 + }] + }, + options: { + } + }); + + + + // matrix room size chart + const rooms = Object.entries(rowCountByRoom).map(entry => ({roomid: entry[0], rows: entry[1]})); + + rooms.sort((a, b) => { + return b.rows - a.rows; + }); + + const top8 = rooms.slice(0, 7); + const otherRooms = rooms.slice(7, rooms.length) + top8.push({ + roomid: "others", + rows: otherRooms.reduce((accumulator, table) => accumulator + table.rows, 0) + }) + + const totalRows = top8.reduce((accumulator, table) => accumulator + table.rows, 0); + + new Chart(document.getElementById('chart3'), { + type: 'doughnut', + data: { + labels: top6.map(table => table.roomid), + datasets: [{ + label: '%', + data: top6.map(table => Math.round((table.rows/totalRows)*100)), + borderWidth: 2 + }] + }, + options: { + } + }); + + diff --git a/frontend/static/app.css b/frontend/static/app.css index 5c583b5..f335dba 100644 --- a/frontend/static/app.css +++ b/frontend/static/app.css @@ -120,6 +120,23 @@ header .session-status { } +.chart-container { + display: flex; + flex-direction: column; + align-content: center; +} + + +.chart-container h1, +.chart-container h2, +.chart-container h3, +.chart-container h4 { + text-align: center; +} + + + + code { padding: 2px 4px; font-size: 90%; @@ -186,43 +203,6 @@ pre.flash.info { -.admonition { - border-left: 8px dashed gray; - padding: 5px 20px; - /* display: flex; - flex-direction: row; - align-items: flex-start; */ - min-height: 100px; -} - -.admonition.warning { - border-left-color: #ffbb00; - background: #e7d8ae; -} -.admonition.info { - border-left-color: #289eff; - background: #c7dffa; -} -.admonition.info code { - background-color: #753d3d08; -} -.admonition.mascot { - border-left-color: #00ffaa; - background: #e8ffc3; -} - -.emoji-icon { - margin-right: 20px; - margin-top: 15px ; - float: left; - font-family: sans-serif; - font-size: 60px; - text-shadow: 2px 5px 20px #25202e40, 2px 5px 10px #25202e40, 2px 5px 3px #25202e40; -} -.emoji-icon img { - width: 70px; -} - .page { padding: 2vw 4vw; border-top: 0.4rem dashed #695b62; @@ -282,10 +262,6 @@ pre.flash.info { align-items: flex-start; } -.money-unit { - margin-right: 0.3em; -} - input,button,textarea, input:hover,button:hover,textarea:hover, input:focus,button:focus,textarea:focus {