package zeta.tool;
import java.text.SimpleDateFormat;
import java.util.Date;
import zeta.util.Properties;
import zeta.util.ThrowableHandler;
public class ZetaDaemon {
private static int daemonWait = 30 * 60 * 1000;
public static void main(String[] args) {
if (args.length == 1 && args[0].length() == 1 && args[0].charAt(0) == 's') {
statistic();
return;
}
boolean doSynchronization = false;
boolean doGetData = false;
Integer serverId = null;
Trust trust = null;
try {
Properties properties = new Properties();
serverId = new Integer(properties.get("server_id"));
daemonWait = properties.get("daemon.wait", 30 * 60000);
doSynchronization = properties.get("synchronization", "false").equals("true");
doGetData = properties.get("get.data", "true").equals("true");
trust = new Trust();
} catch (Exception e) {
ThrowableHandler.handle(e);
return;
}
new CreateStatistics().start();
ZetaSynchronization sync = new ZetaSynchronization(null);
SimpleDateFormat sqlFormatter = new SimpleDateFormat("yyyy-MM-dd");
String lastBackup = sqlFormatter.format(new Date());
while (true) {
try {
Date d = new Date();
System.out.println("Start at " + formatter.format(d) + '.');
long time = d.getTime();
if (doGetData) {
if (GetData.get()) {
}
}
if (doSynchronization) {
for (int i = 0; i < 10; ++i) {
System.out.println("Start server synchronization at " + formatter.format(new Date()) + '.');
sync.synchronization(serverId);
if (sync.size() < 100) {
break;
}
}
}
String s = sqlFormatter.format(d);
if (!s.equals(lastBackup)) {
ZetaIndexHTML.generate();
trust.trust();
System.out.println("Start backup at " + formatter.format(new Date()) + '.');
ZetaBackup.backup(s);
lastBackup = s;
}
time = System.currentTimeMillis() - time;
System.out.println("End at " + formatter.format(new Date()) + '.');
if (time < daemonWait) {
try {
Thread.sleep(daemonWait-time);
} catch (InterruptedException ie) {
}
}
} catch (Throwable e) {
ThrowableHandler.handle(e);
}
}
}
private static void statistic() {
try {
while (true) {
Date d = new Date();
System.out.println("Start at " + formatter.format(d) + '.');
int[] previousNumberOfCreatedCDFiles = new int[2];
previousNumberOfCreatedCDFiles[0] = -1;
while (true) {
ZetaStatistic.calc(ZetaCD.MAX_NUMBER_OF_FILES/2);
int[] numberOfCreatedCDFiles = ZetaCD.create(ZetaCD.CD_SIZE_LARGE);
if (numberOfCreatedCDFiles[0] == 0 && numberOfCreatedCDFiles[1] >= 0 && previousNumberOfCreatedCDFiles[0] == numberOfCreatedCDFiles[0] && previousNumberOfCreatedCDFiles[1] == numberOfCreatedCDFiles[1]) {
break;
}
previousNumberOfCreatedCDFiles[0] = numberOfCreatedCDFiles[0];
previousNumberOfCreatedCDFiles[1] = numberOfCreatedCDFiles[1];
}
ZetaStatisticHTML.generate();
System.out.println("End at " + formatter.format(new Date()) + '.');
try {
Thread.sleep(24*daemonWait);
} catch (InterruptedException ie) {
}
}
} catch (Exception e) {
ThrowableHandler.handle(e);
}
}
static SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
}