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()