A Wrapped / Replay like for teal.fm and rocksky.app (currently on hiatus)
3
fork

Configure Feed

Select the types of activity you want to include in your feed.

at main 42 lines 1.2 kB view raw
1use clap::Parser; 2use metrics_exporter_prometheus::PrometheusBuilder; 3use r2d2_sqlite::SqliteConnectionManager; 4 5mod analysis; 6mod config; 7mod ingest; 8mod lex; 9mod mbz; 10mod server; 11mod utils; 12 13pub type SqlitePool = r2d2::Pool<SqliteConnectionManager>; 14pub type SqliteConnection = r2d2::PooledConnection<SqliteConnectionManager>; 15 16#[tokio::main] 17async fn main() -> eyre::Result<()> { 18 tracing_subscriber::fmt::init(); 19 PrometheusBuilder::new().install()?; 20 21 let config = config::Config::parse(); 22 23 let manager = SqliteConnectionManager::file(&config.db).with_init(|conn| { 24 conn.pragma_update(None, "journal_mode", "WAL")?; 25 conn.pragma_update(None, "synchronous", "NORMAL")?; 26 conn.pragma_update(None, "cache_size", -16 * 1024)?; // 64MB 27 conn.execute_batch(include_str!("init.sql")) 28 }); 29 let pool = r2d2::Pool::new(manager)?; 30 31 let replication_agent = mbz::ReplicationAgent::new(pool.clone(), config.db, config.mb_agent); 32 33 let mut tasks = tokio::task::JoinSet::new(); 34 35 tasks.spawn(server::start_server(pool.clone(), config.port)); 36 tasks.spawn(ingest::tapstream(pool, config.tap)); 37 tasks.spawn(replication_agent.start()); 38 39 tasks.join_all().await; 40 41 Ok(()) 42}