# hau

> Easily track hourly daily, weekly, and monthly active users with Redis.

Latest version **0.3.0** (published 2019-12-12) · MIT license · 0 weekly downloads

## Install

```sh
npm install hau
pnpm add hau
yarn add hau
bun add hau
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.3.0 |
| Published | 2019-12-12 |
| First published | 2015-10-31 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 4 |
| Unpacked size | 21.3 KB |
| Known vulnerabilities | 0 (+6 in 3 direct dependencies) |
| Install scripts | no |
| GitHub stars | 3 |
| Author | Malcolm Ocean |
| Maintainers | malcolmocean |
| Keywords | active-user, hourly, hau, dau, wau, mau |

## Links

- npm: https://www.npmjs.com/package/hau
- Repository: https://github.com/malcolmocean/hau
- Homepage: https://github.com/malcolmocean/hau#readme
- Issues: https://github.com/malcolmocean/hau/issues
- npm.io page: https://npm.io/package/hau

## Dependencies (4)

- [async](https://npm.io/package/async.md) ~0.2.9
- [redis](https://npm.io/package/redis.md) ~2.8.0
- [moment](https://npm.io/package/moment.md) ~2.4.0
- [underscore](https://npm.io/package/underscore.md) ~1.5.2

## Alternatives

- [base64url](https://npm.io/package/base64url.md) — 6.1M weekly downloads
- [get-installed-path](https://npm.io/package/get-installed-path.md) — 502.9K weekly downloads
- [@uppy/url](https://npm.io/package/@uppy/url.md) — 185.8K weekly downloads
- [@d3fc/d3fc-shape](https://npm.io/package/@d3fc/d3fc-shape.md) — 16.2K weekly downloads
- [localizer](https://npm.io/package/localizer.md) — 226 weekly downloads

## Recent versions

- 0.3.0 (latest) — 2019-12-12
- 0.2.0 — 2015-10-31
- 0.1.2 — 2015-10-31
- 0.1.1 — 2015-10-31
- 0.1.0 — 2015-10-31

## README

# Hourly Active User

The `hau` module allows you to quickly track hourly, daily, weekly, and monthly active users in Redis.

Hourly? Yeah, [hourly](https://medium.com/@anamitra/the-shape-of-the-curve-5b869a38684a).

Check out this article to better understand library implementation: https://blog.getspool.com/2011/11/29/fast-easy-realtime-metrics-using-redis-bitmaps/

## Installing and Getting Started

You can install the `hau` module via npm. You will also need to have a [Redis server](http://redis.io) instance running.

```bash
npm install hau
```

Once `hau` is installed we need a client:

```js
var hau = require('hau');

var activity = hau.createClient(REDIS_PORT, REDIS_HOST, REDIS_OPTIONS);
```

## Tracking

###activity.track(id, [action]);

Tracking is a very simple operation:

```js
activity.track(10, 'commented');
activity.track(1);
```

Where the **id** is the id of the user you want to track and the action is the action they performed.

###activity.untrack(id, [action]);

You may also undo a tracked action for a user with `untrack`:

```js
activity.untrack(10, 'commented');
activity.untrack(1);
```

## Reporting

You can fetch the daily, weekly, and monthly active users easily:

###activity.daily([action], [date], callback);

```js
// Fetching the number of users who commented on Nov 21, 2013
activity.daily('commented', '2013-11-21', function (err, num) {
  console.log(num);
});

// Fetching the number of daily active users for the current day
activity.daily(function (err, num) {
  console.log(num);
});

// Using promises to fetch the number of users who commented on Nov 21, 2013
const { promisify } = require('util');
const activityDaily = promisify(activity.daily);
const daily = await activityDaily('commented', '2013-11-21');

// Using promises to fetch the number of daily active users for the current day
const { promisify } = require('util');
const activityDaily = promisify(activity.daily);
const daily = await activityDaily();
```

###activity.weekly([action], [date], callback);

```js
// Fetching the number of users who commented the week containing Nov 21, 2013
activity.weekly('commented', '2013-11-21', function (err, num) {
  console.log(num);
});

// Fetching the number of daily active users for the current week
activity.weekly(function (err, num) {
  console.log(num);
});
```

###activity.monthly([action], [date], callback);

```js
// Fetching the number of users who commented the month of Nov 2013
activity.monthly('commented', '2013-11', function (err, num) {
  console.log(num);
});

// Fetching the number of daily active users for the current month
activity.monthly(function (err, num) {
  console.log(num);
});
```

## Release History
* 0.0.1
    * First release (forked from [iancmyers](https://github.com/iancmyers)'s [active-user](https://github.com/iancmyers/active-user) module)
* 0.2.0
    * New updates made by [malcolmocean](https://github.com/malcolmocean)'s adding hourly support, and changing the dependency bigint to bignum
* 0.3.0
    * Remove dependency on `bignum`, now using BigInt, which is a native JS object

---
_Source: https://npm.io/package/hau · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
