npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

flowtrace

v0.1.10

Published

Tracing format tools for FBP

Downloads

539

Readme

Flowtrace

A flowtrace is a persisted record of the execution of an Flow-based Programming (FBP) or dataflow program. It is used for retroactive (after-the-fact) debugging; to locate, understand and fix bugs.

The concept is analogous to a 'stacktrace' or 'core dump' for imperative code.

This project provides a data format to store traces in, and provide debugging tools for working with these traces, as well as JavaScript library for recording and producing them.

Status

In production

  • NoFlo has support for creating flowtraces from 1.3.0 onwards. Can be triggered programmatically, via fbp-protocol, or with the noflo-nodejs command-line tool
  • fbp-spec 0.8 has support for capturing flowtraces of test runs
  • Several commandline tools exist for working with flowtraces
  • Note: File format not 100% finalized

See braindump for ideas/plans.

Installing

First make sure you have Node.js with NPM installed.

To install locally in a project. Recommended.

npm install flowtrace

To install globally on your system

npm install -g flowtrace

Display flowtrace on commandline

flowtrace-show reads a flowtrace, and renders a human-friendly log output from it.

npx flowtrace-show mytrace.flowtrace.json

Example output:

-> IN repeat CONN
-> IN repeat DATA hello world
-> IN stdout CONN
-> IN stdout DATA hello world
-> IN repeat DISC
-> IN stdout DISC

When used in a terminal, supports colors.

Show a flowtrace in Flowhub

flowtrace-replay reads a flowtrace, and then acts as a live FBP runtime. That means it can be used with any FBP IDEs/client which support the FBP runtime protocol.

npx flowtrace-replay mytrace.flowtrace.json

By default this will open Flowhub in your browser, automatically connect and show you the graph. To replay the data press the play button. You should then see the data flowing through edges.

Flowtrace replayed in Flowhub

You can specify which --ide to use, and disable automatic opening of browser with -n.

npx flowtrace-replay --ide http://localhost:8888 -n

You can also set the --host and --port. See --help for all options.

Recording flowtraces in JavaScript

It is possible to use this library for recording and serializing flowtraces. Quick example:

const { Flowtrace } = require('flowtrace');

const tracer = new Flowtrace({
  // metadata about this run
});

// Register the main graph you're tracing
tracer.addGraph('example', myGraph, true);
// You should also call addGraph for each subgraph that is running

myProgram.on('packet', (packet) => {
  // Tell Flowtracer about each packet that arrives
  tracer.addNetworkpacket('network:data', packet.src, packet.tgt, 'example', packet.data);
});

myProgram.on('end', () => {
  // Once your program is finished (or errors), you can dump the Flowtrace
  const myTrace = tracer.toJSON();
  fs.writeFile('example.flowtrace.json', myTrace, (err) => {
    // ...
  });
});

See the src/lib/Flowtrace.js file for more information.