Merge pull request #51 from wagesj45/codex/locate-usage-of-/output-directory

Record timestamp of last report generation
This commit is contained in:
Jordan Wages 2025-08-02 03:13:49 -05:00 committed by GitHub
commit 97b735f17a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 32 additions and 3 deletions

View file

@ -15,6 +15,7 @@ DB_PATH = Path("database/ngxstat.db")
OUTPUT_DIR = Path("output")
TEMPLATE_DIR = Path("templates")
REPORT_CONFIG = Path("reports.yml")
GENERATED_MARKER = OUTPUT_DIR / "generated.txt"
# Mapping of interval names to SQLite strftime formats. These strings are
# substituted into report queries whenever the special ``{bucket}`` token is
@ -30,6 +31,18 @@ INTERVAL_FORMATS = {
app = typer.Typer(help="Generate aggregated log reports")
@app.callback()
def _cli_callback(ctx: typer.Context) -> None:
"""Register post-command hook to note generation time."""
def _write_marker() -> None:
OUTPUT_DIR.mkdir(parents=True, exist_ok=True)
timestamp = datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S")
GENERATED_MARKER.write_text(f"{timestamp}\n")
ctx.call_on_close(_write_marker)
def _get_domains() -> List[str]:
"""Return a sorted list of unique domains from the logs table."""
conn = sqlite3.connect(DB_PATH)

View file

@ -2,8 +2,10 @@ import sqlite3
from pathlib import Path
import json
import sys
from datetime import datetime
import pytest
from typer.testing import CliRunner
REPO_ROOT = Path(__file__).resolve().parents[1]
sys.path.append(str(REPO_ROOT))
@ -199,9 +201,23 @@ def test_generate_root_index(tmp_path, sample_reports, monkeypatch):
assert '<option value="Global">' not in content
assert '<option value="analysis">' not in content
# check for domain options
assert '<option value="foo.com">' in content
assert '<option value="bar.com">' in content
def test_generated_marker_written(tmp_path, monkeypatch):
out_dir = tmp_path / "output"
monkeypatch.setattr(gr, "OUTPUT_DIR", out_dir)
monkeypatch.setattr(gr, "TEMPLATE_DIR", REPO_ROOT / "templates")
monkeypatch.setattr(gr, "GENERATED_MARKER", out_dir / "generated.txt")
monkeypatch.setattr(gr, "_copy_icons", lambda: None)
(out_dir / "hourly").mkdir(parents=True)
runner = CliRunner()
result = runner.invoke(gr.app, ["index"])
assert result.exit_code == 0, result.output
marker = out_dir / "generated.txt"
assert marker.exists()
content = marker.read_text().strip()
datetime.strptime(content, "%Y-%m-%d %H:%M:%S")
def test_global_reports_once(tmp_path, sample_reports, monkeypatch):