Compare commits
No commits in common. "2eeb8266c7e91275fb98f5772f9a5dfa7629bfbc" and "0065446ae368d3b6f2bb6fb934d2769131d8cd0e" have entirely different histories.
2eeb8266c7
...
0065446ae3
@ -1 +1 @@
|
|||||||
v20260103-01-reports-jobs-delete
|
v20260101-15-changelog-0-1-15
|
||||||
|
|||||||
@ -163,20 +163,6 @@ def api_reports_create():
|
|||||||
return {"id": r.id}
|
return {"id": r.id}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@main_bp.route("/api/reports/<int:report_id>", methods=["DELETE"])
|
|
||||||
@login_required
|
|
||||||
def api_reports_delete(report_id: int):
|
|
||||||
err = _require_reporting_role()
|
|
||||||
if err is not None:
|
|
||||||
return err
|
|
||||||
|
|
||||||
report = ReportDefinition.query.get_or_404(report_id)
|
|
||||||
db.session.delete(report)
|
|
||||||
db.session.commit()
|
|
||||||
return {"status": "ok"}
|
|
||||||
|
|
||||||
|
|
||||||
@main_bp.route("/api/reports/<int:report_id>/generate", methods=["POST"])
|
@main_bp.route("/api/reports/<int:report_id>/generate", methods=["POST"])
|
||||||
@login_required
|
@login_required
|
||||||
def api_reports_generate(report_id: int):
|
def api_reports_generate(report_id: int):
|
||||||
@ -205,37 +191,39 @@ def api_reports_generate(report_id: int):
|
|||||||
where_customer = ""
|
where_customer = ""
|
||||||
params = {"rid": report_id, "start_ts": report.period_start, "end_ts": report.period_end}
|
params = {"rid": report_id, "start_ts": report.period_start, "end_ts": report.period_end}
|
||||||
if scope in ("single", "multiple") and customer_ids:
|
if scope in ("single", "multiple") and customer_ids:
|
||||||
where_customer = " AND j.customer_id = ANY(:customer_ids) "
|
where_customer = " AND c.id = ANY(:customer_ids) "
|
||||||
params["customer_ids"] = customer_ids
|
params["customer_ids"] = customer_ids
|
||||||
|
|
||||||
db.session.execute(
|
db.session.execute(
|
||||||
text(
|
text(
|
||||||
f'''
|
f'''
|
||||||
INSERT INTO report_object_snapshots
|
INSERT INTO report_object_snapshots
|
||||||
(report_id, object_name, job_id, job_name, customer_id, customer_name,
|
(report_id, object_name, job_id, job_name, customer_id, customer_name,
|
||||||
backup_software, backup_type, run_id, run_at, status, missed,
|
backup_software, backup_type, run_id, run_at, status, missed,
|
||||||
override_applied, reviewed_at, ticket_number, remark, created_at)
|
override_applied, reviewed_at, ticket_number, remark, created_at)
|
||||||
SELECT
|
SELECT
|
||||||
:rid AS report_id,
|
:rid AS report_id,
|
||||||
COALESCE(j.job_name, '(unknown job)') AS object_name,
|
co.object_name AS object_name,
|
||||||
j.id AS job_id,
|
j.id AS job_id,
|
||||||
j.job_name AS job_name,
|
j.job_name AS job_name,
|
||||||
j.customer_id AS customer_id,
|
c.id AS customer_id,
|
||||||
c.name AS customer_name,
|
c.name AS customer_name,
|
||||||
j.backup_software AS backup_software,
|
j.backup_software AS backup_software,
|
||||||
j.backup_type AS backup_type,
|
j.backup_type AS backup_type,
|
||||||
jr.id AS run_id,
|
jr.id AS run_id,
|
||||||
jr.run_at AS run_at,
|
jr.run_at AS run_at,
|
||||||
jr.status AS status,
|
COALESCE(rol.status, jr.status) AS status,
|
||||||
COALESCE(jr.missed, FALSE) AS missed,
|
COALESCE(jr.missed, FALSE) AS missed,
|
||||||
COALESCE(jr.override_applied, FALSE) AS override_applied,
|
COALESCE(jr.override_applied, FALSE) AS override_applied,
|
||||||
jr.reviewed_at AS reviewed_at,
|
jr.reviewed_at AS reviewed_at,
|
||||||
NULL AS ticket_number,
|
NULL AS ticket_number,
|
||||||
jr.remark AS remark,
|
jr.remark AS remark,
|
||||||
NOW() AS created_at
|
NOW() AS created_at
|
||||||
FROM job_runs jr
|
FROM run_object_links rol
|
||||||
|
JOIN customer_objects co ON co.id = rol.customer_object_id
|
||||||
|
JOIN customers c ON c.id = co.customer_id
|
||||||
|
JOIN job_runs jr ON jr.id = rol.run_id
|
||||||
JOIN jobs j ON j.id = jr.job_id
|
JOIN jobs j ON j.id = jr.job_id
|
||||||
LEFT JOIN customers c ON c.id = j.customer_id
|
|
||||||
WHERE jr.run_at IS NOT NULL
|
WHERE jr.run_at IS NOT NULL
|
||||||
AND jr.run_at >= :start_ts
|
AND jr.run_at >= :start_ts
|
||||||
AND jr.run_at < :end_ts
|
AND jr.run_at < :end_ts
|
||||||
@ -254,7 +242,7 @@ def api_reports_generate(report_id: int):
|
|||||||
warning_count, failed_count, missed_count, success_rate, created_at)
|
warning_count, failed_count, missed_count, success_rate, created_at)
|
||||||
SELECT
|
SELECT
|
||||||
:rid AS report_id,
|
:rid AS report_id,
|
||||||
COALESCE(s.job_name, '(unknown job)') AS object_name,
|
s.object_name AS object_name,
|
||||||
COUNT(*)::INTEGER AS total_runs,
|
COUNT(*)::INTEGER AS total_runs,
|
||||||
SUM(CASE WHEN (COALESCE(s.status,'') ILIKE 'success%' AND s.override_applied = FALSE) THEN 1 ELSE 0 END)::INTEGER AS success_count,
|
SUM(CASE WHEN (COALESCE(s.status,'') ILIKE 'success%' AND s.override_applied = FALSE) THEN 1 ELSE 0 END)::INTEGER AS success_count,
|
||||||
SUM(CASE WHEN (s.override_applied = TRUE) THEN 1 ELSE 0 END)::INTEGER AS success_override_count,
|
SUM(CASE WHEN (s.override_applied = TRUE) THEN 1 ELSE 0 END)::INTEGER AS success_override_count,
|
||||||
@ -273,7 +261,7 @@ def api_reports_generate(report_id: int):
|
|||||||
NOW() AS created_at
|
NOW() AS created_at
|
||||||
FROM report_object_snapshots s
|
FROM report_object_snapshots s
|
||||||
WHERE s.report_id = :rid
|
WHERE s.report_id = :rid
|
||||||
GROUP BY s.job_id, s.job_name
|
GROUP BY s.object_name
|
||||||
'''
|
'''
|
||||||
),
|
),
|
||||||
{"rid": report_id},
|
{"rid": report_id},
|
||||||
|
|||||||
@ -1,8 +1,3 @@
|
|||||||
## v20260103-01-reports-jobs-delete
|
|
||||||
|
|
||||||
- Changed report output to aggregate results per job instead of listing individual objects, making reports more suitable for high-level job status review.
|
|
||||||
- Updated report generation logic to build snapshots and summaries based on job runs.
|
|
||||||
- Added the ability to delete reports, including removal of all associated report data.
|
|
||||||
|
|
||||||
|
|
||||||
================================================================================================================================================
|
================================================================================================================================================
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user