This repository has been archived by the owner on Mar 20, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 4
Decentralized Concept with HamCloud Database Backbone
Ralf Wilke DH3WR edited this page Jun 28, 2018
·
2 revisions
- Seperation of data into two groups:
- Account database
- RIC assigment
- Rubric-Number and Names assigment
- Rubric-Content assigment
- Transmitter configuration and Transmitter Telemetry storage
- Transmitter-Groups assigment
- Core configuration (members/Status/connected Transmitters)
- Use of CouchDB as Database concept
- Document based, NoSQL
- Each Node runs CouchDB instance
- Writes to every Node possible
- In case of conflicts CouchDB-Instances in the HAMCLOUD are "always right"
- Structure of document based DBs is already present in State.json export
- Use of RabbitMQ as more sofisticated Middleware
- Maybe RabbitMQ as Cluster in HAMCLOUD (Network connectivity mandatory, but that's possible)
- Other Cores are connected by federations
- Mesh topology seem possible without loops (TBC) (what is a suitable value for max-hop(TTL?) Depending on Topology?)
- Unipager acts as RabbitMQ Client
- Traffic to transmit by Unipager is organized by topic approach (e.g. .txdata)
- Open issue: Queue for Transmitter is maintained at Node 1, what happens to that queue if TX moves to Node 2? Delete Queue? Move Queue?
- Open issues:
-
- For Database updates coming from REST API a distr. Node, use Mode RPC to broadcast changes in data
-
- Not nesessary for CouchDB
- At start try to get valid Core IPs via fixed seed URLs on HAMCLOUD instances and via dapnet.afu.rwth-aachen.description
- RabbitMQ Client connection to RabbitMQ Broker with failover
- Data to transmit and Timeslot-Config is got by subscribing to topic (bidirectional with Status feedback to DAPNET)
- Data to transmit is build up completly by emmiting Core; no need of database interactions afterwards on forwarding/distribution Cores
transmitters/<call>/general/transmitterwritable/connstatus ENUM('ONLINE', 'OFFLINE', 'NON_GRACEFUL_OFFLINE') NOT NULL)
transmitters/<call>/general/transmitterwritable/ntp_sync (BOOLEAN NOT NULL)
transmitters/<call>/general/transmitterwritable/OS (LINXU/Windows/... tbd.)
transmitters/<call>/general/transmitterwritable/kernel_version (tbd.)
transmitters/<call>/general//transmitterwritable/device_type (VARCHAR(30))
transmitters/<call>/general//transmitterwritable/device_version (VARCHAR(30))
transmitters/<call>/general/last_update (DATETIME)
transmitters/<call>/general/last_connect (DATETIME)
transmitters/<call>/general/connected_since (DATETIME)
transmitters/<call>/general/ip_address (VARCHAR(45))
transmitters/<call>/telemetry/txstatus (ENUM('ONAIR', 'OFFAIR'))
transmitters/<call>/telemetry/queue (Total)
transmitters/<call>/telemetry/queue/prio1
...
transmitters/<call>/telemetry/queue/prio5
transmitters/<call>/telemetry/temperature/sensor1name
transmitters/<call>/telemetry/temperature/sensor1value
...
transmitters/<call>/telemetry/temperature/sensor4name
transmitters/<call>/telemetry/temperature/sensor4value
transmitters/<call>/telemetry/power/forward
transmitters/<call>/telemetry/power/reflected
transmitters/<call>/configuration/timeslots ([0-F])
transmitters/<call>/configuration/is_enabled (BOOLEAN NOT NULL)
transmitters/<call>/configuration/usage_type (ENUM('PERSONAL', 'WIDERANGE') NOT NULL)
transmitters/<call>/configuration/aprs_enabled (BOOLEAN NOT NULL)
transmitters/<call>/configuration/node_id (INT)
transmitters/<call>/configuration/latitude (DECIMAL(9, 6))
transmitters/<call>/configuration/longitude (DECIMAL(9, 6))
transmitters/<call>/configuration/location_name (VARCHAR(60))
transmitters/<call>/configuration/rf_power (FLOAT)
transmitters/<call>/configuration/antenna_agl (SMALLINT)
transmitters/<call>/configuration/antenna_gain_dbi (FLOAT)
transmitters/<call>/configuration/antenna_type (ENUM('OMNI', 'DIRECTIONAL'))
transmitters/<call>/configuration/antenna_direction (SMALLINT)
transmitters/<call>/transmissions/prio1
...
transmitters/<call>/transmissions/prio5
nodes//status nodes//last_update nodes//version nodes//ip_address nodes//latitude nodes//longitude