1
- use log:: warn;
2
1
use std:: sync:: atomic:: * ;
3
2
use std:: sync:: Arc ;
4
3
@@ -13,6 +12,16 @@ pub struct AddressStats {
13
12
pub total_query_time : Arc < AtomicU64 > ,
14
13
pub total_wait_time : Arc < AtomicU64 > ,
15
14
pub total_errors : Arc < AtomicU64 > ,
15
+
16
+ pub old_total_xact_count : Arc < AtomicU64 > ,
17
+ pub old_total_query_count : Arc < AtomicU64 > ,
18
+ pub old_total_received : Arc < AtomicU64 > ,
19
+ pub old_total_sent : Arc < AtomicU64 > ,
20
+ pub old_total_xact_time : Arc < AtomicU64 > ,
21
+ pub old_total_query_time : Arc < AtomicU64 > ,
22
+ pub old_total_wait_time : Arc < AtomicU64 > ,
23
+ pub old_total_errors : Arc < AtomicU64 > ,
24
+
16
25
pub avg_query_count : Arc < AtomicU64 > ,
17
26
pub avg_query_time : Arc < AtomicU64 > ,
18
27
pub avg_recv : Arc < AtomicU64 > ,
@@ -104,16 +113,16 @@ impl AddressStats {
104
113
}
105
114
106
115
pub fn update_averages ( & self ) {
107
- let ( totals, averages) = self . fields_iterators ( ) ;
108
- for data in totals . iter ( ) . zip ( averages. iter ( ) ) {
109
- let ( total, average) = data;
110
- if let Err ( err ) = average . fetch_update ( Ordering :: Relaxed , Ordering :: Relaxed , |avg| {
111
- let total = total . load ( Ordering :: Relaxed ) ;
112
- let avg = ( total - avg ) / ( crate :: stats :: STAT_PERIOD / 1_000 ) ; // Avg / second
113
- Some ( avg )
114
- } ) {
115
- warn ! ( "Could not update averages for addresses stats, {:?}" , err ) ;
116
- }
116
+ let ( totals, averages, old_totals ) = self . fields_iterators ( ) ;
117
+ for data in itertools :: izip! ( totals , averages, old_totals ) {
118
+ let ( total, average, old_total ) = data;
119
+ let total = total . load ( Ordering :: Relaxed ) ;
120
+ let old = old_total . load ( Ordering :: Relaxed ) ;
121
+ average . store (
122
+ ( total - old ) / ( crate :: stats :: STAT_PERIOD / 1_000 ) ,
123
+ Ordering :: Relaxed ,
124
+ ) ; // Avg / second
125
+ old_total . store ( total , Ordering :: Relaxed ) ;
117
126
}
118
127
}
119
128
@@ -123,27 +132,42 @@ impl AddressStats {
123
132
}
124
133
}
125
134
126
- fn fields_iterators ( & self ) -> ( Vec < Arc < AtomicU64 > > , Vec < Arc < AtomicU64 > > ) {
135
+ fn fields_iterators (
136
+ & self ,
137
+ ) -> (
138
+ Vec < Arc < AtomicU64 > > ,
139
+ Vec < Arc < AtomicU64 > > ,
140
+ Vec < Arc < AtomicU64 > > ,
141
+ ) {
127
142
let mut totals: Vec < Arc < AtomicU64 > > = Vec :: new ( ) ;
128
143
let mut averages: Vec < Arc < AtomicU64 > > = Vec :: new ( ) ;
144
+ let mut old_totals: Vec < Arc < AtomicU64 > > = Vec :: new ( ) ;
129
145
130
146
totals. push ( self . total_xact_count . clone ( ) ) ;
147
+ old_totals. push ( self . old_total_xact_count . clone ( ) ) ;
131
148
averages. push ( self . avg_xact_count . clone ( ) ) ;
132
149
totals. push ( self . total_query_count . clone ( ) ) ;
150
+ old_totals. push ( self . old_total_query_count . clone ( ) ) ;
133
151
averages. push ( self . avg_query_count . clone ( ) ) ;
134
152
totals. push ( self . total_received . clone ( ) ) ;
153
+ old_totals. push ( self . old_total_received . clone ( ) ) ;
135
154
averages. push ( self . avg_recv . clone ( ) ) ;
136
155
totals. push ( self . total_sent . clone ( ) ) ;
156
+ old_totals. push ( self . old_total_sent . clone ( ) ) ;
137
157
averages. push ( self . avg_sent . clone ( ) ) ;
138
158
totals. push ( self . total_xact_time . clone ( ) ) ;
159
+ old_totals. push ( self . old_total_xact_time . clone ( ) ) ;
139
160
averages. push ( self . avg_xact_time . clone ( ) ) ;
140
161
totals. push ( self . total_query_time . clone ( ) ) ;
162
+ old_totals. push ( self . old_total_query_time . clone ( ) ) ;
141
163
averages. push ( self . avg_query_time . clone ( ) ) ;
142
164
totals. push ( self . total_wait_time . clone ( ) ) ;
165
+ old_totals. push ( self . old_total_wait_time . clone ( ) ) ;
143
166
averages. push ( self . avg_wait_time . clone ( ) ) ;
144
167
totals. push ( self . total_errors . clone ( ) ) ;
168
+ old_totals. push ( self . old_total_errors . clone ( ) ) ;
145
169
averages. push ( self . avg_errors . clone ( ) ) ;
146
170
147
- ( totals, averages)
171
+ ( totals, averages, old_totals )
148
172
}
149
173
}
0 commit comments