
info.mikaelsvensson.devtools.analysis.db2.Db2MonReportGenerator Maven / Gradle / Ivy
/*
* Copyright 2014 Mikael Svensson
*
* 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 info.mikaelsvensson.devtools.analysis.db2;
import info.mikaelsvensson.devtools.analysis.shared.AbstractLog;
import info.mikaelsvensson.devtools.analysis.shared.ReportGenerator;
import info.mikaelsvensson.devtools.analysis.shared.SampleCollector;
import info.mikaelsvensson.devtools.analysis.shared.reportprinter.ReportPrinter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.util.*;
import java.util.regex.Pattern;
public class Db2MonReportGenerator implements ReportGenerator
{
private static final int MIN_VALUE_COLUMN_WIDTH = 10;
private final String[] _columnNames;
private final int[] _outputColumnIndexes;
private final int[] _idColumnIndexes;
private Db2MonLog _log;
private Pattern _rowIdFilter;
public Db2MonReportGenerator(Db2MonLog log, String[] columnNames, String[] outputColumnNames, String[] idColumnNames, String rowIdFilterPattern)
{
_log = log;
_columnNames = columnNames;
final List names = Arrays.asList(_columnNames);
if (outputColumnNames == null || outputColumnNames.length == 0)
{
List temp = new ArrayList(names);
for (String idColumnName : idColumnNames)
{
temp.remove(idColumnName);
}
outputColumnNames = temp.toArray(new String[temp.size()]);
}
_outputColumnIndexes = new int[outputColumnNames.length];
for (int i = 0; i < outputColumnNames.length; i++)
{
_outputColumnIndexes[i] = names.indexOf(outputColumnNames[i]);
}
_idColumnIndexes = new int[idColumnNames.length];
for (int i = 0; i < idColumnNames.length; i++)
{
_idColumnIndexes[i] = names.indexOf(idColumnNames[i]);
}
if (rowIdFilterPattern != null)
{
_rowIdFilter = Pattern.compile(rowIdFilterPattern);
}
}
@Override
public void generateReport(File outputFile, ReportPrinter reportPrinter) throws FileNotFoundException
{
final PrintStream printStream = new PrintStream(outputFile);
final Map> samplesBySnapshot = AbstractLog.groupSamples(SampleCollector.COLLECTOR_BY_SESSION_DATE, _log.getSamples());
Map> snapshotsMap = new TreeMap>();
for (Map.Entry> entry : samplesBySnapshot.entrySet())
{
final TreeMap statsMap = new TreeMap();
snapshotsMap.put(entry.getKey(), statsMap);
final Collection snapshotSamples = entry.getValue();
for (Db2MonSample sample : snapshotSamples)
{
final String rowId = getJoinedIdColumns(sample.getValues());
statsMap.put(rowId, sample.getValues());
}
}
Map.Entry>[] snapshots = snapshotsMap.entrySet().toArray(new Map.Entry[snapshotsMap.entrySet().size()]);
for (int i = 1; i < snapshots.length; i++)
{
final String curSnapshotId = snapshots[i].getKey();
final Map curSnapshotStatsMap = snapshots[i].getValue();
final String prevSnapshotId = snapshots[i - 1].getKey();
final Map prevSnapshotStatsMap = snapshots[i - 1].getValue();
List
© 2015 - 2025 Weber Informatics LLC | Privacy Policy