Skip to main content

QueryAuditRecord

Struct QueryAuditRecord 

Source
pub struct QueryAuditRecord {
Show 31 fields pub query_id: String, pub client_ip: String, pub client: String, pub agent: String, pub entrypoint: String, pub session: Option<String>, pub notebook: Option<String>, pub cell: Option<String>, pub user: String, pub email: String, pub name: Option<String>, pub service_account: bool, pub service_account_name: Option<String>, pub sql: String, pub range_begin: Option<String>, pub range_end: Option<String>, pub limit: Option<u64>, pub context_init_ms: f64, pub planning_ms: f64, pub execution_ms: f64, pub setup_ms: f64, pub total_ms: f64, pub status: &'static str, pub error: Option<String>, pub error_class: Option<&'static str>, pub output_rows: Option<u64>, pub bytes_scanned: u64, pub peak_memory_bytes: u64, pub spilled_bytes: u64, pub spill_count: u64, pub sql_hash: String,
}
Expand description

One structured record per FlightSQL query, emitted as a JSON log line under the flightsql_query_audit target when the query completes, fails, or is abandoned mid-drain (client disconnect/cancel).

Fields§

§query_id: String

Minted as the first statement of execute_query, before any fallible step – always present, so a failure’s server-log line (which also carries it) and this record can be correlated by grepping the id.

§client_ip: String

The rightmost X-Forwarded-For entry (the address the trusted proxy in front of this service observed), falling back to X-Real-IP and then the gRPC peer address for a direct connection – see http_utils::get_client_ip. Unlike client/agent/entrypoint below, this comes from the network / trusted-proxy layer rather than from client-controlled attribution headers, so it’s grouped with query_id rather than with the self-reported fields – but that guarantee holds only for requests that actually traversed the trusted proxy; for a direct connection with no proxy in front, both X-Forwarded-For and X-Real-IP are just as caller-chosen as the self-reported fields.

§client: String§agent: String§entrypoint: String§session: Option<String>§notebook: Option<String>

Originating notebook name, if the query was issued from a notebook cell.

§cell: Option<String>

Originating cell name within the notebook, if the query was issued from a notebook cell.

§user: String§email: String§name: Option<String>§service_account: bool§service_account_name: Option<String>§sql: String§range_begin: Option<String>§range_end: Option<String>§limit: Option<u64>§context_init_ms: f64§planning_ms: f64§execution_ms: f64§setup_ms: f64§total_ms: f64§status: &'static str§error: Option<String>§error_class: Option<&'static str>

“user” | “resource” | “internal” | “denied”, derived from the gRPC status code (see flight_sql_service_impl::error_class) – “denied” is stamped directly by the query-deny-list check rather than derived from a DataFusionError. Omitted when status == "ok", matching the error field’s own “on error” convention.

§output_rows: Option<u64>§bytes_scanned: u64§peak_memory_bytes: u64§spilled_bytes: u64§spill_count: u64§sql_hash: String

Normalized SQL fingerprint – the first 16 hex chars of the SHA-256 of the literal-stripped, whitespace-collapsed token stream. Computed once per query and emitted on every terminal path regardless of whether the deny list is in active use, since it’s what an operator pastes into deny_queries after finding an offender in the audit log. Appended last so existing JSON consumers are unaffected.

Trait Implementations§

Source§

impl Serialize for QueryAuditRecord

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

§

impl<T> Allocation for T
where T: RefUnwindSafe + Send + Sync,

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> FutureExt for T

§

fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
§

fn with_current_context(self) -> WithContext<Self> ⓘ

Attaches the current Context to this type, returning a WithContext wrapper. Read more
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> IntoRequest<T> for T

§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
§

impl<L> LayerExt<L> for L

§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in [Layered].
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

impl<T> PolicyExt for T
where T: ?Sized,

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> Scope for T

§

fn with<F, R>(self, f: F) -> R
where Self: Sized, F: FnOnce(Self) -> R,

Scoped with ownership.
§

fn with_ref<F, R>(&self, f: F) -> R
where F: FnOnce(&Self) -> R,

Scoped with reference.
§

fn with_mut<F, R>(&mut self, f: F) -> R
where F: FnOnce(&mut Self) -> R,

Scoped with mutable reference.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> Value for T
where T: Send + Sync + 'static,

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more