diff --git a/.github/workflows/builds.yml b/.github/workflows/builds.yml index cf7e683dc..059a45bd3 100644 --- a/.github/workflows/builds.yml +++ b/.github/workflows/builds.yml @@ -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 diff --git a/packages/fileimport-service/src/nextGen/jobProcessor.ts b/packages/fileimport-service/src/nextGen/jobProcessor.ts index 2f9f331fb..16c649306 100644 --- a/packages/fileimport-service/src/nextGen/jobProcessor.ts +++ b/packages/fileimport-service/src/nextGen/jobProcessor.ts @@ -139,6 +139,6 @@ export const jobProcessor = async ({ reason } } finally { - fs.rmdirSync(jobDir, { recursive: true }) + fs.rmSync(jobDir, { recursive: true }) } } diff --git a/packages/server/modules/fileuploads/index.ts b/packages/server/modules/fileuploads/index.ts index 23e1ab07d..f9ba7a46a 100644 --- a/packages/server/modules/fileuploads/index.ts +++ b/packages/server/modules/fileuploads/index.ts @@ -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 }) diff --git a/packages/server/modules/fileuploads/queues/fileimports.ts b/packages/server/modules/fileuploads/queues/fileimports.ts index ab56a7a93..c8eba94d6 100644 --- a/packages/server/modules/fileuploads/queues/fileimports.ts +++ b/packages/server/modules/fileuploads/queues/fileimports.ts @@ -52,6 +52,7 @@ export const initializeQueue = async () => { defaultJobOptions } }) + return queue } export const shutdownQueue = async () => {