diff --git a/packages/api/src/server.ts b/packages/api/src/server.ts index 0cf7cad88..a6458730f 100755 --- a/packages/api/src/server.ts +++ b/packages/api/src/server.ts @@ -160,7 +160,12 @@ const main = async (): Promise => { // redis is optional if (env.redis.url) { + redisClient.on('error', (err) => { + console.error('Redis Client Error', err) + }) + await redisClient.connect() + console.log('Redis Client Connected:', env.redis.url) } const { app, apollo, httpServer } = createApp() diff --git a/packages/api/src/utils/helpers.ts b/packages/api/src/utils/helpers.ts index 48437b29e..cf179fd35 100644 --- a/packages/api/src/utils/helpers.ts +++ b/packages/api/src/utils/helpers.ts @@ -416,8 +416,15 @@ export const setRecentlySavedItemInRedis = async ( // save the url in redis for 8 hours so rss-feeder won't try to re-save it const redisKey = `recent-saved-item:${userId}:${url}` const ttlInSeconds = 60 * 60 * 8 - return redisClient.set(redisKey, 1, { - EX: ttlInSeconds, - NX: true, - }) + try { + return redisClient.set(redisKey, 1, { + EX: ttlInSeconds, + NX: true, + }) + } catch (error) { + logger.error('error setting recently saved item in redis', { + redisKey, + error, + }) + } } diff --git a/packages/rss-handler/src/index.ts b/packages/rss-handler/src/index.ts index df8e53761..1e36a7d02 100644 --- a/packages/rss-handler/src/index.ts +++ b/packages/rss-handler/src/index.ts @@ -63,11 +63,15 @@ const feedFetchFailedRedisKey = (feedUrl: string) => const isFeedBlocked = async (feedUrl: string, redisClient: RedisClient) => { const key = feedFetchFailedRedisKey(feedUrl) - const result = await redisClient.get(key) - // if the feed has failed to fetch more than certain times, block it - const maxFailures = parseInt(process.env.MAX_FEED_FETCH_FAILURES ?? '10') - if (result && parseInt(result) > maxFailures) { - return true + try { + const result = await redisClient.get(key) + // if the feed has failed to fetch more than certain times, block it + const maxFailures = parseInt(process.env.MAX_FEED_FETCH_FAILURES ?? '10') + if (result && parseInt(result) > maxFailures) { + return true + } + } catch (error) { + console.error('Failed to check feed block status', feedUrl, error) } return false @@ -75,11 +79,16 @@ const isFeedBlocked = async (feedUrl: string, redisClient: RedisClient) => { const blockFeed = async (feedUrl: string, redisClient: RedisClient) => { const key = feedFetchFailedRedisKey(feedUrl) - const result = await redisClient.incr(key) - // expire the key in 1 day - await redisClient.expire(key, 24 * 60 * 60, 'NX') + try { + const result = await redisClient.incr(key) + // expire the key in 1 day + await redisClient.expire(key, 24 * 60 * 60, 'NX') - return result + return result + } catch (error) { + console.error('Failed to block feed', feedUrl, error) + return null + } } export const isContentFetchBlocked = (feedUrl: string) => {