21
21
//! - UDP trackers: the user can enable multiple UDP tracker on several ports.
22
22
//! - HTTP trackers: the user can enable multiple HTTP tracker on several ports.
23
23
//! - Tracker REST API: the tracker API can be enabled/disabled.
24
- use std:: sync:: Arc ;
25
-
26
- use tokio:: sync:: RwLock ;
27
24
use tokio:: task:: JoinHandle ;
28
25
use torrust_tracker_configuration:: Configuration ;
29
26
use tracing:: instrument;
30
27
31
28
use crate :: bootstrap:: jobs:: { health_check_api, http_tracker, torrent_cleanup, tracker_apis, udp_tracker} ;
32
- use crate :: core :: statistics :: event :: sender :: Sender ;
33
- use crate :: core :: statistics :: repository :: Repository ;
29
+ use crate :: container :: AppContainer ;
30
+ use crate :: servers ;
34
31
use crate :: servers:: registar:: Registar ;
35
- use crate :: servers:: udp:: server:: banning:: BanService ;
36
- use crate :: { core, servers} ;
37
32
38
33
/// # Panics
39
34
///
40
35
/// Will panic if:
41
36
///
42
37
/// - Can't retrieve tracker keys from database.
43
38
/// - Can't load whitelist from database.
44
- #[ instrument( skip( config, tracker, ban_service, stats_event_sender, stats_repository) ) ]
45
- pub async fn start (
46
- config : & Configuration ,
47
- tracker : Arc < core:: Tracker > ,
48
- ban_service : Arc < RwLock < BanService > > ,
49
- stats_event_sender : Arc < Option < Box < dyn Sender > > > ,
50
- stats_repository : Arc < Repository > ,
51
- ) -> Vec < JoinHandle < ( ) > > {
39
+ #[ instrument( skip( config, app_container) ) ]
40
+ pub async fn start ( config : & Configuration , app_container : & AppContainer ) -> Vec < JoinHandle < ( ) > > {
52
41
if config. http_api . is_none ( )
53
42
&& ( config. udp_trackers . is_none ( ) || config. udp_trackers . as_ref ( ) . map_or ( true , std:: vec:: Vec :: is_empty) )
54
43
&& ( config. http_trackers . is_none ( ) || config. http_trackers . as_ref ( ) . map_or ( true , std:: vec:: Vec :: is_empty) )
@@ -61,16 +50,18 @@ pub async fn start(
61
50
let registar = Registar :: default ( ) ;
62
51
63
52
// Load peer keys
64
- if tracker. is_private ( ) {
65
- tracker
53
+ if app_container. tracker . is_private ( ) {
54
+ app_container
55
+ . tracker
66
56
. load_keys_from_database ( )
67
57
. await
68
58
. expect ( "Could not retrieve keys from database." ) ;
69
59
}
70
60
71
61
// Load whitelisted torrents
72
- if tracker. is_listed ( ) {
73
- tracker
62
+ if app_container. tracker . is_listed ( ) {
63
+ app_container
64
+ . tracker
74
65
. whitelist_manager
75
66
. load_whitelist_from_database ( )
76
67
. await
@@ -80,7 +71,7 @@ pub async fn start(
80
71
// Start the UDP blocks
81
72
if let Some ( udp_trackers) = & config. udp_trackers {
82
73
for udp_tracker_config in udp_trackers {
83
- if tracker. is_private ( ) {
74
+ if app_container . tracker . is_private ( ) {
84
75
tracing:: warn!(
85
76
"Could not start UDP tracker on: {} while in private mode. UDP is not safe for private trackers!" ,
86
77
udp_tracker_config. bind_address
@@ -89,9 +80,9 @@ pub async fn start(
89
80
jobs. push (
90
81
udp_tracker:: start_job (
91
82
udp_tracker_config,
92
- tracker. clone ( ) ,
93
- stats_event_sender. clone ( ) ,
94
- ban_service. clone ( ) ,
83
+ app_container . tracker . clone ( ) ,
84
+ app_container . stats_event_sender . clone ( ) ,
85
+ app_container . ban_service . clone ( ) ,
95
86
registar. give_form ( ) ,
96
87
)
97
88
. await ,
@@ -107,8 +98,8 @@ pub async fn start(
107
98
for http_tracker_config in http_trackers {
108
99
if let Some ( job) = http_tracker:: start_job (
109
100
http_tracker_config,
110
- tracker. clone ( ) ,
111
- stats_event_sender. clone ( ) ,
101
+ app_container . tracker . clone ( ) ,
102
+ app_container . stats_event_sender . clone ( ) ,
112
103
registar. give_form ( ) ,
113
104
servers:: http:: Version :: V1 ,
114
105
)
@@ -125,10 +116,10 @@ pub async fn start(
125
116
if let Some ( http_api_config) = & config. http_api {
126
117
if let Some ( job) = tracker_apis:: start_job (
127
118
http_api_config,
128
- tracker. clone ( ) ,
129
- ban_service. clone ( ) ,
130
- stats_event_sender. clone ( ) ,
131
- stats_repository. clone ( ) ,
119
+ app_container . tracker . clone ( ) ,
120
+ app_container . ban_service . clone ( ) ,
121
+ app_container . stats_event_sender . clone ( ) ,
122
+ app_container . stats_repository . clone ( ) ,
132
123
registar. give_form ( ) ,
133
124
servers:: apis:: Version :: V1 ,
134
125
)
@@ -142,7 +133,7 @@ pub async fn start(
142
133
143
134
// Start runners to remove torrents without peers, every interval
144
135
if config. core . inactive_peer_cleanup_interval > 0 {
145
- jobs. push ( torrent_cleanup:: start_job ( & config. core , & tracker) ) ;
136
+ jobs. push ( torrent_cleanup:: start_job ( & config. core , & app_container . tracker ) ) ;
146
137
}
147
138
148
139
// Start Health Check API
0 commit comments