@@ -31,6 +31,8 @@ use tracing::instrument;
31
31
32
32
use super :: make_rust_tls;
33
33
use crate :: core;
34
+ use crate :: core:: statistics:: event:: sender:: Sender ;
35
+ use crate :: core:: statistics:: repository:: Repository ;
34
36
use crate :: servers:: apis:: server:: { ApiServer , Launcher } ;
35
37
use crate :: servers:: apis:: Version ;
36
38
use crate :: servers:: registar:: ServiceRegistrationForm ;
@@ -56,11 +58,13 @@ pub struct ApiServerJobStarted();
56
58
/// It would panic if unable to send the `ApiServerJobStarted` notice.
57
59
///
58
60
///
59
- #[ instrument( skip( config, tracker, ban_service, form) ) ]
61
+ #[ instrument( skip( config, tracker, ban_service, stats_event_sender , stats_repository , form) ) ]
60
62
pub async fn start_job (
61
63
config : & HttpApi ,
62
64
tracker : Arc < core:: Tracker > ,
63
65
ban_service : Arc < RwLock < BanService > > ,
66
+ stats_event_sender : Arc < Option < Box < dyn Sender > > > ,
67
+ stats_repository : Arc < Repository > ,
64
68
form : ServiceRegistrationForm ,
65
69
version : Version ,
66
70
) -> Option < JoinHandle < ( ) > > {
@@ -73,22 +77,53 @@ pub async fn start_job(
73
77
let access_tokens = Arc :: new ( config. access_tokens . clone ( ) ) ;
74
78
75
79
match version {
76
- Version :: V1 => Some ( start_v1 ( bind_to, tls, tracker. clone ( ) , ban_service. clone ( ) , form, access_tokens) . await ) ,
80
+ Version :: V1 => Some (
81
+ start_v1 (
82
+ bind_to,
83
+ tls,
84
+ tracker. clone ( ) ,
85
+ ban_service. clone ( ) ,
86
+ stats_event_sender. clone ( ) ,
87
+ stats_repository. clone ( ) ,
88
+ form,
89
+ access_tokens,
90
+ )
91
+ . await ,
92
+ ) ,
77
93
}
78
94
}
79
95
80
96
#[ allow( clippy:: async_yields_async) ]
81
- #[ instrument( skip( socket, tls, tracker, ban_service, form, access_tokens) ) ]
97
+ #[ allow( clippy:: too_many_arguments) ]
98
+ #[ instrument( skip(
99
+ socket,
100
+ tls,
101
+ tracker,
102
+ ban_service,
103
+ stats_event_sender,
104
+ stats_repository,
105
+ form,
106
+ access_tokens
107
+ ) ) ]
82
108
async fn start_v1 (
83
109
socket : SocketAddr ,
84
110
tls : Option < RustlsConfig > ,
85
111
tracker : Arc < core:: Tracker > ,
86
112
ban_service : Arc < RwLock < BanService > > ,
113
+ stats_event_sender : Arc < Option < Box < dyn Sender > > > ,
114
+ stats_repository : Arc < Repository > ,
87
115
form : ServiceRegistrationForm ,
88
116
access_tokens : Arc < AccessTokens > ,
89
117
) -> JoinHandle < ( ) > {
90
118
let server = ApiServer :: new ( Launcher :: new ( socket, tls) )
91
- . start ( tracker, ban_service, form, access_tokens)
119
+ . start (
120
+ tracker,
121
+ stats_event_sender,
122
+ stats_repository,
123
+ ban_service,
124
+ form,
125
+ access_tokens,
126
+ )
92
127
. await
93
128
. expect ( "it should be able to start to the tracker api" ) ;
94
129
@@ -107,6 +142,7 @@ mod tests {
107
142
108
143
use crate :: bootstrap:: app:: initialize_with_configuration;
109
144
use crate :: bootstrap:: jobs:: tracker_apis:: start_job;
145
+ use crate :: core:: services:: statistics;
110
146
use crate :: servers:: apis:: Version ;
111
147
use crate :: servers:: registar:: Registar ;
112
148
use crate :: servers:: udp:: server:: banning:: BanService ;
@@ -116,12 +152,26 @@ mod tests {
116
152
async fn it_should_start_http_tracker ( ) {
117
153
let cfg = Arc :: new ( ephemeral_public ( ) ) ;
118
154
let config = & cfg. http_api . clone ( ) . unwrap ( ) ;
119
- let tracker = initialize_with_configuration ( & cfg ) ;
155
+
120
156
let ban_service = Arc :: new ( RwLock :: new ( BanService :: new ( MAX_CONNECTION_ID_ERRORS_PER_IP ) ) ) ;
157
+ let ( stats_event_sender, stats_repository) = statistics:: setup:: factory ( cfg. core . tracker_usage_statistics ) ;
158
+ let stats_event_sender = Arc :: new ( stats_event_sender) ;
159
+ let stats_repository = Arc :: new ( stats_repository) ;
160
+
161
+ let tracker = initialize_with_configuration ( & cfg) ;
162
+
121
163
let version = Version :: V1 ;
122
164
123
- start_job ( config, tracker, ban_service, Registar :: default ( ) . give_form ( ) , version)
124
- . await
125
- . expect ( "it should be able to join to the tracker api start-job" ) ;
165
+ start_job (
166
+ config,
167
+ tracker,
168
+ ban_service,
169
+ stats_event_sender,
170
+ stats_repository,
171
+ Registar :: default ( ) . give_form ( ) ,
172
+ version,
173
+ )
174
+ . await
175
+ . expect ( "it should be able to join to the tracker api start-job" ) ;
126
176
}
127
177
}
0 commit comments