diff --git a/src/main/java/kieker/analysis/plugin/filter/sink/MemSwapUtilizationDisplayFilter.java b/src/main/java/kieker/analysis/plugin/filter/sink/MemSwapUtilizationDisplayFilter.java new file mode 100644 index 0000000000000000000000000000000000000000..cd366c514f393abe38a29601d12b02ed946b8d60 --- /dev/null +++ b/src/main/java/kieker/analysis/plugin/filter/sink/MemSwapUtilizationDisplayFilter.java @@ -0,0 +1,121 @@ +/*************************************************************************** + * 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.PieChart; +import kieker.analysis.display.XYPlot; +import kieker.analysis.display.annotation.Display; +import kieker.common.record.system.MemSwapUsageRecord; + +import teetime.stage.basic.AbstractFilter; + +/** + * This is a filter which accepts {@link MemSwapUsageRecord} instances and provides different views to visualize them. + * + * @author Bjoern Weissenfels, Nils Christian Ehmke, Lars Erik Bluemke + * + * @since 1.8 + */ +public class MemSwapUtilizationDisplayFilter extends AbstractFilter<MemSwapUsageRecord> { + + private static final String MEM_FREE = "memFree"; + private static final String MEM_TOTAL = "memTotal"; + private static final String MEM_USED = "memUsed"; + private static final String SWAP_FREE = "swapFree"; + private static final String SWAP_TOTAL = "swapTotal"; + private static final String SWAP_USED = "swapUsed"; + + private final XYPlot xyplot; + private final PieChart memPieChart; + private final PieChart swapPieChart; + + private final int numberOfEntries; + + private final TimeUnit recordsTimeUnit; + + /** + * Creates a new instance of this filter. + * + * @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 + * @see kieker.analysis.display.PieChart + */ + public MemSwapUtilizationDisplayFilter(final int numberOfEntries, final TimeUnit recordsTimeUnit) { + this.numberOfEntries = numberOfEntries; + this.recordsTimeUnit = recordsTimeUnit; + + // Create the display objects + this.xyplot = new XYPlot(this.numberOfEntries); + this.memPieChart = new PieChart(); + this.swapPieChart = new PieChart(); + } + + /** + * This method represents the input port receiving the incoming events. + * + * @param record + * The record to display and relay. + */ + @Override + protected void execute(final MemSwapUsageRecord record) { + this.updateDisplays(record); + } + + private void updateDisplays(final MemSwapUsageRecord 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(); + + this.xyplot.setEntry(id + " - " + MemSwapUtilizationDisplayFilter.MEM_FREE, minutesAndSeconds, record.getMemFree() / 1048576); + this.xyplot.setEntry(id + " - " + MemSwapUtilizationDisplayFilter.MEM_TOTAL, minutesAndSeconds, record.getMemTotal() / 1048576); + this.xyplot.setEntry(id + " - " + MemSwapUtilizationDisplayFilter.MEM_USED, minutesAndSeconds, record.getMemUsed() / 1048576); + this.xyplot.setEntry(id + " - " + MemSwapUtilizationDisplayFilter.SWAP_FREE, minutesAndSeconds, record.getSwapFree() / 1048576); + this.xyplot.setEntry(id + " - " + MemSwapUtilizationDisplayFilter.SWAP_TOTAL, minutesAndSeconds, record.getSwapTotal() / 1048576); + this.xyplot.setEntry(id + " - " + MemSwapUtilizationDisplayFilter.SWAP_USED, minutesAndSeconds, record.getSwapUsed() / 1048576); + + this.memPieChart.setValue(id + " - " + MemSwapUtilizationDisplayFilter.MEM_FREE, record.getMemFree()); + this.memPieChart.setValue(id + " - " + MemSwapUtilizationDisplayFilter.MEM_USED, record.getMemUsed()); + + this.swapPieChart.setValue(id + " - " + MemSwapUtilizationDisplayFilter.SWAP_FREE, record.getSwapFree()); + this.swapPieChart.setValue(id + " - " + MemSwapUtilizationDisplayFilter.SWAP_USED, record.getSwapUsed()); + } + + @Display(name = "XYPlot Memory utilization Display") + public XYPlot getXYPlot() { + return this.xyplot; + } + + @Display(name = "PieChart Memory Utilization Display") + public PieChart getMemPieChart() { + return this.memPieChart; + } + + @Display(name = "PieChart Swap Utilization Display") + public PieChart getSwapPieChart() { + return this.swapPieChart; + } + +}