/infernode

Process tracing and flame graph visualization tool for Node.js development

Primary LanguageTypeScriptMIT LicenseMIT

infernode

A process tracing and flame graph tool for node.js development

build tests website deployment publishing to npmjs.com

INFERNOde Website

Documentation and Features

Contact the developers

Usage

  1. Ensure that your user account has sufficient permissions to perform process tracing on your system.

On Mac:

echo "$(whoami) ALL=(ALL) NOPASSWD: /usr/sbin/dtrace" | sudo tee -a /etc/sudoers

On Linux:

echo "kernel.perf_event_paranoid=-1" | sudo tee -a /etc/sysctl.conf > /dev/null
sysctl -p
  1. npm install --save-dev infernode in your Node.JS NPM project
  2. npx infernode to launch INFERNOde
  3. Navigate to the Capture page
  4. Provide the path to your app's entrypoint, relative to the top level directory of your project (e.g. src/index.js)
  5. Set a time limit for your capture and hit start
  6. If necessary, interact with your app to trigger the functionality you want to trace
  7. Check out the new flame graph in the sidebar

Interface

View and Manage Existing Graphs

Generate Differential Graphs

One-click Captures

Flexible Capture Settings

Upload Existing `perf` Files

In-app Help

Architecture

Diagrams

Key Dependencies

Backend

  • TypeScript
  • Node.js
  • Express.js
  • SQLite3
  • Pino
  • Formidable

Frontend

  • TypeScript
  • React
  • React-Router
  • React-Bootstrap
  • Axios

CI/CD

  • Github Actions
  • Jest
  • Supertest
  • Semantic-Release
  • Stylelint
  • ESLint
  • Webpack

Developing

  1. Clone this repository
  2. npm install in the repo directory
  3. npm run dev to run the server with on-save recompile/reload

Additional project scripts

All scripts are accessible via npm run <scriptname>, some key scripts are:

  • resetdb: Clean out infernode's datastore for a fresh start
  • clean: Remove all contents of the ./dist/ directory
  • copy-assets: Copy static assets from ./src/ to ./dist/
  • lint: Run linter (ESLint) against the relevant client and server source code
  • build: Performs npm run prebuild, npm run tsc, and npm run webpack sequentially, will halt if any prebuild steps have non-zero exit codes
  • test: Performs a fresh build and then executes all test suites
  • start: Starts the node server in production mode, access via http://localhost:3000
  • dev: Starts the node and webpack-dev-server servers in development mode, both dynamically recompiling/bundling/restarting on source code changes, access via http://localhost:8080

Express.js Global Error Handler

  • Invoked via next( errObject: InfernodeError ).
  • Takes an InfernodeError type object with the following mandatory properties:
    • message: string: A technical error message not necessarily intended for end users
  • The InfernodeError object can optionally include:
    • userMessage: string: A non-technical error message intended for (public) end users or API consumers
    • httpStatus: number: A more specific HTTP status code to use for the response
    • controller: string: The Express middleware controller/function/method/operation that caused the error
  • Logs the entire error object + the request method and path to the server's console.
  • The response status will be set to 500 by default if an errObject.httpStatus code is not provided.
  • In development mode, entire error object, request method, and request path will be sent in the HTTP response body as JSON.
  • In production mode, only the errObject.userMessage will be sent in the HTTP response body as JSON.

Contributing

Please see CONTRIBUTING.md for standards and process related to contributing to this project.