1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
//! Metrics and observability for fraiseql-wire
//!
//! This module provides comprehensive metrics collection for production observability:
//!
//! - **Query metrics**: submissions, completions, latencies, row/byte counts
//! - **Error metrics**: error counts by category and phase
//! - **Stream metrics**: row processing, filtering, deserialization per-type
//! - **Connection metrics**: creation, authentication, state transitions
//! - **Channel metrics**: send latency (backpressure indicator)
//!
//! # Usage
//!
//! Metrics are recorded automatically throughout the query execution pipeline.
//! The `metrics` crate provides a framework-agnostic API that can be used with
//! various exporters (Prometheus, `OpenTelemetry`, `DataDog`, etc.).
//!
//! # Example
//!
//! ```no_run
//! // Requires: live Postgres server.
//! use fraiseql_wire::metrics;
//!
//! # async fn example() -> fraiseql_wire::Result<()> {
//! // Metrics are recorded automatically during query execution
//! let client = fraiseql_wire::FraiseClient::connect("postgres://...").await?;
//! let mut stream = client.query::<serde_json::Value>("users").execute().await?;
//!
//! // Metrics are now being collected:
//! // - fraiseql_queries_total{entity="users", ...}
//! // - fraiseql_query_startup_duration_ms{entity="users"}
//! // - fraiseql_rows_processed_total{entity="users", status="ok"}
//! // - fraiseql_query_total_duration_ms{entity="users"}
//! # Ok(())
//! # }
//! ```
pub use *;
pub use *;
pub use *;
pub use *;