mirror of
https://github.com/status-im/embark-area-51.git
synced 2025-01-11 14:34:40 +00:00
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,
|
||||
|
56
lib/modules/profiler/index.js
Normal file
56
lib/modules/profiler/index.js
Normal 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;
|
Loading…
x
Reference in New Issue
Block a user