package org.gridkit.jvmtool.gcmon; import java.util.Iterator; import org.gridkit.jvmtool.event.SimpleCounterCollection; import org.gridkit.jvmtool.event.SimpleTagCollection; import org.gridkit.jvmtool.jvmevents.JvmEvents; public class GarbageCollectionEventPojo implements GarbageCollectionEvent { private long timestamp; private SimpleTagCollection tags = new SimpleTagCollection(); private SimpleCounterCollection counters = new SimpleCounterCollection(); @Override public long timestamp() { return timestamp; } public void timestamp(long timestamp) { this.timestamp = timestamp; } @Override public SimpleCounterCollection counters() { return counters; } @Override public SimpleTagCollection tags() { return tags; } @Override public long duration() { return counters().getValue("duration"); } public void duration(long duration) { counters().set("duration", duration); } public void tag(String key, String tag) { tags.put(key, tag); } public void set(String counter, long value) { counters.set(counter, value); } @Override public String collectorName() { return firstTag(JvmEvents.GC_NAME); } public void collectorName(String name) { tags().put(JvmEvents.GC_NAME, name); } @Override public long collectionCount() { return counters.getValue(JvmEvents.GC_COUNT); } @Override public long collectionTotalTime() { return counters.getValue(JvmEvents.GC_TOTAL_TIME_MS); } @Override public Iterable<String> memorySpaces() { return tags.tagsFor(JvmEvents.GC_MEMORY_SPACES); } @Override public long memoryBefore(String space) { return counters.getValue(JvmEvents.memorySpaceBefore(space)); } @Override public long memoryAfter(String space) { return counters.getValue(JvmEvents.memorySpaceUsed(space)); } @Override public long memoryMax(String space) { return counters.getValue(JvmEvents.memorySpaceMax(space)); } @Override public String memorySpaceName(String spaceId) { return firstTag(JvmEvents.memorySpaceName(spaceId)); } private String firstTag(String key) { Iterator<String> it = tags.tagsFor(key).iterator(); return it.hasNext() ? it.next() : null; } public void loadFrom(GarbageCollectionSummary gcevent) { collectorName(gcevent.collectorName()); timestamp(gcevent.timestamp()); duration(gcevent.duration()); counters().set(JvmEvents.GC_COUNT, gcevent.collectionCount()); counters().set(JvmEvents.GC_TOTAL_TIME_MS, gcevent.collectionTotalTime()); for(String spaceId: gcevent.memorySpaces()) { tags().put(JvmEvents.GC_MEMORY_SPACES, spaceId); tags().put(JvmEvents.memorySpaceName(spaceId), gcevent.memorySpaceName(spaceId)); counters().set(JvmEvents.memorySpaceBefore(spaceId), gcevent.memoryBefore(spaceId)); counters().set(JvmEvents.memorySpaceUsed(spaceId), gcevent.memoryAfter(spaceId)); counters().set(JvmEvents.memorySpaceMax(spaceId), gcevent.memoryMax(spaceId)); } } }