summaryrefslogtreecommitdiffstats
path: root/pages/satellites.py
diff options
context:
space:
mode:
Diffstat (limited to 'pages/satellites.py')
-rw-r--r--pages/satellites.py61
1 files changed, 61 insertions, 0 deletions
diff --git a/pages/satellites.py b/pages/satellites.py
new file mode 100644
index 0000000..232d8c7
--- /dev/null
+++ b/pages/satellites.py
@@ -0,0 +1,61 @@
+#!/usr/bin/env python3
+
+import dash_core_components as dcc
+import dash_html_components as html
+import dash_table as dtbl
+import dash_bootstrap_components as dbc
+from dash.dependencies import Input, Output
+
+import humanize
+import datetime as dt
+
+import db
+from app import app
+
+def layout():
+ return dbc.Container(fluid=True, children=[
+ dbc.Row([
+ dbc.Col([
+ html.Div(className='table-responsive-lg', children=[dtbl.DataTable(
+ id='satellites-table',
+ columns=[
+ {'id': 'ip', 'name': 'IP', 'type': 'text'},
+ {'id': 'version', 'name': 'Version', 'type': 'text'},
+ {'id': 'cpuCount', 'name': '#CPUs'},
+ {'id': 'cpuModel', 'name': 'CPU Model'},
+ {'id': 'uptime', 'name': 'Uptime'},
+ {'id': 'memPercent', 'name': 'Mem Usage'},
+ {'id': 'swapPercent', 'name': 'Swap Usage'}
+ ],
+ style_cell_conditional=[
+ {
+ 'if': {'column_type': 'text'},
+ 'textAlign': 'left'
+ }
+ ],
+ data=load_table()
+ )])
+ ])
+ ])
+ ])
+
+def load_table():
+ dbcon = db.getConnection()
+ cursor = dbcon.cursor()
+
+ cursor.execute("""
+ SELECT
+ r.ip, r.version, s.cpuCount, s.cpuModel, s.uptime,
+ ROUND(100 - s.memFree / s.memTotal * 100, 1) as memPercent,
+ ROUND(s.swapUsed / s.swapTotal * 100, 1) as swapPercent
+ FROM reports_newest r
+ LEFT OUTER JOIN server s ON r.id = s.report
+ """)
+
+ data = cursor.fetchall()
+
+ for record in data:
+ record['uptime'] = humanize.naturaldelta(dt.timedelta(seconds=record['uptime']))
+
+ db.closeConnection(dbcon)
+ return data