@@ -16,17 +16,17 @@ use slog_scope::{info, warn};
16
16
17
17
pub type PoolTicker = String ;
18
18
19
- /// Tool that can import a list of Signer including their Pool Tickers
20
- pub struct SignerTickersImporter {
21
- retriever : Arc < dyn SignerTickersRetriever > ,
22
- persister : Arc < dyn SignerTickersPersister > ,
19
+ /// Tool that can import a list of signers
20
+ pub struct SignersImporter {
21
+ retriever : Arc < dyn SignersImporterRetriever > ,
22
+ persister : Arc < dyn SignersImporterPersister > ,
23
23
}
24
24
25
- impl SignerTickersImporter {
26
- /// [SignerTickersImporter ] factory
25
+ impl SignersImporter {
26
+ /// [SignersImporter ] factory
27
27
pub fn new (
28
- retriever : Arc < dyn SignerTickersRetriever > ,
29
- persister : Arc < dyn SignerTickersPersister > ,
28
+ retriever : Arc < dyn SignersImporterRetriever > ,
29
+ persister : Arc < dyn SignersImporterPersister > ,
30
30
) -> Self {
31
31
Self {
32
32
retriever,
@@ -36,7 +36,7 @@ impl SignerTickersImporter {
36
36
37
37
/// Import and persist the signers
38
38
pub async fn run ( & self ) -> StdResult < ( ) > {
39
- info ! ( "🔧 Signer Ticker Importer: starting" ) ;
39
+ info ! ( "🔧 Signer Importer: starting" ) ;
40
40
let items = self
41
41
. retriever
42
42
. retrieve ( )
@@ -55,35 +55,37 @@ impl SignerTickersImporter {
55
55
loop {
56
56
interval. tick ( ) . await ;
57
57
if let Err ( error) = self . run ( ) . await {
58
- warn ! ( "Signer ticker retriever failed: Error: «{:?}»." , error) ;
58
+ warn ! ( "Signer retriever failed: Error: «{:?}»." , error) ;
59
59
}
60
60
info ! (
61
- "🔧 Signer Ticker Importer: Cycle finished, Sleeping for {} min" ,
61
+ "🔧 Signer Importer: Cycle finished, Sleeping for {} min" ,
62
62
run_interval. as_secs( ) / 60
63
63
) ;
64
64
}
65
65
}
66
66
}
67
67
68
+ /// Trait that define how a [SignersImporter] retrieve the signers to import.
68
69
#[ cfg_attr( test, automock) ]
69
70
#[ async_trait]
70
- pub trait SignerTickersRetriever : Sync + Send {
71
+ pub trait SignersImporterRetriever : Sync + Send {
71
72
/// Retrieve the signers list.
72
73
async fn retrieve ( & self ) -> StdResult < HashMap < PartyId , Option < PoolTicker > > > ;
73
74
}
74
75
76
+ /// Trait that define how a [SignersImporter] persist the retrieved signers.
75
77
#[ cfg_attr( test, automock) ]
76
78
#[ async_trait]
77
- pub trait SignerTickersPersister : Sync + Send {
79
+ pub trait SignersImporterPersister : Sync + Send {
78
80
/// Persist the given list of signers.
79
81
async fn persist ( & self , signers : HashMap < PartyId , Option < PoolTicker > > ) -> StdResult < ( ) > ;
80
82
}
81
83
82
84
#[ async_trait]
83
- impl SignerTickersPersister for SignerStore {
85
+ impl SignersImporterPersister for SignerStore {
84
86
async fn persist ( & self , signers : HashMap < PartyId , Option < PoolTicker > > ) -> StdResult < ( ) > {
85
87
info ! (
86
- "🔧 Signer Ticker Importer: persisting retrieved data in the database" ;
88
+ "🔧 Signer Importer: persisting retrieved data in the database" ;
87
89
"number_of_signer_to_insert" => signers. len( )
88
90
) ;
89
91
self . import_many_signers ( signers) . await ?;
@@ -92,15 +94,15 @@ impl SignerTickersPersister for SignerStore {
92
94
}
93
95
}
94
96
95
- /// A [SignerTickersRetriever ] fetching signers data from CExplorer.
96
- pub struct CExplorerSignerTickerRetriever {
97
+ /// A [SignersImporterRetriever ] fetching signers data from CExplorer.
98
+ pub struct CExplorerSignerRetriever {
97
99
/// Url from which a SPO list using the CExplorer format will be fetch.
98
100
source_url : Url ,
99
101
client : reqwest:: Client ,
100
102
}
101
103
102
- impl CExplorerSignerTickerRetriever {
103
- /// Create a new [CExplorerSignerTickerRetriever ] that will fetch data from the given url.
104
+ impl CExplorerSignerRetriever {
105
+ /// Create a new [CExplorerSignerRetriever ] that will fetch data from the given url.
104
106
pub ( crate ) fn new < T : IntoUrl > ( source_url : T , timeout : Option < Duration > ) -> StdResult < Self > {
105
107
let source_url = source_url
106
108
. into_url ( )
@@ -118,10 +120,10 @@ impl CExplorerSignerTickerRetriever {
118
120
}
119
121
120
122
#[ async_trait]
121
- impl SignerTickersRetriever for CExplorerSignerTickerRetriever {
123
+ impl SignersImporterRetriever for CExplorerSignerRetriever {
122
124
async fn retrieve ( & self ) -> StdResult < HashMap < PartyId , Option < PoolTicker > > > {
123
125
info ! (
124
- "🔧 Signer Ticker Importer: retrieving data from source" ;
126
+ "🔧 Signer Importer: retrieving data from source" ;
125
127
"source_url" => & self . source_url. as_str( )
126
128
) ;
127
129
let response = self
@@ -167,7 +169,7 @@ impl SPOItem {
167
169
}
168
170
169
171
/// Consume this item to convert it to a result ready to be yield by a
170
- /// [SignerTickersRetriever ::retrieve] implementation.
172
+ /// [SignersImporterRetriever ::retrieve] implementation.
171
173
fn extract ( self ) -> ( PartyId , Option < PoolTicker > ) {
172
174
let is_name_empty = self . is_name_empty ( ) ;
173
175
let ( pool_id, name) = ( self . pool_id , self . name ) ;
@@ -181,7 +183,7 @@ mod tests {
181
183
use mithril_common:: test_utils:: test_http_server:: test_http_server;
182
184
use mithril_common:: StdResult ;
183
185
use sqlite:: Connection ;
184
- use std:: collections:: BTreeSet ;
186
+ use std:: collections:: { BTreeMap , BTreeSet } ;
185
187
use std:: convert:: Infallible ;
186
188
use std:: sync:: Arc ;
187
189
use tokio:: sync:: Mutex ;
@@ -282,15 +284,15 @@ mod tests {
282
284
} ) ) ;
283
285
284
286
let retriever =
285
- CExplorerSignerTickerRetriever :: new ( format ! ( "{}/list" , server. url( ) ) , None ) . unwrap ( ) ;
287
+ CExplorerSignerRetriever :: new ( format ! ( "{}/list" , server. url( ) ) , None ) . unwrap ( ) ;
286
288
let result = retriever
287
289
. retrieve ( )
288
290
. await
289
291
. expect ( "Retriever should not fail" ) ;
290
292
291
293
assert_eq ! (
292
- result,
293
- HashMap :: from( [
294
+ result. into_iter ( ) . collect :: < BTreeMap <_ , _>> ( ) ,
295
+ BTreeMap :: from( [
294
296
( "pool1" . to_string( ) , None ) ,
295
297
( "pool2" . to_string( ) , None ) ,
296
298
( "pool3" . to_string( ) , Some ( "whatever2" . to_string( ) ) ) ,
@@ -305,7 +307,7 @@ mod tests {
305
307
) ;
306
308
307
309
let retriever =
308
- CExplorerSignerTickerRetriever :: new ( format ! ( "{}/list" , server. url( ) ) , None ) . unwrap ( ) ;
310
+ CExplorerSignerRetriever :: new ( format ! ( "{}/list" , server. url( ) ) , None ) . unwrap ( ) ;
309
311
retriever
310
312
. retrieve ( )
311
313
. await
@@ -317,7 +319,7 @@ mod tests {
317
319
let server = test_http_server ( warp:: path ( "list" ) . map ( || r#"{ "data": [ {"pool_" ] }"# ) ) ;
318
320
319
321
let retriever =
320
- CExplorerSignerTickerRetriever :: new ( format ! ( "{}/list" , server. url( ) ) , None ) . unwrap ( ) ;
322
+ CExplorerSignerRetriever :: new ( format ! ( "{}/list" , server. url( ) ) , None ) . unwrap ( ) ;
321
323
retriever
322
324
. retrieve ( )
323
325
. await
@@ -331,7 +333,7 @@ mod tests {
331
333
Ok :: < & str , Infallible > ( r#"{"data":[]}"# )
332
334
} ) ) ;
333
335
334
- let retriever = CExplorerSignerTickerRetriever :: new (
336
+ let retriever = CExplorerSignerRetriever :: new (
335
337
format ! ( "{}/list" , server. url( ) ) ,
336
338
Some ( Duration :: from_millis ( 10 ) ) ,
337
339
)
@@ -345,15 +347,15 @@ mod tests {
345
347
#[ tokio:: test]
346
348
async fn persist_list_of_two_signers_one_with_ticker_the_other_without ( ) {
347
349
let connection = Arc :: new ( Mutex :: new ( connection_without_foreign_key_support ( ) ) ) ;
348
- let mut retriever = MockSignerTickersRetriever :: new ( ) ;
350
+ let mut retriever = MockSignersImporterRetriever :: new ( ) ;
349
351
retriever. expect_retrieve ( ) . returning ( || {
350
352
Ok ( HashMap :: from ( [
351
353
( "pool1" . to_string ( ) , Some ( "[Pool name test]" . to_string ( ) ) ) ,
352
354
( "pool2" . to_string ( ) , None ) ,
353
355
] ) )
354
356
} ) ;
355
357
356
- let importer = SignerTickersImporter :: new (
358
+ let importer = SignersImporter :: new (
357
359
Arc :: new ( retriever) ,
358
360
Arc :: new ( SignerStore :: new ( connection. clone ( ) ) ) ,
359
361
) ;
@@ -386,7 +388,7 @@ mod tests {
386
388
)
387
389
. await
388
390
. unwrap ( ) ;
389
- let mut retriever = MockSignerTickersRetriever :: new ( ) ;
391
+ let mut retriever = MockSignersImporterRetriever :: new ( ) ;
390
392
retriever. expect_retrieve ( ) . returning ( || {
391
393
Ok ( HashMap :: from ( [
392
394
( "pool1" . to_string ( ) , Some ( "[Updated Pool name]" . to_string ( ) ) ) ,
@@ -397,7 +399,7 @@ mod tests {
397
399
] ) )
398
400
} ) ;
399
401
400
- let importer = SignerTickersImporter :: new (
402
+ let importer = SignersImporter :: new (
401
403
Arc :: new ( retriever) ,
402
404
Arc :: new ( SignerStore :: new ( connection. clone ( ) ) ) ,
403
405
) ;
@@ -446,10 +448,9 @@ mod tests {
446
448
}"#
447
449
} ) ) ;
448
450
449
- let importer = SignerTickersImporter :: new (
451
+ let importer = SignersImporter :: new (
450
452
Arc :: new (
451
- CExplorerSignerTickerRetriever :: new ( format ! ( "{}/list" , server. url( ) ) , None )
452
- . unwrap ( ) ,
453
+ CExplorerSignerRetriever :: new ( format ! ( "{}/list" , server. url( ) ) , None ) . unwrap ( ) ,
453
454
) ,
454
455
Arc :: new ( SignerStore :: new ( connection. clone ( ) ) ) ,
455
456
) ;
0 commit comments