package com.vip.saturn.job.utils;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Collection;
import java.util.EnumMap;
import java.util.Map;
public class StartCheckUtil {
private static final String OUT_FILE = System.getProperty("start.check.outfile");
public enum StartCheckItem {
ZK, PORT, UNIQUE, JOBKILL;
}
public enum CheckStatus {
UNKNOWN, SUCCESS, ERROR;
}
private static Map<StartCheckItem, CheckStatus> checkResultMap = new EnumMap<StartCheckItem, CheckStatus>(
StartCheckItem.class);
public static void add2CheckList(StartCheckItem... items) {
for (StartCheckItem item : items) {
checkResultMap.put(item, CheckStatus.UNKNOWN);
}
}
public static void setError(StartCheckItem item) {
checkResultMap.put(item, CheckStatus.ERROR);
doCheck();
}
public static void setOk(StartCheckItem item) {
checkResultMap.put(item, CheckStatus.SUCCESS);
doCheck();
}
private static void writeCheckResult(CheckStatus status) {
System.out.println("start check result: [" + status + "]");// NOSONAR
if (OUT_FILE == null) {
return;
}
FileOutputStream fs = null;
try {
fs = new FileOutputStream(new File(OUT_FILE));
byte[] res = status.toString().getBytes("UTF-8");
fs.write(res);
} catch (Exception e) {// NOSONAR
e.printStackTrace();// NOSONAR
} finally {
if (fs != null) {
try {
fs.close();
} catch (IOException e) {// NOSONAR
}
}
}
checkResultMap.clear();
}
/**
* 进行启动项检查 如检测到一项失败,则表示启动失败;
*/
private static synchronized void doCheck() {
Collection<CheckStatus> checkLists = checkResultMap.values();
for (CheckStatus status : checkLists) {
if (status == CheckStatus.ERROR) {
writeCheckResult(CheckStatus.ERROR);
return;
}
if (status == CheckStatus.UNKNOWN) {
return;
}
}
writeCheckResult(CheckStatus.SUCCESS);
}
}