diff options
author | Eric Rowe <erowe@google.com> | 2015-10-28 18:56:49 -0700 |
---|---|---|
committer | Eric Rowe <erowe@google.com> | 2015-10-28 19:04:13 -0700 |
commit | c20ea281cf1762806d297cf4ddf3cff3b60b9cec (patch) | |
tree | c978ff44891323bf62b109da3dab978fc8ecbb06 /src | |
parent | 52942e69d7a03b8d504ccfae07d9109048bf0ae8 (diff) | |
download | loganalysis-c20ea281cf1762806d297cf4ddf3cff3b60b9cec.tar.gz |
Only add unknown reset if no good boot reason
Change-Id: Ie36b3192e49aa3570185da5eab78157e85e27e41
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/loganalysis/parser/BugreportParser.java | 27 | ||||
-rw-r--r-- | src/com/android/loganalysis/parser/KernelLogParser.java | 26 |
2 files changed, 42 insertions, 11 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); |