feat(health): refine health monitor metrics

- add TPS to model and provider health payloads

- exclude user-cancelled 499 requests from health statistics

- update model/provider health cards with average latency, average TTFB, TPS, and availability
This commit is contained in:
AAEE86
2026-06-01 18:34:51 +08:00
parent 6c2a57f237
commit 7ffe33f867
11 changed files with 366 additions and 172 deletions
@@ -86,6 +86,24 @@ fn dashboard_utc_to_unix_secs(value: DateTime<Utc>) -> u64 {
value.timestamp().max(0) as u64
}
fn push_postgres_usage_excluded_status_codes(
builder: &mut QueryBuilder<'_, Postgres>,
has_where: &mut bool,
status_codes: &[u16],
) {
if status_codes.is_empty() {
return;
}
builder.push(if *has_where { " AND " } else { " WHERE " });
*has_where = true;
builder.push("(\"usage\".status_code IS NULL OR \"usage\".status_code NOT IN (");
let mut separated = builder.separated(", ");
for status_code in status_codes {
separated.push_bind(i32::from(*status_code));
}
separated.push_unseparated("))");
}
fn dashboard_utc_midnight(value: DateTime<Utc>) -> DateTime<Utc> {
DateTime::<Utc>::from_naive_utc_and_offset(
value
@@ -2529,6 +2547,7 @@ ORDER BY request_count DESC, "usage".provider_name ASC
}
if let Some(user_id) = query.user_id.as_deref() {
builder.push(if has_where { " AND " } else { " WHERE " });
has_where = true;
builder
.push("\"usage\".user_id = ")
.push_bind(user_id.to_string());
@@ -2566,6 +2585,11 @@ ORDER BY request_count DESC, "usage".provider_name ASC
separated.push_unseparated(")");
}
}
push_postgres_usage_excluded_status_codes(
&mut builder,
&mut has_where,
&query.exclude_status_codes,
);
if let Some(is_stream) = query.is_stream {
builder.push(if has_where { " AND " } else { " WHERE " });
has_where = true;
@@ -2625,6 +2649,7 @@ OR (\"usage\".error_message IS NOT NULL AND BTRIM(\"usage\".error_message) <> ''
}
if let Some(user_id) = query.user_id.as_deref() {
builder.push(if has_where { " AND " } else { " WHERE " });
has_where = true;
builder
.push("\"usage\".user_id = ")
.push_bind(user_id.to_string());
@@ -2662,6 +2687,11 @@ OR (\"usage\".error_message IS NOT NULL AND BTRIM(\"usage\".error_message) <> ''
separated.push_unseparated(")");
}
}
push_postgres_usage_excluded_status_codes(
&mut builder,
&mut has_where,
&query.exclude_status_codes,
);
if let Some(is_stream) = query.is_stream {
builder.push(if has_where { " AND " } else { " WHERE " });
has_where = true;
@@ -2840,6 +2870,11 @@ OR (\"usage\".error_message IS NOT NULL AND BTRIM(\"usage\".error_message) <> ''
separated.push_unseparated(")");
}
}
push_postgres_usage_excluded_status_codes(
&mut builder,
&mut has_where,
&query.exclude_status_codes,
);
if let Some(is_stream) = query.is_stream {
builder.push(if has_where { " AND " } else { " WHERE " });
has_where = true;
@@ -2926,6 +2961,11 @@ OR (\"usage\".error_message IS NOT NULL AND BTRIM(\"usage\".error_message) <> ''
separated.push_unseparated(")");
}
}
push_postgres_usage_excluded_status_codes(
&mut builder,
&mut has_where,
&query.exclude_status_codes,
);
if let Some(is_stream) = query.is_stream {
builder.push(if has_where { " AND " } else { " WHERE " });
has_where = true;
@@ -4801,6 +4841,11 @@ WITH filtered_usage AS (
.push("\"usage\".provider_name = ")
.push_bind(provider_name.to_string());
}
push_postgres_usage_excluded_status_codes(
&mut builder,
&mut has_where,
&query.exclude_status_codes,
);
builder.push(filtered_extra_where);
builder.push(
r#"
@@ -4893,6 +4938,9 @@ ORDER BY request_count DESC, group_key ASC
&self,
query: &UsageBreakdownSummaryQuery,
) -> Result<Vec<StoredUsageBreakdownSummaryRow>, DataLayerError> {
if !query.exclude_status_codes.is_empty() {
return self.summarize_usage_breakdown_raw(query).await;
}
if query.provider_name.is_some() {
return self.summarize_usage_breakdown_raw(query).await;
}
@@ -4918,6 +4966,7 @@ ORDER BY request_count DESC, group_key ASC
created_until_unix_secs: dashboard_utc_to_unix_secs(raw_end),
user_id: Some(user_id.to_string()),
provider_name: None,
exclude_status_codes: query.exclude_status_codes.clone(),
group_by: query.group_by,
})
.await?;
@@ -4941,6 +4990,7 @@ ORDER BY request_count DESC, group_key ASC
created_until_unix_secs: dashboard_utc_to_unix_secs(raw_end),
user_id: Some(user_id.to_string()),
provider_name: None,
exclude_status_codes: query.exclude_status_codes.clone(),
group_by: query.group_by,
})
.await?;