package org.fastcatsearch.job.management;
import java.io.IOException;
import org.fastcatsearch.common.io.Streamable;
import org.fastcatsearch.exception.FastcatSearchException;
import org.fastcatsearch.ir.io.DataInput;
import org.fastcatsearch.ir.io.DataOutput;
import org.fastcatsearch.job.Job;
import org.fastcatsearch.management.JvmCpuInfo;
import org.fastcatsearch.management.JvmMemoryInfo;
import org.fastcatsearch.management.SystemDiskInfo;
import org.fastcatsearch.management.SystemWatchService;
import org.fastcatsearch.service.ServiceManager;
public class GetServerSystemHealthJob extends Job {
private static final long serialVersionUID = -9023882122708815679L;
@Override
public JobResult doRun() throws FastcatSearchException {
SystemWatchService systemInfoService = ServiceManager.getInstance().getService(SystemWatchService.class);
JvmCpuInfo jvmCpuInfo = systemInfoService.getJvmCpuInfo();
JvmMemoryInfo jvmMemoryInfo = systemInfoService.getJvmMemoryInfo();
SystemDiskInfo systemDiskInfo = systemInfoService.getSystemDiskInfo();
SystemHealthInfo result = new SystemHealthInfo();
result.jvmCpuUse = jvmCpuInfo.jvmCpuUse;
result.systemCpuUse = jvmCpuInfo.systemCpuUse;
result.systemLoadAverage = jvmCpuInfo.systemLoadAverage;
result.committedMemory = jvmMemoryInfo.committedHeapMemory + jvmMemoryInfo.committedNonHeapMemory;
result.maxMemory = jvmMemoryInfo.maxHeapMemory + jvmMemoryInfo.maxNonHeapMemory;
result.usedMemory = jvmMemoryInfo.usedHeapMemory + jvmMemoryInfo.usedNonHeapMemory;
result.totalMemory = jvmMemoryInfo.totalPhysicalMemorySize;
result.totalDiskSize = systemDiskInfo.totalDiskSize;
result.usedDiskSize = systemDiskInfo.usedDiskSize;
result.freeDiskSize = systemDiskInfo.freeDiskSize;
return new JobResult(result);
}
public static class SystemHealthInfo implements Streamable {
public int jvmCpuUse;
public int systemCpuUse;
public double systemLoadAverage;
public int maxMemory;
public int committedMemory;
public int usedMemory;
public int totalMemory;
public int totalDiskSize;
public int usedDiskSize;
public int freeDiskSize;
@Override
public void readFrom(DataInput input) throws IOException {
jvmCpuUse = input.readInt();
systemCpuUse = input.readInt();
systemLoadAverage = input.readDouble();
maxMemory = input.readInt();
committedMemory = input.readInt();
usedMemory = input.readInt();
totalMemory = input.readInt();
totalDiskSize = input.readInt();
usedDiskSize = input.readInt();
freeDiskSize = input.readInt();
}
@Override
public void writeTo(DataOutput output) throws IOException {
output.writeInt(jvmCpuUse);
output.writeInt(systemCpuUse);
output.writeDouble(systemLoadAverage);
output.writeInt(maxMemory);
output.writeInt(committedMemory);
output.writeInt(usedMemory);
output.writeInt(totalMemory);
output.writeInt(totalDiskSize);
output.writeInt(usedDiskSize);
output.writeInt(freeDiskSize);
}
}
}