qiniu_http_client/client/
retried.rs1use std::fmt;
2
3#[derive(Clone, Debug, Default, Eq, PartialEq)]
5pub struct RetriedStatsInfo {
6 retried_total: usize,
7 retried_on_current_endpoint: usize,
8 retried_on_current_ips: usize,
9 abandoned_endpoints: usize,
10 abandoned_ips_of_current_endpoint: usize,
11 switched_to_alternative_endpoints: bool,
12}
13
14impl RetriedStatsInfo {
15 #[inline]
17 pub fn increase_current_endpoint(&mut self) {
18 self.retried_total += 1;
19 self.retried_on_current_endpoint += 1;
20 self.retried_on_current_ips += 1;
21 }
22
23 #[inline]
25 pub fn increase_abandoned_endpoints(&mut self) {
26 self.abandoned_endpoints += 1;
27 }
28
29 #[inline]
31 pub fn increase_abandoned_ips_of_current_endpoint(&mut self) {
32 self.abandoned_ips_of_current_endpoint += 1;
33 }
34
35 #[inline]
37 pub fn switch_to_alternative_endpoints(&mut self) {
38 self.switched_to_alternative_endpoints = true;
39 self.switch_endpoint();
40 }
41
42 pub fn switch_endpoint(&mut self) {
44 self.retried_on_current_endpoint = 0;
45 self.abandoned_ips_of_current_endpoint = 0;
46 self.switch_ips();
47 }
48
49 pub fn switch_ips(&mut self) {
51 self.retried_on_current_ips = 0;
52 }
53
54 #[inline]
56 pub fn retried_total(&self) -> usize {
57 self.retried_total
58 }
59
60 #[inline]
62 pub fn retried_on_current_endpoint(&self) -> usize {
63 self.retried_on_current_endpoint
64 }
65
66 #[inline]
68 pub fn retried_on_current_ips(&self) -> usize {
69 self.retried_on_current_ips
70 }
71
72 #[inline]
74 pub fn abandoned_endpoints(&self) -> usize {
75 self.abandoned_endpoints
76 }
77
78 #[inline]
80 pub fn abandoned_ips_of_current_endpoint(&self) -> usize {
81 self.abandoned_ips_of_current_endpoint
82 }
83
84 #[inline]
86 pub fn switched_to_alternative_endpoints(&self) -> bool {
87 self.switched_to_alternative_endpoints
88 }
89}
90
91impl fmt::Display for RetriedStatsInfo {
92 #[inline]
93 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
94 write!(
95 f,
96 "{},{},{},{},{},{}",
97 self.retried_total,
98 self.retried_on_current_endpoint,
99 self.retried_on_current_ips,
100 self.abandoned_endpoints,
101 self.abandoned_ips_of_current_endpoint,
102 if self.switched_to_alternative_endpoints {
103 "a" } else {
105 "p" }
107 )
108 }
109}