| OLD | NEW |
| 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 library get.handler; | 5 library get.handler; |
| 6 | 6 |
| 7 import 'dart:convert'; | 7 import 'dart:convert'; |
| 8 import 'dart:io'; | 8 import 'dart:io'; |
| 9 import 'dart:math'; | 9 import 'dart:math'; |
| 10 | 10 |
| (...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 320 response.write('</body>'); | 320 response.write('</body>'); |
| 321 response.write('</html>'); | 321 response.write('</html>'); |
| 322 response.close(); | 322 response.close(); |
| 323 } | 323 } |
| 324 | 324 |
| 325 /** | 325 /** |
| 326 * Return a response displaying code completion information. | 326 * Return a response displaying code completion information. |
| 327 */ | 327 */ |
| 328 void _returnCompletionInfo(HttpRequest request) { | 328 void _returnCompletionInfo(HttpRequest request) { |
| 329 var refresh = request.requestedUri.queryParameters['refresh']; | 329 var refresh = request.requestedUri.queryParameters['refresh']; |
| 330 var maxCount = request.requestedUri.queryParameters['maxCount']; |
| 330 HttpResponse response = request.response; | 331 HttpResponse response = request.response; |
| 331 response.statusCode = HttpStatus.OK; | 332 response.statusCode = HttpStatus.OK; |
| 332 response.headers.add(HttpHeaders.CONTENT_TYPE, "text/html"); | 333 response.headers.add(HttpHeaders.CONTENT_TYPE, "text/html"); |
| 333 response.write('<html>'); | 334 response.write('<html>'); |
| 334 response.write('<head>'); | 335 response.write('<head>'); |
| 335 response.write('<title>Dart Analysis Server - Completion Stats</title>'); | 336 response.write('<title>Dart Analysis Server - Completion Stats</title>'); |
| 336 response.write('<style>'); | 337 response.write('<style>'); |
| 337 response.write('td.right {text-align: right;}'); | 338 response.write('td.right {text-align: right;}'); |
| 338 response.write('</style>'); | 339 response.write('</style>'); |
| 339 if (refresh is String) { | 340 if (refresh is String) { |
| 340 int seconds = int.parse(refresh, onError: (_) => 5); | 341 int seconds = int.parse(refresh, onError: (_) => 5); |
| 341 response.write('<meta http-equiv="refresh" content="$seconds">'); | 342 response.write('<meta http-equiv="refresh" content="$seconds">'); |
| 342 } | 343 } |
| 343 response.write('</head>'); | 344 response.write('</head>'); |
| 344 response.write('<body>'); | 345 response.write('<body>'); |
| 345 _writeCompletionInfo(response); | 346 _writeCompletionInfo(response, maxCount); |
| 346 response.write('<form>'); | 347 response.write('<p> </p>'); |
| 347 response.write( | 348 response.write('<p>Try '); |
| 348 '<input type="button" onClick="history.go(0)" value="Refresh">'); | 349 response.write('<a href="?refresh=5">?refresh=5</a>'); |
| 349 response.write('</form>'); | 350 response.write(' to refresh every 5 seconds</p>'); |
| 350 response.write('<p>Append "?refresh=5" to refresh every 5 seconds</p>'); | 351 response.write('<p>and '); |
| 352 response.write('<a href="?maxCount=50">?maxCount=50</a>'); |
| 353 response.write(' to keep the last 50 performance measurements</p>'); |
| 351 response.write('</body>'); | 354 response.write('</body>'); |
| 352 response.write('</html>'); | 355 response.write('</html>'); |
| 353 response.close(); | 356 response.close(); |
| 354 } | 357 } |
| 355 | 358 |
| 356 void _returnFailure(HttpRequest request, String message) { | 359 void _returnFailure(HttpRequest request, String message) { |
| 357 HttpResponse response = request.response; | 360 HttpResponse response = request.response; |
| 358 response.statusCode = HttpStatus.OK; | 361 response.statusCode = HttpStatus.OK; |
| 359 response.headers.add(HttpHeaders.CONTENT_TYPE, "text/html"); | 362 response.headers.add(HttpHeaders.CONTENT_TYPE, "text/html"); |
| 360 response.write('<html>'); | 363 response.write('<html>'); |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 484 response.write('<li><a href="$COMPLETION_PATH">Completion Stats</a></li>'); | 487 response.write('<li><a href="$COMPLETION_PATH">Completion Stats</a></li>'); |
| 485 response.write('<ul>'); | 488 response.write('<ul>'); |
| 486 response.write('</body>'); | 489 response.write('</body>'); |
| 487 response.write('</html>'); | 490 response.write('</html>'); |
| 488 response.close(); | 491 response.close(); |
| 489 } | 492 } |
| 490 | 493 |
| 491 /** | 494 /** |
| 492 * Append code completion information. | 495 * Append code completion information. |
| 493 */ | 496 */ |
| 494 void _writeCompletionInfo(HttpResponse response) { | 497 void _writeCompletionInfo(HttpResponse response, maxCount) { |
| 495 response.write('<h1>Code Completion</h1>'); | 498 response.write('<h1>Code Completion</h1>'); |
| 496 AnalysisServer analysisServer = _server.analysisServer; | 499 AnalysisServer analysisServer = _server.analysisServer; |
| 497 if (analysisServer == null) { | 500 if (analysisServer == null) { |
| 498 response.write('<p>Not running</p>'); | 501 response.write('<p>Not running</p>'); |
| 499 return; | 502 return; |
| 500 } | 503 } |
| 501 CompletionDomainHandler handler = analysisServer.handlers.firstWhere( | 504 CompletionDomainHandler handler = analysisServer.handlers.firstWhere( |
| 502 (h) => h is CompletionDomainHandler, | 505 (h) => h is CompletionDomainHandler, |
| 503 orElse: () => null); | 506 orElse: () => null); |
| 504 if (handler == null) { | 507 if (handler == null) { |
| 505 response.write('<p>No code completion</p>'); | 508 response.write('<p>No code completion</p>'); |
| 506 return; | 509 return; |
| 507 } | 510 } |
| 511 if (maxCount is String) { |
| 512 int count = int.parse(maxCount, onError: (_) => 0); |
| 513 handler.performanceListMaxLength = count; |
| 514 } |
| 508 CompletionPerformance performance = handler.performance; | 515 CompletionPerformance performance = handler.performance; |
| 509 if (performance == null) { | 516 if (performance == null) { |
| 510 response.write('<p>No performance stats yet</p>'); | 517 response.write('<p>No performance stats yet</p>'); |
| 511 return; | 518 return; |
| 512 } | 519 } |
| 513 response.write('<h2>Performance</h2>'); | |
| 514 response.write('<table>'); | 520 response.write('<table>'); |
| 515 _writeRow(response, ['Elapsed', '', 'Operation'], header: true); | 521 _writeRow(response, ['Elapsed', '', 'Operation'], header: true); |
| 516 performance.operations.forEach((OperationPerformance op) { | 522 performance.operations.forEach((OperationPerformance op) { |
| 517 String elapsed = op.elapsed != null ? op.elapsed.toString() : '???'; | 523 String elapsed = op.elapsed != null ? op.elapsed.toString() : '???'; |
| 518 _writeRow(response, [elapsed, ' ', op.name]); | 524 _writeRow(response, [elapsed, ' ', op.name]); |
| 519 }); | 525 }); |
| 526 if (handler.priorityChangedPerformance == null) { |
| 527 response.write('<p>No priorityChanged caching</p>'); |
| 528 } else { |
| 529 int len = handler.priorityChangedPerformance.operations.length; |
| 530 if (len > 0) { |
| 531 var op = handler.priorityChangedPerformance.operations[len - 1]; |
| 532 if (op != null) { |
| 533 _writeRow(response, [' ', ' ', ' ']); |
| 534 String elapsed = op.elapsed != null ? op.elapsed.toString() : '???'; |
| 535 _writeRow(response, [elapsed, ' ', op.name]); |
| 536 } |
| 537 } |
| 538 } |
| 520 response.write('</table>'); | 539 response.write('</table>'); |
| 540 if (handler.performanceList.length > 0) { |
| 541 response.write('<table>'); |
| 542 _writeRow(response, ['Milliseconds', '', '# Notifications', '', '# Suggest
ions', '', 'Snippet'], header: true); |
| 543 handler.performanceList.forEach((CompletionPerformance performance) { |
| 544 _writeRow( |
| 545 response, |
| 546 [ |
| 547 performance.elapsedInMilliseconds, |
| 548 ' ', |
| 549 performance.notificationCount, |
| 550 ' ', |
| 551 performance.suggestionCount, |
| 552 ' ', |
| 553 performance.snippet]); |
| 554 }); |
| 555 response.write('</table>'); |
| 556 } |
| 521 } | 557 } |
| 522 | 558 |
| 523 /** | 559 /** |
| 524 * Write a single row within a table to the given [response] object. The row | 560 * Write a single row within a table to the given [response] object. The row |
| 525 * will have one cell for each of the [columns], and will be a header row if | 561 * will have one cell for each of the [columns], and will be a header row if |
| 526 * [header] is `true`. | 562 * [header] is `true`. |
| 527 */ | 563 */ |
| 528 void _writeRow(HttpResponse response, List<Object> columns, {bool header: | 564 void _writeRow(HttpResponse response, List<Object> columns, {bool header: |
| 529 false, List<String> classes}) { | 565 false, List<String> classes}) { |
| 530 response.write('<tr>'); | 566 response.write('<tr>'); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 547 if (header) { | 583 if (header) { |
| 548 response.write('</th>'); | 584 response.write('</th>'); |
| 549 } else { | 585 } else { |
| 550 response.write('</td>'); | 586 response.write('</td>'); |
| 551 } | 587 } |
| 552 } | 588 } |
| 553 | 589 |
| 554 response.write('</tr>'); | 590 response.write('</tr>'); |
| 555 } | 591 } |
| 556 } | 592 } |
| OLD | NEW |