118 lines
2.9 KiB
Dart
118 lines
2.9 KiB
Dart
import 'dart:async';
|
|
import 'dart:io';
|
|
import '../core/core.dart';
|
|
import '../http/http.dart';
|
|
import 'stats.dart';
|
|
|
|
@deprecated
|
|
class AngelMetrics extends Angel {
|
|
Angel _inner;
|
|
StreamSubscription<HttpRequest> _sub;
|
|
|
|
AngelMetrics() : super() {
|
|
get('/metrics', (req, res) {
|
|
res.contentType = ContentType.HTML;
|
|
|
|
var rows = stats.all.map((stat) {
|
|
return '''
|
|
<tr>
|
|
<td>${stat.name}</td>
|
|
<td>${stat.iterations}</td>
|
|
<td>${stat.sum}ms</td>
|
|
<td>${stat.average.toStringAsFixed(2)}ms</td>
|
|
</tr>''';
|
|
}).join();
|
|
|
|
res.write('''
|
|
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>Metrics</title>
|
|
</head>
|
|
<body>
|
|
<h1>Metrics</h1>
|
|
<i>Updated every 5 seconds</i>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Stat</th>
|
|
<th># Iterations</th>
|
|
<th>Total (ms)</th>
|
|
<th>Average (ms)</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>$rows</tbody>
|
|
</table>
|
|
<script>
|
|
window.setTimeout(function() {
|
|
window.location.reload();
|
|
}, 5000);
|
|
</script>
|
|
</body>
|
|
</html>
|
|
''');
|
|
});
|
|
}
|
|
|
|
final AngelMetricsStats stats = new AngelMetricsStats._();
|
|
|
|
@override
|
|
Future<HttpServer> close() {
|
|
_sub?.cancel();
|
|
_inner.close();
|
|
return super.close();
|
|
}
|
|
|
|
@override
|
|
Iterable<RoutingResult> resolveAll(String absolute, String relative,
|
|
{String method: 'GET', bool strip: true}) {
|
|
return stats.resolveAll.run(() =>
|
|
_inner.resolveAll(absolute, relative, method: method, strip: strip));
|
|
}
|
|
|
|
@override
|
|
Future<bool> executeHandler(
|
|
handler, RequestContext req, ResponseContext res) {
|
|
return stats.executeHandler
|
|
.run<bool>(() => super.executeHandler(handler, req, res));
|
|
}
|
|
|
|
@override
|
|
Future getHandlerResult(handler, RequestContext req, ResponseContext res) {
|
|
return stats.getHandlerResult
|
|
.run(() => super.getHandlerResult(handler, req, res));
|
|
}
|
|
|
|
@override
|
|
Future runContained(
|
|
Function handler, RequestContext req, ResponseContext res) {
|
|
return stats.runContained.run(() => super.runContained(handler, req, res));
|
|
}
|
|
}
|
|
|
|
class AngelMetricsStats {
|
|
AngelMetricsStats._() {
|
|
all = [
|
|
resolveAll,
|
|
executeHandler,
|
|
getHandlerResult,
|
|
runContained,
|
|
];
|
|
}
|
|
|
|
final Stats resolveAll = new Stats('resolveAll');
|
|
final Stats executeHandler = new Stats('executeHandler');
|
|
final Stats getHandlerResult = new Stats('getHandlerResult');
|
|
final Stats runContained = new Stats('runContained');
|
|
|
|
List<Stats> all;
|
|
|
|
void add(Stats stats) {
|
|
all.add(stats);
|
|
}
|
|
|
|
void log() {
|
|
all.forEach((s) => s.log());
|
|
}
|
|
}
|