From 342a7ccc983818b9182c368c0bf4c6db8e2e5b66 Mon Sep 17 00:00:00 2001 From: Nick Farina Date: Thu, 16 Jul 2015 08:44:04 -0700 Subject: [PATCH] Provider logging --- .../homebridge-lockitron/index.js | 10 +++++-- lib/cli.js | 22 ++++++++++++++- lib/homebridge.js | 4 ++- lib/logger.js | 27 +++++++++++++++++++ 4 files changed, 59 insertions(+), 4 deletions(-) create mode 100644 lib/logger.js diff --git a/example-providers/homebridge-lockitron/index.js b/example-providers/homebridge-lockitron/index.js index 158d685..ccd1b29 100644 --- a/example-providers/homebridge-lockitron/index.js +++ b/example-providers/homebridge-lockitron/index.js @@ -1,7 +1,10 @@ import request from 'request'; +// Create a logger for our provider +let log = homebridge.logger('homebridge-lockitron'); + // Demonstrate that we were loaded -console.log("Lockitron provider loaded!"); +log.info("Lockitron provider loaded!"); module.exports = { @@ -19,6 +22,9 @@ module.exports = { let accessToken = homebridge.config.get('homebridge-lockitron.accessToken'); // prove that we got a value - console.log(`Access Token: ${accessToken}`); + log.info(`Access Token: ${accessToken}`); + + // all is well. + callback(); } } diff --git a/lib/cli.js b/lib/cli.js index 608200b..7641e09 100644 --- a/lib/cli.js +++ b/lib/cli.js @@ -83,6 +83,9 @@ class CliProviderSetup { prompt.start(); prompt.get(this.buildPromptSchema(), (err, result) => { + // add a linebreak after our last prompt + console.log(''); + // apply configuration values entered by the user for (let key:string in result) { let value:object = result[key]; @@ -103,7 +106,24 @@ class CliProviderSetup { } validateProviderConfig() { - this.providerModule.validateConfig(); + + let currentlyInsideValidateConfigCall = false; + + // we allow for the provider's validateConfig to call our callback immediately/synchronously + // from inside validateConfig() itself. + let callback = (err) => { + + if (!err) { + log.info(`Setup complete.`); + } + else { + log.error(`Setup failed: ${err.message}`); + } + } + + currentlyInsideValidateConfigCall = true; + this.providerModule.validateConfig(callback); + currentlyInsideValidateConfigCall = false; } // builds a "schema" obejct for the prompt lib based on the provider's config spec diff --git a/lib/homebridge.js b/lib/homebridge.js index 13d0818..8c5ec54 100644 --- a/lib/homebridge.js +++ b/lib/homebridge.js @@ -1,5 +1,6 @@ import fs from 'fs'; import { User } from './user'; +import { Logger } from './logger'; // // Main HomeBridge Module with global exports. @@ -9,4 +10,5 @@ import { User } from './user'; export const HOMEBRIDGE_VERSION = JSON.parse(fs.readFileSync('package.json')).version; // HomeBridge API -export let config = User.config; \ No newline at end of file +export let config = User.config; +export let logger = Logger.forProvider; \ No newline at end of file diff --git a/lib/logger.js b/lib/logger.js new file mode 100644 index 0000000..74d0496 --- /dev/null +++ b/lib/logger.js @@ -0,0 +1,27 @@ +import log from 'npmlog'; + +// global cache of logger instances by provider name +let loggerCache = {}; + +export class Logger { + + constructor(providerName: string) { + this.providerName = providerName; + } + + info(msg: string) { + log.info(`[${this.providerName}] ${msg}`); + } + + warn(msg: string) { + log.warn(`[${this.providerName}] ${msg}`); + } + + error(msg: string) { + log.error(`[${this.providerName}] ${msg}`); + } + + static forProvider(providerName: string):Logger { + return loggerCache[providerName] || (loggerCache[providerName] = new Logger(providerName)); + } +} \ No newline at end of file