rpcperf_dataspec/
lib.rs

1//! Format of JSON output from rpc-perf. These structures can be used
2//! by any consumer of the produced data to parse the files.
3use histogram::SparseHistogram;
4use serde::{Deserialize, Serialize};
5
6#[derive(Default, Deserialize, Serialize)]
7#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
8#[cfg_attr(feature = "utoipa", schema(as = rpcperf_dataspec::Connections))]
9pub struct Connections {
10    /// number of current connections (gauge)
11    pub current: i64,
12    /// number of total connect attempts
13    pub total: u64,
14    /// number of connections established
15    pub opened: u64,
16    /// number of connect attempts that failed
17    pub error: u64,
18    /// number of connect attempts that hit timeout
19    pub timeout: u64,
20}
21
22#[derive(Default, Deserialize, Serialize)]
23#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
24#[cfg_attr(feature = "utoipa", schema(as = rpcperf_dataspec::Requests))]
25pub struct Requests {
26    pub total: u64,
27    pub ok: u64,
28    pub reconnect: u64,
29    pub unsupported: u64,
30}
31
32#[derive(Default, Deserialize, Serialize)]
33#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
34#[cfg_attr(feature = "utoipa", schema(as = rpcperf_dataspec::Responses))]
35pub struct Responses {
36    /// total number of responses
37    pub total: u64,
38    /// number of responses that were successful
39    pub ok: u64,
40    /// number of responses that were unsuccessful
41    pub error: u64,
42    /// number of responses that were missed due to timeout
43    pub timeout: u64,
44    /// number of read requests with a hit response
45    pub hit: u64,
46    /// number of read requests with a miss response
47    pub miss: u64,
48}
49
50#[derive(Default, Deserialize, Serialize)]
51#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
52#[cfg_attr(feature = "utoipa", schema(as = rpcperf_dataspec::ClientStats))]
53pub struct ClientStats {
54    pub connections: Connections,
55    pub requests: Requests,
56    pub responses: Responses,
57    #[serde(skip_serializing_if = "Option::is_none")]
58    pub response_latency: Option<SparseHistogram>,
59}
60
61#[derive(Default, Deserialize, Serialize)]
62#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
63#[cfg_attr(feature = "utoipa", schema(as = rpcperf_dataspec::PubsubStats))]
64pub struct PubsubStats {
65    pub publishers: Publishers,
66    pub subscribers: Subscribers,
67}
68
69#[derive(Default, Deserialize, Serialize)]
70#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
71#[cfg_attr(feature = "utoipa", schema(as = rpcperf_dataspec::Publishers))]
72pub struct Publishers {
73    // current number of publishers
74    pub current: i64,
75}
76
77#[derive(Default, Deserialize, Serialize)]
78#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
79#[cfg_attr(feature = "utoipa", schema(as = rpcperf_dataspec::Subscribers))]
80pub struct Subscribers {
81    // current number of subscribers
82    pub current: i64,
83}
84
85#[derive(Default, Deserialize, Serialize)]
86#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
87#[cfg_attr(feature = "utoipa", schema(as = rpcperf_dataspec::JsonSnapshot))]
88pub struct JsonSnapshot {
89    pub window: u64,
90    pub elapsed: f64,
91    #[serde(skip_serializing_if = "Option::is_none")]
92    pub target_qps: Option<f64>,
93    pub client: ClientStats,
94    pub pubsub: PubsubStats,
95}