52 lines
1.8 KiB
TypeScript
52 lines
1.8 KiB
TypeScript
import cron from 'node-cron'
|
|
import { db } from '@/db/knex'
|
|
import { moduleLogger } from '@/observability/logging'
|
|
import {
|
|
createS3Bucket,
|
|
isFileUploadsEnabled
|
|
} from '@/modules/shared/helpers/envHelper'
|
|
import { SpeckleModule } from '@/modules/shared/helpers/typeHelper'
|
|
import { ensureStorageAccessFactory } from '@/modules/blobstorage/repositories/blobs'
|
|
import { getMainObjectStorage } from '@/modules/blobstorage/clients/objectStorage'
|
|
import { blobStorageRouterFactory } from '@/modules/blobstorage/rest/router'
|
|
import { scheduleBlobPendingUploadExpiry } from '@/modules/blobstorage/tasks'
|
|
import { scheduleExecutionFactory } from '@/modules/core/services/taskScheduler'
|
|
import {
|
|
acquireTaskLockFactory,
|
|
releaseTaskLockFactory
|
|
} from '@/modules/core/repositories/scheduledTasks'
|
|
|
|
const ensureConditions = async () => {
|
|
if (!isFileUploadsEnabled()) {
|
|
moduleLogger.info('📦 Blob storage is DISABLED')
|
|
return
|
|
}
|
|
|
|
moduleLogger.info('📦 Init BlobStorage module')
|
|
const storage = getMainObjectStorage()
|
|
const ensureStorageAccess = ensureStorageAccessFactory({ storage })
|
|
await ensureStorageAccess({
|
|
createBucketIfNotExists: createS3Bucket()
|
|
})
|
|
}
|
|
|
|
const scheduledTasks: cron.ScheduledTask[] = []
|
|
export const init: SpeckleModule['init'] = async ({ app }) => {
|
|
await ensureConditions()
|
|
|
|
app.use(blobStorageRouterFactory())
|
|
|
|
const scheduleExecution = scheduleExecutionFactory({
|
|
acquireTaskLock: acquireTaskLockFactory({ db }),
|
|
releaseTaskLock: releaseTaskLockFactory({ db })
|
|
})
|
|
|
|
scheduledTasks.push(await scheduleBlobPendingUploadExpiry({ scheduleExecution }))
|
|
}
|
|
|
|
export const finalize: SpeckleModule['finalize'] = () => {}
|
|
|
|
export const shutdown: SpeckleModule['shutdown'] = async () => {
|
|
scheduledTasks.forEach((task) => task.stop())
|
|
}
|