Add multi-bucket support for tables and update reports
This commit is contained in:
parent
250cce8c11
commit
1d4e99c69b
4 changed files with 127 additions and 33 deletions
|
@ -253,3 +253,59 @@ def test_global_stats_file(tmp_path, sample_reports, monkeypatch):
|
|||
assert stats["unique_domains"] == 1
|
||||
assert isinstance(stats["generated_at"], str)
|
||||
assert stats["generation_seconds"] >= 0
|
||||
|
||||
|
||||
def test_multi_bucket_table(tmp_path, monkeypatch):
|
||||
db_path = tmp_path / "database" / "ngxstat.db"
|
||||
setup_db(db_path)
|
||||
# add a second domain entry
|
||||
conn = sqlite3.connect(db_path)
|
||||
cur = conn.cursor()
|
||||
cur.execute(
|
||||
"INSERT INTO logs (ip, host, time, request, status, bytes_sent, referer, user_agent, cache_status) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)",
|
||||
(
|
||||
"127.0.0.1",
|
||||
"foo.com",
|
||||
"2024-01-01 10:10:00",
|
||||
"GET /foo HTTP/1.1",
|
||||
200,
|
||||
100,
|
||||
"-",
|
||||
"curl",
|
||||
"MISS",
|
||||
),
|
||||
)
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
cfg = tmp_path / "reports.yml"
|
||||
cfg.write_text(
|
||||
"""
|
||||
- name: multi
|
||||
chart: table
|
||||
global: true
|
||||
buckets: [domain, agent]
|
||||
bucket_label: [Domain, Agent]
|
||||
query: |
|
||||
SELECT host AS domain, user_agent AS agent, COUNT(*) AS value
|
||||
FROM logs
|
||||
GROUP BY host, agent
|
||||
"""
|
||||
)
|
||||
|
||||
monkeypatch.setattr(gr, "DB_PATH", db_path)
|
||||
monkeypatch.setattr(gr, "OUTPUT_DIR", tmp_path / "output")
|
||||
monkeypatch.setattr(gr, "REPORT_CONFIG", cfg)
|
||||
monkeypatch.setattr(
|
||||
gr, "TEMPLATE_DIR", Path(__file__).resolve().parents[1] / "templates"
|
||||
)
|
||||
|
||||
gr._generate_global()
|
||||
gr._generate_interval("hourly")
|
||||
|
||||
data = json.loads((tmp_path / "output" / "global" / "multi.json").read_text())
|
||||
assert {"domain", "agent", "value"} <= data[0].keys()
|
||||
reports = json.loads((tmp_path / "output" / "global" / "reports.json").read_text())
|
||||
entry = next(r for r in reports if r["name"] == "multi")
|
||||
assert entry["buckets"] == ["domain", "agent"]
|
||||
assert entry["bucket_label"] == ["Domain", "Agent"]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue