summaryrefslogtreecommitdiff
path: root/src
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 /src
parent52942e69d7a03b8d504ccfae07d9109048bf0ae8 (diff)
downloadloganalysis-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.java27
-rw-r--r--src/com/android/loganalysis/parser/KernelLogParser.java26
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);