package net.johnewart.gearman.server.web;
import java.net.UnknownHostException;
import java.util.*;
import net.johnewart.gearman.engine.metrics.QueueMetrics;
import net.johnewart.gearman.server.util.JobQueueMetrics;
import net.johnewart.gearman.server.util.JobQueueMonitor;
import net.johnewart.gearman.server.util.SystemSnapshot;
public class StatusView {
protected final JobQueueMonitor jobQueueMonitor;
protected final QueueMetrics queueMetrics;
public StatusView(JobQueueMonitor jobQueueMonitor, QueueMetrics queueMetrics)
{
this.jobQueueMonitor = jobQueueMonitor;
this.queueMetrics = queueMetrics;
}
public List<String> getJobQueues()
{
List<String> queueNames = new ArrayList<>(queueMetrics.getQueueNames());
queueNames.sort(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
});
return queueNames;
}
public int getJobQueueCount() {
return queueMetrics.getQueueNames().size();
}
public long getUptimeInSeconds()
{
Date now = new Date();
Date started = queueMetrics.getStartTime().toDate();
return (now.getTime() - started.getTime()) / 1000;
}
public Integer getUptimeInDays()
{
return (Long.valueOf(getUptimeInSeconds() / 86400)).intValue();
}
public String getUptime()
{
TimeMap timeMap = DateFormatter.buildTimeMap(this.getUptimeInSeconds() * 1000);
String res;
if (timeMap.DAYS == 0) {
if(timeMap.HOURS == 0)
res = String.format("%dmin.", timeMap.MINUTES);
else
res = String.format("%dhrs.", timeMap.HOURS);
} else if (timeMap.YEARS == 0) {
res = String.format("%ddays", timeMap.DAYS);
} else {
res = "> 1yr.";
}
return res;
}
public Long getTotalJobsPending()
{
return queueMetrics.getPendingJobsCount();
}
public Long getTotalJobsQueued()
{
return queueMetrics.getEnqueuedJobCount();
}
public Long getTotalJobsProcessed()
{
return queueMetrics.getCompletedJobCount();
}
public Long getWorkerCount()
{
return queueMetrics.getActiveWorkers();
}
public Long getWorkerCount(String jobQueueName) {
return queueMetrics.getActiveWorkers(jobQueueName);
}
public String getHostname()
{
try {
return java.net.InetAddress.getLocalHost().getHostName();
} catch (UnknownHostException e) {
e.printStackTrace();
return "nohostname";
}
}
public boolean getMonitorEnabled()
{
return jobQueueMonitor != null;
}
public List<SystemSnapshot> getSystemSnapshots()
{
return jobQueueMonitor.getSystemSnapshots();
}
public SystemSnapshot getLatestSystemSnapshot()
{
List<SystemSnapshot> snapshots = getSystemSnapshots();
return snapshots.get(snapshots.size()-1);
}
public JobQueueMetrics getJobQueueSnapshots(String jobQueueName)
{
Map<String, JobQueueMetrics> snapshotMap = jobQueueMonitor.getSnapshots();
if(snapshotMap.containsKey(jobQueueName))
{
return snapshotMap.get(jobQueueName);
} else {
return new JobQueueMetrics();
}
}
public long getMaxHeapSize()
{
return Runtime.getRuntime().maxMemory() / (1024 * 1024);
}
public Long getUsedMemory()
{
return Runtime.getRuntime().totalMemory() / (1024 * 1024);
}
public Long getHeapSize() { return Runtime.getRuntime().totalMemory() / (1024 * 1024); }
public Long getHeapUsed() {
return (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / (1024 * 1024);
}
public Integer getMemoryUsage()
{
return new Float(((float) getHeapUsed() / (float) getMaxHeapSize()) * 100).intValue();
}
public NumberFormatter getNumberFormatter()
{
return new NumberFormatter();
}
}