summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Rowe <erowe@google.com>2015-10-28 18:56:49 -0700
committerEric Rowe <erowe@google.com>2015-10-28 19:04:13 -0700
commitc20ea281cf1762806d297cf4ddf3cff3b60b9cec (patch)
treec978ff44891323bf62b109da3dab978fc8ecbb06
parent52942e69d7a03b8d504ccfae07d9109048bf0ae8 (diff)
downloadloganalysis-c20ea281cf1762806d297cf4ddf3cff3b60b9cec.tar.gz
Only add unknown reset if no good boot reason
Change-Id: Ie36b3192e49aa3570185da5eab78157e85e27e41
-rw-r--r--src/com/android/loganalysis/parser/BugreportParser.java27
-rw-r--r--src/com/android/loganalysis/parser/KernelLogParser.java26
-rw-r--r--tests/src/com/android/loganalysis/parser/BugreportParserTest.java10
-rw-r--r--tests/src/com/android/loganalysis/parser/MonkeyLogParserTest.java4
-rw-r--r--tests/src/com/android/loganalysis/parser/NativeCrashParserTest.java1
5 files changed, 51 insertions, 17 deletions
diff --git a/src/com/android/loganalysis/parser/BugreportParser.java b/src/com/android/loganalysis/parser/BugreportParser.java
index 4243d67..14ac2a1 100644
--- a/src/com/android/loganalysis/parser/BugreportParser.java
+++ b/src/com/android/loganalysis/parser/BugreportParser.java
@@ -175,6 +175,8 @@ public class BugreportParser extends AbstractSectionParser {
addSectionParser(mLastKmsgParser, LAST_KMSG_SECTION_REGEX);
addSectionParser(mDumpsysParser, DUMPSYS_SECTION_REGEX);
addSectionParser(new NoopParser(), NOOP_SECTION_REGEX);
+ mKernelLogParser.setAddUnknownBootreason(false);
+ mLastKmsgParser.setAddUnknownBootreason(false);
}
/**
@@ -218,19 +220,36 @@ public class BugreportParser extends AbstractSectionParser {
traces.getStack());
}
+ KernelLogItem lastKmsg = mBugreport.getLastKmsg();
+ if (lastKmsg == null) {
+ lastKmsg = new KernelLogItem();
+ mBugreport.setLastKmsg(lastKmsg);
+ }
if (mCommandLine.containsKey(BOOTREASON)) {
String bootreason = mCommandLine.get(BOOTREASON);
Matcher m = KernelLogParser.BAD_BOOTREASONS.matcher(bootreason);
if (m.matches()) {
- if (mBugreport.getLastKmsg() == null) {
- mBugreport.setLastKmsg(new KernelLogItem());
- }
MiscKernelLogItem item = new MiscKernelLogItem();
item.setStack("Last boot reason: " + bootreason.trim());
item.setCategory(KernelLogParser.KERNEL_RESET);
- mBugreport.getLastKmsg().addEvent(item);
+ lastKmsg.addEvent(item);
+ }
+ m = KernelLogParser.GOOD_BOOTREASONS.matcher(bootreason);
+ if (m.matches()) {
+ MiscKernelLogItem item = new MiscKernelLogItem();
+ item.setStack("Last boot reason: " + bootreason.trim());
+ item.setCategory(KernelLogParser.NORMAL_REBOOT);
+ lastKmsg.addEvent(item);
}
}
+
+ if (lastKmsg.getMiscEvents(KernelLogParser.KERNEL_RESET).isEmpty() &&
+ lastKmsg.getMiscEvents(KernelLogParser.NORMAL_REBOOT).isEmpty()) {
+ MiscKernelLogItem unknownReset = new MiscKernelLogItem();
+ unknownReset.setStack("Unknown reason");
+ unknownReset.setCategory(KernelLogParser.KERNEL_RESET);
+ lastKmsg.addEvent(unknownReset);
+ }
}
}
diff --git a/src/com/android/loganalysis/parser/KernelLogParser.java b/src/com/android/loganalysis/parser/KernelLogParser.java
index add195f..2a9deaf 100644
--- a/src/com/android/loganalysis/parser/KernelLogParser.java
+++ b/src/com/android/loganalysis/parser/KernelLogParser.java
@@ -49,8 +49,16 @@ public class KernelLogParser implements IParser {
* Regular expression representing all known bootreasons which are bad.
*/
public static final Pattern BAD_BOOTREASONS = Pattern.compile(
- "(?:kernel_panic|rpm_err|hw_reset(?:$|\\n)|wdog_.*|tz_err|adsp_err|modem_err|mba_err|"
- + "watchdogr?|Watchdog|Panic|srto:.*)");
+ "(?:kernel_panic.*|rpm_err|hw_reset(?:$|\\n)|wdog_.*|tz_err|adsp_err|modem_err|mba_err|"
+ + "watchdog.*|Watchdog|Panic|srto:.*|oemerr.*)");
+
+ /**
+ * Regular expression representing all known bootreasons which are good.
+ */
+ public static final Pattern GOOD_BOOTREASONS = Pattern.compile(
+ "(?:PowerKey|normal|recovery|reboot.*)");
+
+ private boolean mAddUnknownBootreason = true;
private KernelLogItem mKernelLog = null;
private Double mStartTime = null;
@@ -58,12 +66,16 @@ public class KernelLogParser implements IParser {
private LogPatternUtil mPatternUtil = new LogPatternUtil();
private LogTailUtil mPreambleUtil = new LogTailUtil(500, 50, 50);
- private boolean mRebootReasonFound = false;
+ private boolean mBootreasonFound = false;
public KernelLogParser() {
initPatterns();
}
+ public void setAddUnknownBootreason(boolean enable) {
+ mAddUnknownBootreason = enable;
+ }
+
/**
* Parse a kernel log from a {@link BufferedReader} into an {@link KernelLogItem} object.
*
@@ -87,7 +99,7 @@ public class KernelLogParser implements IParser {
*/
@Override
public KernelLogItem parse(List<String> lines) {
- mRebootReasonFound = false;
+ mBootreasonFound = false;
for (String line : lines) {
parseLine(line);
}
@@ -136,7 +148,7 @@ public class KernelLogParser implements IParser {
}
if (category.equals(KERNEL_RESET) || category.equals(NORMAL_REBOOT)) {
- mRebootReasonFound = true;
+ mBootreasonFound = true;
}
if (category.equals(NORMAL_REBOOT)) {
@@ -171,7 +183,7 @@ public class KernelLogParser implements IParser {
mKernelLog.setStartTime(mStartTime);
mKernelLog.setStopTime(mStopTime);
- if (!mRebootReasonFound) {
+ if (mAddUnknownBootreason && !mBootreasonFound) {
MiscKernelLogItem unknownReset = new MiscKernelLogItem();
unknownReset.setEventTime(mStopTime);
unknownReset.setPreamble(mPreambleUtil.getLastTail());
@@ -204,7 +216,7 @@ public class KernelLogParser implements IParser {
final String[] goodSignatures = {
"Restarting system.*",
"Power down.*",
- "Last boot reason: (?:PowerKey|normal|recovery|reboot)",
+ "Last boot reason: " + GOOD_BOOTREASONS,
};
for (String pattern : kernelResets) {
mPatternUtil.addPattern(Pattern.compile(pattern), KERNEL_RESET);
diff --git a/tests/src/com/android/loganalysis/parser/BugreportParserTest.java b/tests/src/com/android/loganalysis/parser/BugreportParserTest.java
index 4cfc6c7..5dfd75a 100644
--- a/tests/src/com/android/loganalysis/parser/BugreportParserTest.java
+++ b/tests/src/com/android/loganalysis/parser/BugreportParserTest.java
@@ -238,7 +238,11 @@ public class BugreportParserTest extends TestCase {
"Command line: androidboot.bootreason=reboot",
"");
BugreportItem bugreport = new BugreportParser().parse(lines);
- assertNull(bugreport.getLastKmsg());
+ assertNotNull(bugreport.getLastKmsg());
+ assertEquals(1, bugreport.getLastKmsg().getEvents().size());
+ assertEquals("Last boot reason: reboot",
+ bugreport.getLastKmsg().getEvents().get(0).getStack());
+ assertEquals("NORMAL_REBOOT", bugreport.getLastKmsg().getEvents().get(0).getCategory());
}
public void testParse_bootreason_bad() {
@@ -420,12 +424,12 @@ public class BugreportParserTest extends TestCase {
assertNotNull(bugreport);
assertNull(bugreport.getDumpsys());
assertNull(bugreport.getKernelLog());
- assertNull(bugreport.getLastKmsg());
assertNull(bugreport.getMemInfo());
assertNull(bugreport.getProcrank());
assertNull(bugreport.getSystemLog());
assertNull(bugreport.getSystemProps());
assertNull(bugreport.getTop());
+ assertNotNull(bugreport.getLastKmsg());
lines = Arrays.asList(
"========================================================",
@@ -453,12 +457,12 @@ public class BugreportParserTest extends TestCase {
assertNotNull(bugreport);
assertNotNull(bugreport.getDumpsys());
assertNull(bugreport.getKernelLog());
- assertNull(bugreport.getLastKmsg());
assertNull(bugreport.getMemInfo());
assertNull(bugreport.getProcrank());
assertNull(bugreport.getSystemLog());
assertNull(bugreport.getSystemProps());
assertNull(bugreport.getTop());
+ assertNotNull(bugreport.getLastKmsg());
}
/**
diff --git a/tests/src/com/android/loganalysis/parser/MonkeyLogParserTest.java b/tests/src/com/android/loganalysis/parser/MonkeyLogParserTest.java
index fa4d4df..b7e867d 100644
--- a/tests/src/com/android/loganalysis/parser/MonkeyLogParserTest.java
+++ b/tests/src/com/android/loganalysis/parser/MonkeyLogParserTest.java
@@ -442,7 +442,7 @@ public class MonkeyLogParserTest extends TestCase {
assertEquals("google/mantaray/manta:4.1/JRO01/12345:userdebug/dev-keys",
((NativeCrashItem) monkeyLog.getCrash()).getFingerprint());
// Make sure that the entire stack is included.
- assertEquals(24, ((NativeCrashItem) monkeyLog.getCrash()).getStack().split("\n").length);
+ assertEquals(23, ((NativeCrashItem) monkeyLog.getCrash()).getStack().split("\n").length);
}
/**
@@ -537,7 +537,7 @@ public class MonkeyLogParserTest extends TestCase {
assertEquals("google/mantaray/manta:4.1/JRO01/12345:userdebug/dev-keys",
nc.getFingerprint());
// Make sure that the stack with the last line stripped is included.
- assertEquals(24, nc.getStack().split("\n").length);
+ assertEquals(23, nc.getStack().split("\n").length);
assertFalse(nc.getStack().contains("New native crash detected"));
}
diff --git a/tests/src/com/android/loganalysis/parser/NativeCrashParserTest.java b/tests/src/com/android/loganalysis/parser/NativeCrashParserTest.java
index 4e82c8f..6c5cf98 100644
--- a/tests/src/com/android/loganalysis/parser/NativeCrashParserTest.java
+++ b/tests/src/com/android/loganalysis/parser/NativeCrashParserTest.java
@@ -33,7 +33,6 @@ public class NativeCrashParserTest extends TestCase {
*/
public void testParseage() {
List<String> lines = Arrays.asList(
- "*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***",
"Build fingerprint: 'google/soju/crespo:4.0.4/IMM76D/299849:userdebug/test-keys'",
"pid: 2058, tid: 2523 >>> com.google.android.browser <<<",
"signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000000",