File size: 1,778 Bytes
6429e25
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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()