1.1.13 • Published 9 months ago
steps-track v1.1.13
StepsTrack
StepsTrack is a simple library for tracking the time and data of the intermediate steps in a function for further debugging / enchancements. Useful for enhancing performance of a pipeline-like function that consists of multiple steps and/or conccurent async functions.
Features
- Track intermediates data, results and execution time of all sub-steps.
- Generate Gantt chart for visual representation of step durations.
Installation
npm install --save steps-track
Note: If you encounter error installing chart.js / node-canvas, see https://github.com/Automattic/node-canvas/wiki#installation-guides
Example
Sample Code
import { StepTracker } from 'steps-track';
async function main() {
const mainTracker = new StepTracker('main', {
logResult: true, // Default false. If true, the result of each step will be logged.
// Note: Setting to true may incur memory usage increase.
listeners: {
'foo': (data) => {
console.log(`tracker.on(foo) receiving ${data}`)
},
'someData': (data) => {
console.log(`tracker.on(someData) receiving ${data}`)
}
}
});
await mainTracker.track(async (st: StepTracker) => {
await st.step('demo', async (st: StepTracker) => {
// Your logic here
st.record('foo', 'bar');
await new Promise(resolve => setTimeout(resolve, 200));
});
await st.step('fetch', async (st: StepTracker) => {
const urls = await st.step('preprocess', async (st: StepTracker) => {
// Some preprocess logic
st.record('someData', 12345);
await new Promise(resolve => setTimeout(resolve, 1000));
return ['https://url1.com', 'https://url2.com', 'https://url3.com'];
});
await new Promise(resolve => setTimeout(resolve, 500));
// Concurrent sub steps
await Promise.all(urls.map(async (url) => {
return st.step(`${url}`, async (st: StepTracker) => {
return await fetch(url);
});
}));
});
});
console.log(JSON.stringify(mainTracker.output(), null, 2));
// output gantt chart
const ganttArgs = {
unit: 'ms', // 's' | 'ms'. Default 'ms'
minWidth: 100, // Default 500
minHeight: 100, // Default 300
includeSteps: /main.fetch/ // string[] | RegExp. if not provided, all steps will be included
}
// Gantt chart generated via quickchart.io
const ganttUrl = mainTracker.ganttUrl(ganttArgs);
// Gantt chart buffer generated locally using chart.js, in png format
const ganttBuffer = mainTracker.ganttLocal(ganttArgs);
}
Gantt Chart Output
To Do
- Generate speed analysis based on multiple runs of the same function
License
1.1.1
10 months ago
1.1.0
10 months ago
1.1.9
9 months ago
1.1.8
9 months ago
1.0.9
10 months ago
1.1.7
9 months ago
1.0.8
10 months ago
1.1.6
10 months ago
1.0.7
10 months ago
1.1.5
10 months ago
1.0.6
10 months ago
1.1.3
10 months ago
1.1.12
9 months ago
1.1.11
9 months ago
1.1.10
9 months ago
1.1.13
9 months ago
1.0.11
10 months ago
1.0.10
10 months ago
1.0.12
10 months ago
1.0.5
10 months ago
1.0.4
10 months ago
1.0.3
11 months ago
1.0.2
11 months ago
1.0.1
11 months ago
1.0.0
11 months ago