diff --git a/src/main/java/kieker/analysis/plugin/filter/sink/GCDisplayFilter.java b/src/main/java/kieker/analysis/plugin/filter/sink/GCDisplayFilter.java new file mode 100644 index 0000000000000000000000000000000000000000..f07e0b4fbe9a0fbe1416cf06d4a37286dcf352a6 --- /dev/null +++ b/src/main/java/kieker/analysis/plugin/filter/sink/GCDisplayFilter.java @@ -0,0 +1,82 @@ +/*************************************************************************** + * Copyright 2015 Kieker Project (http://kieker-monitoring.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + ***************************************************************************/ +package kieker.analysis.plugin.filter.sink; + +import java.util.Date; +import java.util.concurrent.TimeUnit; + +import kieker.analysis.display.XYPlot; +import kieker.analysis.display.annotation.Display; +import kieker.common.record.jvm.GCRecord; + +import teetime.stage.basic.AbstractFilter; + +/** + * @author Nils Christian Ehmke, Lars Erik Bluemke + * + * @since 1.10 + */ +public class GCDisplayFilter extends AbstractFilter<GCRecord> { + + private static final String COLLECTION_TIME = "Collection Time"; + private static final String COLLECTION_COUNT = "Collection Count"; + + private final XYPlot xyplot; + + private final int numberOfEntries; + + private final TimeUnit recordsTimeUnit; + + /** + * Creates a new instance of this class using the given parameters. + * + * @param numberOfEntries + * Maximal number of entries in a XYPlot + * @param recordsTimeUnit + * Time unit to interpret the timestamp of a record passed to the input port + * + * @see kieker.analysis.display.XYPlot + */ + public GCDisplayFilter(final int numberOfEntries, final TimeUnit recordsTimeUnit) { + this.numberOfEntries = numberOfEntries; + this.recordsTimeUnit = recordsTimeUnit; + + // Create the display objects + this.xyplot = new XYPlot(this.numberOfEntries); + } + + @Override + protected void execute(final GCRecord record) { + this.updateDisplays(record); + } + + private void updateDisplays(final GCRecord record) { + // Calculate the minutes and seconds of the logging timestamp of the record + final Date date = new Date(TimeUnit.MILLISECONDS.convert(record.getLoggingTimestamp(), recordsTimeUnit)); + final String minutesAndSeconds = date.toString().substring(14, 19); + + final String id = record.getHostname() + " - " + record.getVmName() + " - " + record.getGcName(); + + this.xyplot.setEntry(id + " - " + GCDisplayFilter.COLLECTION_COUNT, minutesAndSeconds, record.getCollectionCount()); + this.xyplot.setEntry(id + " - " + GCDisplayFilter.COLLECTION_TIME, minutesAndSeconds, record.getCollectionTimeMS()); + } + + @Display(name = "XYPlot Display") + public XYPlot getXYPlot() { + return this.xyplot; + } + +}