rainbow-cli
Version:
Rainbow CLI application based on the Rainbow SDK for Node.js
1,661 lines (1,417 loc) • 73.5 kB
JavaScript
"use strict";
const inquirer = require("inquirer");
const CLI = require("clui");
const Spinner = CLI.Spinner;
const csv = require("csv");
const fs = require("fs");
const Logger = require("./Logger");
const moment = require("moment");
const Screen = require("./Print");
const Tools = require("./Tools");
class Message {
constructor() { }
_shouldDisplayOutput(options) {
if (options && "noOutput" in options) {
return !options.noOutput;
}
return true;
}
getTruncatedData(data, length) {
if (!data) {
return "";
}
if (data.length < length) {
return data;
}
return data.substr(0, length) + "...";
}
log(message, value) {
Logger.logs(message, value);
}
logError(message, value) {
Logger.error(message, value);
}
welcome(options) {
if (!this._shouldDisplayOutput(options)) {
return;
}
Screen.print("");
Screen.print("Welcome to Alcatel-Lucent Enterprise ".white + "Rainbow CLI".rainbow);
this.log("CLI/MESSAGE - (welcome) command options", options);
}
version(v, options) {
if (!this._shouldDisplayOutput(options)) {
return;
}
Screen.print("Version installed " + v.yellow);
}
action(command, param, options) {
if (!this._shouldDisplayOutput(options)) {
return;
}
Screen.action(command, param);
}
out(json) {
console.log(JSON.stringify(json));
}
outCSV(csv) {
console.log(csv);
}
csv(file, json, isAlreadyCSV, col) {
return new Promise((resolve, reject) => {
if (isAlreadyCSV) {
fs.writeFile(file, json, "utf8", err => {
if (err) {
reject(err);
} else {
Screen.success("Successfully saved to".white + " '".white + file.yellow + "'".white);
resolve();
}
});
} else {
let columns = col;
let hasData = json.length > 0;
if (!columns && hasData) {
columns = [];
json.map(item => {
for (var key in item) {
if (!columns.includes(key)) {
columns.push(key);
}
}
});
columns = columns.sort();
}
let stringify = csv.stringify;
let writeStream = fs.createWriteStream(file, { flags: "w" });
stringify(json, {
cast: {
date: function (value) {
return moment(value).format("YYYY-MM-DD");
}
},
delimiter: ";",
header: hasData,
columns: columns || []
}).pipe(writeStream);
writeStream.on("close", function () {
Screen.success(
"Successfully saved".white +
" " +
json.length.toString().magenta +
" information to".white +
" '".white +
file.yellow +
"'".white
);
resolve();
});
writeStream.on("error", function (err) {
reject(err);
});
}
});
}
lineFeed() {
Screen.print("");
}
spin(options) {
if (!this._shouldDisplayOutput(options)) {
return;
}
let status = new Spinner("In progress, please wait...");
status.start();
return status;
}
unspin(spin) {
if (spin) {
spin.stop();
}
}
tablePage(json, options) {
if (!this._shouldDisplayOutput(options)) {
return;
}
let page = Math.floor(json.offset / json.limit) + 1;
let totalPage = Math.floor(json.total / json.limit) + 1;
Screen.print("Displaying Page ".white + page.toString().yellow + " on ".white + totalPage.toString().yellow);
}
tableCompanies(json, options) {
var array = [];
array.push([
"#".gray,
"Company name".gray,
"Type".gray,
"Visibility".gray,
"Active".gray,
"Organization".gray,
"Identifier".gray
]);
array.push([
"-".gray,
"------------".gray,
"----".gray,
"----------".gray,
"------".gray,
"-----------".gray,
"----------".gray
]);
for (var i = 0; i < json.companies.data.length; i++) {
var company = json.companies.data[i];
var visibility = "private".white;
if (company.visibility === "public") {
visibility = "public".yellow;
}
var offerType = "freemium".white;
if (company.offerType === "premium") {
offerType = "premium".yellow;
}
var active = "true".white;
if (company.status !== "active") {
active = "false".red;
}
var organisation = "".white;
if (company.organisationId) {
organisation = company.organisationId.yellow;
}
var number = i + 1;
if (Number(options.page) > 0) {
number = (Number(options.page) - 1) * json.companies.limit + (i + 1);
}
array.push([
number.toString().white,
company.name.cyan,
offerType,
visibility,
active,
organisation,
company.id.white
]);
}
Screen.table(array);
Screen.print("");
Screen.success(json.companies.total + " companies found.");
Screen.print("");
}
tableOrganizations(json, options) {
var array = [];
array.push(["#".gray, "Organization name".gray, "Visibility".gray, "Identifier".gray]);
array.push(["-".gray, "-----------------".gray, "----------".gray, "----------".gray]);
for (var i = 0; i < json.data.length; i++) {
var org = json.data[i];
var visibility = "private".white;
if (org.visibility === "public") {
visibility = "public".yellow;
}
var number = i + 1;
if (options.page > 0) {
number = (options.page - 1) * json.limit + (i + 1);
}
array.push([number.toString().white, org.name.cyan, visibility, org.id.white]);
}
Screen.table(array);
Screen.print("");
Screen.success(json.total + " organizations found.");
Screen.print("");
}
tablePhones(json, options) {
var array = [];
array.push([
"#".gray,
"Short number".gray,
"From System".gray,
"Voice Mail number".gray,
"Number".gray,
"Monitored".gray,
"ID".gray
]);
array.push([
"-".gray,
"------------".gray,
"-----------".gray,
"-----------------".gray,
"------".gray,
"---------".gray,
"--".gray
]);
for (var i = 0; i < json.data.length; i++) {
var phone = json.data[i];
var number = i + 1;
if (options.page > 0) {
number = (options.page - 1) * json.limit + (i + 1);
}
var fromSystem = "No".white;
if (phone.isFromSystem) {
fromSystem = "Yes".yellow;
}
var isMonitored = "No".white;
if (phone.isMonitored) {
isMonitored = "True".yellow;
}
var longNumber = phone.numberE164 || phone.number || "";
var vm = phone.voiceMailNumber || "";
var sn = phone.shortNumber || "";
array.push([
number.toString().white,
sn.cyan,
fromSystem,
vm.white,
longNumber.white,
isMonitored,
phone.id.white
]);
}
Screen.table(array);
Screen.print("");
Screen.success(json.total + " systems found.");
Screen.print("");
}
tableSystems(json, options) {
var array = [];
array.push([
"#".gray,
"System name".gray,
"Version".gray,
"Status".gray,
"Type".gray,
"ID".gray,
"PBX ID".gray
]);
array.push([
"-".gray,
"-----------".gray,
"-------".gray,
"------".gray,
"----".gray,
"--".gray,
"------".gray
]);
for (var i = 0; i < json.data.length; i++) {
var system = json.data[i];
var number = i + 1;
if (options.page > 0) {
number = (options.page - 1) * json.limit + (i + 1);
}
var type = system.type || "";
var version = system.version || "";
var name = system.name || "";
var stats = system.status || "";
if (stats !== "created") {
stats = stats.yellow;
} else {
stats = stats.white;
}
var pbxId = system.pbxId.yellow || "";
array.push([number.toString().white, name.cyan, version.white, stats, type.white, system.id.white, pbxId]);
}
Screen.table(array);
Screen.print("");
Screen.success(json.total + " systems found.");
Screen.print("");
}
tableAPI(json, options) {
var array = [];
array.push(["#".gray, "API".gray, "State".gray, "Version".gray]);
array.push(["-".gray, "---".gray, "-----".gray, "_______".gray]);
for (var i = 0; i < json.length; i++) {
let strVersion = "".white;
let strState = "Not started".red;
if (json[i].version !== "Not started") {
strState = "Running".green;
strVersion = json[i].version.yellow;
}
array.push([(i + 1).toString().white, json[i].name.white, strState, strVersion]);
}
Screen.table(array);
Screen.print("");
Screen.success("status successfully executed.");
Screen.print("");
}
tablePlatform(json, options) {
var array = [];
array.push(["#".gray, "Rainbow".gray, "Status".gray, "RTT".gray, "EventLoop".gray]);
array.push(["-".gray, "-------".gray, "------".gray, "---".gray, "---------".gray]);
for (var i = 0; i < json.length; i++) {
let eventLoop = json[i].eventloop;
if (eventLoop === 0) {
eventLoop = 5;
}
let rtt = json[i].rtt;
let rttStr = rtt.toString() + " ms";
let eventLoopStr = eventLoop.toString() + " ms";
array.push([
(i + 1).toString().white,
json[i].name.white,
json[i].status.cyan,
rtt > 300 ? rttStr.red : rttStr.white,
eventLoop > 300 ? eventLoopStr.red : eventLoopStr.white
]);
}
Screen.table(array);
Screen.print("");
Screen.success("status successfully executed.");
Screen.print("");
}
tableInvoiceCSV(json, options) {
var invoice = json;
Screen.print("");
Screen.print(json);
Screen.success("Invoice " + options.path + "retrieved");
Screen.print("");
}
tableInvoices(json, options) {
var array = [];
array.push([
"#".gray,
"Company".gray,
"Company ID".gray,
"Type".gray,
"Period".gray,
"Initiated".gray,
"Path".gray
]);
array.push([
"-".gray,
"-------".gray,
"----------".gray,
"----".gray,
"------".gray,
"---------".gray,
"----".gray
]);
var invoices = json;
for (var i = 0; i < invoices.length; i++) {
var companyId = invoices[i].companyId || "";
var companyName = invoices[i].companyName || "";
var period = invoices[i].billingPeriod || "";
var type = invoices[i].invoiceType || "";
var initiated = invoices[i].invoiceCreationDate || "";
var path = invoices[i].filepath || "";
var number = i + 1;
array.push([
number.toString().white,
companyName.cyan,
companyId.white,
type.magenta,
period.white,
initiated.white,
path.white
]);
}
Screen.table(array);
Screen.print("");
if (options.companyId) {
Screen.success(invoices.length + " invoices found for company " + options.companyId);
} else {
Screen.success(invoices.length + " invoices found");
}
Screen.print("");
}
tableExpiredCertificates(expiredCertificates) {
var array = [];
array.push([
"App Name".gray,
"Certificate Type".gray,
"Certificate Expiration Date".gray
]);
array.push([
"-------".gray,
"----------------".gray,
"---------------------------".gray
]);
expiredCertificates.forEach(expiredCertificate => {
array.push([
expiredCertificate.appName.white,
expiredCertificate.certType.magenta,
expiredCertificate.certExpDate
]);
});
Screen.table(array);
Screen.print("");
Screen.success(expiredCertificates.length + " expired certificates found");
Screen.print("");
}
tableApplications(json, options, columns) {
var array = [];
var firstLine = [];
columns.forEach(item => {
firstLine.push(item.gray);
});
array.push(firstLine);
array.push([
"-".gray,
"----".gray,
"----".gray,
"-----------".gray,
"-----".gray,
"-------".gray,
"-------".gray,
"----------".gray,
"--------".gray,
"-----".gray,
"--".gray
]);
var apps = json.data;
let number = 0;
apps.forEach(app => {
let name = app.name || "";
let type = app.type || "";
let offer = app.kpi;
if (offer) {
offer = offer === "payasyougo" ? offer.green : offer.red;
}
if (!offer) {
offer = "-".white;
}
let env = app.env;
if (env === "sandbox") {
env = env.white;
} else {
env = env.yellow;
}
let state = app.state;
if (state === "blocked" || state == "stopped") {
state = state.red;
} else {
state = state.white;
}
let date = moment(app.dateOfCreation).format("ll");
let dateOfDeploymentRequest = "-".white;
if (app.dateOfDeploymentRequest) {
dateOfDeploymentRequest = moment(app.dateOfDeploymentRequest).format("ll").yellow;
}
let dateOfDeployment = "-".white;
if (app.dateOfDeployment) {
dateOfDeployment = moment(app.dateOfDeployment).format("ll").magenta;
}
let ownerId = app.ownerId || "";
let id = app.id || "";
array.push([
(number + 1).toString().white,
name.white,
type.cyan,
env,
state,
ownerId.white,
date.white,
dateOfDeploymentRequest,
dateOfDeployment,
offer,
id.white
]);
number++;
});
Screen.table(array);
Screen.print("");
Screen.success(json.total + " applications found");
Screen.print("");
}
tableMetrics(json, options, categories) {
let array = [];
array.push(["#".gray, "Period".gray, "Group".gray, "Value".gray]);
array.push(["-".gray, "------".gray, "-----".gray, "-----".gray]);
let metrics = json.data;
let period = json.aggregationPeriod || "hour";
let start = moment(json.start).format("ll") || "";
let end = moment(json.end).format("ll") || "";
let number = 0;
let grandTotalData = [];
let seconds = ["audio", "video", "webrtc_minutes"];
for (var category in categories) {
grandTotalData.push({
group: category,
count: 0
});
}
metrics.forEach(metric => {
let groups = metric.groupCounters;
let startDate = metric.aggregationStartDate;
let firstLine = true;
if (groups) {
// Put webrtc trafic in minutes (received in s)
groups.forEach(group => {
if (seconds.includes(group.group)) {
group.count = Math.round(group.count / 60);
}
});
switch (period) {
case "hour":
startDate = moment(startDate).format("lll");
break;
case "day":
startDate = moment(startDate).format("ll");
break;
case "month":
startDate = moment(startDate).format("MMM YYYY");
break;
default:
startDate = moment(startDate).format("lll");
break;
}
var aggregatedData = [];
if (options.group) {
for (var category in categories) {
aggregatedData.push({
group: category,
count: 0
});
}
groups.forEach(group => {
for (var category in categories) {
if (categories[category].includes(group.group)) {
aggregatedData.forEach((aggregated, index) => {
if (aggregated.group === category) {
aggregatedData[index].count += group.count;
grandTotalData[index].count += group.count;
}
});
}
}
});
} else {
aggregatedData = groups;
}
aggregatedData.forEach(group => {
if (firstLine) {
array.push([
(number + 1).toString().white,
startDate.white,
group.group.white,
group.count.toString().cyan
]);
firstLine = false;
} else {
array.push(["", "", group.group.white, group.count.toString().cyan]);
}
});
number++;
}
});
if (options.group) {
let firstLineTotal = true;
if (number > 0) {
array.push(["".gray, "".gray, "-----".gray, "-----".gray]);
}
grandTotalData.forEach(group => {
if (firstLineTotal) {
array.push([
"",
start.cyan + " to ".cyan + end.cyan,
"GRAND TOTAL " + group.group.toUpperCase(),
group.count.toString().bgMagenta
]);
firstLineTotal = false;
} else {
array.push(["", "", "GRAND TOTAL " + group.group.toUpperCase(), group.count.toString().bgMagenta]);
}
});
}
Screen.print("");
Screen.table(array);
Screen.print("");
Screen.print("Interval used".gray + " " + period.yellow + " per ".gray + period.yellow);
Screen.print("");
Screen.success(number + " metrics found");
Screen.print("");
}
tableApplicationAnalytics(json, options) {
var array = [];
array.push([
"#".gray,
"Month".gray,
"Total unique Users".gray,
"Companies".gray,
"Company unique users".gray
]);
array.push([
"-".gray,
"-------".gray,
"------------------".gray,
"---------".gray,
"--------------------".gray
]);
var analytics = json.data;
for (var i = 0; i < analytics.length; i++) {
var month = analytics[i].month || "";
var uniqueUsers = analytics[i].uniqueUsers || "";
var companies = analytics[i].companies || [];
var number = i + 1;
array.push([
number.toString().white,
month.cyan,
uniqueUsers.toString().white,
'',
''
]);
for (let companyId in companies) {
var uniqueUsers = companies[companyId].uniqueUsers;
array.push(['',
'',
'',
companyId,
uniqueUsers.toString()
]);
}
}
Screen.table(array);
Screen.print("");
if (options.companyId) {
Screen.success(analytics.length + " analytics found for company " + options.companyId);
} else {
Screen.success(analytics.length + " analytics found");
}
Screen.print("");
}
tableDashboardDevelopers(json, options) {
var array = [];
array.push([
"#".gray,
"Name".gray,
"Company".gray,
"Country".gray,
"BP".gray,
"Developer since".gray,
"Sandbox since".gray,
"Payment method".gray,
"ID".gray
]);
array.push([
"-".gray,
"----".gray,
"-------".gray,
"-------".gray,
"--".gray,
"---------------".gray,
"-------------".gray,
"--------------".gray,
"--".gray
]);
var users = json.data;
var number = 0;
users.forEach(user => {
var name = "";
name = user.displayName;
if (!name) {
name = user.firstName + " " + user.lastName;
}
number += 1;
var companyName = user.companyName || "";
if (companyName.length > 40) {
companyName = companyName.substr(0, 35) + "...";
}
let country = "".white;
let isBP = "-".white;
if (user.company) {
country = user.company.country.white;
isBP = user.company.isBP
? "YES".magenta
: user.company.bpId && user.company.bpId.length > 0
? "AFFILIATE".magenta
: "NO".white;
}
let developerSince = "in error".red;
let payAsYouGoSince = "-".white;
let sandboxSince = "-".white;
let hasASandboxAccount = user => {
return user.developer && user.developer.sandbox;
};
let hasADeveloperSandboxAccountSucceed = user => {
return user.developer && user.developer.sandbox && user.developer.sandbox.status === "succeeded";
};
let hasAPaymentMethod = user => {
return Boolean(user.developer.bsAccountId);
};
developerSince = moment(user.developer.account.lastUpdateDate).format("LL").white;
if (hasASandboxAccount(user)) {
if (hasADeveloperSandboxAccountSucceed(user)) {
sandboxSince = moment(user.developer.sandbox.lastUpdateDate).format("LL").white;
} else {
sandboxSince = "in error".red;
}
}
if (hasAPaymentMethod(user)) {
payAsYouGoSince = moment(user.developer.accountCreationDate).format("LL").yellow;
}
array.push([
number.toString().white,
name.cyan,
companyName.white,
country,
isBP,
developerSince,
sandboxSince,
payAsYouGoSince,
user.id.white
]);
});
Screen.table(array);
Screen.print("");
Screen.success(users.length + " developers found / " + json.total);
Screen.print("");
}
tableDashboardInDeployment(json, options) {
var array = [];
array.push([
"#".gray,
"Name".gray,
"Id".gray,
"Environment".gray,
"Creation date".gray,
"Request date".gray,
"Owner name".gray,
"Owner country".gray,
"Owner id".gray,
"Company name".gray,
"Company country".gray,
"Is BP/Affiliate".gray
]);
array.push([
"-".gray,
"----".gray,
"--".gray,
"-----------".gray,
"-------------".gray,
"------------".gray,
"----------".gray,
"-------------".gray,
"---------".gray,
"------------".gray,
"----------------".gray,
"---------------".gray
]);
var apps = json.data;
let increment = 0;
for (var i = 0; i < apps.length; i++) {
let app = apps[i];
let user = app.user;
let company = app.user.company;
let number = increment + 1;
/* Application */
let appName = app.name || "";
let appId = app.id || "";
let appEnv = app.env || "";
let dateOfCreation = moment(app.dateOfCreation).format("ll");
let dateOfDeployment = moment(app.dateOfDeploymentRequest).format("ll");
/* User */
let userName = "";
let userCountry = user.country || "";
let userId = user.id || "";
userName = user.displayName;
if (!userName) {
userName = user.firstName + " " + user.lastName;
}
/* Company */
let isBP = "-".white;
let companyName = user.companyName || "";
let companyCountry = company.country || "";
if (companyName.length > 40) {
companyName = companyName.substr(0, 35) + "...";
}
if (company.isBP) {
isBP = "YES".yellow;
} else if (company.bpId && company.bpId.length > 0) {
isBP = "AFFILIATE".yellow;
} else {
isBP = "NO".white;
}
array.push([
number.toString().white,
appName.cyan,
appId.white,
appEnv.white,
dateOfCreation.white,
dateOfDeployment.yellow,
userName.green,
userCountry.white,
userId.white,
companyName.magenta,
companyCountry.white,
isBP
]);
increment += 1;
}
Screen.table(array);
Screen.print("");
Screen.success(increment + " applications found / " + apps.length);
Screen.print("");
}
tableDashboardMetrics(json, options) {
let array = [];
if (options.kpi === "business") {
array.push([
"#".gray,
"Name".gray,
"Owner".gray,
"External".gray,
"Deployed".gray,
"Reason".gray,
"ID".gray,
"API Resources".gray,
"API Admin".gray,
"WebRTC Minutes".gray,
"TURN bytes".gray,
"File Storage".gray,
"Estimated cost".gray
]);
array.push([
"-".gray,
"----".gray,
"-----".gray,
"--------".gray,
"--------".gray,
"------".gray,
"--".gray,
"-------------".gray,
"---------".gray,
"--------------".gray,
"----------".gray,
"------------".gray,
"--------------".gray
]);
} else {
array.push([
"#".gray,
"Name".gray,
"Owner".gray,
"External".gray,
"Deployed".gray,
"ID".gray,
"API Resources".gray,
"API Admin".gray,
"WebRTC Minutes".gray,
"TURN bytes".gray,
"File Storage".gray,
"Estimated cost".gray
]);
array.push([
"-".gray,
"----".gray,
"-----".gray,
"--------".gray,
"--------".gray,
"--".gray,
"-------------".gray,
"---------".gray,
"--------------".gray,
"----------".gray,
"------------".gray,
"--------------".gray
]);
}
let number = 0;
let totalInvoice = 0;
json.forEach(app => {
let appid = app.id;
let name = this.getTruncatedData(app.name, 20);
let reason = this.getTruncatedData(app.deployReason, 30);
let data = app.metrics;
let user = app.user;
let username = this.getTruncatedData(user.firstName + " " + user.lastName, 25);
let res = 0;
let admin = 0;
let webrtc = 0;
let turn = 0;
let file = 0;
let cost = 0;
if (data) {
data.forEach(metric => {
switch (metric.group) {
case "administration":
admin = metric.count;
if (admin > 2000) {
cost += (admin - 2000) * 0.005;
}
break;
case "resources":
res = metric.count;
if (res > 5000) {
cost += (res - 5000) * 0.001;
}
break;
case "webrtc_minutes":
webrtc = metric.count;
if (webrtc > 500) {
cost += (webrtc - 500) * 0.005;
}
break;
case "turn":
turn = metric.count;
break;
case "storage":
file = metric.count;
if (file > 5) {
cost += (file - 5) * 0.1;
}
break;
}
});
}
let internalPatterns = ["al-enterprise.com", "al-mydemo.com", "cpaas.applicationid@provisoire.com"];
let dateOfDeployment = "-";
if (app.dateOfDeployment) {
dateOfDeployment = moment(app.dateOfDeployment).format("ll");
}
let isInternal = internalPatterns.some(pattern => {
return user.loginEmail.includes(pattern);
});
var consumption = res + admin + webrtc + turn + file;
if (((options.intOrExt === "internal" && isInternal) ||
(options.intOrExt === "external" && !isInternal) ||
(options.intOrExt === "both")) &&
((options.active && consumption > 0) || !options.active)) {
var toPush = true;
if (options.kpi === "business") {
if (options.reason) {
var reasonList = options.reason.split(',');
toPush = reasonList.some(function(reason, index) {
if (app.deployReason && app.deployReason.includes(reason))
return true;
else
return false;
});
}
if (toPush) {
array.push([
(number + 1).toString().white,
name.white,
username.white,
isInternal ? "NO".white : "YES".yellow,
dateOfDeployment.white,
reason.white,
appid.white,
res > 0 ? res.toString().cyan : res.toString().white,
admin > 0 ? admin.toString().cyan : admin.toString().white,
webrtc > 0 ? webrtc.toString().cyan : webrtc.toString().white,
turn > 0 ? turn.toString().cyan : turn.toString().white,
file > 0 ? file.toString().cyan : file.toString().white,
cost > 0 ? cost.toFixed(3).toString().yellow : cost.toFixed(3).toString().white
]);
}
} else {
if (toPush) {
array.push([
(number + 1).toString().white,
name.white,
username.white,
isInternal ? "NO".white : "YES".yellow,
dateOfDeployment.white,
appid.white,
res > 0 ? res.toString().cyan : res.toString().white,
admin > 0 ? admin.toString().cyan : admin.toString().white,
webrtc > 0 ? webrtc.toString().cyan : webrtc.toString().white,
turn > 0 ? turn.toString().cyan : turn.toString().white,
file > 0 ? file.toString().cyan : file.toString().white,
cost > 0 ? cost.toFixed(3).toString().yellow : cost.toFixed(3).toString().white
]);
}
}
if (toPush) {
number += 1;
totalInvoice += cost;
}
}
});
Screen.print("");
let configBusiness = {
1: {
alignment: "left",
width: 30,
truncate: 25
},
2: {
alignment: "left",
width: 30,
truncate: 25
},
5: {
alignment: "left",
width: 30,
truncate: 25
}
};
Screen.table(array);
Screen.print("");
if (totalInvoice >0) Screen.print("Total invoice: " + totalInvoice.toFixed(2));
Screen.print("");
Screen.success(number + " metrics found");
Screen.print("");
}
tableThresholdsGroup(json, options) {
var array = [];
array.push([
"#".gray,
"Unit".gray,
"Threshold".gray,
"Notification".gray,
"Type".gray
]);
array.push([
"-".gray,
"----".gray,
"---------".gray,
"------------".gray,
"----".gray
]);
let number = 0;
var thresholdsForGroup = json.thresholds;
thresholdsForGroup.forEach(threshold => {
array.push([
(number + 1).toString().white,
json.unit,
threshold.threshold,
threshold.notification,
threshold.type
]);
number++;
});
Screen.table(array);
Screen.print("");
Screen.success(thresholdsForGroup.length + " thresholds found for API group " + json.groupName);
Screen.print("");
}
tableThresholds(json, options) {
var array = [];
array.push([
"#".gray,
"Group Name".gray,
"Unit".gray,
"Threshold".gray,
"Notification".gray,
"Type".gray
]);
array.push([
"-".gray,
"----------".gray,
"----".gray,
"---------".gray,
"------------".gray,
"----".gray
]);
var thresholdsList = json.data;
let number = 0;
thresholdsList.forEach(thresholdsGroup => {
var thresholdsForGroup = thresholdsGroup.thresholds;
thresholdsForGroup.forEach(threshold => {
array.push([
(number + 1).toString().white,
thresholdsGroup.groupName,
thresholdsGroup.unit,
threshold.threshold,
threshold.notification,
threshold.type
]);
number++;
});
});
Screen.table(array);
Screen.print("");
Screen.success(thresholdsList.length + " thresholds found");
Screen.print("");
}
tableApns(json, options) {
var array = [];
array.push([
"#".gray,
"OS".gray,
"Type".gray,
"Created on".gray,
"Last Update".gray,
"Enabled".gray,
"Id".gray
]);
array.push([
"-".gray,
"--".gray,
"----".gray,
"----------".gray,
"-----------".gray,
"-------".gray,
"--".gray
]);
var apnsList = json.data;
let number = 0;
apnsList.forEach(apns => {
let os = (apns.type === "apns") || (apns.type === "apns_v2") ? "IOS".cyan : "Android".magenta;
let type = apns.type === "apns" ? apns.certificateType : apns.type;
let id = apns.id || "";
let lastUpdate = apns.lastUpdateDate ? apns.lastUpdateDate : apns.dateOfCreation;
let lastUpdateStr = moment(lastUpdate).format("lll");
let dateOfCreation = apns.dateOfCreation;
let dateOfCreationStr = moment(dateOfCreation).format("lll");
let isEnabled = apns.isEnabled ? "YES".green : "NO".red;
array.push([
(number + 1).toString().white,
os,
type.white,
dateOfCreationStr.white,
lastUpdateStr.white,
isEnabled,
id.yellow
]);
number++;
});
Screen.table(array);
Screen.print("");
Screen.success(apnsList.length + " push notification settings found");
Screen.print("");
}
tableUsers(json, options) {
var array = [];
array.push([
"#".gray,
"Name".gray,
"LoginEmail".gray,
"Company".gray,
"Account".gray,
"Roles".gray,
"Active".gray,
"ID".gray
]);
array.push([
"-".gray,
"----".gray,
"----------".gray,
"-------".gray,
"-------".gray,
"-----".gray,
"------".gray,
"--".gray
]);
var users = json.data;
var companyId = "";
for (var i = 0; i < users.length; i++) {
if (options.company || options.companyId) {
companyId = users[i].companyId;
}
var accountType = users[i].accountType;
if (accountType === "free") {
accountType = accountType.white;
} else {
accountType = accountType.yellow;
}
var roles = users[i].roles.join();
var active = "true".white;
if (!users[i].isActive) {
active = "false".yellow;
}
var name = "";
name = users[i].displayName;
if (!name) {
name = users[i].firstName + " " + users[i].lastName;
}
var number = i + 1;
if (options.page > 0) {
number = (options.page - 1) * json.limit + (i + 1);
}
var companyName = users[i].companyName || "";
array.push([
number.toString().white,
name.cyan,
users[i].loginEmail.white,
companyName.white,
accountType,
roles.white,
active,
users[i].id.white
]);
}
Screen.table(array);
Screen.print("");
if (options.company) {
Screen.success(json.total + " users found in company " + options.company);
} else if (options.companyId) {
Screen.success(json.total + " users found in company " + options.companyId);
} else {
Screen.success(json.total + " users found");
}
Screen.print("");
}
tableNetwork(json, options) {
var array = [];
array.push([
"#".gray,
"Name".gray,
"LoginEmail".gray,
"Company".gray,
"Presence".gray,
"Active".gray,
"ID".gray
]);
array.push([
"-".gray,
"----".gray,
"----------".gray,
"-------".gray,
"-------_".gray,
"-----".gray,
"--".gray
]);
var users = json.data;
var number = 0;
users.forEach(user => {
var active = "YES".white;
if (user.isTerminated) {
active = "NO".yellow;
}
var presence = "NO".white;
if (user.showPresence) {
presence = "YES".yellow;
}
var name = "";
name = user.displayName;
if (!name) {
name = user.firstName + " " + user.lastName;
}
number += 1;
if (options.page > 0) {
number = (options.page - 1) * 1000 + number;
}
var companyName = user.companyName || "";
array.push([
number.toString(),
name.cyan,
user.loginEmail.white,
companyName.white,
presence,
active,
user.id.white
]);
});
Screen.table(array);
Screen.print("");
Screen.success(json.total + " users found");
Screen.print("");
}
tableSites(json, options) {
var array = [];
array.push(["#".gray, "Site name".gray, "Status".gray, "ID".gray, "Company ID".gray]);
array.push(["-".gray, "---------".gray, "------".gray, "--".gray, "----------".gray]);
for (var i = 0; i < json.data.length; i++) {
var site = json.data[i];
var active = "true".white;
if (site.status !== "active") {
active = "false".red;
}
var number = i + 1;
if (options.page > 0) {
number = (options.page - 1) * json.limit + (i + 1);
}
array.push([number.toString().white, site.name.cyan, active, site.id.white, site.companyId.white]);
}
Screen.table(array);
Screen.print("");
Screen.success(json.total + " sites found.");
Screen.print("");
}
tableOffers(json, options) {
var array = [];
array.push([
"#".gray,
"Name".gray,
"Business Model".gray,
"Can be sold".gray,
"Profile Id".gray,
"ID".gray,
"Description".gray
]);
array.push([
"-".gray,
"----".gray,
"--------------".gray,
"-----------".gray,
"-----------".gray,
"--".gray,
"-----------".gray
]);
for (var i = 0; i < json.data.length; i++) {
var offer = json.data[i];
var canBeSold = "false".white;
if (offer.canBeSold) {
canBeSold = "true".yellow;
}
var business = "";
if (offer.businessModel) {
business = offer.businessModel;
}
var number = i + 1;
if (options.page > 0) {
number = (options.page - 1) * json.limit + (i + 1);
}
array.push([
number.toString().white,
offer.name.cyan,
business.white,
canBeSold,
offer.profileId.white,
offer.id.white,
offer.description.white
]);
}
Screen.table(array);
Screen.print("");
Screen.success(json.total + " offers found.");
Screen.print("");
}
tableCatalogs(json, options, offers) {
var array = [];
array.push(["#".gray, "Name".gray, "ID".gray, "Offer Id".gray, "Offer name".gray]);
array.push(["-".gray, "----".gray, "--".gray, "--------".gray, "-----------".gray]);
for (var i = 0; i < json.data.length; i++) {
var catalog = json.data[i];
var number = i + 1;
if (options.page > 0) {
number = (options.page - 1) * json.limit + (i + 1);
}
var nbOffer = catalog.offersList.length;
var offer = "";
if (nbOffer === 0) {
offer = "No offers".red;
} else if (nbOffer == 1) {
offer = "1 offer".green;
} else {
offer = nbOffer.toString().yellow + " offers".yellow;
}
var details = "";
if (nbOffer > 0) {
details = "";
}
array.push([number.toString().white, catalog.name.cyan, catalog.id.white, offer, details]);
catalog.offersList.forEach(offerId => {
var offer = offers.find(offerItem => {
return offerItem.id === offerId;
});
if (offer) {
array.push([" ".white, " ".cyan, " ".white, offerId.white, offer.name]);
} else {
}
});
}
Screen.table(array);
Screen.print("");
Screen.success(json.total + " catalogs found.");
Screen.print("");
}
table2D(json) {
function isObject(value) {
return value && typeof value === "object" && value.constructor === Object;
}
var array = [];
array.push(["#".gray, "Attribute".gray, "Content".gray]);
array.push(["-".gray, "---------".gray, "-------".gray]);
var index = 1;
for (var key in json) {
var data = json[key];
if (isObject(data)) {
array.push([index.toString().white, key.toString().cyan, ""]);
for (key in data) {
if (data[key] == null) {
array.push(["", "", key.yellow + ": ".white + JSON.stringify(data[key]).blue]);
} else if (typeof data[key] === "boolean") {
array.push(["", "", key.yellow + ": ".white + JSON.stringify(data[key]).magenta]);
} else {
array.push(["", "", key.yellow + ": ".white + JSON.stringify(data[key]).white]);
}
}
} else {
if (key === "id") {
key = key.white.bgCyan;