pub static NONE_LABEL: &str = "-";
pub mod scope {
pub static STATEMENT: &str = "surrealdb.statement";
pub static QUERY: &str = "surrealdb.query";
pub static TRANSACTION: &str = "surrealdb.transaction";
pub static RPC: &str = "surrealdb.rpc";
pub static AUTH: &str = "surrealdb.auth";
pub static SESSION: &str = "surrealdb.session";
pub static NETWORK: &str = "surrealdb.network";
pub static HTTP: &str = "surrealdb.http";
pub static LIVE_QUERY: &str = "surrealdb.live_query";
pub static PROCESS: &str = "surrealdb.process";
pub static TENANT: &str = "surrealdb.tenant";
pub static DS: &str = "surrealdb.ds";
pub static AUDIT: &str = "surrealdb.audit";
pub static SLOW_QUERY: &str = "surrealdb.slow_query";
pub static STORAGE: &str = "surrealdb.storage";
pub static GRAPHQL: &str = "surrealdb.graphql";
pub static MCP: &str = "surrealdb.mcp";
pub static ALL: &[&str] = &[
AUDIT,
AUTH,
DS,
GRAPHQL,
HTTP,
LIVE_QUERY,
MCP,
NETWORK,
PROCESS,
QUERY,
RPC,
SESSION,
SLOW_QUERY,
STATEMENT,
STORAGE,
TENANT,
TRANSACTION,
];
}
pub mod names {
pub static BUILD_INFO: &str = "surrealdb.build.info";
pub static PROCESS_UPTIME: &str = "surrealdb.process.uptime";
pub static PROCESS_MEMORY: &str = "surrealdb.process.memory";
pub static PROCESS_CPU_PERCENT: &str = "surrealdb.process.cpu_percent";
pub static STATEMENT_TOTAL: &str = "surrealdb.statement";
pub static STATEMENT_DURATION: &str = "surrealdb.statement.duration";
pub static STATEMENT_ROWS: &str = "surrealdb.statement.rows";
pub static QUERY_TOTAL: &str = "surrealdb.query";
pub static QUERY_DURATION: &str = "surrealdb.query.duration";
pub static TRANSACTION_TOTAL: &str = "surrealdb.transaction";
pub static TRANSACTION_DURATION: &str = "surrealdb.transaction.duration";
pub static TRANSACTION_KV_OPS: &str = "surrealdb.transaction.kv_ops";
pub static TRANSACTION_KEYS_READ: &str = "surrealdb.transaction.keys_read";
pub static TRANSACTION_KEYS_WRITTEN: &str = "surrealdb.transaction.keys_written";
pub static TRANSACTION_KEY_BYTES_READ: &str = "surrealdb.transaction.key_bytes_read";
pub static TRANSACTION_VALUE_BYTES_READ: &str = "surrealdb.transaction.value_bytes_read";
pub static TRANSACTION_KEY_BYTES_WRITTEN: &str = "surrealdb.transaction.key_bytes_written";
pub static TRANSACTION_VALUE_BYTES_WRITTEN: &str = "surrealdb.transaction.value_bytes_written";
pub static TRANSACTION_CONFLICTS: &str = "surrealdb.transaction.conflicts";
pub static RPC_TOTAL: &str = "surrealdb.rpc";
pub static RPC_DURATION: &str = "surrealdb.rpc.duration";
pub static AUTH_TOTAL: &str = "surrealdb.auth";
pub static SESSION_TOTAL: &str = "surrealdb.session";
pub static SESSION_ACTIVE: &str = "surrealdb.session.active";
pub static SESSION_DURATION: &str = "surrealdb.session.duration";
pub static NETWORK_RECEIVED: &str = "surrealdb.network.received";
pub static NETWORK_SENT: &str = "surrealdb.network.sent";
pub static HTTP_REQUEST_TOTAL: &str = "surrealdb.http.request";
pub static HTTP_REQUEST_DURATION: &str = "surrealdb.http.request.duration";
pub static HTTP_REQUEST_SIZE: &str = "surrealdb.http.request.size";
pub static HTTP_RESPONSE_SIZE: &str = "surrealdb.http.response.size";
pub static HTTP_ACTIVE_REQUESTS: &str = "surrealdb.http.active_requests";
pub static LIVE_QUERY_ACTIVE: &str = "surrealdb.live_query.active";
pub static LIVE_QUERY_NOTIFICATIONS: &str = "surrealdb.live_query.notifications";
pub static SLOW_QUERY_TOTAL: &str = "surrealdb.slow_query";
pub static GRAPHQL_OPERATION_TOTAL: &str = "surrealdb.graphql.operation";
pub static GRAPHQL_OPERATION_DURATION: &str = "surrealdb.graphql.operation.duration";
pub static MCP_TOOL_INVOCATION: &str = "surrealdb.mcp.tool.invocation";
pub static MCP_TOOL_DURATION: &str = "surrealdb.mcp.tool.duration";
pub static MCP_SESSION_ACTIVE: &str = "surrealdb.mcp.session.active";
}
pub mod attrs {
pub static OUTCOME: &str = "outcome";
pub static STATEMENT_TYPE: &str = "statement_type";
pub static NAMESPACE: &str = "namespace";
pub static DATABASE: &str = "database";
pub static USER: &str = "user";
pub static PROTOCOL: &str = "protocol";
pub static SESSION_ACTION: &str = "session_action";
pub static SERVICE: &str = "service";
pub static WRITE: &str = "write";
pub static KV_OP: &str = "op";
pub static RPC_METHOD: &str = "rpc.method";
pub static AUTH_ACTION: &str = "auth_action";
pub static AUTH_SCOPE: &str = "auth_scope";
pub static HTTP_METHOD: &str = "http.request.method";
pub static HTTP_ROUTE: &str = "http.route";
pub static HTTP_STATUS_CODE: &str = "http.response.status_code";
pub static NETWORK_DIRECTION: &str = "direction";
pub static ERROR_CLASS: &str = "error_class";
pub static GRAPHQL_OPERATION_TYPE: &str = "operation_type";
pub static MCP_TOOL: &str = "tool";
pub static MCP_TRANSPORT: &str = "transport";
}
pub use surrealdb_core::observe::error_class;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn scope_all_is_sorted_and_unique() {
let mut sorted = scope::ALL.to_vec();
sorted.sort_unstable();
sorted.dedup();
assert_eq!(scope::ALL, sorted, "scope::ALL must be sorted and free of duplicates");
}
#[test]
fn every_instrument_name_starts_with_surrealdb_prefix() {
const NAMES: &[&str] = &[
names::AUTH_TOTAL,
names::BUILD_INFO,
names::GRAPHQL_OPERATION_DURATION,
names::GRAPHQL_OPERATION_TOTAL,
names::HTTP_ACTIVE_REQUESTS,
names::HTTP_REQUEST_DURATION,
names::HTTP_REQUEST_SIZE,
names::HTTP_REQUEST_TOTAL,
names::HTTP_RESPONSE_SIZE,
names::LIVE_QUERY_ACTIVE,
names::LIVE_QUERY_NOTIFICATIONS,
names::MCP_SESSION_ACTIVE,
names::MCP_TOOL_DURATION,
names::MCP_TOOL_INVOCATION,
names::NETWORK_RECEIVED,
names::NETWORK_SENT,
names::PROCESS_CPU_PERCENT,
names::PROCESS_MEMORY,
names::PROCESS_UPTIME,
names::QUERY_DURATION,
names::QUERY_TOTAL,
names::RPC_DURATION,
names::RPC_TOTAL,
names::SESSION_ACTIVE,
names::SESSION_DURATION,
names::SESSION_TOTAL,
names::SLOW_QUERY_TOTAL,
names::STATEMENT_DURATION,
names::STATEMENT_ROWS,
names::STATEMENT_TOTAL,
names::TRANSACTION_CONFLICTS,
names::TRANSACTION_DURATION,
names::TRANSACTION_KEYS_READ,
names::TRANSACTION_KEYS_WRITTEN,
names::TRANSACTION_KEY_BYTES_READ,
names::TRANSACTION_KEY_BYTES_WRITTEN,
names::TRANSACTION_KV_OPS,
names::TRANSACTION_TOTAL,
names::TRANSACTION_VALUE_BYTES_READ,
names::TRANSACTION_VALUE_BYTES_WRITTEN,
];
for n in NAMES {
assert!(
n.starts_with("surrealdb."),
"instrument `{n}` does not use the `surrealdb.` namespace",
);
}
}
#[test]
fn no_dim_infix_in_instrument_names() {
const NAMES: &[&str] = &[
names::QUERY_DURATION,
names::HTTP_REQUEST_DURATION,
names::HTTP_ACTIVE_REQUESTS,
names::NETWORK_RECEIVED,
names::NETWORK_SENT,
];
for n in NAMES {
assert!(!n.contains(".dim."), "`{n}` retained the legacy `.dim.` infix");
}
}
}