Giter Club home page Giter Club logo

express-status-monitor's Introduction

express-status-monitor

express-status-monitor on npm npm CircleCI Open Source Helpers

Simple, self-hosted module based on Socket.io and Chart.js to report realtime server metrics for Express-based node servers.

Monitoring Page

Demo

Demo available here

Support for other Node.js frameworks

Installation & setup

  1. Run npm install express-status-monitor --save
  2. Before any other middleware or router add following line: app.use(require('express-status-monitor')());
  3. Run server and go to /status

Note: This plugin works on Node versions > 4.x

Run examples

  1. Go to cd examples/
  2. Run npm i
  3. Run server npm start
  4. Go to http://0.0.0.0:3000

Options

Monitor can be configured by passing options object into expressMonitor constructor.

Default config:

title: 'Express Status',  // Default title
theme: 'default.css',     // Default styles
path: '/status',
socketPath: '/socket.io', // In case you use a custom path
namespace: '/',           // socket.io namespace
port: null,               // socket.io port
websocket: null,          // In case you use an existing socket.io instance
spans: [{
  interval: 1,            // Every second
  retention: 60           // Keep 60 datapoints in memory
}, {
  interval: 5,            // Every 5 seconds
  retention: 60
}, {
  interval: 15,           // Every 15 seconds
  retention: 60
}],
iframe: false,            // iframe=true will remove X-Frame-Options
chartVisibility: {
  cpu: true,
  mem: true,
  load: true,
  heap: true,
  eventLoop: true,
  responseTime: true,
  rps: true,
  statusCodes: true
},
ignoreStartsWith: '/admin',
healthChecks: []

Health Checks

You can add a series of health checks to the configuration that will appear below the other stats. The health check will be considered successful if the endpoint returns a 200 status code.

// config
healthChecks: [{
  protocol: 'http',
  host: 'localhost',
  path: '/admin/health/ex1',
  port: '3000'
}, {
  protocol: 'http',
  host: 'localhost',
  path: '/admin/health/ex2',
  port: '3000'
}]

Health Checks

Securing endpoint

The HTML page handler is exposed as a pageRoute property on the main middleware function. So the middleware is mounted to intercept all requests while the HTML page handler will be authenticated.

Example using custom middleware
(Credits to @peteriman)

// custom middleware to do own auth
let alt = false
const authFn = (req, res, next) => {
  alt = !alt;            // alternating
  if (alt) {
    res.sendStatus(401); // unauthorized
  } else {
    next();              // proceed
  }
};

const statusMonitor = require('express-status-monitor')({ path: '' }); // avoid serving HTML
app.use(statusMonitor);
app.get('/status', authFn, statusMonitor.pageRoute);                   // use pageRoute to serve HTML

Example using https://www.npmjs.com/package/connect-ensure-login
(Credits to @mattiaerre)

const ensureLoggedIn = require('connect-ensure-login').ensureLoggedIn()

const statusMonitor = require('express-status-monitor')({ path: '' }); // avoid serving HTML
app.use(statusMonitor);
app.get('/status', ensureLoggedIn, statusMonitor.pageRoute);           // use pageRoute to serve HTML

Example using http-auth
(Credits to @cristianossd and )

const auth = require('http-auth');
const basic = auth.basic({realm: 'Monitor Area'}, function(user, pass, callback) {
  callback(user === 'username' && pass === 'password');
});

const statusMonitor = require('express-status-monitor')({ path: '' }); // avoid serving HTML
app.use(statusMonitor);
app.get('/status', basic.check(statusMonitor.pageRoute));              // use pageRoute to serve HTML

Using module with socket.io in project

If you're using socket.io in your project, this module could break your project because this module by default will spawn its own socket.io instance. To mitigate that, fill websocket parameter with your main socket.io instance as well as port parameter.

Tests and coverage

In order to run test and coverage use the following npm commands:

npm test
npm run coverage

License

MIT License ยฉ Dynobase

express-status-monitor's People

Contributors

bcdxn avatar benzi avatar capaj avatar codetriage-readme-bot avatar colinrcummings avatar dependabot[bot] avatar hiagodotme avatar julienbreux avatar kerumen avatar lamweili avatar logansua avatar lucasvinals avatar malixsys avatar manojkumarmuralidharan avatar maranimatias avatar maxfindel avatar muety avatar openhoat avatar pilotpirxie avatar rafalwilinski avatar skillor avatar snyk-bot avatar soyuka avatar tahayk avatar takipsizad avatar thom-nic avatar tiagojsalmeida avatar tkruczek avatar travelingtechguy avatar yasharf avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.