forked from FoundKeyGang/FoundKey
merge: allow redis family to be specified as a string
Reviewed-on: FoundKeyGang/FoundKey#165
This commit is contained in:
commit
a7f9e244f3
6 changed files with 45 additions and 33 deletions
|
@ -57,7 +57,7 @@ db:
|
||||||
redis:
|
redis:
|
||||||
host: localhost
|
host: localhost
|
||||||
port: 6379
|
port: 6379
|
||||||
#family: 0 # 0=Both, 4=IPv4, 6=IPv6
|
#family: dual # can be either a number or string (0/dual, 4/ipv4, 6/ipv6)
|
||||||
#pass: example-pass
|
#pass: example-pass
|
||||||
#prefix: example-prefix
|
#prefix: example-prefix
|
||||||
#db: 1
|
#db: 1
|
||||||
|
@ -93,9 +93,6 @@ redis:
|
||||||
# deliverJobMaxAttempts: 12
|
# deliverJobMaxAttempts: 12
|
||||||
# inboxJobMaxAttempts: 8
|
# inboxJobMaxAttempts: 8
|
||||||
|
|
||||||
# IP address family used for outgoing requests (ipv4, ipv6 or dual)
|
|
||||||
#outgoingAddressFamily: ipv4
|
|
||||||
|
|
||||||
# Syslog option
|
# Syslog option
|
||||||
#syslog:
|
#syslog:
|
||||||
# host: localhost
|
# host: localhost
|
||||||
|
|
34
packages/backend/src/config/redis.ts
Normal file
34
packages/backend/src/config/redis.ts
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
import Logger from '@/services/logger.js';
|
||||||
|
import config from './index.js';
|
||||||
|
|
||||||
|
const logger = new Logger('config:redis', 'gray', false);
|
||||||
|
|
||||||
|
function getRedisFamily(family?: string | number): number {
|
||||||
|
const familyMap = {
|
||||||
|
ipv4: 4,
|
||||||
|
ipv6: 6,
|
||||||
|
dual: 0,
|
||||||
|
};
|
||||||
|
if (typeof family === 'string' && family in familyMap) {
|
||||||
|
return familyMap[family];
|
||||||
|
} else if (typeof family === 'number' && Object.values(familyMap).includes(family)) {
|
||||||
|
return family;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof family !== 'undefined') {
|
||||||
|
logger.warn(`redis family "${family}" is invalid, defaulting to "dual"`);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getRedisOptions(keyPrefix?: string): Record<string, string | number | undefined> {
|
||||||
|
return {
|
||||||
|
port: config.redis.port,
|
||||||
|
host: config.redis.host,
|
||||||
|
family: getRedisFamily(config.redis.family),
|
||||||
|
password: config.redis.pass,
|
||||||
|
db: config.redis.db || 0,
|
||||||
|
keyPrefix,
|
||||||
|
};
|
||||||
|
}
|
|
@ -1,5 +1,5 @@
|
||||||
/**
|
/**
|
||||||
* ユーザーが設定する必要のある情報
|
* Configuration options set up by the user
|
||||||
*/
|
*/
|
||||||
export type Source = {
|
export type Source = {
|
||||||
repository_url?: string;
|
repository_url?: string;
|
||||||
|
@ -19,7 +19,7 @@ export type Source = {
|
||||||
redis: {
|
redis: {
|
||||||
host: string;
|
host: string;
|
||||||
port: number;
|
port: number;
|
||||||
family?: number;
|
family?: number | 'dual' | 'ipv4' | 'ipv6';
|
||||||
pass: string;
|
pass: string;
|
||||||
db?: number;
|
db?: number;
|
||||||
prefix?: string;
|
prefix?: string;
|
||||||
|
@ -47,8 +47,6 @@ export type Source = {
|
||||||
|
|
||||||
id: string;
|
id: string;
|
||||||
|
|
||||||
outgoingAddressFamily?: 'ipv4' | 'ipv6' | 'dual';
|
|
||||||
|
|
||||||
deliverJobConcurrency?: number;
|
deliverJobConcurrency?: number;
|
||||||
inboxJobConcurrency?: number;
|
inboxJobConcurrency?: number;
|
||||||
deliverJobPerSec?: number;
|
deliverJobPerSec?: number;
|
||||||
|
|
|
@ -68,6 +68,7 @@ import { UserPending } from '@/models/entities/user-pending.js';
|
||||||
|
|
||||||
import { entities as charts } from '@/services/chart/entities.js';
|
import { entities as charts } from '@/services/chart/entities.js';
|
||||||
import { Webhook } from '@/models/entities/webhook.js';
|
import { Webhook } from '@/models/entities/webhook.js';
|
||||||
|
import { getRedisOptions } from '@/config/redis.js';
|
||||||
import { dbLogger } from './logger.js';
|
import { dbLogger } from './logger.js';
|
||||||
import { redisClient } from './redis.js';
|
import { redisClient } from './redis.js';
|
||||||
|
|
||||||
|
@ -186,14 +187,7 @@ export const db = new DataSource({
|
||||||
dropSchema: process.env.NODE_ENV === 'test',
|
dropSchema: process.env.NODE_ENV === 'test',
|
||||||
cache: !config.db.disableCache ? {
|
cache: !config.db.disableCache ? {
|
||||||
type: 'ioredis',
|
type: 'ioredis',
|
||||||
options: {
|
options: getRedisOptions(`${config.redis.prefix}:query:`),
|
||||||
host: config.redis.host,
|
|
||||||
port: config.redis.port,
|
|
||||||
family: config.redis.family ?? 0,
|
|
||||||
password: config.redis.pass,
|
|
||||||
keyPrefix: `${config.redis.prefix}:query:`,
|
|
||||||
db: config.redis.db || 0,
|
|
||||||
},
|
|
||||||
} : false,
|
} : false,
|
||||||
logging: log,
|
logging: log,
|
||||||
logger: log ? new MyCustomLogger() : undefined,
|
logger: log ? new MyCustomLogger() : undefined,
|
||||||
|
|
|
@ -1,15 +1,9 @@
|
||||||
import Redis from 'ioredis';
|
import Redis from 'ioredis';
|
||||||
import config from '@/config/index.js';
|
import config from '@/config/index.js';
|
||||||
|
import { getRedisOptions } from '@/config/redis.js';
|
||||||
|
|
||||||
export function createConnection() {
|
export function createConnection(): Redis.Redis {
|
||||||
return new Redis({
|
return new Redis(getRedisOptions(`${config.redis.prefix}:`));
|
||||||
port: config.redis.port,
|
|
||||||
host: config.redis.host,
|
|
||||||
family: config.redis.family ?? 0,
|
|
||||||
password: config.redis.pass,
|
|
||||||
keyPrefix: `${config.redis.prefix}:`,
|
|
||||||
db: config.redis.db || 0,
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export const subscriber = createConnection();
|
export const subscriber = createConnection();
|
||||||
|
|
|
@ -1,15 +1,10 @@
|
||||||
import Bull from 'bull';
|
import Bull from 'bull';
|
||||||
import config from '@/config/index.js';
|
import config from '@/config/index.js';
|
||||||
|
import { getRedisOptions } from '@/config/redis.js';
|
||||||
|
|
||||||
export function initialize<T>(name: string, limitPerSec = -1) {
|
export function initialize<T>(name: string, limitPerSec = -1): Bull.Queue<T> {
|
||||||
return new Bull<T>(name, {
|
return new Bull<T>(name, {
|
||||||
redis: {
|
redis: getRedisOptions(),
|
||||||
port: config.redis.port,
|
|
||||||
host: config.redis.host,
|
|
||||||
family: config.redis.family ?? 0,
|
|
||||||
password: config.redis.pass,
|
|
||||||
db: config.redis.db || 0,
|
|
||||||
},
|
|
||||||
prefix: config.redis.prefix ? `${config.redis.prefix}:queue` : 'queue',
|
prefix: config.redis.prefix ? `${config.redis.prefix}:queue` : 'queue',
|
||||||
limiter: limitPerSec > 0 ? {
|
limiter: limitPerSec > 0 ? {
|
||||||
max: limitPerSec,
|
max: limitPerSec,
|
||||||
|
|
Loading…
Reference in a new issue