diff --git a/pkg/front_end/lib/src/base/crash.dart b/pkg/front_end/lib/src/base/crash.dart index cb29c44d38f..fc3fcd73501 100644 --- a/pkg/front_end/lib/src/base/crash.dart +++ b/pkg/front_end/lib/src/base/crash.dart @@ -2,15 +2,9 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. -import 'dart:convert' show jsonEncode; -import 'dart:io' - show ContentType, HttpClient, HttpClientRequest, SocketException, stderr; - import 'problems.dart' show DebugAbort; import 'uri_offset.dart'; -const String defaultServerAddress = "http://127.0.0.1:59410/"; - /// Tracks if there has been a crash reported through [reportCrash]. Should be /// reset between each compilation by calling [resetCrashReporting]. bool hasCrashed = false; @@ -57,18 +51,7 @@ void resetCrashReporting() { hasCrashed = false; } -Future reportCrash( - error, - StackTrace trace, [ - Uri? uri, - int? charOffset, -]) async { - // Coverage-ignore(suite): Not run. - Future note(String note) async { - stderr.write(note); - await stderr.flush(); - } - +Future reportCrash(error, StackTrace trace, [Uri? uri, int? charOffset]) { if (hasCrashed) { // Coverage-ignore-block(suite): Not run. return new Future.error(error, trace); @@ -83,61 +66,17 @@ Future reportCrash( } uri ??= firstSourceUri; hasCrashed = true; - Map data = {}; - data["type"] = "crash"; - data["client"] = "package:cfe"; - if (uri != null) data["uri"] = "$uri"; - if (charOffset != null) data["offset"] = charOffset; - data["error"] = safeToString(error); - data["trace"] = "$trace"; - String json = jsonEncode(data); - if (!const bool.fromEnvironment('dart.library.io')) { - // Coverage-ignore-block(suite): Not run. - // Don't create HttpClient when dart:io is unavailable. - return new Future.error(error, trace); - } - HttpClient client = new HttpClient(); - try { - Uri serverUri = Uri.parse(defaultServerAddress); - HttpClientRequest request; - try { - request = await client.postUrl(serverUri); - } on SocketException { - // Assume the crash logger isn't running. - client.close(force: true); - return new Future.error( - new Crash(uri, charOffset, error, trace).._hasBeenReported = true, - trace, - ); - } - // Coverage-ignore-block(suite): Not run. - await note("\nSending crash report data"); - request.persistentConnection = false; - request.bufferOutput = false; - String? host = request.connectionInfo?.remoteAddress.host; - int? port = request.connectionInfo?.remotePort; - await note(" to $host:$port"); - await request - ..headers.contentType = ContentType.json - ..write(json); - await request.close(); - await note("."); - } catch (e, s) { - // Coverage-ignore-block(suite): Not run. - await note("\n${safeToString(e)}\n$s\n"); - await note("\n\n\nFE::ERROR::$json\n\n\n"); - } - // Coverage-ignore-block(suite): Not run. - client.close(force: true); - await note("\n"); - return new Future.error(error, trace); + return new Future.error( + new Crash(uri, charOffset, error, trace).._hasBeenReported = true, + trace, + ); } +// Coverage-ignore(suite): Not run. String safeToString(Object object) { try { return "$object"; } catch (e) { - // Coverage-ignore-block(suite): Not run. return "Error when converting ${object.runtimeType} to string."; } } diff --git a/pkg/front_end/test/spell_checking_list_tests.txt b/pkg/front_end/test/spell_checking_list_tests.txt index 4d4d965386c..14c6ecc3cd7 100644 --- a/pkg/front_end/test/spell_checking_list_tests.txt +++ b/pkg/front_end/test/spell_checking_list_tests.txt @@ -515,7 +515,6 @@ llc ln locale locating -logd logs loo lookahead diff --git a/pkg/front_end/test/tool_git_test.dart b/pkg/front_end/test/tool_git_test.dart index bcc6c8084ff..2b9f04a447a 100644 --- a/pkg/front_end/test/tool_git_test.dart +++ b/pkg/front_end/test/tool_git_test.dart @@ -17,7 +17,6 @@ const List subtools = const [ "compile", "compile-platform", "log", - "logd", "outline", "parser", "scanner", @@ -34,10 +33,6 @@ const List unsafeTools = const [ // messages.yaml. "generate-messages", - // This is a daemon process that never terminates. It's not currently tested - // directly. - "logd", - // This would eventually run this test again, recursively, and never // finish. As this tool is part of the workflow for testing Fasta, we assume // is exercised sufficiently. diff --git a/pkg/front_end/tool/cfe b/pkg/front_end/tool/cfe index a45c69f5b60..72abdac1794 100755 --- a/pkg/front_end/tool/cfe +++ b/pkg/front_end/tool/cfe @@ -33,7 +33,6 @@ case "${1//_/-}" in compile) SCRIPT="${TOOL_DIR}/compile.dart";; compile-platform) SCRIPT="${TOOL_DIR}/compile_platform.dart";; log) SCRIPT="${TOOL_DIR}/log_analyzer.dart";; - logd) SCRIPT="${TOOL_DIR}/log_collector.dart";; outline) SCRIPT="${TOOL_DIR}/outline.dart";; parser) SCRIPT="${TOOL_DIR}/parser.dart";; scanner) SCRIPT="${TOOL_DIR}/scanner.dart";; diff --git a/pkg/front_end/tool/cfe.dart b/pkg/front_end/tool/cfe.dart index f0c2055d472..61caa9babf3 100644 --- a/pkg/front_end/tool/cfe.dart +++ b/pkg/front_end/tool/cfe.dart @@ -14,7 +14,6 @@ import 'compile_platform.dart' as compile_platform; import 'generate_experimental_flags.dart' as generate_experimental_flags; import 'generate_messages.dart' as generate_messages; import 'log_analyzer.dart' as log_analyzer; -import 'log_collector.dart' as log_collector; import 'outline.dart' as outline; import 'parser.dart' as parser; import 'scanner.dart' as scanner; @@ -67,10 +66,6 @@ Future main(List args) async { mainFunction = log_analyzer.main; script = '${toolDir}/log_analyzer.dart'; break; - case 'logd': - mainFunction = log_collector.main; - script = '${toolDir}/log_collector.dart'; - break; case 'outline': mainFunction = outline.main; script = '${toolDir}/outline.dart'; diff --git a/pkg/front_end/tool/log_collector.dart b/pkg/front_end/tool/log_collector.dart deleted file mode 100644 index f396d1a4c3c..00000000000 --- a/pkg/front_end/tool/log_collector.dart +++ /dev/null @@ -1,118 +0,0 @@ -// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file -// for details. All rights reserved. Use of this source code is governed by a -// BSD-style license that can be found in the LICENSE file. - -import 'dart:convert' show jsonDecode, utf8; -import 'dart:io'; -import 'dart:isolate' show RawReceivePort; - -import 'package:front_end/src/base/crash.dart' show defaultServerAddress; - -void badRequest(HttpRequest request, int status, String message) { - request.response.statusCode = status; - request.response.write(''' - - - - - $message - - -

$message

- - -'''); - request.response.close().catchError((e, s) { - print("Request error: $e."); - }); - print("${request.uri}: $message"); -} - -Future collectLog(DateTime time, HttpRequest request) async { - String json = await request.cast>().transform(utf8.decoder).join(); - var data; - try { - data = jsonDecode(json); - } on FormatException catch (e) { - print(e); - return badRequest( - request, - HttpStatus.badRequest, - "Malformed JSON data: ${e.message}.", - ); - } - if (data is! Map) { - return badRequest( - request, - HttpStatus.badRequest, - "Malformed JSON data: not a map.", - ); - } - if (data["type"] != "crash") { - return badRequest( - request, - HttpStatus.badRequest, - "Malformed JSON data: type should be 'crash'.", - ); - } - await request.response.close(); - String year = "${time.year}".padLeft(4, "0"); - String month = "${time.month}".padLeft(2, "0"); - String day = "${time.day}".padLeft(2, "0"); - String us = "${time.microsecondsSinceEpoch}".padLeft(19, '0'); - Uri? uri = Uri.base.resolve( - "crash_logs/${data['client']}/$year-$month-$day/$us.log", - ); - File file = new File.fromUri(uri); - await file.parent.create(recursive: true); - await file.writeAsString(json); - print("Wrote ${uri.toFilePath()}"); - - String type = data["type"]; - String? text = data["uri"]; - uri = text == null ? null : Uri.parse(text); - int charOffset = data["offset"]; - var error = data["error"]; - text = data["trace"]; - StackTrace? trace = text == null ? null : new StackTrace.fromString(text); - String client = data["client"]; - print(""" -date: ${time} -type: $type -client: $client -uri: $uri -offset: $charOffset -error: -$error -trace: -$trace -"""); -} - -Future main(List arguments) async { - RawReceivePort keepAlive = new RawReceivePort(); - Uri uri; - if (arguments.length == 1) { - uri = Uri.base.resolve(arguments.single); - } else if (arguments.length == 0) { - uri = Uri.parse(defaultServerAddress); - } else { - throw "Unexpected arguments: ${arguments.join(' ')}."; - } - int port = uri.hasPort ? uri.port : 0; - var host = uri.host.isEmpty ? InternetAddress.loopbackIPv4 : uri.host; - HttpServer server = await HttpServer.bind(host, port); - print("Listening on http://${server.address.host}:${server.port}/"); - await for (HttpRequest request in server) { - if (request.method != "POST") { - badRequest(request, HttpStatus.methodNotAllowed, "Not allowed."); - continue; - } - if (request.uri.path != "/") { - badRequest(request, HttpStatus.notFound, "Not found."); - continue; - } - await collectLog(new DateTime.now(), request); - } - keepAlive.close(); -}