OLD | NEW |
---|---|
(Empty) | |
1 library get.handler; | |
2 | |
3 import 'dart:io'; | |
4 | |
5 import 'package:analyzer/src/generated/engine.dart'; | |
6 | |
7 import 'analysis_server.dart'; | |
8 | |
9 /** | |
10 * Instances of the class [GetHandler] handle GET requests | |
11 */ | |
12 class GetHandler { | |
13 /** | |
14 * The path used to request the status of the analysis server as a whole. | |
15 */ | |
16 static const String STATUS_PATH = '/status'; | |
devoncarew
2014/01/21 20:59:27
awesome!
| |
17 | |
18 /** | |
19 * The analysis server whose status is to be reported on, or `null` if the | |
20 * server has not yet been created. | |
21 */ | |
22 AnalysisServer server; | |
23 | |
24 /** | |
25 * Initialize a newly created handler for GET requests. | |
26 */ | |
27 GetHandler(); | |
28 | |
29 /** | |
30 * Handle a GET request received by the HTTP server. | |
31 */ | |
32 void handleGetRequest(HttpRequest request) { | |
33 String path = request.uri.path; | |
34 if (path == STATUS_PATH) { | |
35 _returnServerStatus(request); | |
36 } else { | |
37 _returnUnknownRequest(request); | |
38 } | |
39 } | |
40 | |
41 /** | |
42 * Return a response indicating the status of the analysis server. | |
43 */ | |
44 void _returnServerStatus(HttpRequest request) { | |
45 HttpResponse response = request.response; | |
46 response.statusCode = HttpStatus.OK; | |
47 response.headers.add(HttpHeaders.CONTENT_TYPE, "text/html"); | |
48 response.write('<html>'); | |
49 response.write('<head>'); | |
50 response.write('<title>Dart Analysis Server - Status</title>'); | |
51 response.write('</head>'); | |
52 response.write('<body>'); | |
53 response.write('<h1>Analysis Server</h1>'); | |
54 if (server == null) { | |
55 response.write('<p>Not running</p>'); | |
56 } else { | |
57 response.write('<p>Running</p>'); | |
58 response.write('<h1>Analysis Contexts</h1>'); | |
59 response.write('<h2>Summary</h2>'); | |
60 response.write('<table>'); | |
61 _writeRow( | |
62 response, | |
63 ['Context', 'ERROR', 'FLUSHED', 'IN_PROCESS', 'INVALID', 'VALID'], | |
64 true); | |
65 server.contextMap.forEach((String key, AnalysisContext context) { | |
66 AnalysisContentStatistics statistics = | |
67 (context as AnalysisContextImpl).statistics; | |
68 int errorCount = 0; | |
69 int flushedCount = 0; | |
70 int inProcessCount = 0; | |
71 int invalidCount = 0; | |
72 int validCount = 0; | |
73 statistics.cacheRows.forEach((AnalysisContentStatistics_CacheRow row) { | |
74 errorCount += row.errorCount; | |
75 flushedCount += row.flushedCount; | |
76 inProcessCount += row.inProcessCount; | |
77 invalidCount += row.invalidCount; | |
78 validCount += row.validCount; | |
79 }); | |
80 _writeRow(response, [ | |
81 '<a href="#context_$key">$key</a>', | |
82 errorCount, | |
83 flushedCount, | |
84 inProcessCount, | |
85 invalidCount, | |
86 validCount]); | |
87 }); | |
88 response.write('</table>'); | |
89 server.contextMap.forEach((String key, AnalysisContext context) { | |
90 response.write('<h2><a name="context_$key">Analysis Context: $key}</a></ h2>'); | |
91 AnalysisContentStatistics statistics = (context as AnalysisContextImpl). statistics; | |
92 response.write('<table>'); | |
93 _writeRow( | |
94 response, | |
95 ['Item', 'ERROR', 'FLUSHED', 'IN_PROCESS', 'INVALID', 'VALID'], | |
96 true); | |
97 statistics.cacheRows.forEach((AnalysisContentStatistics_CacheRow row) { | |
98 _writeRow( | |
99 response, | |
100 [row.name, | |
101 row.errorCount, | |
102 row.flushedCount, | |
103 row.inProcessCount, | |
104 row.invalidCount, | |
105 row.validCount]); | |
106 }); | |
107 response.write('</table>'); | |
108 List<AnalysisException> exceptions = statistics.exceptions; | |
109 if (!exceptions.isEmpty) { | |
110 response.write('<h2>Exceptions</h2>'); | |
111 exceptions.forEach((AnalysisException exception) { | |
112 response.write('<p>${exception.message}</p>'); | |
113 }); | |
114 } | |
115 }); | |
116 } | |
117 response.write('</body>'); | |
118 response.write('</html>'); | |
119 response.close(); | |
120 } | |
121 | |
122 /** | |
123 * Return an error in response to an unrecognized request received by the HTTP | |
124 * server. | |
125 */ | |
126 void _returnUnknownRequest(HttpRequest request) { | |
127 HttpResponse response = request.response; | |
128 response.statusCode = HttpStatus.NOT_FOUND; | |
129 response.headers.add(HttpHeaders.CONTENT_TYPE, "text/plain"); | |
130 response.write('Not found'); | |
131 response.close(); | |
132 } | |
133 | |
134 /** | |
135 * Write a single row within a table to the given [response] object. The row | |
136 * will have one cell for each of the [columns], and will be a header row if | |
137 * [header] is `true`. | |
138 */ | |
139 void _writeRow(HttpResponse response, List<Object> columns, [bool header = fal se]) { | |
140 if (header) { | |
141 response.write('<th>'); | |
142 } else { | |
143 response.write('<tr>'); | |
144 } | |
145 columns.forEach((Object value) { | |
146 response.write('<td>'); | |
147 response.write(value); | |
148 response.write('</td>'); | |
149 }); | |
150 if (header) { | |
151 response.write('</th>'); | |
152 } else { | |
153 response.write('</tr>'); | |
154 } | |
155 } | |
156 } | |
OLD | NEW |