package net.i2p.router.tasks;
/*
* free (adj.): unencumbered; not under the control of others
* Written by jrandom in 2003 and released into the public domain
* with no warranty of any kind, either expressed or implied.
* It probably won't make your computer catch on fire, or eat
* your children, but it might. Use at your own risk.
*
*/
import java.io.File;
import net.i2p.router.JobImpl;
import net.i2p.router.RouterContext;
import net.i2p.util.Log;
/**
* Simply read the router config periodically,
* so that the user may make config changes externally.
* This isn't advertised as a feature,
* but it could be used, for example, to change bandwidth limits
* at certain times of day.
*
* Unfortunately it will also read the file back in every time the
* router writes it.
*
* We must keep this enabled, as it's the only way for people
* to set routerconsole.advanced=true without restarting.
*/
public class ReadConfigJob extends JobImpl {
private final static long DELAY = 30*1000; // reread every 30 seconds
private volatile long _lastRead;
public ReadConfigJob(RouterContext ctx) {
super(ctx);
_lastRead = ctx.clock().now();
}
public String getName() { return "Read Router Configuration"; }
public void runJob() {
File configFile = new File(getContext().router().getConfigFilename());
if (shouldReread(configFile)) {
getContext().router().readConfig();
_lastRead = getContext().clock().now();
Log log = getContext().logManager().getLog(ReadConfigJob.class);
if (log.shouldLog(Log.WARN))
log.warn("Reloaded " + configFile);
}
requeue(DELAY);
}
private boolean shouldReread(File configFile) {
// lastModified() returns 0 if not found
//if (!configFile.exists()) return false;
return configFile.lastModified() > _lastRead;
}
}