[jboss-svn-commits] JBL Code SVN: r37855 - in labs/jbosstm/branches/JBOSSTS_4_16/XTS/sar/crash-recovery-tests/src/main/java/com/arjuna/qa: simplifylogs and 1 other directory.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Jan 19 09:26:01 EST 2012
Author: paul.robinson
Date: 2012-01-19 09:26:01 -0500 (Thu, 19 Jan 2012)
New Revision: 37855
Added:
labs/jbosstm/branches/JBOSSTS_4_16/XTS/sar/crash-recovery-tests/src/main/java/com/arjuna/qa/simplifylogs/
labs/jbosstm/branches/JBOSSTS_4_16/XTS/sar/crash-recovery-tests/src/main/java/com/arjuna/qa/simplifylogs/SimplifyLogs.java
Log:
JBTM-1027 Create a script to simplify XTS crash-recovery logs
Added: labs/jbosstm/branches/JBOSSTS_4_16/XTS/sar/crash-recovery-tests/src/main/java/com/arjuna/qa/simplifylogs/SimplifyLogs.java
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_16/XTS/sar/crash-recovery-tests/src/main/java/com/arjuna/qa/simplifylogs/SimplifyLogs.java (rev 0)
+++ labs/jbosstm/branches/JBOSSTS_4_16/XTS/sar/crash-recovery-tests/src/main/java/com/arjuna/qa/simplifylogs/SimplifyLogs.java 2012-01-19 14:26:01 UTC (rev 37855)
@@ -0,0 +1,217 @@
+package com.arjuna.qa.simplifylogs;
+
+import java.io.*;
+import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * @author paul.robinson at redhat.com, 2012-01-17
+ */
+public class SimplifyLogs
+{
+ public static void main(String... args) throws Exception
+ {
+ if (args.length != 2)
+ {
+ System.err.println("Usage: SimplifyLogs <log dir> <output dir>");
+ System.exit(1);
+ }
+
+ File logDir = createAndTestDir(args[0], false);
+ File outputDir = createAndTestDir(args[1], true);
+
+ for (File file : logDir.listFiles())
+ {
+ List<String> log = loadLog(file);
+
+ if (log.size() == 0)
+ {
+ System.err.println("Empty file: " + file.getName());
+ continue;
+ }
+
+ log = stripJVMExitFromLastLine(log);
+ log = simplifyUUIDs(log);
+ log = removeDuplicatesKeepingLastOccurrence(log);
+
+ List<String> beforeCrash = new ArrayList<String>();
+ List<String> afterCrash = new ArrayList<String>();
+ splitIntoBeforeAndAfterCrash(log, beforeCrash, afterCrash);
+
+ outputProcessedFile(beforeCrash, afterCrash, outputDir, file.getName(), file);
+ }
+ }
+
+ static List<String> stripJVMExitFromLastLine(List<String> log)
+ {
+ int lastIndex = log.size()-1;
+ if (log.get(lastIndex).equals("JVM exit"))
+ {
+ log.remove(lastIndex);
+ }
+ return log;
+ }
+
+ static void printLog(List<String> log, String title, PrintStream out)
+ {
+ out.println("=== " + title + "===");
+ for (String line : log)
+ {
+ out.println(line);
+ }
+ }
+
+ static void outputProcessedFile(List<String> beforeCrash, List<String> afterCrash, File outputLocation, String outFileName, File inputFile) throws Exception
+ {
+ File outFile = new File(outputLocation.getPath() + File.separator + outFileName);
+ FileOutputStream fstream = new FileOutputStream(outFile);
+ DataOutputStream out = new DataOutputStream(fstream);
+ PrintStream printStream = new PrintStream(out);
+
+ printStream.println("Original File: " + inputFile.getAbsoluteFile());
+ printStream.println();
+ printStream.println();
+ printLog(beforeCrash, "Before crash", printStream);
+ printStream.println();
+ printStream.println();
+ printLog(afterCrash, "After crash", printStream);
+ }
+
+ static File createAndTestDir(String path, boolean create)
+ {
+ File result = new File(path);
+
+ if (create)
+ {
+ result.mkdir();
+ }
+
+ if (!result.exists())
+ {
+ System.err.println("Directory does not exist: " + path);
+ System.exit(1);
+ }
+
+ if (!result.isDirectory())
+ {
+ System.err.println("Path represents a file, not a directory: " + path);
+ System.exit(1);
+ }
+
+ return result;
+ }
+
+ static void splitIntoBeforeAndAfterCrash(List<String> log, List<String> beforeCrash, List<String> afterCrash)
+ {
+ boolean before = true;
+ for (String line : log)
+ {
+ if (before)
+ {
+ if (line.equals("JVM exit"))
+ {
+ before = false;
+ continue;
+ }
+ beforeCrash.add(line);
+ }
+ else
+ {
+ afterCrash.add(line);
+ }
+ }
+ }
+
+ static List<String> removeDuplicatesKeepingLastOccurrence(List<String> list)
+ {
+ List<String> result = new ArrayList<String>();
+ List<String> seenLines = new ArrayList<String>();
+
+ ListIterator i = list.listIterator();
+ while (i.hasNext())
+ {
+ i.next();
+ }
+
+ while (i.hasPrevious())
+ {
+ String line = (String) i.previous();
+ if (!seenLines.contains(line))
+ {
+ seenLines.add(line);
+ result.add(line);
+ }
+ }
+
+ return reverse(result);
+ }
+
+ static List<String> loadLog(File fileName) throws IOException
+ {
+ List<String> log = new ArrayList<String>();
+
+ FileInputStream fstream = new FileInputStream(fileName);
+ DataInputStream in = new DataInputStream(fstream);
+ BufferedReader br = new BufferedReader(new InputStreamReader(in));
+ String line;
+ //Read File Line By Line
+ while ((line = br.readLine()) != null)
+ {
+ log.add(line);
+ }
+ in.close();
+ return log;
+ }
+
+ static List<String> reverse(List<String> list)
+ {
+ List<String> result = new ArrayList<String>();
+ ListIterator i = list.listIterator();
+ while (i.hasNext())
+ {
+ i.next();
+ }
+
+ while (i.hasPrevious())
+ {
+ String line = (String) i.previous();
+ result.add(line);
+ }
+
+ return result;
+ }
+
+ static List<String> simplifyUUIDs(List<String> log)
+ {
+ Pattern pattern = Pattern.compile("(-)*[a-fA-F0-9]+:(-)*[a-fA-F0-9]+:(-)*[a-fA-F0-9]+:(-)*[a-fA-F0-9]{8}:(-)*[a-fA-F0-9]+");
+
+ Map<String, Integer> simplifiedUUIDS = new HashMap<String, Integer>();
+
+ List<String> result = new ArrayList<String>();
+ for (String line : log)
+ {
+ Matcher matcher = pattern.matcher(line);
+
+ if (matcher.find())
+ {
+ String uuid = matcher.group();
+
+ Integer simplifiedID = simplifiedUUIDS.get(uuid);
+ if (simplifiedID == null)
+ {
+ simplifiedID = simplifiedUUIDS.size();
+ simplifiedUUIDS.put(uuid, simplifiedID);
+ }
+
+ result.add(line.replace(uuid, String.valueOf(simplifiedID)));
+ }
+ else
+ {
+ result.add(line);
+ }
+ }
+ return result;
+ }
+
+}
More information about the jboss-svn-commits
mailing list