/*
* 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;
/**
* Aggregate statistics for all services and flows in an application. Do this by looping through all of the applications'
* FlowConstructStatistics that aren;t themselves aggregators.
*/
public class ApplicationStatistics extends FlowConstructStatistics {
private AllStatistics parent;
public ApplicationStatistics(AllStatistics parent) {
super("Application", "application totals");
this.parent = parent;
}
@Override
public long getAverageProcessingTime() {
long totalTime = 0;
long totalEvents = 0;
for (FlowConstructStatistics stats : parent.getServiceStatistics()) {
if (!(stats instanceof ApplicationStatistics)) {
totalEvents += stats.getProcessedEvents();
totalTime += stats.getTotalProcessingTime();
}
}
return totalEvents == 0 ? 0 : totalTime / totalEvents;
}
@Override
public long getProcessedEvents() {
long total = 0;
for (FlowConstructStatistics stats : parent.getServiceStatistics()) {
if (!(stats instanceof ApplicationStatistics)) {
total += stats.getProcessedEvents();
}
}
return total;
}
@Override
public long getMinProcessingTime() {
long min = 0;
boolean first = true;
for (FlowConstructStatistics stats : parent.getServiceStatistics()) {
if (!(stats instanceof ApplicationStatistics)) {
long flowMin = stats.getMinProcessingTime();
if (first) {
min = flowMin;
} else {
min = Math.min(min, flowMin);
}
}
first = false;
}
return min;
}
@Override
public long getMaxProcessingTime() {
long max = 0;
for (FlowConstructStatistics stats : parent.getServiceStatistics()) {
if (!(stats instanceof ApplicationStatistics)) {
max = Math.max(max, stats.getMaxProcessingTime());
}
}
return max;
}
@Override
public long getTotalProcessingTime() {
long total = 0;
for (FlowConstructStatistics stats : parent.getServiceStatistics()) {
if (!(stats instanceof ApplicationStatistics)) {
total += stats.getTotalProcessingTime();
}
}
return total;
}
@Override
public long getExecutionErrors() {
long total = 0;
for (FlowConstructStatistics stats : parent.getServiceStatistics()) {
if (!(stats instanceof ApplicationStatistics)) {
total += stats.getExecutionErrors();
}
}
return total;
}
@Override
public long getFatalErrors() {
long total = 0;
for (FlowConstructStatistics stats : parent.getServiceStatistics()) {
if (!(stats instanceof ApplicationStatistics)) {
total += stats.getFatalErrors();
}
}
return total;
}
@Override
public long getTotalEventsReceived() {
long total = 0;
for (FlowConstructStatistics stats : parent.getServiceStatistics()) {
if (!(stats instanceof ApplicationStatistics)) {
total += stats.getTotalEventsReceived();
}
}
return total;
}
}