From 34c0d0eaa19ffe8e97eaaf42f2e1e5ac42cc2995 Mon Sep 17 00:00:00 2001 From: DirkSchlossmacher <62424946+DirkSchlossmacher@users.noreply.github.com> Date: Mon, 13 Nov 2023 14:54:16 +0100 Subject: [PATCH] redis refactor --- app/utils/cloud/redisRestClient.ts | 93 +++++++++--------------------- package.json | 4 +- 2 files changed, 29 insertions(+), 68 deletions(-) diff --git a/app/utils/cloud/redisRestClient.ts b/app/utils/cloud/redisRestClient.ts index dcf256021..2a1b7caf6 100644 --- a/app/utils/cloud/redisRestClient.ts +++ b/app/utils/cloud/redisRestClient.ts @@ -1,40 +1,28 @@ // redisRestClient.ts -import fetch from 'node-fetch'; // or any other fetch-compatible API +import { Redis } from "@upstash/redis"; -const redisRestUrl = process.env.UPSTASH_REDIS_URL; -const redisRestToken = process.env.UPSTASH_REDIS_REST_TOKEN; +const redis = new Redis({ + url: process.env.UPSTASH_REDIS_URL, + token: process.env.UPSTASH_REDIS_REST_TOKEN, +}); -if (!redisRestUrl || !redisRestToken) { +if (!redis.url || !redis.token) { console.error('The Upstash Redis URL and token must be provided.'); // Handle the lack of Redis client here, e.g., by disabling certain features } -const headers = { - Authorization: `Bearer ${redisRestToken}`, - 'Content-Type': 'application/json', -}; - export const incrementSignInCount = async (email: string | undefined, dateKey: string) => { - if (!email) { - console.error('Email is undefined, cannot increment sign-in count.'); - return; - } - - const response = await fetch(`${redisRestUrl}/hincrby`, { - method: 'POST', - headers: headers, - body: JSON.stringify({ - key: `signin_count:${email}`, - field: dateKey, - increment: 1 - }), - }); - - if (!response.ok) { - console.error('Failed to increment sign-in count in Redis via REST API'); - } - }; - + if (!email) { + console.error('Email is undefined, cannot increment sign-in count.'); + return; + } + + try { + await redis.hincrby(`signin_count:${email}`, dateKey, 1); + } catch (error) { + console.error('Failed to increment sign-in count in Redis via Upstash', error); + } +}; export const incrementSessionRefreshCount = async (email: string | undefined, dateKey: string) => { if (!email) { @@ -42,18 +30,10 @@ export const incrementSessionRefreshCount = async (email: string | undefined, da return; } - const response = await fetch(`${redisRestUrl}/hincrby`, { - method: 'POST', - headers: headers, - body: JSON.stringify({ - key: `session_refreshes:${email}`, - field: dateKey, - increment: 1 - }), - }); - - if (!response.ok) { - console.error('Failed to increment session refresh count in Redis via REST API'); + try { + await redis.hincrby(`session_refreshes:${email}`, dateKey, 1); + } catch (error) { + console.error('Failed to increment session refresh count in Redis via Upstash', error); } }; @@ -68,31 +48,10 @@ export const incrementTokenCounts = async ( return; } - const incrementCompletionTokensResponse = await fetch(`${redisRestUrl}/hincrby`, { - method: 'POST', - headers: headers, - body: JSON.stringify({ - key: `tokens:${email}`, - field: `${dateKey}:completion_tokens`, - increment: completionTokens - }), - }); - - const incrementPromptTokensResponse = await fetch(`${redisRestUrl}/hincrby`, { - method: 'POST', - headers: headers, - body: JSON.stringify({ - key: `tokens:${email}`, - field: `${dateKey}:prompt_tokens`, - increment: promptTokens - }), - }); - - if (!incrementCompletionTokensResponse.ok) { - console.error('Failed to increment completion token count in Redis via REST API'); - } - - if (!incrementPromptTokensResponse.ok) { - console.error('Failed to increment prompt token count in Redis via REST API'); + try { + await redis.hincrby(`tokens:${email}`, `${dateKey}:completion_tokens`, completionTokens); + await redis.hincrby(`tokens:${email}`, `${dateKey}:prompt_tokens`, promptTokens); + } catch (error) { + console.error('Failed to increment token counts in Redis via Upstash', error); } }; diff --git a/package.json b/package.json index eed58ae95..c0fed8957 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,9 @@ "sass": "^1.59.2", "spark-md5": "^3.0.2", "use-debounce": "^9.0.4", - "zustand": "^4.3.8" + "zustand": "^4.3.8", + "@upstash/redis": "^1.25.1" + }, "devDependencies": { "@tauri-apps/cli": "^1.4.0",