fix: add ping since to list workers

This commit is contained in:
Ruben Fiszel
2024-02-06 12:10:22 +01:00
parent bc75a5acbc
commit 557d0bcbef
5 changed files with 24 additions and 7 deletions
@@ -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"
}
+6
View File
@@ -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
+13 -3
View File
@@ -48,18 +48,28 @@ struct EnableWorkerQuery {
disable: bool,
}
#[derive(Deserialize)]
pub struct ListWorkerQuery {
pub page: Option<usize>,
pub per_page: Option<usize>,
pub ping_since: Option<i32>,
}
async fn list_worker_pings(
authed: ApiAuthed,
Extension(user_db): Extension<UserDB>,
Query(pagination): Query<Pagination>,
Query(query): Query<ListWorkerQuery>,
) -> JsonResult<Vec<WorkerPing>> {
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
)
@@ -4,7 +4,7 @@
let ips: string[] | undefined = undefined
WorkerService.listWorkers({}).then((workers) => {
WorkerService.listWorkers({ pingSince: 300 }).then((workers) => {
ips = [
...new Set(
workers
@@ -41,7 +41,7 @@
async function loadWorkers(): Promise<void> {
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)