043d897cef
dspace_statistics_api/indexer.py: Catch case of no views/downloads
...
Don't fail with an exception when there are no views or downloads,
for example on a new DSpace installation.
2019-01-22 09:00:22 +02:00
40e284dac0
dspace_statistics_api/indexer.py: Query multiple shards
...
DSpace's stats-util script splits the Solr statistics core into yearly
shards. We need to use Solr's `shards` query parameter in order to get
the statistics for previous years. This commit adds a helper function
to enumerate the active Solr cores to find yearly shards matching the
statistics-YYYY pattern and add them to the query.
2019-01-22 08:39:36 +02:00
d5d2d2149b
dspace_statistics_api/database.py: Raise HTTP 500 on error
...
Properly except on database connection error and raise an HTTP 500
instead of spamming the console/log with twenty lines of text.
2018-11-10 23:58:58 +02:00
f6e866a589
dspace_statistics_api/indexer.py: Remove debug code
2018-11-07 17:51:24 +02:00
2f342be948
Refactor database code to use a context manager
...
Instead of opening one global persistent database connection when
the application I am now abstracting it to a class that I can use
in combination with Python's "with" context. Both connections and
cursors are kept for the context of each "with" block and closed
automatically when exiting.
See: https://alysivji.github.io/managing-resources-with-context-managers-pythonic.html
See: http://initd.org/psycopg/docs/connection.html#connection.close
2018-11-07 17:41:21 +02:00
cc5ce3ab98
Correct issues highlighted by Flake8
...
Flake8 validates code style against PEP 8 in order to encourage the
writing of idiomatic Python. For reference, I am currently ignoring
errors about line length (E501) because I feel it makes code harder
to read.
This is the invocation I am using:
$ flake8 --ignore E501 dspace_statistics_api
2018-11-04 00:04:27 +02:00
70dfcb93c5
dspace_statistics_api/database.py: Don't quote host in connect()
2018-11-03 22:43:05 +02:00
5f3bd61998
Allow configuration of PostgreSQL port
...
Defaults to port 5432, but can be overridden with DATABASE_PORT.
2018-11-03 22:40:45 +02:00
eb08832bf8
Sync API documentation HTML with README.md
2018-11-01 00:37:52 +02:00
30dc7f1939
Add basic API documentation on root (/)
...
I had imagined plugging in an interactive Swagger or OpenAPI instance
here, but that's actually much more involved in Falcon than I want to
deal with right now.
2018-11-01 00:19:39 +02:00
2f45d27554
dspace_statistics_api/app.py: remove unused code
...
This was added accidentally when I refactored. I was trying to see
if I could use Falcon's on_exit() hook.
2018-10-28 11:14:21 +02:00
b8356f7a87
Add "application" alias to API object
...
By default gunicorn looks for an "application" object to run, so this
saves us having to type api:app.
2018-10-28 11:14:21 +02:00
2136dc79ce
Remove shebang from indexer.py
...
This is run as a Python module now so does not need a shebang.
2018-10-28 11:14:21 +02:00
ed60120cef
Remove executable bit from indexer.py
...
Now it is run as a Python module.
2018-10-28 11:14:21 +02:00
c027f01b48
Refactor project structure
...
This follows guidance from several well-known Python best practices
guides. Basically, the idea is create a package for the application
that is comprised of several re-usable modules.
See: https://docs.python-guide.org/writing/structure/
See: https://realpython.com/python-application-layouts/
2018-10-28 11:14:21 +02:00