11//! Utilities to parse Torrust Tracker logs.
22use serde:: { Deserialize , Serialize } ;
33
4- const UDP_TRACKER_PATTERN : & str = "INFO UDP TRACKER: Starting on: udp://" ;
5- const HTTP_TRACKER_PATTERN : & str = "INFO HTTP TRACKER: Starting on: " ;
6- const HEALTH_CHECK_PATTERN : & str = "INFO HEALTH CHECK API: Starting on: " ;
4+ const UDP_TRACKER_PATTERN : & str = "UDP TRACKER: Started on: udp://" ;
5+ const HTTP_TRACKER_PATTERN : & str = "HTTP TRACKER: Started on: " ;
6+ const HEALTH_CHECK_PATTERN : & str = "HEALTH CHECK API: Started on: " ;
77
88#[ derive( Serialize , Deserialize , Debug , Default ) ]
99pub struct RunningServices {
@@ -19,16 +19,17 @@ impl RunningServices {
1919 ///
2020 /// ```text
2121 /// Loading configuration from default configuration file: `./share/default/config/tracker.development.sqlite3.toml` ...
22- /// 2024-06-10T14:26:10.040894Z INFO torrust_tracker::bootstrap::logging: logging initialized.
23- /// 2024-06-10T14:26:10.041363Z INFO UDP TRACKER: Starting on: udp://0.0.0.0:6969
24- /// 2024-06-10T14:26:10.041386Z INFO torrust_tracker::bootstrap::jobs: TLS not enabled
25- /// 2024-06-10T14:26:10.041420Z INFO HTTP TRACKER: Starting on: http://0.0.0.0:7070
26- /// 2024-06-10T14:26:10.041516Z INFO HTTP TRACKER: Started on: http://0.0.0.0:7070
27- /// 2024-06-10T14:26:10.041521Z INFO torrust_tracker::bootstrap::jobs: TLS not enabled
28- /// 2024-06-10T14:26:10.041611Z INFO API: Starting on http://127.0.0.1:1212
29- /// 2024-06-10T14:26:10.041614Z INFO API: Started on http://127.0.0.1:1212
30- /// 2024-06-10T14:26:10.041623Z INFO HEALTH CHECK API: Starting on: http://127.0.0.1:1313
31- /// 2024-06-10T14:26:10.041657Z INFO HEALTH CHECK API: Started on: http://127.0.0.1:1313
22+ /// 2024-06-10T14:59:57.973525Z INFO torrust_tracker::bootstrap::logging: logging initialized.
23+ /// 2024-06-10T14:59:57.974306Z INFO UDP TRACKER: Starting on: udp://0.0.0.0:6969
24+ /// 2024-06-10T14:59:57.974316Z INFO UDP TRACKER: Started on: udp://0.0.0.0:6969
25+ /// 2024-06-10T14:59:57.974332Z INFO torrust_tracker::bootstrap::jobs: TLS not enabled
26+ /// 2024-06-10T14:59:57.974366Z INFO HTTP TRACKER: Starting on: http://0.0.0.0:7070
27+ /// 2024-06-10T14:59:57.974513Z INFO HTTP TRACKER: Started on: http://0.0.0.0:7070
28+ /// 2024-06-10T14:59:57.974521Z INFO torrust_tracker::bootstrap::jobs: TLS not enabled
29+ /// 2024-06-10T14:59:57.974615Z INFO API: Starting on http://127.0.0.1:1212
30+ /// 2024-06-10T14:59:57.974618Z INFO API: Started on http://127.0.0.1:1212
31+ /// 2024-06-10T14:59:57.974643Z INFO HEALTH CHECK API: Starting on: http://127.0.0.1:1313
32+ /// 2024-06-10T14:59:57.974760Z INFO HEALTH CHECK API: Started on: http://127.0.0.1:1313
3233 /// ```
3334 ///
3435 /// It would extract these services:
@@ -46,6 +47,9 @@ impl RunningServices {
4647 /// ]
4748 /// }
4849 /// ```
50+ ///
51+ /// NOTICE: Using colors in the console output could affect this method
52+ /// due to the hidden control chars.
4953 #[ must_use]
5054 pub fn parse_from_logs ( logs : & str ) -> Self {
5155 let mut udp_trackers: Vec < String > = Vec :: new ( ) ;
@@ -85,20 +89,45 @@ mod tests {
8589
8690 #[ test]
8791 fn it_should_parse_from_logs_with_valid_logs ( ) {
88- let logs = "\
89- INFO UDP TRACKER: Starting on: udp://0.0.0.0:8080\n \
90- INFO HTTP TRACKER: Starting on: 0.0.0.0:9090\n \
91- INFO HEALTH CHECK API: Starting on: 0.0.0.0:10010";
92- let running_services = RunningServices :: parse_from_logs ( logs) ;
92+ let log = r#"
93+ Loading configuration from environment variable db_path = "/var/lib/torrust/tracker/database/sqlite3.db"
94+
95+ [[udp_trackers]]
96+ enabled = true
97+
98+ [[http_trackers]]
99+ enabled = true
100+ ssl_cert_path = "/var/lib/torrust/tracker/tls/localhost.crt"
101+ ssl_key_path = "/var/lib/torrust/tracker/tls/localhost.key"
102+
103+ [http_api]
104+ ssl_cert_path = "/var/lib/torrust/tracker/tls/localhost.crt"
105+ ssl_key_path = "/var/lib/torrust/tracker/tls/localhost.key"
106+ ...
107+ Loading configuration from file: `/etc/torrust/tracker/tracker.toml` ...
108+ 2024-06-10T15:09:54.411031Z INFO torrust_tracker::bootstrap::logging: logging initialized.
109+ 2024-06-10T15:09:54.415084Z INFO UDP TRACKER: Starting on: udp://0.0.0.0:6969
110+ 2024-06-10T15:09:54.415091Z INFO UDP TRACKER: Started on: udp://0.0.0.0:6969
111+ 2024-06-10T15:09:54.415104Z INFO torrust_tracker::bootstrap::jobs: TLS not enabled
112+ 2024-06-10T15:09:54.415130Z INFO HTTP TRACKER: Starting on: http://0.0.0.0:7070
113+ 2024-06-10T15:09:54.415266Z INFO HTTP TRACKER: Started on: http://0.0.0.0:7070
114+ 2024-06-10T15:09:54.415275Z INFO torrust_tracker::bootstrap::jobs: TLS not enabled
115+ 2024-06-10T15:09:54.415403Z INFO API: Starting on http://127.0.0.1:1212
116+ 2024-06-10T15:09:54.415411Z INFO API: Started on http://127.0.0.1:1212
117+ 2024-06-10T15:09:54.415430Z INFO HEALTH CHECK API: Starting on: http://127.0.0.1:1313
118+ 2024-06-10T15:09:54.415472Z INFO HEALTH CHECK API: Started on: http://127.0.0.1:1313
119+ "# ;
120+
121+ let running_services = RunningServices :: parse_from_logs ( log) ;
93122
94- assert_eq ! ( running_services. udp_trackers, vec![ "127.0.0.1:8080 " ] ) ;
95- assert_eq ! ( running_services. http_trackers, vec![ "127.0.0.1:9090 " ] ) ;
96- assert_eq ! ( running_services. health_checks, vec![ "127.0.0.1:10010 /health_check" ] ) ;
123+ assert_eq ! ( running_services. udp_trackers, vec![ "127.0.0.1:6969 " ] ) ;
124+ assert_eq ! ( running_services. http_trackers, vec![ "http:// 127.0.0.1:7070 " ] ) ;
125+ assert_eq ! ( running_services. health_checks, vec![ "http:// 127.0.0.1:1313 /health_check" ] ) ;
97126 }
98127
99128 #[ test]
100129 fn it_should_ignore_logs_with_no_matching_lines ( ) {
101- let logs = "[Other Service][INFO] Starting on: 0.0.0.0:7070" ;
130+ let logs = "[Other Service][INFO] Started on: 0.0.0.0:7070" ;
102131 let running_services = RunningServices :: parse_from_logs ( logs) ;
103132
104133 assert ! ( running_services. udp_trackers. is_empty( ) ) ;
0 commit comments