From 0e56617e265258036a6cface2eefeb9403f1d617 Mon Sep 17 00:00:00 2001 From: cristhianzl Date: Mon, 3 Jun 2024 17:05:39 -0300 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20(monitor.py):=20refactor?= =?UTF-8?q?=20update=5Fmessage=20to=20return=20MessageModelResponse=20?= =?UTF-8?q?=E2=99=BB=EF=B8=8F=20(service.py):=20update=20SQL=20query=20to?= =?UTF-8?q?=20use=20index=20instead=20of=20id=20=E2=99=BB=EF=B8=8F=20(api.?= =?UTF-8?q?tsx):=20refactor=20duplicate=20request=20check=20logic=20?= =?UTF-8?q?=E2=9C=A8=20(check-duplicate-requests.ts):=20add=20helper=20to?= =?UTF-8?q?=20check=20and=20store=20duplicate=20requests=20=F0=9F=90=9B=20?= =?UTF-8?q?(messagesStore.ts):=20fix=20message=20update=20logic=20to=20use?= =?UTF-8?q?=20index=20instead=20of=20id?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/backend/base/langflow/api/v1/monitor.py | 7 +++-- .../base/langflow/services/monitor/service.py | 4 +-- src/frontend/src/controllers/API/api.tsx | 25 +++------------- .../API/helpers/check-duplicate-requests.ts | 30 +++++++++++++++++++ src/frontend/src/stores/messagesStore.ts | 2 +- 5 files changed, 41 insertions(+), 27 deletions(-) create mode 100644 src/frontend/src/controllers/API/helpers/check-duplicate-requests.ts diff --git a/src/backend/base/langflow/api/v1/monitor.py b/src/backend/base/langflow/api/v1/monitor.py index 8f8110879..32040c036 100644 --- a/src/backend/base/langflow/api/v1/monitor.py +++ b/src/backend/base/langflow/api/v1/monitor.py @@ -86,9 +86,10 @@ async def update_message( ): try: message_dict = message.model_dump(exclude_none=True) - df = monitor_service.update_message(message_id=message_id, **message_dict) - dicts = df.to_dict(orient="records") - return [MessageModelResponse(**d) for d in dicts] + message_dict.pop("index", None) + monitor_service.update_message(message_id=message_id, **message_dict) + return MessageModelResponse(index=message_id, **message_dict) + except Exception as e: raise HTTPException(status_code=500, detail=str(e)) diff --git a/src/backend/base/langflow/services/monitor/service.py b/src/backend/base/langflow/services/monitor/service.py index ea5e1d9b2..c1c361dbf 100644 --- a/src/backend/base/langflow/services/monitor/service.py +++ b/src/backend/base/langflow/services/monitor/service.py @@ -113,8 +113,8 @@ class MonitorService(Service): return self.exec_query(query) def update_message(self, message_id: int, **kwargs): - query = f"UPDATE messages SET {', '.join(f'{k} = {v}' for k, v in kwargs.items())} WHERE id = {message_id}" - + query = f"""UPDATE messages SET {', '.join(f"{k} = '{v}'" for k, v in kwargs.items())} WHERE index = {message_id}""" + return self.exec_query(query) def add_message(self, message: MessageModel): diff --git a/src/frontend/src/controllers/API/api.tsx b/src/frontend/src/controllers/API/api.tsx index 32e04b8ac..91abedd18 100644 --- a/src/frontend/src/controllers/API/api.tsx +++ b/src/frontend/src/controllers/API/api.tsx @@ -2,11 +2,11 @@ import axios, { AxiosError, AxiosInstance } from "axios"; import { useContext, useEffect } from "react"; import { Cookies } from "react-cookie"; import { renewAccessToken } from "."; -import { AUTHORIZED_DUPLICATE_REQUESTS } from "../../constants/constants"; import { BuildStatus } from "../../constants/enums"; import { AuthContext } from "../../contexts/authContext"; import useAlertStore from "../../stores/alertStore"; import useFlowStore from "../../stores/flowStore"; +import { checkDuplicateRequestAndStoreRequest } from "./helpers/check-duplicate-requests"; // Create a new Axios instance const api: AxiosInstance = axios.create({ @@ -81,29 +81,12 @@ function ApiInterceptor() { // Request interceptor to add access token to every request const requestInterceptor = api.interceptors.request.use( (config) => { - const lastUrl = localStorage.getItem("lastUrlCalled"); - const lastMethodCalled = localStorage.getItem("lastMethodCalled"); + const checkRequest = checkDuplicateRequestAndStoreRequest(config); - const isContained = AUTHORIZED_DUPLICATE_REQUESTS.some((request) => - config?.url!.includes(request), - ); - - if ( - config?.url === lastUrl && - !isContained && - lastMethodCalled === config.method && - lastMethodCalled === "get" - ) { - return Promise.reject("Duplicate request"); + if (!checkRequest) { + return Promise.reject("Duplicate request."); } - localStorage.setItem("lastUrlCalled", config.url ?? ""); - localStorage.setItem("lastMethodCalled", config.method ?? ""); - localStorage.setItem( - "lastRequestData", - JSON.stringify(config.data) ?? "", - ); - const accessToken = cookies.get("access_token_lf"); if (accessToken && !isAuthorizedURL(config?.url)) { config.headers["Authorization"] = `Bearer ${accessToken}`; diff --git a/src/frontend/src/controllers/API/helpers/check-duplicate-requests.ts b/src/frontend/src/controllers/API/helpers/check-duplicate-requests.ts new file mode 100644 index 000000000..79a47c7a7 --- /dev/null +++ b/src/frontend/src/controllers/API/helpers/check-duplicate-requests.ts @@ -0,0 +1,30 @@ +import { AUTHORIZED_DUPLICATE_REQUESTS } from "../../../constants/constants"; + +export function checkDuplicateRequestAndStoreRequest(config) { + const lastUrl = localStorage.getItem("lastUrlCalled"); + const lastMethodCalled = localStorage.getItem("lastMethodCalled"); + const lastRequestTime = localStorage.getItem("lastRequestTime"); + + const currentTime = Date.now(); + + const isContained = AUTHORIZED_DUPLICATE_REQUESTS.some((request) => + config?.url!.includes(request), + ); + + if ( + config?.url === lastUrl && + !isContained && + lastMethodCalled === config.method && + lastMethodCalled === "get" && // Assuming you want to check only for GET requests + lastRequestTime && + currentTime - parseInt(lastRequestTime, 10) < 800 + ) { + return false; + } + + localStorage.setItem("lastUrlCalled", config.url ?? ""); + localStorage.setItem("lastMethodCalled", config.method ?? ""); + localStorage.setItem("lastRequestTime", currentTime.toString()); + + return true; +} diff --git a/src/frontend/src/stores/messagesStore.ts b/src/frontend/src/stores/messagesStore.ts index 21937f910..df1a3c15c 100644 --- a/src/frontend/src/stores/messagesStore.ts +++ b/src/frontend/src/stores/messagesStore.ts @@ -17,7 +17,7 @@ export const useMessagesStore = create((set, get) => ({ updateMessage: (message) => { set(() => ({ messages: get().messages.map((msg) => - msg.id === message.id ? message : msg, + msg.index === message.index ? message : msg, ), })); },