/*
* Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com
* The software in this package is published under the terms of the CPAL v1.0
* license, a copy of which has been included with this distribution in the
* LICENSE.txt file.
*/
package org.mule.runtime.core.management.stats;
import org.mule.runtime.core.management.stats.printers.AbstractTablePrinter;
import org.mule.runtime.core.management.stats.printers.SimplePrinter;
import java.io.PrintWriter;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
/**
* <code>AllStatistics</code> TODO
*/
public class AllStatistics {
private boolean isStatisticsEnabled;
private long startTime;
private ApplicationStatistics appStats;
private Map<String, FlowConstructStatistics> flowConstructStats = new HashMap<String, FlowConstructStatistics>();
/**
*
*/
public AllStatistics() {
clear();
appStats = new ApplicationStatistics(this);
appStats.setEnabled(isStatisticsEnabled);
add(appStats);
}
public void logSummary() {
logSummary(new SimplePrinter(System.out));
}
public void logSummary(PrintWriter printer) {
if (printer instanceof AbstractTablePrinter) {
printer.print(flowConstructStats.values());
} else {
for (FlowConstructStatistics statistics : flowConstructStats.values()) {
printer.print(statistics);
}
}
// printer.println("-----------------------------");
// printer.println("duration (ms): " + (System.currentTimeMillis() -
// startTime));
}
public synchronized void clear() {
for (FlowConstructStatistics statistics : getServiceStatistics()) {
statistics.clear();
}
startTime = System.currentTimeMillis();
}
/**
* Are statistics logged
*/
public boolean isEnabled() {
return isStatisticsEnabled;
}
/**
* Enable statistics logs (this is a dynamic parameter)
*/
public void setEnabled(boolean b) {
isStatisticsEnabled = b;
for (FlowConstructStatistics statistics : flowConstructStats.values()) {
statistics.setEnabled(b);
}
}
public synchronized long getStartTime() {
return startTime;
}
public synchronized void setStartTime(long startTime) {
this.startTime = startTime;
}
public synchronized void add(FlowConstructStatistics stat) {
if (stat != null) {
flowConstructStats.put(stat.getName(), stat);
}
}
public synchronized void remove(FlowConstructStatistics stat) {
if (stat != null) {
flowConstructStats.remove(stat.getName());
}
}
public synchronized Collection<FlowConstructStatistics> getServiceStatistics() {
return flowConstructStats.values();
}
public FlowConstructStatistics getApplicationStatistics() {
return appStats;
}
}