Add SQLx operation tracing (#5223)

* wip: vendor sqlx-tracing

* (compiles) standardize pg types used

* more standardization

* general log message improvements

* wip: improve sqlx-tracing architecture

* unify sqlx::Executor type

* wip: try fix sqlx tracing

* wip: sqlx-tracing compiles

* so close

* it compiles

* fix ci
This commit is contained in:
aecsocket
2026-01-28 13:38:57 +00:00
committed by GitHub
parent 7cb7e881fa
commit e57c15b3ce
146 changed files with 7320 additions and 801 deletions

View File

@@ -11,6 +11,7 @@ use crate::database::models::{
product_item, user_subscription_item, users_redeemals,
};
use crate::database::redis::RedisPool;
use crate::database::{PgPool, PgTransaction};
use crate::models::billing::{
ChargeStatus, ChargeType, PaymentPlatform, Price, PriceDuration,
ProductMetadata, SubscriptionMetadata, SubscriptionStatus,
@@ -28,7 +29,6 @@ use ariadne::ids::base62_impl::to_base62;
use chrono::Utc;
use futures::FutureExt;
use futures::stream::{FuturesUnordered, StreamExt};
use sqlx::PgPool;
use std::collections::HashSet;
use std::str::FromStr;
use std::time::Instant;
@@ -49,7 +49,7 @@ async fn update_tax_amounts(
loop {
let mut txn = pg.begin().await?;
let charges = DBCharge::get_updateable_lock(&mut *txn, 5).await?;
let charges = DBCharge::get_updateable_lock(&mut txn, 5).await?;
if charges.is_empty() {
info!("No more charges to process");
@@ -273,7 +273,7 @@ async fn update_anrok_transactions(
) -> Result<(), ApiError> {
async fn process_charge(
stripe_client: &stripe::Client,
txn: &mut sqlx::PgTransaction<'_>,
txn: &mut PgTransaction<'_>,
redis: &RedisPool,
anrok_client: &anrok::Client,
mut c: DBCharge,
@@ -341,7 +341,7 @@ async fn update_anrok_transactions(
.and_then(|x| x.billing_details.address);
let stripe_customer_id =
DBUser::get_id(c.user_id, &mut **txn, redis)
DBUser::get_id(c.user_id, &mut *txn, redis)
.await?
.ok_or_else(|| {
ApiError::from(DatabaseError::Database(
@@ -395,7 +395,7 @@ async fn update_anrok_transactions(
(address, tax_platform_id, customer_id)
};
let tax_id = DBProductsTaxIdentifier::get_price(c.price_id, &mut **txn)
let tax_id = DBProductsTaxIdentifier::get_price(c.price_id, &mut *txn)
.await?
.ok_or_else(|| DatabaseError::Database(sqlx::Error::RowNotFound))?;
@@ -466,7 +466,7 @@ async fn update_anrok_transactions(
let mut txn = pg.begin().await?;
let mut charges =
DBCharge::get_missing_tax_identifier_lock(&mut *txn, offset, 1)
DBCharge::get_missing_tax_identifier_lock(&mut txn, offset, 1)
.await?;
let Some(c) = charges.pop() else {
@@ -654,7 +654,7 @@ pub async fn try_process_user_redeemal(
// Update `users_redeemal`, mark subscription as redeemed.
user_redeemal.status = users_redeemals::Status::Processed;
user_redeemal.update(&mut *txn).await?;
user_redeemal.update(&mut txn).await?;
txn.commit().await?;
@@ -896,7 +896,7 @@ async fn unprovision_subscriptions(
badges.bits() as i64,
user.id as DBUserId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
true
@@ -942,7 +942,7 @@ async fn unprovision_subscriptions(
DBUsersSubscriptionsAffiliations::deactivate(
subscription.id,
&mut *transaction,
&mut transaction,
)
.await
.wrap_internal_err(