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.plugins = options.plugins;
|
||||
this.gasLimit = options.gasLimit;
|
||||
|
||||
this.events.setCommandHandler("contracts:contract", (contractName, cb) => {
|
||||
cb(this.contractsManager.getContract(contractName));
|
||||
});
|
||||
}
|
||||
|
||||
initTracker(cb) {
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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