Update generate_html

This commit is contained in:
Alban Bronisz 2021-11-21 15:13:54 +01:00
parent 1f3cf30127
commit 44b6a8b450

View File

@ -1,30 +1,84 @@
#!/usr/bin/env python3
import argparse
import logging
import os
import sqlite3
from pathlib import Path
import pandas as pd
import plotly.express as px
TABLE_NAME = "stats"
log = logging.getLogger(__name__)
INTERVALS = [50, 100, 1000] # on cron interval is 10min
HERE = Path(os.path.dirname(os.path.realpath(__file__)))
TABLE_NAME = "dc_stats"
INTERVALS = [1] # on cron interval is 10min
# Create your connection.
cnx = sqlite3.connect('data.sqlite')
def parse_args():
parser = argparse.ArgumentParser(description="Extract docker stats in a sqlite db")
df = pd.read_sql_query(f"SELECT * FROM {TABLE_NAME}", cnx)
df = df.set_index("date")
print(f"Find {len(df)} items")
parser.add_argument(
"sqlite",
nargs="?",
type=Path,
help="Path to sqlite file",
default=HERE / "stats.sqlite",
)
parser.add_argument(
"html",
nargs="?",
type=Path,
help="Path to sqlite file",
default=HERE / "stats.html",
)
parser.add_argument("--debug", "-d", action="store_true", help="Run in debug mode")
args = parser.parse_args()
return args.sqlite, args.html, args.debug
df["granu"] = 1
dfs = pd.DataFrame()
for i in INTERVALS:
dfi = df[::i].copy()
dfi["granu"] = i
dfs = dfs.append(dfi)
def generate_html_report(sqlite_fn: Path, html_fn: Path):
# Create your connection.
cnx = sqlite3.connect(sqlite_fn)
print(f"Find {len(dfs)} items")
fig = px.area(dfs, title="Wide-Form Input", animation_frame="granu")
fig.for_each_trace(lambda trace: trace.update(fillcolor = trace.line.color))
fig["layout"].pop("updatemenus") # optional, drop animation buttons
fig.update_layout(transition = {'duration': 1e12})
fig.write_html("stats.html", include_plotlyjs="cdn")
df = pd.read_sql_query(f"SELECT * FROM {TABLE_NAME}", cnx)
df = df.set_index("date")
log.info(f"Find {len(df)} items")
# df["granu"] = 1
dfs = pd.DataFrame()
for i in INTERVALS:
dfi = df[::i].copy()
breakpoint()
# dfi["granu"] = i
dfs = dfs.append(dfi)
log.info(f"Find {len(dfs)} items")
fig = px.area(dfs)
fig.for_each_trace(lambda trace: trace.update(fillcolor=trace.line.color))
fig["layout"].pop("updatemenus") # optional, drop animation buttons
fig.update_layout(transition={"duration": 1e12})
fig.update_layout(
title="Utilisation de RAM pour les docker-compose de l'eunuque"
" (pour voir une stat, mettre la sourie sur le haut des courbes,"
" vers les points)",
xaxis_title="Temps",
yaxis_title="RAM",
)
fig.write_html(html_fn, include_plotlyjs="cdn")
def main():
sqlite_fn, html_fn, debug = parse_args()
if debug:
logging.basicConfig(level=logging.DEBUG)
else:
logging.basicConfig(level=logging.INFO)
generate_html_report(sqlite_fn, html_fn)
if __name__ == "__main__":
main()