From 64e5eaf99d078015ebd4bda25d2f0fa0dd5e0fdc Mon Sep 17 00:00:00 2001 From: ogabrielluiz Date: Fri, 7 Jun 2024 16:21:20 -0300 Subject: [PATCH] refactor: Update log_transaction function to include target vertex in transaction data --- .../base/langflow/graph/vertex/base.py | 6 ++-- .../base/langflow/graph/vertex/utils.py | 35 ------------------- .../base/langflow/services/monitor/schema.py | 1 + .../base/langflow/services/monitor/utils.py | 5 +-- 4 files changed, 7 insertions(+), 40 deletions(-) diff --git a/src/backend/base/langflow/graph/vertex/base.py b/src/backend/base/langflow/graph/vertex/base.py index 1086ee337..99aed5b02 100644 --- a/src/backend/base/langflow/graph/vertex/base.py +++ b/src/backend/base/langflow/graph/vertex/base.py @@ -10,11 +10,11 @@ from loguru import logger from langflow.graph.schema import INPUT_COMPONENTS, OUTPUT_COMPONENTS, InterfaceComponentTypes, ResultData from langflow.graph.utils import ArtifactType, UnbuiltObject, UnbuiltResult -from langflow.graph.vertex.utils import log_transaction from langflow.interface.initialize import loading from langflow.interface.listing import lazy_load_dict from langflow.schema.schema import INPUT_FIELD_NAME from langflow.services.deps import get_storage_service +from langflow.services.monitor.utils import log_transaction from langflow.utils.constants import DIRECT_TYPES from langflow.utils.schemas import ChatOutputResponse from langflow.utils.util import sync_to_async, unescape_string @@ -530,11 +530,11 @@ class Vertex: The built result if use_result is True, else the built object. """ if not self._built: - log_transaction(source=self, target=requester, flow_id=self.graph.flow_id, status="error") + log_transaction(vertex=self, target=requester, status="error") raise ValueError(f"Component {self.display_name} has not been built yet") result = self._built_result if self.use_result else self._built_object - log_transaction(source=self, target=requester, flow_id=self.graph.flow_id, status="success") + log_transaction(vertex=self, target=requester, status="success") return result async def _build_vertex_and_update_params(self, key, vertex: "Vertex"): diff --git a/src/backend/base/langflow/graph/vertex/utils.py b/src/backend/base/langflow/graph/vertex/utils.py index 59a1c1949..0f69e4b2d 100644 --- a/src/backend/base/langflow/graph/vertex/utils.py +++ b/src/backend/base/langflow/graph/vertex/utils.py @@ -1,9 +1,5 @@ from typing import TYPE_CHECKING -from loguru import logger - -from langflow.services.deps import get_monitor_service - if TYPE_CHECKING: from langflow.graph.vertex.base import Vertex @@ -21,34 +17,3 @@ def build_clean_params(target: "Vertex") -> dict: if isinstance(value, list): params[key] = [item for item in value if isinstance(item, (str, int, bool, float, list, dict))] return params - - -def log_transaction(source: "Vertex", target: "Vertex", flow_id, status, error=None): - """ - Logs a transaction between two vertices. - - Args: - source (Vertex): The source vertex of the transaction. - target (Vertex): The target vertex of the transaction. - status: The status of the transaction. - error (Optional): Any error associated with the transaction. - - Raises: - Exception: If there is an error while logging the transaction. - - """ - try: - monitor_service = get_monitor_service() - clean_params = build_clean_params(target) - data = { - "source": source.vertex_type, - "target": target.vertex_type, - "target_args": clean_params, - "timestamp": monitor_service.get_timestamp(), - "status": status, - "error": error, - "flow_id": flow_id, - } - monitor_service.add_row(table_name="transactions", data=data) - except Exception as e: - logger.error(f"Error logging transaction: {e}") diff --git a/src/backend/base/langflow/services/monitor/schema.py b/src/backend/base/langflow/services/monitor/schema.py index c5264f3a1..8f9c57752 100644 --- a/src/backend/base/langflow/services/monitor/schema.py +++ b/src/backend/base/langflow/services/monitor/schema.py @@ -12,6 +12,7 @@ class TransactionModel(BaseModel): index: Optional[int] = Field(default=None) timestamp: Optional[datetime] = Field(default_factory=datetime.now, alias="timestamp") vertex_id: str + target_id: str | None = None inputs: dict outputs: dict status: str diff --git a/src/backend/base/langflow/services/monitor/utils.py b/src/backend/base/langflow/services/monitor/utils.py index 0c94c121d..ea7a3bad6 100644 --- a/src/backend/base/langflow/services/monitor/utils.py +++ b/src/backend/base/langflow/services/monitor/utils.py @@ -178,12 +178,13 @@ def build_clean_params(target: "Vertex") -> dict: return params -def log_transaction(vertex: "Vertex", status, error=None): +def log_transaction(vertex: "Vertex", status, target: Optional["Vertex"] = None, error=None): try: monitor_service = get_monitor_service() clean_params = build_clean_params(vertex) data = { - "vertex_id": vertex.id, + "vertex_id": str(vertex.id), + "target_id": str(target.id) if target else None, "inputs": clean_params, "outputs": vertex.result.model_dump_json(), "timestamp": monitor_service.get_timestamp(),