inital commit
This commit is contained in:
65
server/app/mailer/commands/audit_log.py
Normal file
65
server/app/mailer/commands/audit_log.py
Normal file
@@ -0,0 +1,65 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import json
|
||||
|
||||
from app.db.bootstrap import create_all_tables
|
||||
from app.db.models import AuditLog
|
||||
from app.db.session import SessionLocal
|
||||
from app.security.api_keys import authenticate_api_key
|
||||
from app.settings import settings
|
||||
|
||||
|
||||
def _row(item: AuditLog) -> dict:
|
||||
return {
|
||||
"id": item.id,
|
||||
"created_at": item.created_at.isoformat() if item.created_at else None,
|
||||
"tenant_id": item.tenant_id,
|
||||
"user_id": item.user_id,
|
||||
"api_key_id": item.api_key_id,
|
||||
"action": item.action,
|
||||
"object_type": item.object_type,
|
||||
"object_id": item.object_id,
|
||||
"details": item.details,
|
||||
}
|
||||
|
||||
|
||||
def main() -> None:
|
||||
parser = argparse.ArgumentParser(description="List audit log entries.")
|
||||
parser.add_argument("--api-key", default=settings.dev_bootstrap_api_key)
|
||||
parser.add_argument("--limit", type=int, default=50)
|
||||
parser.add_argument("--offset", type=int, default=0)
|
||||
parser.add_argument("--action")
|
||||
parser.add_argument("--object-type")
|
||||
parser.add_argument("--object-id")
|
||||
parser.add_argument("--json", action="store_true")
|
||||
args = parser.parse_args()
|
||||
|
||||
create_all_tables()
|
||||
with SessionLocal() as session:
|
||||
api_key = authenticate_api_key(session, args.api_key)
|
||||
if not api_key:
|
||||
raise SystemExit("Invalid API key")
|
||||
query = session.query(AuditLog).filter(AuditLog.tenant_id == api_key.tenant_id)
|
||||
if args.action:
|
||||
query = query.filter(AuditLog.action == args.action)
|
||||
if args.object_type:
|
||||
query = query.filter(AuditLog.object_type == args.object_type)
|
||||
if args.object_id:
|
||||
query = query.filter(AuditLog.object_id == args.object_id)
|
||||
items = query.order_by(AuditLog.created_at.desc()).offset(args.offset).limit(args.limit).all()
|
||||
rows = [_row(item) for item in items]
|
||||
|
||||
if args.json:
|
||||
print(json.dumps({"items": rows}, indent=2, ensure_ascii=False, default=str))
|
||||
return
|
||||
|
||||
for row in rows:
|
||||
print(
|
||||
f"{row['created_at']} | {row['action']} | "
|
||||
f"{row['object_type'] or '-'}:{row['object_id'] or '-'} | {row['details'] or {}}"
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user