summaryrefslogtreecommitdiff
path: root/src/handlers.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/handlers.rs')
-rw-r--r--src/handlers.rs24
1 files changed, 23 insertions, 1 deletions
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<ListQuery>,
) -> Result<([(HeaderName, &'static str); 2], Vec<u8>), 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<PgPool>,
AppPath(id): AppPath<Uuid>,
) -> Result<Json<MeasurementView>, 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<PgPool>,
AppPath(id): AppPath<Uuid>,
) -> Result<StatusCode, AppError> {
- 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)
}