diff options
author | Netta Peterbursky <nettap@google.com> | 2017-05-23 10:23:11 -0700 |
---|---|---|
committer | Netta Peterbursky <nettap@google.com> | 2017-06-23 15:48:39 +0000 |
commit | 75a8a41897a1f52673ff7f350099d1b19c275c14 (patch) | |
tree | d6fecd7f600b155e92ca1ad0a5f710b212b4ceb8 /src | |
parent | 6722a63f63ea406f42edb2c03b18bbb6fd8c24c6 (diff) | |
download | loganalysis-75a8a41897a1f52673ff7f350099d1b19c275c14.tar.gz |
Add app versions to Bugreport parser (for event history view in stability dashboard).android-vts-8.0_r9android-vts-8.0_r8android-vts-8.0_r7android-vts-8.0_r6android-vts-8.0_r2android-vts-8.0_r13android-vts-8.0_r12android-vts-8.0_r11android-vts-8.0_r10android-vts-8.0_r1oreo-vts-releaseoreo-cts-dev
Bug: 38415015
Test: BugreportParserTest, DumpsysPackageStatsParserTest, DumpsysParserTest
Change-Id: Id6e5ccbd39188be0b6908df751b310cd0f642593
(cherry picked from commit 44e6c57bdf25abcf2b5b13cf958ed37eb55ae8a8)
Diffstat (limited to 'src')
5 files changed, 190 insertions, 8 deletions
diff --git a/src/com/android/loganalysis/item/AppVersionItem.java b/src/com/android/loganalysis/item/AppVersionItem.java new file mode 100644 index 0000000..5c144f2 --- /dev/null +++ b/src/com/android/loganalysis/item/AppVersionItem.java @@ -0,0 +1,53 @@ +/* + * 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.item; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +/** An {@link IItem} used to store an app's version code and name. */ +public class AppVersionItem extends GenericItem { + + /** Constants for JSON output */ + public static final String VERSION_CODE = "VERSION_CODE"; + + public static final String VERSION_NAME = "VERSION_NAME"; + + private static final Set<String> ATTRIBUTES = + new HashSet<String>(Arrays.asList(VERSION_CODE, VERSION_NAME)); + + /** + * The constructor for {@link AppVersionItem} + * + * @param versionCode the version code + * @param versionName the version name + */ + public AppVersionItem(int versionCode, String versionName) { + super(ATTRIBUTES); + + setAttribute(VERSION_CODE, versionCode); + setAttribute(VERSION_NAME, versionName); + } + + public int getVersionCode() { + return (Integer) getAttribute(VERSION_CODE); + } + + public String getVersionName() { + return (String) getAttribute(VERSION_NAME); + } +} diff --git a/src/com/android/loganalysis/item/DumpsysItem.java b/src/com/android/loganalysis/item/DumpsysItem.java index 7f219bf..b66a82c 100644 --- a/src/com/android/loganalysis/item/DumpsysItem.java +++ b/src/com/android/loganalysis/item/DumpsysItem.java @@ -27,12 +27,15 @@ public class DumpsysItem extends GenericItem { /** Constant for JSON output */ private static final String BATTERY_STATS = "BATTERY_STATS"; /** Constant for JSON output */ + private static final String PACKAGE_STATS = "PACKAGE_STATS"; + /** Constant for JSON output */ private static final String PROC_STATS = "PROC_STATS"; /** Constant for JSON output */ private static final String WIFI_STATS = "WIFI_STATS"; - private static final Set<String> ATTRIBUTES = new HashSet<String>(Arrays.asList( - BATTERY_STATS, PROC_STATS, WIFI_STATS)); + private static final Set<String> ATTRIBUTES = + new HashSet<String>( + Arrays.asList(BATTERY_STATS, PACKAGE_STATS, PROC_STATS, WIFI_STATS)); /** * The constructor for {@link DumpsysItem}. @@ -48,9 +51,12 @@ public class DumpsysItem extends GenericItem { setAttribute(BATTERY_STATS, batteryStats); } - /** - * Set the {@link DumpsysProcStatsItem} of the bugreport. - */ + /** Set the {@link DumpsysPackageStatsItem} of the bugreport. */ + public void setPackageStats(DumpsysPackageStatsItem packageStats) { + setAttribute(PACKAGE_STATS, packageStats); + } + + /** Set the {@link DumpsysProcStatsItem} of the bugreport. */ public void setProcStats(DumpsysProcStatsItem procStats) { setAttribute(PROC_STATS, procStats); } @@ -69,9 +75,12 @@ public class DumpsysItem extends GenericItem { return (DumpsysBatteryStatsItem) getAttribute(BATTERY_STATS); } - /** - * Get the {@link DumpsysProcStatsItem} of the bugreport. - */ + /** Get the {@link DumpsysPackageStatsItem} of the bugreport. */ + public DumpsysPackageStatsItem getPackageStats() { + return (DumpsysPackageStatsItem) getAttribute(PACKAGE_STATS); + } + + /** Get the {@link DumpsysProcStatsItem} of the bugreport. */ public DumpsysProcStatsItem getProcStats() { return (DumpsysProcStatsItem) getAttribute(PROC_STATS); } diff --git a/src/com/android/loganalysis/item/DumpsysPackageStatsItem.java b/src/com/android/loganalysis/item/DumpsysPackageStatsItem.java new file mode 100644 index 0000000..14c4073 --- /dev/null +++ b/src/com/android/loganalysis/item/DumpsysPackageStatsItem.java @@ -0,0 +1,40 @@ +/* + * 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.item; + +import org.json.JSONException; +import org.json.JSONObject; + +/** An {@link IItem} used to store apps and their version codes and names. */ +public class DumpsysPackageStatsItem extends GenericMapItem<AppVersionItem> { + private static final long serialVersionUID = 1L; + + /** Constant for JSON output */ + public static final String APP_VERSIONS = "APP_VERSIONS"; + + /** {@inheritDoc} */ + @Override + public JSONObject toJson() { + JSONObject object = new JSONObject(); + try { + object.put(APP_VERSIONS, super.toJson()); + } catch (JSONException e) { + // Ignore + } + return object; + } +} 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)); } |