api: throttle streaming admin read polls

This commit is contained in:
a.tolmachev
2026-05-02 09:44:28 +00:00
parent c597557a5e
commit 4839cae319
5 changed files with 285 additions and 4 deletions
@@ -2027,6 +2027,15 @@ mod tests {
.unwrap();
assert_eq!(closed.status, StreamStatus::Stopped);
let touched = registry
.touch_stream_session_poll(&session.id, &timestamp("2026-04-06T12:00:20Z"))
.await
.unwrap();
assert_eq!(
touched.last_poll_at,
Some(timestamp("2026-04-06T12:00:20Z"))
);
let updated = registry
.update_stream_session_state(UpdateStreamSessionStateRequest {
session_id: &session.id,
@@ -198,6 +198,43 @@ impl PostgresRegistry {
}
}
pub async fn touch_stream_session_poll(
&self,
id: &StreamSessionId,
now: &OffsetDateTime,
) -> Result<StreamSession, RegistryError> {
let row = sqlx::query(
"update stream_sessions
set last_poll_at = $2::timestamptz
where id = $1
returning
id,
workspace_id,
agent_id,
operation_id,
protocol,
mode,
status,
cursor_json,
state_json,
expires_at,
last_poll_at,
created_at,
closed_at",
)
.bind(id.as_str())
.bind(now)
.fetch_optional(&self.pool)
.await?;
match row.as_ref() {
Some(row) => map_stream_session(row),
None => Err(RegistryError::StreamSessionNotFound {
session_id: id.as_str().to_owned(),
}),
}
}
pub async fn list_stream_sessions(
&self,
filter: StreamSessionFilter<'_>,