From abdae988167e0220284787ed43e21634f7ae6a86 Mon Sep 17 00:00:00 2001 From: mbecker20 Date: Wed, 3 May 2023 20:02:37 +0000 Subject: [PATCH] core handle term signal --- Cargo.lock | 108 +++++++++++++++++++++++++++++++---------------- core/Cargo.toml | 7 +-- core/src/main.rs | 50 +++++++++++++--------- 3 files changed, 107 insertions(+), 58 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4eb854be2..b02f28158 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -126,9 +126,9 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "aws-config" -version = "0.55.0" +version = "0.55.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1854be4730cc87602316707045a5c0585287419d54f293bbb52a82c895d9086a" +checksum = "fc00553f5f3c06ffd4510a9d576f92143618706c45ea6ff81e84ad9be9588abd" dependencies = [ "aws-credential-types", "aws-http", @@ -156,9 +156,9 @@ dependencies = [ [[package]] name = "aws-credential-types" -version = "0.55.1" +version = "0.55.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4232d3729eefc287adc0d5a8adc97b7d94eefffe6bbe94312cc86c7ab6b06ce" +checksum = "4cb57ac6088805821f78d282c0ba8aec809f11cbee10dda19a97b03ab040ccc2" dependencies = [ "aws-smithy-async", "aws-smithy-types", @@ -170,9 +170,9 @@ dependencies = [ [[package]] name = "aws-endpoint" -version = "0.55.1" +version = "0.55.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f04ab03b3f1cca91f7cccaa213056d732accb14e2e65debfacc1d28627d162" +checksum = "9c5f6f84a4f46f95a9bb71d9300b73cd67eb868bc43ae84f66ad34752299f4ac" dependencies = [ "aws-smithy-http", "aws-smithy-types", @@ -184,9 +184,9 @@ dependencies = [ [[package]] name = "aws-http" -version = "0.55.1" +version = "0.55.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ad8c53f7560baaf635b6aa811f3213d39b50555d100f83e43801652d4e318e" +checksum = "a754683c322f7dc5167484266489fdebdcd04d26e53c162cad1f3f949f2c5671" dependencies = [ "aws-credential-types", "aws-smithy-http", @@ -203,9 +203,9 @@ dependencies = [ [[package]] name = "aws-sdk-ec2" -version = "0.26.0" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74a7d11843d7b0234b874ed430cba258ac272aec352508371944eceb64d57dd0" +checksum = "5ab77050ecd90bf116dcbff6a7b8b2fb294b1399900a97e870c4879fe2010827" dependencies = [ "aws-credential-types", "aws-endpoint", @@ -231,9 +231,9 @@ dependencies = [ [[package]] name = "aws-sdk-sso" -version = "0.25.0" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c10657158e12163d6b3fb1e0c9154e43656843794a3071d9ee63ec82a4de2d" +checksum = "babfd626348836a31785775e3c08a4c345a5ab4c6e06dfd9167f2bee0e6295d6" dependencies = [ "aws-credential-types", "aws-endpoint", @@ -256,9 +256,9 @@ dependencies = [ [[package]] name = "aws-sdk-sts" -version = "0.25.0" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "706a308b7277ac9aac78ab37933509659c6f978a8473e95d8e7a8103093133c3" +checksum = "2d0fbe3c2c342bc8dfea4bb43937405a8ec06f99140a0dcb9c7b59e54dfa93a1" dependencies = [ "aws-credential-types", "aws-endpoint", @@ -282,9 +282,9 @@ dependencies = [ [[package]] name = "aws-sig-auth" -version = "0.55.1" +version = "0.55.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d77d879ab210e958ba65a6d3842969a596738c024989cd3e490cf9f9b560ec" +checksum = "84dc92a63ede3c2cbe43529cb87ffa58763520c96c6a46ca1ced80417afba845" dependencies = [ "aws-credential-types", "aws-sigv4", @@ -296,9 +296,9 @@ dependencies = [ [[package]] name = "aws-sigv4" -version = "0.55.1" +version = "0.55.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ab4eebc8ec484fb9eab04b15a5d1e71f3dc13bee8fdd2d9ed78bcd6ecbd7192" +checksum = "392fefab9d6fcbd76d518eb3b1c040b84728ab50f58df0c3c53ada4bea9d327e" dependencies = [ "aws-smithy-http", "form_urlencoded", @@ -315,9 +315,9 @@ dependencies = [ [[package]] name = "aws-smithy-async" -version = "0.55.1" +version = "0.55.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88573bcfbe1dcfd54d4912846df028b42d6255cbf9ce07be216b1bbfd11fc4b9" +checksum = "ae23b9fe7a07d0919000116c4c5c0578303fbce6fc8d32efca1f7759d4c20faf" dependencies = [ "futures-util", "pin-project-lite", @@ -327,9 +327,9 @@ dependencies = [ [[package]] name = "aws-smithy-client" -version = "0.55.1" +version = "0.55.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2f52352bae50d3337d5d6151b695d31a8c10ebea113eca5bead531f8301b067" +checksum = "5230d25d244a51339273b8870f0f77874cd4449fb4f8f629b21188ae10cfc0ba" dependencies = [ "aws-smithy-async", "aws-smithy-http", @@ -351,9 +351,9 @@ dependencies = [ [[package]] name = "aws-smithy-http" -version = "0.55.1" +version = "0.55.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03bcc02d7ed9649d855c8ce4a735e9848d7b8f7568aad0504c158e3baa955df8" +checksum = "b60e2133beb9fe6ffe0b70deca57aaeff0a35ad24a9c6fab2fd3b4f45b99fdb5" dependencies = [ "aws-smithy-types", "bytes", @@ -373,9 +373,9 @@ dependencies = [ [[package]] name = "aws-smithy-http-tower" -version = "0.55.1" +version = "0.55.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da88b3a860f65505996c29192d800f1aeb9480440f56d63aad33a3c12045017a" +checksum = "3a4d94f556c86a0dd916a5d7c39747157ea8cb909ca469703e20fee33e448b67" dependencies = [ "aws-smithy-http", "aws-smithy-types", @@ -389,18 +389,18 @@ dependencies = [ [[package]] name = "aws-smithy-json" -version = "0.55.1" +version = "0.55.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b0c1e87d75cac889dca2a7f5ba280da2cde8122448e7fec1d614194dfa00c70" +checksum = "5ce3d6e6ebb00b2cce379f079ad5ec508f9bcc3a9510d9b9c1840ed1d6f8af39" dependencies = [ "aws-smithy-types", ] [[package]] name = "aws-smithy-query" -version = "0.55.1" +version = "0.55.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6b50d15f446c19e088009ecb00e2fb2d13133d6fe1db702e9aa67ad135bf6a6" +checksum = "d58edfca32ef9bfbc1ca394599e17ea329cb52d6a07359827be74235b64b3298" dependencies = [ "aws-smithy-types", "urlencoding", @@ -408,9 +408,9 @@ dependencies = [ [[package]] name = "aws-smithy-types" -version = "0.55.1" +version = "0.55.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd0afc731fd1417d791f9145a1e0c30e23ae0beaab9b4814017708ead2fc20f1" +checksum = "58db46fc1f4f26be01ebdb821751b4e2482cd43aa2b64a0348fb89762defaffa" dependencies = [ "base64-simd", "itoa", @@ -421,18 +421,18 @@ dependencies = [ [[package]] name = "aws-smithy-xml" -version = "0.55.1" +version = "0.55.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b5398c1c25dfc6f8c282b1552a66aa807c9d6e15e1b3a84b94aa44e7859bec3" +checksum = "fb557fe4995bd9ec87fb244bbb254666a971dc902a783e9da8b7711610e9664c" dependencies = [ "xmlparser", ] [[package]] name = "aws-types" -version = "0.55.1" +version = "0.55.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9b082e329d9a304d39e193ad5c7ab363a0d6507aca6965e0673a746686fb0cc" +checksum = "de0869598bfe46ec44ffe17e063ed33336e59df90356ca8ff0e8da6f7c1d994b" dependencies = [ "aws-credential-types", "aws-smithy-async", @@ -832,6 +832,7 @@ dependencies = [ "serde_json", "sha2", "slack_client_rs", + "termination_signal", "tokio", "tokio-tungstenite", "tokio-util", @@ -2824,6 +2825,16 @@ dependencies = [ "digest", ] +[[package]] +name = "signal-hook" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "732768f1176d21d09e076c23a93123d40bba92d50c4058da34d45c8de8e682b9" +dependencies = [ + "libc", + "signal-hook-registry", +] + [[package]] name = "signal-hook-registry" version = "1.4.1" @@ -2833,6 +2844,18 @@ dependencies = [ "libc", ] +[[package]] +name = "signal-hook-tokio" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213241f76fb1e37e27de3b6aa1b068a2c333233b59cca6634f634b80a27ecf1e" +dependencies = [ + "futures-core", + "libc", + "signal-hook", + "tokio", +] + [[package]] name = "slab" version = "0.4.8" @@ -3006,6 +3029,19 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "termination_signal" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c8af403325efec5c1f2ab0f69732a47680c40c5379b088958d053cf946b6bfa" +dependencies = [ + "anyhow", + "futures", + "signal-hook", + "signal-hook-tokio", + "tokio", +] + [[package]] name = "tests" version = "0.1.0" diff --git a/core/Cargo.toml b/core/Cargo.toml index 3cdae792c..9132dec83 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -35,6 +35,7 @@ futures-util = "0.3" diff-struct = "0.5" typeshare = "1.0.0" hex = "0.4" -aws-config = "0.55" -aws-sdk-ec2 = "0.26" -merge_config_files = "0.1.3" \ No newline at end of file +aws-config = "0.55.2" +aws-sdk-ec2 = "0.27.0" +merge_config_files = "0.1.3" +termination_signal = "0.1.2" \ No newline at end of file diff --git a/core/src/main.rs b/core/src/main.rs index 38ab9473b..3c20ad5cd 100644 --- a/core/src/main.rs +++ b/core/src/main.rs @@ -4,6 +4,7 @@ use ::helpers::get_socket_addr; use auth::JwtClient; use axum::{http::StatusCode, Router}; use state::State; +use termination_signal::tokio::immediate_term_handle; use tower_http::cors::{Any, CorsLayer}; mod actions; @@ -22,29 +23,40 @@ type ResponseResult = Result; async fn main() -> anyhow::Result<()> { println!("version: v{}", env!("CARGO_PKG_VERSION")); - let (config, spa_router) = config::load(); + let term_signal = immediate_term_handle()?; - println!("starting monitor core on port {}...", config.port); + let app = tokio::spawn(async move { + let (config, spa_router) = config::load(); - let app = Router::new() - .merge(spa_router) - .nest("/api", api::router()) - .nest("/auth", auth::router(&config)) - .nest("/ws", ws::router()) - .layer(JwtClient::extension(&config)) - .layer(State::extension(config.clone()).await) - .layer( - CorsLayer::new() - .allow_origin(Any) - .allow_methods(Any) - .allow_headers(Any), - ); + println!("starting monitor core on port {}...", config.port); - println!("started monitor core on port {}", config.port); + let app = Router::new() + .merge(spa_router) + .nest("/api", api::router()) + .nest("/auth", auth::router(&config)) + .nest("/ws", ws::router()) + .layer(JwtClient::extension(&config)) + .layer(State::extension(config.clone()).await) + .layer( + CorsLayer::new() + .allow_origin(Any) + .allow_methods(Any) + .allow_headers(Any), + ); - axum::Server::bind(&get_socket_addr(config.port)) - .serve(app.into_make_service()) - .await?; + println!("started monitor core on port {}", config.port); + + axum::Server::bind(&get_socket_addr(config.port)) + .serve(app.into_make_service()) + .await?; + + anyhow::Ok(()) + }); + + tokio::select! { + res = app => return res?, + _ = term_signal => {}, + } Ok(()) }