diff options
| author | 2020-04-20 15:11:49 -0400 | |
|---|---|---|
| committer | 2020-04-28 11:19:16 -0400 | |
| commit | 35895da39b2280a2ba8f7f8b2977c7fc6f0bf404 (patch) | |
| tree | b08e3bfa060504d1c1a3d0ca663f2d34d8167637 | |
| parent | 8862ee3891817b2fb0ddb14581f062d34e42d3c2 (diff) | |
Statsd TestDrive tool: Write output to stdout.
Also: Option for less verbose output.
Bug: 149914234
Test: atest --host test/com/android/statsd/shelltools/testdrive/TestDriveTest.java
Test: out/host/linux-x86/bin/statsd_testdrive -terse -one 29 33 48 62 63 64 90 149 244 245 246 259 260
Change-Id: I4ed4cfdd85eb5382ce28846ed6ed81b4dd3f5334
2 files changed, 91 insertions, 14 deletions
diff --git a/cmds/statsd/tools/localtools/src/com/android/statsd/shelltools/testdrive/TestDrive.java b/cmds/statsd/tools/localtools/src/com/android/statsd/shelltools/testdrive/TestDrive.java index 8ac251e39a18..a97f132a2d5f 100644 --- a/cmds/statsd/tools/localtools/src/com/android/statsd/shelltools/testdrive/TestDrive.java +++ b/cmds/statsd/tools/localtools/src/com/android/statsd/shelltools/testdrive/TestDrive.java @@ -25,6 +25,7 @@ import com.android.internal.os.StatsdConfigProto.SimpleAtomMatcher; import com.android.internal.os.StatsdConfigProto.StatsdConfig; import com.android.internal.os.StatsdConfigProto.TimeUnit; import com.android.os.AtomsProto.Atom; +import com.android.os.StatsLog; import com.android.os.StatsLog.ConfigMetricsReport; import com.android.os.StatsLog.ConfigMetricsReportList; import com.android.os.StatsLog.StatsLogReport; @@ -78,11 +79,12 @@ public class TestDrive { @VisibleForTesting String mDeviceSerial = null; + @VisibleForTesting + Dumper mDumper = new BasicDumper(); public static void main(String[] args) { final Configuration configuration = new Configuration(); - - TestDrive testDrive = new TestDrive(); + final TestDrive testDrive = new TestDrive(); Utils.setUpLogger(LOGGER, false); if (!testDrive.processArgs(configuration, args, @@ -94,7 +96,7 @@ public class TestDrive { configuration.createConfig(), configuration.hasPulledAtoms(), configuration.hasPushedAtoms()); if (reports != null) { - configuration.dumpMetrics(reports); + configuration.dumpMetrics(reports, testDrive.mDumper); } } @@ -116,6 +118,9 @@ public class TestDrive { if (remaining_args >= 2 && arg.equals("-one")) { LOGGER.info("Creating one event metric to catch all pushed atoms."); configuration.mOnePushedAtomEvent = true; + } else if (remaining_args >= 2 && arg.equals("-terse")) { + LOGGER.info("Terse output format."); + mDumper = new TerseDumper(); } else if (remaining_args >= 3 && arg.equals("-p")) { configuration.mAdditionalAllowedPackage = args[++first_arg]; } else if (remaining_args >= 3 && arg.equals("-s")) { @@ -198,12 +203,13 @@ public class TestDrive { String mAdditionalAllowedPackage = null; private final Set<Long> mTrackedMetrics = new HashSet<>(); - private void dumpMetrics(ConfigMetricsReportList reportList) { + private void dumpMetrics(ConfigMetricsReportList reportList, Dumper dumper) { // We may get multiple reports. Take the last one. ConfigMetricsReport report = reportList.getReports(reportList.getReportsCount() - 1); for (StatsLogReport statsLog : report.getMetricsList()) { if (isTrackedMetric(statsLog.getMetricId())) { LOGGER.info(statsLog.toString()); + dumper.dump(statsLog); } } } @@ -341,6 +347,51 @@ public class TestDrive { } } + interface Dumper { + void dump(StatsLogReport report); + } + + static class BasicDumper implements Dumper { + @Override + public void dump(StatsLogReport report) { + System.out.println(report.toString()); + } + } + + static class TerseDumper extends BasicDumper { + @Override + public void dump(StatsLogReport report) { + if (report.hasGaugeMetrics()) { + dumpGaugeMetrics(report); + } + if (report.hasEventMetrics()) { + dumpEventMetrics(report); + } + } + void dumpEventMetrics(StatsLogReport report) { + final List<StatsLog.EventMetricData> data = report.getEventMetrics().getDataList(); + if (data.isEmpty()) { + return; + } + long firstTimestampNanos = data.get(0).getElapsedTimestampNanos(); + for (StatsLog.EventMetricData event : data) { + final double deltaSec = (event.getElapsedTimestampNanos() - firstTimestampNanos) + / 1e9; + System.out.println( + String.format("+%.3fs: %s", deltaSec, event.getAtom().toString())); + } + } + void dumpGaugeMetrics(StatsLogReport report) { + final List<StatsLog.GaugeMetricData> data = report.getGaugeMetrics().getDataList(); + if (data.isEmpty()) { + return; + } + for (StatsLog.GaugeMetricData gauge : data) { + System.out.println(gauge.toString()); + } + } + } + private static String pushConfig(StatsdConfig config, String deviceSerial) throws IOException, InterruptedException { File configFile = File.createTempFile("statsdconfig", ".config"); diff --git a/cmds/statsd/tools/localtools/test/com/android/statsd/shelltools/testdrive/TestDriveTest.java b/cmds/statsd/tools/localtools/test/com/android/statsd/shelltools/testdrive/TestDriveTest.java index 9d986e7c09cf..363fac0c78ba 100644 --- a/cmds/statsd/tools/localtools/test/com/android/statsd/shelltools/testdrive/TestDriveTest.java +++ b/cmds/statsd/tools/localtools/test/com/android/statsd/shelltools/testdrive/TestDriveTest.java @@ -41,24 +41,21 @@ public class TestDriveTest { static class Expect { public boolean success; public Integer[] atoms; - public boolean onePushedAtomEvent; - public String extraPackage; + public boolean onePushedAtomEvent = false; + public String extraPackage = null; public String target; + public boolean terse = false; static Expect success(Integer... atoms) { - return new Expect(true, atoms, false, null, + return new Expect(true, atoms, TARGET); } - Expect(boolean success, Integer[] atoms, boolean onePushedAtomEvent, String extraPackage, - String target) { + Expect(boolean success, Integer[] atoms, String target) { this.success = success; this.atoms = atoms; - this.onePushedAtomEvent = onePushedAtomEvent; - this.extraPackage = extraPackage; this.target = target; } - static final Expect FAILURE = new Expect(false, null, - false, null, null); + static final Expect FAILURE = new Expect(false, null, null); Expect onePushedAtomEvent() { this.onePushedAtomEvent = true; return this; @@ -67,6 +64,10 @@ public class TestDriveTest { this.extraPackage = TestDriveTest.PACKAGE; return this; } + Expect terse() { + this.terse = true; + return this; + } } @Parameterized.Parameter(0) @@ -118,6 +119,10 @@ public class TestDriveTest { Expect.FAILURE}, // Two connected devices, no indication of which to use new Object[]{new String[]{"-one", "244", "245"}, TARGET_ONLY, null, Expect.success(244, 245).onePushedAtomEvent()}, + new Object[]{new String[]{"-terse", "-one", "244", "245"}, TARGET_ONLY, null, + Expect.success(244, 245).onePushedAtomEvent().terse()}, + new Object[]{new String[]{"-one", "-terse", "244", "245"}, TARGET_ONLY, null, + Expect.success(244, 245).onePushedAtomEvent().terse()}, new Object[]{new String[]{"-p", PACKAGE, "244", "245"}, TARGET_ONLY, null, Expect.success(244, 245).extraPackage()}, new Object[]{new String[]{"-p", PACKAGE, "-one", "244", "245"}, TARGET_ONLY, null, @@ -132,7 +137,23 @@ public class TestDriveTest { Expect.success(244, 245).extraPackage().onePushedAtomEvent()}, new Object[]{new String[]{"-one", "-p", PACKAGE, "-s", TARGET, "244", "245"}, TARGET_AND_OTHER, null, - Expect.success(244, 245).extraPackage().onePushedAtomEvent()} + Expect.success(244, 245).extraPackage().onePushedAtomEvent()}, + new Object[]{new String[]{"-terse", "-one", "-p", PACKAGE, "-s", TARGET, + "244", "245"}, + TARGET_AND_OTHER, null, + Expect.success(244, 245).extraPackage().onePushedAtomEvent().terse()}, + new Object[]{new String[]{"-one", "-terse", "-p", PACKAGE, "-s", TARGET, + "244", "245"}, + TARGET_AND_OTHER, null, + Expect.success(244, 245).extraPackage().onePushedAtomEvent().terse()}, + new Object[]{new String[]{"-one", "-p", PACKAGE, "-terse", "-s", TARGET, + "244", "245"}, + TARGET_AND_OTHER, null, + Expect.success(244, 245).extraPackage().onePushedAtomEvent().terse()}, + new Object[]{new String[]{"-one", "-p", PACKAGE, "-s", TARGET, "-terse", + "244", "245"}, + TARGET_AND_OTHER, null, + Expect.success(244, 245).extraPackage().onePushedAtomEvent().terse()} ); } @@ -162,6 +183,11 @@ public class TestDriveTest { assertArrayEquals(mExpect.atoms, collectAtoms(mConfiguration)); assertEquals(mExpect.onePushedAtomEvent, mConfiguration.mOnePushedAtomEvent); assertEquals(mExpect.target, mTestDrive.mDeviceSerial); + if (mExpect.terse) { + assertEquals(TestDrive.TerseDumper.class, mTestDrive.mDumper.getClass()); + } else { + assertEquals(TestDrive.BasicDumper.class, mTestDrive.mDumper.getClass()); + } } else { assertFalse(result); } |