JAVA 處理 Centos 7.5 系統相關參數

package com.sbsr.netty.tools;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

import com.sbsr.netty.constants.ServerConstant;
import com.sbsr.netty.model.ClientMachineInfo;
import com.sbsr.netty.tools.shell.OutMessage;
import com.sbsr.netty.tools.shell.ShellExecutor;

public class ToolBusiness {

	/**
	 * 獲取客戶端節點 硬件信息 及 使用信息
	 * 
	 * @throws IOException
	 * 
	 */
	public static ClientMachineInfo getClientMachineInfo() throws IOException {

		String cmd = ServerConstant.SHELL_PROP.get("checkclientInfo_shell_url");

		OutMessage outMessage = ShellExecutor.exeLocalShell(cmd);

		ClientMachineInfo cmi = new ClientMachineInfo();
		if (outMessage.getRet() == 0) {

			String retStr = outMessage.getOutStr();

			BufferedReader in = new BufferedReader(new InputStreamReader(new ByteArrayInputStream(retStr.getBytes())));
			String str = "";

			List<String> list = new ArrayList<String>();

			try {
				int i = 1;
				while ((str = in.readLine()) != null) {
					// 操作系統類型
					if (i == 1) {
						sysInfoHandle(str, cmi);
					}
					// 磁盤IO讀寫速率
					if (i == 3) {
						diskHandle(str, cmi);
					}
					// CPU 型號
					if (i == 5) {
						cpuTypeHandle(str, cmi);
					}
					// 任務信息
					if (i == 7) {
						taskInfoHandle(str, cmi);
					}
					// CPU信息
					if (i == 8) {
						cpuInfoHandle(str, cmi);
					}
					// 內存信息
					if (i == 9) {
						memInfoHandle(str, cmi);
					}
					// 磁盤使用信息
					if (i > 11) {
						list.add(str);
					}
					i++;
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
			// 磁盤使用信息處理
			diskUsedHandle(list, cmi);
		}
		return cmi;
	}

	// 操作系統類型
	private static void sysInfoHandle(String str, ClientMachineInfo cmi) {
		String[] arr = str.split("\\s+");
		cmi.setOs(arr[0]);
	}

	// 磁盤IO讀寫速率
	private static void diskHandle(String str, ClientMachineInfo cmi) {
		String[] arr = str.split("\\s+");
//		cmi.setDiskRead(arr[2] + " kb/s");
//		cmi.setDiskWrite(arr[3] + " kb/s");
		cmi.setDiskRead(arr[2]);
		cmi.setDiskWrite(arr[3]);
	}

	// CPU型號
	private static void cpuTypeHandle(String str, ClientMachineInfo cmi) {
		String[] arr = str.split(ServerConstant.SPLIT_COLON);
		cmi.setCpuType(arr[1].trim());
	}

	// 任務信息處理
	private static void taskInfoHandle(String str, ClientMachineInfo cmi) {
		String[] arr = null;
		String[] childArr = null;
		arr = str.substring("Tasks:".length(), str.length()).split(ServerConstant.SPLIT_COMMA);
		for (String s : arr) {
			childArr = s.trim().split(ServerConstant.SPLIT_SPACE);
			if ("total".toUpperCase().equals(childArr[1].toUpperCase())) {
				cmi.setTaskTotal(Integer.parseInt(childArr[0]));

				if (Integer.parseInt(childArr[0]) > cmi.getTaskMax()) {
					cmi.setTaskMax(Integer.parseInt(childArr[0]));
				}
				if (0 == cmi.getTaskMin() || Integer.parseInt(childArr[0]) < cmi.getTaskMin()) {
					cmi.setTaskMin(Integer.parseInt(childArr[0]));
				}

			}
		}
	}

	// Cpu信息處理
	private static void cpuInfoHandle(String str, ClientMachineInfo cmi) {

		String[] arr = str.substring("%Cpu(s):".length(), str.length()).split(ServerConstant.SPLIT_COMMA);

		String[] childArr = null;
		for (String s : arr) {
			childArr = s.trim().split(ServerConstant.SPLIT_SPACE);
			if ("id".toUpperCase().equals(childArr[1].toUpperCase())) {
				cmi.setCpuRate((float) (Math.round((100 - Float.parseFloat(childArr[0])) * 100)) / 100 + "%");
			}
		}
	}

	// 內存信息處理
	private static void memInfoHandle(String str, ClientMachineInfo cmi) {

		String[] arr = str.substring("KiB Mem :".length(), str.length()).split(ServerConstant.SPLIT_COMMA);

		String[] childArr = null;
		float total = 0;
		float used = 0;
		for (String s : arr) {
			childArr = s.trim().split(ServerConstant.SPLIT_SPACE);
			if ("total".toUpperCase().equals(childArr[1].toUpperCase())) {
				total = Integer.parseInt(childArr[0].trim().substring(0, childArr[0].trim().length() - 1));
				float t = total * 10 / (1000 * 1000);
				cmi.setRam(String.format("%.0f", t) + " G");
			} else if ("used".toUpperCase().equals(childArr[1].toUpperCase())) {
				used = Integer.parseInt(childArr[0].trim().substring(0, childArr[0].trim().length() - 1));
				float t = 100 * used / total;
				cmi.setRamRate(String.format("%.01f", t) + ServerConstant.SPLIT_PERCENT);
			}

		}
	}

	// 磁盤使用信息處理
	private static void diskUsedHandle(List<String> list, ClientMachineInfo cmi) {

		int total = 0;
		float usedisk = 0;
		String dw = "";

		for (int j = 0; j < list.size(); j++) {

			String str = list.get(j);

			if (!(str.indexOf("tmpfs") > -1 || str.indexOf("devtmpfs") > -1)) {

				String[] arr = str.split("\\s+");
				total += Float.parseFloat(arr[1].substring(0, arr[1].length() - 1));
				dw = arr[2].substring(arr[2].length() - 1, arr[2].length());
				if (dw.equals("M") || dw.equals("m")) {
					usedisk += Float.parseFloat(arr[2].substring(0, arr[2].length() - 1)) / 1000;
				} else {
					if (ToolValid.isNotEmpty(arr[2].substring(0, arr[2].length() - 1))) {
						usedisk += Float.parseFloat(arr[2].substring(0, arr[2].length() - 1));
					}
				}
			}
		}
		cmi.setDisk(total + " G");
		cmi.setUseDisk(String.format("%.0f", 100 * usedisk / total) + ServerConstant.SPLIT_PERCENT);
	}

}

對應腳本待續。。。

package com.sbsr.netty.model;

import java.io.Serializable;

import lombok.Data;

@Data
public class ClientMachineInfo implements Serializable {

	private static final long serialVersionUID = 1L;

	private String id;

	/**
	 * 客戶端 硬件信息
	 */
	private String os; // 操作系統

	private String cpuType; // cpu型號

	private String ram; // 內存容量

	private String disk; // 硬盤容量

	/**
	 * 客戶端 使用信息
	 */
	private String cpuRate; // cpu使用率

	private String ramRate; // 內存使用率

	private String useDisk; // 硬盤使用率

	private int taskTotal; // 進程總數

	private int taskMin; // 最小進程數

	private int taskMax; // 最大進程數

	private String inSite; // 入棧速度

	private String outSite; // 出棧速度

	private String diskRead; // 硬盤讀速度

	private String diskWrite; // 硬盤寫速度

	private String flow;// 流量

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章