1.1.13 • Published 11 months ago

steps-track v1.1.13

Weekly downloads
-
License
MIT
Repository
github
Last release
11 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

1 year ago

1.1.0

1 year ago

1.1.9

12 months ago

1.1.8

12 months ago

1.0.9

1 year ago

1.1.7

12 months ago

1.0.8

1 year ago

1.1.6

12 months ago

1.0.7

1 year ago

1.1.5

12 months ago

1.0.6

1 year ago

1.1.3

1 year ago

1.1.12

11 months ago

1.1.11

11 months ago

1.1.10

11 months ago

1.1.13

11 months ago

1.0.11

1 year ago

1.0.10

1 year ago

1.0.12

1 year ago

1.0.5

1 year ago

1.0.4

1 year ago

1.0.3

1 year ago

1.0.2

1 year ago

1.0.1

1 year ago

1.0.0

1 year ago