Database for IGN projects and samples, with RESTful interface. Built on top of Tornado and CouchDB.
The RESTful API is documented at http://charon.scilifelab.se/apidoc .
Note that each call to the API must include an API token which is the only mechanism used for authentication in the API. The API token is specific for the user account, and is available in the user page for the account.
A number of code examples for using the API can be found in the
nosetest test_*.py
files.
The nosetest examples require that the environment variables CHARON_API_TOKEN and CHARON_BASE_URL are set.
The API is designed such that all data sent to and received from the interface is JSON containing pure application data. Metadata, such as the API access token, is passed as a HTTP header item, so as not to clutter up the data namespace. This also allows for sending other types of data as body content, such as images, which cannot contain API access tokens.
Tip: Use the requests package for all HTTP client code. It is way better than the urllib2 package in the standard Python distribution.
The development server is at http://charon-dev.scilifelab.se/ . It is currently reachable only from within SciLifeLab Stockholm.
Charon-dev is deployed under the user account hiseq.bioinfo, in an
anaconda virtual anvironment named charon_env
. The logfile is located
within the repo at ~/opt/charon/charon/charon.log
.
To update Charon, move to the repo and execute git pull
. If the
modifications are not automatically reloaded by Tornado (a change in
the configuration files, for instance) kill the current charon
process, and start it again.
Note that the working directory needs to be the one containing
app_charon.py
. The configuration file tools-dev.yaml
is located
there as well. It's not saved on github.
We should be getting an upstart configuration to do that properly soon.
The tables from the production couchdb server are replicated daily to the dev server. This should be deactivated for Charon, but if that is switched on again for whatever reason, Charon-dev will fail, since we will get more than one document with the same key.
On a daily basis, the content of couchdb is dumped to the disk. If something goes wrong, it is possible to reinitialise the database with the dumps.
dump.py
: Dumps the current state of the database intodump.tar.gz
.python init_database.py
: Deletes the current database (Warning!), uploads the JavaScript index functions, and tries to upload thedump.tar.gz
file to the database.
The Apache server handles the redirect from the domain name to the Tornado
server which runs on port 8881. See /etc/httpd/conf/httpd.conf
.
The Tornado web server process is run under the user account hiseq.bioinfo
.
The production server is available at http://charon.scilifelab.se/ and is reachable from outside SciLifeLab to approved accounts, which are set up using Userman at http://userman.scilifelab.se/ .
The production server is upgraded in a similar way as the development server.
Do the following as user hiseq.bioinfo
.
The source code used in production is located in:
~/anaconda/envs/charon_env/lib/python2.6/site-packages/charon
The configuration file tools.yaml is located in:
~/opt/charon/charon
The log file charon.log is located in:
~/opt/charon/charon
This is due to the fact that hiseq.bioinfo
does not belong to a
group allowed to write in /var/log
.
The production server is upgraded thus:
$ source ~/anaconda/bin/activate charon_env
$ cd ~/opt/charon;git pull; python setup.py install
The production server is currently started manually by hiseq.bioinfo
$ source ~/anaconda/bin/activate charon_env
$ cd ~/opt/charon/charon
$ python app_charon.py tools.yaml &