diff --git a/package.json b/package.json index a36b4ef..5c00662 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "esp-js-devtools", - "version": "0.0.14", + "version": "0.0.15", "description": "Evented State Processor (ESP) dev tools", "main": "dist/esp-js-devtools.js", "scripts": { diff --git a/src/model/analyticsMonitor.js b/src/model/analyticsMonitor.js index e22bf76..5bb85b3 100644 --- a/src/model/analyticsMonitor.js +++ b/src/model/analyticsMonitor.js @@ -36,14 +36,20 @@ export default class AnalyticsMonitor { this._router.publishEvent(this._devToolsModelId,'eventPublished', {modelId: modelId, eventType: eventType, event:event}); } broadcastEvent(eventType) { + this._router.publishEvent(this._devToolsModelId, 'broadcastEvent', {eventType: eventType}); } - executingEvent(modelId) { + executingEvent(eventType) { + this._router.publishEvent(this._devToolsModelId, 'executingEvent', {eventType: eventType}); } runAction(modelId) { + if(modelId === DebugToolsModel.modelId) return; + this._router.publishEvent(this._devToolsModelId, 'runAction', {modelId: modelId}); } eventEnqueued(modelId, eventType) { } eventIgnored(modelId, eventType) { + if(modelId === DebugToolsModel.modelId) return; + this._router.publishEvent(this._devToolsModelId,'eventIgnored', {modelId: modelId, eventType: eventType}); } dispatchLoopStart() { } @@ -72,7 +78,7 @@ export default class AnalyticsMonitor { dispatchLoopEnd() { } halted(modelIds, err) { - if(modelIds.indexOf(DebugToolsModel.modelId) >=0 ) return; + if(modelIds.indexOf(DebugToolsModel.modelId) >= 0) return; this._router.publishEvent(this._devToolsModelId, 'routerHalted', {modelIds: modelIds, err: err}); } registerMonitor(devToolsDiagnosticMonitor) { diff --git a/src/model/dataPoint.js b/src/model/dataPoint.js index a7eefc3..6288c76 100644 --- a/src/model/dataPoint.js +++ b/src/model/dataPoint.js @@ -20,24 +20,28 @@ import DataPointType from './dataPointType'; let dataPointId = 1; export default class DataPoint { - constructor(publishedTime, data, modelId, pointType) { + constructor(timeRecordedAt, modelId, eventType, error, pointType) { this._pointId = dataPointId++; - this._data = data; - this._publishedTime = publishedTime; - this._devToolsModelId = modelId; + this._timeRecordedAt = timeRecordedAt; + this._modelId = modelId; + this._eventType = eventType; + this._error = error; this._pointType = pointType; } get pointId() { return this._pointId; } - get data() { - return this._data; - } - get publishedTime() { - return this._publishedTime; + get timeRecordedAt() { + return this._timeRecordedAt; } get modelId() { - return this._devToolsModelId; + return this._modelId; + } + get eventType() { + return this._eventType; + } + get error() { + return this._error; } get pointType() { return this._pointType; diff --git a/src/model/dataPointType.js b/src/model/dataPointType.js index 5a0332f..2bf715c 100644 --- a/src/model/dataPointType.js +++ b/src/model/dataPointType.js @@ -18,5 +18,6 @@ export default class DataPointType { static get eventPublished() { return 'eventPublished'; }; + static get actionRan() { return 'actionRan'; }; static get routerHalted() { return 'routerHalted'; }; } \ No newline at end of file diff --git a/src/model/devToolsModel.js b/src/model/devToolsModel.js index ef45596..19507d2 100644 --- a/src/model/devToolsModel.js +++ b/src/model/devToolsModel.js @@ -111,16 +111,23 @@ export default class DevToolsModel extends esp.model.DisposableBase { } @esp.observeEvent('eventPublished') _onEventPublished(event) { - this._updateType.push(UpdateType.eventsChanged); - let registeredModel = this._registeredModels[event.modelId]; - if (!registeredModel) { - this._addModel(event.modelId); - } - var dataPoint = new DataPoint(moment(), event.eventType, event.modelId, DataPointType.eventPublished); - this._addDataPoint(dataPoint); - if(this._shouldLogToConsole) { - console.log(`[ESP-Event] ModelId:[${event.modelId}] EventType:[${event.eventType}]`, event.event); - } + this._recordEvent(event.modelId, event.eventType, DataPointType.eventPublished, event.event); + } + @esp.observeEvent('broadcastEvent') + _onBroadcastEvent(event) { + + } + @esp.observeEvent('executingEvent') + _onExecutingEvent(event) { + + } + @esp.observeEvent('runAction') + _onRunAction(event) { + this._recordEvent(event.modelId, '__runAction', DataPointType.actionRan); + } + @esp.observeEvent('eventIgnored') + _onEventIgnored(event) { + } @esp.observeEvent('routerHalted') _onRouterHalted(event) { @@ -128,7 +135,7 @@ export default class DevToolsModel extends esp.model.DisposableBase { var modelId = event.modelIds[i]; let registeredModel = this._registeredModels[modelId]; if(registeredModel) { - var dataPoint = new DataPoint(moment(), event.err, modelId, DataPointType.routerHalted); + var dataPoint = new DataPoint(moment(), modelId, null, event.err, DataPointType.routerHalted); registeredModel.haltingError = event.err; registeredModel.isHalted = true; this._addDataPoint(dataPoint); @@ -137,31 +144,6 @@ export default class DevToolsModel extends esp.model.DisposableBase { this._updateType.push(UpdateType.modelsChanged); this._updateType.push(UpdateType.eventsChanged); } - _addModel(modelId) { - this._updateType.push(UpdateType.modelsChanged); - let registeredModel = this._registeredModels[modelId]; - if(registeredModel) { - throw new Error(`model with id ${modelId} already registered`); - } - registeredModel = new RegisteredModel(modelId); - this._registeredModels[modelId] = registeredModel; - return registeredModel; - } - _addDataPoint(dataPoint) { - this._dataPointsById[dataPoint.pointId] = dataPoint; - this._dataPoints.push(dataPoint); - this._newDataPoints.push(dataPoint); - this._processedDataPointCount++; - if(this._processedDataPointCount > this._dataPointBufferSize) { - let numberToRemove = this._dataPoints.length - this._dataPointBufferSize; - let removedItems = this._dataPoints.splice(0, numberToRemove); - for (let i = 0; i < removedItems.length; i++) { - let dataPointToRemove = removedItems[i]; - this._dataPointsIdsToRemove.push(dataPointToRemove.pointId); - delete this._dataPointsById[dataPointToRemove.pointId]; - } - } - } @esp.observeEvent('pointSelected') _onPointSelected(event) { this._shouldAutoScroll = false; @@ -218,4 +200,41 @@ export default class DevToolsModel extends esp.model.DisposableBase { clearInterval(this._timerSubscription); } } + _recordEvent(modelId, eventType, dataPointType:DataPointType, eventPayload) { + this._updateType.push(UpdateType.eventsChanged); + let registeredModel = this._registeredModels[modelId]; + if (!registeredModel) { + this._addModel(modelId); + } + var dataPoint = new DataPoint(moment(), modelId, eventType, null, dataPointType); + this._addDataPoint(dataPoint); + if(this._shouldLogToConsole && typeof eventPayload !== 'undefined') { + console.log(`[ESP-Event] ModelId:[${modelId}] EventType:[${eventType}]`, eventPayload); + } + } + _addModel(modelId) { + this._updateType.push(UpdateType.modelsChanged); + let registeredModel = this._registeredModels[modelId]; + if(registeredModel) { + throw new Error(`model with id ${modelId} already registered`); + } + registeredModel = new RegisteredModel(modelId); + this._registeredModels[modelId] = registeredModel; + return registeredModel; + } + _addDataPoint(dataPoint) { + this._dataPointsById[dataPoint.pointId] = dataPoint; + this._dataPoints.push(dataPoint); + this._newDataPoints.push(dataPoint); + this._processedDataPointCount++; + if(this._processedDataPointCount > this._dataPointBufferSize) { + let numberToRemove = this._dataPoints.length - this._dataPointBufferSize; + let removedItems = this._dataPoints.splice(0, numberToRemove); + for (let i = 0; i < removedItems.length; i++) { + let dataPointToRemove = removedItems[i]; + this._dataPointsIdsToRemove.push(dataPointToRemove.pointId); + delete this._dataPointsById[dataPointToRemove.pointId]; + } + } + } } \ No newline at end of file diff --git a/src/views/devToolsView.js b/src/views/devToolsView.js index 72e18c2..b6df2e5 100644 --- a/src/views/devToolsView.js +++ b/src/views/devToolsView.js @@ -25,7 +25,8 @@ import vis from 'vis'; import 'vis/dist/vis.css'; import './devToolsView.less' import UpdateType from '../model/updateType'; -import template from './devToolsView.template.html'; +import containerTempalte from './devToolsView.template.html'; +import pointSelectedTempalte from './pointSelected.template.html'; import DataPointType from '../model/dataPointType'; export default class DevToolsView extends esp.model.DisposableBase { @@ -70,7 +71,7 @@ export default class DevToolsView extends esp.model.DisposableBase { let points = isStateOfTheWorld ? model.dataPoints : model.newDataPoints; - for (var i = 0; i < points.length; i++) { + for (let i = 0; i < points.length; i++) { var dataPoint = points[i]; let pointStyle = dataPoint.pointType == DataPointType.routerHalted ? 'background:red' @@ -103,6 +104,7 @@ export default class DevToolsView extends esp.model.DisposableBase { this._logEventsConsoleCheckbox.prop('checked', model.shouldLogToConsole); } if (this._eventDetailsDescriptionP && model.selectedDataPoint) { + this._eventDetailsDescriptionP.html(JSON.stringify(model.selectedDataPoint)); } if(this._ringBufferSizeInput && !this._ringBufferSizeInput.is(":focus")) { @@ -117,7 +119,7 @@ export default class DevToolsView extends esp.model.DisposableBase { _createDevToolsElements() { let _this = this; $(() => { - let container = $(template); + let container = $(containerTempalte); // note use of function so 'this' is the checkbox this._autoscrollCheckbox = container.find('#autoscrollCheckbox'); diff --git a/src/views/pointSelected.template.html b/src/views/pointSelected.template.html new file mode 100644 index 0000000..3090c4d --- /dev/null +++ b/src/views/pointSelected.template.html @@ -0,0 +1,6 @@ +
+
+
+
+
+
\ No newline at end of file