https://github.com/voltstro/verdaccio-downloads-count
Tracks daily downloads count for packages. Data is stored in a Postgres database.
https://github.com/voltstro/verdaccio-downloads-count
Last synced: 4 months ago
JSON representation
Tracks daily downloads count for packages. Data is stored in a Postgres database.
- Host: GitHub
- URL: https://github.com/voltstro/verdaccio-downloads-count
- Owner: Voltstro
- License: mit
- Created: 2024-09-04T11:46:36.000Z (almost 2 years ago)
- Default Branch: master
- Last Pushed: 2024-11-14T11:54:46.000Z (over 1 year ago)
- Last Synced: 2025-10-30T19:38:02.813Z (8 months ago)
- Language: TypeScript
- Homepage: https://www.npmjs.com/package/verdaccio-downloads-count
- Size: 75.2 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE.md
Awesome Lists containing this project
README
# verdaccio-downloads-count
[](https://github.com/Voltstro/verdaccio-downloads-count/blob/master/LICENSE.md)
[](https://www.npmjs.com/package/verdaccio-downloads-count)
[](https://discord.voltstro.dev)
[](https://www.youtube.com/Voltstro)
Tracks daily downloads count for packages. Data is stored in a Postgres database.
## Features
- Tracks daily and total downloads count for packages
- Stores data in a Postgres database
There is currently no web UI or endpoints for retrieving downloads count stats, the only way is via running queries on the database.
## Getting Started
### Prerequisites
- Postgres Database (Tested on Postgres 15)
- Verdaccio 5
### Install
Install like any other Verdaccio middleware.
```
npm install verdaccio-downloads-count
```
### Configuration
To use the middleware, you will need to add the middleware to your verdaccio's config `middleware` option.
```yaml
middlewares:
downloads-count:
# (Required) Connection string to the database. Postgres connection URI. Can also be set by VDC_DB_CONNECTION_STRING env
connectionString:
# (Optional) Automatically migrates the database. Uses the postgres-migrations package for handling migrations.
migrate: true
```
### Database Configuration
You will need to configure a database for this middleware to use. You should create a standalone database for this middleware to use.
The connection string is a Postgres URI connection string. It is parsed by [pg-connection-string](https://github.com/brianc/node-postgres/blob/master/packages/pg-connection-string/README.md).
Generally, the format will look like:
```
postgres://someuser:somepassword@somehost:5432/somedatabase
```
You can set the connection string either in the config, or by setting the `VDC_DB_CONNECTION_STRING` environment variable.
For creating the schema, it is recommended to use the auto-migrations that this middleware has built in by enabling the `migrate` option in the config, otherwise the SQL migration scripts can be found in the `migrations/` directory within the package (or repo). You will need to grant the user that the middleware is using permissions to insert, create and update. If you are also using auto-migrate, you will also need to grant permissions to create tables and procedures to the user.
Currently, everything needs to be on the `public` schema.
## Querying
Since there is currently no way of getting the tracked download counts through either an API endpoint or a web interface, you will need to query the database manually (or through a dashboard/BI tool). Some example SQL queries are below.
```sql
-- Total Download Counts
SELECT * FROM public.package_total_count WHERE package_id = '';
-- Daily Download Counts for a Package Version
SELECT * FROM public.package_count WHERE package_id = '@';
```
## Why?
Why use Postgres as the datastore for storing package downloads count? Simple, currently all other packages use a different datastore for storing the data, and I already use Postgres in my stack, but not the others, and I don't currently want to introduce another one of these solutions just for storing downloads count.
Other solutions include:
- [verdaccio-install-counts](https://www.npmjs.com/package/verdaccio-install-counts) - Uses Redis
- [@xlts.dev/verdaccio-prometheus-middleware](https://www.npmjs.com/package/@xlts.dev/verdaccio-prometheus-middleware) - Uses prometheus
## Authors
* **Voltstro** - *Initial work* - [Voltstro](https://github.com/Voltstro)
## Thanks
- [verdaccio-install-counts](https://www.npmjs.com/package/verdaccio-install-counts) - Provided base example on tracking downlands count. `parseVersionFromTarballFilename` method comes from here too.