diff --git a/src/run.py b/src/run.py index 447f66d..06e2eed 100644 --- a/src/run.py +++ b/src/run.py @@ -7,6 +7,7 @@ import redis import json import os import plotly.express as px +import plotly.graph_objects as po import pandas as pd import psycopg import sqlalchemy @@ -148,6 +149,72 @@ def index(): dbh.close() +@app.route('/ntpserver') +def ntpserver(): + try: + dbh = psycopg.connect() + engine = sqlalchemy.create_engine("postgresql+psycopg://", creator=lambda: dbh) + + query = """ + select time_bucket('5 minutes', time) as bucket, + device, + avg(cast(values->'rootdisp'->>'value' as float)) as rootdisp, + avg(cast(values->'stratum'->>'value' as int)) as stratum + from measurements + where time >= date_trunc('day', now()) AND time < date_trunc('day', now()) + '1 day'::interval and + application = 'TSM' and attributes->>'Label' = 'david' + group by bucket, device + order by bucket, device + """ + + df = pd.read_sql(query, con=engine) + + fig = po.Figure() + fig.add_trace(po.Scatter(x=df['bucket'], y=df['rootdisp'], mode='lines', name='Root Dispersion', yaxis='y1', line=dict(color='red'))) + fig.add_trace(po.Scatter(x=df['bucket'], y=df['stratum'], mode='lines', name='Stratum', yaxis='y2', line=dict(color='blue'))) + + fig.update_layout( + title='NTP Server Numbers', + + # Linke Y-Achse + yaxis=dict( + title='Root Dispersion' + ), + + # Rechte Y-Achse + yaxis2=dict( + title='Stratum', + overlaying='y', # Legt die zweite Y-Achse über die erste + side='right', # Setzt sie auf die rechte Seite + tickmode='linear', # Stellt sicher, dass die Ticks in festen Intervallen sind + dtick=1, # Zeigt nur ganzzahlige Ticks + ), + + legend=dict(x=0.05, y=1) # Position der Legende + ) + + + graph_html = fig.to_html(full_html=False, default_height='30%') + + return render_template_string(f""" + +
+