Commit 3d032fa0 by HlQ

[add]

1.添加升级日志上传和获取接口
2.添加统一升级指令接口
1 parent a0ef9ded
...@@ -63,7 +63,7 @@ public class LogAspect { ...@@ -63,7 +63,7 @@ public class LogAspect {
request.getRequestURI(), request.getRequestURI(),
request.getMethod(), request.getMethod(),
ip, ip,
IPUtil.getIp(ip), IPUtil.getAddr(ip),
username, username,
args, args,
StrUtil.replaceChars(ServletUtil.getBody(request), " \r\n", "") StrUtil.replaceChars(ServletUtil.getBody(request), " \r\n", "")
......
...@@ -7,10 +7,14 @@ public class MqttTopic { ...@@ -7,10 +7,14 @@ public class MqttTopic {
public final static String STORE_OTA_TOPIC = "/SA/{}/ota"; public final static String STORE_OTA_TOPIC = "/SA/{}/ota";
//store agent 服务列表监听 //store agent 服务列表监听
public final static String STORE_SERVICE_TOPIC = "/SA/{}/service/push"; 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 事件监听 //mall agent 事件监听
public final static String MALL_EVENT_TOPIC = "/MA/{}/event/push"; public final static String MALL_EVENT_TOPIC = "/MA/{}/event/push";
//mall agent 升级监听 //mall agent 升级监听
public final static String MALL_OTA_TOPIC = "/MA/{}/ota"; public final static String MALL_OTA_TOPIC = "/MA/{}/ota";
//mall agent 服务列表监听 //mall agent 服务列表监听
public final static String MALL_SERVICE_TOPIC = "/MA/{}/service/push"; 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; ...@@ -9,7 +9,9 @@ import vion.dto.monitor.AgentDTO;
import vion.model.monitor.AgentRecord; import vion.model.monitor.AgentRecord;
import vion.model.monitor.RAgentService; import vion.model.monitor.RAgentService;
import vion.model.monitor.ServiceInfo; import vion.model.monitor.ServiceInfo;
import vion.model.monitor.UpgradeInfo;
import vion.service.monitor.IAgentService; import vion.service.monitor.IAgentService;
import vion.service.monitor.IUpgradeInfoService;
import vion.vo.monitor.AgentVO; import vion.vo.monitor.AgentVO;
import java.time.LocalDateTime; import java.time.LocalDateTime;
...@@ -24,7 +26,9 @@ import java.util.List; ...@@ -24,7 +26,9 @@ import java.util.List;
public class AgentController { public class AgentController {
private final IAgentService agentService; private final IAgentService agentService;
private final IUpgradeInfoService upgradeInfoService;
// region agent 删改查
@GetMapping @GetMapping
@SaCheckPermission(value = "agent:list", orRole = "admin") @SaCheckPermission(value = "agent:list", orRole = "admin")
public Page<AgentVO> list(AgentDTO dto) { public Page<AgentVO> list(AgentDTO dto) {
...@@ -49,13 +53,39 @@ public class AgentController { ...@@ -49,13 +53,39 @@ public class AgentController {
public String remove(@PathVariable Long id) { public String remove(@PathVariable Long id) {
return agentService.removeById(id) ? "删除成功" : "删除失败"; return agentService.removeById(id) ? "删除成功" : "删除失败";
} }
// endregion
// region agent 升级
@PostMapping("/upgrade/{uid}") @PostMapping("/upgrade/{uid}")
@SaCheckPermission(value = "agent:upgrade", orRole = "admin") @SaCheckPermission(value = "agent:upgrade", orRole = "admin")
public String upgradeCommand(@PathVariable String uid, Long upgradeId) { public String upgradeCommand(@PathVariable String uid, Long upgradeId) {
return agentService.upgradeCommand(uid, 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}") @GetMapping("/service/{uid}")
@SaCheckPermission(value = "agent:service:query", orRole = "admin") @SaCheckPermission(value = "agent:service:query", orRole = "admin")
public List<ServiceInfo> getServicesByUid(@PathVariable String uid) { public List<ServiceInfo> getServicesByUid(@PathVariable String uid) {
...@@ -85,6 +115,7 @@ public class AgentController { ...@@ -85,6 +115,7 @@ public class AgentController {
public String assign(@PathVariable String uid, @RequestBody List<ServiceInfo> serviceInfoList) { public String assign(@PathVariable String uid, @RequestBody List<ServiceInfo> serviceInfoList) {
return agentService.assign(uid, serviceInfoList); return agentService.assign(uid, serviceInfoList);
} }
// endregion
@GetMapping("/form/{uid}") @GetMapping("/form/{uid}")
@SaCheckPermission(value = "agent:form", orRole = "admin") @SaCheckPermission(value = "agent:form", orRole = "admin")
......
...@@ -3,11 +3,9 @@ package vion.controller.mqtt; ...@@ -3,11 +3,9 @@ package vion.controller.mqtt;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import vion.dto.monitor.OrgDTO; import vion.dto.monitor.OrgDTO;
import vion.model.monitor.Agent; import vion.model.monitor.*;
import vion.model.monitor.AgentRecord;
import vion.model.monitor.ServiceRecord;
import vion.model.monitor.Upgrade;
import vion.service.monitor.IAgentService; import vion.service.monitor.IAgentService;
import vion.service.monitor.IUpgradeInfoService;
import java.util.List; import java.util.List;
...@@ -21,6 +19,7 @@ import java.util.List; ...@@ -21,6 +19,7 @@ import java.util.List;
public class MonitorController { public class MonitorController {
private final IAgentService agentService; private final IAgentService agentService;
private final IUpgradeInfoService upgradeInfoService;
/** /**
* Agent 注册 * Agent 注册
...@@ -44,6 +43,11 @@ public class MonitorController { ...@@ -44,6 +43,11 @@ public class MonitorController {
return agentService.getUpgradeInfo(id); return agentService.getUpgradeInfo(id);
} }
@PostMapping("/upgrade/info")
public String reportUpgradeInfo(@RequestBody UpgradeInfo upgradeInfo) {
return upgradeInfoService.save(upgradeInfo) ? "success" : "error";
}
/** /**
* Agent 发送服务器信息 * 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 \ 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 \ No newline at end of file
...@@ -22,6 +22,7 @@ import org.springframework.beans.factory.annotation.Value; ...@@ -22,6 +22,7 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import vion.constant.MqttMessageType; import vion.constant.MqttMessageType;
import vion.constant.MqttTopic;
import vion.dto.monitor.AgentDTO; import vion.dto.monitor.AgentDTO;
import vion.dto.monitor.MqttAuthDTO; import vion.dto.monitor.MqttAuthDTO;
import vion.dto.monitor.OrgDTO; import vion.dto.monitor.OrgDTO;
...@@ -30,6 +31,7 @@ import vion.model.monitor.*; ...@@ -30,6 +31,7 @@ import vion.model.monitor.*;
import vion.service.monitor.*; import vion.service.monitor.*;
import vion.utils.JsonUtil; import vion.utils.JsonUtil;
import vion.utils.TopicUtil; import vion.utils.TopicUtil;
import vion.utils.ip.IPUtil;
import vion.vo.monitor.AgentVO; import vion.vo.monitor.AgentVO;
import java.time.LocalDateTime; import java.time.LocalDateTime;
...@@ -99,9 +101,9 @@ public class AgentServiceImpl extends MPJBaseServiceImpl<AgentMapper, Agent> imp ...@@ -99,9 +101,9 @@ public class AgentServiceImpl extends MPJBaseServiceImpl<AgentMapper, Agent> imp
.collect(Collectors.toMap( .collect(Collectors.toMap(
Map.Entry::getKey, Map.Entry::getKey,
entry -> entry.getValue().stream() entry -> entry.getValue().stream()
.map(rec -> (rec.getStatus() != 200 .map(rec -> (rec.getStatus() == 200
|| rec.getResponseTime() > 1000L && rec.getResponseTime() < 1000L
|| (rec.getBodyCode() != 200 || rec.getBodyStatus())) ? rec.getName() : "success") && (rec.getBodyCode() == 200 || rec.getBodyStatus())) ? "success" : rec.getName())
.distinct() .distinct()
.filter(StrUtil::isNotBlank) .filter(StrUtil::isNotBlank)
.collect(Collectors.joining(",")) .collect(Collectors.joining(","))
...@@ -142,6 +144,20 @@ public class AgentServiceImpl extends MPJBaseServiceImpl<AgentMapper, Agent> imp ...@@ -142,6 +144,20 @@ public class AgentServiceImpl extends MPJBaseServiceImpl<AgentMapper, Agent> imp
} }
@Override @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) { public List<ServiceInfo> getServicesByUid(String uid) {
var wrapper = new MPJLambdaWrapper<ServiceInfo>() var wrapper = new MPJLambdaWrapper<ServiceInfo>()
.selectAs(RAgentService::getId, ServiceInfo::getId) .selectAs(RAgentService::getId, ServiceInfo::getId)
...@@ -446,7 +462,11 @@ public class AgentServiceImpl extends MPJBaseServiceImpl<AgentMapper, Agent> imp ...@@ -446,7 +462,11 @@ public class AgentServiceImpl extends MPJBaseServiceImpl<AgentMapper, Agent> imp
log.info("Monitor Server 连接 Mqtt Server 成功. clientid:{}, ip:{}", clientid, ip); log.info("Monitor Server 连接 Mqtt Server 成功. clientid:{}, ip:{}", clientid, ip);
return; 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); 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> { ...@@ -29,6 +29,10 @@ public interface IAgentService extends MPJBaseService<Agent> {
String upgradeCommand(String uid, Long upgradeId); String upgradeCommand(String uid, Long upgradeId);
String upgradeStoreCommand(Long upgradeId);
String upgradeMallCommand(Long upgradeId);
List<ServiceInfo> getServicesByUid(String uid); List<ServiceInfo> getServicesByUid(String uid);
String saveServicesByUid(String uid, @RequestBody List<ServiceInfo> ServiceInfoList); 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 { ...@@ -189,7 +189,7 @@ public class IPUtil {
put(36492, "谷歌云"); put(36492, "谷歌云");
}}; }};
public static String getIp(String ip) { public static String getAddr(String ip) {
var cityDB = FileUtil.file(cityPath); var cityDB = FileUtil.file(cityPath);
var asnDB = FileUtil.file(asnPath); var asnDB = FileUtil.file(asnPath);
try (DatabaseReader cityReader = new DatabaseReader.Builder(cityDB) 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!