Socket
Socket
Sign inDemoInstall

simple-stats-server

Package Overview
Dependencies
3
Maintainers
1
Versions
5
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    simple-stats-server

dead-simple resource stats for Node.js servers


Version published
Maintainers
1
Install size
62.6 kB
Created

Readme

Source

simple stats server

dead-simple resource stats for Node.js servers

  • introduction
  • getting started
  • documentation

introduction

Sometimes all you need is the basic resource stats Node core exposes. But really you'd like it as a JSON endpoint. And maybe you want to be able to check that your database connection is healthy or count the number of requests you're getting. Just a few simple things, exposed as a REST endpoint.

getting started

Install it with NPM.

> npm install --save simple-stats-server

The easiest way to use the server is to mount the connect/express-style middleware:

sss = require 'simple-stats-server'
stats = sss()

express = require 'express'
app = express()

# serve the REST API from the /stats path
app.use '/stats', stats

app.listen 3000

Now visit the stats endpoint.

> curl localhost:3000/stats

{"cpu":[0.32],"memory":{"system...

Add some route counters and system checks.

# mount early
app.use stats.count 'requests'
app.use '/api', stats.count 'api calls'

stats.check 'database connection', (cb) ->
  db.checkConnection (err, isUp) ->
    cb not err and isUp

documentation

REST api

The simple stats server REST API is simple. The only method supported is GET. Get the URL / to retrieve the entire data structure, or drill down by appending keys as path levels. For instance, to get the current process uptime, get /uptime/process.

The data structure looks something like this:

{
  "check": {
    "ping": true
  },
  "count": {
    "stats": 3
  },
  "memory": {
    "system": 0.3156597199226417,
    "process": 0.0033391192918849236,
    "heap": 0.5583788927673652
  },
  "uptime": {
    "system": 174728.443475012,
    "process": 17.979023792984663
  },
  "versions": {
    "http_parser": "1.0",
    "node": "0.10.15",
    "v8": "3.14.5.9",
    "ares": "1.10.0",
    "uv": "0.10.13",
    "zlib": "1.2.8",
    "modules": "11",
    "openssl": "1.0.1e",
    "stats": "0.0.1"
  },
  "cpu": {
    "1s": [ 0.02, 0.04, 0.02, 0.02 ],
    "5s": [ 0.02, 0.01, 0.02, 0.01 ],
    "15s": [ 0.01, 0.02, 0.01, 0.05 ],
    "1m": [ 0.04, 0.03, 0.03, 0.03 ]
  }
}

Server api

sss()

The return value of the exported function is a simple-stats-server. It acts as connect/express style middleware, so just mount it directly in your app. In express style, mount it at a subdirectory:

sss = require 'simple-server-stats'
stats = sss()
app.use '/stats', stats
stats.check(name, predicate)

Add a status check to the stats server. The name is used for the JSON representation as well as the URL. Spaces are replaced with dashes and the whole thing is downcased. The function predicate determines the current status. It can be written in one of two forms, synchronous, which is nullary -> Boolean, and asynchronous, which is unary (cb) ->. The latter form callsback with a truthy or falsy value, where the former returns it.

# a basic alive check (this is what ping is)
stats.check 'alive', -> yes

# check the status of the database connection
stats.check 'database', (cb) ->
  myDatabase.checkConnection (error, isAlive) ->
    cb not error and isAlive
stats.count(name)

Creates a simple counter and returns it. The name is treated the same as in check above, downcased and space-to-dashed. The returned counter has the signature (req, res, next) ->, and will call next if it's a function, so the counter can be used directly as middleware. You can also use the counter anywhere else in your application that you'd like to count events.

# mount this early to count all requests
app.use stats.count 'requests'

# create a custom event counter
recordEvent = stats.count 'custom event'
recordEvent()
recordEvent()
recordEvent()
stats.get(path, cb)

If you don't have an express application to mount the middleware, you can use the get method to write your own middleware appropriate to your server setup. Call this method to get the JSON for the REST api. path should be the relative path for the stats server (the root / will return the whole structure). The function cb should have the signature (err, result) ->. If the path doesn't match anything, err is 404.

stats.end()

The server will set up an interval timer to poll the cpu. Use this method to cancel that timer when shutting down the server.

╭╮☲☲☲╭╮

Keywords

FAQs

Last updated on 24 Jul 2014

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc