From e45e9fa8b50daa028233fd739fe96a3bdc8ec54b Mon Sep 17 00:00:00 2001 From: batsumaru <> Date: Fri, 16 Oct 2026 16:18:02 +0900 Subject: Add more logging --- src/handlers.rs | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'src/handlers.rs') diff --git a/src/handlers.rs b/src/handlers.rs index 7067f3a..9ae87c3 100644 --- a/src/handlers.rs +++ b/src/handlers.rs @@ -29,6 +29,7 @@ pub async fn export_measurements( AppQuery(query): AppQuery, ) -> Result<([(HeaderName, &'static str); 2], Vec), AppError> { let rows = fetch_measurements(&pool, &query).await?; + tracing::info!(count = rows.len(), "exporting measurements"); let mut writer = csv::WriterBuilder::new() .has_headers(false) .from_writer(Vec::new()); @@ -65,6 +66,14 @@ async fn fetch_measurements( { return Err(AppError::BadRequest("from must not be after to")); } + tracing::debug!( + from = ?query.from, + to = ?query.to, + metric_type = ?query.metric_type, + limit = ?limit, + order = ?query.order, + "fetching measurements" + ); // SQL can't bind ASC/DESC as a parameter. The CASE yields measured_at only when // `order` is desc (sorted DESC) and NULL otherwise, so that key ties for every // row and the ASC key decides the order. If this gets slow, use an if/else with a @@ -88,6 +97,7 @@ async fn fetch_measurements( ) .fetch_all(pool) .await?; + tracing::debug!(count = rows.len(), "fetched measurements"); Ok(rows) } @@ -110,6 +120,11 @@ pub async fn create_measurement( ) .fetch_one(&pool) .await?; + tracing::info!( + id = %measurement.id, + metric_type = ?measurement.metric_type, + "created measurement" + ); let location = format!("/measurements/{}", measurement.id); Ok(( StatusCode::CREATED, @@ -122,6 +137,7 @@ pub async fn get_measurement( State(pool): State, AppPath(id): AppPath, ) -> Result, AppError> { + tracing::debug!(%id, "fetching measurement"); let measurement = sqlx::query_as!( MeasurementView, " @@ -160,6 +176,7 @@ pub async fn update_measurement( if result.rows_affected() == 0 { return Err(AppError::NotFound); } + tracing::info!(%id, "updated measurement"); Ok(StatusCode::NO_CONTENT) } @@ -167,9 +184,14 @@ pub async fn delete_measurement( State(pool): State, AppPath(id): AppPath, ) -> Result { - sqlx::query!("DELETE FROM measurement WHERE id = $1", id) + let result = sqlx::query!("DELETE FROM measurement WHERE id = $1", id) .execute(&pool) .await?; + if result.rows_affected() == 0 { + tracing::debug!(%id, "measurement to delete did not exist"); + } else { + tracing::info!(%id, "deleted measurement"); + } Ok(StatusCode::NO_CONTENT) } -- cgit v1.3