InfoSecure / logger_service.py
PhilipL's picture
Update logger_service.py
f94ee98 verified
Raw
History Blame Contribute Delete
2.12 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")
# 🌟 批次上傳門檻 (每累積幾筆資料才備份到雲端一次)
BATCH_SIZE = 30
unsynced_count = 0
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=f"System auto-log batch update ({BATCH_SIZE} logs)"
)
return True
except Exception as e:
print(f"❌ 雲端同步失敗: {e}")
return False
def push_new_log(new_log_dict):
"""
接收新紀錄並計數。達到 BATCH_SIZE 門檻時才執行雲端上傳。
有效避免 429 Rate Limit 並大幅提升網頁操作流暢度。
"""
global unsynced_count
unsynced_count += 1
if unsynced_count >= BATCH_SIZE:
print(f"📦 已累積 {BATCH_SIZE} 筆操作,正在打包同步至 Hugging Face...")
success = upload_to_hf()
if success:
print("✅ 批次同步成功!")
unsynced_count = 0
return success
return True