MCPcopy Create free account
hub / github.com/YougLin-dev/amp-server / start

Function start

api/src/lib.rs:29–81  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

27
28#[tokio::main]
29async fn start() -> Result<()> {
30 // Load environment variables from .env file
31 dotenvy::dotenv().ok();
32
33 // Initialize tracing
34 let rust_log = env::var("RUST_LOG").unwrap_or_else(|_| "info".to_string());
35 tracing_subscriber::registry()
36 .with(EnvFilter::new(rust_log))
37 .with(tracing_subscriber::fmt::layer())
38 .try_init()?;
39
40 // Load required environment variables
41 let host = env::var("HOST").expect("HOST is not set in .env file");
42 let port = env::var("PORT").expect("PORT is not set in .env file");
43 let amp_api_key = env::var("AMP_API_KEY").expect("AMP_API_KEY is not set in .env file");
44 AMP_API_KEY.set(amp_api_key).expect("AMP_API_KEY already initialized");
45 // Optional Google API key for Google proxy
46 if let Ok(google_api_key) = env::var("GOOGLE_API_KEY") {
47 let _ = GOOGLE_API_KEY.set(google_api_key);
48 }
49 let server_url = format!("{host}:{port}");
50
51 // Load proxy configuration
52 let proxy_config = ProxyConfig::load_from_file("proxy_config.yaml")
53 .unwrap_or_else(|e| {
54 info!("Using default proxy configuration ({})", e);
55 ProxyConfig::default()
56 });
57
58 info!("Loaded proxy configuration with {} endpoints", proxy_config.endpoints.len());
59 for endpoint in &proxy_config.endpoints {
60 info!(" - Path: {}, Response Type: {:?}", endpoint.path, endpoint.response_type);
61 }
62
63 // Create proxy service
64 let proxy_service = ProxyService::new(proxy_config);
65
66 // Initialize router
67 let app = Router::new()
68 .merge(user::router())
69 .merge(telemetry::router())
70 .merge(proxy_service.create_router())
71 .layer(ServiceBuilder::new().layer(TraceLayer::new_for_http()));
72
73 // Start server
74 let listener = tokio::net::TcpListener::bind(&server_url).await?;
75 info!("Listening on {}", server_url);
76 axum::serve(listener, app)
77 .with_graceful_shutdown(shutdown_signal())
78 .await?;
79
80 Ok(())
81}
82
83async fn shutdown_signal() {
84 let ctrl_c = async {

Callers 1

mainFunction · 0.85

Calls 3

shutdown_signalFunction · 0.85
create_routerMethod · 0.80
routerFunction · 0.50

Tested by

no test coverage detected