forked from coracle/caravel
48f20dc1a5
Co-authored-by: userAdityaa <aditya.chaudhary1558@gmail.com> Co-committed-by: userAdityaa <aditya.chaudhary1558@gmail.com>
1.6 KiB
1.6 KiB
pub struct Infra
Infra is a service which listens for activity and synchronizes relay updates to a remote zooid instance via api_url.
Members:
api_url: String- the URL of the zooid instance to be managed, fromZOOID_API_URLquery: Querycommand: Command
pub fn new(query: Query, command: Command) -> Self
- Reads environment and populates members
pub async fn start(self)
- Subscribes to
command.notify - On startup, schedules delayed sync retries for relays whose
sync_erroris non-empty. - Loops on
rx.recv(), callinghandle_activityfor each receivedActivity.
async fn handle_activity(&self, activity: &Activity)
- For
create_relay,update_relay,activate_relay, ordeactivate_relayactivity, callssync_and_reportimmediately. - For
fail_relay_sync, schedules a delayed retry using exponential backoff based on consecutive failures for the relay. - Retry scheduling stops after the configured max attempts to avoid infinite retry loops.
- Other activity types are ignored (e.g.
complete_relay_sync).
async fn sync_and_report(&self, relay: &Relay, is_new: bool)
- Calls
sync_relayand on success callscommand.complete_relay_sync. - On failure calls
command.fail_relay_sync.
async fn sync_relay(&self, relay: &Relay, is_new: bool)
- If
is_new, sendsPOST /relay/:idto create the relay in zooid. - Otherwise, sends
PATCH /relay/:idto update it. - Includes
secretonly for relay creation (POST) so updates do not rotate relay identity. - Passes relay configuration in the body including host, schema, inactive flag, info, policy, groups, management, blossom, livekit, push, and roles.