Fix redis setup

This commit is contained in:
2023-11-20 18:53:57 -07:00
parent a94ec100a5
commit 6ecdd5a0b8
6 changed files with 65 additions and 41 deletions

View File

@@ -34,7 +34,7 @@
"bcrypt": "^5.1.1", "bcrypt": "^5.1.1",
"bull": "^4.11.5", "bull": "^4.11.5",
"cache-manager": "^5.3.1", "cache-manager": "^5.3.1",
"cache-manager-redis-store": "^3.0.1", "cache-manager-redis-yet": "^4.1.2",
"hbs": "^4.2.0", "hbs": "^4.2.0",
"minio": "^7.1.3", "minio": "^7.1.3",
"open-graph-scraper": "^6.3.0", "open-graph-scraper": "^6.3.0",

View File

@@ -16,9 +16,9 @@ import { PrometheusModule } from '@willsoto/nestjs-prometheus';
import { MinioModule } from './minio/minio.module'; import { MinioModule } from './minio/minio.module';
import { KvModule } from './kv/kv.module'; import { KvModule } from './kv/kv.module';
import { BullModule } from '@nestjs/bull'; import { BullModule } from '@nestjs/bull';
import type { RedisClientOptions } from 'redis';
import { redisStore } from 'cache-manager-redis-store';
import { ScheduleModule } from '@nestjs/schedule'; import { ScheduleModule } from '@nestjs/schedule';
import { RedisClientOptions } from 'redis';
import { redisStore } from 'cache-manager-redis-yet';
@Module({ @Module({
imports: [ imports: [
@@ -27,31 +27,34 @@ import { ScheduleModule } from '@nestjs/schedule';
isGlobal: true, isGlobal: true,
load: [configuration], load: [configuration],
}), }),
// CacheModule.registerAsync<RedisClientOptions>({ CacheModule.registerAsync<RedisClientOptions>({
// isGlobal: true, isGlobal: true,
// imports: [ConfigModule], inject: [ConfigService],
// inject: [ConfigService], imports: [ConfigModule],
// useFactory: async (configService: ConfigService) => ({ useFactory: async (configService: ConfigService) => ({
// store: redisStore as unknown as CacheStoreFactory, store: redisStore,
// ttl: configService.get<number>('CACHE_TTL', 5), socket: {
// // Store-specific configuration: host: configService.get<string>('redis.host'),
// password: configService.get<string>('redis.pass', ''), port: configService.get<number>('redis.port'),
// host: configService.get<string>('redis.host', 'localhost'), },
// port: configService.get<number>('redis.port', 6379), database: configService.get<number>('redis.db'),
// db: configService.get<number>('redis.db', 1), password: configService.get<string>('redis.password'),
// }), }),
// }), }),
BullModule.forRootAsync({ BullModule.forRootAsync({
imports: [ConfigModule], imports: [ConfigModule],
inject: [ConfigService], inject: [ConfigService],
useFactory: async (configService: ConfigService) => ({ useFactory: async (configService: ConfigService) => {
redis: { const config = {
password: configService.get<string>('redis.pass', ''), redis: {
host: configService.get<string>('redis.host', 'localhost'), password: configService.get<string>('redis.password'),
port: configService.get<number>('redis.port', 6379), host: configService.get<string>('redis.host'),
db: configService.get<number>('redis.db', 1), port: configService.get<number>('redis.port'),
}, db: configService.get<number>('redis.db'),
}), },
};
return config;
},
}), }),
PrometheusModule.register({ PrometheusModule.register({
defaultLabels: { defaultLabels: {

View File

@@ -12,7 +12,7 @@ export default () => ({
password: process.env.IRC_PASSWORD ?? '', password: process.env.IRC_PASSWORD ?? '',
}, },
redis: { redis: {
host: process.env.REDIS_HOST ?? 's3.hooli.co', host: process.env.REDIS_HOST ?? 'redis-master',
port: parseInt(process.env.REDIS_PORT ?? '6379'), port: parseInt(process.env.REDIS_PORT ?? '6379'),
password: process.env.REDIS_PASS ?? '', password: process.env.REDIS_PASS ?? '',
db: parseInt(process.env.REDIS_DB ?? '1'), db: parseInt(process.env.REDIS_DB ?? '1'),

View File

@@ -2,9 +2,15 @@ import { Module } from '@nestjs/common';
import { KvService } from './kv.service'; import { KvService } from './kv.service';
import { KvController } from './kv.controller'; import { KvController } from './kv.controller';
import { MinioService } from 'src/minio/minio.service'; import { MinioService } from 'src/minio/minio.service';
import { BullModule } from '@nestjs/bull';
@Module({ @Module({
providers: [KvService, MinioService], providers: [KvService, MinioService],
imports: [
BullModule.registerQueue({
name: 'kv',
}),
],
controllers: [KvController], controllers: [KvController],
}) })
export class KvModule {} export class KvModule {}

View File

@@ -1,4 +1,6 @@
import { InjectQueue } from '@nestjs/bull';
import { Injectable, Logger } from '@nestjs/common'; import { Injectable, Logger } from '@nestjs/common';
import { Queue } from 'bull';
import { UploadedObjectInfo } from 'minio'; import { UploadedObjectInfo } from 'minio';
import { MinioService } from 'src/minio/minio.service'; import { MinioService } from 'src/minio/minio.service';
@@ -10,7 +12,10 @@ export class KvService {
private readonly kvMetadataPath = `${this.kvPrefix}/${this.kvMetadataFileName}`; private readonly kvMetadataPath = `${this.kvPrefix}/${this.kvMetadataFileName}`;
private readonly logger: Logger = new Logger(KvService.name); private readonly logger: Logger = new Logger(KvService.name);
constructor(private readonly minioService: MinioService) {} constructor(
private readonly minioService: MinioService,
@InjectQueue('kv') private kvProcessingQueue: Queue,
) {}
public generateFilePath(namespace: string, key: string): string { public generateFilePath(namespace: string, key: string): string {
return `${this.kvPrefix}/${namespace}/${key}`; return `${this.kvPrefix}/${namespace}/${key}`;
@@ -114,9 +119,11 @@ export class KvService {
...extraData, ...extraData,
secretKey: this.generateSecretKey(), secretKey: this.generateSecretKey(),
claimed: new Date().toISOString(), claimed: new Date().toISOString(),
namespace,
}; };
await this.setMetadataFile(Buffer.from(JSON.stringify(metadata))); await this.setMetadataFile(Buffer.from(JSON.stringify(metadata)));
this.logger.verbose(`Claimed namespace ${namespace}`); this.logger.verbose(`Claimed namespace ${namespace}`);
this.kvProcessingQueue.add('namespaceModeration', metadata[namespace]);
return metadata[namespace]; return metadata[namespace];
} }
@@ -139,7 +146,7 @@ export class KvService {
throw new Error('Incorrect secret key for namespace'); throw new Error('Incorrect secret key for namespace');
} }
this.logger.verbose(`Setting ${namespace}/${key}`); this.logger.verbose(`Setting ${namespace}/${key}`);
return await this.minioService.uploadBuffer( const uploadResult = await this.minioService.uploadBuffer(
this.kvBucketName, this.kvBucketName,
this.generateFilePath(namespace, key), this.generateFilePath(namespace, key),
Buffer.from(value), Buffer.from(value),
@@ -149,6 +156,7 @@ export class KvService {
...options, ...options,
}, },
); );
return uploadResult;
} }
public async delete(namespace: string, key: string): Promise<void> { public async delete(namespace: string, key: string): Promise<void> {

View File

@@ -924,12 +924,12 @@
picocolors "^1.0.0" picocolors "^1.0.0"
tslib "^2.6.0" tslib "^2.6.0"
"@redis/bloom@1.2.0": "@redis/bloom@1.2.0", "@redis/bloom@^1.2.0":
version "1.2.0" version "1.2.0"
resolved "https://registry.yarnpkg.com/@redis/bloom/-/bloom-1.2.0.tgz#d3fd6d3c0af3ef92f26767b56414a370c7b63b71" resolved "https://registry.yarnpkg.com/@redis/bloom/-/bloom-1.2.0.tgz#d3fd6d3c0af3ef92f26767b56414a370c7b63b71"
integrity sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg== integrity sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg==
"@redis/client@1.5.12": "@redis/client@1.5.12", "@redis/client@^1.5.8":
version "1.5.12" version "1.5.12"
resolved "https://registry.yarnpkg.com/@redis/client/-/client-1.5.12.tgz#4c387727992152aea443b869de0ebb697f899187" resolved "https://registry.yarnpkg.com/@redis/client/-/client-1.5.12.tgz#4c387727992152aea443b869de0ebb697f899187"
integrity sha512-/ZjE18HRzMd80eXIIUIPcH81UoZpwulbo8FmbElrjPqH0QC0SeIKu1BOU49bO5trM5g895kAjhvalt5h77q+4A== integrity sha512-/ZjE18HRzMd80eXIIUIPcH81UoZpwulbo8FmbElrjPqH0QC0SeIKu1BOU49bO5trM5g895kAjhvalt5h77q+4A==
@@ -938,22 +938,22 @@
generic-pool "3.9.0" generic-pool "3.9.0"
yallist "4.0.0" yallist "4.0.0"
"@redis/graph@1.1.1": "@redis/graph@1.1.1", "@redis/graph@^1.1.0":
version "1.1.1" version "1.1.1"
resolved "https://registry.yarnpkg.com/@redis/graph/-/graph-1.1.1.tgz#8c10df2df7f7d02741866751764031a957a170ea" resolved "https://registry.yarnpkg.com/@redis/graph/-/graph-1.1.1.tgz#8c10df2df7f7d02741866751764031a957a170ea"
integrity sha512-FEMTcTHZozZciLRl6GiiIB4zGm5z5F3F6a6FZCyrfxdKOhFlGkiAqlexWMBzCi4DcRoyiOsuLfW+cjlGWyExOw== integrity sha512-FEMTcTHZozZciLRl6GiiIB4zGm5z5F3F6a6FZCyrfxdKOhFlGkiAqlexWMBzCi4DcRoyiOsuLfW+cjlGWyExOw==
"@redis/json@1.0.6": "@redis/json@1.0.6", "@redis/json@^1.0.4":
version "1.0.6" version "1.0.6"
resolved "https://registry.yarnpkg.com/@redis/json/-/json-1.0.6.tgz#b7a7725bbb907765d84c99d55eac3fcf772e180e" resolved "https://registry.yarnpkg.com/@redis/json/-/json-1.0.6.tgz#b7a7725bbb907765d84c99d55eac3fcf772e180e"
integrity sha512-rcZO3bfQbm2zPRpqo82XbW8zg4G/w4W3tI7X8Mqleq9goQjAGLL7q/1n1ZX4dXEAmORVZ4s1+uKLaUOg7LrUhw== integrity sha512-rcZO3bfQbm2zPRpqo82XbW8zg4G/w4W3tI7X8Mqleq9goQjAGLL7q/1n1ZX4dXEAmORVZ4s1+uKLaUOg7LrUhw==
"@redis/search@1.1.6": "@redis/search@1.1.6", "@redis/search@^1.1.3":
version "1.1.6" version "1.1.6"
resolved "https://registry.yarnpkg.com/@redis/search/-/search-1.1.6.tgz#33bcdd791d9ed88ab6910243a355d85a7fedf756" resolved "https://registry.yarnpkg.com/@redis/search/-/search-1.1.6.tgz#33bcdd791d9ed88ab6910243a355d85a7fedf756"
integrity sha512-mZXCxbTYKBQ3M2lZnEddwEAks0Kc7nauire8q20oA0oA/LoA+E/b5Y5KZn232ztPb1FkIGqo12vh3Lf+Vw5iTw== integrity sha512-mZXCxbTYKBQ3M2lZnEddwEAks0Kc7nauire8q20oA0oA/LoA+E/b5Y5KZn232ztPb1FkIGqo12vh3Lf+Vw5iTw==
"@redis/time-series@1.0.5": "@redis/time-series@1.0.5", "@redis/time-series@^1.0.4":
version "1.0.5" version "1.0.5"
resolved "https://registry.yarnpkg.com/@redis/time-series/-/time-series-1.0.5.tgz#a6d70ef7a0e71e083ea09b967df0a0ed742bc6ad" resolved "https://registry.yarnpkg.com/@redis/time-series/-/time-series-1.0.5.tgz#a6d70ef7a0e71e083ea09b967df0a0ed742bc6ad"
integrity sha512-IFjIgTusQym2B5IZJG3XKr5llka7ey84fw/NOYqESP5WUfQs9zz1ww/9+qoz4ka/S6KcGBodzlCeZ5UImKbscg== integrity sha512-IFjIgTusQym2B5IZJG3XKr5llka7ey84fw/NOYqESP5WUfQs9zz1ww/9+qoz4ka/S6KcGBodzlCeZ5UImKbscg==
@@ -1967,14 +1967,21 @@ bytes@3.1.2:
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5"
integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
cache-manager-redis-store@^3.0.1: cache-manager-redis-yet@^4.1.2:
version "3.0.1" version "4.1.2"
resolved "https://registry.yarnpkg.com/cache-manager-redis-store/-/cache-manager-redis-store-3.0.1.tgz#8eeb211212763d04cef4058666182d624f714299" resolved "https://registry.yarnpkg.com/cache-manager-redis-yet/-/cache-manager-redis-yet-4.1.2.tgz#fa04df1a979a42585393a7a9918168978a7211ec"
integrity sha512-o560kw+dFqusC9lQJhcm6L2F2fMKobJ5af+FoR2PdnMVdpQ3f3Bz6qzvObTGyvoazQJxjQNWgMQeChP4vRTuXQ== integrity sha512-pM2K1ZlOv8gQpE1Z5mcDrfLj5CsNKVRiYua/SZ12j7LEDgfDeFVntI6JSgIw0siFSR/9P/FpG30scI3frHwibA==
dependencies: dependencies:
redis "^4.3.1" "@redis/bloom" "^1.2.0"
"@redis/client" "^1.5.8"
"@redis/graph" "^1.1.0"
"@redis/json" "^1.0.4"
"@redis/search" "^1.1.3"
"@redis/time-series" "^1.0.4"
cache-manager "^5.2.2"
redis "^4.6.7"
cache-manager@^5.3.1: cache-manager@^5.2.2, cache-manager@^5.3.1:
version "5.3.1" version "5.3.1"
resolved "https://registry.yarnpkg.com/cache-manager/-/cache-manager-5.3.1.tgz#80e4edd593b2d7f7b2b2199dc6fbb4748432bc47" resolved "https://registry.yarnpkg.com/cache-manager/-/cache-manager-5.3.1.tgz#80e4edd593b2d7f7b2b2199dc6fbb4748432bc47"
integrity sha512-9HP6nc1ZqyZgcVEpy5XS2ns9MYE6cPEM6InA1wQhR6M7GviJzLH2NTFYnf3NEfRmLE351NCSkDo2VISX8dlG+w== integrity sha512-9HP6nc1ZqyZgcVEpy5XS2ns9MYE6cPEM6InA1wQhR6M7GviJzLH2NTFYnf3NEfRmLE351NCSkDo2VISX8dlG+w==
@@ -5033,7 +5040,7 @@ redis-parser@^3.0.0:
dependencies: dependencies:
redis-errors "^1.0.0" redis-errors "^1.0.0"
redis@^4.3.1, redis@^4.6.11: redis@^4.6.11, redis@^4.6.7:
version "4.6.11" version "4.6.11"
resolved "https://registry.yarnpkg.com/redis/-/redis-4.6.11.tgz#fad85e104545228f212259fd557c3e4f8eafcd3d" resolved "https://registry.yarnpkg.com/redis/-/redis-4.6.11.tgz#fad85e104545228f212259fd557c3e4f8eafcd3d"
integrity sha512-kg1Lt4NZLYkAjPOj/WcyIGWfZfnyfKo1Wg9YKVSlzhFwxpFIl3LYI8BWy1Ab963LLDsTz2+OwdsesHKljB3WMQ== integrity sha512-kg1Lt4NZLYkAjPOj/WcyIGWfZfnyfKo1Wg9YKVSlzhFwxpFIl3LYI8BWy1Ab963LLDsTz2+OwdsesHKljB3WMQ==