package com.github.freeacs.syslogserver; import com.github.freeacs.common.scheduler.TaskDefaultImpl; import java.io.File; import org.apache.commons.io.FileSystemUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class DiskSpaceCheck extends TaskDefaultImpl { private static long freeSpace = Long.MAX_VALUE; private final Properties properties; DiskSpaceCheck(String taskName, Properties properties) { super(taskName); this.properties = properties; } private int getMinFreeDiskSpace() { return properties.getMinFreeDiskSpace() * 1024; } private static Logger logger = LoggerFactory.getLogger(DiskSpaceCheck.class); @Override public void runImpl() throws Throwable { freeSpace = FileSystemUtils.freeSpaceKb(new File(".").getAbsolutePath()); if (freeSpace < getMinFreeDiskSpace()) { logger.error("Server will pause, since free disk space is " + freeSpace / 1024 + " MB."); SyslogServer.pause(true); Syslog2DB.pause(true); } else if (SyslogServer.isPause() && freeSpace >= getMinFreeDiskSpace()) { logger.info("Server will resume operation, free disk space is " + freeSpace / 1024 + " MB."); SyslogServer.pause(false); Syslog2DB.pause(false); } } @Override public Logger getLogger() { return logger; } static long getFreeSpace() { while (freeSpace == Long.MAX_VALUE) { try { Thread.sleep( 100); // may sleep for a short while until disk space has been calculated the first time // after server start } catch (InterruptedException e) { e.printStackTrace(); } } return freeSpace / 1024; } }