초기 커밋: Docker/PostgreSQL 이관, 구글 OAuth 제거, Gitea 푸시 스크립트 추가

This commit is contained in:
king
2026-05-24 03:07:53 +09:00
commit 54707c99a3
23 changed files with 6933 additions and 0 deletions
+43
View File
@@ -0,0 +1,43 @@
import csv
import json
import os
from datetime import datetime
from zoneinfo import ZoneInfo
LOG_DIR = "logs"
EVENT_LOG_PATH = os.path.join(LOG_DIR, "event_log.csv")
LOG_COLUMNS = ["date", "time", "user", "action", "status", "details"]
KST = ZoneInfo("Asia/Seoul")
def user_label(user) -> str:
if not user:
return ""
return getattr(user, "email", None) or getattr(user, "name", None) or str(getattr(user, "id", ""))
def log_event(user, action: str, status: str = "success", details: dict | str | None = None):
os.makedirs(LOG_DIR, exist_ok=True)
now = datetime.now(KST)
file_exists = os.path.exists(EVENT_LOG_PATH)
details_text = ""
if isinstance(details, dict):
details_text = json.dumps(details, ensure_ascii=False)
elif details is not None:
details_text = str(details)
with open(EVENT_LOG_PATH, "a", encoding="utf-8-sig", newline="") as f:
writer = csv.DictWriter(f, fieldnames=LOG_COLUMNS)
if not file_exists or os.path.getsize(EVENT_LOG_PATH) == 0:
writer.writeheader()
writer.writerow(
{
"date": now.strftime("%Y-%m-%d"),
"time": now.strftime("%H:%M:%S"),
"user": user_label(user),
"action": action,
"status": status,
"details": details_text,
}
)