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

Side by Side Diff: pkg/analysis_server/lib/src/analysis_server.dart

Issue 2914383002: Expose the exceptions info in the diagnostics page. (Closed)
Patch Set: Created 3 years, 6 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, 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 import 'dart:async'; 5 import 'dart:async';
6 import 'dart:collection'; 6 import 'dart:collection';
7 import 'dart:core'; 7 import 'dart:core';
8 import 'dart:io' as io; 8 import 'dart:io' as io;
9 import 'dart:math' show max; 9 import 'dart:math' show max;
10 10
11 import 'package:analysis_server/protocol/protocol.dart'; 11 import 'package:analysis_server/protocol/protocol.dart';
12 import 'package:analysis_server/protocol/protocol_generated.dart' 12 import 'package:analysis_server/protocol/protocol_generated.dart'
13 hide AnalysisOptions; 13 hide AnalysisOptions;
14 import 'package:analysis_server/src/analysis_logger.dart'; 14 import 'package:analysis_server/src/analysis_logger.dart';
15 import 'package:analysis_server/src/channel/channel.dart'; 15 import 'package:analysis_server/src/channel/channel.dart';
16 import 'package:analysis_server/src/collections.dart';
16 import 'package:analysis_server/src/computer/computer_highlights.dart'; 17 import 'package:analysis_server/src/computer/computer_highlights.dart';
17 import 'package:analysis_server/src/computer/computer_highlights2.dart'; 18 import 'package:analysis_server/src/computer/computer_highlights2.dart';
18 import 'package:analysis_server/src/computer/computer_outline.dart'; 19 import 'package:analysis_server/src/computer/computer_outline.dart';
19 import 'package:analysis_server/src/computer/new_notifications.dart'; 20 import 'package:analysis_server/src/computer/new_notifications.dart';
20 import 'package:analysis_server/src/context_manager.dart'; 21 import 'package:analysis_server/src/context_manager.dart';
21 import 'package:analysis_server/src/domains/analysis/navigation.dart'; 22 import 'package:analysis_server/src/domains/analysis/navigation.dart';
22 import 'package:analysis_server/src/domains/analysis/navigation_dart.dart'; 23 import 'package:analysis_server/src/domains/analysis/navigation_dart.dart';
23 import 'package:analysis_server/src/domains/analysis/occurrences.dart'; 24 import 'package:analysis_server/src/domains/analysis/occurrences.dart';
24 import 'package:analysis_server/src/domains/analysis/occurrences_dart.dart'; 25 import 'package:analysis_server/src/domains/analysis/occurrences_dart.dart';
25 import 'package:analysis_server/src/ide_options.dart'; 26 import 'package:analysis_server/src/ide_options.dart';
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
255 /** 256 /**
256 * Return the total time the server's been alive. 257 * Return the total time the server's been alive.
257 */ 258 */
258 Duration get uptime { 259 Duration get uptime {
259 DateTime start = new DateTime.fromMillisecondsSinceEpoch( 260 DateTime start = new DateTime.fromMillisecondsSinceEpoch(
260 performanceDuringStartup.startTime); 261 performanceDuringStartup.startTime);
261 return new DateTime.now().difference(start); 262 return new DateTime.now().difference(start);
262 } 263 }
263 264
264 /** 265 /**
266 * A [RecentBuffer] of the most recent exceptions encountered by the analysis
267 * server.
268 */
269 final RecentBuffer<ServerException> exceptions = new RecentBuffer(10);
270
271 /**
265 * The class into which performance information is currently being recorded. 272 * The class into which performance information is currently being recorded.
266 * During startup, this will be the same as [performanceDuringStartup] 273 * During startup, this will be the same as [performanceDuringStartup]
267 * and after startup is complete, this switches to [performanceAfterStartup]. 274 * and after startup is complete, this switches to [performanceAfterStartup].
268 */ 275 */
269 ServerPerformance _performance; 276 ServerPerformance _performance;
270 277
271 /** 278 /**
272 * The [Completer] that completes when analysis is complete. 279 * The [Completer] that completes when analysis is complete.
273 */ 280 */
274 Completer _onAnalysisCompleteCompleter; 281 Completer _onAnalysisCompleteCompleter;
(...skipping 951 matching lines...) Expand 10 before | Expand all | Expand 10 after
1226 void sendResponse(Response response) { 1233 void sendResponse(Response response) {
1227 channel.sendResponse(response); 1234 channel.sendResponse(response);
1228 } 1235 }
1229 1236
1230 /** 1237 /**
1231 * Sends a `server.error` notification. 1238 * Sends a `server.error` notification.
1232 */ 1239 */
1233 void sendServerErrorNotification(String message, exception, stackTrace, 1240 void sendServerErrorNotification(String message, exception, stackTrace,
1234 {bool fatal: false}) { 1241 {bool fatal: false}) {
1235 StringBuffer buffer = new StringBuffer(); 1242 StringBuffer buffer = new StringBuffer();
1236 if (exception != null) { 1243 buffer.write(exception ?? 'null exception');
1237 buffer.write(exception);
1238 } else {
1239 buffer.write('null exception');
1240 }
1241 if (stackTrace != null) { 1244 if (stackTrace != null) {
1242 buffer.writeln(); 1245 buffer.writeln();
1243 buffer.write(stackTrace); 1246 buffer.write(stackTrace);
1244 } else if (exception is! CaughtException) { 1247 } else if (exception is! CaughtException) {
1245 try { 1248 stackTrace = StackTrace.current;
1246 throw 'ignored'; 1249 buffer.writeln();
1247 } catch (ignored, stackTrace) { 1250 buffer.write(stackTrace);
1248 buffer.writeln();
1249 buffer.write(stackTrace);
1250 }
1251 } 1251 }
1252
1252 // send the notification 1253 // send the notification
1253 channel.sendNotification( 1254 channel.sendNotification(
1254 new ServerErrorParams(fatal, message, buffer.toString()) 1255 new ServerErrorParams(fatal, message, buffer.toString())
1255 .toNotification()); 1256 .toNotification());
1257
1258 // remember the last few exceptions
1259 if (exception is CaughtException) {
1260 stackTrace ??= exception.stackTrace;
1261 }
1262 exceptions.add(new ServerException(message, exception, stackTrace, fatal));
1256 } 1263 }
1257 1264
1258 /** 1265 /**
1259 * Send status notification to the client. The `operation` is the operation 1266 * Send status notification to the client. The `operation` is the operation
1260 * being performed or `null` if analysis is complete. 1267 * being performed or `null` if analysis is complete.
1261 */ 1268 */
1262 void sendStatusNotification(ServerOperation operation) { 1269 void sendStatusNotification(ServerOperation operation) {
1263 // Only send status when subscribed. 1270 // Only send status when subscribed.
1264 if (!serverServices.contains(ServerService.STATUS)) { 1271 if (!serverServices.contains(ServerService.STATUS)) {
1265 return; 1272 return;
(...skipping 1111 matching lines...) Expand 10 before | Expand all | Expand 10 after
2377 /** 2384 /**
2378 * The [PerformanceTag] for time spent in server request handlers. 2385 * The [PerformanceTag] for time spent in server request handlers.
2379 */ 2386 */
2380 static PerformanceTag serverRequests = new PerformanceTag('serverRequests'); 2387 static PerformanceTag serverRequests = new PerformanceTag('serverRequests');
2381 2388
2382 /** 2389 /**
2383 * The [PerformanceTag] for time spent in split store microtasks. 2390 * The [PerformanceTag] for time spent in split store microtasks.
2384 */ 2391 */
2385 static PerformanceTag splitStore = new PerformanceTag('splitStore'); 2392 static PerformanceTag splitStore = new PerformanceTag('splitStore');
2386 } 2393 }
2394
2395 /**
2396 * Used to record server exceptions.
2397 */
2398 class ServerException {
2399 final String message;
2400 final dynamic exception;
2401 final StackTrace stackTrace;
2402 final bool fatal;
2403
2404 ServerException(this.message, this.exception, this.stackTrace, this.fatal);
2405
2406 @override
2407 String toString() => message;
2408 }
OLDNEW
« no previous file with comments | « no previous file | pkg/analysis_server/lib/src/collections.dart » ('j') | pkg/analysis_server/lib/src/collections.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698