Rust backend for NaluDAQ
Project description
NaluDAQ_rs
Rust backend for NaluDaq.
Setup
Make sure the Rust toolchain is installed.
Clone the repository to a suitable location:
git clone https://github.com/NaluScientific/naludaq_rs.git
Done!
Building the backend for python
pip install maturin
maturin build
Building the Backend
The backend is easy to build:
cd naludaq_rs
cargo build --release
Developers may ommit the --release
flag for unoptimized builds.
Building for RPI4
Building using docker:
docker build . -t cc/rpi4
to make the container, the build the app with:
docker run --rm -v ${pwd}:/app cc/rpi4
Running the Backend
To run the backend, run the following command:
cargo run --release -- [<ROOT>] [--addr <ADDR>] [-d | --debug] [--api]
Where the arguments are as follows:
<ROOT>
is the root directory to run the server in. By default, it is the current working directory of the terminal it was run from.--addr <ADDR>
is the address to bind the server to in the formatIP:PORT
. If unspecified, the server is bound to an open port on the loopback address.-d | --debug
shows additional debug messages.--api
will open the Swagger UI in the system browser.
Documentation
The documentation can be built using the following command:
cargo doc --document-private-items --no-deps
The API
NaluDAQ_rs is controlled through its REST API over HTTP. This allows it to be controlled from any machine connected to a network.
The backend can be controlled on the fly via Swagger. Use the --api
flag when starting the backend to display the Swagger UI.
Alternatively, the (non-interactive) Swagger UI may be viewed without the backend by running the following command:
cargo run --bin api -- [--output OUTPUT_FILE]
If the --output
argument is provided, the OpenAPI JSON data describing
the API is written to the file and the program will immediately exit.
Developers
Profiling
Use the build profile called `release-with-debug for building release mode with debug symbols.
cargo build --profile release-with-debug
On Windows machines with Intel processors you can use Intel VTune to profile the backend.
Building the Documentation
cargo doc --open
Tweaking Dependencies
The crate depends on a couple crates published to crates.io. If you are touching these dependencies and wish to test out your changes without
publishing the crates, clone the dependencies and change these lines in Cargo.toml
:
# naluacq = "X.X.X"
# ft60x_rs = "X.X.X"
naluacq = { "path" = "path/to/naluacq" }
ft60x_rs = { "path" = "path/to/ft60x-rs" }
Architecture
Below is a non-exhaustive diagram of the architecture of the backend highlighting only the main components and their interactions.
graph LR
Board[Board]
Connection[Connection]
Disk[Disk]
subgraph workers [Workers]
Worker_Connection[Connection Worker]
Worker_Package[Package Worker]
Worker_Storage[Storage Worker]
Worker_Answer[Answer Worker]
Worker_Answer_Buffer[Answer Buffer]
end
subgraph server [Server Endpoints]
Endpt_Configure_Workers[Configure Workers]
Endpt_Send_Command[Send Command]
Endpt_Recv_Answer[Receive Answer]
Endpt_Fetch_Event[Fetch Event]
Endpt_Manage_Connection[Manage Connection]
end
Board -->|Readout/Answer| Connection
Connection -->|Board Output| Worker_Connection
Connection -->|Command| Board
Worker_Connection -->|Board Output| Worker_Package
Worker_Package -->|Event| Worker_Storage
Worker_Package -->|Answer| Worker_Answer
Worker_Storage -->|Event| Disk
Worker_Answer -->|Answer| Worker_Answer_Buffer
Endpt_Send_Command -->|Command| Connection
Worker_Answer_Buffer -->|Answer| Endpt_Recv_Answer
Disk -->|Event| Endpt_Fetch_Event
Endpt_Manage_Connection -->|Configuration| Connection
Endpt_Configure_Workers -->|Configuration| Worker_Package
Endpt_Configure_Workers -->|Configuration| Worker_Storage
Endpt_Configure_Workers -->|Configuration| Worker_Answer
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Hashes for naludaq_rs-0.2.8-cp39-abi3-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bb87bbbeac89973106aa3c6ea9a61dd4820a0fc9810d4696a8ca0fc4c0ce5ec3 |
|
MD5 | a331408d17d41ba3046ff2053246d8d0 |
|
BLAKE2b-256 | 35a0d6c3a378e8eb175eefd7198f255773a02317ed0258c5b403f2a3182e6f00 |
Hashes for naludaq_rs-0.2.8-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 56fd3942259a880bf3b283e4e6c68a93dc2cb5e31d2acf8971a485498f119dc2 |
|
MD5 | 191be85ed47f2e644c2a69099b9ec627 |
|
BLAKE2b-256 | c8a1c8ed4d41d5fdb3a407bdbd76c5f1d983d988dd2a8d93ba153dca8d9cf57b |
Hashes for naludaq_rs-0.2.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3142cf6aa7e7ae248678522520f66bca84490a59c550422eb3cd2f7377a97f35 |
|
MD5 | 1406a3cc3aafbf6e740126427ec81187 |
|
BLAKE2b-256 | b6604bf214defa5845785aeefe93db07f5a578de235614b290af64ccb185ec4f |
Hashes for naludaq_rs-0.2.8-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2ade376cbef9aa619f3bb8f4b24153d784970c4499b325ef02cc40040a5793cb |
|
MD5 | 66f15b3f4b795579b4bc9c3366ef41fd |
|
BLAKE2b-256 | 0ae4ec52a98a3b711c1d26db6c781ec9b86aa1cbac062e340f5b432182032914 |