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;// 流量

}

JAVA 处理 Centos 7.5 系统相关参数教程看得见的等候发布了65 篇原创文章 · 获赞 21 · 访问量 9万+ 私信 关注


标签: Centos, JAVA, String, str, private, arr, cmi, childArr

相关文章推荐

添加新评论,含*的栏目为必填