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

data-sample

v1.0.0

Published

Continuously sample data into fixed sized buckets

Downloads

9

Readme

data-sample

Sometimes you need to continuously sample data into fixed sized buckets.

data-sample will call a sampler function a set number of times at a set interval (in milliseconds) and will return a data bucket when done. At this point it will call itself and run recursively forever.

Samplers

A sampler is a function with 2 methods: .next() which acquires the next sample and .dump() which returns the sample bucket.

Usage

sample(sampleCount, sampleRate, samplerFn, callbackFn)

Example

The following example will collect samples every second and return a 10 sample bucket every 10 seconds.

const sample = require('data-sample')
const testSampler = () => {
  let bucket = []
  return {
    next: () => bucket.push(bucket.length + 1),
    dump: () => bucket,
  }
}
sample(10, 1000, sampler, console.log)

Possible improvements

  • setInterval is unreliable so the nanotimer library is used to address this. The library is not super performant and consumes way too much CPU when running fast (eg 100ms). This should be replaced with more efficient code.
  • Might make sense to implement an event emitter and to emit buckets instead of or in addition to the callback. A callback is more immediate so might be more preferred. Events can be better scaled.
  • At the moment the loop is recursive once started. It will probably be a good idea to have an api to stop/start it or an option to run just once.