caveman/gatherer/src/main.rs

58 lines
1.5 KiB
Rust

use std::time::Duration;
use metrics_util::MetricKindMask;
use metrics_exporter_prometheus::PrometheusBuilder;
use cave::{
config::LoadConfig,
firehose::FirehoseFactory,
};
mod config;
mod trends;
mod html_template;
mod http_server;
mod oauth;
#[tokio::main]
async fn main() {
cave::init::exit_on_panic();
cave::init::init_logger(5556);
let config = config::Config::load();
let recorder = PrometheusBuilder::new()
.add_global_label("application", env!("CARGO_PKG_NAME"))
.idle_timeout(MetricKindMask::ALL, Some(Duration::from_secs(600)))
.install_recorder()
.unwrap();
let http_client = reqwest::Client::builder()
.timeout(Duration::from_secs(10))
.pool_max_idle_per_host(0)
.user_agent(
format!("{}/{} (+https://fedi.buzz/)", env!("CARGO_PKG_NAME"), env!("CARGO_PKG_VERSION"))
)
.build()
.expect("reqwest::Client");
cave::systemd::status("Connecting to database");
let db = cave::db::Database::connect(&config.database).await;
cave::systemd::status("Starting redis client");
let store = cave::store::Store::new(
8, config.redis.clone(), config.redis_password_file.clone()
).await;
let firehose_factory = FirehoseFactory::new(config.redis, config.redis_password_file);
let http = http_server::start(
config.listen_port,
store,
db,
http_client,
firehose_factory,
recorder,
);
cave::systemd::ready();
http.await;
}