use crate::util::short_id;
use eyre::Report;
use tracing::{debug, warn};
use volli_core::ManagerPeerEntry;
use volli_core::token::{encode_token, issue_token};
pub fn should_dial_peer(self_meta: &ManagerPeerEntry, peer: &ManagerPeerEntry) -> bool {
if self_meta.tenant != peer.tenant || self_meta.cluster != peer.cluster {
warn!(peer=%short_id(&peer.manager_id), "peer not in same tenant/cluster");
return false;
}
if self_meta.manager_id == peer.manager_id {
debug!(peer=%short_id(&peer.manager_id), "peer is ourselves; not dialing");
return false;
}
if self_meta.manager_id < peer.manager_id {
debug!(
ours=%short_id(&self_meta.manager_id),
theirs=%short_id(&peer.manager_id),
"peer takes precedence; they dial us",
);
return false;
}
debug!(
ours=%short_id(&self_meta.manager_id),
theirs=%short_id(&peer.manager_id),
"self takes precedence; dialing",
);
true
}
pub fn peer_key(peer: &ManagerPeerEntry) -> String {
format!("{}:{}:{}", peer.tenant, peer.cluster, peer.manager_id)
}
pub fn dial_token(csk: &[u8; 32], self_meta: &ManagerPeerEntry) -> Result<String, Report> {
let token = issue_token(
csk,
&self_meta.tenant,
&self_meta.cluster,
&self_meta.manager_id,
60,
)?;
encode_token(&token)
}