diff options
-rw-r--r-- | pages/machines.py | 58 |
1 files changed, 56 insertions, 2 deletions
diff --git a/pages/machines.py b/pages/machines.py index 5ec8956..ab0b413 100644 --- a/pages/machines.py +++ b/pages/machines.py @@ -58,10 +58,12 @@ def layout(): dcc.Loading(dcc.Graph(id='machines-graph-kvmstate')) ]), dbc.Col(width=12, xl=6, children=[ - dcc.Loading(dcc.Graph(id='machines-graph-cpumodel')) + dcc.Loading(dcc.Graph(id='machines-graph-cpumodel')), + dcc.Loading(dcc.Graph(id='machines-graph-cpumodel-locations')), ]), dbc.Col(width=12, xl=6, children=[ - dcc.Loading(dcc.Graph(id='machines-graph-systemmodel')) + dcc.Loading(dcc.Graph(id='machines-graph-systemmodel')), + dcc.Loading(dcc.Graph(id='machines-graph-systemmodel-locations')), ]) ]) ]) @@ -138,6 +140,58 @@ def make_graph_systemmodel(days, date, satellites): def make_graph_kvmstate(days, date, satellites): return make_graph(days, date, satellites, 'kvmstate', 'KVM State') +@app.callback([Output('machines-graph-cpumodel-locations', 'style'), + Output('machines-graph-cpumodel-locations', 'figure')], + [Input('machines-days', 'value'), + Input('machines-date', 'date'), + Input('machines-graph-cpumodel', 'clickData')]) +def make_graph_cpumodel_locations(days, date, clickData): + return make_graph_locations(days, date, clickData, 'cpumodel') + +@app.callback([Output('machines-graph-systemmodel-locations', 'style'), + Output('machines-graph-systemmodel-locations', 'figure')], + [Input('machines-days', 'value'), + Input('machines-date', 'date'), + Input('machines-graph-systemmodel', 'clickData')]) +def make_graph_systemmodel_locations(days, date, clickData): + return make_graph_locations(days, date, clickData, 'systemmodel') + +def make_graph_locations(days, date, clickData, prop): + if clickData == None: + return dict(display='none'), dict() + + dbcon = db.getConnection() + cursor = dbcon.cursor() + + stmt = """ + SELECT r.ip, m.count + FROM reports r + JOIN machine m ON r.id = m.report + WHERE r.date = (SELECT date FROM reports WHERE date >= %s ORDER BY date ASC LIMIT 1) + AND m.days = %s + AND m.property = %s + AND m.value = %s + ORDER BY m.count DESC + """ + item = clickData['points'][0]['y'] + + cursor.execute(stmt, (date, days, prop, item)) + + data = cursor.fetchall() + + db.closeConnection(dbcon) + + figure = go.Figure() + figure.add_trace(go.Bar( + x=[item['ip'] for item in data], + y=[item['count'] for item in data] + )) + figure.update_layout( + height = 400 + ) + + return dict(display='block'), figure + def make_graph(days, date, satellites, prop, title, unit='', typ='pie'): dbcon = db.getConnection() |