Commit 2b6d94f8 authored by zhanghouying's avatar zhanghouying
Browse files

实现第一版服务器监控

parent aaa373bd
package me.zhengjie.modules.monitor.domain;
import lombok.Data;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import javax.persistence.*;
import java.io.Serializable;
/**
* @author Zhang houying
* @date 2019-11-03
*/
@Entity
@Data
@Table(name="monitor_server")
public class Server implements Serializable {
/**
* 编号
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;
/**
* 名称
*/
@Column(name = "name")
private String name;
/**
* IP地址
*/
@Column(name = "ip",nullable = false)
private String ip;
/**
* 访问端口
*/
@Column(name = "port")
private Integer port;
/**
* 状态
*/
@Column(name = "state")
private String state;
/**
* CPU使用率
*/
@Column(name = "cpu_rate")
private Double cpuRate;
/**
* CPU内核数
*/
@Column(name = "cpu_core")
private Integer cpuCore;
/**
* 内存总数
*/
@Column(name = "mem_total")
private Double memTotal;
/**
* 内存使用量
*/
@Column(name = "mem_used")
private Double memUsed;
/**
* 磁盘总量
*/
@Column(name = "disk_total")
private Double diskTotal;
/**
* 磁盘使用量
*/
@Column(name = "disk_used")
private Double diskUsed;
/**
* 交换区总量
*/
@Column(name = "swap_total")
private Double swapTotal;
/**
* 交换区使用量
*/
@Column(name = "swap_used")
private Double swapUsed;
/**
* 排序
*/
@Column(name = "sort")
private Integer sort;
public void copy(Server source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
}
}
package me.zhengjie.modules.monitor.repository;
import me.zhengjie.modules.monitor.domain.Server;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
/**
* @author Zhang houying
* @date 2019-11-03
*/
public interface ServerRepository extends JpaRepository<Server, Integer>, JpaSpecificationExecutor<Server> {
}
package me.zhengjie.modules.monitor.rest;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import me.zhengjie.aop.log.Log;
import me.zhengjie.modules.monitor.domain.Server;
import me.zhengjie.modules.monitor.service.ServerService;
import me.zhengjie.modules.monitor.service.dto.ServerQueryCriteria;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* @author Zhang houying
* @date 2019-11-03
*/
@Api(tags = "Server管理")
@RestController
@RequestMapping("/api/server")
public class ServerController {
private final ServerService serverService;
public ServerController(ServerService serverService) {
this.serverService = serverService;
}
@GetMapping
@Log("查询Server")
@ApiOperation("查询Server")
@PreAuthorize("@el.check('server:list')")
public ResponseEntity getServers(ServerQueryCriteria criteria, Pageable pageable){
return new ResponseEntity<>(serverService.queryAll(criteria,pageable),HttpStatus.OK);
}
@PostMapping
@Log("新增Server")
@ApiOperation("新增Server")
@PreAuthorize("@el.check('server:add')")
public ResponseEntity create(@Validated @RequestBody Server resources){
return new ResponseEntity<>(serverService.create(resources),HttpStatus.CREATED);
}
@PutMapping
@Log("修改Server")
@ApiOperation("修改Server")
@PreAuthorize("@el.check('server:edit')")
public ResponseEntity update(@Validated @RequestBody Server resources){
serverService.update(resources);
return new ResponseEntity(HttpStatus.NO_CONTENT);
}
@DeleteMapping(value = "/{id}")
@Log("删除Server")
@ApiOperation("删除Server")
@PreAuthorize("@el.check('server:del')")
public ResponseEntity delete(@PathVariable Integer id){
serverService.delete(id);
return new ResponseEntity(HttpStatus.OK);
}
}
package me.zhengjie.modules.monitor.service;
import me.zhengjie.modules.monitor.domain.Server;
import me.zhengjie.modules.monitor.service.dto.ServerDTO;
import me.zhengjie.modules.monitor.service.dto.ServerQueryCriteria;
import org.springframework.data.domain.Pageable;
import java.util.List;
import java.util.Map;
/**
* @author Zhang houying
* @date 2019-11-03
*/
public interface ServerService {
/**
* 查询数据分页
* @param criteria 条件参数
* @param pageable 分页参数
* @return Map<String,Object>
*/
Map<String,Object> queryAll(ServerQueryCriteria criteria, Pageable pageable);
/**
* 查询所有数据不分页
* @param criteria 条件参数
* @return List<ServerDTO>
*/
List<ServerDTO> queryAll(ServerQueryCriteria criteria);
/**
* 根据ID查询
* @param id ID
* @return ServerDTO
*/
ServerDTO findById(Integer id);
ServerDTO create(Server resources);
void update(Server resources);
void delete(Integer id);
}
package me.zhengjie.modules.monitor.service.dto;
import lombok.Data;
import java.io.Serializable;
/**
* @author Zhang houying
* @date 2019-11-03
*/
@Data
public class ServerDTO implements Serializable {
// 编号
private Integer id;
// 名称
private String name;
// IP地址
private String ip;
// 访问端口
private Integer port;
// 状态
private String state;
// CPU使用率
private Float cpuRate;
// CPU内核数
private Integer cpuCore;
// 内存总数
private Float memTotal;
// 内存使用量
private Float memUsed;
// 磁盘总量
private Float diskTotal;
// 磁盘使用量
private Float diskUsed;
// 交换区总量
private Float swapTotal;
// 交换区使用量
private Float swapUsed;
// 排序
private Integer sort;
}
package me.zhengjie.modules.monitor.service.dto;
import lombok.Data;
import me.zhengjie.annotation.Query;
/**
* @author Zhang houying
* @date 2019-11-03
*/
@Data
public class ServerQueryCriteria{
// 模糊
@Query(type = Query.Type.INNER_LIKE)
private String name;
// 模糊
@Query(type = Query.Type.INNER_LIKE)
private String ip;
}
package me.zhengjie.modules.monitor.service.impl;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONObject;
import me.zhengjie.modules.monitor.domain.Server;
import me.zhengjie.modules.monitor.repository.ServerRepository;
import me.zhengjie.modules.monitor.service.ServerService;
import me.zhengjie.modules.monitor.service.dto.ServerDTO;
import me.zhengjie.modules.monitor.service.dto.ServerQueryCriteria;
import me.zhengjie.modules.monitor.service.mapper.ServerMapper;
import me.zhengjie.utils.PageUtil;
import me.zhengjie.utils.QueryHelp;
import me.zhengjie.utils.ValidationUtil;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Map;
/**
* @author Zhang houying
* @date 2019-11-03
*/
@Service
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class ServerServiceImpl implements ServerService {
private final ServerRepository serverRepository;
private final ServerMapper serverMapper;
public ServerServiceImpl(ServerRepository serverRepository, ServerMapper serverMapper) {
this.serverRepository = serverRepository;
this.serverMapper = serverMapper;
}
@Override
public Map<String,Object> queryAll(ServerQueryCriteria criteria, Pageable pageable){
Page<Server> page = serverRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
page.forEach(server -> {
try {
server.setState("1");
String url = String.format("http://%s:%d/api/serverMonitor",server.getIp(),server.getPort());
String res = HttpUtil.get(url,1000);
JSONObject obj = JSONObject.parseObject(res);
server.setCpuRate(obj.getDouble("cpuRate"));
server.setCpuCore(obj.getInteger("cpuCore"));
server.setMemTotal(obj.getDouble("memTotal"));
server.setMemUsed(obj.getDouble("memUsed"));
server.setDiskTotal(obj.getDouble("diskTotal"));
server.setDiskUsed(obj.getDouble("diskUsed"));
server.setSwapTotal(obj.getDouble("swapTotal"));
server.setSwapUsed(obj.getDouble("swapUsed"));
} catch (Exception e) {
server.setState("0");
e.printStackTrace();
}
});
return PageUtil.toPage(page.map(serverMapper::toDto));
}
@Override
public List<ServerDTO> queryAll(ServerQueryCriteria criteria){
return serverMapper.toDto(serverRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder)));
}
@Override
public ServerDTO findById(Integer id) {
Server server = serverRepository.findById(id).orElseGet(Server::new);
ValidationUtil.isNull(server.getId(),"Server","id",id);
return serverMapper.toDto(server);
}
@Override
@Transactional(rollbackFor = Exception.class)
public ServerDTO create(Server resources) {
return serverMapper.toDto(serverRepository.save(resources));
}
@Override
@Transactional(rollbackFor = Exception.class)
public void update(Server resources) {
Server server = serverRepository.findById(resources.getId()).orElseGet(Server::new);
ValidationUtil.isNull( server.getId(),"Server","id",resources.getId());
server.copy(resources);
serverRepository.save(server);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(Integer id) {
serverRepository.deleteById(id);
}
}
package me.zhengjie.modules.monitor.service.mapper;
import me.zhengjie.base.BaseMapper;
import me.zhengjie.modules.monitor.domain.Server;
import me.zhengjie.modules.monitor.service.dto.ServerDTO;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
/**
* @author Zhang houying
* @date 2019-11-03
*/
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface ServerMapper extends BaseMapper<ServerDTO, Server> {
}
...@@ -15,7 +15,8 @@ ...@@ -15,7 +15,8 @@
<module>eladmin-system</module> <module>eladmin-system</module>
<module>eladmin-tools</module> <module>eladmin-tools</module>
<module>eladmin-generator</module> <module>eladmin-generator</module>
</modules> <module>eladmin-monitor</module>
</modules>
<name>EL-ADMIN后台管理系统</name> <name>EL-ADMIN后台管理系统</name>
<url>http://auauz.net</url> <url>http://auauz.net</url>
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment