diff --git a/web/components.d.ts b/web/components.d.ts index 38640e0f4..4a3baf93d 100644 --- a/web/components.d.ts +++ b/web/components.d.ts @@ -12,6 +12,7 @@ declare module '@vue/runtime-core' { ActionsTab: typeof import('./src/components/repo/settings/ActionsTab.vue')['default'] ActivePipelines: typeof import('./src/components/layout/header/ActivePipelines.vue')['default'] AdminAgentsTab: typeof import('./src/components/admin/settings/AdminAgentsTab.vue')['default'] + AdminQueueStats: typeof import('./src/components/admin/settings/queue/AdminQueueStats.vue')['default'] AdminQueueTab: typeof import('./src/components/admin/settings/AdminQueueTab.vue')['default'] AdminSecretsTab: typeof import('./src/components/admin/settings/AdminSecretsTab.vue')['default'] AdminUsersTab: typeof import('./src/components/admin/settings/AdminUsersTab.vue')['default'] diff --git a/web/package.json b/web/package.json index 5b6caa68b..08210db91 100644 --- a/web/package.json +++ b/web/package.json @@ -22,7 +22,7 @@ "@vueuse/core": "^9.13.0", "ansi_up": "^5.1.0", "dayjs": "^1.11.7", - "floating-vue": "2.0.0-beta.20", + "floating-vue": "^2.0.0-beta.20", "fuse.js": "^6.6.2", "humanize-duration": "^3.28.0", "javascript-time-ago": "^2.5.9", @@ -56,7 +56,7 @@ "eslint-plugin-simple-import-sort": "^10.0.0", "eslint-plugin-vue": "^9.9.0", "eslint-plugin-vue-scoped-css": "^2.4.0", - "prettier": "^2.8.4", + "prettier": "^2.8.5", "typescript": "5.0.2", "unplugin-icons": "^0.15.3", "unplugin-vue-components": "^0.24.1", diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml index 9f95b1807..c6e69ef55 100644 --- a/web/pnpm-lock.yaml +++ b/web/pnpm-lock.yaml @@ -27,14 +27,14 @@ specifiers: eslint-plugin-simple-import-sort: ^10.0.0 eslint-plugin-vue: ^9.9.0 eslint-plugin-vue-scoped-css: ^2.4.0 - floating-vue: 2.0.0-beta.20 + floating-vue: ^2.0.0-beta.20 fuse.js: ^6.6.2 humanize-duration: ^3.28.0 javascript-time-ago: ^2.5.9 lodash: ^4.17.21 node-emoji: ^1.11.0 pinia: ^2.0.33 - prettier: ^2.8.4 + prettier: ^2.8.5 prismjs: ^1.29.0 typescript: 5.0.2 unplugin-icons: ^0.15.3 @@ -85,12 +85,12 @@ devDependencies: eslint-config-airbnb-typescript: 17.0.0_g4ufqspmwdmninnalnmypeb4gi eslint-config-prettier: 8.7.0_eslint@8.36.0 eslint-plugin-import: 2.27.5_a7er6olmtneep4uytpot6gt7wu - eslint-plugin-prettier: 4.2.1_eqzx3hpkgx5nnvxls3azrcc7dm + eslint-plugin-prettier: 4.2.1_e4jq4ivnnnwcsomlcyj2qoljy4 eslint-plugin-promise: 6.1.1_eslint@8.36.0 eslint-plugin-simple-import-sort: 10.0.0_eslint@8.36.0 eslint-plugin-vue: 9.9.0_eslint@8.36.0 eslint-plugin-vue-scoped-css: 2.4.0_baumsyql7ym4rscil5ymcumriy - prettier: 2.8.4 + prettier: 2.8.5 typescript: 5.0.2 unplugin-icons: 0.15.3_@vue+compiler-sfc@3.2.47 unplugin-vue-components: 0.24.1_vue@3.2.47 @@ -1763,7 +1763,7 @@ packages: - supports-color dev: true - /eslint-plugin-prettier/4.2.1_eqzx3hpkgx5nnvxls3azrcc7dm: + /eslint-plugin-prettier/4.2.1_e4jq4ivnnnwcsomlcyj2qoljy4: resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} engines: {node: '>=12.0.0'} peerDependencies: @@ -1776,7 +1776,7 @@ packages: dependencies: eslint: 8.36.0 eslint-config-prettier: 8.7.0_eslint@8.36.0 - prettier: 2.8.4 + prettier: 2.8.5 prettier-linter-helpers: 1.0.0 dev: true @@ -2842,8 +2842,8 @@ packages: fast-diff: 1.2.0 dev: true - /prettier/2.8.4: - resolution: {integrity: sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==} + /prettier/2.8.5: + resolution: {integrity: sha512-3gzuxrHbKUePRBB4ZeU08VNkUcqEHaUaouNt0m7LGP4Hti/NuB07C7PPTM/LkWqXoJYJn2McEo5+kxPNrtQkLQ==} engines: {node: '>=10.13.0'} hasBin: true dev: true diff --git a/web/src/assets/locales/en.json b/web/src/assets/locales/en.json index 8f4e483b4..48ae4ad4b 100644 --- a/web/src/assets/locales/en.json +++ b/web/src/assets/locales/en.json @@ -376,7 +376,14 @@ "tasks": "Tasks", "task_running": "Task is running", "task_pending": "Task is pending", - "task_waiting_on_deps": "Task is waiting on dependencies" + "task_waiting_on_deps": "Task is waiting on dependencies", + "stats": { + "completed_count": "Completed Tasks", + "worker_count": "Free", + "running_count": "Running", + "pending_count": "Pending", + "waiting_on_deps_count": "Waiting on dependencies" + } }, "users": { "users": "Users", diff --git a/web/src/components/admin/settings/AdminQueueTab.vue b/web/src/components/admin/settings/AdminQueueTab.vue index 29833f499..a91b5c4d0 100644 --- a/web/src/components/admin/settings/AdminQueueTab.vue +++ b/web/src/components/admin/settings/AdminQueueTab.vue @@ -32,7 +32,7 @@
-
{{ queueInfo?.stats }}
+

{{ $t('admin.settings.queue.tasks') }}

@@ -85,6 +85,8 @@ import useApiClient from '~/compositions/useApiClient'; import useNotifications from '~/compositions/useNotifications'; import { QueueInfo } from '~/lib/api/types/queue'; +import AdminQueueStats from './queue/AdminQueueStats.vue'; + const apiClient = useApiClient(); const notifications = useNotifications(); const { t } = useI18n(); diff --git a/web/src/components/admin/settings/queue/AdminQueueStats.vue b/web/src/components/admin/settings/queue/AdminQueueStats.vue new file mode 100644 index 000000000..b25d0fff3 --- /dev/null +++ b/web/src/components/admin/settings/queue/AdminQueueStats.vue @@ -0,0 +1,109 @@ + + + diff --git a/web/src/lib/api/types/queue.ts b/web/src/lib/api/types/queue.ts index c7ee269ba..6e8a0cbae 100644 --- a/web/src/lib/api/types/queue.ts +++ b/web/src/lib/api/types/queue.ts @@ -7,16 +7,18 @@ export type Task = { run_on: string[]; }; +export type QueueStats = { + worker_count: number; + pending_count: number; + waiting_on_deps_count: number; + running_count: number; + completed_count: number; +}; + export type QueueInfo = { pending: Task[]; waiting_on_deps: Task[]; running: Task[]; - stats: { - worker_count: number; - pending_count: number; - waiting_on_deps_count: number; - running_count: number; - completed_count: number; - }; + stats: QueueStats; paused: boolean; };