package com.xcong.excoin.modules.station.controller;
|
|
import com.xcong.excoin.common.response.Result;
|
import com.xcong.excoin.modules.station.model.InstanceInfo;
|
import com.xcong.excoin.modules.station.registry.InstanceRegistry;
|
import com.xcong.excoin.modules.station.service.StationService;
|
import io.swagger.annotations.Api;
|
import io.swagger.annotations.ApiOperation;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.web.bind.annotation.*;
|
|
import javax.annotation.Resource;
|
import java.util.Collection;
|
|
/**
|
* Station 管理接口 — 实例列表 / 启停 / 状态 / 事件查询
|
*/
|
@Slf4j
|
@Api(value = "Gate 策略管理", tags = "Gate 策略管理")
|
@RestController
|
@RequestMapping("/api/gate/station")
|
public class StationController {
|
|
@Resource
|
private InstanceRegistry instanceRegistry;
|
|
@Resource
|
private StationService stationService;
|
|
@ApiOperation("获取所有在线 JAR 实例")
|
@GetMapping("/list")
|
public Result list() {
|
// 内存注册表只维护心跳信息,别名从 DB 合并(心跳重建实例对象时不会丢失)
|
Collection<InstanceInfo> instances = instanceRegistry.list();
|
for (InstanceInfo info : instances) {
|
info.setAliasName(stationService.getAlias(info.getApiKeyMd5()));
|
}
|
return Result.ok(instances);
|
}
|
|
@ApiOperation("获取单个实例状态")
|
@GetMapping("/status")
|
public Result status(@RequestParam String apiKeyMd5) {
|
InstanceInfo info = instanceRegistry.get(apiKeyMd5);
|
if (info != null) {
|
info.setAliasName(stationService.getAlias(apiKeyMd5));
|
}
|
return Result.ok(info);
|
}
|
|
@ApiOperation("编辑实例别名(空白 = 清除别名)")
|
@PostMapping("/alias")
|
public Result saveAlias(@RequestParam String apiKeyMd5,
|
@RequestParam(required = false) String alias) {
|
stationService.saveAlias(apiKeyMd5, alias);
|
return Result.ok("别名已保存");
|
}
|
|
@ApiOperation("启动指定 apiKeyMd5 的策略")
|
@PostMapping("/start")
|
public Result start(@RequestParam String apiKeyMd5) {
|
stationService.startByMd5(apiKeyMd5);
|
return Result.ok("指令已发送");
|
}
|
|
@ApiOperation("停止指定 apiKeyMd5 的策略")
|
@PostMapping("/stop")
|
public Result stop(@RequestParam String apiKeyMd5) {
|
stationService.stopByMd5(apiKeyMd5);
|
return Result.ok("指令已发送");
|
}
|
|
@ApiOperation("查询策略事件日志")
|
@GetMapping("/events")
|
public Result events(@RequestParam String apiKeyMd5) {
|
return Result.ok(stationService.getEvents(apiKeyMd5));
|
}
|
|
@ApiOperation("查询策略实时状态")
|
@GetMapping("/strategy-status")
|
public Result strategyStatus(@RequestParam String apiKeyMd5) {
|
return Result.ok(stationService.getStrategyStatus(apiKeyMd5));
|
}
|
|
@ApiOperation("更新策略参数(仅持久化,需手动启动生效)")
|
@PostMapping("/config")
|
public Result updateConfig(@RequestParam String apiKeyMd5, @RequestBody java.util.Map<String, Object> params) {
|
stationService.updateConfig(apiKeyMd5, params);
|
return Result.ok("参数已保存,请手动点击「启动」使新配置生效");
|
}
|
}
|