Plato on Github
Report Home
lib/nestorbuildlight.js
Maintainability
69.88
Lines of code
63
Difficulty
24.54
Estimated Errors
0.32
Function weight
By Complexity
By SLOC
"use strict" import BuildLight from 'buildlight'; /** * class NestorBuildLight * * @param {String} opts: optional * - map: status-colour map, defaults to { OK: 'green', FAIL: 'red', WARN: 'blue' } * - scheme: color scheme array, defaults to [ 'red', 'green', 'blue' ] * scheme allows flexibility to use BuildLight with various Delcom devices (RGB, RGY) * - usbled: path to usbled installation, if not specified then it will try to * find a usbled installation at /sys/bus/usb/drivers/usbled/ * - platform: override platform, used by unit tests to override buildlight platform * - blinkOnFailure: if true then build light will display blinking red, otherwise display red without blinking */ class NestorBuildLight { constructor(opts) { this.opts = opts; this.opts.scheme = this.opts.scheme || ['red', 'green', 'blue']; const MAP = { ok: 'green', fail: 'red', warn: this.opts.scheme.indexOf('blue') !== -1 ? 'blue' : 'yellow' }; this.opts.map = this.opts.map || MAP; this.buildLight = new BuildLight(this.opts); } /** * Notify build status as a colour on Delcom USB Visual Indocator build light. * Device color schemes contain red and green, which are used for OK and FAIL statuses. * While blue or yellow is used to represent a WARN. * Unknown/other status will be represented as all colors switched on. * * @param {String} status: build status */ notify(status) { const UNKNOWN = 'on'; const colour = this.opts.map[status] || UNKNOWN; const self = this; function _colourise() { console.log('Setting build light colour to %s for status %s', colour, status); if (self.opts.blinkOnFailure && status === 'fail') { self.buildLight.blink(colour, function (err) { if (err) { console.error(err.message); } }); } else { self.buildLight[colour](); } } this.buildLight.unblink(_colourise); } } export { NestorBuildLight as default };