@@ -5,6 +5,8 @@ use slog::{error, warn, Logger};
5
5
use mithril_common:: { logging:: LoggerExtensions , StdResult } ;
6
6
use tokio:: { select, sync:: watch:: Receiver } ;
7
7
8
+ use crate :: MetricsService ;
9
+
8
10
use super :: { CertifierService , SignatureConsumer } ;
9
11
10
12
/// A signature processor which receives signature and processes them.
@@ -24,6 +26,7 @@ pub struct SequentialSignatureProcessor {
24
26
certifier : Arc < dyn CertifierService > ,
25
27
stop_rx : Receiver < ( ) > ,
26
28
logger : Logger ,
29
+ metrics_service : Arc < MetricsService > ,
27
30
}
28
31
29
32
impl SequentialSignatureProcessor {
@@ -33,12 +36,14 @@ impl SequentialSignatureProcessor {
33
36
certifier : Arc < dyn CertifierService > ,
34
37
stop_rx : Receiver < ( ) > ,
35
38
logger : Logger ,
39
+ metrics_service : Arc < MetricsService > ,
36
40
) -> Self {
37
41
Self {
38
42
consumer,
39
43
certifier,
40
44
stop_rx,
41
45
logger : logger. new_with_component_name :: < Self > ( ) ,
46
+ metrics_service,
42
47
}
43
48
}
44
49
}
@@ -55,6 +60,11 @@ impl SignatureProcessor for SequentialSignatureProcessor {
55
60
. await
56
61
{
57
62
error ! ( self . logger, "Error dispatching single signature" ; "error" => ?e) ;
63
+ } else {
64
+ let origin_network = self . consumer . get_origin_network ( ) ;
65
+ self . metrics_service
66
+ . get_signature_registration_total_received_since_startup ( )
67
+ . increment ( & [ & origin_network] ) ;
58
68
}
59
69
}
60
70
}
@@ -107,24 +117,33 @@ mod tests {
107
117
#[ tokio:: test]
108
118
async fn processor_process_signatures_succeeds ( ) {
109
119
let logger = TestLogger :: stdout ( ) ;
120
+
121
+ let single_signatures = vec ! [
122
+ (
123
+ fake_data:: single_signature( vec![ 1 , 2 , 3 ] ) ,
124
+ SignedEntityType :: MithrilStakeDistribution ( Epoch ( 1 ) ) ,
125
+ ) ,
126
+ (
127
+ fake_data:: single_signature( vec![ 4 , 5 , 6 ] ) ,
128
+ SignedEntityType :: MithrilStakeDistribution ( Epoch ( 2 ) ) ,
129
+ ) ,
130
+ ] ;
131
+
132
+ let singles_signatures_length = single_signatures. len ( ) ;
133
+
134
+ let network_origin = "test_network" ;
135
+
110
136
let mock_consumer = {
111
137
let mut mock_consumer = MockSignatureConsumer :: new ( ) ;
112
138
mock_consumer
113
139
. expect_get_signatures ( )
114
- . returning ( || {
115
- Ok ( vec ! [
116
- (
117
- fake_data:: single_signature( vec![ 1 , 2 , 3 ] ) ,
118
- SignedEntityType :: MithrilStakeDistribution ( Epoch ( 1 ) ) ,
119
- ) ,
120
- (
121
- fake_data:: single_signature( vec![ 4 , 5 , 6 ] ) ,
122
- SignedEntityType :: MithrilStakeDistribution ( Epoch ( 2 ) ) ,
123
- ) ,
124
- ] )
125
- } )
140
+ . returning ( move || Ok ( single_signatures. clone ( ) ) )
126
141
. times ( 1 ) ;
127
142
mock_consumer
143
+ . expect_get_origin_network ( )
144
+ . returning ( || network_origin. to_string ( ) )
145
+ . times ( singles_signatures_length) ;
146
+ mock_consumer
128
147
} ;
129
148
let mock_certifier = {
130
149
let mut mock_certifier = MockCertifierService :: new ( ) ;
@@ -148,17 +167,33 @@ mod tests {
148
167
mock_certifier
149
168
} ;
150
169
let ( _stop_tx, stop_rx) = channel ( ( ) ) ;
170
+ let metrics_service = MetricsService :: new ( TestLogger :: stdout ( ) ) . unwrap ( ) ;
171
+
172
+ let initial_counter_value = metrics_service
173
+ . get_signature_registration_total_received_since_startup ( )
174
+ . get ( & [ network_origin] ) ;
175
+
176
+ let metrics_service = Arc :: new ( metrics_service) ;
177
+
151
178
let processor = SequentialSignatureProcessor :: new (
152
179
Arc :: new ( mock_consumer) ,
153
180
Arc :: new ( mock_certifier) ,
154
181
stop_rx,
155
182
logger,
183
+ metrics_service. clone ( ) ,
156
184
) ;
157
185
158
186
processor
159
187
. process_signatures ( )
160
188
. await
161
189
. expect ( "Failed to process signatures" ) ;
190
+
191
+ assert_eq ! (
192
+ initial_counter_value + singles_signatures_length as u32 ,
193
+ metrics_service
194
+ . get_signature_registration_total_received_since_startup( )
195
+ . get( & [ network_origin] )
196
+ )
162
197
}
163
198
164
199
#[ tokio:: test]
@@ -185,11 +220,14 @@ mod tests {
185
220
mock_certifier
186
221
} ;
187
222
let ( stop_tx, stop_rx) = channel ( ( ) ) ;
223
+ let metrics_service = MetricsService :: new ( TestLogger :: stdout ( ) ) . unwrap ( ) ;
224
+
188
225
let processor = SequentialSignatureProcessor :: new (
189
226
Arc :: new ( fake_consumer) ,
190
227
Arc :: new ( mock_certifier) ,
191
228
stop_rx,
192
229
logger,
230
+ Arc :: new ( metrics_service) ,
193
231
) ;
194
232
195
233
tokio:: select!(
0 commit comments