From 7f4a7e9fd002c191b982dd3036dfb6986f448ccc Mon Sep 17 00:00:00 2001 From: Danil Date: Thu, 18 Jan 2024 15:06:27 +0100 Subject: [PATCH] fix(api): Healtcheck and api fixes (#360) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # What ❔ ## Why ❔ ## Checklist - [ ] PR title corresponds to the body of PR (we generate changelog entries from PRs). - [ ] Tests for the changes have been added / updated. - [ ] Documentation comments have been added / updated. - [ ] Code has been formatted via `cargo fmt`. --------- Signed-off-by: Danil Co-authored-by: Fedor Sakharov --- api/src/lib.rs | 8 ++++++++ bin/withdrawal-finalizer/src/main.rs | 10 ++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/api/src/lib.rs b/api/src/lib.rs index a1410b9f..0ead7c62 100644 --- a/api/src/lib.rs +++ b/api/src/lib.rs @@ -32,6 +32,7 @@ impl From for WithdrawalResponse { pub async fn run_server(pool: PgPool) { let app = Router::new() .route("/withdrawals/:from", get(get_withdrawals)) + .route("/health", get(health)) .with_state(pool); // run our app with hyper, listening globally on port 3000 @@ -39,6 +40,13 @@ pub async fn run_server(pool: PgPool) { axum::serve(listener, app).await.unwrap(); } +async fn health(State(pool): State) -> Result<&'static str, StatusCode> { + pool.acquire() + .await + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?; + Ok("ok") +} + async fn get_withdrawals( Path(from): Path
, State(pool): State, diff --git a/bin/withdrawal-finalizer/src/main.rs b/bin/withdrawal-finalizer/src/main.rs index daf2c5f1..457a61a4 100644 --- a/bin/withdrawal-finalizer/src/main.rs +++ b/bin/withdrawal-finalizer/src/main.rs @@ -15,7 +15,10 @@ use ethers::{ types::U256, }; use eyre::{anyhow, Result}; -use sqlx::{postgres::PgConnectOptions, ConnectOptions, PgConnection, PgPool}; +use sqlx::{ + postgres::{PgConnectOptions, PgPoolOptions}, + ConnectOptions, PgConnection, +}; use chain_events::{BlockEvents, L2EventsListener}; use client::{l1bridge::codegen::IL1Bridge, zksync_contract::codegen::IZkSync, ZksyncMiddleware}; @@ -177,7 +180,10 @@ async fn main() -> Result<()> { let options = PgConnectOptions::from_str(config.database_url.as_str())?.disable_statement_logging(); - let pgpool = PgPool::connect_with(options).await?; + let pgpool = PgPoolOptions::new() + .acquire_timeout(Duration::from_secs(2)) + .connect_with(options) + .await?; let from_l2_block = start_from_l2_block( client_l2.clone(),