Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(429)

Unified Diff: pkg/analysis_server/tool/instrumentation/log_viewer.dart

Issue 2338883003: Add a tool for viewing instrumentation logs (Closed)
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: pkg/analysis_server/tool/instrumentation/log_viewer.dart
diff --git a/pkg/analysis_server/tool/instrumentation/log_viewer.dart b/pkg/analysis_server/tool/instrumentation/log_viewer.dart
new file mode 100644
index 0000000000000000000000000000000000000000..d18cdf76609e72a3e50a79de745abaac36f19e57
--- /dev/null
+++ b/pkg/analysis_server/tool/instrumentation/log_viewer.dart
@@ -0,0 +1,128 @@
+// 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:io' as io;
+
+import 'package:args/args.dart';
+
+import 'log.dart';
+import 'server.dart';
+
+/**
+ * Start a web server that will allow an instrumentation log to be viewed.
+ */
+void main(List<String> args) {
+ Driver driver = new Driver();
+ driver.start(args);
+}
+
+/**
+ * The main driver that configures and starts the web server.
+ */
+class Driver {
+ /**
+ * The flag used to specify that the user wants to have help text printed but
+ * that no other work should be done.
+ */
+ static String helpFlag = 'help';
+
+ /**
+ * The option used to specify the port on which the server should listen for
+ * requests.
+ */
+ static String portOption = 'port';
+
+ /**
+ * The port that will be used if no port number is provided on the command
+ * line.
+ */
+ static int defaultPortNumber = 11000;
+
+ /**
+ * Initialize a newly created driver.
+ */
+ Driver();
+
+ /**
+ * Create and return the parser used to parse the command-line arguments.
+ */
+ ArgParser createParser() {
+ ArgParser parser = new ArgParser();
+ parser.addFlag(helpFlag, help: 'Print this help text', negatable: false);
+ parser.addOption(portOption,
+ help: 'The port number on which the server should listen for requests',
+ defaultsTo: defaultPortNumber.toString());
+ return parser;
+ }
+
+ /**
+ * Print usage information.
+ */
+ void printUsage(ArgParser parser,
+ {String error, Object exception, StackTrace stackTrace}) {
+ if (error != null) {
+ print(error);
+ print('');
+ }
+ print('log_viewer [options] logFile');
+ print('');
+ print('Usage:');
+ print('');
+ print(
+ 'The "logFile" is the file containing the content of the log that is being viewed');
+ print('');
+ print('Options:');
+ print(parser.usage);
+ if (exception != null) {
+ print(exception);
+ }
+ if (stackTrace != null) {
+ print(stackTrace);
+ }
+ }
+
+ /**
+ * Use the given command-line [args] to configure and start the web server.
+ */
+ void start(List<String> args) {
+ ArgParser parser = createParser();
+ ArgResults options = parser.parse(args);
+ if (options[helpFlag]) {
+ printUsage(parser);
+ return;
+ }
+
+ int port = defaultPortNumber;
+ try {
+ port = int.parse(options[portOption]);
+ } catch (exception) {
+ printUsage(parser, error: 'Invalid port number');
+ return;
+ }
+
+ List<String> arguments = options.rest;
+ if (arguments == null || arguments.length != 1) {
+ printUsage(parser, error: 'Missing log file');
+ return;
+ }
+ String fileName = arguments[0];
+ io.File logFile = new io.File(fileName);
+ List<String> lines;
+ try {
+ lines = logFile.readAsLinesSync();
+ } catch (exception, stackTrace) {
+ printUsage(parser,
+ error: 'Could not read file "$fileName":',
+ exception: exception,
+ stackTrace: stackTrace);
+ return;
+ }
+
+ InstrumentationLog log =
+ new InstrumentationLog(<String>[logFile.path], lines);
+ WebServer server = new WebServer(log);
+ server.serveHttp(port);
+ print('logViewer is listening on http://localhost:$port/log');
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698