- Tune nginx cache validity.
- Reorganize routers internally.
- Setup GitHub actions.
- Migrate to uv.
- Add Expires and Cache-Control: max-age response headers.
- First OSS release.
- Cache access to the circuit config file.
- Improve performance of queries when filtering by multiple regions.
- Fix and improve nginx configuration:
- rewrite
/api/*
urls to match the location directives when deployed as a subapp - add header
Cache-Control: private
to the responses to prevent caching in any intermediate node - log upstream_cache_status
- log millisecond in ISO8601 format
- rewrite
- Support the alternative hierarchy view. [BBPP134-2278]
- Compile all python files.
- Configure nginx to write the cache even when the client disconnects.
- Use python:3.12-slim as base docker image and update deps.
- Breaking change: Remove from the web api the parameter
input_path
, that was used to specify the path to the circuit_config. Onlycircuit_id
is now supported. - Breaking change: Make mandatory the headers:
nexus-token
,nexus-endpoint
,nexus-bucket
. Previously, a default value was used when they were missing. - Return the app name, version, and commit in the /version endpoint, instead of path and commit.
- In case of validation error, do not return input data and log the error.
- Return 401 in case of missing or invalid nexus-* headers, instead of 422.
- Add healthcheck script.
- Ensure that logging is configured in each subprocess.
- Configure structured logs in nginx.
- Use loguru and structured logging.
- Set the required permissions from ACLs on AWS Nexus.
- Set the user id required for k8s deployment in Dockerfile.
- Ensure that the service is exposed only through the reverse proxy.
- Run the service programmatically instead of calling the uvicorn binary.
- Allow to run the image as a non-privileged user.
- Add new nexus endpoint on aws.
- Fix gpfs symlink.
- Ensure that pip doesn't use any cache.
- Add stopasgroup to supervisord to stop the app subprocesses.
Unify docker images:
- add supervisord to run nginx
- upgrade docker image to python 3.12
- change listening port to 8000
- run the image as readonly locally, to simulate the k8s deployment
- add Makefile
- update README
- Return the correct CORS headers even when returning responses cached by nginx.
- Temporarily pin libsonata==0.1.24.
- Add Nexus integration [NSETM-2283]:
- The authentication token should be provided in the
Nexus-Token
request header in all the/circuit
endpoints. If not provided, it's still possible to retrieve resources from Nexus if they aren't private, or from any explicit gpfs path if provided. - The Nexus endpoint and bucket can be specified in the request headers
Nexus-Endpoint
andNexus-Bucket
. - Support Nexus
circuit_id
instead ofinput_path
as a parameter in all the/circuit
endpoints. - Retrieve and cache the required resources from Nexus.
- Retrieve hierarchy.json from Nexus and cache the loaded RegionMap.
- Add the internal
/auth
endpoint, called by the reverse proxy to check the authorization of the user with Nexus.
- The authentication token should be provided in the
- Update CORS origins. [BBPP154-256]
- Rewrite circuit caching logic: use a LRUCache, store to disk a partial circuit config with converted node_sets.
- Execute libsonata calls in a subprocess when they are I/O bound. [NSETM-2282]
- Rename endpoint
/circuit/downsample
to/circuit/sample
. - Drop support for directly loading
.h5
files. - Upgrade Dockerfile and tests to python 3.11.
- Simplify tox.ini with docker-compose.yml.
- Tune nginx parameters:
- improve caching performance in accordance with https://www.nginx.com/blog/nginx-caching-guide/#Fine%E2%80%91Tuning-the-Cache-and-Improving-Performance
- enable gzip compression for known formats:
- The files are compressed on the fly if the client supports compression, while the cached files aren't compressed when stored.
- Files with content-type
application/vnd.apache.parquet
are not compressed, because they are already compressed by default using the snappy algorythm. - Files with content-type
application/vnd.apache.arrow.file
are not compressed, although it seems that the only compression currently supported by Arrow is dictionary compression.
- Automate release after tag: when a tag is pushed or added through the GitLab UI, the Docker images are published to the registry and a release is created.
- Tune the reverse proxy parameters:
- increase inactive time to 24h
- use min_free instead of max_size
- exclude /health and /version from the cache
- change the listening port from 8000 to 8040
- Use nginx-unprivileged as the base image for the reverse proxy.
- Add a reverse proxy in front of the service.
- When querying a circuit, check that each specified region can be resolved to region ids.
- Update
hierarchy.json
.
- Added new endpoints: /circuit/attribute_names, /circuit/attribute_dtypes, /circuit/attribute_values
- Changed /circuit/downsample from GET to POST.
- Fix json serialization in case of validation error with pydantic v2.
- Move query parameters to arguments.
- Upgrade to Pydantic v2.
- Upgrade requirements.txt.
- Forbid extra attributes in POST endpoints, to prevent potential mistakes in query parameters.
- The endpoint
/circuit/count
now accepts only 0 (all) or 1 node populations, for consistency with other endpoints. - Explicitly require libsonata>=0.1.24 where toJSON() correctly serializes node_sets with node_id.
- Raise the error "nodesets with node_id aren't currently supported" only when it's specified a node_set referencing node_id, directly or in a compound expression.
- Improve error handling.
- Add new POST endpoint
/circuit/query
to support filtering nodes by any attribute [NSETM-2210]
- Generalize query function in libsonata helper [BBPP134-280]
- Support getting nodes by node_set.
- Allow node_set look ups to happen on cached files.
- Cleanup cache.py and move libsonata functions.
- Remove randomaccessbuffer library.
- Add endpoint
/circuit/node_sets
. - Upgrade to python 3.10.