YAML
The NOS-T Tools library requires a Yet Another Markup Language (YAML) configuration file. This file adopts a format similar to AsyncAPI to define the connection configuration for the RabbitMQ broker and Keycloak authentication servers.
Configuration Overview
The YAML files is composed of the following sections:
Info: Contains metadata about the YAML configuration file.
Servers: Contains the connection configuration for the RabbitMQ broker and Keycloak authentication servers.
Execution: Contains the execution configuration for the NOS-T Tools library.
Channels: Contains the channel configuration for the NOS-T Tools library.
Each section is explained in detail below.
Info Section
Contains metadata about the configuration file. This does not influence the operation of the NOS-T Tools library, it is merely for documentation and informational purposes.
- pydantic model InfoConfig
Show JSON schema
{ "title": "InfoConfig", "type": "object", "properties": { "title": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Title of the simulation.", "title": "Title" }, "version": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Version of the simulation.", "title": "Version" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Description of the simulation.", "title": "Description" } } }
Example:
info:
title: Novel Observing Strategies Testbed (NOS-T) YAML Configuration
version: '1.0.0'
description: Version-controlled configuration file for Snow Observing Systems (SOS) project
Servers Section
Defines connection parameters for the RabbitMQ message broker and Keycloak authentication server.
RabbitMQ Configuration
- pydantic model RabbitMQConfig
Show JSON schema
{ "title": "RabbitMQConfig", "type": "object", "properties": { "keycloak_authentication": { "default": false, "description": "Keycloak authentication for RabbitMQ.", "title": "Keycloak Authentication", "type": "boolean" }, "tls": { "default": false, "description": "RabbitMQ TLS/SSL.", "title": "Tls", "type": "boolean" }, "reconnect_delay": { "default": 10, "description": "Reconnection delay, in seconds.", "title": "Reconnect Delay", "type": "integer" }, "queue_max_size": { "default": 5000, "description": "Maximum size of the RabbitMQ queue.", "title": "Queue Max Size", "type": "integer" }, "content_type": { "default": null, "description": "RabbitMQ MIME content type (application/json, text/plain, etc.).", "title": "Content Type", "type": "string" }, "content_encoding": { "default": null, "description": "RabbitMQ MIME content encoding (gzip, deflate, etc.).", "title": "Content Encoding", "type": "string" }, "headers": { "additionalProperties": { "type": "string" }, "default": null, "description": "RabbitMQ message headers (key-value pairs).", "title": "Headers", "type": "object" }, "delivery_mode": { "default": null, "description": "RabbitMQ delivery mode (1: non-persistent, 2: durable).", "title": "Delivery Mode", "type": "integer" }, "priority": { "default": null, "description": "RabbitMQ message priority (0-255).", "title": "Priority", "type": "integer" }, "correlation_id": { "default": null, "description": "RabbitMQ correlation ID for message tracking.", "title": "Correlation Id", "type": "string" }, "reply_to": { "default": null, "description": "RabbitMQ reply-to queue for response messages.", "title": "Reply To", "type": "string" }, "message_expiration": { "default": null, "description": "RabbitMQ expiration, in milliseconds.", "title": "Message Expiration", "type": "string" }, "message_id": { "default": null, "description": "RabbitMQ message ID for tracking.", "title": "Message Id", "type": "string" }, "timestamp": { "default": null, "description": "RabbitMQ message timestamp.", "format": "date-time", "title": "Timestamp", "type": "string" }, "type": { "default": null, "description": "RabbitMQ message type (e.g., 'text', 'json').", "title": "Type", "type": "string" }, "user_id": { "default": null, "description": "RabbitMQ user ID for authentication.", "title": "User Id", "type": "string" }, "app_id": { "default": null, "description": "RabbitMQ application ID for tracking.", "title": "App Id", "type": "string" }, "cluster_id": { "default": null, "description": "RabbitMQ cluster ID for tracking.", "title": "Cluster Id", "type": "string" }, "host": { "default": "localhost", "description": "RabbitMQ host.", "title": "Host", "type": "string" }, "port": { "default": 5672, "description": "RabbitMQ port.", "title": "Port", "type": "integer" }, "virtual_host": { "default": "/", "description": "RabbitMQ virtual host.", "title": "Virtual Host", "type": "string" }, "channel_max": { "default": 65535, "description": "RabbitMQ maximum number of channels per connection.", "title": "Channel Max", "type": "integer" }, "frame_max": { "default": 131072, "description": "RabbitMQ maximum frame size in bytes.", "title": "Frame Max", "type": "integer" }, "heartbeat": { "default": null, "description": "RabbitMQ heartbeat interval, in seconds.", "title": "Heartbeat", "type": "integer" }, "connection_attempts": { "default": 1, "description": "RabbitMQ connection attempts before giving up.", "title": "Connection Attempts", "type": "integer" }, "retry_delay": { "default": 2, "description": "RabbitMQ retry delay, in seconds.", "title": "Retry Delay", "type": "integer" }, "socket_timeout": { "default": 10, "description": "RabbitMQ socket timeout, in seconds.", "title": "Socket Timeout", "type": "integer" }, "stack_timeout": { "default": 15, "description": "RabbitMQ stack timeout, in seconds.", "title": "Stack Timeout", "type": "integer" }, "locale": { "default": "en_US", "description": "RabbitMQ locale.", "title": "Locale", "type": "string" }, "blocked_connection_timeout": { "default": null, "description": "Timeout for blocked connections.", "title": "Blocked Connection Timeout", "type": "integer" } } }
- Fields:
Example:
servers:
rabbitmq:
keycloak_authentication: False
host: "localhost"
port: 5672
tls: False
virtual_host: "/"
message_expiration: "60000"
delivery_mode: 2
content_type: "text/plain"
heartbeat: 600
connection_attempts: 3
retry_delay: 5
reconnect_delay: 10
blocked_connection_timeout: 300
queue_max_size: 1000
frame_max: 131072
socket_timeout: 10.0
stack_timeout: 15.0
Keycloak Configuration
- pydantic model KeycloakConfig
Show JSON schema
{ "title": "KeycloakConfig", "type": "object", "properties": { "host": { "default": "localhost", "description": "Keycloak host.", "title": "Host", "type": "string" }, "port": { "default": 8080, "description": "Keycloak port.", "title": "Port", "type": "integer" }, "realm": { "default": "master", "description": "Keycloak realm.", "title": "Realm", "type": "string" }, "tls": { "default": false, "description": "Keycloak TLS/SSL.", "title": "Tls", "type": "boolean" }, "token_refresh_interval": { "default": 240, "description": "Keycloak token refresh interval, in seconds.", "title": "Token Refresh Interval", "type": "integer" } } }
Example:
keycloak:
host: "nost.smce.nasa.gov"
port: 8443
tls: True
token_refresh_interval: 240
realm: "NOS-T"
Execution Section
Defines parameters controlling simulation execution and time management.
General Configuration
- pydantic model GeneralConfig
Show JSON schema
{ "title": "GeneralConfig", "type": "object", "properties": { "prefix": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": "nost", "description": "Execution prefix.", "title": "Prefix" }, "wallclock_offset_refresh_interval": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": 10800, "description": "Wallclock offset refresh interval, in seconds.", "title": "Wallclock Offset Refresh Interval" }, "ntp_host": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": "pool.ntp.org", "description": "NTP host for wallclock offset synchronization.", "title": "Ntp Host" }, "resume_tolerance": { "anyOf": [ { "format": "duration", "type": "string" }, { "type": "null" } ], "default": "PT12H", "description": "Default time tolerance for resume requests (HH:MM:SS format in YAML).", "title": "Resume Tolerance" } } }
- Fields:
Example:
execution:
general:
prefix: sos
wallclock_offset_refresh_interval: 10800
ntp_host: "pool.ntp.org"
resume_tolerance: "12:00:00"
Logging Configuration
File logging can be enabled per-application through the YAML configuration. Logging parameters are inherited by ApplicationConfig, ManagerConfig, and ManagedApplicationConfig. When enable_file_logging is set to True, the configure_file_logging() method is automatically called during start_up().
- pydantic model LoggingConfig
Configuration for logging.
Show JSON schema
{ "title": "LoggingConfig", "description": "Configuration for logging.", "type": "object", "properties": { "enable_file_logging": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "default": false, "description": "Enable file logging.", "title": "Enable File Logging" }, "log_dir": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": "logs", "description": "Directory path for log files.", "title": "Log Dir" }, "log_filename": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Path to the log file.", "title": "Log Filename" }, "log_level": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": "INFO", "description": "Logging level (DEBUG, INFO, WARNING, ERROR, CRITICAL).", "title": "Log Level" }, "max_bytes": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": 10485760, "description": "Maximum size of the log file in bytes. Default is 10MB.", "title": "Max Bytes" }, "backup_count": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": 5, "description": "Number of backup log files to keep.", "title": "Backup Count" }, "log_format": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": "%(asctime)s [%(levelname)s] %(name)s: %(message)s", "description": "Format of the log messages.", "title": "Log Format" } } }
- Fields:
Unmanaged application logging example:
applications:
dashboard:
enable_file_logging: True
log_dir: "logs"
log_level: "INFO"
Manager logging example:
manager:
enable_file_logging: True
log_dir: "logs"
log_level: "DEBUG"
max_bytes: 10485760
backup_count: 5
Managed application logging example:
managed_applications:
planner:
enable_file_logging: True
log_dir: "logs"
log_level: "INFO"
max_bytes: 5242880
backup_count: 3
Application Configuration
Configures unmanaged applications (those that do not receive commands from a Manager). Each application is identified by name under the execution.applications dictionary. Application-specific parameters can be defined under configuration_parameters.
- pydantic model ApplicationConfig
Show JSON schema
{ "title": "ApplicationConfig", "type": "object", "properties": { "enable_file_logging": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "default": false, "description": "Enable file logging.", "title": "Enable File Logging" }, "log_dir": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": "logs", "description": "Directory path for log files.", "title": "Log Dir" }, "log_filename": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Path to the log file.", "title": "Log Filename" }, "log_level": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": "INFO", "description": "Logging level (DEBUG, INFO, WARNING, ERROR, CRITICAL).", "title": "Log Level" }, "max_bytes": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": 10485760, "description": "Maximum size of the log file in bytes. Default is 10MB.", "title": "Max Bytes" }, "backup_count": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": 5, "description": "Number of backup log files to keep.", "title": "Backup Count" }, "log_format": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": "%(asctime)s [%(levelname)s] %(name)s: %(message)s", "description": "Format of the log messages.", "title": "Log Format" }, "set_offset": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "default": true, "description": "Set offset.", "title": "Set Offset" }, "time_scale_factor": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": 1.0, "description": "Time scale factor.", "title": "Time Scale Factor" }, "time_step": { "anyOf": [ { "format": "duration", "type": "string" }, { "type": "null" } ], "default": "PT1S", "description": "Time step for swe_change.", "title": "Time Step" }, "time_status_step": { "anyOf": [ { "format": "duration", "type": "string" }, { "type": "null" } ], "default": "PT10S", "description": "Time status step.", "title": "Time Status Step" }, "time_status_init": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ], "default": "2026-04-15T19:20:10.926833", "description": "Time status init.", "title": "Time Status Init" }, "shut_down_when_terminated": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "default": false, "description": "Shut down when terminated.", "title": "Shut Down When Terminated" }, "manager_app_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": "manager", "description": "Manager application name.", "title": "Manager App Name" }, "configuration_parameters": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "default": null, "description": "Application-specific configuration parameters.", "title": "Configuration Parameters" } } }
- Fields:
- field log_format: str | None = '%(asctime)s [%(levelname)s] %(name)s: %(message)s'
Format of the log messages.
Example:
applications:
dashboard:
set_offset: False
shut_down_when_terminated: True
enable_file_logging: True
log_dir: "logs"
log_level: "INFO"
configuration_parameters:
refresh_rate: 5
Manager Configuration
- pydantic model ManagerConfig
Show JSON schema
{ "title": "ManagerConfig", "type": "object", "properties": { "enable_file_logging": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "default": false, "description": "Enable file logging.", "title": "Enable File Logging" }, "log_dir": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": "logs", "description": "Directory path for log files.", "title": "Log Dir" }, "log_filename": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Path to the log file.", "title": "Log Filename" }, "log_level": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": "INFO", "description": "Logging level (DEBUG, INFO, WARNING, ERROR, CRITICAL).", "title": "Log Level" }, "max_bytes": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": 10485760, "description": "Maximum size of the log file in bytes. Default is 10MB.", "title": "Max Bytes" }, "backup_count": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": 5, "description": "Number of backup log files to keep.", "title": "Backup Count" }, "log_format": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": "%(asctime)s [%(levelname)s] %(name)s: %(message)s", "description": "Format of the log messages.", "title": "Log Format" }, "sim_start_time": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ], "default": null, "description": "Simulation start time.", "title": "Sim Start Time" }, "sim_stop_time": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ], "default": null, "description": "Simulation stop time.", "title": "Sim Stop Time" }, "start_time": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ], "default": null, "description": "Execution start time.", "title": "Start Time" }, "time_step": { "default": "PT1S", "description": "Time step for the simulation.", "format": "duration", "title": "Time Step", "type": "string" }, "time_scale_factor": { "default": 1.0, "description": "Time scale factor.", "title": "Time Scale Factor", "type": "number" }, "time_status_step": { "anyOf": [ { "format": "duration", "type": "string" }, { "type": "null" } ], "default": null, "description": "Time status step.", "title": "Time Status Step" }, "time_status_init": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ], "default": null, "description": "Time status init.", "title": "Time Status Init" }, "command_lead": { "default": "PT0S", "description": "Command lead time.", "format": "duration", "title": "Command Lead", "type": "string" }, "required_apps": { "description": "List of required applications.", "items": { "type": "string" }, "title": "Required Apps", "type": "array" }, "init_retry_delay_s": { "default": 5, "description": "Initial retry delay in seconds.", "title": "Init Retry Delay S", "type": "integer" }, "init_max_retry": { "default": 5, "description": "Initial maximum retry attempts.", "title": "Init Max Retry", "type": "integer" }, "set_offset": { "default": true, "description": "Set offset.", "title": "Set Offset", "type": "boolean" }, "shut_down_when_terminated": { "default": false, "description": "Shut down when terminated.", "title": "Shut Down When Terminated", "type": "boolean" }, "is_scenario_time_step": { "default": true, "description": "If True, time_step is in scenario time and won't be scaled. If False, time_step is in wallclock time and will be scaled by the time scale factor.", "title": "Is Scenario Time Step", "type": "boolean" }, "is_scenario_time_status_step": { "default": true, "description": "If True, time_status_step is in scenario time and won't be scaled. If False, time_status_step is in wallclock time and will be scaled by the time scale factor.", "title": "Is Scenario Time Status Step", "type": "boolean" } } }
- Fields:
- Validators:
scale_time»all fields
- field is_scenario_time_status_step: bool = True
If True, time_status_step is in scenario time and won’t be scaled. If False, time_status_step is in wallclock time and will be scaled by the time scale factor.
- Validated by:
- field is_scenario_time_step: bool = True
If True, time_step is in scenario time and won’t be scaled. If False, time_step is in wallclock time and will be scaled by the time scale factor.
- Validated by:
- field log_format: str | None = '%(asctime)s [%(levelname)s] %(name)s: %(message)s'
Format of the log messages.
- Validated by:
- field log_level: str | None = 'INFO'
Logging level (DEBUG, INFO, WARNING, ERROR, CRITICAL).
- Validated by:
- field max_bytes: int | None = 10485760
Maximum size of the log file in bytes. Default is 10MB.
- Validated by:
- field time_step: timedelta = datetime.timedelta(seconds=1)
Time step for the simulation.
- Validated by:
- validator scale_time » all fields
Example:
manager:
sim_start_time: "2019-03-01T23:59:59+00:00"
sim_stop_time: "2019-03-10T23:59:59+00:00"
start_time:
time_step: "0:00:01"
time_scale_factor: 288
time_status_step: "0:00:01"
is_scenario_time_status_step: False
time_status_init: "2019-03-01T23:59:59+00:00"
command_lead: "0:00:05"
required_apps:
- manager
- planner
- appender
- simulator
init_retry_delay_s: 5
init_max_retry: 5
set_offset: True
shut_down_when_terminated: False
enable_file_logging: True
log_dir: "logs"
log_level: "DEBUG"
max_bytes: 10485760
backup_count: 5
Managed Application Configuration
Each managed application is identified by name under the execution.managed_applications dictionary. If a field is not provided, default values are used. Application-specific parameters can be defined under configuration_parameters.
- pydantic model ManagedApplicationConfig
Show JSON schema
{ "title": "ManagedApplicationConfig", "type": "object", "properties": { "enable_file_logging": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "default": false, "description": "Enable file logging.", "title": "Enable File Logging" }, "log_dir": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": "logs", "description": "Directory path for log files.", "title": "Log Dir" }, "log_filename": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Path to the log file.", "title": "Log Filename" }, "log_level": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": "INFO", "description": "Logging level (DEBUG, INFO, WARNING, ERROR, CRITICAL).", "title": "Log Level" }, "max_bytes": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": 10485760, "description": "Maximum size of the log file in bytes. Default is 10MB.", "title": "Max Bytes" }, "backup_count": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": 5, "description": "Number of backup log files to keep.", "title": "Backup Count" }, "log_format": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": "%(asctime)s [%(levelname)s] %(name)s: %(message)s", "description": "Format of the log messages.", "title": "Log Format" }, "time_scale_factor": { "default": 1.0, "description": "Time scale factor.", "title": "Time Scale Factor", "type": "number" }, "time_step": { "default": "PT1S", "description": "Time step for swe_change.", "format": "duration", "title": "Time Step", "type": "string" }, "set_offset": { "default": true, "description": "Set offset.", "title": "Set Offset", "type": "boolean" }, "time_status_step": { "default": null, "description": "Time status step.", "format": "duration", "title": "Time Status Step", "type": "string" }, "time_status_init": { "default": null, "description": "Time status init.", "format": "date-time", "title": "Time Status Init", "type": "string" }, "shut_down_when_terminated": { "default": false, "description": "Shut down when terminated.", "title": "Shut Down When Terminated", "type": "boolean" }, "manager_app_name": { "default": "manager", "description": "Manager application name.", "title": "Manager App Name", "type": "string" }, "is_scenario_time_step": { "default": true, "description": "If True, time_step is in scenario time and won't be scaled. If False, time_step is in wallclock time and will be scaled by the time scale factor.", "title": "Is Scenario Time Step", "type": "boolean" }, "is_scenario_time_status_step": { "default": true, "description": "If True, time_status_step is in scenario time and won't be scaled. If False, time_status_step is in wallclock time and will be scaled by the time scale factor.", "title": "Is Scenario Time Status Step", "type": "boolean" } } }
- Fields:
- Validators:
scale_time»all fields
- field is_scenario_time_status_step: bool = True
If True, time_status_step is in scenario time and won’t be scaled. If False, time_status_step is in wallclock time and will be scaled by the time scale factor.
- Validated by:
- field is_scenario_time_step: bool = True
If True, time_step is in scenario time and won’t be scaled. If False, time_step is in wallclock time and will be scaled by the time scale factor.
- Validated by:
- field log_format: str | None = '%(asctime)s [%(levelname)s] %(name)s: %(message)s'
Format of the log messages.
- Validated by:
- field log_level: str | None = 'INFO'
Logging level (DEBUG, INFO, WARNING, ERROR, CRITICAL).
- Validated by:
- field max_bytes: int | None = 10485760
Maximum size of the log file in bytes. Default is 10MB.
- Validated by:
- validator scale_time » all fields
Example:
managed_applications:
planner:
time_scale_factor: 288
time_step: "0:00:01"
is_scenario_time_step: False
set_offset: True
time_status_step: "0:00:10"
is_scenario_time_status_step: False
shut_down_when_terminated: False
manager_app_name: "manager"
enable_file_logging: True
log_dir: "logs"
log_level: "INFO"
max_bytes: 5242880
backup_count: 3
configuration_parameters:
planning_horizon: 3600
simulator:
time_scale_factor: 288
time_step: "0:00:01"
is_scenario_time_step: False
set_offset: True
time_status_step: "0:00:10"
is_scenario_time_status_step: False
shut_down_when_terminated: False
manager_app_name: "manager"
Channels Section
Defines the messaging channels used for communication between components. This entire section is optional. If a user wants to define each channel and queue for organizational purposes, they can do so here. Otherwise, the NOS-T Tools library will create default channels and queues.
Channels follow this structure:
channels:
<component>:
<message_type>:
address: '<prefix>.<component>.<message_type>'
bindings:
amqp:
is: routingKey
exchange:
name: <prefix>
type: topic
durable: false
autoDelete: true
vhost: /
bindingVersion: 0.3.0
Example:
channels:
satellite:
location:
address: 'sos.constellation.location'
bindings:
amqp:
is: routingKey
exchange:
name: sos
type: topic
durable: false
autoDelete: true
vhost: /
bindingVersion: 0.3.0
status.mode:
address: 'sos.constellation.status.mode'
bindings:
amqp:
is: routingKey
exchange:
name: sos
type: topic
durable: false
autoDelete: true
vhost: /
bindingVersion: 0.3.0
status.ready:
address: 'sos.constellation.status.ready'
bindings:
amqp:
is: routingKey
exchange:
name: sos
type: topic
durable: false
autoDelete: true
vhost: /
bindingVersion: 0.3.0
status.time:
address: 'sos.constellation.status.time'
bindings:
amqp:
is: routingKey
exchange:
name: sos
type: topic
durable: false
autoDelete: true
vhost: /
bindingVersion: 0.3.0
manager:
init:
address: 'sos.manager.init'
bindings:
amqp:
is: routingKey
exchange:
name: sos
type: topic
durable: false
autoDelete: true
vhost: /
bindingVersion: 0.3.0
start:
address: 'sos.manager.start'
bindings:
amqp:
is: routingKey
exchange:
name: sos
type: topic
durable: false
autoDelete: true
vhost: /
bindingVersion: 0.3.0
stop:
address: 'sos.manager.stop'
bindings:
amqp:
is: routingKey
exchange:
name: sos
type: topic
durable: false
autoDelete: true
vhost: /
bindingVersion: 0.3.0
status.mode:
address: 'sos.manager.status.mode'
bindings:
amqp:
is: routingKey
exchange:
name: sos
type: topic
durable: false
autoDelete: true
vhost: /
bindingVersion: 0.3.0
status.time:
address: 'sos.manager.status.time'
bindings:
amqp:
is: routingKey
exchange:
name: sos
type: topic
durable: false
autoDelete: true
vhost: /
bindingVersion: 0.3.0
In this example YAML file, the configuration includes predefined channels for:
Satellite components (location, status.mode, status.ready, status.time)
Manager components (init, start, stop, status.mode, status.time)
Each channel specifies:
An address pattern used as the routing key
AMQP binding configuration including exchange properties
Using the Configuration File
Applications using the NOS-T Tools library specify the path to the YAML configuration file when initializing. The library reads this file to establish connections to the RabbitMQ broker and Keycloak authentication server and to configure the execution parameters. Refer to Creating a NOS-T Publisher-Consumer Example for an example of how the configuration file is used within the NOS-T Tools library.
Complete Configuration Example
Below is a complete example of a YAML configuration file that can be used with NOS-T Tools:
info:
title: Novel Observing Strategies Testbed (NOS-T) YAML Configuration
version: '1.0.0'
description: Version-controlled configuration file for Snow Observing Systems (SOS) project
servers:
rabbitmq:
keycloak_authentication: False
host: "localhost"
port: 5672
tls: False
virtual_host: "/"
message_expiration: "60000"
delivery_mode: 2
content_type: "text/plain"
heartbeat: 600
connection_attempts: 3
retry_delay: 5
reconnect_delay: 10
blocked_connection_timeout: 300
queue_max_size: 1000
frame_max: 131072
socket_timeout: 10.0
stack_timeout: 15.0
keycloak:
host: "nost.smce.nasa.gov"
port: 8443
tls: True
token_refresh_interval: 240
realm: "NOS-T"
execution:
general:
prefix: sos
wallclock_offset_refresh_interval: 10800
ntp_host: "pool.ntp.org"
resume_tolerance: "12:00:00"
applications:
dashboard:
set_offset: False
shut_down_when_terminated: True
enable_file_logging: True
log_dir: "logs"
log_level: "INFO"
configuration_parameters:
refresh_rate: 5
manager:
sim_start_time: "2019-03-01T23:59:59+00:00"
sim_stop_time: "2019-03-10T23:59:59+00:00"
start_time:
time_step: "0:00:01"
time_scale_factor: 288
time_status_step: "0:00:01"
is_scenario_time_status_step: False
time_status_init: "2019-03-01T23:59:59+00:00"
command_lead: "0:00:05"
required_apps:
- manager
- planner
- appender
- simulator
init_retry_delay_s: 5
init_max_retry: 5
set_offset: True
shut_down_when_terminated: False
enable_file_logging: True
log_dir: "logs"
log_level: "DEBUG"
max_bytes: 10485760
backup_count: 5
managed_applications:
planner:
time_scale_factor: 288
time_step: "0:00:01"
is_scenario_time_step: False
set_offset: True
time_status_step: "0:00:10"
is_scenario_time_status_step: False
shut_down_when_terminated: False
manager_app_name: "manager"
enable_file_logging: True
log_dir: "logs"
log_level: "INFO"
max_bytes: 5242880
backup_count: 3
configuration_parameters:
planning_horizon: 3600
simulator:
time_scale_factor: 288
time_step: "0:00:01"
is_scenario_time_step: False
set_offset: True
time_status_step: "0:00:10"
is_scenario_time_status_step: False
shut_down_when_terminated: False
manager_app_name: "manager"
channels:
satellite:
location:
address: 'sos.constellation.location'
bindings:
amqp:
is: routingKey
exchange:
name: sos
type: topic
durable: false
autoDelete: true
vhost: /
bindingVersion: 0.3.0
status.mode:
address: 'sos.constellation.status.mode'
bindings:
amqp:
is: routingKey
exchange:
name: sos
type: topic
durable: false
autoDelete: true
vhost: /
bindingVersion: 0.3.0
status.ready:
address: 'sos.constellation.status.ready'
bindings:
amqp:
is: routingKey
exchange:
name: sos
type: topic
durable: false
autoDelete: true
vhost: /
bindingVersion: 0.3.0
status.time:
address: 'sos.constellation.status.time'
bindings:
amqp:
is: routingKey
exchange:
name: sos
type: topic
durable: false
autoDelete: true
vhost: /
bindingVersion: 0.3.0
manager:
init:
address: 'sos.manager.init'
bindings:
amqp:
is: routingKey
exchange:
name: sos
type: topic
durable: false
autoDelete: true
vhost: /
bindingVersion: 0.3.0
start:
address: 'sos.manager.start'
bindings:
amqp:
is: routingKey
exchange:
name: sos
type: topic
durable: false
autoDelete: true
vhost: /
bindingVersion: 0.3.0
stop:
address: 'sos.manager.stop'
bindings:
amqp:
is: routingKey
exchange:
name: sos
type: topic
durable: false
autoDelete: true
vhost: /
bindingVersion: 0.3.0
status.mode:
address: 'sos.manager.status.mode'
bindings:
amqp:
is: routingKey
exchange:
name: sos
type: topic
durable: false
autoDelete: true
vhost: /
bindingVersion: 0.3.0
status.time:
address: 'sos.manager.status.time'
bindings:
amqp:
is: routingKey
exchange:
name: sos
type: topic
durable: false
autoDelete: true
vhost: /
bindingVersion: 0.3.0