Command Line Interface
You can see HERE :
Create Simple cli (command-line interface)
#!/usr/bin/env node
const nodefony = require("nodefony");
const project = new nodefony.cli("project", {
onStart: (cli) => {
cli.log("start");
}
});
_ _
_ __ _ __ ___ (_) ___ ___ | |_
| '_ \ | '__| / _ \ | | / _ \ / __| | __|
| |_) | | | | (_) | | | | __/ | (__ | |_
| .__/ |_| \___/ _/ | \___| \___| \__|
|_| |__/
Wed Apr 03 2019 21:43:11 INFO project : start
$
Cli Usage
Options
// usage new nodefony.cli(name, options)
const defaultOptions = {
processName: name, // Name of processus system
autostart: true, // Auto event onStart
asciify: true, // Display asciify name
clear: true, // Clear console before onStart
color: clc.blue, // Color asciify name
prompt: "default", // Tools for interactive command line (inquirer) "default" || "rxjs"
commander: true, // Tools for command line arguments (commander)
signals: true, // Active event signals
autoLogger: true, // Activate logger events by default
resize: false, // Active event resize
version: null, // Set cli version
warning: false, // Active process.on('warning')
pid: false, // Add pid in cli class
promiseRejection: true // Active process.on('rejectionHandled') and process.on('unhandledRejection')
};
Idle
#!/usr/bin/env node
const nodefony = require("nodefony");
const project = new nodefony.cli("project", {
onStart: (cli) => {
cli.idle();
cli.log("start");
},
});
Show Banner and Logger
#!/usr/bin/env node
const nodefony = require("nodefony");
const project = new nodefony.cli("project", {
version: nodefony.version,
onStart: (cli) => {
cli.idle();
cli.showBanner();
cli.log("start");
cli.log("start", "WARNING");
cli.log("start", "ERROR");
cli.log("start", "DEBUG");
cli.log("start", "NOTICE", "TERMINAL");
}
});
_ _
_ __ _ __ ___ (_) ___ ___ | |_
| '_ \ | '__| / _ \ | | / _ \ / __| | __|
| |_) | | | | (_) | | | | __/ | (__ | |_
| .__/ |_| \___/ _/ | \___| \___| \__|
|_| |__/
Version : 4.3.1 Platform : darwin Process : project PID : 82305
Thu Apr 04 2019 11:24:28 INFO project : start
Thu Apr 04 2019 11:24:28 WARNING project : start
Thu Apr 04 2019 11:24:28 ERROR project : start
Thu Apr 04 2019 11:24:28 DEBUG project : start
Thu Apr 04 2019 11:24:28 NOTICE TERMINAL : start
Events start
#!/usr/bin/env node
const nodefony = require("nodefony");
// with options
const project = new nodefony.cli("project", {
onStart: (cli) => {
cli.idle();
cli.log("start");
},
});
// without options start promise
const project = new nodefony.cli("project");
project.start()
.then((cli) => {
cli.idle();
cli.log("start");
});
_ _
_ __ _ __ ___ (_) ___ ___ | |_
| '_ \ | '__| / _ \ | | / _ \ / __| | __|
| |_) | | | | (_) | | | | __/ | (__ | |_
| .__/ |_| \___/ _/ | \___| \___| \__|
|_| |__/
Thu Apr 04 2019 00:46:16 INFO project : start
Signals
#!/usr/bin/env node
const nodefony = require("nodefony");
const project = new nodefony.cli("project", {
signals: true,
onStart: (cli) => {
cli.idle();
cli.log("start");
},
onSignal: (sig, cli) => {
// you can trap here SIGINT SIGTERM SIGHUP SIGQUIT
console.log(sig);
}
});
_ _
_ __ _ __ ___ (_) ___ ___ | |_
| '_ \ | '__| / _ \ | | / _ \ / __| | __|
| |_) | | | | (_) | | | | __/ | (__ | |_
| .__/ |_| \___/ _/ | \___| \___| \__|
|_| |__/
<ctrl-c>
Thu Apr 04 2019 11:17:11 CRITIC project : SIGINT
SIGINT
Event TERMINAL resize
#!/usr/bin/env node
const nodefony = require("nodefony");
const project = new nodefony.cli("project", {
resize: true,
onStart: (cli) => {
cli.idle();
cli.log("start");
},
onResize: (columns, rows, cli) => {
// call when you resize your TERMINAL
cli.log(`columns : ${columns} rows : ${rows}`, 'DEBUG', "SIZE");
}
});
_ _
_ __ _ __ ___ (_) ___ ___ | |_
| '_ \ | '__| / _ \ | | / _ \ / __| | __|
| |_) | | | | (_) | | | | __/ | (__ | |_
| .__/ |_| \___/ _/ | \___| \___| \__|
|_| |__/
Thu Apr 04 2019 11:17:04 INFO project : start
Thu Apr 04 2019 11:17:09 DEBUG SIZE : columns : 232 rows : 53
Thu Apr 04 2019 11:17:09 DEBUG SIZE : columns : 232 rows : 52
Thu Apr 04 2019 11:17:09 DEBUG SIZE : columns : 231 rows : 52
Thu Apr 04 2019 11:17:10 DEBUG SIZE : columns : 230 rows : 52
Thu Apr 04 2019 11:17:10 DEBUG SIZE : columns : 229 rows : 52
Thu Apr 04 2019 11:17:10 DEBUG SIZE : columns : 229 rows : 51
Display Table
#!/usr/bin/env node
const nodefony = require("nodefony");
const project = new nodefony.cli("project", {
version: nodefony.version,
});
project.start()
.then((cli) => {
cli.idle();
cli.showBanner();
// show cli-table https://github.com/Automattic/cli-table
// displayTable(data, options, enableSyslog)
cli.log("TABLE 1");
cli.displayTable([
['First value', 'Second value', cli.clc.red("third value")]
]);
cli.blankLine();
cli.log("TABLE 2");
cli.displayTable([
['First value', 'Second value', cli.getEmoji()]
], {}, true);
cli.blankLine();
cli.log("TABLE 3");
cli.displayTable([
['First value', 'Second value', cli.clc.magenta("third value")]
], {
head: ["Header 1", "Header 2", "Header 3"]
});
cli.terminate(0);
})
.catch(e => {
console.trace(e);
cli.terminate(1);
});
_ _
_ __ _ __ ___ (_) ___ ___ | |_
| '_ \ | '__| / _ \ | | / _ \ / __| | __|
| |_) | | | | (_) | | | | __/ | (__ | |_
| .__/ |_| \___/ _/ | \___| \___| \__|
|_| |__/
Version : 4.3.1 Platform : darwin Process : project PID : 84290
Thu Apr 04 2019 15:02:26 INFO project : TABLE 1
┌─────────────┬──────────────┬─────────────┐
│ First value │ Second value │ third value │
└─────────────┴──────────────┴─────────────┘
Thu Apr 04 2019 15:02:26 INFO project : TABLE 2
Thu Apr 04 2019 15:02:26 INFO project :
┌─────────────┬──────────────┬────┐
│ First value │ Second value │ 🤓 │
└─────────────┴──────────────┴────┘
Thu Apr 04 2019 15:07:42 INFO project : TABLE 3
┌─────────────┬──────────────┬─────────────┐
│ Header 1 │ Header 2 │ Header 3 │
├─────────────┼──────────────┼─────────────┤
│ First value │ Second value │ third value │
└─────────────┴──────────────┴─────────────┘
Spinner
#!/usr/bin/env node
const project = new nodefony.cli("project", {
version: nodefony.version,
});
project.start()
.then((cli) => {
cli.idle();
cli.showBanner();
cli.logger("START SPINNER : " + cli.getEmoji("clapper"));
cli.startSpinner("MY CLI", ['⣾', '⣽', '⣻', '⢿', '⡿', '⣟', '⣯', '⣷']);
cli.blankLine();
let interval = setInterval(() => {
cli.logger("MESSAGE : " + cli.getEmoji());
}, 500);
setTimeout(() => {
clearInterval(interval);
cli.stopSpinner();
cli.logger("STOP SPINNER : " + cli.getEmoji("clapper"));
}, 10000);
})
.catch(e => {
console.trace(e);
});
_ _
_ __ _ __ ___ (_) ___ ___ | |_
| '_ \ | '__| / _ \ | | / _ \ / __| | __|
| |_) | | | | (_) | | | | __/ | (__ | |_
| .__/ |_| \___/ _/ | \___| \___| \__|
|_| |__/
Version : 4.3.1 Platform : darwin Process : project PID : 85023
Thu Apr 04 2019 15:20:52 INFO project : START SPINNER : 🎬
⣷ Thu Apr 04 2019 15:23:51 INFO project : MESSAGE : 🎭
Thu Apr 04 2019 15:21:02 INFO project : STOP SPINNER : 🎬
Commander (Command line parser)
Create Helper
#!/usr/bin/env node
const project = new nodefony.cli("project", {
version: nodefony.version,
});
project.start()
.then((cli) => {
cli.idle();
cli.showBanner();
// https://github.com/tj/commander.js
// usage
cli.commander.usage(`[options] [args...]`);
// custom help
cli.commander.on('--help', () => {
cli.blankLine();
console.log('Examples:');
console.log(' $ project create -name hello ');
console.log(' $ project -h');
cli.blankLine();
});
cli.parseCommand();
})
.catch(e => {
console.trace(e);
});
$ project -h
_ _
_ __ _ __ ___ (_) ___ ___ | |_
| '_ \ | '__| / _ \ | | / _ \ / __| | __|
| |_) | | | | (_) | | | | __/ | (__ | |_
| .__/ |_| \___/ _/ | \___| \___| \__|
|_| |__/
Version : 4.3.1 Platform : darwin Process : project PID : 86424
Usage: test [options] [args...]
Options:
-V, --version output the version number
-h, --help output usage information
Examples:
project create -name hello
project -h
Create Command
#!/usr/bin/env node
const project = new nodefony.cli("project", {
version: nodefony.version,
});
project.start()
.then((cli) => {
cli.idle();
cli.showBanner();
cli.blankLine();
cli.commander.usage(`[options] [args...]`);
cli.setCommand('rm <dir>')
.option('-r, --recursive', 'Remove recursively')
.action(function(dir, cmd) {
console.log('remove ' + dir + (cmd.recursive ? ' recursively' : ''));
});
cli.setCommand('create ')
.description('Create something in project')
.alias('add')
.option('-d, --debug ', 'Environment', /^(dev|prod|preprod)$/i, 'dev')
.action((create, command) => {
cli.log(create, "INFO", "COMMAND ARGUMENTS");
cli.log(command.debug, "INFO", "COMMAND OPTIONS");
})
// custom command help
.on('--help', () => {
cli.blankLine();
console.log('Examples:');
console.log(' $ project create -name hello ');
console.log(' $ project create -name hello -d ');
});
// custom global help
cli.commander.on('--help', () => {
cli.blankLine();
console.log('Examples:');
console.log(' $ project create -name hello ');
console.log(' $ project -h');
cli.blankLine();
});
//cli.commander.arguments(` [args...]`);
cli.parseCommand();
})
.catch(e => {
console.trace(e);
});
$ project -h
_ _
_ __ _ __ ___ (_) ___ ___ | |_
| '_ \ | '__| / _ \ | | / _ \ / __| | __|
| |_) | | | | (_) | | | | __/ | (__ | |_
| .__/ |_| \___/ _/ | \___| \___| \__|
|_| |__/
Version : 4.3.1 Platform : darwin Process : project Pid : 94629
Usage: test [options] <command1> [args...]
Options:
-V, --version output the version number
-h, --help output usage information
Commands:
rm [options] <dir>
create|add [options] <name> Create something in project
Examples:
project create -name hello
project -h
$ project create -h
_ _
_ __ _ __ ___ (_) ___ ___ | |_
| '_ \ | '__| / _ \ | | / _ \ / __| | __|
| |_) | | | | (_) | | | | __/ | (__ | |_
| .__/ |_| \___/ _/ | \___| \___| \__|
|_| |__/
Version : 4.3.1 Platform : darwin Process : project Pid : 94629
Usage: create|add [options] <name>
Create something in project
Options:
-d, --debug <env> Environment (default: "dev")
-h, --help output usage information
Examples:
project create -name hello
project create -name hello -d
$ create something -d prod
_ _
_ __ _ __ ___ (_) ___ ___ | |_
| '_ \ | '__| / _ \ | | / _ \ / __| | __|
| |_) | | | | (_) | | | | __/ | (__ | |_
| .__/ |_| \___/ _/ | \___| \___| \__|
|_| |__/
Version : 4.3.1 Platform : darwin Process : project Pid : 96212
Fri Apr 05 2019 14:14:46 INFO COMMAND ARGUMENTS : something
Fri Apr 05 2019 14:14:46 INFO COMMAND OPTIONS : prod
Use interactive command line (Prompt)
#!/usr/bin/env node
const project = new nodefony.cli("project", {
version: nodefony.version,
});
project.start()
.then( (cli) => {
return cli.prompt(questions)
.then(function(answers) {
cli.log('\nOrder receipt:');
cli.log(JSON.stringify(answers, null, ' '));
});
})
.catch(e => {
console.trace(e);
});
_ _
_ __ _ __ ___ (_) ___ ___ | |_
| '_ \ | '__| / _ \ | | / _ \ / __| | __|
| |_) | | | | (_) | | | | __/ | (__ | |_
| .__/ |_| \___/ _/ | \___| \___| \__|
|_| |__/
? Is this for delivery? Yes
? What's your phone number? 0132659887
? What size do you need? Medium
? How many do you need? 5
? What about the toppings? All dressed
? You also get a free 2L beverage Pepsi
? Any comments on your purchase experience? Nope, all good!
Fri Apr 05 2019 17:15:09 INFO project :
Order receipt:
Fri Apr 05 2019 17:15:09 INFO project : {
"toBeDelivered": true,
"phone": "0132659887",
"size": "medium",
"quantity": 5,
"toppings": "alldressed",
"beverage": "Pepsi",
"comments": "Nope, all good!"
}
// https://github.com/SBoudrias/Inquirer.js/tree/master/examples
const questions = [{
type: 'confirm',
name: 'toBeDelivered',
message: 'Is this for delivery?',
default: false
},
{
type: 'input',
name: 'phone',
message: 'What\'s your phone number?',
validate: function (value) {
let pass = value.match(/^([01]{1})?[-.\s]?\(?(\d{3})\)?[-.\s]?(\d{3})[-.\s]?(\d{4})\s?((?:#|ext\.?\s?|x\.?\s?){1}(?:\d+)?)?$/i);
if (pass) {
return true;
}
return 'Please enter a valid phone number';
}
},
{
type: 'list',
name: 'size',
message: 'What size do you need?',
choices: ['Large', 'Medium', 'Small'],
filter: function (val) {
return val.toLowerCase();
}
},
{
type: 'input',
name: 'quantity',
message: 'How many do you need?',
validate: function (value) {
let valid = !isNaN(parseFloat(value));
return valid || 'Please enter a number';
},
filter: Number
},
{
type: 'expand',
name: 'toppings',
message: 'What about the toppings?',
choices: [{
key: 'p',
name: 'Pepperoni and cheese',
value: 'PepperoniCheese'
},
{
key: 'a',
name: 'All dressed',
value: 'alldressed'
},
{
key: 'w',
name: 'Hawaiian',
value: 'hawaiian'
}
]
},
{
type: 'rawlist',
name: 'beverage',
message: 'You also get a free 2L beverage',
choices: ['Pepsi', '7up', 'Coke']
},
{
type: 'input',
name: 'comments',
message: 'Any comments on your purchase experience?',
default: 'Nope, all good!'
},
{
type: 'list',
name: 'prize',
message: 'For leaving a comment, you get a freebie',
choices: ['cake', 'fries'],
when: function (answers) {
return answers.comments !== 'Nope, all good!';
}
}
];
Avanced Use Nodefony cli
__ __ __ __ ____ _ ___
| \/ | \ \ / / / ___| | | |_ _|
| |\/| | \ V / | | | | | |
| | | | | | | |___ | |___ | |
|_| |_| |_| \____| |_____| |___|
Wed Mar 27 2019 18:06:52 INFO MY CLI : ON START
Wed Mar 27 2019 18:06:52 INFO MY CLI : START simpleLogger : 🎬
Wed Mar 27 2019 18:06:52 INFO MY CLI : Emoji : 🌜
Wed Mar 27 2019 18:06:52 DEBUG MY CLI : Emoji : 🥫
Wed Mar 27 2019 18:06:52 ERROR MY CLI : Emoji : 🌡️
Wed Mar 27 2019 18:06:52 WARNING MY CLI : Emoji : 🚦
Wed Mar 27 2019 18:06:52 INFO MY CLI : END simpleLogger : 🏁
Wed Mar 27 2019 18:06:52 INFO MY CLI : START SPINNER : 🎬
Wed Mar 27 2019 18:06:57 INFO MY CLI : END SPINNER : 🏁
Wed Mar 27 2019 18:06:57 INFO MY CLI : START TABLE : 🎬
┌──────────┬──────────┬──────────┬──────────┐
│ COLUMN 1 │ COLUMN 2 │ COLUMN 3 │ COLUMN 4 │
├──────────┼──────────┼──────────┼──────────┤
│ CRITIC │ 63 │ 185 │ 238 │
├──────────┼──────────┼──────────┼──────────┤
│ NOTICE │ 26 │ 110 │ 169 │
├──────────┼──────────┼──────────┼──────────┤
│ ERROR │ 39 │ 185 │ 132 │
├──────────┼──────────┼──────────┼──────────┤
│ CRITIC │ 1 │ 53 │ 234 │
├──────────┼──────────┼──────────┼──────────┤
│ DEBUG │ 43 │ 27 │ 18 │
├──────────┼──────────┼──────────┼──────────┤
│ DEBUG │ 91 │ 10 │ 132 │
├──────────┼──────────┼──────────┼──────────┤
│ INFO │ 21 │ 11 │ 18 │
├──────────┼──────────┼──────────┼──────────┤
│ DEBUG │ 49 │ 142 │ 282 │
├──────────┼──────────┼──────────┼──────────┤
│ ERROR │ 3 │ 13 │ 284 │
├──────────┼──────────┼──────────┼──────────┤
│ CRITIC │ 89 │ 31 │ 97 │
└──────────┴──────────┴──────────┴──────────┘
┌──────────┬──────────┬──────────┬──────────┐
│ COLUMN 1 │ COLUMN 2 │ COLUMN 3 │ COLUMN 4 │
├──────────┼──────────┼──────────┼──────────┤
│ WARNING │ 97 │ 12 │ 191 │
├──────────┼──────────┼──────────┼──────────┤
│ ALERT │ 38 │ 165 │ 45 │
├──────────┼──────────┼──────────┼──────────┤
│ ALERT │ 41 │ 144 │ 100 │
├──────────┼──────────┼──────────┼──────────┤
│ INFO │ 17 │ 116 │ 269 │
├──────────┼──────────┼──────────┼──────────┤
│ NOTICE │ 24 │ 151 │ 7 │
├──────────┼──────────┼──────────┼──────────┤
│ CRITIC │ 72 │ 70 │ 239 │
├──────────┼──────────┼──────────┼──────────┤
│ CRITIC │ 16 │ 163 │ 225 │
├──────────┼──────────┼──────────┼──────────┤
│ NOTICE │ 44 │ 48 │ 26 │
├──────────┼──────────┼──────────┼──────────┤
│ DEBUG │ 85 │ 146 │ 261 │
├──────────┼──────────┼──────────┼──────────┤
│ ALERT │ 6 │ 179 │ 75 │
└──────────┴──────────┴──────────┴──────────┘
Wed Mar 27 2019 18:06:57 INFO MY CLI : END TABLE : 🏁
Wed Mar 27 2019 18:06:57 INFO MY CLI : START PROGRESS : 🎬
Wed Mar 27 2019 18:06:57 INFO MY CLI : [-------------------------------------------------] 2%
Wed Mar 27 2019 18:06:57 INFO MY CLI : [|------------------------------------------------] 4%
Wed Mar 27 2019 18:06:57 INFO MY CLI : [||-----------------------------------------------] 6%
Wed Mar 27 2019 18:06:57 INFO MY CLI : [|||----------------------------------------------] 8%
Wed Mar 27 2019 18:06:57 INFO MY CLI : [||||---------------------------------------------] 10%
Wed Mar 27 2019 18:06:57 INFO MY CLI : [|||||--------------------------------------------] 12%
Wed Mar 27 2019 18:06:57 INFO MY CLI : [|||||||------------------------------------------] 15%
Wed Mar 27 2019 18:06:57 INFO MY CLI : [|||||||------------------------------------------] 16%
Wed Mar 27 2019 18:06:57 INFO MY CLI : [||||||||-----------------------------------------] 18%
Wed Mar 27 2019 18:06:57 INFO MY CLI : [|||||||||----------------------------------------] 20%
Wed Mar 27 2019 18:06:57 INFO MY CLI : [||||||||||---------------------------------------] 22%
Wed Mar 27 2019 18:06:57 INFO MY CLI : [|||||||||||--------------------------------------] 24%
Wed Mar 27 2019 18:06:57 INFO MY CLI : [||||||||||||-------------------------------------] 26%
Wed Mar 27 2019 18:06:57 INFO MY CLI : [||||||||||||||-----------------------------------] 29%
Wed Mar 27 2019 18:06:57 INFO MY CLI : [||||||||||||||-----------------------------------] 30%
Wed Mar 27 2019 18:06:57 INFO MY CLI : [|||||||||||||||----------------------------------] 32%
Wed Mar 27 2019 18:06:57 INFO MY CLI : [||||||||||||||||---------------------------------] 34%
Wed Mar 27 2019 18:06:57 INFO MY CLI : [|||||||||||||||||--------------------------------] 36%
Wed Mar 27 2019 18:06:57 INFO MY CLI : [||||||||||||||||||-------------------------------] 38%
Wed Mar 27 2019 18:06:58 INFO MY CLI : [|||||||||||||||||||------------------------------] 40%
Wed Mar 27 2019 18:06:58 INFO MY CLI : [||||||||||||||||||||-----------------------------] 42%
Wed Mar 27 2019 18:06:58 INFO MY CLI : [|||||||||||||||||||||----------------------------] 44%
Wed Mar 27 2019 18:06:58 INFO MY CLI : [||||||||||||||||||||||---------------------------] 46%
Wed Mar 27 2019 18:06:58 INFO MY CLI : [|||||||||||||||||||||||--------------------------] 48%
Wed Mar 27 2019 18:06:58 INFO MY CLI : [||||||||||||||||||||||||-------------------------] 50%
Wed Mar 27 2019 18:06:58 INFO MY CLI : [|||||||||||||||||||||||||------------------------] 52%
Wed Mar 27 2019 18:06:58 INFO MY CLI : [||||||||||||||||||||||||||-----------------------] 54%
Wed Mar 27 2019 18:06:58 INFO MY CLI : [||||||||||||||||||||||||||||---------------------] 57%
Wed Mar 27 2019 18:06:58 INFO MY CLI : [||||||||||||||||||||||||||||---------------------] 58%
Wed Mar 27 2019 18:06:58 INFO MY CLI : [|||||||||||||||||||||||||||||--------------------] 60%
Wed Mar 27 2019 18:06:58 INFO MY CLI : [||||||||||||||||||||||||||||||-------------------] 62%
Wed Mar 27 2019 18:06:58 INFO MY CLI : [|||||||||||||||||||||||||||||||------------------] 64%
Wed Mar 27 2019 18:06:58 INFO MY CLI : [||||||||||||||||||||||||||||||||-----------------] 66%
Wed Mar 27 2019 18:06:58 INFO MY CLI : [|||||||||||||||||||||||||||||||||----------------] 68%
Wed Mar 27 2019 18:06:58 INFO MY CLI : [||||||||||||||||||||||||||||||||||---------------] 70%
Wed Mar 27 2019 18:06:58 INFO MY CLI : [|||||||||||||||||||||||||||||||||||--------------] 72%
Wed Mar 27 2019 18:06:58 INFO MY CLI : [||||||||||||||||||||||||||||||||||||-------------] 74%
Wed Mar 27 2019 18:06:58 INFO MY CLI : [|||||||||||||||||||||||||||||||||||||------------] 76%
Wed Mar 27 2019 18:06:58 INFO MY CLI : [||||||||||||||||||||||||||||||||||||||-----------] 78%
Wed Mar 27 2019 18:06:58 INFO MY CLI : [|||||||||||||||||||||||||||||||||||||||----------] 80%
Wed Mar 27 2019 18:06:58 INFO MY CLI : [||||||||||||||||||||||||||||||||||||||||---------] 82%
Wed Mar 27 2019 18:06:58 INFO MY CLI : [|||||||||||||||||||||||||||||||||||||||||--------] 84%
Wed Mar 27 2019 18:06:58 INFO MY CLI : [||||||||||||||||||||||||||||||||||||||||||-------] 86%
Wed Mar 27 2019 18:06:58 INFO MY CLI : [|||||||||||||||||||||||||||||||||||||||||||------] 88%
Wed Mar 27 2019 18:06:58 INFO MY CLI : [||||||||||||||||||||||||||||||||||||||||||||-----] 90%
Wed Mar 27 2019 18:06:58 INFO MY CLI : [|||||||||||||||||||||||||||||||||||||||||||||----] 92%
Wed Mar 27 2019 18:06:58 INFO MY CLI : [||||||||||||||||||||||||||||||||||||||||||||||---] 94%
Wed Mar 27 2019 18:06:58 INFO MY CLI : [|||||||||||||||||||||||||||||||||||||||||||||||--] 96%
Wed Mar 27 2019 18:06:58 INFO MY CLI : [||||||||||||||||||||||||||||||||||||||||||||||||-] 98%
Wed Mar 27 2019 18:06:58 INFO MY CLI : [|||||||||||||||||||||||||||||||||||||||||||||||||] 100%
Wed Mar 27 2019 18:06:58 INFO MY CLI : END PROGRESS : 🏁
Wed Mar 27 2019 18:06:58 INFO MY CLI : START PROGRESS 2 : 🎬
Wed Mar 27 2019 18:07:00 INFO MY CLI : MY PROGRESS [|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||] 100%
Wed Mar 27 2019 18:07:00 INFO MY CLI : END PROGRESS 2 : 🏁
Wed Mar 27 2019 18:07:00 INFO MY CLI : START Sparkline : 🎬
Wed Mar 27 2019 18:07:00 INFO MY CLI : ▅▅▂▄▅▄█▅▄▇▆▇▅▅ 12 reqs/sec (23 reqs/sec)
Wed Mar 27 2019 18:07:00 INFO MY CLI : END Sparkline : 🏁
Wed Mar 27 2019 18:07:00 INFO MY CLI : START Sparkline : 🎬
Wed Mar 27 2019 18:07:04 INFO MY CLI : ▃▆▆▇▇▄▅▇█▆▂▅▇▅▇▄██▆▂▂▅▅▆▄▃▅▇▆▆▇█▄▅▇▂▆▄▃▃▆██▃▄▂█▂▂▃▂▆▂█▇▄▇▆▄█▅▆▆▂▄▃█▆▄▃▆▅▆▂▄▃▄▂▂▄▆▂█▃▃▂█▆█▂▄▃██▃▄█▄▇ 169 reqs/sec (200 reqs/sec)
Wed Mar 27 2019 18:07:04 INFO MY CLI : END Sparkline2 : 🏁
Wed Mar 27 2019 18:07:04 INFO MY CLI : TERMINATE MY CLI : 🏁