File size: 2,120 Bytes
c7d16a3
 
b526fd8
c7d16a3
 
 
 
 
 
b526fd8
f21d834
b526fd8
f21d834
c7d16a3
 
 
b526fd8
f94ee98
 
 
 
 
 
 
 
 
 
 
 
 
b526fd8
c7d16a3
 
 
 
 
 
 
 
 
f21d834
c7d16a3
 
 
 
 
 
 
 
f21d834
 
c7d16a3
f21d834
c7d16a3
f21d834
c7d16a3
f21d834
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
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