Skip to content

Commit

Permalink
refactor DataReaderIBM_J9_R28 to extend AbstractDataReader (#175)
Browse files Browse the repository at this point in the history
  • Loading branch information
chewiebug committed Aug 11, 2016
1 parent 6162fa2 commit 6a349b0
Show file tree
Hide file tree
Showing 5 changed files with 76 additions and 47 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ else if (s.indexOf("<GC: ") == 0 && s.indexOf('>') != -1 && new StringTokenizer(
}
else if (s.contains("<verbosegc") && (s.contains("version=\"R26_Java6") || s.contains("version=\"R27_Java7") || s.contains("version=\"R28_Java8"))) {
if (getLogger().isLoggable(Level.INFO)) getLogger().info("File format: IBM J9 R26 / R27 / R28");
return new DataReaderIBM_J9_R28(in);
return new DataReaderIBM_J9_R28(gcResource, in);
}
else if (s.indexOf("<verbosegc version=\"") != -1) {
if (getLogger().isLoggable(Level.INFO)) getLogger().info("File format: IBM J9 5.0");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,14 @@

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.io.UnsupportedEncodingException;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
Expand All @@ -23,12 +22,13 @@
import com.tagtraum.perf.gcviewer.model.AbstractGCEvent.Type;
import com.tagtraum.perf.gcviewer.model.GCEvent;
import com.tagtraum.perf.gcviewer.model.GCModel;
import com.tagtraum.perf.gcviewer.model.GCResource;
import com.tagtraum.perf.gcviewer.util.NumberParser;

/**
* Parser for IBM gc logs R26_Java6 + R27_Java7 + R28_Java8
*/
public class DataReaderIBM_J9_R28 implements DataReader {
public class DataReaderIBM_J9_R28 extends AbstractDataReader {
// TODO IBM_J9: support system gcs

private static final String VERBOSEGC = "verbosegc";
Expand All @@ -38,13 +38,13 @@ public class DataReaderIBM_J9_R28 implements DataReader {
private static final String GC_END = "gc-end";
private static final String EXCLUSIVE_END = "exclusive-end";

private static Logger LOG = Logger.getLogger(DataReaderIBM_J9_R28.class.getName());
private final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;

private LineNumberReader in;

public DataReaderIBM_J9_R28(InputStream in) {
this.in = new LineNumberReader(new InputStreamReader(in));
public DataReaderIBM_J9_R28(GCResource gcResource, InputStream in) throws UnsupportedEncodingException {
super(gcResource, in);
this.in = super.in;
}

@Override
Expand Down Expand Up @@ -85,16 +85,16 @@ public GCModel read() throws IOException {
}
}
catch (XMLStreamException e) {
if (LOG.isLoggable(Level.WARNING)) LOG.warning("line " + in.getLineNumber() + ": " + e.toString());
if (LOG.isLoggable(Level.FINE)) LOG.log(Level.FINE, "line " + in.getLineNumber() + ": " + e.getMessage(), e);
if (getLogger().isLoggable(Level.WARNING)) getLogger().warning("line " + in.getLineNumber() + ": " + e.toString());
if (getLogger().isLoggable(Level.FINE)) getLogger().log(Level.FINE, "line " + in.getLineNumber() + ": " + e.getMessage(), e);
}

return model;
}

private void handleVerboseGC(StartElement startElement) {
assert startElement.getName().getLocalPart().equals(VERBOSEGC) : "expected name of startElement: " + VERBOSEGC + ", but got " + startElement.getName();
LOG.info("gc log version = " + getAttributeValue(startElement, "version"));
getLogger().info("gc log version = " + getAttributeValue(startElement, "version"));
}

private void handleInitialized(XMLEventReader eventReader) throws XMLStreamException {
Expand All @@ -106,7 +106,7 @@ private void handleInitialized(XMLEventReader eventReader) throws XMLStreamExcep
if (startElement.getName().getLocalPart().equals("attribute")) {
String name = getAttributeValue(startElement, "name");
if (name != null && name.equals("gcPolicy")) {
LOG.info("gcPolicy = " + getAttributeValue(startElement, "value"));
getLogger().info("gcPolicy = " + getAttributeValue(startElement, "value"));
}
}
}
Expand All @@ -125,8 +125,8 @@ private GCEvent handleExclusiveStart(StartElement startElement) {
ZoneId.systemDefault()));
}
catch (DateTimeParseException e) {
if (LOG.isLoggable(Level.WARNING)) LOG.warning("line " + in.getLineNumber() + ": " + e.toString());
if (LOG.isLoggable(Level.FINE)) LOG.log(Level.FINE, "line " + in.getLineNumber() + ": " + e.getMessage(), e);
if (getLogger().isLoggable(Level.WARNING)) getLogger().warning("line " + in.getLineNumber() + ": " + e.toString());
if (getLogger().isLoggable(Level.FINE)) getLogger().log(Level.FINE, "line " + in.getLineNumber() + ": " + e.getMessage(), e);
}

return event;
Expand All @@ -139,7 +139,7 @@ private void handleExclusiveEnd(StartElement startElement, GCEvent event) {
private void handleGcStart(XMLEventReader eventReader, StartElement startElement, GCEvent event) throws XMLStreamException {
event.setType(Type.lookup(getAttributeValue(startElement, "type")));
if (event.getExtendedType() == null) {
LOG.warning("could not determine type of event " + startElement.toString());
getLogger().warning("could not determine type of event " + startElement.toString());
return;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,31 +5,36 @@
import static org.hamcrest.number.IsCloseTo.closeTo;
import static org.junit.Assert.assertThat;

import java.io.IOException;
import java.io.InputStream;
import java.util.logging.Level;
import java.util.logging.Logger;

import com.tagtraum.perf.gcviewer.UnittestHelper;
import com.tagtraum.perf.gcviewer.model.GCEvent;
import com.tagtraum.perf.gcviewer.model.GCModel;
import com.tagtraum.perf.gcviewer.model.GCResource;
import org.junit.Test;

/**
* Tests some J9_R26 sample files against the IBM J9 parser.
*/
public class TestDataReaderIBM_J9_R26 {
private static final Logger IMP_LOGGER = Logger.getLogger("com.tagtraum.perf.gcviewer.imp");
private static final Logger DATA_READER_FACTORY_LOGGER = Logger.getLogger("com.tagtraum.perf.gcviewer.DataReaderFactory");
private InputStream getInputStream(String fileName) throws IOException {
return UnittestHelper.getResourceAsStream(UnittestHelper.FOLDER_IBM, fileName);
}

private DataReader getDataReader(GCResource gcResource) throws IOException {
return new DataReaderIBM_J9_R28(gcResource, getInputStream(gcResource.getResourceName()));
}

@Test
public void testFullHeaderWithAfGcs() throws Exception {
TestLogHandler handler = new TestLogHandler();
handler.setLevel(Level.WARNING);
IMP_LOGGER.addHandler(handler);
DATA_READER_FACTORY_LOGGER.addHandler(handler);
GCResource gcResource = new GCResource("SampleIBMJ9_R26_GAFP1_full_header.txt");
gcResource.getLogger().addHandler(handler);

InputStream in = UnittestHelper.getResourceAsStream(UnittestHelper.FOLDER_IBM, "SampleIBMJ9_R26_GAFP1_full_header.txt");
DataReader reader = new DataReaderIBM_J9_R28(in);
DataReader reader = getDataReader(gcResource);
GCModel model = reader.read();

assertThat("model size", model.size(), is(1));
Expand All @@ -44,11 +49,10 @@ public void testFullHeaderWithAfGcs() throws Exception {
public void testSystemGc() throws Exception {
TestLogHandler handler = new TestLogHandler();
handler.setLevel(Level.WARNING);
IMP_LOGGER.addHandler(handler);
DATA_READER_FACTORY_LOGGER.addHandler(handler);
GCResource gcResource = new GCResource("SampleIBMJ9_R26_GAFP1_global.txt");
gcResource.getLogger().addHandler(handler);

InputStream in = UnittestHelper.getResourceAsStream(UnittestHelper.FOLDER_IBM, "SampleIBMJ9_R26_GAFP1_global.txt");
DataReader reader = new DataReaderIBM_J9_R28(in);
DataReader reader = getDataReader(gcResource);
GCModel model = reader.read();

assertThat("model size", model.size(), is(1));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,32 +5,38 @@
import static org.hamcrest.number.IsCloseTo.closeTo;
import static org.junit.Assert.assertThat;

import java.io.IOException;
import java.io.InputStream;
import java.util.logging.Level;
import java.util.logging.Logger;

import com.tagtraum.perf.gcviewer.UnittestHelper;
import com.tagtraum.perf.gcviewer.model.GCEvent;
import com.tagtraum.perf.gcviewer.model.GCModel;
import com.tagtraum.perf.gcviewer.model.GCResource;
import org.junit.Test;

/**
* @author <a href="gcviewer@gmx.ch">Joerg Wuethrich</a>
* <p>created on 08.10.2014</p>
*/
public class TestDataReaderIBM_J9_R27 {
private static final Logger IMP_LOGGER = Logger.getLogger("com.tagtraum.perf.gcviewer.imp");
private static final Logger DATA_READER_FACTORY_LOGGER = Logger.getLogger("com.tagtraum.perf.gcviewer.DataReaderFactory");

private InputStream getInputStream(String fileName) throws IOException {
return UnittestHelper.getResourceAsStream(UnittestHelper.FOLDER_IBM, fileName);
}

private DataReader getDataReader(GCResource gcResource) throws IOException {
return new DataReaderIBM_J9_R28(gcResource, getInputStream(gcResource.getResourceName()));
}

@Test
public void testFullHeaderWithAfGcs() throws Exception {
TestLogHandler handler = new TestLogHandler();
handler.setLevel(Level.WARNING);
IMP_LOGGER.addHandler(handler);
DATA_READER_FACTORY_LOGGER.addHandler(handler);
GCResource gcResource = new GCResource("SampleIBMJ9_R27_SR1_full_header.txt");
gcResource.getLogger().addHandler(handler);

InputStream in = UnittestHelper.getResourceAsStream(UnittestHelper.FOLDER_IBM, "SampleIBMJ9_R27_SR1_full_header.txt");
DataReader reader = new DataReaderIBM_J9_R28(in);
DataReader reader = getDataReader(gcResource);
GCModel model = reader.read();

assertThat("model size", model.size(), is(3));
Expand Down Expand Up @@ -61,11 +67,10 @@ public void testFullHeaderWithAfGcs() throws Exception {
public void testSystemGc() throws Exception {
TestLogHandler handler = new TestLogHandler();
handler.setLevel(Level.WARNING);
IMP_LOGGER.addHandler(handler);
DATA_READER_FACTORY_LOGGER.addHandler(handler);
GCResource gcResource = new GCResource("SampleIBMJ9_R27_SR1_global.txt");
gcResource.getLogger().addHandler(handler);

InputStream in = UnittestHelper.getResourceAsStream(UnittestHelper.FOLDER_IBM, "SampleIBMJ9_R27_SR1_global.txt");
DataReader reader = new DataReaderIBM_J9_R28(in);
DataReader reader = getDataReader(gcResource);
GCModel model = reader.read();

assertThat("model size", model.size(), is(1));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,32 +5,38 @@
import static org.hamcrest.number.IsCloseTo.closeTo;
import static org.junit.Assert.assertThat;

import java.io.IOException;
import java.io.InputStream;
import java.util.logging.Level;
import java.util.logging.Logger;

import com.tagtraum.perf.gcviewer.UnittestHelper;
import com.tagtraum.perf.gcviewer.model.GCEvent;
import com.tagtraum.perf.gcviewer.model.GCModel;
import com.tagtraum.perf.gcviewer.model.GCResource;
import org.junit.Test;

/**
* @author <a href="gcviewer@gmx.ch">Joerg Wuethrich</a>
* <p>created on 08.10.2014</p>
*/
public class TestDataReaderIBM_J9_R28 {
private static final Logger IMP_LOGGER = Logger.getLogger("com.tagtraum.perf.gcviewer.imp");
private static final Logger DATA_READER_FACTORY_LOGGER = Logger.getLogger("com.tagtraum.perf.gcviewer.DataReaderFactory");

private InputStream getInputStream(String fileName) throws IOException {
return UnittestHelper.getResourceAsStream(UnittestHelper.FOLDER_IBM, fileName);
}

private DataReader getDataReader(GCResource gcResource) throws IOException {
return new DataReaderIBM_J9_R28(gcResource, getInputStream(gcResource.getResourceName()));
}

@Test
public void testFullHeaderWithAfGcs() throws Exception {
TestLogHandler handler = new TestLogHandler();
handler.setLevel(Level.WARNING);
IMP_LOGGER.addHandler(handler);
DATA_READER_FACTORY_LOGGER.addHandler(handler);
GCResource gcResource = new GCResource("SampleIBMJ9_R28_full_header.txt");
gcResource.getLogger().addHandler(handler);

InputStream in = UnittestHelper.getResourceAsStream(UnittestHelper.FOLDER_IBM, "SampleIBMJ9_R28_full_header.txt");
DataReader reader = new DataReaderIBM_J9_R28(in);
DataReader reader = getDataReader(gcResource);
GCModel model = reader.read();

assertThat("model size", model.size(), is(2));
Expand Down Expand Up @@ -60,11 +66,10 @@ public void testFullHeaderWithAfGcs() throws Exception {
public void testSystemGc() throws Exception {
TestLogHandler handler = new TestLogHandler();
handler.setLevel(Level.WARNING);
IMP_LOGGER.addHandler(handler);
DATA_READER_FACTORY_LOGGER.addHandler(handler);
GCResource gcResource = new GCResource("SampleIBMJ9_R28_global.txt");
gcResource.getLogger().addHandler(handler);

InputStream in = UnittestHelper.getResourceAsStream(UnittestHelper.FOLDER_IBM, "SampleIBMJ9_R28_global.txt");
DataReader reader = new DataReaderIBM_J9_R28(in);
DataReader reader = getDataReader(gcResource);
GCModel model = reader.read();

assertThat("model size", model.size(), is(1));
Expand All @@ -75,4 +80,19 @@ public void testSystemGc() throws Exception {
assertThat("number of errors", handler.getCount(), is(0));
}

@Test
public void testConcurrentMinimal() throws Exception {
// there are minimal concurrent blocks, that don't contain any information, that the parser can use (at least, at the moment)
TestLogHandler handler = new TestLogHandler();
handler.setLevel(Level.WARNING);
GCResource gcResource = new GCResource("SampleIBMJ9_R28_concurrentMinimal.txt");
gcResource.getLogger().addHandler(handler);

DataReader reader = getDataReader(gcResource);
GCModel model = reader.read();

assertThat("model size", model.size(), is(0));
assertThat("number of errors", handler.getCount(), is(0));
}

}

0 comments on commit 6a349b0

Please sign in to comment.