package com.log.harvester;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import org.apache.log4j.Logger;
public class SystemHarvester extends Thread {
private static final Logger LOGGER = Logger
.getLogger(SystemHarvester.class);
private boolean stop;
private int delayInMs = 1000;
private LogSender logSender;
public SystemHarvester(String host, String port,
String applicationId) {
logSender = new LogSender();
logSender.setApplicationId(applicationId);
logSender.setLoggingBoxPort(port);
logSender.setLoggingBoxHost(host);
logSender.start();
}
@Override
public void run() {
stop = false;
try {
while (true) {
if (!stop) {
harvestSystemLogs();
synchronized (this) {
wait(delayInMs);
}
} else {
break;
}
}
} catch (InterruptedException e) {
}
}
private void harvestSystemLogs() {
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat(
"yyyy/MM/dd HH:mm:ss.SSS", Locale.US);
String dateString = String.format(" %s - ", dateFormat.format(date));
long freeMemory = Runtime.getRuntime().freeMemory();
logSender.sendLog(
date,
"Free Memory",
dateString
+ String.format("Free Memory : %s o, %s ko, %s Mo",
freeMemory, freeMemory / 1000,
freeMemory / 1000000), "DEBUG", null);
long totalMemory = Runtime.getRuntime().totalMemory();
logSender.sendLog(
date,
"Total Memory",
dateString
+ String.format("Total Memory : %s o, %s ko, %s Mo",
totalMemory, totalMemory / 1000,
totalMemory / 1000000), "DEBUG", null);
/* Get a list of all filesystem roots on this system */
File[] roots = File.listRoots();
/* For each filesystem root, print some info */
for (File root : roots) {
logSender
.sendLog(
date,
"Disk space",
dateString
+ String.format(
"Disk %s : Total space (Mo): %s, Free space (Mo): %s, Usable space (Mo): %s ",
root.getAbsolutePath(),
root.getTotalSpace() / 1000000,
root.getFreeSpace() / 1000000,
root.getUsableSpace() / 1000000),
"DEBUG", null);
}
}
public static Logger getLogger() {
return LOGGER;
}
public int getDelayInMs() {
return delayInMs;
}
public void setDelayInMs(int delayInMs) {
this.delayInMs = delayInMs;
}
}