1.1.13 • Published 9 months ago

steps-track v1.1.13

Weekly downloads
-
License
MIT
Repository
github
Last release
9 months ago

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

MIT 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