package org.zstack.core.cloudbus; import org.zstack.header.core.AbstractCompositeType; import org.zstack.header.exception.CloudRuntimeException; import javax.management.MXBean; import javax.management.openmbean.*; /** */ @MXBean public class MessageStatistic extends AbstractCompositeType { private String messageClassName; private long totalTime; private long averageTime; private long count; private long maxTime; private long minTime; static String[] fieldNames = new String[] {"messageClassName", "totalTime", "averageTime", "count", "maxTime", "minTime"}; public String getMessageClassName() { return messageClassName; } public void setMessageClassName(String messageClassName) { this.messageClassName = messageClassName; } public long getAverageTime() { return averageTime; } public void setAverageTime(long averageTime) { this.averageTime = averageTime; } public long getMaxTime() { return maxTime; } public void setMaxTime(long maxTime) { this.maxTime = maxTime; } public long getMinTime() { return minTime; } public void setMinTime(long minTime) { this.minTime = minTime; } public long getTotalTime() { return totalTime; } public void setTotalTime(long totalTime) { this.totalTime = totalTime; } public long getCount() { return count; } public void setCount(long count) { this.count = count; } public void count(long cost) { if (Long.MAX_VALUE - cost < totalTime) { totalTime = cost; count = 1; } else { totalTime += cost; count ++; } averageTime = totalTime / count; maxTime = Math.max(cost, maxTime); minTime = Math.min(cost, minTime); } @Override protected String[] getFieldNames() { return fieldNames; } @Override public CompositeType getCompositeType() { try { return new CompositeType( "MessageStatistic", "message statistic struct", fieldNames, fieldNames, new OpenType[] {SimpleType.STRING, SimpleType.LONG, SimpleType.LONG, SimpleType.LONG, SimpleType.LONG, SimpleType.LONG} ); } catch (OpenDataException e) { throw new CloudRuntimeException(e); } } }