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

rustle

v0.3.1

Published

Write and read aggregated time-based stats to Redis.

Downloads

3

Readme

Rustle

Rustle is a stats aggregation library which can use a number of backends for storing a fixed-size database. It is similar in design to RRD and Whisper but uses Redis, Files, Memory or any number of other backends (currently only Redis is implemented).

Each of these backends can stream an entire fixed-size database hence can be written to disk, over the network or indeed to anything in Node which is a writeStream that can accept a .pipe() from a readStream.

Example

Imagine we wanted to keep a count of the number of hits on our homepage every minute and retain all stats for one year. We'd set up a stat such as the following:

var redis = require('redis');
var rustle = require('./rustle.js');

var client = redis.createClient();

var homepageHits = rustle({
    client       : client,

    // keys are prefixed : "<domain>:<category>:<name>"
    domain       : 'cssminifier',      //
    category     : 'hits',             // 
    name         : 'homepage',         // 
    period       : 60,                 // one minute
    retention    : 365 * 24 * 60 * 60, // one year
    aggregation  : 'sum',              // average, sum, last, max, min
});

To increment the number of hits, just call ```hit```:

homepageHits.inc(function(err) {
   // ...
});

If you'd like to know which periods have info:

homepageHits.keys(function(err, keys) {
   // ...
});

If you'd like to get all the periods and their values:

homepageHits.values(function(err, periods) {
   // ...
});

If you'd like to get a subrange of values:

var opts = { from : 1374554520, to : 1374555120 };
homepageHits.values(opts, function(err, periods) {
   // ...
});

If you'd like to get a aggregate a range of values into larger periods (e.g. 5 mins):

var opts = { from : 1374554520, to : 1374555120, period : 300 };
homepageHits.values(opts, function(err, periods) {
   // ...
});

ToDo

Other commands such as the ability to get all the values between two time periods along with a periodLength to allow for more aggregation.

Author

Written by Andrew Chilton - Blog - Twitter.

License

Copyright © 2013 Andrew Chilton [email protected]. All rights reserved.

See http://chilts.mit-license.org/2013/.

(Ends)