kopia lustrzana https://github.com/Aircoookie/WLED
70 wiersze
1.7 KiB
Python
70 wiersze
1.7 KiB
Python
import argparse
|
|
from http import server
|
|
import os
|
|
from pathlib import Path
|
|
import socketserver
|
|
|
|
import pandas as pd
|
|
import plotly.express as px
|
|
|
|
# python -m http.server 8000 --directory /tmp/
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(
|
|
description="Generate an html plot of rolls captured by mqtt_logger.py")
|
|
parser.add_argument("input_file", type=Path, help="Log file to plot")
|
|
parser.add_argument(
|
|
"-s",
|
|
"--start-server",
|
|
action="store_true",
|
|
help="After generating the plot, run a webserver pointing to it",
|
|
)
|
|
parser.add_argument(
|
|
"-o",
|
|
"--output-dir",
|
|
type=Path,
|
|
default=Path(__file__).absolute().parent / "logs",
|
|
help="Directory to log to",
|
|
)
|
|
args = parser.parse_args()
|
|
|
|
df = pd.read_csv(
|
|
args.input_file, names=["timestamp", "die", "label", "state", "roll"]
|
|
)
|
|
|
|
df_filt = df[df["state"] == 1]
|
|
|
|
time = (df_filt["timestamp"] - df_filt["timestamp"].min()) / 60 / 60
|
|
|
|
fig = px.bar(
|
|
df_filt,
|
|
x=time,
|
|
y="roll",
|
|
color="label",
|
|
labels={
|
|
"x": "Game Time (min)",
|
|
},
|
|
title=f"Roll Report: {args.input_file.name}",
|
|
)
|
|
|
|
output_path = args.output_dir / (args.input_file.stem + ".html")
|
|
|
|
fig.write_html(output_path)
|
|
if args.start_server:
|
|
PORT = 8000
|
|
os.chdir(args.output_dir)
|
|
try:
|
|
with socketserver.TCPServer(
|
|
("", PORT), server.SimpleHTTPRequestHandler
|
|
) as httpd:
|
|
print(
|
|
f"Serving HTTP on http://0.0.0.0:{PORT}/{output_path.name}")
|
|
httpd.serve_forever()
|
|
except KeyboardInterrupt:
|
|
pass
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|