From 3909ddcd14499c2e48e00c4c7107bd7370740a8d Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Mon, 1 Dec 2014 10:24:38 -0800 Subject: [PATCH] [Plot] Add sine wave generator example Add sine wave generator as an example of a domain object which exposes telemetry, to support transition of the Plot view. WTD-533. --- example/generator/bundle.json | 40 ++++++++++++++ example/generator/src/SinewaveTelemetry.js | 42 +++++++++++++++ .../src/SinewaveTelemetryProvider.js | 53 +++++++++++++++++++ 3 files changed, 135 insertions(+) create mode 100644 example/generator/bundle.json create mode 100644 example/generator/src/SinewaveTelemetry.js create mode 100644 example/generator/src/SinewaveTelemetryProvider.js diff --git a/example/generator/bundle.json b/example/generator/bundle.json new file mode 100644 index 0000000000..97eadaf554 --- /dev/null +++ b/example/generator/bundle.json @@ -0,0 +1,40 @@ +{ + "name": "Sine Wave Generator", + "description": "Example of a component that produces dataa.", + "extensions": { + "components": [ + { + "implementation": "SinewaveTelemetryProvider.js", + "type": "provider", + "provides": "telemetryService", + "depends": [ "$q", "$timeout" ] + } + ], + "types": [ + { + "key": "generator", + "name": "Sine Wave Generator", + "glyph": "T", + "description": "A sine wave generator", + "model": { + "telemetry": { + "period": 10 + } + }, + "telemetry": { + "source": "generator" + }, + "properties": [ + { + "label": "Period", + "control": "_textfield", + "key": "period", + "required": true, + "property": [ "telemetry", "period" ], + "pattern": "^\\d*(\\.\\d*)?$" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/example/generator/src/SinewaveTelemetry.js b/example/generator/src/SinewaveTelemetry.js new file mode 100644 index 0000000000..9119617bfe --- /dev/null +++ b/example/generator/src/SinewaveTelemetry.js @@ -0,0 +1,42 @@ +/*global define,Promise*/ + +/** + * Module defining SinewaveTelemetry. Created by vwoeltje on 11/12/14. + */ +define( + [], + function () { + "use strict"; + + var firstObservedTime = Date.now(); + + /** + * + * @constructor + */ + function SinewaveTelemetry(request) { + var latestObservedTime = Date.now(), + count = Math.floor((latestObservedTime - firstObservedTime) / 1000), + period = request.period || 30, + generatorData = {}; + + generatorData.getPointCount = function () { + return count; + }; + + generatorData.getDomainValue = function (i, domain) { + return i * 1000 + + (domain !== 'delta' ? firstObservedTime : 0); + }; + + generatorData.getRangeValue = function (i, range) { + range = range || "sin"; + return Math[range](i * Math.PI * 2 / period); + }; + + return generatorData; + } + + return SinewaveTelemetry; + } +); \ No newline at end of file diff --git a/example/generator/src/SinewaveTelemetryProvider.js b/example/generator/src/SinewaveTelemetryProvider.js new file mode 100644 index 0000000000..d111bafd3d --- /dev/null +++ b/example/generator/src/SinewaveTelemetryProvider.js @@ -0,0 +1,53 @@ +/*global define,Promise*/ + +/** + * Module defining SinewaveTelemetryProvider. Created by vwoeltje on 11/12/14. + */ +define( + ["./SinewaveTelemetry"], + function (SinewaveTelemetry) { + "use strict"; + + /** + * + * @constructor + */ + function SinewaveTelemetryProvider($q, $timeout) { + + // + function matchesSource(request) { + return request.source === "generator"; + } + + // Used internally; this will be repacked by doPackage + function generateData(request) { + return { + key: request.key, + telemetry: new SinewaveTelemetry(request) + }; + } + + // + function doPackage(results) { + var packaged = {}; + results.forEach(function (result) { + packaged[result.key] = result.telemetry; + }); + // Format as expected (sources -> keys -> telemetry) + return { generator: packaged }; + } + + function requestTelemetry(requests) { + return $timeout(function () { + return doPackage(requests.filter(matchesSource).map(generateData)); + }, 0); + } + + return { + requestTelemetry: requestTelemetry + }; + } + + return SinewaveTelemetryProvider; + } +); \ No newline at end of file