2025-04-10 17:31:33 +08:00

109 lines
3.6 KiB
Python

import os
import subprocess
import multiprocessing
from fastapi import FastAPI
from common import util
from fastapi.staticfiles import StaticFiles
from fastapi.middleware.cors import CORSMiddleware
git_server_ip = "10.10.60.69"
git_server_ip = "127.0.0.1"
logger = util.Util().get_logger("backup_server_log.txt")
archives_dir = "/mnt/data/archives"
repo_url = "ssh://git@{}:2222/open_eigencomm/ec718_716_sdk_release.git".format(
git_server_ip)
repo_dir_name = "ec718_716_sdk_release"
app = FastAPI()
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
os.makedirs(archives_dir, exist_ok=True)
app.mount("/archives",
StaticFiles(directory=archives_dir), name="archives")
def checkout(repo: str, commit_id: str, backup_server_log_file) -> int:
global repo_url, repo_dir_name
os.makedirs(os.path.join(archives_dir, "release"), exist_ok=True)
os.makedirs(os.path.join(archives_dir, "original"), exist_ok=True)
clone_cmd = "cd {} && rm -rf {} && git clone {} && cd {} && git checkout {}".format(
os.path.join(archives_dir, repo), repo_dir_name, repo_url, repo_dir_name, commit_id)
logger.debug("clone_cmd = {}".format(clone_cmd))
logger.debug("clone repo...")
p = subprocess.run(clone_cmd, shell=True,
text=True, stdout=backup_server_log_file, stderr=backup_server_log_file, encoding="utf-8", errors="ignore")
return p.returncode
def backup_process(repo: str, commit_id: str):
global repo_url, repo_dir_name
with open("/mnt/data/archives/backup_server_log.txt", mode='a', encoding="utf-8", errors="ignore") as backup_server_log_file:
if repo == "release":
repo_url = "ssh://git@{}:2222/open_eigencomm/ec718_716_sdk_release.git".format(
git_server_ip)
repo_dir_name = "ec718_716_sdk_release"
elif repo == "original":
repo_url = "ssh://git@{}:2222/open_eigencomm/ec7xx_sdk_org.git".format(
git_server_ip)
repo_dir_name = "ec7xx_sdk_org"
else:
logger.debug("Only support release and original repo")
return
if checkout(repo, commit_id, backup_server_log_file) != 0:
logger.debug("checkout fail")
return
else:
logger.debug("checkout success")
backup_cmd = "cd {} && rm -rf {}/.git && zip -r {}.zip {} && rm -rf {}".format(
os.path.join(archives_dir, repo), repo_dir_name, commit_id, repo_dir_name, repo_dir_name)
logger.debug("backup_cmd = {}".format(backup_cmd))
logger.debug("backup repo...")
p = subprocess.run(backup_cmd, shell=True,
text=True, stdout=backup_server_log_file, stderr=backup_server_log_file, encoding="utf-8", errors="ignore")
if p.returncode != 0:
logger.debug("backup fail")
return
else:
logger.debug("backup success")
@app.get("/backup/{repo}/{commit_id}")
def backup(repo: str, commit_id: str):
p = multiprocessing.Process(target=backup_process, args=(repo, commit_id))
p.start()
# p.join()
return "backup start"
@app.get("/backup_collection")
def backup_collection():
original_dir = '/mnt/data/archives/original'
release_dir = '/mnt/data/archives/release'
original_files = [os.path.join(original_dir, file)
for file in os.listdir(original_dir)]
release_files = [os.path.join(release_dir, file)
for file in os.listdir(release_dir)]
return original_files + release_files