UNPKG

rainbow-cli

Version:

Rainbow CLI application based on the Rainbow SDK for Node.js

1,661 lines (1,417 loc) 73.5 kB
"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;