mirror of https://github.com/embarklabs/embark.git
profile me officer, here's a new module
Signed-off-by: VoR0220 <catalanor0220@gmail.com>
This commit is contained in:
parent
204684ef07
commit
819dec1bc3
|
@ -16,6 +16,10 @@ class Deploy {
|
||||||
this.chainConfig = options.chainConfig;
|
this.chainConfig = options.chainConfig;
|
||||||
this.plugins = options.plugins;
|
this.plugins = options.plugins;
|
||||||
this.gasLimit = options.gasLimit;
|
this.gasLimit = options.gasLimit;
|
||||||
|
|
||||||
|
this.events.setCommandHandler("contracts:contract", (contractName, cb) => {
|
||||||
|
cb(this.contractsManager.getContract(contractName));
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
initTracker(cb) {
|
initTracker(cb) {
|
||||||
|
|
|
@ -187,6 +187,11 @@ class Engine {
|
||||||
this.registerModule('vyper', {
|
this.registerModule('vyper', {
|
||||||
contractDirectories: self.config.contractDirectories
|
contractDirectories: self.config.contractDirectories
|
||||||
});
|
});
|
||||||
|
this.registerModule('profiler', {
|
||||||
|
events: this.events,
|
||||||
|
logger: this.logger,
|
||||||
|
plugins: this.plugins,
|
||||||
|
});
|
||||||
|
|
||||||
this.contractsManager = new ContractsManager({
|
this.contractsManager = new ContractsManager({
|
||||||
contractFiles: this.config.contractsFiles,
|
contractFiles: this.config.contractsFiles,
|
||||||
|
|
|
@ -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;
|
Loading…
Reference in New Issue