File size: 3,609 Bytes
5dfaa39 83f9314 442cd08 5dfaa39 442cd08 5dfaa39 7c5f615 | 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 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 | #!/bin/bash
set -e
export REPO_ID="alpgul/mcp-settings"
# ---------- 1. Environment ----------
DB_PATH="./data/webui.db"
SUM_NEW="./data/webui.db.sha256.new"
SUM_OLD="./data/webui.db.sha256"
mkdir -p ./data
# ---------- 2. Python dependency ----------
PYTHON_CMD="python3"
if ! command -v "$PYTHON_CMD" >/dev/null; then
echo "Python not found β please install python3 on the system."
exit 1
fi
# ---------- 3. Initial restore from Hugging Face ----------
restore_from_hf() {
echo "Downloading webui.db from Hugging Face..."
"$PYTHON_CMD" - <<'PY'
import os, sys
from huggingface_hub import HfApi
api = HfApi(token=os.getenv("HF_TOKEN"))
repo_id = os.getenv("REPO_ID")
path = "./data/webui.db"
try:
api.hf_hub_download(repo_id=repo_id, filename="webui.db", repo_type="dataset",
local_dir="./data")
if os.path.exists(path):
print(f"Restore from HF successful - File found at {path}")
else:
print(f"Download completed but file not found at {path}")
sys.exit(1)
except Exception as e:
print(f"Download from HF failed: {e}")
sys.exit(1)
PY
}
if [ -n "${HF_TOKEN:-}" ]; then
if [ ! -f "$DB_PATH" ]; then
restore_from_hf || echo "No existing file β a new one will be created later."
fi
else
echo "HF_TOKEN not set β skipping restore."
fi
# ---------- 4. SHA256 checksum ----------
generate_sum() { sha256sum "$1" > "$2"; }
# ---------- 5. Synchronization loop ----------
sync_loop() {
while true; do
echo "=== $(date '+%Y-%m-%d %H:%M:%S') β Starting sync ==="
if [ -f "$DB_PATH" ]; then
generate_sum "$DB_PATH" "$SUM_NEW"
if [ ! -f "$SUM_OLD" ] || ! cmp -s "$SUM_NEW" "$SUM_OLD"; then
echo "File changed β uploading to Hugging Face..."
mv "$SUM_NEW" "$SUM_OLD"
# ---- Upload via Python ----
"$PYTHON_CMD" - <<'PY'
import os, sys, datetime
from huggingface_hub import HfApi
api = HfApi(token=os.getenv("HF_TOKEN"))
repo_id = os.getenv("REPO_ID")
db_path = "./data/webui.db"
try:
api.upload_file(
path_or_fileobj=db_path,
path_in_repo="webui.db",
repo_id=repo_id,
repo_type="dataset",
commit_message=f"Auto sync @ {datetime.datetime.utcnow().isoformat()} UTC"
)
print("Upload to HF successful")
except Exception as e:
print(f"HF upload error: {e}")
PY
# ---- Daily dated backup (00:00) ----
HOUR=$(date +%H)
if [ "$HOUR" = "00" ]; then
YEST=$(date -d "yesterday" '+%Y%m%d')
DAILY="webui_${YEST}.db"
echo "Daily backup β $DAILY"
"$PYTHON_CMD" - <<'PY'
import os, datetime
from huggingface_hub import HfApi
api = HfApi(token=os.getenv("HF_TOKEN"))
repo_id = os.getenv("REPO_ID")
src = "./data/webui.db"
dst = f"webui_{(datetime.date.today()-datetime.timedelta(days=1)):%Y%m%d}.db"
api.upload_file(
path_or_fileobj=src,
path_in_repo=dst,
repo_id=repo_id,
repo_type="dataset",
commit_message=f"Daily backup {dst}"
)
print(f"Daily backup uploaded: {dst}")
PY
fi
else
echo "No changes detected β skipping."
rm -f "$SUM_NEW"
fi
else
echo "webui.db not found β sync skipped."
fi
echo "Next check: $(date -d '+5 minutes' '+%Y-%m-%d %H:%M:%S')"
sleep 300
done
}
# ---------- 6. Run in background ----------
sync_loop &
echo "Sync running in background (PID: $!)" |