| 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. 上傳雲端 |
| """ |
| |
| current_df = sync_from_hf() |
| |
| |
| new_entry = pd.DataFrame([new_log_dict]) |
| updated_df = pd.concat([current_df, new_entry], ignore_index=True) |
| |
| |
| updated_df.to_csv(CSV_FILENAME, index=False) |
| |
| |
| return upload_to_hf() |