@@ -3,23 +3,28 @@ import _ from 'lodash';
33import moment from 'moment' ;
44import UpdateType from './updateType' ;
55import RegisteredModel from './registeredModel' ;
6+ import DataPoint from './dataPoint' ;
67import { unregisterDevTools } from '../devtoolsHooks' ;
8+ import DataPointType from './dataPointType' ;
79
810export default class DevToolsModel extends esp . model . DisposableBase {
911 constructor ( router ) {
1012 super ( ) ;
1113 this . _router = router ;
1214 this . _registeredModels = { } ;
13- this . _eventsByNumber = { } ;
14- this . _lastEvent = null ;
15- this . _selectedEvent = null ;
16- this . _updateType = UpdateType . none ;
17- this . _eventCounter = 0 ;
15+ this . _dataPointsById = { } ;
16+ this . _dataPoints = [ ] ;
17+ this . _newDataPoints = [ ] ;
18+ this . _dataPointsIdsToRemove = [ ] ;
19+ this . _selectedDataPoint = null ;
20+ this . _updateType = [ ] ;
21+ this . _processedDataPointCount = 0 ;
1822 this . _timerSubscription = null ;
1923 this . _now = moment ( ) ;
2024 this . _shouldAutoScroll = true ;
2125 this . _shouldCaptureEvents = true ;
2226 this . _shouldLogToConsole = false ;
27+ this . _eventBufferSize = 200 ;
2328 }
2429 static get modelId ( ) {
2530 return 'esp-debugTools' ;
@@ -30,27 +35,31 @@ export default class DevToolsModel extends esp.model.DisposableBase {
3035 get registeredModels ( ) {
3136 return _ . values ( this . _registeredModels ) ;
3237 }
33- get lastEvent ( ) {
34- return this . _lastEvent ;
38+ get newDataPoints ( ) {
39+ return this . _newDataPoints ;
3540 }
36- get selectedEvent ( ) {
37- return this . _selectedEvent ;
41+ get selectedDataPoint ( ) {
42+ return this . _selectedDataPoint ;
3843 }
3944 get now ( ) {
4045 return this . _now ;
4146 }
4247 get shouldAutoScroll ( ) {
4348 return this . _shouldAutoScroll ;
4449 }
45- get totalEventCount ( ) {
46- return this . _eventCounter ;
50+ get dataPointsIdsToRemove ( ) {
51+ return this . _dataPointsIdsToRemove ;
52+ }
53+ get processedDataPointCount ( ) {
54+ return this . _processedDataPointCount ;
4755 }
4856 observeEvents ( ) {
4957 this . addDisposable ( this . _router . observeEventsOn ( this ) ) ;
5058 }
5159 preProcess ( ) {
52- this . _updateType = UpdateType . none ;
53- this . _lastEvent = null ;
60+ this . _updateType = [ ] ;
61+ this . _newDataPoints = [ ] ;
62+ this . _dataPointsIdsToRemove = [ ] ;
5463 }
5564 @esp . observeEvent ( 'modelAdded' , esp . ObservationStage . preview )
5665 @esp . observeEvent ( 'modelRemoved' , esp . ObservationStage . preview )
@@ -66,30 +75,44 @@ export default class DevToolsModel extends esp.model.DisposableBase {
6675 }
6776 @esp . observeEvent ( 'modelAdded' )
6877 _onModelAdded ( event ) {
69- this . _updateType = UpdateType . modelsChanged ;
78+ this . _updateType . push ( UpdateType . modelsChanged ) ;
7079 this . _addModel ( event . modelId ) ;
7180 }
7281 @esp . observeEvent ( 'modelRemoved' )
7382 _onModelRemoved ( event ) {
74- this . _updateType = UpdateType . modelsChanged ;
83+ this . _updateType . push ( UpdateType . modelsChanged ) ;
7584 delete this . _registeredModels [ event . modelId ] ;
7685 }
7786 @esp . observeEvent ( 'eventPublished' )
7887 _onEventPublished ( event ) {
79- this . _updateType = UpdateType . eventsChanged ;
88+ this . _updateType . push ( UpdateType . eventsChanged ) ;
8089 let registeredModel = this . _registeredModels [ event . modelId ] ;
8190 if ( ! registeredModel ) {
82- registeredModel = this . _addModel ( event . modelId ) ;
91+ this . _addModel ( event . modelId ) ;
8392 }
84- this . _eventCounter ++ ;
85- this . _lastEvent = registeredModel . eventPublished ( this . _eventCounter , event . modelId , event . eventType ) ;
86- this . _eventsByNumber [ this . _eventCounter ] = this . _lastEvent ;
93+ var dataPoint = new DataPoint ( moment ( ) , event . eventType , event . modelId , DataPointType . eventPublished ) ;
94+ this . _addDataPoint ( dataPoint ) ;
8795 if ( this . _shouldLogToConsole ) {
8896 console . log ( `[ESP-Event] ModelId:[${ event . modelId } ] EventType:[${ event . eventType } ]` , event . event ) ;
8997 }
9098 }
99+ @esp . observeEvent ( 'routerHalted' )
100+ _onRouterHalted ( event ) {
101+ for ( var i = 0 ; i < event . modelIds . length ; i ++ ) {
102+ var modelId = event . modelIds [ i ] ;
103+ let registeredModel = this . _registeredModels [ modelId ] ;
104+ if ( registeredModel ) {
105+ var dataPoint = new DataPoint ( moment ( ) , event . err , modelId , DataPointType . routerHalted ) ;
106+ registeredModel . haltingError = event . err ;
107+ registeredModel . isHalted = true ;
108+ this . _addDataPoint ( dataPoint ) ;
109+ }
110+ }
111+ this . _updateType . push ( UpdateType . modelsChanged ) ;
112+ this . _updateType . push ( UpdateType . eventsChanged ) ;
113+ }
91114 _addModel ( modelId ) {
92- this . _updateType = UpdateType . modelsChanged ;
115+ this . _updateType . push ( UpdateType . modelsChanged ) ;
93116 let registeredModel = this . _registeredModels [ modelId ] ;
94117 if ( registeredModel ) {
95118 throw new Error ( `model with id ${ modelId } already registered` ) ;
@@ -98,10 +121,25 @@ export default class DevToolsModel extends esp.model.DisposableBase {
98121 this . _registeredModels [ modelId ] = registeredModel ;
99122 return registeredModel ;
100123 }
101- @esp . observeEvent ( 'eventSelected' )
102- _onEventSelected ( event ) {
124+ _addDataPoint ( dataPoint ) {
125+ this . _dataPointsById [ dataPoint . pointId ] = dataPoint ;
126+ this . _dataPoints . push ( dataPoint ) ;
127+ this . _newDataPoints . push ( dataPoint ) ;
128+ this . _processedDataPointCount ++ ;
129+ if ( this . _processedDataPointCount > this . _eventBufferSize ) {
130+ let numberToRemove = this . _dataPoints . length - this . _eventBufferSize ;
131+ let removedItems = this . _dataPoints . splice ( 0 , numberToRemove ) ;
132+ for ( let i = 0 ; i < removedItems . length ; i ++ ) {
133+ let dataPointToRemove = removedItems [ i ] ;
134+ this . _dataPointsIdsToRemove . push ( dataPointToRemove . pointId ) ;
135+ delete this . _dataPointsById [ dataPointToRemove . pointId ] ;
136+ }
137+ }
138+ }
139+ @esp . observeEvent ( 'pointSelected' )
140+ _onPointSelected ( event ) {
103141 this . _shouldAutoScroll = false ;
104- this . _selectedEvent = this . _eventsByNumber [ event . eventNumber ] ;
142+ this . _selectedDataPoint = this . _dataPointsById [ event . pointId ] ;
105143 }
106144 @esp . observeEvent ( 'disableAutoScroll' )
107145 _onDisableAutoScroll ( event ) {
@@ -135,13 +173,13 @@ export default class DevToolsModel extends esp.model.DisposableBase {
135173 // start a timer so we can keep moving the chart forward
136174 this . _timerSubscription = setInterval ( ( ) => {
137175 this . _router . runAction ( ( ) => {
138- this . _updateType = UpdateType . timeChanged ;
176+ this . _updateType . push ( UpdateType . timeChanged ) ;
139177 this . _now = moment ( ) ;
140178 } ) ;
141179 } , 1000 ) ;
142180 }
143181 _reset ( ) {
144- this . _updateType = UpdateType . reset ;
182+ this . _updateType . push ( UpdateType . reset ) ;
145183 this . _registeredModels = { } ;
146184 }
147185 _stopTimer ( ) {
0 commit comments