InfoSec / logger_service.py
PhilipL's picture
Upload logger_service.py
6429e25 verified
Raw
History Blame Contribute Delete
1.78 kB
import os
import pandas as pd
from huggingface_hub import hf_hub_download, upload_file, login
# --- 配置區 ---
DATASET_REPO_ID = "My-Project-Team/Digital-Bodyguard-Dataset"
CSV_FILENAME = "baseline_logs.csv"
HF_TOKEN = os.getenv("HF_TOKEN")
if HF_TOKEN:
login(token=HF_TOKEN)
def sync_from_hf():
"""從雲端下載最新的 CSV 並回傳 DataFrame"""
try:
path = hf_hub_download(
repo_id=DATASET_REPO_ID,
filename=CSV_FILENAME,
repo_type="dataset",
token=HF_TOKEN
)
return pd.read_csv(path)
except Exception as e:
print(f"⚠️ 無法下載資料,建立新表: {e}")
return pd.DataFrame(columns=["timestamp", "ip_address", "cookie_id", "account", "role", "action", "status"])
def upload_to_hf():
"""將本地的 CSV 檔案同步回雲端"""
try:
upload_file(
path_or_fileobj=CSV_FILENAME,
path_in_repo=CSV_FILENAME,
repo_id=DATASET_REPO_ID,
repo_type="dataset",
token=HF_TOKEN,
commit_message="System auto-log update"
)
return True
except Exception as e:
print(f"❌ 雲端同步失敗: {e}")
return False
def push_new_log(new_log_dict):
"""
接收一個字典格式的紀錄,執行:
1. 抓取最新雲端資料 2. 合併新紀錄 3. 儲存本地 4. 上傳雲端
"""
# 1. 取得最新資料
current_df = sync_from_hf()
# 2. 加入新紀錄
new_entry = pd.DataFrame([new_log_dict])
updated_df = pd.concat([current_df, new_entry], ignore_index=True)
# 3. 儲存至本地 (暫存)
updated_df.to_csv(CSV_FILENAME, index=False)
# 4. 同步回 Dataset
return upload_to_hf()