| OLD | NEW |
| 1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 /// Compares the test log of a build step with previous builds. | 5 /// Compares the test log of a build step with previous builds. |
| 6 /// | 6 /// |
| 7 /// Use this to detect flakiness of failures, especially timeouts. | 7 /// Use this to detect flakiness of failures, especially timeouts. |
| 8 | 8 |
| 9 import 'dart:async'; | 9 import 'dart:async'; |
| 10 import 'dart:convert'; | |
| 11 import 'dart:io'; | 10 import 'dart:io'; |
| 12 | 11 |
| 13 import 'src/buildbot_structures.dart'; | 12 import 'package:gardening/src/buildbot_structures.dart'; |
| 14 import 'src/util.dart'; | 13 import 'package:gardening/src/util.dart'; |
| 15 | 14 |
| 16 main(List<String> args) async { | 15 main(List<String> args) async { |
| 17 if (args.length != 1) { | 16 if (args.length != 1) { |
| 18 print('Usage: compare_failures <log-uri>'); | 17 print('Usage: compare_failures <log-uri>'); |
| 19 exit(1); | 18 exit(1); |
| 20 } | 19 } |
| 21 String url = args.first; | 20 String url = args.first; |
| 22 if (!url.endsWith('/text')) { | 21 if (!url.endsWith('/text')) { |
| 23 // Use the text version of the stdio log. | 22 // Use the text version of the stdio log. |
| 24 url += '/text'; | 23 url += '/text'; |
| (...skipping 15 matching lines...) Expand all Loading... |
| 40 summaries.add(firstSummary); | 39 summaries.add(firstSummary); |
| 41 if (firstSummary.hasFailures) { | 40 if (firstSummary.hasFailures) { |
| 42 for (int i = 0; i < 10; i++) { | 41 for (int i = 0; i < 10; i++) { |
| 43 buildUri = buildUri.prev(); | 42 buildUri = buildUri.prev(); |
| 44 summaries.add(await readBuildResult(client, buildUri)); | 43 summaries.add(await readBuildResult(client, buildUri)); |
| 45 } | 44 } |
| 46 } | 45 } |
| 47 return summaries; | 46 return summaries; |
| 48 } | 47 } |
| 49 | 48 |
| 50 /// Reads the content of [uri] as text. | |
| 51 Future<String> readUriAsText(HttpClient client, Uri uri) async { | |
| 52 HttpClientRequest request = await client.getUrl(uri); | |
| 53 HttpClientResponse response = await request.close(); | |
| 54 return UTF8.decode(await response.expand((l) => l).toList()); | |
| 55 } | |
| 56 | |
| 57 /// Parses the [buildUri] test log and creates a [BuildResult] for it. | 49 /// Parses the [buildUri] test log and creates a [BuildResult] for it. |
| 58 Future<BuildResult> readBuildResult( | 50 Future<BuildResult> readBuildResult( |
| 59 HttpClient client, BuildUri buildUri) async { | 51 HttpClient client, BuildUri buildUri) async { |
| 60 Uri uri = buildUri.toUri(); | 52 Uri uri = buildUri.toUri(); |
| 61 log('Reading $uri'); | 53 log('Reading $uri'); |
| 62 String text = await readUriAsText(client, uri); | 54 String text = await readUriAsText(client, uri); |
| 63 | 55 |
| 64 bool inFailure = false; | 56 bool inFailure = false; |
| 65 List<String> currentFailure; | 57 List<String> currentFailure; |
| 66 bool parsingTimingBlock = false; | 58 bool parsingTimingBlock = false; |
| (...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 305 String archName = name.substring(0, slashPos); | 297 String archName = name.substring(0, slashPos); |
| 306 String testName = name.substring(slashPos + 1); | 298 String testName = name.substring(slashPos + 1); |
| 307 timings.add(new Timing( | 299 timings.add(new Timing( |
| 308 uri, | 300 uri, |
| 309 time, | 301 time, |
| 310 new TestStep( | 302 new TestStep( |
| 311 stepName, new TestConfiguration(configName, archName, testName)))); | 303 stepName, new TestConfiguration(configName, archName, testName)))); |
| 312 } | 304 } |
| 313 return timings; | 305 return timings; |
| 314 } | 306 } |
| OLD | NEW |