1
0
mirror of https://github.com/ilri/dspace-statistics-api.git synced 2024-11-05 06:23:00 +01:00
dspace-statistics-api/README.md

84 lines
3.5 KiB
Markdown
Raw Normal View History

2018-10-31 22:14:38 +01:00
# DSpace Statistics API [![Build Status](https://travis-ci.org/ilri/dspace-statistics-api.svg?branch=master)](https://travis-ci.org/ilri/dspace-statistics-api)
2018-11-01 14:58:12 +01:00
DSpace stores item view and download events in a Solr "statistics" core for use in its user interfaces, but does not expose this information externally via any APIs. The DSpace 4+ [REST API](https://wiki.duraspace.org/display/DSDOC5x/REST+API), for example, only exposes information about communities, collections, item metadata, and bitstreams.
2018-10-31 23:08:24 +01:00
2018-11-01 14:58:12 +01:00
This project contains an indexer and a [Falcon-based](https://falcon.readthedocs.io/) web application to make the statistics available via simple REST API. You can read more about the Solr queries used to gather the item view and download statistics on the [DSpace wiki](https://wiki.duraspace.org/display/DSPACE/Solr).
2018-09-18 13:11:29 +02:00
2018-09-27 07:57:27 +02:00
## Requirements
- Python 3.5+
2018-09-27 11:45:15 +02:00
- PostgreSQL version 9.5+ (due to [`UPSERT` support](https://wiki.postgresql.org/wiki/UPSERT))
2018-11-01 14:45:53 +01:00
- DSpace 4/5/6 with [Solr usage statistics enabled](https://wiki.duraspace.org/display/DSDOC5x/SOLR+Statistics) (might work with others)
2018-09-18 13:09:29 +02:00
2018-10-03 10:12:18 +02:00
## Installation and Testing
Create a Python virtual environment and install the dependencies:
2018-09-18 13:09:29 +02:00
2018-09-25 11:07:58 +02:00
$ python -m venv venv
2018-09-18 13:09:29 +02:00
$ . venv/bin/activate
$ pip install -r requirements.txt
2018-10-03 10:12:18 +02:00
2018-10-14 17:45:40 +02:00
Set up the environment variables for Solr and PostgreSQL:
2018-10-03 10:12:18 +02:00
$ export SOLR_SERVER=http://localhost:8080/solr
2018-10-14 17:45:40 +02:00
$ export DATABASE_NAME=dspacestatistics
$ export DATABASE_USER=dspacestatistics
$ export DATABASE_PASS=dspacestatistics
$ export DATABASE_HOST=localhost
2018-10-17 08:50:30 +02:00
Index the Solr statistics core to populate the PostgreSQL database:
$ python -m dspace_statistics_api.indexer
2018-10-17 08:50:30 +02:00
Run the REST API:
$ gunicorn dspace_statistics_api.app
2018-09-18 13:09:29 +02:00
2018-10-17 08:50:30 +02:00
Test to see if there are any statistics:
$ curl 'http://localhost:8000/items?limit=1'
## Deployment
There are example systemd service and timer units in the `contrib` directory. The API service listens on localhost by default so you will need to expose it publicly using a web server like nginx.
An example nginx configuration is:
```
server {
#...
location ~ /rest/statistics/?(.*) {
access_log /var/log/nginx/statistics.log;
proxy_pass http://statistics_api/$1$is_args$args;
}
}
upstream statistics_api {
server 127.0.0.1:5000;
}
```
This would expose the API at `/rest/statistics`.
## Using the API
The API exposes the following endpoints:
- GET `/`return a basic API documentation page.
- GET `/items`return views and downloads for all items that Solr knows about¹. Accepts `limit` and `page` query parameters for pagination of results (`limit` must be an integer between 1 and 100, and `page` must be an integer greater than or equal to 0).
- GET `/item/id`return views and downloads for a single item (`id` must be a positive integer). Returns HTTP 404 if an item id is not found.
The item id is the *internal* id for an item. You can get these from the standard DSpace REST API.
2018-10-31 23:37:40 +01:00
¹ We are querying the Solr statistics core, which technically only knows about items that have either views or downloads. If an item is not present here you can assume it has zero views and zero downloads, but not necessarily that it does not exist in the repository.
2018-09-18 13:19:14 +02:00
## Todo
2018-10-17 08:51:35 +02:00
- Close DB connection when gunicorn shuts down gracefully
2018-09-23 23:35:00 +02:00
- Better logging
- Tests
2018-09-27 08:17:45 +02:00
- Check if database exists (try/except)
2018-10-03 10:12:18 +02:00
- Version API
- Use JSON in PostgreSQL
- Switch to [Python 3.6+ f-string syntax](https://realpython.com/python-f-strings/)
2018-09-18 13:19:14 +02:00
2018-09-18 13:16:07 +02:00
## License
This work is licensed under the [GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html).