summaryrefslogtreecommitdiff
path: root/src/com/android/loganalysis/parser
diff options
context:
space:
mode:
authorNetta Peterbursky <nettap@google.com>2017-05-23 10:23:11 -0700
committerNetta Peterbursky <nettap@google.com>2017-05-23 10:35:58 -0700
commit44e6c57bdf25abcf2b5b13cf958ed37eb55ae8a8 (patch)
treea0dbeb3d2adb56e4266a77111f868c40a8e823fa /src/com/android/loganalysis/parser
parentda7b04cad4f3ef3deeca48ea44432fd01bcd6fb7 (diff)
downloadloganalysis-44e6c57bdf25abcf2b5b13cf958ed37eb55ae8a8.tar.gz
Add app versions to Bugreport parser (for event history view in stability dashboard).
Bug: 38415015 Test: BugreportParserTest, DumpsysPackageStatsParserTest, DumpsysParserTest Change-Id: Id6e5ccbd39188be0b6908df751b310cd0f642593
Diffstat (limited to 'src/com/android/loganalysis/parser')
-rw-r--r--src/com/android/loganalysis/parser/DumpsysPackageStatsParser.java75
-rw-r--r--src/com/android/loganalysis/parser/DumpsysParser.java5
2 files changed, 80 insertions, 0 deletions
diff --git a/src/com/android/loganalysis/parser/DumpsysPackageStatsParser.java b/src/com/android/loganalysis/parser/DumpsysPackageStatsParser.java
new file mode 100644
index 0000000..d06cfd5
--- /dev/null
+++ b/src/com/android/loganalysis/parser/DumpsysPackageStatsParser.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.loganalysis.parser;
+
+import com.android.loganalysis.item.AppVersionItem;
+import com.android.loganalysis.item.DumpsysPackageStatsItem;
+
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/** A {@link IParser} to parse package stats and create a mapping table of packages and versions */
+public class DumpsysPackageStatsParser implements IParser {
+
+ /** Matches: Package [com.google.android.googlequicksearchbox] (607929e): */
+ private static final Pattern PACKAGE_NAME = Pattern.compile("^\\s*Package \\[(.*)\\].*");
+
+ /** Matches: versionCode=300734793 minSdk=10000 targetSdk=10000 */
+ private static final Pattern VERSION_CODE = Pattern.compile("^\\s*versionCode=(\\d+).*");
+
+ /** Matches: versionName=6.16.35.26.arm64 */
+ private static final Pattern VERSION_NAME = Pattern.compile("^\\s*versionName=(.*)$");
+
+ /**
+ * {@inheritDoc}
+ *
+ * @return The {@link DumpsysPackageStatsItem}.
+ */
+ @Override
+ public DumpsysPackageStatsItem parse(List<String> lines) {
+ DumpsysPackageStatsItem item = new DumpsysPackageStatsItem();
+ String packageName = null;
+ String versionCode = null;
+ String versionName = null;
+
+ for (String line : lines) {
+ Matcher m = PACKAGE_NAME.matcher(line);
+ if (m.matches()) {
+ packageName = m.group(1);
+ versionCode = null;
+ versionName = null;
+ continue;
+ }
+ m = VERSION_CODE.matcher(line);
+ if (m.matches()) {
+ versionCode = m.group(1);
+ continue;
+ }
+ m = VERSION_NAME.matcher(line);
+ if (m.matches()) {
+ versionName = m.group(1).trim();
+ if (packageName != null && versionCode != null) {
+ item.put(
+ packageName,
+ new AppVersionItem(Integer.parseInt(versionCode), versionName));
+ }
+ packageName = null;
+ }
+ }
+ return item;
+ }
+}
diff --git a/src/com/android/loganalysis/parser/DumpsysParser.java b/src/com/android/loganalysis/parser/DumpsysParser.java
index b74a86c..8c94e0b 100644
--- a/src/com/android/loganalysis/parser/DumpsysParser.java
+++ b/src/com/android/loganalysis/parser/DumpsysParser.java
@@ -18,6 +18,7 @@ package com.android.loganalysis.parser;
import com.android.loganalysis.item.DumpsysBatteryStatsItem;
import com.android.loganalysis.item.DumpsysItem;
+import com.android.loganalysis.item.DumpsysPackageStatsItem;
import com.android.loganalysis.item.DumpsysProcStatsItem;
import com.android.loganalysis.item.DumpsysWifiStatsItem;
@@ -29,11 +30,13 @@ import java.util.List;
public class DumpsysParser extends AbstractSectionParser {
private static final String BATTERY_STATS_SECTION_REGEX = "^DUMP OF SERVICE batterystats:$";
+ private static final String PACKAGE_SECTION_REGEX = "^DUMP OF SERVICE package:";
private static final String PROC_STATS_SECTION_REGEX = "^DUMP OF SERVICE procstats:";
private static final String WIFI_SECTION_REGEX = "^DUMP OF SERVICE wifi:";
private static final String NOOP_SECTION_REGEX = "DUMP OF SERVICE .*";
private DumpsysBatteryStatsParser mBatteryStatsParser = new DumpsysBatteryStatsParser();
+ private DumpsysPackageStatsParser mPackageStatsParser = new DumpsysPackageStatsParser();
private DumpsysProcStatsParser mProcStatsParser = new DumpsysProcStatsParser();
private DumpsysWifiStatsParser mWifiStatsParser = new DumpsysWifiStatsParser();
@@ -63,6 +66,7 @@ public class DumpsysParser extends AbstractSectionParser {
*/
protected void setup() {
addSectionParser(mBatteryStatsParser, BATTERY_STATS_SECTION_REGEX);
+ addSectionParser(mPackageStatsParser, PACKAGE_SECTION_REGEX);
addSectionParser(mProcStatsParser, PROC_STATS_SECTION_REGEX);
addSectionParser(mWifiStatsParser, WIFI_SECTION_REGEX);
addSectionParser(new NoopParser(), NOOP_SECTION_REGEX);
@@ -80,6 +84,7 @@ public class DumpsysParser extends AbstractSectionParser {
}
if (mDumpsys != null) {
mDumpsys.setBatteryInfo((DumpsysBatteryStatsItem) getSection(mBatteryStatsParser));
+ mDumpsys.setPackageStats((DumpsysPackageStatsItem) getSection(mPackageStatsParser));
mDumpsys.setProcStats((DumpsysProcStatsItem) getSection(mProcStatsParser));
mDumpsys.setWifiStats((DumpsysWifiStatsItem) getSection(mWifiStatsParser));
}