diff --git a/backend/.sqlx/query-6a7eac3f0e5fbda17fff476d1a4a97059c12253caf8361257c4d26fc5b92b1b9.json b/backend/.sqlx/query-b38044d94e2ab03167c2f6fbb553ab3c19930ed11abf51763cd3ee378229443d.json similarity index 79% rename from backend/.sqlx/query-6a7eac3f0e5fbda17fff476d1a4a97059c12253caf8361257c4d26fc5b92b1b9.json rename to backend/.sqlx/query-b38044d94e2ab03167c2f6fbb553ab3c19930ed11abf51763cd3ee378229443d.json index 28414e2d66..6f3b508471 100644 --- a/backend/.sqlx/query-6a7eac3f0e5fbda17fff476d1a4a97059c12253caf8361257c4d26fc5b92b1b9.json +++ b/backend/.sqlx/query-b38044d94e2ab03167c2f6fbb553ab3c19930ed11abf51763cd3ee378229443d.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "SELECT worker, worker_instance, EXTRACT(EPOCH FROM (now() - ping_at))::integer as last_ping, started_at, ip, jobs_executed, custom_tags, worker_group, wm_version FROM worker_ping ORDER BY ping_at desc LIMIT $1 OFFSET $2", + "query": "SELECT worker, worker_instance, EXTRACT(EPOCH FROM (now() - ping_at))::integer as last_ping, started_at, ip, jobs_executed, custom_tags, worker_group, wm_version FROM worker_ping\n WHERE ($1::integer IS NULL AND ping_at > now() - interval '5 minute') OR (ping_at > now() - ($1 || ' seconds')::interval)\n ORDER BY ping_at desc LIMIT $2 OFFSET $3", "describe": { "columns": [ { @@ -51,6 +51,7 @@ ], "parameters": { "Left": [ + "Int4", "Int8", "Int8" ] @@ -67,5 +68,5 @@ false ] }, - "hash": "6a7eac3f0e5fbda17fff476d1a4a97059c12253caf8361257c4d26fc5b92b1b9" + "hash": "b38044d94e2ab03167c2f6fbb553ab3c19930ed11abf51763cd3ee378229443d" } diff --git a/backend/windmill-api/openapi.yaml b/backend/windmill-api/openapi.yaml index 96cb0ea509..dbef19264c 100644 --- a/backend/windmill-api/openapi.yaml +++ b/backend/windmill-api/openapi.yaml @@ -6338,6 +6338,12 @@ paths: parameters: - $ref: "#/components/parameters/Page" - $ref: "#/components/parameters/PerPage" + - name: ping_since + in: query + required: false + description: number of seconds the worker must have had a last ping more recent of (default to 300) + schema: + type: integer responses: "200": description: a list of workers diff --git a/backend/windmill-api/src/workers.rs b/backend/windmill-api/src/workers.rs index bbc7fa6e2a..50209f5cd1 100644 --- a/backend/windmill-api/src/workers.rs +++ b/backend/windmill-api/src/workers.rs @@ -48,18 +48,28 @@ struct EnableWorkerQuery { disable: bool, } +#[derive(Deserialize)] +pub struct ListWorkerQuery { + pub page: Option, + pub per_page: Option, + pub ping_since: Option, +} + async fn list_worker_pings( authed: ApiAuthed, Extension(user_db): Extension, - Query(pagination): Query, + Query(query): Query, ) -> JsonResult> { let mut tx = user_db.begin(&authed).await?; - let (per_page, offset) = paginate(pagination); + let (per_page, offset) = paginate(Pagination { page: query.page, per_page: query.per_page }); let rows = sqlx::query_as!( WorkerPing, - "SELECT worker, worker_instance, EXTRACT(EPOCH FROM (now() - ping_at))::integer as last_ping, started_at, ip, jobs_executed, custom_tags, worker_group, wm_version FROM worker_ping ORDER BY ping_at desc LIMIT $1 OFFSET $2", + "SELECT worker, worker_instance, EXTRACT(EPOCH FROM (now() - ping_at))::integer as last_ping, started_at, ip, jobs_executed, custom_tags, worker_group, wm_version FROM worker_ping + WHERE ($1::integer IS NULL AND ping_at > now() - interval '5 minute') OR (ping_at > now() - ($1 || ' seconds')::interval) + ORDER BY ping_at desc LIMIT $2 OFFSET $3", + query.ping_since, per_page as i64, offset as i64 ) diff --git a/frontend/src/lib/components/WhitelistIp.svelte b/frontend/src/lib/components/WhitelistIp.svelte index 1e0a3554a5..633732373e 100644 --- a/frontend/src/lib/components/WhitelistIp.svelte +++ b/frontend/src/lib/components/WhitelistIp.svelte @@ -4,7 +4,7 @@ let ips: string[] | undefined = undefined - WorkerService.listWorkers({}).then((workers) => { + WorkerService.listWorkers({ pingSince: 300 }).then((workers) => { ips = [ ...new Set( workers diff --git a/frontend/src/routes/(root)/(logged)/workers/+page.svelte b/frontend/src/routes/(root)/(logged)/workers/+page.svelte index fcc54bc182..2880dcb6f3 100644 --- a/frontend/src/routes/(root)/(logged)/workers/+page.svelte +++ b/frontend/src/routes/(root)/(logged)/workers/+page.svelte @@ -41,7 +41,7 @@ async function loadWorkers(): Promise { try { - workers = await WorkerService.listWorkers({ perPage: 1000 }) + workers = await WorkerService.listWorkers({ perPage: 1000, pingSince: 300 }) timeSinceLastPing = 0 } catch (err) { sendUserToast(`Could not load workers: ${err}`, true)