public void diskMonitor(DiskMonitorHandlerParam param) { //查询服务器信息 BusServerInfo serverInfo=busServerInfoDao.getById(param.getServerId()); //磁盘名称 可传入多个 用','隔开 String[] diskNames = param.getDiskNames().split(","); //告警阈值( GB ) int threshold = param.getThreshold(); if (diskNames != null && diskNames.length > 0){ //需要发送邮件的磁盘报警信息 List<Map<String,String>> infoList = new ArrayList<>(); for (String diskName : diskNames){ //查看磁盘剩余空间命令 String[] comms = {"df /" + diskName}; //命令执行返回信息 格式:"文件系统 容量 已用 可用 已用% 挂载点\n tmpfs 4004628 238480 3766148 6% /run" String sizeInfo = ShellUtil.ssh2ShellExec(serverInfo.getIp(), serverInfo.getPort(), serverInfo.getUserName(), serverInfo.getPassword(), comms); if (!StringUtil.isEmpty(sizeInfo)){ //截取出剩余空间大小 (kb) long sizeKb = Long.parseLong(sizeInfo.split("\\n")[1].split("\\s+")[3]); //剩余空间大小GB long sizeGb = sizeKb / 1024 / 1024; //磁盘空间小于小于阈值 if (sizeGb <= threshold){ //添加至报警信息 Map<String,String> info = new HashMap<>(); info.put("diskName",diskName); info.put("sizeGb",String.valueOf(sizeGb)); infoList.add(info); XxlJobHelper.log("----------磁盘/" + diskName + "空间不足,小于" + threshold + "GB,\t当前剩余:" + sizeGb + "GB"); } } } //如果不为空 表示空间不足,则需要发送邮件 if (infoList != null && infoList.size() > 0){ //执行告警逻辑 发送邮件... String title = "磁盘空间预警"; String msg = ""; for (Map<String, String> info : infoList) { String diskName = info.get("diskName"); String sizeGb = info.get("sizeGb"); msg += "----------磁盘/" + diskName + "空间不足,小于" + threshold + "GB,\t当前剩余:" + sizeGb + "GB\n"; } try { MailUtil.sendMail(param.getMail(),title,msg); XxlJobHelper.log("-----------------告警邮件发送成功! 收件人:" + param.getMail() + "邮件内容:[" + msg + "]"); //记录数据库..... } catch (MessagingException e) { XxlJobHelper.log("-----------------告警邮件发送失败! 收件人:" + param.getMail() + "邮件内容:[" + msg + "]"); XxlJobHelper.log(e.getMessage()); throw new RuntimeException(e); } } } } 优化上述代码
时间: 2024-02-10 08:17:54 浏览: 140
) { for (String diskName : diskNames) { //查询磁盘信息 BusDiskInfo diskInfo = busDiskInfoDao.getByServerIdAndDiskName(param.getServerId(), diskName); if (diskInfo != null) { //获取磁盘总空间和可用空间 long totalSpace = diskInfo.getTotalSpace(); long freeSpace = diskInfo.getFreeSpace(); //计算磁盘使用率 double usageRate = (totalSpace - freeSpace) * 1.0 / totalSpace; //判断磁盘使用率是否超过阈值 if (usageRate >= threshold / 100.0) { //发送告警消息 String message = String.format("服务器 %s 上的磁盘 %s 使用率超过 %.2f%%,当前使用率为 %.2f%%", serverInfo.getServerName(), diskName, threshold, usageRate * 100); alarmService.sendAlarmMessage(param.getAlarmType(), message); } } } } }
这是一段 Java 代码,主要用于监控服务器磁盘空间的使用情况,并在使用率超过阈值时发送告警消息。其中,需要传入服务器 ID、磁盘名称、告警阈值等参数。请问这段代码的作用是什么?
阅读全文