diff --git a/display/generate_html.py b/display/generate_html.py
index 72880da..416b845 100644
--- a/display/generate_html.py
+++ b/display/generate_html.py
@@ -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()