Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions src/setup.rs → src/app.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@ use log::warn;
use tokio::task::JoinHandle;
use torrust_tracker_configuration::Configuration;

use crate::http::Version;
use crate::jobs::{http_tracker, torrent_cleanup, tracker_apis, udp_tracker};
use crate::bootstrap::jobs::{http_tracker, torrent_cleanup, tracker_apis, udp_tracker};
use crate::servers::http::Version;
use crate::tracker;

/// # Panics
///
/// Will panic if the socket address for API can't be parsed.
pub async fn setup(config: &Configuration, tracker: Arc<tracker::Tracker>) -> Vec<JoinHandle<()>> {
pub async fn start(config: Arc<Configuration>, tracker: Arc<tracker::Tracker>) -> Vec<JoinHandle<()>> {
let mut jobs: Vec<JoinHandle<()>> = Vec::new();

// Load peer keys
Expand Down Expand Up @@ -61,7 +61,7 @@ pub async fn setup(config: &Configuration, tracker: Arc<tracker::Tracker>) -> Ve

// Remove torrents without peers, every interval
if config.inactive_peer_cleanup_interval > 0 {
jobs.push(torrent_cleanup::start_job(config, &tracker));
jobs.push(torrent_cleanup::start_job(&config, &tracker));
}

jobs
Expand Down
60 changes: 60 additions & 0 deletions src/bootstrap/app.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
use std::env;
use std::sync::Arc;

use torrust_tracker_configuration::Configuration;

use crate::bootstrap;
use crate::shared::clock::static_time;
use crate::shared::crypto::ephemeral_instance_keys;
use crate::tracker::services::tracker_factory;
use crate::tracker::Tracker;

#[must_use]
pub fn setup() -> (Arc<Configuration>, Arc<Tracker>) {
let configuration = Arc::new(initialize_configuration());
let tracker = initialize_with_configuration(&configuration);

(configuration, tracker)
}

#[must_use]
pub fn initialize_with_configuration(configuration: &Arc<Configuration>) -> Arc<Tracker> {
initialize_static();
initialize_logging(configuration);
Arc::new(initialize_tracker(configuration))
}

pub fn initialize_static() {
// Set the time of Torrust app starting
lazy_static::initialize(&static_time::TIME_AT_APP_START);

// Initialize the Ephemeral Instance Random Seed
lazy_static::initialize(&ephemeral_instance_keys::RANDOM_SEED);
}

/// # Panics
///
/// Will panic if it can't load the configuration from either
/// `./config.toml` file or the env var `TORRUST_TRACKER_CONFIG`.
#[must_use]
fn initialize_configuration() -> Configuration {
const CONFIG_PATH: &str = "./config.toml";
const CONFIG_ENV_VAR_NAME: &str = "TORRUST_TRACKER_CONFIG";

if env::var(CONFIG_ENV_VAR_NAME).is_ok() {
println!("Loading configuration from env var {CONFIG_ENV_VAR_NAME}");
Configuration::load_from_env_var(CONFIG_ENV_VAR_NAME).unwrap()
} else {
println!("Loading configuration from config file {CONFIG_PATH}");
Configuration::load_from_file(CONFIG_PATH).unwrap()
}
}

#[must_use]
pub fn initialize_tracker(config: &Arc<Configuration>) -> Tracker {
tracker_factory(config.clone())
}

pub fn initialize_logging(config: &Arc<Configuration>) {
bootstrap::logging::setup(config);
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ use tokio::sync::oneshot;
use tokio::task::JoinHandle;
use torrust_tracker_configuration::HttpTracker;

use crate::http::v1::launcher;
use crate::http::Version;
use crate::servers::http::v1::launcher;
use crate::servers::http::Version;
use crate::tracker;

#[derive(Debug)]
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use torrust_tracker_configuration::Configuration;
use crate::tracker;

#[must_use]
pub fn start_job(config: &Configuration, tracker: &Arc<tracker::Tracker>) -> JoinHandle<()> {
pub fn start_job(config: &Arc<Configuration>, tracker: &Arc<tracker::Tracker>) -> JoinHandle<()> {
let weak_tracker = std::sync::Arc::downgrade(tracker);
let interval = config.inactive_peer_cleanup_interval;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use tokio::sync::oneshot;
use tokio::task::JoinHandle;
use torrust_tracker_configuration::HttpApi;

use crate::apis::server;
use crate::servers::apis::server;
use crate::tracker;

#[derive(Debug)]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ use log::{error, info, warn};
use tokio::task::JoinHandle;
use torrust_tracker_configuration::UdpTracker;

use crate::servers::udp::server::Udp;
use crate::tracker;
use crate::udp::server::Udp;

#[must_use]
pub fn start_job(config: &UdpTracker, tracker: Arc<tracker::Tracker>) -> JoinHandle<()> {
Expand Down
File renamed without changes.
3 changes: 3 additions & 0 deletions src/bootstrap/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
pub mod app;
pub mod jobs;
pub mod logging;
33 changes: 4 additions & 29 deletions src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,33 +1,8 @@
pub mod apis;
pub mod databases;
pub mod http;
pub mod jobs;
pub mod logging;
pub mod protocol;
pub mod setup;
pub mod signals;
pub mod stats;
pub mod app;
pub mod bootstrap;
pub mod servers;
pub mod shared;
pub mod tracker;
pub mod udp;

#[macro_use]
extern crate lazy_static;

pub mod static_time {
use std::time::SystemTime;

lazy_static! {
pub static ref TIME_AT_APP_START: SystemTime = SystemTime::now();
}
}

pub mod ephemeral_instance_keys {
use rand::rngs::ThreadRng;
use rand::Rng;

pub type Seed = [u8; 32];

lazy_static! {
pub static ref RANDOM_SEED: Seed = Rng::gen(&mut ThreadRng::default());
}
}
44 changes: 4 additions & 40 deletions src/main.rs
Original file line number Diff line number Diff line change
@@ -1,49 +1,13 @@
use std::env;
use std::sync::Arc;

use log::info;
use torrust_tracker::stats::setup_statistics;
use torrust_tracker::{ephemeral_instance_keys, logging, setup, static_time, tracker};
use torrust_tracker_configuration::Configuration;
use torrust_tracker::{app, bootstrap};

#[tokio::main]
async fn main() {
const CONFIG_PATH: &str = "./config.toml";
const CONFIG_ENV_VAR_NAME: &str = "TORRUST_TRACKER_CONFIG";

// Set the time of Torrust app starting
lazy_static::initialize(&static_time::TIME_AT_APP_START);

// Initialize the Ephemeral Instance Random Seed
lazy_static::initialize(&ephemeral_instance_keys::RANDOM_SEED);

// Initialize Torrust config
let config = if env::var(CONFIG_ENV_VAR_NAME).is_ok() {
println!("Loading configuration from env var {CONFIG_ENV_VAR_NAME}");
Arc::new(Configuration::load_from_env_var(CONFIG_ENV_VAR_NAME).unwrap())
} else {
println!("Loading configuration from config file {CONFIG_PATH}");
Arc::new(Configuration::load_from_file(CONFIG_PATH).unwrap())
};

// Initialize statistics
let (stats_event_sender, stats_repository) = setup_statistics(config.tracker_usage_statistics);

// Initialize Torrust tracker
let tracker = match tracker::Tracker::new(config.clone(), stats_event_sender, stats_repository) {
Ok(tracker) => Arc::new(tracker),
Err(error) => {
panic!("{}", error)
}
};

// Initialize logging
logging::setup(&config);
let (config, tracker) = bootstrap::app::setup();

// Run jobs
let jobs = setup::setup(&config, tracker.clone()).await;
let jobs = app::start(config.clone(), tracker.clone()).await;

// handle the signals here
// handle the signals
tokio::select! {
_ = tokio::signal::ctrl_c() => {
info!("Torrust shutting down..");
Expand Down
98 changes: 0 additions & 98 deletions src/protocol/crypto.rs

This file was deleted.

5 changes: 0 additions & 5 deletions src/protocol/mod.rs

This file was deleted.

File renamed without changes.
File renamed without changes.
4 changes: 2 additions & 2 deletions src/apis/server.rs → src/servers/apis/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ use futures::Future;
use log::info;

use super::routes::router;
use crate::signals::shutdown_signal;
use crate::servers::signals::shutdown_signal;
use crate::tracker::Tracker;

#[derive(Debug)]
Expand Down Expand Up @@ -219,7 +219,7 @@ mod tests {
use torrust_tracker_configuration::Configuration;
use torrust_tracker_test_helpers::configuration;

use crate::apis::server::ApiServer;
use crate::servers::apis::server::ApiServer;
use crate::tracker;
use crate::tracker::statistics;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ use serde::Deserialize;
use super::responses::{
auth_key_response, failed_to_delete_key_response, failed_to_generate_key_response, failed_to_reload_keys_response,
};
use crate::apis::v1::context::auth_key::resources::AuthKey;
use crate::apis::v1::responses::{invalid_auth_key_param_response, ok_response};
use crate::servers::apis::v1::context::auth_key::resources::AuthKey;
use crate::servers::apis::v1::responses::{invalid_auth_key_param_response, ok_response};
use crate::tracker::auth::Key;
use crate::tracker::Tracker;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use std::convert::From;

use serde::{Deserialize, Serialize};

use crate::protocol::clock::convert_from_iso_8601_to_timestamp;
use crate::shared::clock::convert_from_iso_8601_to_timestamp;
use crate::tracker::auth::{self, Key};

#[derive(Serialize, Deserialize, Debug, PartialEq, Eq)]
Expand Down Expand Up @@ -36,7 +36,7 @@ mod tests {
use std::time::Duration;

use super::AuthKey;
use crate::protocol::clock::{Current, TimeNow};
use crate::shared::clock::{Current, TimeNow};
use crate::tracker::auth::{self, Key};

struct TestTime {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ use std::error::Error;
use axum::http::{header, StatusCode};
use axum::response::{IntoResponse, Response};

use crate::apis::v1::context::auth_key::resources::AuthKey;
use crate::apis::v1::responses::unhandled_rejection_response;
use crate::servers::apis::v1::context::auth_key::resources::AuthKey;
use crate::servers::apis::v1::responses::unhandled_rejection_response;

/// # Panics
///
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ use serde::{de, Deserialize, Deserializer};

use super::resources::torrent::ListItem;
use super::responses::{torrent_info_response, torrent_list_response, torrent_not_known_response};
use crate::apis::v1::responses::invalid_info_hash_param_response;
use crate::apis::InfoHashParam;
use crate::protocol::info_hash::InfoHash;
use crate::servers::apis::v1::responses::invalid_info_hash_param_response;
use crate::servers::apis::InfoHashParam;
use crate::shared::bit_torrent::info_hash::InfoHash;
use crate::tracker::services::torrent::{get_torrent_info, get_torrents, Pagination};
use crate::tracker::Tracker;

Expand Down
Loading