mirror of
https://github.com/fawney19/Aether.git
synced 2026-10-06 09:27:46 +08:00
fix(usage): unify OpenAI Live and WebSocket records
This commit is contained in:
+31
@@ -186,6 +186,11 @@ SELECT
|
||||
OR ("usage".request_metadata->>'client_requested_stream') IN ('true', 'false')
|
||||
OR ("usage".request_metadata->>'upstream_is_stream') IN ('true', 'false')
|
||||
OR ("usage".request_metadata->>'websocket_mode') IN ('true', 'false')
|
||||
OR NULLIF(BTRIM("usage".request_metadata->>'websocket_transport'), '') IS NOT NULL
|
||||
OR ("usage".request_metadata->>'usage_available') IN ('true', 'false')
|
||||
OR ("usage".request_metadata->>'usage_pricing_available') IN ('true', 'false')
|
||||
OR json_typeof("usage".request_metadata->'live_session') = 'object'
|
||||
OR json_typeof("usage".request_metadata->'realtime_session') = 'object'
|
||||
THEN jsonb_strip_nulls(jsonb_build_object(
|
||||
'client_ip',
|
||||
NULLIF(BTRIM("usage".request_metadata->>'client_ip'), ''),
|
||||
@@ -220,6 +225,32 @@ SELECT
|
||||
WHEN ("usage".request_metadata->>'websocket_mode') IN ('true', 'false')
|
||||
THEN ("usage".request_metadata->>'websocket_mode')::boolean
|
||||
ELSE NULL
|
||||
END,
|
||||
'websocket_transport',
|
||||
NULLIF(BTRIM("usage".request_metadata->>'websocket_transport'), ''),
|
||||
'usage_available',
|
||||
CASE
|
||||
WHEN ("usage".request_metadata->>'usage_available') IN ('true', 'false')
|
||||
THEN ("usage".request_metadata->>'usage_available')::boolean
|
||||
ELSE NULL
|
||||
END,
|
||||
'usage_pricing_available',
|
||||
CASE
|
||||
WHEN ("usage".request_metadata->>'usage_pricing_available') IN ('true', 'false')
|
||||
THEN ("usage".request_metadata->>'usage_pricing_available')::boolean
|
||||
ELSE NULL
|
||||
END,
|
||||
'live_session',
|
||||
CASE
|
||||
WHEN json_typeof("usage".request_metadata->'live_session') = 'object'
|
||||
THEN "usage".request_metadata->'live_session'
|
||||
ELSE NULL
|
||||
END,
|
||||
'realtime_session',
|
||||
CASE
|
||||
WHEN json_typeof("usage".request_metadata->'realtime_session') = 'object'
|
||||
THEN "usage".request_metadata->'realtime_session'
|
||||
ELSE NULL
|
||||
END
|
||||
))::json
|
||||
ELSE NULL::json
|
||||
|
||||
@@ -186,6 +186,11 @@ SELECT
|
||||
OR ("usage".request_metadata->>'client_requested_stream') IN ('true', 'false')
|
||||
OR ("usage".request_metadata->>'upstream_is_stream') IN ('true', 'false')
|
||||
OR ("usage".request_metadata->>'websocket_mode') IN ('true', 'false')
|
||||
OR NULLIF(BTRIM("usage".request_metadata->>'websocket_transport'), '') IS NOT NULL
|
||||
OR ("usage".request_metadata->>'usage_available') IN ('true', 'false')
|
||||
OR ("usage".request_metadata->>'usage_pricing_available') IN ('true', 'false')
|
||||
OR json_typeof("usage".request_metadata->'live_session') = 'object'
|
||||
OR json_typeof("usage".request_metadata->'realtime_session') = 'object'
|
||||
THEN jsonb_strip_nulls(jsonb_build_object(
|
||||
'client_ip',
|
||||
NULLIF(BTRIM("usage".request_metadata->>'client_ip'), ''),
|
||||
@@ -220,6 +225,32 @@ SELECT
|
||||
WHEN ("usage".request_metadata->>'websocket_mode') IN ('true', 'false')
|
||||
THEN ("usage".request_metadata->>'websocket_mode')::boolean
|
||||
ELSE NULL
|
||||
END,
|
||||
'websocket_transport',
|
||||
NULLIF(BTRIM("usage".request_metadata->>'websocket_transport'), ''),
|
||||
'usage_available',
|
||||
CASE
|
||||
WHEN ("usage".request_metadata->>'usage_available') IN ('true', 'false')
|
||||
THEN ("usage".request_metadata->>'usage_available')::boolean
|
||||
ELSE NULL
|
||||
END,
|
||||
'usage_pricing_available',
|
||||
CASE
|
||||
WHEN ("usage".request_metadata->>'usage_pricing_available') IN ('true', 'false')
|
||||
THEN ("usage".request_metadata->>'usage_pricing_available')::boolean
|
||||
ELSE NULL
|
||||
END,
|
||||
'live_session',
|
||||
CASE
|
||||
WHEN json_typeof("usage".request_metadata->'live_session') = 'object'
|
||||
THEN "usage".request_metadata->'live_session'
|
||||
ELSE NULL
|
||||
END,
|
||||
'realtime_session',
|
||||
CASE
|
||||
WHEN json_typeof("usage".request_metadata->'realtime_session') = 'object'
|
||||
THEN "usage".request_metadata->'realtime_session'
|
||||
ELSE NULL
|
||||
END
|
||||
))::json
|
||||
ELSE NULL::json
|
||||
|
||||
@@ -3109,6 +3109,21 @@ fn usage_sql_reads_http_audits_for_single_record_fetches() {
|
||||
assert!(super::FIND_BY_ID_SQL.contains("http_client_response_body_ref"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn usage_sql_single_record_fetches_preserve_full_request_metadata() {
|
||||
for sql in [super::FIND_BY_REQUEST_ID_SQL, super::FIND_BY_ID_SQL] {
|
||||
assert!(
|
||||
sql.contains("\n \"usage\".request_metadata,\n"),
|
||||
"single-record usage detail queries must preserve the full request metadata, \
|
||||
including WebSocket and Live session summaries"
|
||||
);
|
||||
assert!(
|
||||
!sql.contains("END AS request_metadata"),
|
||||
"bounded list metadata projection must not leak into detail queries"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn usage_sql_reads_routing_snapshots_for_single_record_fetches() {
|
||||
assert!(super::FIND_BY_REQUEST_ID_SQL.contains("LEFT JOIN usage_routing_snapshots"));
|
||||
@@ -3240,6 +3255,42 @@ fn usage_sql_uses_json_null_placeholders_for_usage_payload_columns() {
|
||||
assert!(!super::LIST_RECENT_USAGE_AUDITS_PREFIX.contains("NULL::jsonb"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn usage_sql_list_queries_project_bounded_live_and_realtime_metadata() {
|
||||
for sql in [
|
||||
super::LIST_USAGE_AUDITS_PREFIX,
|
||||
super::LIST_RECENT_USAGE_AUDITS_PREFIX,
|
||||
] {
|
||||
assert!(sql.contains("'websocket_transport'"));
|
||||
assert!(
|
||||
sql.contains("NULLIF(BTRIM(\"usage\".request_metadata->>'websocket_transport'), '')")
|
||||
);
|
||||
|
||||
for key in ["usage_available", "usage_pricing_available"] {
|
||||
assert!(sql.contains(format!("'{key}'").as_str()));
|
||||
assert!(sql.contains(
|
||||
format!("WHEN (\"usage\".request_metadata->>'{key}') IN ('true', 'false')")
|
||||
.as_str()
|
||||
));
|
||||
assert!(sql.contains(
|
||||
format!("THEN (\"usage\".request_metadata->>'{key}')::boolean").as_str()
|
||||
));
|
||||
}
|
||||
|
||||
for key in ["live_session", "realtime_session"] {
|
||||
assert!(sql.contains(format!("'{key}'").as_str()));
|
||||
assert!(sql.contains(
|
||||
format!("WHEN json_typeof(\"usage\".request_metadata->'{key}') = 'object'")
|
||||
.as_str()
|
||||
));
|
||||
assert!(sql.contains(format!("THEN \"usage\".request_metadata->'{key}'").as_str()));
|
||||
}
|
||||
|
||||
assert!(sql.contains("END AS request_metadata"));
|
||||
assert!(!sql.contains("\n \"usage\".request_metadata,\n"));
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn usage_sql_admin_record_filters_are_pushed_into_postgres_queries() {
|
||||
let source = include_str!("mod.rs");
|
||||
|
||||
Reference in New Issue
Block a user