1
0
mirror of https://github.com/ilri/dspace-statistics-api.git synced 2024-12-22 12:42:19 +01:00

app.py: Get item statistics from SQLite database

It is much more efficient to cache view and download statistics in
a database than to query Solr on demand (not to mention that it is
not possible to page easily with facets in Solr). I decided to use
SQLite because it is fast, native in Python 3, and doesn't require
any extra steps during provisioning (assuming permissions are ok).
This commit is contained in:
Alan Orth 2018-09-23 16:47:00 +03:00
parent ea85393b13
commit 9e942736b1
Signed by: alanorth
GPG Key ID: 0FB860CC9C45B1B9
3 changed files with 30 additions and 13 deletions

30
app.py
View File

@ -3,29 +3,33 @@
# https://wiki.duraspace.org/display/DSPACE/Solr
from config import SOLR_CORE
from database import database_connection
import falcon
from solr import solr_connection
db = database_connection()
solr = solr_connection()
class ItemResource:
def on_get(self, req, resp, item_id):
"""Handles GET requests"""
# Get views
res = solr.query(SOLR_CORE, {
'q':'type:2 AND id:{0}'.format(item_id),
'fq':'isBot:false AND statistics_type:view'
}, rows=0)
cursor = db.cursor()
# get item views (and catch the TypeError if item doesn't have any views)
cursor.execute('SELECT views FROM itemviews WHERE id={0}'.format(item_id))
try:
views = cursor.fetchone()['views']
except:
views = 0
views = res.get_num_found()
# get item downloads (and catch the TypeError if item doesn't have any downloads)
cursor.execute('SELECT downloads FROM itemdownloads WHERE id={0}'.format(item_id))
try:
downloads = cursor.fetchone()['downloads']
except:
downloads = 0
# Get downloads
res = solr.query(SOLR_CORE, {
'q':'type:0 AND owningItem:{0}'.format(item_id),
'fq':'isBot:false AND statistics_type:view AND bundleName:ORIGINAL'
}, rows=0)
downloads = res.get_num_found()
cursor.close()
statistics = {
'id': item_id,

View File

@ -4,4 +4,6 @@ import os
SOLR_SERVER = os.environ.get('SOLR_SERVER', 'http://localhost:8080/solr')
SOLR_CORE = os.environ.get('SOLR_CORE', 'statistics')
SQLITE_DB = os.environ.get('SQLITE_DB', 'statistics.db')
# vim: set sw=4 ts=4 expandtab:

11
database.py Normal file
View File

@ -0,0 +1,11 @@
from config import SQLITE_DB
import sqlite3
def database_connection():
connection = sqlite3.connect(SQLITE_DB)
# allow iterating over row results by column key
connection.row_factory = sqlite3.Row
return connection
# vim: set sw=4 ts=4 expandtab: