package tech.powerjob.server.common.module; import lombok.Data; import lombok.extern.slf4j.Slf4j; import tech.powerjob.common.model.DeployedContainerInfo; import tech.powerjob.common.model.SystemMetrics; import tech.powerjob.common.request.WorkerHeartbeat; import java.util.List; /** * worker info * * @author tjq * @since 2021/2/7 */ @Data @Slf4j public class WorkerInfo { private String address; private long lastActiveTime; private String protocol; private String client; private String tag; private int lightTaskTrackerNum; private int heavyTaskTrackerNum; private long lastOverloadTime; private boolean overloading; private SystemMetrics systemMetrics; private List containerInfos; private static final long WORKER_TIMEOUT_MS = 60000; public void refresh(WorkerHeartbeat workerHeartbeat) { address = workerHeartbeat.getWorkerAddress(); lastActiveTime = workerHeartbeat.getHeartbeatTime(); protocol = workerHeartbeat.getProtocol(); client = workerHeartbeat.getClient(); tag = workerHeartbeat.getTag(); systemMetrics = workerHeartbeat.getSystemMetrics(); containerInfos = workerHeartbeat.getContainerInfos(); lightTaskTrackerNum = workerHeartbeat.getLightTaskTrackerNum(); heavyTaskTrackerNum = workerHeartbeat.getHeavyTaskTrackerNum(); if (workerHeartbeat.isOverload()) { overloading = true; lastOverloadTime = workerHeartbeat.getHeartbeatTime(); log.warn("[WorkerInfo] worker {} is overload!", getAddress()); } else { overloading = false; } } public boolean timeout() { long timeout = System.currentTimeMillis() - lastActiveTime; return timeout > WORKER_TIMEOUT_MS; } public boolean overload() { return overloading; } }