RSS Git Download  Clone
Raw Blame History 2kB 60 lines
import * as sharedIoRedis from '../../shared.mjs'

const consolePrefix = 'socket.io delete search keys'

export default async (options) => {
    const {socket, payload} = options;

    try {
        sharedIoRedis.ensureReadonlyConnection({ socket })

        let redis = socket.p3xrs.ioredis

        console.info(consolePrefix, payload.match)

        if (!payload.match || payload.match === '*') {
            // No search filter: use flushdb for efficiency
            const dbsize = await redis.dbsize()
            console.info(consolePrefix, 'flushdb, dbsize was', dbsize)
            await redis.flushdb()
            socket.emit(options.responseEvent, {
                status: 'ok',
                deletedCount: dbsize,
            })
        } else {
            const keys = await sharedIoRedis.getStreamKeys({
                redis: redis,
                match: payload.match,
                maxKeys: payload.maxKeys,
            })

            if (keys.length === 0) {
                socket.emit(options.responseEvent, {
                    status: 'ok',
                    deletedCount: 0,
                })
                return
            }

            const pipeline = redis.pipeline()
            for (let key of keys) {
                console.info(consolePrefix, 'delete key', key)
                pipeline.del(key)
            }
            await pipeline.exec()

            socket.emit(options.responseEvent, {
                status: 'ok',
                deletedCount: keys.length,
            })
        }

    } catch (e) {
        console.error(e)
        socket.emit(options.responseEvent, {
            status: 'error',
            error: e.message,
        })
    }
}