Commit 3d032fa0 by HlQ

[add]

1.添加升级日志上传和获取接口
2.添加统一升级指令接口
1 parent a0ef9ded
......@@ -63,7 +63,7 @@ public class LogAspect {
request.getRequestURI(),
request.getMethod(),
ip,
IPUtil.getIp(ip),
IPUtil.getAddr(ip),
username,
args,
StrUtil.replaceChars(ServletUtil.getBody(request), " \r\n", "")
......
......@@ -7,10 +7,14 @@ public class MqttTopic {
public final static String STORE_OTA_TOPIC = "/SA/{}/ota";
//store agent 服务列表监听
public final static String STORE_SERVICE_TOPIC = "/SA/{}/service/push";
//所有 store agent 统一升级
public final static String STORE_ALL_OTA_TOPIC = "/SA/all/ota";
//mall agent 事件监听
public final static String MALL_EVENT_TOPIC = "/MA/{}/event/push";
//mall agent 升级监听
public final static String MALL_OTA_TOPIC = "/MA/{}/ota";
//mall agent 服务列表监听
public final static String MALL_SERVICE_TOPIC = "/MA/{}/service/push";
//所有 mall agent 统一升级
public final static String MALL_ALL_OTA_TOPIC = "/MA/all/ota";
}
......@@ -9,7 +9,9 @@ import vion.dto.monitor.AgentDTO;
import vion.model.monitor.AgentRecord;
import vion.model.monitor.RAgentService;
import vion.model.monitor.ServiceInfo;
import vion.model.monitor.UpgradeInfo;
import vion.service.monitor.IAgentService;
import vion.service.monitor.IUpgradeInfoService;
import vion.vo.monitor.AgentVO;
import java.time.LocalDateTime;
......@@ -24,7 +26,9 @@ import java.util.List;
public class AgentController {
private final IAgentService agentService;
private final IUpgradeInfoService upgradeInfoService;
// region agent 删改查
@GetMapping
@SaCheckPermission(value = "agent:list", orRole = "admin")
public Page<AgentVO> list(AgentDTO dto) {
......@@ -49,13 +53,39 @@ public class AgentController {
public String remove(@PathVariable Long id) {
return agentService.removeById(id) ? "删除成功" : "删除失败";
}
// endregion
// region agent 升级
@PostMapping("/upgrade/{uid}")
@SaCheckPermission(value = "agent:upgrade", orRole = "admin")
public String upgradeCommand(@PathVariable String uid, Long upgradeId) {
return agentService.upgradeCommand(uid, upgradeId);
}
@PostMapping("/upgrade/store")
@SaCheckPermission(value = "agent:upgrade:store", orRole = "admin")
public String upgradeStoreCommand(Long upgradeId) {
return agentService.upgradeStoreCommand(upgradeId);
}
@PostMapping("/upgrade/mall")
@SaCheckPermission(value = "agent:upgrade:mall", orRole = "admin")
public String upgradeMallCommand(Long upgradeId) {
return agentService.upgradeMallCommand(upgradeId);
}
@GetMapping("/upgrade/info/{uid}")
@SaCheckPermission(value = "agent:upgrade:info", orRole = "admin")
public List<UpgradeInfo> getUpgradeInfoByUid(@PathVariable String uid, String version) {
return upgradeInfoService.lambdaQuery()
.eq(UpgradeInfo::getAgentUid, uid)
.eq(UpgradeInfo::getVersion, version)
.orderByDesc(UpgradeInfo::getReportTime)
.list();
}
// endregion
// region agent 关联服务相关接口
@GetMapping("/service/{uid}")
@SaCheckPermission(value = "agent:service:query", orRole = "admin")
public List<ServiceInfo> getServicesByUid(@PathVariable String uid) {
......@@ -85,6 +115,7 @@ public class AgentController {
public String assign(@PathVariable String uid, @RequestBody List<ServiceInfo> serviceInfoList) {
return agentService.assign(uid, serviceInfoList);
}
// endregion
@GetMapping("/form/{uid}")
@SaCheckPermission(value = "agent:form", orRole = "admin")
......
......@@ -3,11 +3,9 @@ package vion.controller.mqtt;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import vion.dto.monitor.OrgDTO;
import vion.model.monitor.Agent;
import vion.model.monitor.AgentRecord;
import vion.model.monitor.ServiceRecord;
import vion.model.monitor.Upgrade;
import vion.model.monitor.*;
import vion.service.monitor.IAgentService;
import vion.service.monitor.IUpgradeInfoService;
import java.util.List;
......@@ -21,6 +19,7 @@ import java.util.List;
public class MonitorController {
private final IAgentService agentService;
private final IUpgradeInfoService upgradeInfoService;
/**
* Agent 注册
......@@ -44,6 +43,11 @@ public class MonitorController {
return agentService.getUpgradeInfo(id);
}
@PostMapping("/upgrade/info")
public String reportUpgradeInfo(@RequestBody UpgradeInfo upgradeInfo) {
return upgradeInfoService.save(upgradeInfo) ? "success" : "error";
}
/**
* Agent 发送服务器信息
*
......
package vion.mapper.monitor;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import vion.model.monitor.UpgradeInfo;
/**
* @author vion
* @date 2024/11/24
*/
public interface UpgradeInfoMapper extends BaseMapper<UpgradeInfo> {
}
\ No newline at end of file
package vion.model.monitor;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Getter;
import lombok.Setter;
import java.time.LocalDateTime;
/**
* @author vion
* @date 2024/11/24
*/
@Getter
@Setter
@TableName(value = "m_upgrade_info")
public class UpgradeInfo {
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@TableField(value = "agent_uid")
private String agentUid;
/**
* 版本号
*/
@TableField(value = "version")
private String version;
/**
* 内容
*/
@TableField(value = "content")
private String content;
/**
* 上报时间
*/
@TableField(value = "report_time")
private LocalDateTime reportTime;
@TableField(value = "create_time", fill = FieldFill.INSERT)
private LocalDateTime createTime;
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
}
\ No newline at end of file
......@@ -22,6 +22,7 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import vion.constant.MqttMessageType;
import vion.constant.MqttTopic;
import vion.dto.monitor.AgentDTO;
import vion.dto.monitor.MqttAuthDTO;
import vion.dto.monitor.OrgDTO;
......@@ -30,6 +31,7 @@ import vion.model.monitor.*;
import vion.service.monitor.*;
import vion.utils.JsonUtil;
import vion.utils.TopicUtil;
import vion.utils.ip.IPUtil;
import vion.vo.monitor.AgentVO;
import java.time.LocalDateTime;
......@@ -99,9 +101,9 @@ public class AgentServiceImpl extends MPJBaseServiceImpl<AgentMapper, Agent> imp
.collect(Collectors.toMap(
Map.Entry::getKey,
entry -> entry.getValue().stream()
.map(rec -> (rec.getStatus() != 200
|| rec.getResponseTime() > 1000L
|| (rec.getBodyCode() != 200 || rec.getBodyStatus())) ? rec.getName() : "success")
.map(rec -> (rec.getStatus() == 200
&& rec.getResponseTime() < 1000L
&& (rec.getBodyCode() == 200 || rec.getBodyStatus())) ? "success" : rec.getName())
.distinct()
.filter(StrUtil::isNotBlank)
.collect(Collectors.joining(","))
......@@ -142,6 +144,20 @@ public class AgentServiceImpl extends MPJBaseServiceImpl<AgentMapper, Agent> imp
}
@Override
public String upgradeStoreCommand(Long upgradeId) {
var node = JsonUtil.createObj().put("upgradeId", upgradeId);
client.publish(MqttTopic.STORE_ALL_OTA_TOPIC, JsonUtil.toJsonByte(node), MqttQoS.QOS2);
return "升级指令下发成功,请稍后查看Agent版本号";
}
@Override
public String upgradeMallCommand(Long upgradeId) {
var node = JsonUtil.createObj().put("upgradeId", upgradeId);
client.publish(MqttTopic.MALL_ALL_OTA_TOPIC, JsonUtil.toJsonByte(node), MqttQoS.QOS2);
return "升级指令下发成功,请稍后查看Agent版本号";
}
@Override
public List<ServiceInfo> getServicesByUid(String uid) {
var wrapper = new MPJLambdaWrapper<ServiceInfo>()
.selectAs(RAgentService::getId, ServiceInfo::getId)
......@@ -446,7 +462,11 @@ public class AgentServiceImpl extends MPJBaseServiceImpl<AgentMapper, Agent> imp
log.info("Monitor Server 连接 Mqtt Server 成功. clientid:{}, ip:{}", clientid, ip);
return;
}
this.lambdaUpdate().set(Agent::getStatus, 1).set(Agent::getIpaddr, ip).eq(Agent::getUid, clientid).update(new Agent());
this.lambdaUpdate().set(Agent::getStatus, 1)
.set(Agent::getIpaddr, ip)
.set(Agent::getAddr, IPUtil.getAddr(ip))
.eq(Agent::getUid, clientid)
.update(new Agent());
log.info("Agent 连接 Mqtt Server 成功. clientid:{}, ip:{}", clientid, ip);
}
......
package vion.service.impl.monitor;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import vion.mapper.monitor.UpgradeInfoMapper;
import vion.model.monitor.UpgradeInfo;
import vion.service.monitor.IUpgradeInfoService;
/**
* @author vion
* @date 2024/11/24
*/
@Service
public class UpgradeInfoServiceImpl extends ServiceImpl<UpgradeInfoMapper, UpgradeInfo> implements IUpgradeInfoService {
}
......@@ -29,6 +29,10 @@ public interface IAgentService extends MPJBaseService<Agent> {
String upgradeCommand(String uid, Long upgradeId);
String upgradeStoreCommand(Long upgradeId);
String upgradeMallCommand(Long upgradeId);
List<ServiceInfo> getServicesByUid(String uid);
String saveServicesByUid(String uid, @RequestBody List<ServiceInfo> ServiceInfoList);
......
package vion.service.monitor;
import com.baomidou.mybatisplus.extension.service.IService;
import vion.model.monitor.UpgradeInfo;
/**
* @author vion
* @date 2024/11/24
*/
public interface IUpgradeInfoService extends IService<UpgradeInfo>{
}
......@@ -189,7 +189,7 @@ public class IPUtil {
put(36492, "谷歌云");
}};
public static String getIp(String ip) {
public static String getAddr(String ip) {
var cityDB = FileUtil.file(cityPath);
var asnDB = FileUtil.file(asnPath);
try (DatabaseReader cityReader = new DatabaseReader.Builder(cityDB)
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!