mirror of
https://github.com/hcengineering/platform.git
synced 2026-08-21 03:42:24 +02:00
83 lines
2.3 KiB
TypeScript
83 lines
2.3 KiB
TypeScript
/* eslint-disable @typescript-eslint/unbound-method */
|
|
import type { MeasureContext, Tx } from '@hcengineering/core'
|
|
import {
|
|
createMongoAdapter,
|
|
createMongoDestroyAdapter,
|
|
createMongoTxAdapter,
|
|
shutdownMongo
|
|
} from '@hcengineering/mongo'
|
|
import { setMetadata } from '@hcengineering/platform'
|
|
import {
|
|
createPostgreeDestroyAdapter,
|
|
createPostgresAdapter,
|
|
createPostgresTxAdapter,
|
|
setDBExtraOptions,
|
|
shutdownPostgres
|
|
} from '@hcengineering/postgres'
|
|
import serverClientPlugin from '@hcengineering/server-client'
|
|
import { type PlatformQueue } from '@hcengineering/server-core'
|
|
import {
|
|
registerAdapterFactory,
|
|
registerDestroyFactory,
|
|
registerServerPlugins,
|
|
registerStringLoaders,
|
|
registerTxAdapterFactory,
|
|
setAdapterSecurity
|
|
} from '@hcengineering/server-pipeline'
|
|
import serverToken from '@hcengineering/server-token'
|
|
|
|
import { WorkspaceManager } from './manager'
|
|
|
|
// Register close on process exit.
|
|
process.on('exit', () => {
|
|
shutdownPostgres().catch((err) => {
|
|
console.error(err)
|
|
})
|
|
shutdownMongo().catch((err) => {
|
|
console.error(err)
|
|
})
|
|
})
|
|
|
|
export async function startIndexer (
|
|
ctx: MeasureContext,
|
|
opt: {
|
|
queue: PlatformQueue
|
|
model: Tx[]
|
|
dbURL: string
|
|
serverSecret: string
|
|
accountsUrl: string
|
|
}
|
|
): Promise<() => void> {
|
|
const usePrepare = (process.env.DB_PREPARE ?? 'true') === 'true'
|
|
|
|
setDBExtraOptions({
|
|
prepare: usePrepare // We override defaults
|
|
})
|
|
|
|
setMetadata(serverToken.metadata.Secret, opt.serverSecret)
|
|
setMetadata(serverToken.metadata.Service, 'rating')
|
|
setMetadata(serverClientPlugin.metadata.Endpoint, opt.accountsUrl)
|
|
|
|
registerTxAdapterFactory('mongodb', createMongoTxAdapter)
|
|
registerAdapterFactory('mongodb', createMongoAdapter)
|
|
registerDestroyFactory('mongodb', createMongoDestroyAdapter)
|
|
|
|
registerTxAdapterFactory('postgresql', createPostgresTxAdapter, true)
|
|
registerAdapterFactory('postgresql', createPostgresAdapter, true)
|
|
registerDestroyFactory('postgresql', createPostgreeDestroyAdapter, true)
|
|
setAdapterSecurity('postgresql', true)
|
|
|
|
registerServerPlugins()
|
|
registerStringLoaders()
|
|
|
|
const manager = new WorkspaceManager(ctx, opt.model, { ...opt })
|
|
await manager.startRatingCalculator()
|
|
|
|
const close = (): void => {
|
|
void manager.shutdown()
|
|
void opt.queue.shutdown()
|
|
}
|
|
|
|
return close
|
|
}
|