liveapicreator-cli
Version:
A REST command line utility for CA Live API Creator from CA Technologies
150 lines (133 loc) • 4.2 kB
JavaScript
var Client = require('node-rest-client').Client;
var _ = require('underscore');
var colors = require('colors');
var querystring = require("querystring");
var fs = require('fs');
var dotfile = require('../util/dotfile.js');
var printObject = require('../util/printObject.js');
var login = require('../util/login.js');
module.exports = {
commandGet: function (resName, cmd) {
var client = new Client();
var loginInfo = login.login(cmd);
var url = loginInfo.url;
var apiKey = loginInfo.apiKey;
if ( ! resName) {
console.log('Error: a resource or table name must be specified'.red);
return;
}
var params = "";
if (cmd.sysfilter) {
params += params.length ? "&" : "?";
params += "sysfilter=" + querystring.escape(cmd.sysfilter);
}
if (cmd.sysorder) {
params += params.length ? "&" : "?";
params += "sysorder=" + querystring.escape(cmd.sysorder);
}
if (cmd.userfilter) {
params += params.length ? "&" : "?";
params += "userfilter=" + querystring.escape(cmd.userfilter);
}
if (cmd.userorder) {
params += params.length ? "&" : "?";
params += "userorder=" + querystring.escape(cmd.userorder);
}
if (cmd.pagesize) {
params += params.length ? "&" : "?";
params += "pagesize=" + cmd.pagesize;
}
if (cmd.offset) {
params += params.length ? "&" : "?";
params += "offset=" + cmd.offset;
}
if (cmd.nometa) {
params += params.length ? "&" : "?";
params += "nometa=" + cmd.nometa;
}
if (cmd.inlinelimit) {
params += params.length ? "&" : "?";
params += "inlinelimit=" + cmd.inlinelimit;
}
if (cmd.format) {
if (cmd.format !== "text" && cmd.format !== "json" && cmd.format !== "compactjson") {
console.log('Invalid value for option '.red + 'format'.blue.bgWhite +
' - valid values are '.red + 'text'.underline + ', ' + 'json'.underline +
' and '.red + 'compactjson'.underline);
return;
}
}
var objUrl = resName;
if (cmd.pk) {
objUrl += "/" + cmd.pk;
}
//console.log(objUrl + params);
var startTime = new Date();
client.get(url + "/" + objUrl + params, {
headers: {
Authorization: "CALiveAPICreator " + apiKey + ":1",
"Content-Type": "application/json"
}
}, function(data) {
//console.log('get result: ' + JSON.stringify(data, null, 2));
var endTime = new Date();
if (data.errorMessage) {
console.log(("Error: " + data.errorMessage).red);
return;
}
//add file export option here.
if (cmd.jsonfile) {
var exportFile = fs.openSync(cmd.jsonfile, 'w+', 0600);
fs.writeSync(exportFile, JSON.stringify(data, null, 2));
console.log(('data has been exported to file: ' + cmd.jsonfile).green);
return;
}
var termWidth = 80;
if (process.stdout.getWindowSize) // Does not exist if output is redirected
termWidth = process.stdout.getWindowSize()[0];
if (!cmd.format || cmd.format === "text") {
var header = "GET for " + resName + ": ";
while (header.length < termWidth )
header += " ";
console.log(header.bgWhite.blue);
}
if (cmd.format == "json") {
console.log(JSON.stringify(data, null, 2));
}
else if (cmd.format == "compactjson") {
console.log(JSON.stringify(data));
}
else {
if (Array.isArray(data)) {
_.each(data, function(obj) {
printObject.printObject(obj, null, 0, null, cmd.truncate);
});
}
else {
printObject.printObject(data, cmd.resource, 0, null, cmd.truncate);
}
}
if (!cmd.format || cmd.format === "text") {
var trailer = "Request took: " + (endTime - startTime) + "ms";
trailer += " - # top-level objects: ";
if (Array.isArray(data)) {
if (data.length == 0) {
console.log('No rows returned'.yellow);
}
var nextBatchPresent = false;
if (data.length > 0) {
nextBatchPresent = data[data.length - 1]["@metadata"] &&
data[data.length - 1]["@metadata"].next_batch;
}
trailer += data.length - (nextBatchPresent ? 1 : 0);
}
else
trailer += "1";
while (trailer.length < termWidth)
trailer += " ";
console.log(trailer.bgWhite.blue);
console.log(' '.reset);
}
});
}
};