|
|
|
@ -4,7 +4,7 @@ import * as IORedis from 'ioredis'
|
|
|
|
|
import {RedisOptions} from 'ioredis'
|
|
|
|
|
import {Logging} from '../../service/Logging'
|
|
|
|
|
import {Unit} from '../../lifecycle/Unit'
|
|
|
|
|
import {AsyncPipe} from '../../util'
|
|
|
|
|
import {AsyncPipe, Collection} from '../../util'
|
|
|
|
|
|
|
|
|
|
export {RedisOptions} from 'ioredis'
|
|
|
|
|
|
|
|
|
@ -28,19 +28,25 @@ export class Redis extends Unit {
|
|
|
|
|
*/
|
|
|
|
|
private connection?: IORedis.Redis
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Collection of all Redis connections opened by this service.
|
|
|
|
|
* We keep track of these here so we can make sure -all- of them get closed
|
|
|
|
|
* when the framework tries to shut down.
|
|
|
|
|
* @private
|
|
|
|
|
*/
|
|
|
|
|
private spawnedConnections: Collection<IORedis.Redis> = new Collection()
|
|
|
|
|
|
|
|
|
|
async up(): Promise<void> {
|
|
|
|
|
this.logging.info('Attempting initial connection to Redis...')
|
|
|
|
|
this.logging.debug('Config:')
|
|
|
|
|
this.logging.debug(Config)
|
|
|
|
|
this.logging.debug(this.config)
|
|
|
|
|
await this.getConnection()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async down(): Promise<void> {
|
|
|
|
|
this.logging.info('Disconnecting Redis...')
|
|
|
|
|
if ( this.connection?.status === 'ready' ) {
|
|
|
|
|
await this.connection.disconnect()
|
|
|
|
|
}
|
|
|
|
|
await this.spawnedConnections
|
|
|
|
|
.where('status', '=', 'ready')
|
|
|
|
|
.awaitMapCall('disconnect')
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -59,7 +65,9 @@ export class Redis extends Unit {
|
|
|
|
|
*/
|
|
|
|
|
public async getNewConnection(): Promise<IORedis.Redis> {
|
|
|
|
|
const options = this.config.get('redis.connection') as RedisOptions
|
|
|
|
|
return new IORedis(options)
|
|
|
|
|
const inst = new IORedis(options)
|
|
|
|
|
this.spawnedConnections.push(inst)
|
|
|
|
|
return inst
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|