summaryrefslogtreecommitdiff
path: root/src/com/android/loganalysis/parser/DmesgParser.java
diff options
context:
space:
mode:
authorgopinath <gelanchezhian@google.com>2017-05-16 18:36:59 -0700
committergopinath <gelanchezhian@google.com>2017-05-16 18:47:41 -0700
commitbdcdfc3bd752eb8af8085cdbaf5574076baac2ff (patch)
treee78f1fe3ae579c0fd2fd7a391a9cf84534df0a2c /src/com/android/loganalysis/parser/DmesgParser.java
parentb2b068af021e41755d43d1285fc16a7dc479abc1 (diff)
downloadloganalysis-bdcdfc3bd752eb8af8085cdbaf5574076baac2ff.tar.gz
Accomodate new log format logged in dmesg during boot
b/38045657 Test : Time: 0.37 OK (253 tests) Change-Id: If4047e75c65c8d062e789ce03e6c82c2a42d5096
Diffstat (limited to 'src/com/android/loganalysis/parser/DmesgParser.java')
-rw-r--r--src/com/android/loganalysis/parser/DmesgParser.java28
1 files changed, 25 insertions, 3 deletions
diff --git a/src/com/android/loganalysis/parser/DmesgParser.java b/src/com/android/loganalysis/parser/DmesgParser.java
index bd0d8e4..ce3d389 100644
--- a/src/com/android/loganalysis/parser/DmesgParser.java
+++ b/src/com/android/loganalysis/parser/DmesgParser.java
@@ -20,6 +20,7 @@ import com.android.loganalysis.item.DmesgActionInfoItem;
import com.android.loganalysis.item.DmesgItem;
import com.android.loganalysis.item.DmesgServiceInfoItem;
import com.android.loganalysis.item.DmesgStageInfoItem;
+
import com.google.common.annotations.VisibleForTesting;
import java.io.BufferedReader;
@@ -39,15 +40,22 @@ public class DmesgParser implements IParser {
private static final String TIMESTAMP = "TIMESTAMP";
private static final String STAGE = "STAGE";
private static final String ACTION = "ACTION";
+ private static final String DURATION = "DURATION";
+ private static final String UEVENTD = "ueventd";
+
// Matches: [ 14.822691] init:
private static final String SERVICE_PREFIX = String.format("^\\[\\s+(?<%s>.*)\\] init:\\s+",
TIMESTAMP);
+ // Matches: [ 3.791635] ueventd:
+ private static final String UEVENTD_PREFIX = String.format("^\\[\\s+(?<%s>.*)\\] ueventd:\\s+",
+ TIMESTAMP);
+
// Matches: starting service 'ueventd'...
private static final String START_SERVICE_SUFFIX = String.format("starting service "
+ "\\'(?<%s>.*)\\'...", SERVICENAME);
// Matches: Service 'ueventd' (pid 439) exited with status 0
private static final String EXIT_SERVICE_SUFFIX = String.format("Service \\'(?<%s>.*)\\'\\s+"
- + "\\((?<PID>.*)\\) exited with status 0", SERVICENAME);
+ + "\\((?<PID>.*)\\) exited with status 0.*", SERVICENAME);
private static final Pattern START_SERVICE = Pattern.compile(
String.format("%s%s", SERVICE_PREFIX, START_SERVICE_SUFFIX));
@@ -65,12 +73,18 @@ public class DmesgParser implements IParser {
// Matches: init: processing action (early-init)
private static final String START_PROCESSING_ACTION_PREFIX = String.format(
- "processing action \\((?<%s>.*)\\)", ACTION);
+ "processing action \\((?<%s>.*)\\) from.*$", ACTION);
// Matches: [ 14.942872] init: processing action (early-init)
private static final Pattern START_PROCESSING_ACTION = Pattern.compile(
String.format("%s%s", SERVICE_PREFIX, START_PROCESSING_ACTION_PREFIX));
+ // Matches: [ 3.791635] ueventd: Coldboot took 0.695055 seconds
+ private static final String STAGE_SUFFIX= String.format(
+ "(?<%s>.*)\\s+took\\s+(?<%s>.*)\\s+seconds$", STAGE, DURATION);
+ private static final Pattern UEVENTD_STAGE_INFO = Pattern.compile(
+ String.format("%s%s", UEVENTD_PREFIX, STAGE_SUFFIX));
+
private DmesgItem mDmesgItem = new DmesgItem();
@@ -163,7 +177,8 @@ public class DmesgParser implements IParser {
/**
* Parse init stages log from each {@code line} of dmesg log and
- * store the stage name and start time in a {@link DmesgStageInfoItem} object
+ * store the stage name, start time and duration if available in a
+ * {@link DmesgStageInfoItem} object
*
* @param individual line of the dmesg log
* @return {@code true}, if the {@code line} indicates start of a boot stage,
@@ -180,6 +195,13 @@ public class DmesgParser implements IParser {
mDmesgItem.addStageInfoItem(stageInfoItem);
return true;
}
+ if((match = matches(UEVENTD_STAGE_INFO, line)) != null) {
+ DmesgStageInfoItem stageInfoItem = new DmesgStageInfoItem();
+ stageInfoItem.setStageName(String.format("%s_%s", UEVENTD, match.group(STAGE)));
+ stageInfoItem.setDuration((long) (Double.parseDouble(
+ match.group(DURATION)) * 1000));
+ mDmesgItem.addStageInfoItem(stageInfoItem);
+ }
return false;
}