Skip to content

Commit

Permalink
Merge pull request #6 from esp/0.0.15
Browse files Browse the repository at this point in the history
0.0.15
  • Loading branch information
KeithWoods committed Mar 3, 2016
2 parents 9ade273 + 1315548 commit 71d3bce
Show file tree
Hide file tree
Showing 9 changed files with 149 additions and 95 deletions.
8 changes: 4 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
{
"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": {
"start": "npm run build:dev",
"build:dev": "webpack --config webpack.dev.config.js",
"build": "webpack --config webpack.dev.config.js",
"dev": "webpack --progress --watch --colors --hot --debug --display-chunks --config webpack.dev.config.js"
},
"author": "Dev Shop Limited",
"license": "Apache 2",
"repository": "https://github.com/esp/esp-js",
"dependencies": {
"babel-plugin-transform-runtime": "^6.4.3",
"esp-js": "^0.5.16",
"esp-js": "^0.7.0",
"install": "^0.4.2",
"jquery": "^2.2.0",
"jquery": "^2.2.1",
"jquery-ui": "^1.10.5",
"lodash": "^4.2.1",
"moment": "^2.11.2",
Expand Down
30 changes: 0 additions & 30 deletions qq

This file was deleted.

10 changes: 8 additions & 2 deletions src/model/analyticsMonitor.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,14 +36,20 @@ export default class AnalyticsMonitor {
this._router.publishEvent(this._devToolsModelId,'eventPublished', {modelId: modelId, eventType: eventType, event:event});
}
broadcastEvent(eventType) {
// TODO this might cause some infinite loop issues, need to be careful when it's wired up
}
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() {
}
Expand Down Expand Up @@ -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) {
Expand Down
28 changes: 18 additions & 10 deletions src/model/dataPoint.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,24 +20,32 @@ import DataPointType from './dataPointType';
let dataPointId = 1;

export default class DataPoint {
constructor(publishedTime, data, modelId, pointType) {
constructor(timeRecordedAt, modelId, eventType, error, eventPayload, 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._eventPayload = eventPayload;
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 eventPayload() {
return this._eventPayload;
}
get pointType() {
return this._pointType;
Expand Down
1 change: 1 addition & 0 deletions src/model/dataPointType.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,6 @@

export default class DataPointType {
static get eventPublished() { return 'eventPublished'; };
static get actionRan() { return 'actionRan'; };
static get routerHalted() { return 'routerHalted'; };
}
107 changes: 67 additions & 40 deletions src/model/devToolsModel.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import RegisteredModel from './registeredModel';
import DataPoint from './dataPoint';
import DataPointType from './dataPointType';

export default class DevToolsModel extends esp.model.DisposableBase {
export default class DevToolsModel extends esp.DisposableBase {
constructor(router, options) {
super();
this._router = router;
Expand All @@ -39,9 +39,15 @@ export default class DevToolsModel extends esp.model.DisposableBase {
this._timerSubscription = null;
this._now = moment();
this._shouldAutoScroll = true;
this._shouldCaptureEvents = true;
this._shouldLogToConsole = options.logEventsToConsole ? true : false;
this._dataPointBufferSize = 200;
this._shouldCaptureEvents = typeof options.shouldCaptureEvents === 'undefined'
? true
: options.shouldCaptureEvents === true;
this._shouldLogToConsole = typeof options.logEventsToConsole === 'undefined'
? false
: options.logEventsToConsole === true;
this._dataPointBufferSize = typeof options.dataPointBufferSize === 'undefined' || isNaN(options.dataPointBufferSize)
? 500
: options.dataPointBufferSize;
}
static get modelId() {
return 'esp-debugTools';
Expand Down Expand Up @@ -90,6 +96,8 @@ export default class DevToolsModel extends esp.model.DisposableBase {
@esp.observeEvent('modelAdded', esp.ObservationStage.preview)
@esp.observeEvent('modelRemoved', esp.ObservationStage.preview)
@esp.observeEvent('eventPublished', esp.ObservationStage.preview)
@esp.observeEvent('runAction', esp.ObservationStage.preview)
@esp.observeEvent('executingEvent', esp.ObservationStage.preview)
_previewEvents(event, context) {
if(!this._shouldCaptureEvents || this.isDisposed) {
context.cancel();
Expand All @@ -111,24 +119,31 @@ 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) {
for (var i = 0; i < event.modelIds.length; i++) {
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, null, DataPointType.routerHalted);
registeredModel.haltingError = event.err;
registeredModel.isHalted = true;
this._addDataPoint(dataPoint);
Expand All @@ -137,31 +152,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;
Expand Down Expand Up @@ -218,4 +208,41 @@ export default class DevToolsModel extends esp.model.DisposableBase {
clearInterval(this._timerSubscription);
}
}
_recordEvent(modelId, eventType, 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, eventPayload, 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];
}
}
}
}
24 changes: 17 additions & 7 deletions src/views/devToolsView.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,11 @@ 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 {
export default class DevToolsView extends esp.DisposableBase {

constructor(modelId, router) {
super();
Expand Down Expand Up @@ -70,16 +71,16 @@ 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'
: '';
this._timelineData.add({
id: dataPoint.pointId,
group: dataPoint.modelId,
title: dataPoint.data,
start: dataPoint.publishedTime,
title: dataPoint.eventType,
start: dataPoint.timeRecordedAt,
style: pointStyle
});
}
Expand All @@ -103,7 +104,16 @@ 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));
let pointSelectedContainer = $(pointSelectedTempalte);
pointSelectedContainer.find('#timeRecordedAt').text(model.selectedDataPoint.timeRecordedAt);
pointSelectedContainer.find('#modelId').text(model.selectedDataPoint.modelId);
pointSelectedContainer.find('#eventType').text(model.selectedDataPoint.eventType);
pointSelectedContainer.find('#error').text(model.selectedDataPoint.error || 'none');
let eventString = model.selectedDataPoint.eventPayload
? JSON.stringify(model.selectedDataPoint.eventPayload)
: 'N/A';
pointSelectedContainer.find('#event').html(eventString);
this._eventDetailsDescriptionP.html(pointSelectedContainer);
}
if(this._ringBufferSizeInput && !this._ringBufferSizeInput.is(":focus")) {
this._ringBufferSizeInput.val(model.dataPointBufferSize);
Expand All @@ -117,7 +127,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');
Expand Down
11 changes: 9 additions & 2 deletions src/views/devToolsView.less
Original file line number Diff line number Diff line change
Expand Up @@ -39,16 +39,23 @@ div#esp-js-devtool-container {
}

.controls {
margin-left: 5px;
margin-left: 10px;
input {
margin-right: 10px;
}
#ringBufferSize {
width: 60px;
}
}

.eventDetails p {
.eventDetails div {
display: block;
padding: 10px;
color: #5F5F5F;

.event-details-heading {
font-weight: bold;
}
}

input {
Expand Down
Loading

0 comments on commit 71d3bce

Please sign in to comment.