use serde::ser::{Serialize, Serializer, SerializeTuple}; use serde::Deserialize; use crate::util::{MeanList, now}; pub type NodeId = usize; pub type BlockNumber = u64; pub type Timestamp = u64; pub type Address = Box; pub use primitive_types::H256 as BlockHash; #[derive(Deserialize, Debug)] pub struct NodeDetails { pub name: Box, pub implementation: Box, pub version: Box, pub validator: Option>, pub network_id: Option>, } #[derive(Deserialize, Debug, Clone, Copy, PartialEq, Eq, Default)] pub struct NodeStats { pub peers: u64, pub txcount: u64, } #[derive(Default)] pub struct NodeIO { pub used_state_cache_size: MeanList, pub used_db_cache_size: MeanList, pub disk_read_per_sec: MeanList, pub disk_write_per_sec: MeanList, } #[derive(Deserialize, Debug, Clone, Copy)] pub struct Block { #[serde(rename = "best")] pub hash: BlockHash, pub height: BlockNumber, } #[derive(Debug, Clone, Copy)] pub struct BlockDetails { pub block: Block, pub block_time: u64, pub block_timestamp: u64, pub propagation_time: Option, } impl Default for BlockDetails { fn default() -> Self { BlockDetails { block: Block::zero(), block_timestamp: now(), block_time: 0, propagation_time: None, } } } #[derive(Default)] pub struct NodeHardware { /// CPU use means pub cpu: MeanList, /// Memory use means pub memory: MeanList, /// Upload uses means pub upload: MeanList, /// Download uses means pub download: MeanList, /// Stampchange uses means pub chart_stamps: MeanList, } #[derive(Deserialize, Debug, Clone)] pub struct NodeLocation { pub latitude: f32, pub longitude: f32, pub city: Box, } impl Serialize for NodeDetails { fn serialize(&self, serializer: S) -> Result where S: Serializer, { let mut tup = serializer.serialize_tuple(6)?; tup.serialize_element(&self.name)?; tup.serialize_element(&self.implementation)?; tup.serialize_element(&self.version)?; tup.serialize_element(&self.validator)?; tup.serialize_element(&self.network_id)?; tup.end() } } impl Serialize for NodeStats { fn serialize(&self, serializer: S) -> Result where S: Serializer, { let mut tup = serializer.serialize_tuple(2)?; tup.serialize_element(&self.peers)?; tup.serialize_element(&self.txcount)?; tup.end() } } impl Serialize for NodeIO { fn serialize(&self, serializer: S) -> Result where S: Serializer, { let mut tup = serializer.serialize_tuple(4)?; tup.serialize_element(self.used_state_cache_size.slice())?; tup.serialize_element(self.used_db_cache_size.slice())?; tup.serialize_element(self.disk_read_per_sec.slice())?; tup.serialize_element(self.disk_write_per_sec.slice())?; tup.end() } } impl Serialize for BlockDetails { fn serialize(&self, serializer: S) -> Result where S: Serializer, { let mut tup = serializer.serialize_tuple(5)?; tup.serialize_element(&self.block.height)?; tup.serialize_element(&self.block.hash)?; tup.serialize_element(&self.block_time)?; tup.serialize_element(&self.block_timestamp)?; tup.serialize_element(&self.propagation_time)?; tup.end() } } impl Serialize for NodeLocation { fn serialize(&self, serializer: S) -> Result where S: Serializer, { let mut tup = serializer.serialize_tuple(3)?; tup.serialize_element(&self.latitude)?; tup.serialize_element(&self.longitude)?; tup.serialize_element(&&*self.city)?; tup.end() } } impl Serialize for NodeHardware { fn serialize(&self, serializer: S) -> Result where S: Serializer, { let mut tup = serializer.serialize_tuple(5)?; tup.serialize_element(self.memory.slice())?; tup.serialize_element(self.cpu.slice())?; tup.serialize_element(self.upload.slice())?; tup.serialize_element(self.download.slice())?; tup.serialize_element(self.chart_stamps.slice())?; tup.end() } }