82 lines
3.1 KiB
Python
82 lines
3.1 KiB
Python
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"
|