UNPKG

voisus

Version:

This module provides access to maintenance and oversight over the voisus client and server.

781 lines (739 loc) 18.4 kB
var async = require('async'); var util = require('./util'); var _ = require('underscore'); var api = {}; module.exports = api; api.host = null; api.url = null; api.init = function(host) { api.host = host; api.url = 'https://'+api.host+'/api/'; return api; }; /* Basic API */ api.reboot = function(cb) { async.waterfall([ function(cb) { util.request(api.url, 'get', cb); }, function(result, cb) { util.request(result.syspower+'reboot', 'post', {}, cb); } ], function(err, result) { if(err) { return cb(err); } cb(null, result); }); }; api.shutdown = function(cb) { async.waterfall([ function(cb) { util.request(api.url, 'get', cb); }, function(result, cb) { util.request(result.syspower+'shutdown', 'post', {}, cb); } ], function(err, result) { if(err) { return cb(err); } cb(null, result); }); }; api.getApiVersion = function(cb) { async.waterfall([ function(cb) { util.request(api.url, 'get', cb); }, function(result, cb) { cb(null, result.apiversion); } ], function(err, result) { if (err) { return cb(err); } cb(null, result); }); }; api.getVersion = function(cb) { async.waterfall([ function(cb) { util.request(api.url, 'get', cb); }, function(result, cb) { util.request(result.version, 'get', cb); }, function(result, cb) { delete result.self; cb(null, result); }, ], function(err, result) { if (err) { return cb(err); } cb(null, result); }); }; api.getAboutMe = function(cb) { async.waterfall([ function(cb) { util.request(api.url, 'get', cb); }, function(result, cb) { util.request(result.aboutme, 'get', cb); }, function(result, cb) { delete result.self; cb(null, result); } ], function(err, result) { if (err) { return cb(err); } cb(null, result); }); }; api.getPerfMon = function(cb) { async.waterfall([ function(cb) { util.request(api.url, 'get', cb); }, function(result, cb) { util.request(result.perfmon, 'get', cb); }, function(result, cb) { delete result.stats.self; cb(null, result.stats); } ], function(err, result) { if (err) { return cb(err); } cb(null, result); }); }; api.getRunlevel = function(cb) { async.waterfall([ function(cb) { util.request(api.url, 'get', cb); }, function(result, cb) { util.request(result.syspower, 'get', cb); }, function(result, cb) { cb(null, result.runlevel); } ], function(err, result) { if (err) { return cb(err); } cb(null, result); }); }; api.getDownloads = function(cb) { async.waterfall([ function(cb) { util.request(api.url, 'get', cb); }, function(result, cb) { util.request(result.downloads, 'get', cb); }, function(result, cb) { cb(null, result.items); } ], function(err, result) { if (err) { return cb(err); } cb(null, result); }); }; api.getServers = function(cb) { async.waterfall([ function(cb) { util.request(api.url, 'get', cb); }, function(result, cb) { util.request(result.servers, 'get', cb); }, function(result, cb) { cb(null, result.items); } ], function(err, result) { if (err) { return cb(err); } cb(null, result); }); }; api.getFeatures = function(cb) { async.waterfall([ function(cb) { util.request(api.url, 'get', cb); }, function(result, cb) { util.request(result.features, 'get', cb); }, function(result, cb) { _.each(result, function(item) { delete item.self; }) cb(null, result); } ], function(err, result) { if (err) { return cb(err); } cb(null, result); }); }; /* Scenario API */ var _getScenarioById = function(scnId, cb) { var data = {}; var found = false; async.waterfall([ function(cb) { util.request(api.url, 'get', cb); }, function(result, cb) { util.request(result.scenarios, 'get', cb); }, function(result, cb) { for(var i in result.items) { if(result.items[i].id === scnId) { delete result.items[i].behaviors; delete result.items[i].entity_filters; delete result.items[i].radio_bridge_presets; delete result.items[i].scenario_lockdown; delete result.items[i].waveforms; delete result.items[i].grammars; delete result.items[i].sounds; delete result.items[i].nets; delete result.items[i].dis_domains; delete result.items[i].remote_controls; delete result.items[i].radio_effects; delete result.items[i].commplan_import; delete result.items[i].subscriptions; delete result.items[i].construct; delete result.items[i].entities; delete result.items[i].performance_test; delete result.items[i].parent; delete result.items[i].interactions; delete result.items[i].vsclients; delete result.items[i].scenario_export; delete result.items[i].performance_test_reports; delete result.items[i].response_rules; delete result.items[i].model_templates; delete result.items[i].client_audio_monitors; delete result.items[i].dis_wfmaps; delete result.items[i].radio_bridges; delete result.items[i].asr_configs; delete result.items[i].es3d_observers; delete result.items[i].roles; delete result.items[i].fills; delete result.items[i].commplan_export; delete result.items[i].freqhops; delete result.items[i].vehicles; delete result.items[i].ecue_sound_overrides; delete result.items[i].satcoms; delete result.items[i].dred_test; delete result.items[i].cryptos; delete result.items[i].entity_types; delete result.items[i].call_groups; delete result.items[i].dis_hla_rpr; delete result.items[i].dis; result.items[i].url = result.items[i].self; delete result.items[i].self; data = result.items[i]; found = true; break; } } if(!found) { return cb(new Error('scenario not found: '+scnId)); } cb(null, data); } ], function(err, result) { if(err) { return cb(err); } cb(null, result); }); }; api.createScenario = function(scnName, cb) { var data = {name: scnName}; async.waterfall([ function(cb) { util.request(api.url, 'get', cb); }, function(result, cb) { util.request(result.scenarios, 'post', JSON.stringify(data), cb); } ], function(err, result) { if(err) { return cb(err); } var scn = require('./hapi.scenarios').init(api.host, result.id, result.self); cb(null, scn); }); }; api.createScenarioFromId = function(scnId, cb) { async.waterfall([ function(cb) { _getScenarioById(scnId, cb); }, ], function(err, result) { if(err) { return cb(err); } var scn = require('./hapi.scenarios').init(api.host, result.id, result.url); cb(null, scn); }); }; api.createScenarioFromTemplate = function(scnName, template, cb) { var tUrl; var data = {name: scnName}; async.waterfall([ function(cb) { util.request(api.url, 'get', cb); }, function(result, cb) { util.request(result.scenarios, 'get', cb); }, function(result, cb) { for(var i in result.templates) { if(result.templates[i].split('/')[6] === template) { tUrl = result.templates[i]; } } util.request(tUrl, 'post', JSON.stringify(data), cb); } ], function(err, result) { if(err) { return cb(err); } var scn = require('./hapi.scenarios').init(api.host, result.id, result.self); cb(null, scn); }); }; api.getTemplates = function(cb) { var data = []; async.waterfall([ function(cb) { util.request(api.url, 'get', cb); }, function(result, cb) { util.request(result.scenarios, 'get', cb); }, function(result, cb) { for(var i in result.templates) { result.templates[i] = result.templates[i].split('/')[6]; data.push(result.templates[i]); } cb(null, data); } ], function(err, result) { if(err) { return cb(err); } cb(null, result); }); }; api.getScenarios = function(cb) { var data = []; async.waterfall([ function(cb) { util.request(api.url, 'get', cb); }, function(result, cb) { util.request(result.scenarios, 'get', cb); }, function(result, cb) { for(var i in result.items) { delete result.items[i].behaviors; delete result.items[i].entity_filters; delete result.items[i].radio_bridge_presets; delete result.items[i].scenario_lockdown; delete result.items[i].waveforms; delete result.items[i].grammars; delete result.items[i].sounds; delete result.items[i].nets; delete result.items[i].dis_domains; delete result.items[i].remote_controls; delete result.items[i].radio_effects; delete result.items[i].commplan_import; delete result.items[i].subscriptions; delete result.items[i].construct; delete result.items[i].entities; delete result.items[i].performance_test; delete result.items[i].parent; delete result.items[i].interactions; delete result.items[i].vsclients; delete result.items[i].scenario_export; delete result.items[i].performance_test_reports; delete result.items[i].response_rules; delete result.items[i].model_templates; delete result.items[i].client_audio_monitors; delete result.items[i].dis_wfmaps; delete result.items[i].radio_bridges; delete result.items[i].asr_configs; delete result.items[i].es3d_observers; delete result.items[i].roles; delete result.items[i].fills; delete result.items[i].commplan_export; delete result.items[i].freqhops; delete result.items[i].vehicles; delete result.items[i].ecue_sound_overrides; delete result.items[i].satcoms; delete result.items[i].dred_test; delete result.items[i].cryptos; delete result.items[i].entity_types; delete result.items[i].call_groups; delete result.items[i].dis_hla_rpr; delete result.items[i].dis; result.items[i].url = result.items[i].self; delete result.items[i].self; data.push(result.items[i]); } cb(null, data); } ], function(err, result) { if(err) { return cb(err); } cb(null, result); }); }; api.runScenario = function(scnId, cb) { var data = {}; async.waterfall([ function(cb) { _getScenarioById(scnId, cb); }, function(result, cb) { data = {scenario: result.url}; util.request(api.url, 'get', cb); }, function(result, cb) { util.request(result.sessions, 'post', JSON.stringify(data), cb); }, function(result, cb) { delete result.subscriptions; delete result.self; delete result.scenario_href; cb(null, result); } ], function(err, result) { if(err) { return cb(err); } cb(null, result); }); }; api.runAsyncScenario = function(scnId, cb) { var data = {}; async.waterfall([ function(cb) { _getScenarioById(scnId, cb); }, function(result, cb) { data = { async: true, scenario: result.url }; util.request(api.url, 'get', cb); }, function(result, cb) { util.request(result.sessions, 'post', JSON.stringify(data), cb); }, function(result, cb) { delete result.subscriptions; delete result.self; delete result.scenario_href; cb(null, result); } ], function(err, result) { if(err) { return cb(err); } cb(null, result); }); }; api.stopScenario = function(scnId, cb) { async.waterfall([ function(cb) { _getSessionById(scnId, cb); }, function(result, cb) { util.request(result.url, 'delete', cb); }, function(result, cb) { delete result.subscriptions; delete result.self; delete result.scenario_href; cb(null, result); } ], function(err, result) { if(err) { return cb(err); } cb(null, result); }); }; api.deleteScenario = function(scnId, cb) { async.waterfall([ function(cb) { _getScenarioById(scnId, cb); }, function(result, cb) { util.request(result.url, 'delete', cb); } ], function(err, result) { if(err) { return cb(err); } cb(null, result); }); }; /* Services API */ api.createServices = function(cb) { var scn = require('./hapi.services').init(api.host); cb(null, scn); }; /* Session API */ var _getSessionById = function(scnId, cb) { var data = {}; var found = false; async.waterfall([ function(cb) { util.request(api.url, 'get', cb); }, function(result, cb) { util.request(result.sessions, 'get', cb); }, function(result, cb) { for(var i in result.items) { if(result.items[i].scenario_id === scnId) { delete result.items[i].subscriptions; delete result.items[i].scenario_href; result.items[i].url = result.items[i].self; delete result.items[i].self; data = result.items[i]; found = true; break; } } delete result.running; delete result.self; if(!found) { return cb(new Error('session not found: '+scnId)); } cb(null, data); } ], function(err, result) { if(err) { return cb(err); } cb(null, result); }); }; api.getRunningSession = function(cb) { async.waterfall([ function(cb) { util.request(api.url, 'get', cb); }, function(result, cb) { util.request(result.sessions, 'get', cb); }, function(result, cb) { util.request(result.running, 'get', cb); }, function(result, cb) { result.url = result.self; delete result.self; delete result.subscriptions; delete result.scenario_href; cb(null, result); } ], function(err, result) { if (err) { return cb(err); } cb(null, result); }); }; /* Cloud API */ api.getCloudId = function(cb) { async.waterfall([ function(cb) { util.request(api.url, 'get', cb); }, function(result, cb) { util.request(result.cloud, 'get', cb); }, function(result, cb) { delete result.self.href; delete result.clients; cb(null, result); } ], function(err, result) { if (err) { return cb(err); } cb(null, result); }); }; /* User API */ var _getUserById = function(userId, cb) { var data = {}; var found = false; async.waterfall([ function(cb) { util.request(api.url, 'get', cb); }, function(result, cb) { util.request(result.users, 'get', cb); }, function(result, cb) { for(var i in result.items) { if(result.items[i].id === userId) { result.items[i].url = result.items[i].self; delete result.items[i].self; data = result.items[i]; found = true; break; } } if (!found) { return cb(new Error('userId not found: '+userId)); } cb(null, data); } ], function(err, result) { if(err) { return cb(err); } cb(null, result); }); }; var _getUserByName = function(userName, cb) { var data = {}; var found = false; async.waterfall([ function(cb) { util.request(api.url, 'get', cb); }, function(result, cb) { util.request(result.users, 'get', cb); }, function(result, cb) { for(var i in result.items) { if(result.items[i].user === userName) { result.items[i].url = result.items[i].self; delete result.items[i].self; data = result.items[i]; found = true; break; } } if (!found) { return cb(new Error('userName not found: '+userName)); } cb(null, data); } ], function(err, result) { if(err) { return cb(err); } cb(null, result); }); }; api.getUsers = function(cb) { var data = []; async.waterfall([ function(cb) { util.request(api.url, 'get', cb); }, function(result, cb) { util.request(result.users, 'get', cb); }, function(result, cb) { for(var i in result.items) { delete result.items[i].self; data.push(result.items[i]); } cb(null, data); } ], function(err, result) { if (err) { return cb(err); } cb(null, result); }); }; api.postUser = function(user, cb) { async.waterfall([ function(cb) { util.request(api.url, 'get', cb); }, function(result, cb) { util.request(result.users, 'post', user, cb); }, function(result, cb) { if(result === 'conflict') { return cb(new Error('[postUser] Error creating user '+user.user+'. User already exists.')); } else { delete result._rev; delete result._id; cb(null, result); } } ], function(err, result) { if (err) { return cb(err); } cb(null, result); }); }; api.deleteUserById = function(userId, cb) { async.waterfall([ function(cb) { _getUserById(userId, cb); }, function(result, cb) { util.request(result.url, 'delete', cb); } ], function(err, result) { if(err) { return cb(err); } cb(null, result); }); }; api.deleteUserByName = function(userName, cb) { async.waterfall([ function(cb) { _getUserByName(userName, cb); }, function(result, cb) { util.request(result.url, 'delete', cb); } ], function(err, result) { if(err) { return cb(err); } cb(null, result); }); };