Make sysinfo based on provider

This commit is contained in:
Johannes Zellner
2016-01-05 12:10:25 +01:00
parent 9483c3afbc
commit 0319445888
3 changed files with 88 additions and 14 deletions

View File

@@ -1,28 +1,62 @@
/* jslint node:true */
'use strict';
var assert = require('assert'),
caas = require('./sysinfo/caas.js'),
config = require('./config.js'),
ec2 = require('./sysinfo/ec2.js'),
util = require('util');
exports = module.exports = {
SysInfoError: SysInfoError,
getIp: getIp
};
var os = require('os');
var gCachedIp = null;
function getIp() {
if (gCachedIp) return gCachedIp;
function SysInfoError(reason, errorOrMessage) {
assert.strictEqual(typeof reason, 'string');
assert(errorOrMessage instanceof Error || typeof errorOrMessage === 'string' || typeof errorOrMessage === 'undefined');
var ifaces = os.networkInterfaces();
for (var dev in ifaces) {
if (dev.match(/^(en|eth|wlp).*/) === null) continue;
Error.call(this);
Error.captureStackTrace(this, this.constructor);
for (var i = 0; i < ifaces[dev].length; i++) {
if (ifaces[dev][i].family === 'IPv4') {
gCachedIp = ifaces[dev][i].address;
return gCachedIp;
}
}
this.name = this.constructor.name;
this.reason = reason;
if (typeof errorOrMessage === 'undefined') {
this.message = reason;
} else if (typeof errorOrMessage === 'string') {
this.message = errorOrMessage;
} else {
this.message = 'Internal error';
this.nestedError = errorOrMessage;
}
}
util.inherits(SysInfoError, Error);
SysInfoError.INTERNAL_ERROR = 'Internal Error';
return null;
function getApi(callback) {
assert.strictEqual(typeof callback, 'function');
var api = config.provider() === 'caas' ? caas : ec2;
var options = {};
callback(null, api, options);
}
function getIp(callback) {
assert.strictEqual(typeof callback, 'function');
if (gCachedIp) return callback(null, gCachedIp);
getApi(function (error, ip) {
if (error) return callback(error);
gCachedIp = ip;
callback(null, gCachedIp);
});
}

26
src/sysinfo/caas.js Normal file
View File

@@ -0,0 +1,26 @@
'use strict';
exports = module.exports = {
getIp: getIp
};
var assert = require('assert'),
os = require('os'),
SysInfoError = require('../sysinfo.js').SysInfoError;
function getIp(callback) {
assert.strictEqual(typeof callback, 'function');
var ifaces = os.networkInterfaces();
for (var dev in ifaces) {
if (dev.match(/^(en|eth|wlp).*/) === null) continue;
for (var i = 0; i < ifaces[dev].length; i++) {
if (ifaces[dev][i].family === 'IPv4') {
return callback(null, ifaces[dev][i].address);
}
}
}
callback(new SysInfoError(SysInfoError.INTERNAL_ERROR, 'No IP found'));
}

14
src/sysinfo/ec2.js Normal file
View File

@@ -0,0 +1,14 @@
'use strict';
exports = module.exports = {
getIp: getIp
};
var assert = require('assert'),
SysInfoError = require('../sysinfo.js').SysInfoError;
function getIp(callback) {
assert.strictEqual(typeof callback, 'function');
callback(new SysInfoError(SysInfoError.INTERNAL_ERROR, 'Not implemented'));
}