[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