feat(fileimport): provide admin dashboard for queue (#4904)

* feat(fileimport): provide admin dashboard for queue

* mitigate deprecation warning

* fix typo in GitHub Action
This commit is contained in:
Iain Sproat
2025-06-09 12:36:43 +01:00
committed by GitHub
parent 98632f4c4a
commit d20cde3a68
4 changed files with 24 additions and 4 deletions
+1 -1
View File
@@ -75,7 +75,7 @@ jobs:
file: ./utils/test-deployment/Dockerfile
docker-build-monitor-deployment:
runs-on: Blacksmith
runs-on: blacksmith
name: monitor container
steps:
- name: Build and push
@@ -139,6 +139,6 @@ export const jobProcessor = async ({
reason
}
} finally {
fs.rmdirSync(jobDir, { recursive: true })
fs.rmSync(jobDir, { recursive: true })
}
}
+21 -2
View File
@@ -30,7 +30,7 @@ import {
} from '@/modules/core/repositories/scheduledTasks'
import type { ScheduleExecution } from '@/modules/core/domain/scheduledTasks/operations'
import { manageFileImportExpiryFactory } from '@/modules/fileuploads/services/tasks'
import { Optional, TIME } from '@speckle/shared'
import { Optional, Roles, TIME } from '@speckle/shared'
import { FileUploadDatabaseEvents } from '@/modules/fileuploads/domain/consts'
import { fileuploadRouterFactory } from '@/modules/fileuploads/rest/router'
import { nextGenFileImporterRouterFactory } from '@/modules/fileuploads/rest/nextGenRouter'
@@ -39,6 +39,11 @@ import {
shutdownQueue
} from '@/modules/fileuploads/queues/fileimports'
import { initializeEventListenersFactory } from '@/modules/fileuploads/events/eventListener'
import { createBullBoard } from 'bull-board'
import { BullMQAdapter } from 'bull-board/bullMQAdapter'
import { authMiddlewareCreator } from '@/modules/shared/middleware'
import { getRolesFactory } from '@/modules/shared/repositories/roles'
import { validateServerRoleBuilderFactory } from '@/modules/shared/authz'
const { FF_NEXT_GEN_FILE_IMPORTER_ENABLED } = getFeatureFlags()
@@ -99,7 +104,21 @@ export const init: SpeckleModule['init'] = async ({ app, isInitial }) => {
app.use(fileuploadRouterFactory())
if (isInitial) {
if (FF_NEXT_GEN_FILE_IMPORTER_ENABLED) await initializeQueue()
if (FF_NEXT_GEN_FILE_IMPORTER_ENABLED) {
const queue = await initializeQueue()
const router = createBullBoard([new BullMQAdapter(queue)]).router
app.use(
'/api/admin/fileimport-jobs',
async (req, res, next) => {
await authMiddlewareCreator([
validateServerRoleBuilderFactory({ getRoles: getRolesFactory({ db }) })({
requiredRole: Roles.Server.Admin
})
])(req, res, next)
},
router
)
}
const scheduleExecution = scheduleExecutionFactory({
acquireTaskLock: acquireTaskLockFactory({ db }),
releaseTaskLock: releaseTaskLockFactory({ db })
@@ -52,6 +52,7 @@ export const initializeQueue = async () => {
defaultJobOptions
}
})
return queue
}
export const shutdownQueue = async () => {