phase 3 complete
This commit is contained in:
+53
-2
@@ -1,7 +1,58 @@
|
||||
mod api;
|
||||
mod db;
|
||||
mod ingest;
|
||||
mod types;
|
||||
|
||||
fn main() {
|
||||
println!("hagfish — not yet wired. Run tests with: cargo test");
|
||||
use axum::serve;
|
||||
use std::sync::Arc;
|
||||
use tokio::net::TcpListener;
|
||||
use tracing_subscriber::EnvFilter;
|
||||
|
||||
fn cleanup_stale_parquet_files() {
|
||||
let tmp_dir = std::env::temp_dir();
|
||||
match std::fs::read_dir(&tmp_dir) {
|
||||
Ok(entries) => {
|
||||
for entry in entries.filter_map(|e| e.ok()) {
|
||||
if let Some(name) = entry.file_name().to_str() {
|
||||
if name.starts_with("hagfish-") && name.ends_with(".parquet") {
|
||||
if let Ok(metadata) = entry.metadata() {
|
||||
let age = std::time::SystemTime::now()
|
||||
.duration_since(metadata.modified().unwrap());
|
||||
if age.map(|d| d.as_secs() > 3600).unwrap_or(false) {
|
||||
let _ = std::fs::remove_file(entry.path());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Err(e) => tracing::warn!("Failed to list temp dir: {e}"),
|
||||
}
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> anyhow::Result<()> {
|
||||
tracing_subscriber::fmt()
|
||||
.with_env_filter(EnvFilter::from_default_env())
|
||||
.init();
|
||||
|
||||
let config = Arc::new(types::Config::default());
|
||||
|
||||
cleanup_stale_parquet_files();
|
||||
|
||||
let conn = db::init(&config.duckdb_path)?;
|
||||
|
||||
let state = api::AppState {
|
||||
conn: Arc::new(tokio::sync::Mutex::new(conn)),
|
||||
config: config.clone(),
|
||||
};
|
||||
|
||||
let app = api::build_router(state);
|
||||
|
||||
let listener = TcpListener::bind(&config.bind_address).await?;
|
||||
tracing::info!("hagfish listening on http://{}", config.bind_address);
|
||||
|
||||
serve(listener, app).await?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user