1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
//! Reductionist is a web service that provides an API to perform reductions on numerical data
//! stored in an S3-compatible object store. By implementing these reductions in the storage
//! system the volume of data that needs to be transferred to the end user is vastly reduced,
//! leading to faster computations.
//!
//! The work is funded by the
//! [ExCALIBUR project](https://www.metoffice.gov.uk/research/approach/collaboration/spf/excalibur)
//! and is done in collaboration with the
//! [University of Reading](http://www.reading.ac.uk/).
//!
//! This site provides documentation for the Reductionist source code.
//! Documentation for the Reductionist application is hosted on [GitHub](https://stackhpc.github.io/reductionist-rs).
//!
//! This is a performant implementation of the Active Storage Server.
//! The original Python functional prototype is available
//! [here](https://github.com/stackhpc/s3-active-storage-prototype).
//!
//! ## Features
//!
//! Reductionist provides the following features:
//!
//! * HTTP(S) API with JSON request data
//! * Access to data stored in S3-compatible storage
//! * Basic numerical operations on multi-dimensional arrays (count, min, max, select, sum)
//! * Perform calculations on a selection/slice of an array
//! * Perform calculations allowing for missing data
//! * Compressed data (GZip, Zlib)
//! * Filtered data (byte shuffle)
//! * Data with non-native byte order (endianness)
//! * Server resource (CPU, memory, files) management
//! * [Prometheus](https://prometheus.io/) metrics
//! * Tracing with an option to send data to [Jaeger](https://www.jaegertracing.io/)
//! * Ansible-based containerised deployment
//!
//! Reductionist is built on top of a number of open source components.
//!
//! * [Tokio](tokio), the most popular asynchronous Rust runtime.
//! * [Axum](axum) web framework, built by the Tokio team. Axum performs well in [various](https://github.com/programatik29/rust-web-benchmarks/blob/master/result/hello-world.md) [benchmarks](https://web-frameworks-benchmark.netlify.app/result?l=rust)
//! and is built on top of various popular components, including the [hyper] HTTP library.
//! * [Serde](serde) performs (de)serialisation of JSON request and response data.
//! * [AWS SDK for S3](aws-sdk-s3) is used to interact with S3-compatible object stores.
//! * [ndarray] provides [NumPy](https://numpy.orgq)-like n-dimensional arrays used in numerical
//! computation.
//!
//! ## Related projects
//!
//! * [PyActiveStorage](https://github.com/valeriupredoi/PyActiveStorage) is a Python library which performs reductions on numerical data in data sources such as netCDF4. It has support for delegating computation to Reductionist when the data is stored in an S3-compatible object store.
pub mod app;
pub mod array;
pub mod cli;
pub mod compression;
pub mod error;
pub mod filter_pipeline;
pub mod filters;
pub mod metrics;
pub mod models;
pub mod operation;
pub mod operations;
pub mod resource_manager;
pub mod s3_client;
pub mod server;
#[cfg(test)]
pub mod test_utils;
pub mod tracing;
pub mod types;
pub mod validated_json;