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

Side by Side Diff: runtime/observatory/lib/src/elements/logging_list.dart

Issue 2299893003: Converted Observatory logging-page element (Closed)
Patch Set: Updated observatory_sources.gypi Created 4 years, 3 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
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.
4
5 library logging_page;
6
7 import 'dart:async';
8 import 'dart:html';
9 import 'package:logging/logging.dart';
10 import 'package:observatory/models.dart' as M;
11 import 'package:observatory/src/elements/helpers/rendering_scheduler.dart';
12 import 'package:observatory/src/elements/helpers/tag.dart';
13 import 'package:observatory/utils.dart';
14
15 class LoggingListElement extends HtmlElement implements Renderable {
16 static const tag = const Tag<LoggingListElement>('logging-list');
17
18 RenderingScheduler<LoggingListElement> _r;
19
20 Stream<RenderedEvent<LoggingListElement>> get onRendered => _r.onRendered;
21
22 M.IsolateRef _isolate;
23 M.EventRepository _events;
24 StreamSubscription _subscription;
25 Level _level = Level.ALL;
26 final _logs = <Map>[];
27
28 M.IsolateRef get isolate => _isolate;
29 Level get level => _level;
30
31 set level(Level value) => _level = _r.checkAndReact(_level, value);
32
33 factory LoggingListElement(M.IsolateRef isolate,
34 M.EventRepository events,
35 {RenderingQueue queue}) {
36 assert(isolate != null);
37 assert(events != null);
38 LoggingListElement e = document.createElement(tag.name);
39 e._r = new RenderingScheduler(e, queue: queue);
40 e._isolate = isolate;
41 e._events = events;
42 return e;
43 }
44
45 LoggingListElement.created() : super.created();
46
47 @override
48 attached() {
49 super.attached();
50 _r.enable();
51 _subscription = _events.onLoggingEvent.listen((e) {
52 if (e.isolate.id == _isolate.id) {
53 _logs.add(e.logRecord);
54 if (_shouldBeVisible(_logs.last)) {
55 _r.dirty();
56 }
57 }
58 });
59 }
60
61 @override
62 detached() {
63 super.detached();
64 _r.disable(notify: true);
65 children = [];
66 _subscription.cancel();
67 }
68
69 void render() {
70 children = _logs.where(_shouldBeVisible).map((logRecord) =>
71 new DivElement()..classes = ['logItem', logRecord['level'].name]
72 ..children = [
73 new SpanElement()..classes = ['level']
74 ..text = logRecord['level'].name,
75 new SpanElement()..classes = ['time']
76 ..text = Utils.formatDateTime(logRecord['time']),
77 new SpanElement()..classes = ['message']
78 ..text = logRecord["message"].valueAsString
79 ]
80 ).toList();
81 }
82
83 bool _shouldBeVisible(Map record) => _level.compareTo(record['level']) <= 0;
84 }
OLDNEW
« no previous file with comments | « runtime/observatory/lib/src/elements/logging.html ('k') | runtime/observatory/lib/src/models/objects/event.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698