use std::time::SystemTime;
use crate::data::DomusAddr;
use crate::ids::ErrorId;
pub(crate) type CallisId = u64;
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct BlobCallisSettingsReport {
pub chunk_size: u32,
pub ack_window_chunks: u32,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct PeerIdentityReport {
pub peer: DomusAddr,
pub primary_callis_count: u64,
pub blob_callis_count: u64,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub(crate) enum DisconnectReason {
LocalRequest,
RemoteClosed,
ConnectionClosed,
PeerRestarted,
Shutdown,
}
pub(crate) fn disconnect_reason_label(reason: DisconnectReason) -> &'static str {
match reason {
DisconnectReason::LocalRequest => "local-request",
DisconnectReason::RemoteClosed => "remote-closed",
DisconnectReason::ConnectionClosed => "connection-closed",
DisconnectReason::PeerRestarted => "peer-restarted",
DisconnectReason::Shutdown => "shutdown",
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub(crate) enum RestartReason {
FreshSession,
}
pub(crate) fn restart_reason_label(reason: RestartReason) -> &'static str {
match reason {
RestartReason::FreshSession => "fresh-session",
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub(crate) enum HandshakePhase {
OutboundPrimary,
OutboundBlob,
Inbound,
}
pub(crate) fn handshake_phase_label(phase: HandshakePhase) -> &'static str {
match phase {
HandshakePhase::OutboundPrimary => "outbound-primary-hello",
HandshakePhase::OutboundBlob => "outbound-blob-hello",
HandshakePhase::Inbound => "inbound-hello",
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub(crate) enum OutboundQueueTierReport {
A1,
A2,
A3,
}
pub(crate) fn outbound_queue_tier_label(tier: OutboundQueueTierReport) -> &'static str {
match tier {
OutboundQueueTierReport::A1 => "a1",
OutboundQueueTierReport::A2 => "a2",
OutboundQueueTierReport::A3 => "a3",
}
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub enum DomusReportingEvent {
PeerConnectedEvent {
at: SystemTime,
peer: DomusAddr,
fresh_session: bool,
},
PeerDisconnectedEvent {
at: SystemTime,
peer: DomusAddr,
reason: &'static str,
},
PeerDialFailedEvent {
at: SystemTime,
peer: DomusAddr,
callis: &'static str,
error_id: ErrorId,
},
PrimaryCallisConnectedEvent {
at: SystemTime,
peer: DomusAddr,
callis_id: u64,
},
PrimaryCallisDisconnectedEvent {
at: SystemTime,
peer: DomusAddr,
callis_id: u64,
reason: &'static str,
},
BlobCallisConnectedEvent {
at: SystemTime,
peer: DomusAddr,
callis_id: u64,
settings: BlobCallisSettingsReport,
},
BlobCallisDisconnectedEvent {
at: SystemTime,
peer: DomusAddr,
callis_id: u64,
reason: &'static str,
},
PeerSessionRestartedEvent {
at: SystemTime,
peer: DomusAddr,
reason: &'static str,
},
BackpressureTriggeredEvent {
at: SystemTime,
peer: DomusAddr,
taberna_id: u64,
},
OutboundQueueOverrunEvent {
at: SystemTime,
peer: DomusAddr,
tier: &'static str,
limit: u64,
msg_type: u32,
},
ConfigReloadedEvent {
at: SystemTime,
},
AuthReloadedEvent {
at: SystemTime,
},
ShutdownStartedEvent {
at: SystemTime,
},
ShutdownCompleteEvent {
at: SystemTime,
},
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct DomusMetrics {
pub current_peers: u64,
pub current_primary_callis: u64,
pub current_blob_callis: u64,
pub peak_peers: u64,
pub peak_primary_callis: u64,
pub peak_blob_callis: u64,
pub total_primary_opened: u64,
pub total_primary_closed: u64,
pub total_blob_opened: u64,
pub total_blob_closed: u64,
pub total_dial_attempts: u64,
pub total_dial_failures: u64,
pub total_identity_mismatch: u64,
pub total_protocol_violation: u64,
pub total_outbound_queue_overruns: u64,
pub total_a1_queue_overruns: u64,
pub total_a2_queue_overruns: u64,
pub total_a3_queue_overruns: u64,
pub created_at: SystemTime,
pub last_reset_at: SystemTime,
pub last_snapshot_at: SystemTime,
}
impl Default for DomusMetrics {
fn default() -> Self {
let now = SystemTime::now();
Self {
current_peers: 0,
current_primary_callis: 0,
current_blob_callis: 0,
peak_peers: 0,
peak_primary_callis: 0,
peak_blob_callis: 0,
total_primary_opened: 0,
total_primary_closed: 0,
total_blob_opened: 0,
total_blob_closed: 0,
total_dial_attempts: 0,
total_dial_failures: 0,
total_identity_mismatch: 0,
total_protocol_violation: 0,
total_outbound_queue_overruns: 0,
total_a1_queue_overruns: 0,
total_a2_queue_overruns: 0,
total_a3_queue_overruns: 0,
created_at: now,
last_reset_at: now,
last_snapshot_at: now,
}
}
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct DomusMetricsDelta {
pub current_peers: u64,
pub current_primary_callis: u64,
pub current_blob_callis: u64,
pub peak_peers: u64,
pub peak_primary_callis: u64,
pub peak_blob_callis: u64,
pub total_primary_opened: u64,
pub total_primary_closed: u64,
pub total_blob_opened: u64,
pub total_blob_closed: u64,
pub total_dial_attempts: u64,
pub total_dial_failures: u64,
pub total_identity_mismatch: u64,
pub total_protocol_violation: u64,
pub total_outbound_queue_overruns: u64,
pub total_a1_queue_overruns: u64,
pub total_a2_queue_overruns: u64,
pub total_a3_queue_overruns: u64,
pub created_at: SystemTime,
pub last_reset_at: SystemTime,
pub last_snapshot_at: SystemTime,
}
impl Default for DomusMetricsDelta {
fn default() -> Self {
let now = SystemTime::now();
Self {
current_peers: 0,
current_primary_callis: 0,
current_blob_callis: 0,
peak_peers: 0,
peak_primary_callis: 0,
peak_blob_callis: 0,
total_primary_opened: 0,
total_primary_closed: 0,
total_blob_opened: 0,
total_blob_closed: 0,
total_dial_attempts: 0,
total_dial_failures: 0,
total_identity_mismatch: 0,
total_protocol_violation: 0,
total_outbound_queue_overruns: 0,
total_a1_queue_overruns: 0,
total_a2_queue_overruns: 0,
total_a3_queue_overruns: 0,
created_at: now,
last_reset_at: now,
last_snapshot_at: now,
}
}
}