@mwcp/kmore
Version:
midway component for knex, supports declarative transaction and OpenTelemetry
94 lines (75 loc) • 2.71 kB
text/typescript
import {
App,
Configuration,
ILifeCycle,
ILogger,
Inject,
Logger,
MidwayDecoratorService,
MidwayEnvironmentService,
MidwayInformationService,
MidwayWebRouterService,
} from '@midwayjs/core'
import { TraceInit } from '@mwcp/otel'
import {
Application,
IMidwayContainer,
MConfig,
deleteRouter,
registerMiddleware,
} from '@mwcp/share'
import * as DefaultConfig from './config/config.default.js'
import * as LocalConfig from './config/config.local.js'
import * as UnittestConfig from './config/config.unittest.js'
import { useComponents } from './imports.js'
import { DbManager } from './lib/db-source-manager.js'
import { Config, ConfigKey, KmorePropagationConfig, KmoreSourceConfig } from './lib/index.js'
import { KmoreMiddleware } from './middleware/index.middleware.js'
({
namespace: ConfigKey.namespace,
importConfigs: [
{
default: DefaultConfig,
local: LocalConfig,
unittest: UnittestConfig,
},
],
imports: useComponents,
})
export class AutoConfiguration implements ILifeCycle {
() readonly app: Application
() protected readonly environmentService: MidwayEnvironmentService
() protected readonly informationService: MidwayInformationService
() protected readonly webRouterService: MidwayWebRouterService
() protected readonly logger: ILogger
(ConfigKey.config) readonly config: Config
() readonly kmoreSourceConfig: KmoreSourceConfig
(ConfigKey.propagationConfig) protected readonly propagationConfig: KmorePropagationConfig
() readonly dbSourceManager: DbManager
() decoratorService: MidwayDecoratorService
async onConfigLoad(): Promise<void> {
if (! this.config.enableDefaultRoute) {
await deleteRouter(`/_${ConfigKey.namespace}`, this.webRouterService)
}
}
({ namespace: ConfigKey.namespace })
async onReady(container: IMidwayContainer): Promise<void> {
void container
// 全局db处理中间件,请求结束时回滚/提交所有本次请求未提交事务
registerMiddleware(this.app, KmoreMiddleware)
}
({ namespace: ConfigKey.namespace })
async onStop(container: IMidwayContainer): Promise<void> {
void container
this.logger.info(`[${ConfigKey.componentName}] stopping`)
// const { timeoutWhenDestroy } = this.kmoreComponentConfig
const out = 10000
const p1 = new Promise<void>(done => setTimeout(done, out))
const p2 = this.dbSourceManager.stop()
await Promise.race([p1, p2])
.catch((ex: Error) => {
console.error(ex.message)
})
this.logger.info(`[${ConfigKey.componentName}] stopped`)
}
}