diff --git a/src/main/java/com/objecteye/VehicleApplication.java b/src/main/java/com/objecteye/LinuxListenerApplication.java index 0cd601d..80deb84 100644 --- a/src/main/java/com/objecteye/VehicleApplication.java +++ b/src/main/java/com/objecteye/LinuxListenerApplication.java @@ -14,10 +14,10 @@ import org.springframework.transaction.annotation.EnableTransactionManagement; @EnableTransactionManagement @EnableScheduling @EnableAsync -public class VehicleApplication { +public class LinuxListenerApplication { public static void main(String[] args) { - ConfigurableApplicationContext run = SpringApplication.run(VehicleApplication.class, args); + ConfigurableApplicationContext run = SpringApplication.run(LinuxListenerApplication.class, args); } @Bean diff --git a/src/main/java/com/objecteye/common/GeneralContent.java b/src/main/java/com/objecteye/common/GeneralContent.java index 0756876..1607cd2 100644 --- a/src/main/java/com/objecteye/common/GeneralContent.java +++ b/src/main/java/com/objecteye/common/GeneralContent.java @@ -9,6 +9,14 @@ public class GeneralContent { */ public final static String REDIS_LOG_KEY_PATH = "redisLogKeyPath"; /** + * key: 发布项目的Linux中进程号, value: 拥有者id + */ + public final static String REDIS_TASK_ID_OWNER = "redisTaskIdOwner"; + /** + * 需要保存到数据库中的监控信息key(shell文件对应的module. eg: arp_cache,bandwidth) + */ + public final static String REDIS_RECORD_MODULE = "redisRecordModule"; + /** * sh功能脚本map */ public final static Map MODULE_MAP = new HashMap<>(); diff --git a/src/main/java/com/objecteye/controller/BackGroundController.java b/src/main/java/com/objecteye/controller/BackGroundController.java new file mode 100644 index 0000000..74abb5a --- /dev/null +++ b/src/main/java/com/objecteye/controller/BackGroundController.java @@ -0,0 +1,50 @@ +package com.objecteye.controller; + +import com.alibaba.fastjson.JSONObject; +import com.objecteye.common.CommonResult; +import com.objecteye.service.IBackGroundService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +@RestController +@Api(tags = "background", description = "监控器调度") +@RequestMapping("/background") +@CrossOrigin +public class BackGroundController { + @Autowired + private IBackGroundService iBackGroundService; + + @ApiOperation("获取正在生效的监控功能") + @RequestMapping(value = "/getWorkingListener", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public CommonResult getWorkingListener() { + JSONObject resultObj = iBackGroundService.getWorkingListener(); + if (resultObj.containsKey("error")) { + return CommonResult.success(201, resultObj.getString("error"), null); + } + return CommonResult.success(resultObj); + } + + @ApiOperation("添加新的监控器") + @RequestMapping(value = "/addWorkingListener", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public CommonResult addWorkingListener(@RequestBody Map requestMap) { + JSONObject resultObj = iBackGroundService.addWorkingListener(requestMap); + if (resultObj.containsKey("error")) { + return CommonResult.success(201, resultObj.getString("error"), null); + } + return CommonResult.success(resultObj); + } + + @ApiOperation("删除存在的监控器") + @RequestMapping(value = "/removeWorkingListener", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public CommonResult removeWorkingListener(@RequestBody Map requestMap) { + JSONObject resultObj = iBackGroundService.removeWorkingListener(requestMap); + if (resultObj.containsKey("error")) { + return CommonResult.success(201, resultObj.getString("error"), null); + } + return CommonResult.success(resultObj); + } +} diff --git a/src/main/java/com/objecteye/controller/LogFileListenerController.java b/src/main/java/com/objecteye/controller/LogFileListenerController.java index 9c8ccd5..2b68a03 100644 --- a/src/main/java/com/objecteye/controller/LogFileListenerController.java +++ b/src/main/java/com/objecteye/controller/LogFileListenerController.java @@ -1,5 +1,6 @@ package com.objecteye.controller; +import com.alibaba.fastjson.JSONObject; import com.objecteye.common.CommonResult; import com.objecteye.service.ILogFileListenerService; import io.swagger.annotations.Api; @@ -21,7 +22,11 @@ public class LogFileListenerController { @ApiOperation("设置log文件所在位置信息") @RequestMapping(value = "/setLogMsg", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) public CommonResult setLogMsg(@RequestBody Map requestMap) { - return CommonResult.success(iLogFileListenerService.setLogMsg(requestMap)); + JSONObject resultObj = iLogFileListenerService.setLogMsg(requestMap); + if (resultObj.containsKey("error")) { + return CommonResult.success(201, resultObj.getString("error"), null); + } + return CommonResult.success(resultObj); } @ApiOperation("开启日志监控输出") diff --git a/src/main/java/com/objecteye/controller/OccupationOfBasicResourcesController.java b/src/main/java/com/objecteye/controller/OccupationOfBasicResourcesController.java index 6b278a6..b84b69e 100644 --- a/src/main/java/com/objecteye/controller/OccupationOfBasicResourcesController.java +++ b/src/main/java/com/objecteye/controller/OccupationOfBasicResourcesController.java @@ -1,6 +1,7 @@ package com.objecteye.controller; import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.objecteye.common.CommonResult; import com.objecteye.service.IOccupationOfBasicResourcesService; import io.swagger.annotations.Api; @@ -28,4 +29,24 @@ public class OccupationOfBasicResourcesController { return CommonResult.success(201, "未获取输出信息", null); } } + + @ApiOperation("jar包发布") + @RequestMapping(value = "/deployJarFile", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public CommonResult deployJarFile(@RequestBody Map requestMap) { + JSONObject resultObj = iOccupationOfBasicResourcesService.deployJarFile(requestMap); + if (resultObj.containsKey("error")) { + return CommonResult.success(201, resultObj.getString("error"), null); + } + return CommonResult.success(resultObj); + } + + @ApiOperation("获取当前进行中的java服务") + @RequestMapping(value = "/getJpsInfo", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public CommonResult getJpsInfo() { + JSONObject resultObj = iOccupationOfBasicResourcesService.getJpsInfo(); + if (resultObj.containsKey("error")) { + return CommonResult.success(201, resultObj.getString("error"), null); + } + return CommonResult.success(resultObj); + } } diff --git a/src/main/java/com/objecteye/entity/SyBasicResourceHistory.java b/src/main/java/com/objecteye/entity/SyBasicResourceHistory.java new file mode 100644 index 0000000..622dd62 --- /dev/null +++ b/src/main/java/com/objecteye/entity/SyBasicResourceHistory.java @@ -0,0 +1,40 @@ +package com.objecteye.entity; + +import java.io.Serializable; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + +/** + * sy_basic_resource_history + * @author + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@ToString +public class SyBasicResourceHistory implements Serializable { + /** + * 主键 + */ + private String id; + + /** + * 类型 + */ + private String moduleId; + + /** + * 对应时间戳 + */ + private Long occurrenceTime; + + /** + * 占用率 + */ + private Double occupancy; + + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/src/main/java/com/objecteye/mapper/SyBasicResourceHistoryMapper.java b/src/main/java/com/objecteye/mapper/SyBasicResourceHistoryMapper.java new file mode 100644 index 0000000..5866f74 --- /dev/null +++ b/src/main/java/com/objecteye/mapper/SyBasicResourceHistoryMapper.java @@ -0,0 +1,25 @@ +package com.objecteye.mapper; + +import com.objecteye.entity.SyBasicResourceHistory; + +public interface SyBasicResourceHistoryMapper { + int deleteByPrimaryKey(String id); + + int insert(SyBasicResourceHistory record); + + int insertSelective(SyBasicResourceHistory record); + + SyBasicResourceHistory selectByPrimaryKey(String id); + + int updateByPrimaryKeySelective(SyBasicResourceHistory record); + + int updateByPrimaryKey(SyBasicResourceHistory record); + + /** + * 删除时间点之前的数据 + * + * @param time 时间戳 + * @return 操作数量 + */ + int deleteLteTime(long time); +} \ No newline at end of file diff --git a/src/main/java/com/objecteye/service/IBackGroundService.java b/src/main/java/com/objecteye/service/IBackGroundService.java new file mode 100644 index 0000000..f85b47f --- /dev/null +++ b/src/main/java/com/objecteye/service/IBackGroundService.java @@ -0,0 +1,41 @@ +package com.objecteye.service; + +import com.alibaba.fastjson.JSONObject; + +import java.util.Map; + +public interface IBackGroundService { + + /** + * 定时写入的定制信息 + */ + void jobController(); + + /** + * 删除24小时之前的数据 + */ + void removeOverTimeData(); + + /** + * 获取正在生效的监控功能 + * + * @return 监控功能数组 + */ + JSONObject getWorkingListener(); + + /** + * 添加新的监控器 + * + * @param requestMap 请求参数 + * @return 返回信息 + */ + JSONObject addWorkingListener(Map requestMap); + + /** + * 删除存在的监控器 + * + * @param requestMap 请求参数 + * @return 返回信息 + */ + JSONObject removeWorkingListener(Map requestMap); +} diff --git a/src/main/java/com/objecteye/service/IOccupationOfBasicResourcesService.java b/src/main/java/com/objecteye/service/IOccupationOfBasicResourcesService.java index 06aeb9a..ec2ad28 100644 --- a/src/main/java/com/objecteye/service/IOccupationOfBasicResourcesService.java +++ b/src/main/java/com/objecteye/service/IOccupationOfBasicResourcesService.java @@ -1,6 +1,7 @@ package com.objecteye.service; import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import java.util.Map; @@ -16,4 +17,27 @@ public interface IOccupationOfBasicResourcesService { * @return 输出结果 */ JSONArray getInfoByModule(Map requestMap); + + /** + * jar包发布 + * + * @param requestMap 请求参数 + * @return 发包后日志地址 + */ + JSONObject deployJarFile(Map requestMap); + + /** + * 停止jar包进程 + * + * @param requestMap 请求参数 + * @return 操作结果 + */ + JSONObject killJarTask(Map requestMap); + + /** + * 获取当前进行中的jar包 + * + * @return 进行中的jar包信息 + */ + JSONObject getJpsInfo(); } diff --git a/src/main/java/com/objecteye/service/impl/BackGroundServiceImpl.java b/src/main/java/com/objecteye/service/impl/BackGroundServiceImpl.java new file mode 100644 index 0000000..33e3836 --- /dev/null +++ b/src/main/java/com/objecteye/service/impl/BackGroundServiceImpl.java @@ -0,0 +1,162 @@ +package com.objecteye.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.objecteye.common.GeneralContent; +import com.objecteye.entity.SyBasicResourceHistory; +import com.objecteye.mapper.SyBasicResourceHistoryMapper; +import com.objecteye.service.IBackGroundService; +import com.objecteye.service.IOccupationOfBasicResourcesService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.util.*; + +@Component +@Slf4j +public class BackGroundServiceImpl implements IBackGroundService { + @Autowired + private SyBasicResourceHistoryMapper syBasicResourceHistoryMapper; + @Autowired + private IOccupationOfBasicResourcesService iOccupationOfBasicResourcesService; + @Autowired + private RedisTemplate redisTemplate; + + /** + * 定时写入的定制信息 + */ + @Override + @Scheduled(fixedRate = 3 * 1000) + public void jobController() { + String moduleStr = (String) redisTemplate.opsForValue().get(GeneralContent.REDIS_RECORD_MODULE); + if (moduleStr == null || "".equals(moduleStr)) { + return; + } + String[] moduleList = moduleStr.split(","); + Map requestMap = new HashMap<>(); + for (String module : moduleList) { + requestMap.put("module", module); + switch (module) { + default: + break; + case "cpu_utilization": + doCpuUtilization(requestMap); + break; + case "memory_info": + doMemoryInfo(requestMap); + break; + } + } + } + + /** + * 删除24小时之前的数据 + */ + @Override + @Scheduled(fixedRate = 1000 * 60) + public void removeOverTimeData() { + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(System.currentTimeMillis()); + calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) - 1); + long lastTime = calendar.getTimeInMillis(); + syBasicResourceHistoryMapper.deleteLteTime(lastTime); + } + + /** + * 获取正在生效的监控功能 + * + * @return 监控功能数组 + */ + @Override + public JSONObject getWorkingListener() { + String workingListenerStr = (String) redisTemplate.opsForValue().get(GeneralContent.REDIS_RECORD_MODULE); + JSONObject resultObj = new JSONObject(); + if (workingListenerStr == null || "".equals(workingListenerStr)) { + resultObj.put("error", "There is no listener working"); + } else { + resultObj.put("result", workingListenerStr.split(",")); + } + return resultObj; + } + + /** + * 添加新的监控器 + * + * @param requestMap 请求参数 + * @return 返回信息 + */ + @Override + public JSONObject addWorkingListener(Map requestMap) { + List addModules = new ArrayList<>((List) requestMap.get("modules")); + String workingListenerStr = (String) redisTemplate.opsForValue().get(GeneralContent.REDIS_RECORD_MODULE); + if (workingListenerStr == null || "".equals(workingListenerStr)) { + workingListenerStr = String.join(",", addModules); + } else { + List workingListenerList = Arrays.asList(workingListenerStr.split(",")); + addModules.removeIf(workingListenerList::contains); + workingListenerStr += "," + String.join(",", addModules); + } + redisTemplate.opsForValue().set(GeneralContent.REDIS_RECORD_MODULE, workingListenerStr); + return new JSONObject(); + } + + /** + * 删除存在的监控器 + * + * @param requestMap 请求参数 + * @return 返回信息 + */ + @Override + public JSONObject removeWorkingListener(Map requestMap) { + List removeModules = (List) requestMap.get("modules"); + String workingListenerStr = (String) redisTemplate.opsForValue().get(GeneralContent.REDIS_RECORD_MODULE); + JSONObject resultObj = new JSONObject(); + if (workingListenerStr == null || "".equals(workingListenerStr)) { + resultObj.put("error", "There is no listener working"); + } else { + List workingListenerList = new ArrayList<>(Arrays.asList(workingListenerStr.split(","))); + workingListenerList.removeIf(removeModules::contains); + redisTemplate.opsForValue().set(GeneralContent.REDIS_RECORD_MODULE, String.join(",", workingListenerList)); + } + return resultObj; + } + + /** + * cpu信息记录 + * + * @param requestMap 请求参数 + */ + @Async("taskExecutor") + public void doCpuUtilization(Map requestMap) { + JSONArray resultArr = iOccupationOfBasicResourcesService.getInfoByModule(requestMap); + if (resultArr.size() > 0) { + JSONObject resultObj = resultArr.getJSONObject(0); + SyBasicResourceHistory syBasicResourceHistory = new SyBasicResourceHistory(UUID.randomUUID().toString(), (String) requestMap.get("module"), + System.currentTimeMillis(), resultObj.getDoubleValue("result")); + syBasicResourceHistoryMapper.insertSelective(syBasicResourceHistory); + } + } + + /** + * 内存信息记录 + * + * @param requestMap 请求参数 + */ + @Async("taskExecutor") + public void doMemoryInfo(Map requestMap) { + JSONArray resultArr = iOccupationOfBasicResourcesService.getInfoByModule(requestMap); + if (resultArr.size() > 0) { + JSONObject resultObj = resultArr.getJSONObject(0); + double memTotal = Double.parseDouble(resultObj.getString("MemTotal").replaceAll("kB", "").trim()); + double memFree = Double.parseDouble(resultObj.getString("MemFree").replaceAll("kB", "").trim()); + double memUseQuality = Math.round((1 - memFree / memTotal) * 100); + SyBasicResourceHistory syBasicResourceHistory = new SyBasicResourceHistory(UUID.randomUUID().toString(), (String) requestMap.get("module"), + System.currentTimeMillis(), memUseQuality); + syBasicResourceHistoryMapper.insertSelective(syBasicResourceHistory); + } + } +} diff --git a/src/main/java/com/objecteye/service/impl/LogFileListenerServiceImpl.java b/src/main/java/com/objecteye/service/impl/LogFileListenerServiceImpl.java index 1a26396..4c7a7a2 100644 --- a/src/main/java/com/objecteye/service/impl/LogFileListenerServiceImpl.java +++ b/src/main/java/com/objecteye/service/impl/LogFileListenerServiceImpl.java @@ -31,15 +31,16 @@ public class LogFileListenerServiceImpl implements ILogFileListenerService { public JSONObject setLogMsg(Map requestMap) { String filePath = (String) requestMap.get("filePath"); File file = new File(filePath); + JSONObject resultObj = new JSONObject(); if (!file.exists()) { - throw new RuntimeException("file is not exists! Please confirm your path"); + resultObj.put("error", "file is not exists! Please confirm your path"); + return resultObj; } else if (file.isDirectory()) { - throw new RuntimeException("Can not analysis directory, please insert a file path"); + resultObj.put("error", "Can not analysis directory, please insert a file path"); + return resultObj; } String key = file.getName() + "|" + System.currentTimeMillis(); redisTemplate.opsForHash().put(GeneralContent.REDIS_LOG_KEY_PATH, key, filePath); - - JSONObject resultObj = new JSONObject(); resultObj.put("logKey", key); return resultObj; } diff --git a/src/main/java/com/objecteye/service/impl/OccupationOfBasicResourcesServiceImpl.java b/src/main/java/com/objecteye/service/impl/OccupationOfBasicResourcesServiceImpl.java index 73a1f85..b1e4fc8 100644 --- a/src/main/java/com/objecteye/service/impl/OccupationOfBasicResourcesServiceImpl.java +++ b/src/main/java/com/objecteye/service/impl/OccupationOfBasicResourcesServiceImpl.java @@ -6,6 +6,8 @@ import com.alibaba.fastjson.JSONObject; import com.objecteye.common.GeneralContent; import com.objecteye.service.IOccupationOfBasicResourcesService; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import java.io.BufferedReader; @@ -14,10 +16,13 @@ import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Objects; @Component @Slf4j public class OccupationOfBasicResourcesServiceImpl implements IOccupationOfBasicResourcesService { + @Autowired + private RedisTemplate redisTemplate; /** * 获取指定module的输出 @@ -34,11 +39,17 @@ public class OccupationOfBasicResourcesServiceImpl implements IOccupationOfBasic List outList = new ArrayList<>(); executeLinuxCmd(cmd, outList); if (outList.size() > 0) { - Object object = JSON.parse(outList.get(0)); + String outStr = String.join("", outList); + log.debug("OccupationOfBasicResourcesServiceImpl|getInfoByModule|outStr: {}", outStr); + Object object = JSON.parse(outStr); if (object instanceof JSONObject) { resultArr.add(object); } else if (object instanceof JSONArray) { resultArr = (JSONArray) object; + } else { + JSONObject tempObj = new JSONObject(); + tempObj.put("result", outStr); + resultArr.add(tempObj); } } } @@ -46,6 +57,115 @@ public class OccupationOfBasicResourcesServiceImpl implements IOccupationOfBasic } /** + * jar包发布 + * + * @param requestMap 请求参数 + * @return 发包后日志地址 + */ + @Override + public JSONObject deployJarFile(Map requestMap) { + String jarPath = (String) requestMap.get("filePath"); + String logPath = (String) requestMap.get("logPath"); + String owner = (String) requestMap.getOrDefault("user", "-1"); + if (logPath == null || "".equals(logPath)) { + logPath = jarPath.substring(0, jarPath.lastIndexOf("//")) + jarPath.substring(jarPath.lastIndexOf("//")).replaceAll("jar", "log"); + } + + JSONObject resultObj = new JSONObject(); + String jarName = jarPath.substring(jarPath.lastIndexOf("//") + 1); + if (!jarName.endsWith("\\.jar")) { + resultObj.put("error", "File type error. Please confirm your jar file is right."); + } + + List outList = new ArrayList<>(); + String cmd = "nohup java -jar " + jarPath + " > " + logPath + " 2>&1 &"; + executeLinuxCmd(cmd, outList); + + String outStr; + if (outList.size() > 0) { + outStr = outList.get(0); + String regex = "^[[0-9]*] [0-9]*$"; + if (outStr.matches(regex)) { + resultObj.put("logPath", logPath); + String taskId = outStr.split(" ")[1]; + resultObj.put("taskId", taskId); + redisTemplate.opsForHash().put(GeneralContent.REDIS_TASK_ID_OWNER, taskId, owner); + } else { + resultObj.put("error", "linux error: " + outStr); + } + } else { + resultObj.put("error", "There is no response from Linux"); + } + + return resultObj; + } + + /** + * 停止jar包进程 + * + * @param requestMap 请求参数 + * @return 操作结果 + */ + @Override + public JSONObject killJarTask(Map requestMap) { + String user = (String) requestMap.get("user"); + String taskId = (String) requestMap.get("taskId"); + boolean superPower = ifSuperPower(user); + + JSONObject resultObj = new JSONObject(); + if (redisTemplate.opsForHash().hasKey(GeneralContent.REDIS_TASK_ID_OWNER, taskId)) { + String owner = (String) redisTemplate.opsForHash().get(GeneralContent.REDIS_TASK_ID_OWNER, taskId); + if (Objects.equals(owner, user) || superPower) { + String cmd = "kill -9 " + taskId; + List outList = new ArrayList<>(); + executeLinuxCmd(cmd, outList); + if (outList.size() > 0) { + resultObj.put("error", outList); + } + } else { + resultObj.put("error", "No authority. The owner is " + owner); + } + } else { + resultObj.put("error", "illegal taskId"); + } + return resultObj; + } + + /** + * 是否拥有超级管理员权限 + * + * @param user 当前用户id + * @return 是否拥有超级管理员权限 + */ + private boolean ifSuperPower(String user) { + // 超级管理员 + boolean superPower = false; + if (Objects.equals(user, "-1")) { + superPower = true; + } + return superPower; + } + + /** + * 获取当前进行中的jar包 + * + * @return 进行中的jar包信息 + */ + @Override + public JSONObject getJpsInfo() { + String cmd = "jps"; + List outList = new ArrayList<>(); + executeLinuxCmd(cmd, outList); + JSONObject resultObj = new JSONObject(); + if (outList.size() > 0) { + resultObj.put("process", outList); + } else { + resultObj.put("error", "Get no Message"); + } + return resultObj; + } + + /** * 执行Linux语句并获取返回值 * * @param cmd linux语句 @@ -54,22 +174,27 @@ public class OccupationOfBasicResourcesServiceImpl implements IOccupationOfBasic private void executeLinuxCmd(String cmd, List outList) { Runtime run = Runtime.getRuntime(); try { - ProcessBuilder builder = new ProcessBuilder("/bin/chmod", "755", cmd); - Process permission = builder.start(); - permission.waitFor(); - - Process process = run.exec("sh " + cmd); - log.info("OccupationOfBasicResourcesServiceImpl|executeLinuxCmd|cmd: {}", cmd); + Process process; + if (cmd.endsWith("\\.sh")) { + ProcessBuilder builder = new ProcessBuilder("/bin/chmod", "755", cmd); + Process permission = builder.start(); + permission.waitFor(); + process = run.exec("sh " + cmd); + } else { + process = run.exec(cmd); + } + log.debug("OccupationOfBasicResourcesServiceImpl|executeLinuxCmd|cmd: {}", cmd); String line; BufferedReader stdoutReader = new BufferedReader(new InputStreamReader(process.getInputStream())); while ((line = stdoutReader.readLine()) != null) { - log.info("OccupationOfBasicResourcesServiceImpl|executeLinuxCmd|line: {}", line); + log.debug("OccupationOfBasicResourcesServiceImpl|executeLinuxCmd|line: {}", line); outList.add(line); } process.waitFor(); process.destroy(); } catch (IOException | InterruptedException e) { e.printStackTrace(); + log.error(e.getMessage()); } } } diff --git a/src/main/resources/com.objecteye.mapper/SyBasicResourceHistoryMapper.xml b/src/main/resources/com.objecteye.mapper/SyBasicResourceHistoryMapper.xml new file mode 100644 index 0000000..a2c8569 --- /dev/null +++ b/src/main/resources/com.objecteye.mapper/SyBasicResourceHistoryMapper.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + id, module_id, occurrence_time, occupancy + + + + delete from sy_basic_resource_history + where id = #{id,jdbcType=VARCHAR} + + + + insert into sy_basic_resource_history (id, module_id, occurrence_time, + occupancy) + values (#{id,jdbcType=VARCHAR}, #{moduleId,jdbcType=VARCHAR}, #{occurrenceTime,jdbcType=BIGINT}, + #{occupancy,jdbcType=DOUBLE}) + + + insert into sy_basic_resource_history + + + id, + + + module_id, + + + occurrence_time, + + + occupancy, + + + + + #{id,jdbcType=VARCHAR}, + + + #{moduleId,jdbcType=VARCHAR}, + + + #{occurrenceTime,jdbcType=BIGINT}, + + + #{occupancy,jdbcType=DOUBLE}, + + + + + update sy_basic_resource_history + + + module_id = #{moduleId,jdbcType=VARCHAR}, + + + occurrence_time = #{occurrenceTime,jdbcType=BIGINT}, + + + occupancy = #{occupancy,jdbcType=DOUBLE}, + + + where id = #{id,jdbcType=VARCHAR} + + + update sy_basic_resource_history + set module_id = #{moduleId,jdbcType=VARCHAR}, + occurrence_time = #{occurrenceTime,jdbcType=BIGINT}, + occupancy = #{occupancy,jdbcType=DOUBLE} + where id = #{id,jdbcType=VARCHAR} + + \ No newline at end of file