Skip to content

Commit

Permalink
refactor(backend, server): move 'getUniversalRedis' to helper and exp…
Browse files Browse the repository at this point in the history
…ort it, export Redis (#9)
  • Loading branch information
fcbvirus0k authored Nov 5, 2024
1 parent b293b85 commit 3efcf16
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 52 deletions.
2 changes: 1 addition & 1 deletion packages/backend/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import initValidateSchema from './features/validateSchema.js'
import initServerAggregate from './features/serverAggregate.js'
import initAccessControl from './features/accessControl.js'

export { redis, redlock, Redlock } from './redis/index.js'
export { redis, redlock, Redlock, getRedis, Redis } from './redis/index.js'
export { db, mongo, mongoClient, createMongoIndex, sqlite } from './db/index.js'

const usersConnectionCounter = {}
Expand Down
49 changes: 49 additions & 0 deletions packages/backend/redis/getRedis.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import { readFileSync } from 'fs'
import Redis from 'ioredis'
import RedisMock from 'ioredis-mock'

export { Redis, RedisMock }

export function getRedis ({ enableRedis = true, redisOpts, redisUrl, keyPrefix }) {
if (enableRedis) {
if (typeof redisOpts === 'string') {
redisOpts = JSON.parse(redisOpts)
let tls = {}

if (redisOpts.key) {
tls = {
key: readFileSync(redisOpts.key),
cert: readFileSync(redisOpts.cert),
ca: readFileSync(redisOpts.ca)
}
}

const options = {
sentinels: redisOpts.sentinels,
sslPort: redisOpts.ssl_port || '6380',
tls,
name: 'mymaster',
db: redisOpts.db || 0,
password: redisOpts.password
}

_maybeAddKeyPrefixToOptions(options, keyPrefix)

return new Redis(options)
} else if (redisUrl) {
const options = {}
_maybeAddKeyPrefixToOptions(options, keyPrefix)

return new Redis(redisUrl, options)
}
}

const options = {}
_maybeAddKeyPrefixToOptions(options, keyPrefix)

return new RedisMock(options)
}

function _maybeAddKeyPrefixToOptions (options, keyPrefix) {
if (keyPrefix) options.keyPrefix = keyPrefix
}
62 changes: 12 additions & 50 deletions packages/backend/redis/index.js
Original file line number Diff line number Diff line change
@@ -1,21 +1,24 @@
import { readFileSync } from 'fs'
import Redis from 'ioredis'
import RedisMock from 'ioredis-mock'
import Redlock from 'redlock'
import redisPubSub from 'sharedb-redis-pubsub'
import { getRedis, Redis, RedisMock } from './getRedis.js'

export const {
redis,
redisObserver
} = getUniversalRedis({
disableRedis: process.env.NO_REDIS,
const enableRedis = !process.env.NO_REDIS

const getRedisOptions = {
enableRedis,
redisOpts: process.env.REDIS_OPTS,
redisUrl: process.env.REDIS_URL,
keyPrefix: generatePrefix({
mongoUrl: process.env.MONGO_URL,
baseUrl: process.env.BASE_URL
})
})
}

const RedisClient = enableRedis ? Redis : RedisMock
export { RedisClient as Redis }
export { getRedis }
export const redis = getRedis(getRedisOptions)
export const redisObserver = getRedis(getRedisOptions)

export const pubsub = redisPubSub({
client: redis,
Expand All @@ -26,47 +29,6 @@ export const redlock = getRedlock(redis)

export { Redlock }

function getUniversalRedis ({ disableRedis, redisOpts, redisUrl, keyPrefix }) {
if (!disableRedis) {
if (typeof redisOpts === 'string') {
redisOpts = JSON.parse(redisOpts)
let tls = {}

if (redisOpts.key) {
tls = {
key: readFileSync(redisOpts.key),
cert: readFileSync(redisOpts.cert),
ca: readFileSync(redisOpts.ca)
}
}

const options = {
sentinels: redisOpts.sentinels,
sslPort: redisOpts.ssl_port || '6380',
tls,
name: 'mymaster',
db: redisOpts.db || 0,
password: redisOpts.password,
keyPrefix
}

return {
redis: new Redis(options),
redisObserver: new Redis(options)
}
} else if (redisUrl) {
return {
redis: new Redis(redisUrl, { keyPrefix }),
redisObserver: new Redis(redisUrl, { keyPrefix })
}
}
}
return {
redis: new RedisMock({ keyPrefix }),
redisObserver: new RedisMock({ keyPrefix })
}
}

function getRedlock (redis) {
return new Redlock([redis], {
driftFactor: 0.01,
Expand Down
2 changes: 1 addition & 1 deletion packages/teamplay/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { connection, setConnection, setFetchOnly, setPublicOnly } from './orm/co
export { default as ShareDB } from 'sharedb'
export {
default as createBackend,
mongo, mongoClient, createMongoIndex, redis, redlock, sqlite
mongo, mongoClient, createMongoIndex, redis, redlock, sqlite, getRedis, Redis
} from '@teamplay/backend'

export function initConnection (backend, {
Expand Down

0 comments on commit 3efcf16

Please sign in to comment.