profile me officer, here's a new module

Signed-off-by: VoR0220 <catalanor0220@gmail.com>
This commit is contained in:
VoR0220 2018-05-08 10:30:46 -05:00
parent 204684ef07
commit 819dec1bc3
3 changed files with 65 additions and 0 deletions

View File

@ -16,6 +16,10 @@ class Deploy {
this.chainConfig = options.chainConfig;
this.plugins = options.plugins;
this.gasLimit = options.gasLimit;
this.events.setCommandHandler("contracts:contract", (contractName, cb) => {
cb(this.contractsManager.getContract(contractName));
});
}
initTracker(cb) {

View File

@ -187,6 +187,11 @@ class Engine {
this.registerModule('vyper', {
contractDirectories: self.config.contractDirectories
});
this.registerModule('profiler', {
events: this.events,
logger: this.logger,
plugins: this.plugins,
});
this.contractsManager = new ContractsManager({
contractFiles: this.config.contractsFiles,

View File

@ -0,0 +1,56 @@
const asciiTable = require('ascii-table');
class Profiler {
constructor(embark ,options) {
this.embark = embark;
this.logger = embark.logger;
this.events = embark.events;
this.plugins = embark.plugins;
this.registerConsoleCommand();
}
profile(contractName, contract) {
const self = this;
let table = new asciiTable(contractName);
table.setHeading('Function', 'Payable', 'Mutability', 'Inputs', 'Outputs');
contract.abiDefinition.forEach((abiMethod) => {
switch(abiMethod.type) {
case "constructor":
table.addRow("constructor", abiMethod.payable, abiMethod.stateMutability, this.formatParams(abiMethod.inputs), this.formatParams(abiMethod.outputs));
break;
default:
table.addRow(abiMethod.name, abiMethod.payable, abiMethod.stateMutability, this.formatParams(abiMethod.inputs), this.formatParams(abiMethod.outputs));
}
});
self.logger.info(table.toString());
}
formatParams(params) {
if (undefined !== params && params.length) {
let paramString = "(";
let mappedParams = params.map(param => param.type);
paramString += mappedParams.join(',')
paramString += ")";
return paramString;
}
return "()";
}
registerConsoleCommand() {
const self = this;
self.embark.registerConsoleCommand((cmd, _options) => {
let cmdName = cmd.split(' ')[0];
let contractName = cmd.split(' ')[1];
if (cmdName === 'profile') {
self.events.request('contracts:contract', contractName, (contract) => {
self.logger.info("-- profile for " + contractName);
this.profile(contractName, contract);
});
return "profiled..."
}
});
}
}
module.exports = Profiler;