Add logging with .env support
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -5,3 +5,4 @@ dist/
|
|||||||
*.pyc
|
*.pyc
|
||||||
__pycache__/
|
__pycache__/
|
||||||
*.spec
|
*.spec
|
||||||
|
*.log
|
||||||
|
|||||||
46
src/main.py
46
src/main.py
@@ -1,4 +1,5 @@
|
|||||||
import csv
|
import csv
|
||||||
|
import logging
|
||||||
import os
|
import os
|
||||||
import tkinter as tk
|
import tkinter as tk
|
||||||
from tkinter import messagebox, ttk
|
from tkinter import messagebox, ttk
|
||||||
@@ -7,6 +8,9 @@ import matplotlib.pyplot as plt
|
|||||||
import pandas as pd
|
import pandas as pd
|
||||||
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
|
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
|
||||||
|
|
||||||
|
import sys
|
||||||
|
from dotenv import load_dotenv
|
||||||
|
|
||||||
|
|
||||||
class MedTrackerApp:
|
class MedTrackerApp:
|
||||||
def __init__(self, root):
|
def __init__(self, root):
|
||||||
@@ -17,7 +21,24 @@ class MedTrackerApp:
|
|||||||
# self.root.iconbitmap("app_icon.ico")
|
# self.root.iconbitmap("app_icon.ico")
|
||||||
# self.root.geometry("800x600")
|
# self.root.geometry("800x600")
|
||||||
|
|
||||||
|
if len(sys.argv) > 1:
|
||||||
|
script_name = sys.argv[0]
|
||||||
|
first_argument = sys.argv[1]
|
||||||
|
|
||||||
|
if logger.level == logging.DEBUG:
|
||||||
|
logger.debug(f"Script name: {script_name}")
|
||||||
|
logger.debug(f"First argument: {first_argument}")
|
||||||
|
|
||||||
|
if os.path.exists(first_argument):
|
||||||
|
self.filename = first_argument
|
||||||
|
logger.info(f"Using data file: {first_argument}")
|
||||||
|
else:
|
||||||
self.filename = "thechart_data.csv"
|
self.filename = "thechart_data.csv"
|
||||||
|
logger.warning(
|
||||||
|
f"Data file {first_argument} does not exist."
|
||||||
|
f" Using default file: {self.filename}"
|
||||||
|
)
|
||||||
|
|
||||||
self.initialize_csv()
|
self.initialize_csv()
|
||||||
|
|
||||||
main_frame = ttk.Frame(self.root, padding="10")
|
main_frame = ttk.Frame(self.root, padding="10")
|
||||||
@@ -489,6 +510,7 @@ class MedTrackerApp:
|
|||||||
def update_graph(self, df: pd.DataFrame) -> None:
|
def update_graph(self, df: pd.DataFrame) -> None:
|
||||||
self.ax.clear()
|
self.ax.clear()
|
||||||
if not df.empty:
|
if not df.empty:
|
||||||
|
df["date"] = pd.to_datetime(df["date"])
|
||||||
df = df.sort_values(by="date")
|
df = df.sort_values(by="date")
|
||||||
df.set_index(keys="date", inplace=True)
|
df.set_index(keys="date", inplace=True)
|
||||||
self.ax.plot(
|
self.ax.plot(
|
||||||
@@ -515,7 +537,31 @@ class MedTrackerApp:
|
|||||||
self.canvas.draw()
|
self.canvas.draw()
|
||||||
|
|
||||||
|
|
||||||
|
def setup_logging() -> logging.Logger:
|
||||||
|
load_dotenv()
|
||||||
|
log_file = os.getenv("LOG_FILE", "/tmp/thechart.log")
|
||||||
|
if not os.path.exists(os.path.dirname(log_file)):
|
||||||
|
os.makedirs(os.path.dirname(log_file), exist_ok=True)
|
||||||
|
|
||||||
|
log_level = os.getenv("LOG_LEVEL", "INFO").upper()
|
||||||
|
if log_level not in ["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"]:
|
||||||
|
log_level = "DEBUG"
|
||||||
|
|
||||||
|
logging.basicConfig(
|
||||||
|
level=getattr(logging, log_level),
|
||||||
|
format="%(asctime)s - %(levelname)s - %(message)s",
|
||||||
|
handlers=[
|
||||||
|
logging.FileHandler(log_file),
|
||||||
|
logging.StreamHandler(sys.stdout),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
logger = logging.getLogger()
|
||||||
|
|
||||||
|
return logger
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
logger = setup_logging()
|
||||||
root = tk.Tk()
|
root = tk.Tk()
|
||||||
app = MedTrackerApp(root)
|
app = MedTrackerApp(root)
|
||||||
root.mainloop()
|
root.mainloop()
|
||||||
|
|||||||
Reference in New Issue
Block a user