@@ -15,6 +15,7 @@ use primitives::adapter::{Adapter, DummyAdapterOptions, KeystoreOptions};
15
15
use primitives:: config:: { configuration, Config } ;
16
16
use primitives:: util:: tests:: prep_db:: { AUTH , IDS } ;
17
17
use primitives:: { Channel , SpecValidator , ValidatorId } ;
18
+ use slog:: { error, Logger } ;
18
19
use validator_worker:: error:: ValidatorWorker as ValidatorWorkerError ;
19
20
use validator_worker:: { all_channels, follower, leader, SentryApi } ;
20
21
@@ -105,12 +106,14 @@ fn main() -> Result<(), Box<dyn Error>> {
105
106
_ => panic ! ( "We don't have any other adapters implemented yet!" ) ,
106
107
} ;
107
108
109
+ let logger = logger ( ) ;
110
+
108
111
match adapter {
109
112
AdapterTypes :: EthereumAdapter ( ethadapter) => {
110
- run ( is_single_tick, & sentry_url, & config, * ethadapter)
113
+ run ( is_single_tick, & sentry_url, & config, * ethadapter, & logger )
111
114
}
112
115
AdapterTypes :: DummyAdapter ( dummyadapter) => {
113
- run ( is_single_tick, & sentry_url, & config, * dummyadapter)
116
+ run ( is_single_tick, & sentry_url, & config, * dummyadapter, & logger )
114
117
}
115
118
}
116
119
}
@@ -120,6 +123,7 @@ fn run<A: Adapter + 'static>(
120
123
sentry_url : & str ,
121
124
config : & Config ,
122
125
mut adapter : A ,
126
+ logger : & Logger ,
123
127
) -> Result < ( ) , Box < dyn Error > > {
124
128
// unlock adapter
125
129
adapter. unlock ( ) ?;
@@ -134,29 +138,29 @@ fn run<A: Adapter + 'static>(
134
138
let mut rt = Runtime :: new ( ) ?;
135
139
136
140
if is_single_tick {
137
- rt. block_on ( iterate_channels ( args) ) ;
141
+ rt. block_on ( iterate_channels ( args, & logger ) ) ;
138
142
} else {
139
- rt. block_on ( infinite ( args) ) ;
143
+ rt. block_on ( infinite ( args, & logger ) ) ;
140
144
}
141
145
142
146
Ok ( ( ) )
143
147
}
144
148
145
- async fn infinite < A : Adapter + ' static > ( args : Args < A > ) {
149
+ async fn infinite < A : Adapter + ' static > ( args : Args < A > , logger : & Logger ) {
146
150
loop {
147
151
let arg = args. clone ( ) ;
148
152
let delay_future = delay_for ( Duration :: from_secs ( arg. config . wait_time as u64 ) ) ;
149
- let _result = join ( iterate_channels ( arg) , delay_future) . await ;
153
+ let _result = join ( iterate_channels ( arg, logger ) , delay_future) . await ;
150
154
}
151
155
}
152
156
153
- async fn iterate_channels < A : Adapter + ' static > ( args : Args < A > ) {
157
+ async fn iterate_channels < A : Adapter + ' static > ( args : Args < A > , logger : & Logger ) {
154
158
let result = all_channels ( & args. sentry_url , args. adapter . whoami ( ) ) . await ;
155
159
156
160
let channels = match result {
157
161
Ok ( channels) => channels,
158
162
Err ( e) => {
159
- eprintln ! ( "Failed to get channels {}" , e ) ;
163
+ error ! ( logger , "Failed to get channels {}" , & e ; "main" => "iterate_channels" ) ;
160
164
return ;
161
165
}
162
166
} ;
@@ -166,29 +170,28 @@ async fn iterate_channels<A: Adapter + 'static>(args: Args<A>) {
166
170
let tick = try_join_all (
167
171
channels
168
172
. into_iter ( )
169
- . map ( |channel| validator_tick ( args. adapter . clone ( ) , channel, & args. config ) ) ,
173
+ . map ( |channel| validator_tick ( args. adapter . clone ( ) , channel, & args. config , logger ) ) ,
170
174
)
171
175
. await ;
172
176
173
177
if let Err ( e) = tick {
174
- eprintln ! ( "An occurred while processing channels {}" , e ) ;
178
+ error ! ( logger , "An occurred while processing channels {}" , & e ; "main" => "iterate_channels" ) ;
175
179
}
176
180
177
181
if channels_size >= args. config . max_channels as usize {
178
- eprintln ! (
179
- "WARNING: channel limit cfg.MAX_CHANNELS={} reached" ,
180
- args. config. max_channels
181
- )
182
+ error ! ( logger, "WARNING: channel limit cfg.MAX_CHANNELS={} reached" , & args. config. max_channels; "main" => "iterate_channels" ) ;
182
183
}
183
184
}
184
185
185
186
async fn validator_tick < A : Adapter + ' static > (
186
187
adapter : A ,
187
188
channel : Channel ,
188
189
config : & Config ,
190
+ logger : & Logger ,
189
191
) -> Result < ( ) , ValidatorWorkerError > {
190
192
let whoami = adapter. whoami ( ) . clone ( ) ;
191
- let sentry = SentryApi :: init ( adapter, & channel, & config, true ) ?;
193
+ // Cloning the `Logger` is cheap, see documentation for more info
194
+ let sentry = SentryApi :: init ( adapter, & channel, & config, logger. clone ( ) ) ?;
192
195
let duration = Duration :: from_secs ( config. validator_tick_timeout as u64 ) ;
193
196
194
197
match channel. spec . validators . find ( & whoami) {
@@ -210,3 +213,14 @@ async fn validator_tick<A: Adapter + 'static>(
210
213
} ;
211
214
Ok ( ( ) )
212
215
}
216
+
217
+ fn logger ( ) -> Logger {
218
+ use primitives:: util:: logging:: { Async , PrefixedCompactFormat , TermDecorator } ;
219
+ use slog:: { o, Drain } ;
220
+
221
+ let decorator = TermDecorator :: new ( ) . build ( ) ;
222
+ let drain = PrefixedCompactFormat :: new ( "validator_worker" , decorator) . fuse ( ) ;
223
+ let drain = Async :: new ( drain) . build ( ) . fuse ( ) ;
224
+
225
+ Logger :: root ( drain, o ! ( ) )
226
+ }
0 commit comments