fix: various fixes to sentry-reported errors and more
This commit is contained in:
@@ -26,13 +26,25 @@ import {initializeMetricsService} from '@fluxer/api/src/infrastructure/MetricsSe
|
||||
import {InstanceConfigRepository} from '@fluxer/api/src/instance/InstanceConfigRepository';
|
||||
import {ipBanCache} from '@fluxer/api/src/middleware/IpBanMiddleware';
|
||||
import {initializeServiceSingletons} from '@fluxer/api/src/middleware/ServiceMiddleware';
|
||||
import {ensureVoiceResourcesInitialized, getKVClient} from '@fluxer/api/src/middleware/ServiceRegistry';
|
||||
import {
|
||||
ensureVoiceResourcesInitialized,
|
||||
getKVClient,
|
||||
setInjectedWorkerService,
|
||||
} from '@fluxer/api/src/middleware/ServiceRegistry';
|
||||
import {ReportRepository} from '@fluxer/api/src/report/ReportRepository';
|
||||
import {NatsApiRpcListener} from '@fluxer/api/src/rpc/NatsApiRpcListener';
|
||||
import {initializeSearch, shutdownSearch} from '@fluxer/api/src/SearchFactory';
|
||||
import {warmupAdminSearchIndexes} from '@fluxer/api/src/search/SearchWarmup';
|
||||
import {VisionarySlotInitializer} from '@fluxer/api/src/stripe/VisionarySlotInitializer';
|
||||
import {UserRepository} from '@fluxer/api/src/user/repositories/UserRepository';
|
||||
import {VoiceDataInitializer} from '@fluxer/api/src/voice/VoiceDataInitializer';
|
||||
import {JetStreamWorkerQueue} from '@fluxer/api/src/worker/JetStreamWorkerQueue';
|
||||
import {WorkerService} from '@fluxer/api/src/worker/WorkerService';
|
||||
import {JetStreamConnectionManager} from '@fluxer/nats/src/JetStreamConnectionManager';
|
||||
import {NatsConnectionManager} from '@fluxer/nats/src/NatsConnectionManager';
|
||||
|
||||
let natsRpcListener: NatsApiRpcListener | null = null;
|
||||
let jsConnectionManager: JetStreamConnectionManager | null = null;
|
||||
|
||||
export function createInitializer(config: APIConfig, logger: ILogger): () => Promise<void> {
|
||||
return async (): Promise<void> => {
|
||||
@@ -49,6 +61,19 @@ export function createInitializer(config: APIConfig, logger: ILogger): () => Pro
|
||||
await initializeServiceSingletons();
|
||||
logger.info('Service singletons initialized');
|
||||
|
||||
if (!config.dev.testModeEnabled) {
|
||||
jsConnectionManager = new JetStreamConnectionManager({
|
||||
url: config.nats.jetStreamUrl,
|
||||
token: config.nats.authToken || undefined,
|
||||
name: 'api-worker',
|
||||
});
|
||||
await jsConnectionManager.connect();
|
||||
const workerQueue = new JetStreamWorkerQueue(jsConnectionManager);
|
||||
await workerQueue.ensureInfrastructure();
|
||||
setInjectedWorkerService(new WorkerService(workerQueue));
|
||||
logger.info('JetStream worker service initialized');
|
||||
}
|
||||
|
||||
try {
|
||||
const userRepository = new UserRepository();
|
||||
const kvDeletionQueue = new KVAccountDeletionQueueService(kvClient, userRepository);
|
||||
@@ -122,6 +147,16 @@ export function createInitializer(config: APIConfig, logger: ILogger): () => Pro
|
||||
}
|
||||
}
|
||||
|
||||
if (!config.dev.testModeEnabled) {
|
||||
const connectionManager = new NatsConnectionManager({
|
||||
url: config.nats.coreUrl,
|
||||
token: config.nats.authToken,
|
||||
name: 'api-rpc-listener',
|
||||
});
|
||||
natsRpcListener = new NatsApiRpcListener(connectionManager, logger);
|
||||
await natsRpcListener.start();
|
||||
}
|
||||
|
||||
logger.info('API service initialization complete');
|
||||
};
|
||||
}
|
||||
@@ -130,6 +165,26 @@ export function createShutdown(logger: ILogger): () => Promise<void> {
|
||||
return async (): Promise<void> => {
|
||||
logger.info('Shutting down API service...');
|
||||
|
||||
if (natsRpcListener) {
|
||||
try {
|
||||
await natsRpcListener.stop();
|
||||
natsRpcListener = null;
|
||||
} catch (error) {
|
||||
logger.error({error}, 'Error shutting down NATS API RPC listener');
|
||||
}
|
||||
}
|
||||
|
||||
if (jsConnectionManager) {
|
||||
try {
|
||||
await jsConnectionManager.drain();
|
||||
jsConnectionManager = null;
|
||||
} catch (error) {
|
||||
logger.error({error}, 'Error draining JetStream worker connection');
|
||||
}
|
||||
}
|
||||
|
||||
setInjectedWorkerService(undefined);
|
||||
|
||||
try {
|
||||
await shutdownSearch();
|
||||
logger.info('Search service shut down');
|
||||
|
||||
@@ -36,7 +36,6 @@ import {OAuth2Controller} from '@fluxer/api/src/oauth/OAuth2Controller';
|
||||
import {registerPackControllers} from '@fluxer/api/src/pack/controllers';
|
||||
import {ReadStateController} from '@fluxer/api/src/read_state/ReadStateController';
|
||||
import {ReportController} from '@fluxer/api/src/report/ReportController';
|
||||
import {RpcController} from '@fluxer/api/src/rpc/RpcController';
|
||||
import {SearchController} from '@fluxer/api/src/search/controllers/SearchController';
|
||||
import {StripeController} from '@fluxer/api/src/stripe/StripeController';
|
||||
import {TenorController} from '@fluxer/api/src/tenor/TenorController';
|
||||
@@ -60,7 +59,6 @@ export function registerControllers(routes: HonoApp, config: APIConfig): void {
|
||||
registerPackControllers(routes);
|
||||
ReadStateController(routes);
|
||||
ReportController(routes);
|
||||
RpcController(routes);
|
||||
GuildController(routes);
|
||||
SearchController(routes);
|
||||
KlipyController(routes);
|
||||
|
||||
Reference in New Issue
Block a user