diff --git a/MMM-edgerouter-throughput.js b/MMM-edgerouter-throughput.js index aabdb12..67f79b4 100644 --- a/MMM-edgerouter-throughput.js +++ b/MMM-edgerouter-throughput.js @@ -101,6 +101,7 @@ defaults: { title: undefined, showInterfaceName: true, + port: 22 }, _throughputData: {}, _lastThroughputData: {}, diff --git a/README.md b/README.md index 3e6239b..2a3c5c4 100644 --- a/README.md +++ b/README.md @@ -14,14 +14,15 @@ The Module uses SSH to connect to the router and reads the network throughput fr ## Configuration -| Property | Type | Required | Default | Description | -|---------------------|-----------|:--------:|---------------|---------------------------------------------------| -| `gateway` | `string` | ✔︎ | | The IP Address of your EdgeRouter | -| `username` | `string` | ✔︎ | | The username of your EdgeRouter with SSH access. | -| `password` | `string` | ✔︎ | | The password of your EdgeRouter with SSH access. | -| `interface` | `string` | ✔︎ | | The interface to display on the mirror. | -| `title` | `string` | | `undefined` | An optional title to display on the mirror. | -| `showInterfaceName` | `boolean` | | `false` | Whether to show the name of the interface or not. | +| Property | Type | Required | Default | Description | +| ------------------- | --------- | :------: | ----------- | ---------------------------------------------------- | +| `gateway` | `string` | ✔︎ | | The IP Address of your EdgeRouter | +| `port` | `number` | | | The SSH port your EdgeRouter listens on (22 default) | +| `username` | `string` | ✔︎ | | The username of your EdgeRouter with SSH access. | +| `password` | `string` | ✔︎ | | The password of your EdgeRouter with SSH access. | +| `interface` | `string` | ✔︎ | | The interface to display on the mirror. | +| `title` | `string` | | `undefined` | An optional title to display on the mirror. | +| `showInterfaceName` | `boolean` | | `false` | Whether to show the name of the interface or not. | ## Compatibility diff --git a/node_helper.js b/node_helper.js index c8245af..0bc3007 100644 --- a/node_helper.js +++ b/node_helper.js @@ -13,71 +13,71 @@ typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('ssh2-promise')) : typeof define === 'function' && define.amd ? define(['ssh2-promise'], factory) : (global = global || self, factory(global.SSH)); -}(this, function (SSH) { 'use strict'; +}(this, (function (SSH) { 'use strict'; - SSH = SSH && SSH.hasOwnProperty('default') ? SSH['default'] : SSH; + SSH = SSH && Object.prototype.hasOwnProperty.call(SSH, 'default') ? SSH['default'] : SSH; - /*! ***************************************************************************** - Copyright (c) Microsoft Corporation. All rights reserved. - Licensed under the Apache License, Version 2.0 (the "License"); you may not use - this file except in compliance with the License. You may obtain a copy of the - License at http://www.apache.org/licenses/LICENSE-2.0 - - THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED - WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, - MERCHANTABLITY OR NON-INFRINGEMENT. - - See the Apache Version 2.0 License for specific language governing permissions - and limitations under the License. - ***************************************************************************** */ - - var __assign = function() { - __assign = Object.assign || function __assign(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); - }; - - function __awaiter(thisArg, _arguments, P, generator) { - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); - } - - function __generator(thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } + /*! ***************************************************************************** + Copyright (c) Microsoft Corporation. All rights reserved. + Licensed under the Apache License, Version 2.0 (the "License"); you may not use + this file except in compliance with the License. You may obtain a copy of the + License at http://www.apache.org/licenses/LICENSE-2.0 + + THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED + WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, + MERCHANTABLITY OR NON-INFRINGEMENT. + + See the Apache Version 2.0 License for specific language governing permissions + and limitations under the License. + ***************************************************************************** */ + + var __assign = function() { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); + }; + + function __awaiter(thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); + } + + function __generator(thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } } var ModuleNotification; @@ -184,11 +184,11 @@ */ _setupSSHClient: function (config) { return __awaiter(this, void 0, void 0, function () { - var gateway, username, password, _a, _b, error_1; + var gateway, port, username, password, _a, _b, error_1; return __generator(this, function (_c) { switch (_c.label) { case 0: - gateway = config.gateway, username = config.username, password = config.password; + gateway = config.gateway, port = config.port, username = config.username, password = config.password; if (!!this.sshClients[gateway]) return [3 /*break*/, 4]; _c.label = 1; case 1: @@ -197,6 +197,7 @@ _b = gateway; return [4 /*yield*/, new SSH({ host: gateway, + port: port, username: username, password: password, })]; @@ -216,4 +217,4 @@ }, }); -})); +}))); diff --git a/src/MMM-edgerouter-throughput.ts b/src/MMM-edgerouter-throughput.ts index c77d4d8..5a0b704 100644 --- a/src/MMM-edgerouter-throughput.ts +++ b/src/MMM-edgerouter-throughput.ts @@ -19,6 +19,7 @@ Module.register('MMM-edgerouter-throughput', { defaults: { title: undefined, showInterfaceName: true, + port: 22 }, _throughputData: {}, diff --git a/src/node_helper.ts b/src/node_helper.ts index 053c153..38732b7 100644 --- a/src/node_helper.ts +++ b/src/node_helper.ts @@ -102,12 +102,13 @@ module.exports = NodeHelper.create({ * @private */ async _setupSSHClient(config: DataConfig) { - const { gateway, username, password } = config; + const { gateway, port, username, password } = config; if (!this.sshClients[gateway]) { try { this.sshClients[gateway] = await new SSH({ host: gateway, + port, username, password, }); diff --git a/src/types/Config.ts b/src/types/Config.ts index fad1eb9..481fbc6 100644 --- a/src/types/Config.ts +++ b/src/types/Config.ts @@ -1,5 +1,6 @@ export interface DataConfig { gateway: string, + port: number, username: string, password: string, }