NDTS Gateway Installation
Gateway Installation
Prerequisites
- A Gateway UUID supplied by the NAN Repository administrator
- A Linux host (Ubuntu 20.04 or later recommended) that should be on the same network as the spectrometer workstations
- TCP port 60195 open inbound from those workstations
Installation Steps
# Copy the .gz file to the gateway computer tar xf data-transport-gateway-<version>.tar.gz cd dtgateway-installer sudo ./install.sh # → You will be prompted only for the Gateway UUID
Firewall
Open TCP port 60195 on the Gateway to all spectrometer workstations; no other inbound ports are required.
Verifying the Service
Note that the installer automatically runs systemctl start data-transport-gateway
after installation, but it is always good to check when installing the software that the service started.
sudo systemctl status data-transport-gateway # should show “active (running)” sudo systemctl start data-transport-gateway # start if not running
Updating the Gateway
When installing the Gateway software the installation will auto-detect if another version exists. The installation will proceed as above, but without questions as it will find the previous configuration file and use those values.
# Run the same installer script from a newer package cd dtgateway-installer sudo ./install.sh # auto-detects an existing install; no prompts
Note that the installer automatically runs systemctl restart data-transport-gateway
after upgrading, but it is always good to check when installing the software that the service started. See Verifying the Service for details
Uninstalling the Gateway
Download the latest version of the Gateway software, unpack, and run the uninstall.sh script
sudo ./uninstall.sh # script is included inside every package
Rolling Back the Gateway
Obtain the desired older package and run its install.sh
Rolling back more than one version is not recommended.
NDTS Gateway Configuration
The following are optional configuration values that can be specified in the /opt/nandt- gateway/gateway_configuration.json
file. The file must adhere to proper JSON formatting:
Configuration Options
Option | Description | Default |
---|---|---|
log_file_path | Path to write the gateway log file | /opt/nandt-gateway/nan-gateway.log |
logging_level | Minimum severity written to the log (fatal → debug) | info |
logging_format | Python logging format string for each line |
%(asctime)s %(levelname)s %(module)s [%(process)d]: %(message)s |
base_output_path | Directory used for incoming experiment data | /opt/nandt-gateway/data/received |
https_endpoint | HTTPS endpoint of the NDTS Receiver | https://receiver.usnan.org |
retry_limit | Attempts to forward each dataset to the Receiver | 5 |
retry_delay | Seconds to wait between retry attempts | 300 |
rsync_username | SSH/rsync account on the Receiver | nandt |
rsync_node | Node to which experiment files are rsync’d | receiver.usnan.org |
request_queue_size | Outstanding daemon connections accepted before new ones are rejected. Increase this value if the gateway is rejecting requests from spectrometers evident in the workstation daemon log file showing network communication errors | 50 |
Example JSON configuration file
{ "log_file_path": "/opt/nandt-gateway/nan-gateway.log", "logging_level": "info", "logging_format": "%(asctime)s %(levelname)s %(module)s [%(process)d]: %(message)s", "base_output_path": "/opt/nandt-gateway/data/received", "https_endpoint": "https://receiver.usnan.org", "retry_limit": 5, "retry_delay": 300, "rsync_username": "nandt", "rsync_node": "receiver.usnan.org", "request_queue_size": 50 }
Logging Levels
Nothing below the set log level will be logged.
Level | Description | verbosity | default |
---|---|---|---|
fatal | Critical events only | very low | |
error | Problems that must be addressed for normal operation | low | |
warning | Unusual events that generally require no action | medium | |
info | Unusual or noteworthy events (recommended for production) | high | yes |
debug | Detailed diagnostic messages useful for troubleshooting, but should not be left on for normal operation | extremely high |
NDTS Gateway Components
The NDTS Gateway consists of several key components installed under /opt/nandt-gateway
, unless otherwise noted. Each plays a specific role in data transfer, configuration, or monitoring.
File or Directory | Description |
---|---|
main.py |
Entry point for the gateway's Python-based service |
/etc/systemd/system/data-transport-gateway.service |
systemd unit file used to control the gateway service |
nan-gateway.log |
Runtime log file (location can be changed via log_file_path in config)
|
gateway_configuration.json |
Gateway configuration file containing operational parameters |
data/received/ |
Temporary storage location for incoming dataset files until data is successfully forwarded to the receiver |
data/retransmitter.pid |
Contains the PID of the process that is attempting to re-send data that previously failed to be sent to the receiver. This is used internally by the gateway software to manage retransmitting data |
data/users.dat |
Cached list of user/sample/project/study data pulled from the receiver |
data/user_checksum.dat |
Checksum file used to determine when the users.dat file should be refreshed |
All other files int the nandt-gateway
directory are for the operation of the gateway, and are not of general interest
NDTS Gateway Operation
- Experiment transfer – Workstation daemons connect on TCP 60195, announce a dataset, and stream it to
received/
. Successful transfers spawn a Transmitter process that forwards the data to the receiver; on success the local copy is deleted. - Retransmit – At start-up and after each daemon heartbeat, a Retransmitter scans
received/
. If a dataset’s original retry window has expired, it launches a new transmitter until delivery succeeds or the file is manually removed. - Heartbeat forwarding – Every daemon heartbeat is wrapped with the gateway UUID, local and UTC timestamps, then sent to the receiver by a short-lived Heartbeat Transmitter
- User list propagation – Every 15s the gateway requests an updated list from the receiver; if the checksum differs it saves the new list to
users.dat
and serves it to workstations on demand.
NDTS Gateway Logging
Logging level are controlled by the logging_level parameter in the JSON configuration file (see above)
Example log excerpt:
2022-06-06 09:22:23,130 INFO main [61393]: Starting gateway retransmitter instance... 2022-06-06 09:22:23,130 INFO main [61393]: Experiment file path = /opt/nandt-gateway/data/received 2022-06-06 09:22:23,132 INFO main [61393]: Starting gateway receiver network endpoint... 2022-06-06 09:22:23,133 INFO GatewayReceiver [61393]: Starting file receiver... 2022-06-06 09:22:23,133 INFO GatewayRetransmitter [61405]: In GatewayRetransmit handle() method... 2022-06-06 09:22:23,134 INFO GatewayRetransmitter [61405]: No experiments to retransmit -- exiting... 2022-06-06 09:22:23,134 INFO GatewayRetransmitter [61405]: GatewayRetransmit handle() method completed... 2022-06-06 09:23:12,829 INFO GatewayTransmitter [61512]: Heartbeat sent to https://receiver.usnan.org/heartbeat
From the log file note:
- The first three lines show the spawning of the retransmitter.
- The line that starts with “INFO GatewayReceiver” shows the file receiver starting, which means that it is awaiting connects from NDTS Daemons.
- The lines that contain “INFO GatewayRetransmitter” show that there are no experiments to retransmit, so the retransmitter exits.
- The last line shows that a heartbeat came in from an NDTS Daemon, and the Gateway is forwarding it to the Receiver.