/*
* Copyright (c) 2012-2013 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.processmonitor;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.emc.storageos.db.client.model.ProcessMonitorMetrics;
public class ProcessMonitor implements Runnable {
private static final Logger _logger = LoggerFactory.getLogger(ProcessMonitor.class);
private long _megaByteConverter = 1024 * 1024;
private static final DateTimeFormatter dateFormatter =
DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.SSS z");
private ProcessMonitorMetrics usageMetrics;
public ProcessMonitor(ProcessMonitorMetrics usgMetrics) {
usageMetrics = usgMetrics;
}
@Override
public void run() {
try {
extractMemoryUsage();
_logger.info(usageMetrics.toString());
} catch (Exception e) {
_logger.error("Process Monitoring Collection failed :", e);
}
}
public void extractMemoryUsage() {
final Runtime runTime = Runtime.getRuntime();
long totalMemory = runTime.totalMemory();
long freeMemory = runTime.freeMemory();
long maxMemory = runTime.maxMemory();
long usedMemory = totalMemory - freeMemory;
long timeCollected = System.currentTimeMillis();
usageMetrics.setTotalMemory(convertToMB(totalMemory));
usageMetrics.setFreeMemory(convertToMB(freeMemory));
usageMetrics.setMaxMemory(convertToMB(maxMemory));
usageMetrics.setUsedMemory(convertToMB(usedMemory));
usageMetrics.setTimeCollected(timeCollected);
if (usageMetrics.getUsedMemory() > usageMetrics.getMaxUsedMemory()) {
usageMetrics.setMaxUsedMemory(usageMetrics.getUsedMemory());
usageMetrics.setTimeCollectedMaxUsedMemory(dateFormatter.print(timeCollected));
}
}
public long convertToMB(final long value) {
return value / _megaByteConverter;
}
}