PhilipL commited on
Commit
ca78357
·
unverified ·
1 Parent(s): f19568d

every 30 times upload once

Browse files
Files changed (1) hide show
  1. logger_service.py +24 -28
logger_service.py CHANGED
@@ -1,29 +1,19 @@
1
  import os
2
  import pandas as pd
3
- from huggingface_hub import hf_hub_download, upload_file, login
4
 
5
  # --- 配置區 ---
6
  DATASET_REPO_ID = "My-Project-Team/Digital-Bodyguard-Dataset"
7
  CSV_FILENAME = "baseline_logs.csv"
8
  HF_TOKEN = os.getenv("HF_TOKEN")
9
 
 
 
 
 
10
  if HF_TOKEN:
11
  login(token=HF_TOKEN)
12
 
13
- def sync_from_hf():
14
- """從雲端下載最新的 CSV 並回傳 DataFrame"""
15
- try:
16
- path = hf_hub_download(
17
- repo_id=DATASET_REPO_ID,
18
- filename=CSV_FILENAME,
19
- repo_type="dataset",
20
- token=HF_TOKEN
21
- )
22
- return pd.read_csv(path)
23
- except Exception as e:
24
- print(f"⚠️ 無法下載資料,建立新表: {e}")
25
- return pd.DataFrame(columns=["timestamp", "ip_address", "cookie_id", "account", "role", "action", "status"])
26
-
27
  def upload_to_hf():
28
  """將本地的 CSV 檔案同步回雲端"""
29
  try:
@@ -33,7 +23,7 @@ def upload_to_hf():
33
  repo_id=DATASET_REPO_ID,
34
  repo_type="dataset",
35
  token=HF_TOKEN,
36
- commit_message="System auto-log update"
37
  )
38
  return True
39
  except Exception as e:
@@ -42,18 +32,24 @@ def upload_to_hf():
42
 
43
  def push_new_log(new_log_dict):
44
  """
45
- 接收一個字典格式的紀錄,執行:
46
- 1. 抓取最新雲端資料 2. 合併新紀錄 3. 儲存本地 4. 上傳雲端
47
  """
48
- # 1. 取得最新資料
49
- current_df = sync_from_hf()
50
-
51
- # 2. 加入新紀錄
52
- new_entry = pd.DataFrame([new_log_dict])
53
- updated_df = pd.concat([current_df, new_entry], ignore_index=True)
54
 
55
- # 3. 儲存至本地 (暫存)
56
- updated_df.to_csv(CSV_FILENAME, index=False)
57
 
58
- # 4. 同步回 Dataset
59
- return upload_to_hf()
 
 
 
 
 
 
 
 
 
 
 
 
1
  import os
2
  import pandas as pd
3
+ from huggingface_hub import upload_file, login
4
 
5
  # --- 配置區 ---
6
  DATASET_REPO_ID = "My-Project-Team/Digital-Bodyguard-Dataset"
7
  CSV_FILENAME = "baseline_logs.csv"
8
  HF_TOKEN = os.getenv("HF_TOKEN")
9
 
10
+ # 🌟 新增:批次上傳門檻 (每累積幾筆資料才備份到雲端一次)
11
+ BATCH_SIZE = 30
12
+ unsynced_count = 0 # 計算目前累積了幾筆未上傳的操作
13
+
14
  if HF_TOKEN:
15
  login(token=HF_TOKEN)
16
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  def upload_to_hf():
18
  """將本地的 CSV 檔案同步回雲端"""
19
  try:
 
23
  repo_id=DATASET_REPO_ID,
24
  repo_type="dataset",
25
  token=HF_TOKEN,
26
+ commit_message=f"System auto-log batch update ({BATCH_SIZE} logs)"
27
  )
28
  return True
29
  except Exception as e:
 
32
 
33
  def push_new_log(new_log_dict):
34
  """
35
+ 接收新紀錄並計數。達到 BATCH_SIZE 門檻時才執行雲端上傳。
36
+ 有效避免 429 Rate Limit 並大幅提升網頁操作流暢度。
37
  """
38
+ global unsynced_count
 
 
 
 
 
39
 
40
+ # 每收到一筆日誌,計數器 +1
41
+ unsynced_count += 1
42
 
43
+ # 檢查是否達到批次上傳的門檻
44
+ if unsynced_count >= BATCH_SIZE:
45
+ print(f"📦 已累積 {BATCH_SIZE} 筆操作,正在打包同步至 Hugging Face...")
46
+ success = upload_to_hf()
47
+
48
+ # 如果上傳成功,就把計數器歸零,重新開始算;如果失敗就保留計數,下次再試
49
+ if success:
50
+ print("✅ 批次同步成功!")
51
+ unsynced_count = 0
52
+ return success
53
+
54
+ # 還沒滿 30 筆,就不做任何雲端連線,讓網頁瞬間跑完!
55
+ return True