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 analysis_server.src.status.get_handler; | 5 library analysis_server.src.status.get_handler; |
6 | 6 |
7 import 'dart:collection'; | 7 import 'dart:collection'; |
8 import 'dart:convert'; | 8 import 'dart:convert'; |
9 import 'dart:io'; | 9 import 'dart:io'; |
10 import 'dart:math'; | 10 import 'dart:math'; |
(...skipping 868 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
879 String sourceUri = request.uri.queryParameters[SOURCE_QUERY_PARAM]; | 879 String sourceUri = request.uri.queryParameters[SOURCE_QUERY_PARAM]; |
880 if (sourceUri == null) { | 880 if (sourceUri == null) { |
881 return _returnFailure( | 881 return _returnFailure( |
882 request, 'Query parameter $SOURCE_QUERY_PARAM required'); | 882 request, 'Query parameter $SOURCE_QUERY_PARAM required'); |
883 } | 883 } |
884 | 884 |
885 List<Folder> allContexts = <Folder>[]; | 885 List<Folder> allContexts = <Folder>[]; |
886 Map<Folder, List<CacheEntry>> entryMap = | 886 Map<Folder, List<CacheEntry>> entryMap = |
887 new HashMap<Folder, List<CacheEntry>>(); | 887 new HashMap<Folder, List<CacheEntry>>(); |
888 StringBuffer invalidKeysBuffer = new StringBuffer(); | 888 StringBuffer invalidKeysBuffer = new StringBuffer(); |
889 analysisServer.folderMap | 889 analysisServer.folderMap.forEach((Folder folder, AnalysisContext context) { |
890 .forEach((Folder folder, InternalAnalysisContext context) { | |
891 Source source = context.sourceFactory.forUri(sourceUri); | 890 Source source = context.sourceFactory.forUri(sourceUri); |
892 if (source != null) { | 891 if (source != null) { |
893 MapIterator<AnalysisTarget, CacheEntry> iterator = | 892 MapIterator<AnalysisTarget, CacheEntry> iterator = |
894 context.analysisCache.iterator(); | 893 (context as InternalAnalysisContext).analysisCache.iterator(); |
895 while (iterator.moveNext()) { | 894 while (iterator.moveNext()) { |
896 if (source == iterator.key.source) { | 895 if (source == iterator.key.source) { |
897 if (!allContexts.contains(folder)) { | 896 if (!allContexts.contains(folder)) { |
898 allContexts.add(folder); | 897 allContexts.add(folder); |
899 } | 898 } |
900 List<CacheEntry> entries = entryMap[folder]; | 899 List<CacheEntry> entries = entryMap[folder]; |
901 if (entries == null) { | 900 if (entries == null) { |
902 entries = <CacheEntry>[]; | 901 entries = <CacheEntry>[]; |
903 entryMap[folder] = entries; | 902 entryMap[folder] = entries; |
904 } | 903 } |
(...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1216 String contextFilter = request.uri.queryParameters[CONTEXT_QUERY_PARAM]; | 1215 String contextFilter = request.uri.queryParameters[CONTEXT_QUERY_PARAM]; |
1217 if (contextFilter == null) { | 1216 if (contextFilter == null) { |
1218 return _returnFailure( | 1217 return _returnFailure( |
1219 request, 'Query parameter $CONTEXT_QUERY_PARAM required'); | 1218 request, 'Query parameter $CONTEXT_QUERY_PARAM required'); |
1220 } | 1219 } |
1221 Folder folder = _findFolder(analysisServer, contextFilter); | 1220 Folder folder = _findFolder(analysisServer, contextFilter); |
1222 if (folder == null) { | 1221 if (folder == null) { |
1223 return _returnFailure(request, 'Invalid context: $contextFilter'); | 1222 return _returnFailure(request, 'Invalid context: $contextFilter'); |
1224 } | 1223 } |
1225 | 1224 |
1226 List<String> priorityNames; | 1225 List<String> priorityNames = <String>[]; |
1227 List<String> explicitNames = <String>[]; | 1226 List<String> explicitNames = <String>[]; |
1228 List<String> implicitNames = <String>[]; | 1227 List<String> implicitNames = <String>[]; |
1229 Map<String, String> links = new HashMap<String, String>(); | 1228 Map<String, String> links = new HashMap<String, String>(); |
1230 List<CaughtException> exceptions = <CaughtException>[]; | 1229 List<CaughtException> exceptions = <CaughtException>[]; |
1231 InternalAnalysisContext context = analysisServer.folderMap[folder]; | 1230 InternalAnalysisContext context = analysisServer.folderMap[folder]; |
1232 priorityNames = context.prioritySources | 1231 context.prioritySources.forEach((Source source) { |
1233 .map((Source source) => source.fullName) | 1232 priorityNames.add(source.fullName); |
1234 .toList(); | 1233 }); |
1235 MapIterator<AnalysisTarget, CacheEntry> iterator = | 1234 MapIterator<AnalysisTarget, CacheEntry> iterator = |
1236 context.analysisCache.iterator(context: context); | 1235 context.analysisCache.iterator(context: context); |
1237 while (iterator.moveNext()) { | 1236 while (iterator.moveNext()) { |
1238 AnalysisTarget target = iterator.key; | 1237 AnalysisTarget target = iterator.key; |
1239 if (target is Source) { | 1238 if (target is Source) { |
1240 CacheEntry entry = iterator.value; | 1239 CacheEntry entry = iterator.value; |
1241 String sourceName = target.fullName; | 1240 String sourceName = target.fullName; |
1242 if (!links.containsKey(sourceName)) { | 1241 if (!links.containsKey(sourceName)) { |
1243 CaughtException exception = entry.exception; | 1242 CaughtException exception = entry.exception; |
1244 if (exception != null) { | 1243 if (exception != null) { |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1330 (StringBuffer buffer) { | 1329 (StringBuffer buffer) { |
1331 buffer.write('<p><b>Context Options</b></p>'); | 1330 buffer.write('<p><b>Context Options</b></p>'); |
1332 writeOptions(buffer, context.analysisOptions); | 1331 writeOptions(buffer, context.analysisOptions); |
1333 }, | 1332 }, |
1334 (StringBuffer buffer) { | 1333 (StringBuffer buffer) { |
1335 buffer.write('<p><b>SDK Context Options</b></p>'); | 1334 buffer.write('<p><b>SDK Context Options</b></p>'); |
1336 writeOptions(buffer, | 1335 writeOptions(buffer, |
1337 context?.sourceFactory?.dartSdk?.context?.analysisOptions); | 1336 context?.sourceFactory?.dartSdk?.context?.analysisOptions); |
1338 }, | 1337 }, |
1339 (StringBuffer buffer) { | 1338 (StringBuffer buffer) { |
1340 List<Linter> lints = | 1339 List<Linter> lints = context |
1341 context.getConfigurationData(CONFIGURED_LINTS_KEY); | 1340 .getConfigurationData(CONFIGURED_LINTS_KEY) as List<Linter>; |
1342 buffer.write('<p><b>Lints</b></p>'); | 1341 buffer.write('<p><b>Lints</b></p>'); |
1343 if (lints.isEmpty) { | 1342 if (lints.isEmpty) { |
1344 buffer.write('<p>none</p>'); | 1343 buffer.write('<p>none</p>'); |
1345 } else { | 1344 } else { |
1346 for (Linter lint in lints) { | 1345 for (Linter lint in lints) { |
1347 buffer.write('<p>'); | 1346 buffer.write('<p>'); |
1348 buffer.write(lint.runtimeType); | 1347 buffer.write(lint.runtimeType); |
1349 buffer.write('</p>'); | 1348 buffer.write('</p>'); |
1350 } | 1349 } |
1351 } | 1350 } |
1352 | 1351 |
1353 List<ErrorProcessor> errorProcessors = | 1352 List<ErrorProcessor> errorProcessors = |
1354 context.getConfigurationData(CONFIGURED_ERROR_PROCESSORS); | 1353 context.getConfigurationData(CONFIGURED_ERROR_PROCESSORS) |
| 1354 as List<ErrorProcessor>; |
1355 int processorCount = errorProcessors?.length ?? 0; | 1355 int processorCount = errorProcessors?.length ?? 0; |
1356 buffer | 1356 buffer |
1357 .write('<p><b>Error Processor count</b>: $processorCount</p>'); | 1357 .write('<p><b>Error Processor count</b>: $processorCount</p>'); |
1358 } | 1358 } |
1359 ]); | 1359 ]); |
1360 | 1360 |
1361 SourceFactory sourceFactory = context.sourceFactory; | 1361 SourceFactory sourceFactory = context.sourceFactory; |
1362 if (sourceFactory is SourceFactoryImpl) { | 1362 if (sourceFactory is SourceFactoryImpl) { |
1363 buffer.write('<h3>Resolvers</h3>'); | 1363 buffer.write('<h3>Resolvers</h3>'); |
1364 for (UriResolver resolver in sourceFactory.resolvers) { | 1364 for (UriResolver resolver in sourceFactory.resolvers) { |
(...skipping 513 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1878 | 1878 |
1879 buffer.write('<h3>Timing</h3>'); | 1879 buffer.write('<h3>Timing</h3>'); |
1880 | 1880 |
1881 buffer.write('<p>getDiagnostic (last call): '); | 1881 buffer.write('<p>getDiagnostic (last call): '); |
1882 buffer.write(elapsedMs); | 1882 buffer.write(elapsedMs); |
1883 buffer.write(' (ms)</p>'); | 1883 buffer.write(' (ms)</p>'); |
1884 buffer.write('<p>getDiagnostic (rolling average): '); | 1884 buffer.write('<p>getDiagnostic (rolling average): '); |
1885 buffer.write(_diagnosticCallAverage.value); | 1885 buffer.write(_diagnosticCallAverage.value); |
1886 buffer.write(' (ms)</p> '); | 1886 buffer.write(' (ms)</p> '); |
1887 | 1887 |
1888 var json = response.toJson()[Response.RESULT]; | 1888 Map json = response.toJson()[Response.RESULT]; |
1889 List contexts = json['contexts']; | 1889 List contexts = json['contexts']; |
1890 contexts.sort((first, second) => first['name'].compareTo(second['name'])); | 1890 contexts.sort((first, second) => first['name'].compareTo(second['name'])); |
1891 | 1891 |
1892 // Track visited libraries. | 1892 // Track visited libraries. |
1893 Set<LibraryElement> libraries = new HashSet<LibraryElement>(); | 1893 Set<LibraryElement> libraries = new HashSet<LibraryElement>(); |
1894 | 1894 |
1895 // Count SDK elements separately. | 1895 // Count SDK elements separately. |
1896 ElementCounter sdkCounter = new ElementCounter(); | 1896 ElementCounter sdkCounter = new ElementCounter(); |
1897 | 1897 |
1898 for (var context in contexts) { | 1898 for (var context in contexts) { |
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2225 * given [response] object. | 2225 * given [response] object. |
2226 */ | 2226 */ |
2227 bool _writeServerStatus(StringBuffer buffer) { | 2227 bool _writeServerStatus(StringBuffer buffer) { |
2228 AnalysisServer analysisServer = _server.analysisServer; | 2228 AnalysisServer analysisServer = _server.analysisServer; |
2229 Set<ServerService> services = analysisServer.serverServices; | 2229 Set<ServerService> services = analysisServer.serverServices; |
2230 | 2230 |
2231 buffer.write('<h3>Server Domain</h3>'); | 2231 buffer.write('<h3>Server Domain</h3>'); |
2232 _writeTwoColumns(buffer, (StringBuffer buffer) { | 2232 _writeTwoColumns(buffer, (StringBuffer buffer) { |
2233 if (analysisServer == null) { | 2233 if (analysisServer == null) { |
2234 buffer.write('Status: <span style="color:red">Not running</span>'); | 2234 buffer.write('Status: <span style="color:red">Not running</span>'); |
2235 return false; | 2235 return; |
2236 } | 2236 } |
2237 buffer.write('<p>'); | 2237 buffer.write('<p>'); |
2238 buffer.write('Status: Running<br>'); | 2238 buffer.write('Status: Running<br>'); |
2239 buffer.write('Instrumentation: '); | 2239 buffer.write('Instrumentation: '); |
2240 if (AnalysisEngine.instance.instrumentationService.isActive) { | 2240 if (AnalysisEngine.instance.instrumentationService.isActive) { |
2241 buffer.write('<span style="color:red">Active</span>'); | 2241 buffer.write('<span style="color:red">Active</span>'); |
2242 } else { | 2242 } else { |
2243 buffer.write('Inactive'); | 2243 buffer.write('Inactive'); |
2244 } | 2244 } |
2245 buffer.write('<br>'); | 2245 buffer.write('<br>'); |
2246 buffer.write('Version: '); | 2246 buffer.write('Version: '); |
2247 buffer.write(AnalysisServer.VERSION); | 2247 buffer.write(AnalysisServer.VERSION); |
2248 buffer.write('<br>'); | 2248 buffer.write('<br>'); |
2249 buffer.write('Process ID: '); | 2249 buffer.write('Process ID: '); |
2250 buffer.write(pid); | 2250 buffer.write(pid); |
2251 buffer.write('</p>'); | 2251 buffer.write('</p>'); |
2252 | 2252 |
2253 buffer.write('<p><b>Performance Data</b></p>'); | 2253 buffer.write('<p><b>Performance Data</b></p>'); |
2254 buffer.write('<p>'); | 2254 buffer.write('<p>'); |
2255 buffer.write(makeLink( | 2255 buffer.write(makeLink( |
2256 COMMUNICATION_PERFORMANCE_PATH, {}, 'Communication performance')); | 2256 COMMUNICATION_PERFORMANCE_PATH, {}, 'Communication performance')); |
2257 buffer.write('</p>'); | 2257 buffer.write('</p>'); |
2258 buffer.write('<p>'); | 2258 buffer.write('<p>'); |
2259 buffer.write(makeLink(DIAGNOSTIC_PATH, {}, 'General diagnostics')); | 2259 buffer.write(makeLink(DIAGNOSTIC_PATH, {}, 'General diagnostics')); |
2260 buffer.write('</p>'); | 2260 buffer.write('</p>'); |
2261 }, (StringBuffer buffer) { | 2261 }, (StringBuffer buffer) { |
2262 _writeSubscriptionList(buffer, ServerService.VALUES, services); | 2262 _writeSubscriptionList(buffer, ServerService.VALUES, services); |
2263 }); | 2263 }); |
2264 return true; | 2264 return analysisServer != null; |
2265 } | 2265 } |
2266 | 2266 |
2267 /** | 2267 /** |
2268 * Write a representation of the given [stackTrace] to the given [buffer]. | 2268 * Write a representation of the given [stackTrace] to the given [buffer]. |
2269 */ | 2269 */ |
2270 void _writeStackTrace(StringBuffer buffer, StackTrace stackTrace) { | 2270 void _writeStackTrace(StringBuffer buffer, StackTrace stackTrace) { |
2271 if (stackTrace != null) { | 2271 if (stackTrace != null) { |
2272 String trace = stackTrace.toString().replaceAll('#', '<br>#'); | 2272 String trace = stackTrace.toString().replaceAll('#', '<br>#'); |
2273 if (trace.startsWith('<br>#')) { | 2273 if (trace.startsWith('<br>#')) { |
2274 trace = trace.substring(4); | 2274 trace = trace.substring(4); |
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2458 */ | 2458 */ |
2459 static String makeLink( | 2459 static String makeLink( |
2460 String path, Map<String, String> params, String innerHtml, | 2460 String path, Map<String, String> params, String innerHtml, |
2461 [bool hasError = false]) { | 2461 [bool hasError = false]) { |
2462 Uri uri = new Uri(path: path, queryParameters: params); | 2462 Uri uri = new Uri(path: path, queryParameters: params); |
2463 String href = HTML_ESCAPE.convert(uri.toString()); | 2463 String href = HTML_ESCAPE.convert(uri.toString()); |
2464 String classAttribute = hasError ? ' class="error"' : ''; | 2464 String classAttribute = hasError ? ' class="error"' : ''; |
2465 return '<a href="$href"$classAttribute>$innerHtml</a>'; | 2465 return '<a href="$href"$classAttribute>$innerHtml</a>'; |
2466 } | 2466 } |
2467 } | 2467 } |
OLD | NEW |