182 lines
5.7 KiB
Rust
182 lines
5.7 KiB
Rust
// 负责定义采集器与协调器之间稳定且有版本检查的传输数据
|
|
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
use crate::{config::DhtConfig, domain::VerificationResult};
|
|
|
|
pub(crate) const PROTOCOL_VERSION: u16 = 2;
|
|
|
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
|
pub(crate) struct CollectorDesiredConfig {
|
|
pub(crate) dht: DhtConfig,
|
|
pub(crate) verification_enabled: bool,
|
|
pub(crate) verification_max_active: usize,
|
|
}
|
|
|
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
|
pub(crate) struct RegisterRequest {
|
|
pub(crate) protocol_version: u16,
|
|
pub(crate) node_id: String,
|
|
pub(crate) name: String,
|
|
pub(crate) initial_config: CollectorDesiredConfig,
|
|
}
|
|
|
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
|
pub(crate) struct ControlResponse {
|
|
pub(crate) protocol_version: u16,
|
|
pub(crate) revision: u64,
|
|
pub(crate) desired: CollectorDesiredConfig,
|
|
}
|
|
|
|
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
|
|
pub(crate) struct CollectorMetrics {
|
|
pub(crate) state: String,
|
|
pub(crate) nodes: u64,
|
|
pub(crate) metadata_in_flight: u64,
|
|
pub(crate) metadata_succeeded: u64,
|
|
pub(crate) metadata_failed: u64,
|
|
pub(crate) udp_tx_packets: u64,
|
|
pub(crate) metadata_peer_attempts: u64,
|
|
pub(crate) metadata_peer_canceled: u64,
|
|
pub(crate) metadata_peer_failure_cache_hits: u64,
|
|
pub(crate) metadata_peer_failure_cache_entries: u64,
|
|
pub(crate) metadata_failure_timeout: u64,
|
|
pub(crate) metadata_failure_connect: u64,
|
|
pub(crate) metadata_failure_no_extension: u64,
|
|
pub(crate) metadata_failure_send: u64,
|
|
pub(crate) metadata_failure_size_limit: u64,
|
|
pub(crate) metadata_failure_sha1: u64,
|
|
pub(crate) metadata_failure_parse: u64,
|
|
pub(crate) metadata_failure_other: u64,
|
|
pub(crate) sample_queue_depth: u64,
|
|
pub(crate) sample_queue_capacity: u64,
|
|
pub(crate) resident_memory_bytes: Option<u64>,
|
|
pub(crate) private_memory_bytes: Option<u64>,
|
|
pub(crate) cpu_time_millis: Option<u64>,
|
|
pub(crate) thread_count: Option<u64>,
|
|
pub(crate) handle_count: Option<u64>,
|
|
pub(crate) network_received_bytes: Option<u64>,
|
|
pub(crate) network_transmitted_bytes: Option<u64>,
|
|
pub(crate) outbox_items: u64,
|
|
pub(crate) outbox_bytes: u64,
|
|
pub(crate) last_error: Option<String>,
|
|
}
|
|
|
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
|
pub(crate) struct HeartbeatRequest {
|
|
pub(crate) protocol_version: u16,
|
|
pub(crate) node_id: String,
|
|
pub(crate) applied_revision: u64,
|
|
pub(crate) metrics: CollectorMetrics,
|
|
}
|
|
|
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
|
pub(crate) struct AdmissionRequest {
|
|
pub(crate) protocol_version: u16,
|
|
pub(crate) node_id: String,
|
|
pub(crate) info_hashes: Vec<String>,
|
|
}
|
|
|
|
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
|
|
#[serde(rename_all = "snake_case")]
|
|
pub(crate) enum AdmissionStatus {
|
|
Known,
|
|
Granted,
|
|
Leased,
|
|
Busy,
|
|
}
|
|
|
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
|
pub(crate) struct AdmissionDecision {
|
|
pub(crate) info_hash: String,
|
|
pub(crate) status: AdmissionStatus,
|
|
pub(crate) lease_token: Option<String>,
|
|
pub(crate) expires_at: Option<u64>,
|
|
}
|
|
|
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
|
pub(crate) struct AdmissionResponse {
|
|
pub(crate) decisions: Vec<AdmissionDecision>,
|
|
}
|
|
|
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
pub(crate) struct MetadataEnvelope {
|
|
pub(crate) protocol_version: u16,
|
|
pub(crate) node_id: String,
|
|
pub(crate) lease_token: Option<String>,
|
|
pub(crate) torrent: dht_crawler::TorrentInfo,
|
|
}
|
|
|
|
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
|
|
#[serde(rename_all = "snake_case")]
|
|
pub(crate) enum MetadataSubmitStatus {
|
|
Inserted,
|
|
AlreadyKnown,
|
|
Rejected,
|
|
}
|
|
|
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
|
pub(crate) struct MetadataSubmitResponse {
|
|
pub(crate) status: MetadataSubmitStatus,
|
|
pub(crate) reason: Option<String>,
|
|
}
|
|
|
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
pub(crate) struct MetadataBatchRequest {
|
|
pub(crate) protocol_version: u16,
|
|
pub(crate) node_id: String,
|
|
pub(crate) envelopes: Vec<MetadataEnvelope>,
|
|
}
|
|
|
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
|
pub(crate) struct MetadataBatchResponse {
|
|
pub(crate) results: Vec<MetadataSubmitResponse>,
|
|
}
|
|
|
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
|
pub(crate) struct VerificationClaimRequest {
|
|
pub(crate) protocol_version: u16,
|
|
pub(crate) node_id: String,
|
|
pub(crate) limit: usize,
|
|
}
|
|
|
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
|
pub(crate) struct VerificationJob {
|
|
pub(crate) info_hash: String,
|
|
pub(crate) lease_token: String,
|
|
pub(crate) source_peers: Vec<String>,
|
|
}
|
|
|
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
|
pub(crate) struct VerificationClaimResponse {
|
|
pub(crate) jobs: Vec<VerificationJob>,
|
|
}
|
|
|
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
|
pub(crate) struct VerificationResultRequest {
|
|
pub(crate) protocol_version: u16,
|
|
pub(crate) node_id: String,
|
|
pub(crate) lease_token: String,
|
|
pub(crate) info_hash: String,
|
|
pub(crate) result: VerificationResult,
|
|
}
|
|
|
|
#[derive(Debug, Clone, Serialize)]
|
|
pub(crate) struct CollectorView {
|
|
pub(crate) node_id: String,
|
|
pub(crate) name: String,
|
|
pub(crate) revision: u64,
|
|
pub(crate) applied_revision: u64,
|
|
pub(crate) desired: CollectorDesiredConfig,
|
|
pub(crate) online: bool,
|
|
pub(crate) last_seen: Option<u64>,
|
|
pub(crate) metrics: CollectorMetrics,
|
|
}
|
|
|
|
#[derive(Debug, Clone, Deserialize)]
|
|
pub(crate) struct CollectorConfigUpdate {
|
|
pub(crate) revision: u64,
|
|
pub(crate) name: String,
|
|
pub(crate) desired: CollectorDesiredConfig,
|
|
}
|