An open API service indexing awesome lists of open source software.

https://github.com/openupm/verdaccio-install-counts

The package implements API endpoints for package download counts similar to NPM
https://github.com/openupm/verdaccio-install-counts

Last synced: about 1 month ago
JSON representation

The package implements API endpoints for package download counts similar to NPM

Awesome Lists containing this project

README

        

# verdaccio-install-counts

* [Introduction](#Introduction)
* [Install](#Install)
* [API endpoints](#APIendpoints)
* [Point values](#Pointvalues)
* [Parameters](#Parameters)
* [Output](#Output)
* [Ranges](#Ranges)
* [Parameters](#Parameters-1)
* [Output](#Output-1)
* [Redis data structure](#Redisdatastructure)
* [Timeseries](#Timeseries)
* [Hashes](#Hashes)
* [Sorted sets](#Sortedsets)
* [Cron](#Cron)

## Introduction

This package implements API endpoints for package download counts similar to [the ones](https://github.com/npm/registry/blob/master/docs/download-counts.md) provided by npm, but limited to a specific package.

The stats data is stored in Redis, using [RedisTimeSeries](https://redis.io/docs/stack/timeseries/). Please refer to the [Redis data structure](#redis-data-structure) section for more information.

Note that this package does not include a widget for the Verdaccio web UI.

## Install

Install the package.
```
npm install verdaccio-install-counts
```

Update the `middlewares` seciton of verdaccio's `config.yaml`.
```
middlewares:
install-counts:
enabled: true
redis:
host: 127.0.0.1
port: 6379
password: ...
```

## API endpoints

### Point values

Gets the total downloads for a given period for a specific package.

```
GET https://127.0.0.1:4873/downloads/point/{period}/{package}
```

#### Parameters

Acceptable values for `period` for a specific package. The timezone is GMT.


all-time

Gets total downloads.

last-day

Gets downloads for the last available day.

last-week

Gets downloads for the last 7 available days.

last-month

Gets downloads for the last 30 available days.

{start_date}:{end_date}

Gets downloads for a given date range. The date format is yyyy-mm-dd.

#### Output

JSON output:

```javascript
{
"downloads": 16230,
"start": "2023-01-01",
"end": "2023-01-31",
"package": "com.example.package"
}
```

### Ranges

Gets the downloads per day for a given period for a specific package.

```
GET https://127.0.0.1:4873/downloads/range/{period}/{package}
```

#### Parameters

Same as for `/downloads/point`.

#### Output

Responses are very similar to the point API, except that downloads is now an array of days with downloads on each day:

```javascript
{
"downloads": [
{
"day": "2023-01-01",
"downloads": 540
},
..
{
"day": "2023-01-31",
"downloads": 425
}
],
"start": "2023-01-01",
"end": "2023-01-31",
"package": "com.example.package"
}
```

## Redis data structure

The stats data is stored in Redis using timeseries, hashes or sorted sets.

### Timeseries

Timeseries for daily download counts for a specific package.
```
tspkghit:daily: LABELS category tspkghit:daily pkgname
```

### Hashes

Hash for download counts for a specific package breakdown by versions.
```
pkghit:ver:
```

### Sorted sets

Sorted set for all-time download counts.
```
zpkghit:alltime
```

Sorted set for the last 30 days' download counts.
```
zpkghit:lastmonth
```

## Cron

The `zpkghit:lastmonth` sorted set requries a cron job:
```bash
VERDACCIO_CONFIG=config.yaml npm run update-lastmonth
```