event-rank

EventRank implementation in TypeScript

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
event-rank
2120.0.107 years ago8 years agoMinified + gzip package size for event-rank in KB

Readme

EventRank

npm version Build Status

Overview

Usage Notes

This library uses the es2015 Set type, Object.assign, and Array.from, so you may need an es6/es2015 polyfill if your environment does not support those features.

Algorithms

Installation

npm
npm install --save event-rank

Usage

To calculate EventRanks of correspondents involved in a series of events sorted by time...
import { EventRank } from 'event-rank';

/**
  * Events should be an Array of objects of the form...
  *    { time: <Number>, to: <String|Array<String>>, from: <String> }
  * sorted by the time property.
  *
  * NOTE: default parameters assume time is in milliseconds since the epoch
  */
const events = [ /* Add events here... */ ];

const R = new EventRank({ events });

// compute EventRank values
R.compute();

console.log(R.ranks); // => { ranks... }


/**
  * To lazily compute a stream of events, call step()...
  *
  * Note, the model will need to be initially fed a set of
  * correspondents to track
  */

const correspondents = [
  // email address (or whatever is in the to/from properties of the events) 1...
  // email address 2...
];

const R = new EventRank({ correspondents });

eventStream.on('event', event => {
  R.step(event);
});

// if lazily computing, the ranks need to be finished by calling done();
R.done();

console.log(R.ranks); // => { ranks... }


/**
 * If 2 (or more) events can occur at the exact same time,
 * EventRank can process "bucketed" events...
 */

const correspondents = [
  // email address 1...
  // email address 2...
];

const R = new EventRank({ correspondents });

let bucket;
eventStream.on('event', event => {
  if (bucket && bucket.time !== event.time) {
    R.step(bucket);
    bucket = { events: [ event ], time: event.time };
  } else if (!bucket) {
    bucket = { events: [ event ], time: event.time };
  } else {
    bucket.events.push(event);
  }
});

// include last bucket...
R.step(bucket);

// if lazily computing, the ranks need to be finished by calling done();
R.done();

console.log(R.ranks); // => { ranks... }