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

Unified Diff: pkg/analysis_server/lib/src/get_handler.dart

Issue 894823002: record and display request latency (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: merge Created 5 years, 11 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
« no previous file with comments | « pkg/analysis_server/lib/src/analysis_server.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analysis_server/lib/src/get_handler.dart
diff --git a/pkg/analysis_server/lib/src/get_handler.dart b/pkg/analysis_server/lib/src/get_handler.dart
index fdba33613d9d90983f8b5198055a8036f694e78d..4f9a1e2f153abc92266cb6dece72d845129f8143 100644
--- a/pkg/analysis_server/lib/src/get_handler.dart
+++ b/pkg/analysis_server/lib/src/get_handler.dart
@@ -87,6 +87,11 @@ class GetHandler {
static const String OVERLAYS_PATH = '/overlays';
/**
+ * The path used to request overall performance information.
+ */
+ static const String PERFORMANCE_PATH = '/performance';
+
+ /**
* Query parameter used to represent the cache state to search for, when
* accessing [CACHE_STATE_PATH].
*/
@@ -176,6 +181,8 @@ class GetHandler {
_returnOverlayContents(request);
} else if (path == OVERLAYS_PATH) {
_returnOverlaysInfo(request);
+ } else if (path == PERFORMANCE_PATH) {
+ _returnPerformance(request);
} else {
_returnUnknownRequest(request);
}
@@ -746,6 +753,91 @@ class GetHandler {
}
/**
+ * Return a response displaying overall performance information.
+ */
+ void _returnPerformance(HttpRequest request) {
+ AnalysisServer analysisServer = _server.analysisServer;
+ if (analysisServer == null) {
+ return _returnFailure(request, 'Analysis server is not running');
+ }
+ _writeResponse(request, (StringBuffer buffer) {
+ _writePage(
+ buffer,
+ 'Analysis Server - Performance',
+ [],
+ (StringBuffer buffer) {
+ buffer.write('<h3>Communication Performance</h3>');
+ _writeTwoColumns(buffer, (StringBuffer buffer) {
+ ServerPerformance perf = analysisServer.performanceDuringStartup;
+ int requestCount = perf.requestCount;
+ num averageLatency =
+ requestCount > 0 ? (perf.requestLatency / requestCount).round() : 0;
+ int maximumLatency = perf.maxLatency;
+ num slowRequestPercent =
+ requestCount > 0 ? (perf.slowRequestCount * 100 / requestCount).round() : 0;
+ buffer.write('<h4>Startup</h4>');
+ buffer.write('<table>');
+ _writeRow(
+ buffer,
+ [requestCount, 'requests'],
+ classes: ["right", null]);
+ _writeRow(
+ buffer,
+ [averageLatency, 'ms average latency'],
+ classes: ["right", null]);
+ _writeRow(
+ buffer,
+ [maximumLatency, 'ms maximum latency'],
+ classes: ["right", null]);
+ _writeRow(
+ buffer,
+ [slowRequestPercent, '% > 150 ms latency'],
+ classes: ["right", null]);
+ if (analysisServer.performanceAfterStartup != null) {
+ int startupTime =
+ analysisServer.performanceAfterStartup.startTime -
+ perf.startTime;
+ _writeRow(
+ buffer,
+ [startupTime, 'ms for initial analysis to complete']);
+ }
+ buffer.write('</table>');
+ }, (StringBuffer buffer) {
+ ServerPerformance perf = analysisServer.performanceAfterStartup;
+ if (perf == null) {
+ return;
+ }
+ int requestCount = perf.requestCount;
+ num averageLatency =
+ requestCount > 0 ? (perf.requestLatency * 10 / requestCount).round() / 10 : 0;
+ int maximumLatency = perf.maxLatency;
+ num slowRequestPercent =
+ requestCount > 0 ? (perf.slowRequestCount * 100 / requestCount).round() : 0;
+ buffer.write('<h4>Current</h4>');
+ buffer.write('<table>');
+ _writeRow(
+ buffer,
+ [requestCount, 'requests'],
+ classes: ["right", null]);
+ _writeRow(
+ buffer,
+ [averageLatency, 'ms average latency'],
+ classes: ["right", null]);
+ _writeRow(
+ buffer,
+ [maximumLatency, 'ms maximum latency'],
+ classes: ["right", null]);
+ _writeRow(
+ buffer,
+ [slowRequestPercent, '% > 150 ms latency'],
+ classes: ["right", null]);
+ buffer.write('</table>');
+ });
+ });
+ });
+ }
+
+ /**
* Return a response indicating the status of the analysis server.
*/
void _returnServerStatus(HttpRequest request) {
@@ -766,23 +858,20 @@ class GetHandler {
* server.
*/
void _returnUnknownRequest(HttpRequest request) {
- HttpResponse response = request.response;
- response.statusCode = HttpStatus.NOT_FOUND;
- response.headers.contentType = _htmlContent;
- response.write('<html>');
- response.write('<head>');
- response.write('<title>Dart Analysis Server - Page Not Found</title>');
- response.write('</head>');
- response.write('<body>');
- response.write('<h1>Page Not Found</h1>');
- response.write('<p>Try one of these links instead:</p>');
- response.write('<ul>');
- response.write('<li><a href="$STATUS_PATH">Server Status</a></li>');
- response.write('<li><a href="$COMPLETION_PATH">Completion Stats</a></li>');
- response.write('<ul>');
- response.write('</body>');
- response.write('</html>');
- response.close();
+ _writeResponse(request, (StringBuffer buffer) {
+ _writePage(buffer, 'Analysis Server', [], (StringBuffer buffer) {
+ buffer.write('<h3>Pages</h3>');
+ buffer.write('<p>');
+ buffer.write(_makeLink(COMPLETION_PATH, {}, 'Completion data'));
+ buffer.write('</p>');
+ buffer.write('<p>');
+ buffer.write(_makeLink(PERFORMANCE_PATH, {}, 'Performance'));
+ buffer.write('</p>');
+ buffer.write('<p>');
+ buffer.write(_makeLink(STATUS_PATH, {}, 'Server status'));
+ buffer.write('</p>');
+ });
+ });
}
/**
« no previous file with comments | « pkg/analysis_server/lib/src/analysis_server.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698