import time from framework.core.base_api import BaseAPI from framework.config.settings import Config from framework.core.logger import get_logger from framework.models.result import StepResult logger = get_logger("DevMachineService") class DevMachineService(BaseAPI): def __init__(self): super().__init__(Config.BASE_URL, Config.AUTH_TOKEN, Config.COOKIE) def create_machine(self, name): """创建开发机""" body = { "displayName": name, "imageID": Config.DevMachine.IMAGE_ID, "skuID": Config.DevMachine.SKU_ID, "sshPublicKey": Config.DevMachine.SSH_KEY, "systemDiskSize": Config.DevMachine.DISK_SIZE, "sourceDir": "", } headers = self.get_common_headers("/dev-machine") headers["content-type"] = "application/json" data = self.request("POST", "/api/artificerApi/devMachine/createInstance", headers=headers, json=body) instance_id = data.get("data", {}).get("instanceId") or data.get("instanceId") return instance_id def stop_machine(self, instance_id): """关机""" body = {"instanceId": instance_id} return self.request("POST", "/api/artificerApi/devMachine/stopInstance", json=body) def start_machine(self, instance_id): """开机""" body = {"instanceId": instance_id} return self.request("POST", "/api/artificerApi/devMachine/startInstance", json=body) def delete_machine(self, instance_id): """删除""" body = {"instanceId": instance_id} return self.request("POST", "/api/artificerApi/devMachine/deleteInstance", json=body) def run_lifecycle_test(self, name, progress_callback=None): results = [] instance_id = None def _log(msg): logger.info(msg) if progress_callback: progress_callback(msg) try: _log(f"Step 1: 创建 {name}") t0 = time.time() instance_id = self.create_machine(name) results.append(StepResult("创建开发机", True, "成功", time.time()-t0)) time.sleep(Config.WAIT['create']) _log("Step 2: 关机") t0 = time.time() self.stop_machine(instance_id) results.append(StepResult("关机开发机", True, "成功", time.time()-t0)) time.sleep(Config.WAIT['stop']) _log("Step 3: 开机") t0 = time.time() self.start_machine(instance_id) results.append(StepResult("开机开发机", True, "成功", time.time()-t0)) time.sleep(Config.WAIT['start']) _log("Step 4: 删除") t0 = time.time() self.delete_machine(instance_id) results.append(StepResult("删除开发机", True, "成功", time.time()-t0)) except Exception as e: logger.error(f"Flow failed: {e}") results.append(StepResult("执行中止", False, str(e))) return results, instance_id or "N/A"