WangHan
2024-09-12 d5855a4926926698b740bc6c7ba489de47adb68b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package tech.powerjob.server.web.response;
 
import lombok.Data;
import lombok.NoArgsConstructor;
import tech.powerjob.common.model.SystemMetrics;
import tech.powerjob.common.utils.CommonUtils;
import tech.powerjob.server.common.module.WorkerInfo;
 
import java.text.DecimalFormat;
 
/**
 * Worker机器状态
 *
 * @author tjq
 * @since 2020/4/14
 */
@Data
@NoArgsConstructor
public class WorkerStatusVO {
 
    private String address;
    private String cpuLoad;
    private String memoryLoad;
    private String diskLoad;
 
    private String protocol;
    private String tag;
    private String lastActiveTime;
 
    private Integer lightTaskTrackerNum;
 
    private Integer heavyTaskTrackerNum;
 
    private long lastOverloadTime;
 
    private boolean overloading;
 
    /**
     * 1 -> 健康,绿色,2 -> 一般,橙色,3 -> 糟糕,红色,9999 -> 非在线机器
     */
    private int status;
 
    /**
     *  12.3%(4 cores)
     */
    private static final String CPU_FORMAT = "%s / %s cores";
    /**
     *  27.7%(2.9/8.0 GB)
     */
    private static final String OTHER_FORMAT = "%s%%(%s / %s GB)";
    private static final DecimalFormat df = new DecimalFormat("#.#");
 
    private static final double THRESHOLD = 0.8;
 
    public WorkerStatusVO(WorkerInfo workerInfo) {
 
        SystemMetrics systemMetrics = workerInfo.getSystemMetrics();
 
        this.status = 1;
        this.address = workerInfo.getAddress();
        this.cpuLoad = String.format(CPU_FORMAT, df.format(systemMetrics.getCpuLoad()), systemMetrics.getCpuProcessors());
        if (systemMetrics.getCpuLoad() > systemMetrics.getCpuProcessors() * THRESHOLD) {
            this.status ++;
        }
 
        String menL = df.format(systemMetrics.getJvmMemoryUsage() * 100);
        String menUsed = df.format(systemMetrics.getJvmUsedMemory());
        String menMax = df.format(systemMetrics.getJvmMaxMemory());
        this.memoryLoad = String.format(OTHER_FORMAT, menL, menUsed, menMax);
        if (systemMetrics.getJvmMemoryUsage() > THRESHOLD) {
            this.status ++;
        }
 
        String diskL = df.format(systemMetrics.getDiskUsage() * 100);
        String diskUsed = df.format(systemMetrics.getDiskUsed());
        String diskMax = df.format(systemMetrics.getDiskTotal());
        this.diskLoad = String.format(OTHER_FORMAT, diskL, diskUsed, diskMax);
        if (systemMetrics.getDiskUsage() > THRESHOLD) {
            this.status ++;
        }
 
        if (workerInfo.overload()){
            // 超载的情况直接置为 3
            this.status = 3;
        }
 
        if (workerInfo.timeout()) {
            this.status = 9999;
        }
 
        this.protocol = workerInfo.getProtocol();
        this.tag = CommonUtils.formatString(workerInfo.getTag());
        this.lastActiveTime = CommonUtils.formatTime(workerInfo.getLastActiveTime());
        this.lightTaskTrackerNum = workerInfo.getLightTaskTrackerNum();
        this.heavyTaskTrackerNum = workerInfo.getHeavyTaskTrackerNum();
        this.lastOverloadTime = workerInfo.getLastOverloadTime();
        this.overloading = workerInfo.isOverloading();
    }
}