feature: adds more info to telemetry (#1654)
<!-- .github/pull_request_template.md --> ## Description Adds more info to telemetry ## Type of Change <!-- Please check the relevant option --> - [ ] Bug fix (non-breaking change that fixes an issue) - [ ] New feature (non-breaking change that adds functionality) - [ ] Breaking change (fix or feature that would cause existing functionality to change) - [ ] Documentation update - [ ] Code refactoring - [ ] Performance improvement - [ ] Other (please specify): ## Screenshots/Videos (if applicable) None ## Pre-submission Checklist <!-- Please check all boxes that apply before submitting your PR --> - [ ] **I have tested my changes thoroughly before submitting this PR** - [ ] **This PR contains minimal changes necessary to address the issue/feature** - [ ] My code follows the project's coding standards and style guidelines - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] I have added necessary documentation (if applicable) - [ ] All new and existing tests pass - [ ] I have searched existing PRs to ensure this change hasn't been submitted already - [ ] I have linked any relevant issues in the description - [ ] My commits have clear and descriptive messages ## DCO Affirmation I affirm that all code in every commit of this pull request conforms to the terms of the Topoteretes Developer Certificate of Origin.
This commit is contained in:
commit
74cf8bd7c7
14 changed files with 81 additions and 12 deletions
|
|
@ -10,6 +10,7 @@ from cognee.modules.users.methods import get_authenticated_user
|
|||
from cognee.shared.utils import send_telemetry
|
||||
from cognee.modules.pipelines.models import PipelineRunErrored
|
||||
from cognee.shared.logging_utils import get_logger
|
||||
from cognee import __version__ as cognee_version
|
||||
|
||||
logger = get_logger()
|
||||
|
||||
|
|
@ -63,7 +64,11 @@ def get_add_router() -> APIRouter:
|
|||
send_telemetry(
|
||||
"Add API Endpoint Invoked",
|
||||
user.id,
|
||||
additional_properties={"endpoint": "POST /v1/add", "node_set": node_set},
|
||||
additional_properties={
|
||||
"endpoint": "POST /v1/add",
|
||||
"node_set": node_set,
|
||||
"cognee_version": cognee_version,
|
||||
},
|
||||
)
|
||||
|
||||
from cognee.api.v1.add import add as cognee_add
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ from cognee.modules.pipelines.queues.pipeline_run_info_queues import (
|
|||
)
|
||||
from cognee.shared.logging_utils import get_logger
|
||||
from cognee.shared.utils import send_telemetry
|
||||
|
||||
from cognee import __version__ as cognee_version
|
||||
|
||||
logger = get_logger("api.cognify")
|
||||
|
||||
|
|
@ -98,6 +98,7 @@ def get_cognify_router() -> APIRouter:
|
|||
user.id,
|
||||
additional_properties={
|
||||
"endpoint": "POST /v1/cognify",
|
||||
"cognee_version": cognee_version,
|
||||
},
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ from cognee.modules.users.permissions.methods import (
|
|||
from cognee.modules.graph.methods import get_formatted_graph_data
|
||||
from cognee.modules.pipelines.models import PipelineRunStatus
|
||||
from cognee.shared.utils import send_telemetry
|
||||
from cognee import __version__ as cognee_version
|
||||
|
||||
logger = get_logger()
|
||||
|
||||
|
|
@ -100,6 +101,7 @@ def get_datasets_router() -> APIRouter:
|
|||
user.id,
|
||||
additional_properties={
|
||||
"endpoint": "GET /v1/datasets",
|
||||
"cognee_version": cognee_version,
|
||||
},
|
||||
)
|
||||
|
||||
|
|
@ -147,6 +149,7 @@ def get_datasets_router() -> APIRouter:
|
|||
user.id,
|
||||
additional_properties={
|
||||
"endpoint": "POST /v1/datasets",
|
||||
"cognee_version": cognee_version,
|
||||
},
|
||||
)
|
||||
|
||||
|
|
@ -201,6 +204,7 @@ def get_datasets_router() -> APIRouter:
|
|||
additional_properties={
|
||||
"endpoint": f"DELETE /v1/datasets/{str(dataset_id)}",
|
||||
"dataset_id": str(dataset_id),
|
||||
"cognee_version": cognee_version,
|
||||
},
|
||||
)
|
||||
|
||||
|
|
@ -246,6 +250,7 @@ def get_datasets_router() -> APIRouter:
|
|||
"endpoint": f"DELETE /v1/datasets/{str(dataset_id)}/data/{str(data_id)}",
|
||||
"dataset_id": str(dataset_id),
|
||||
"data_id": str(data_id),
|
||||
"cognee_version": cognee_version,
|
||||
},
|
||||
)
|
||||
|
||||
|
|
@ -327,6 +332,7 @@ def get_datasets_router() -> APIRouter:
|
|||
additional_properties={
|
||||
"endpoint": f"GET /v1/datasets/{str(dataset_id)}/data",
|
||||
"dataset_id": str(dataset_id),
|
||||
"cognee_version": cognee_version,
|
||||
},
|
||||
)
|
||||
|
||||
|
|
@ -387,6 +393,7 @@ def get_datasets_router() -> APIRouter:
|
|||
additional_properties={
|
||||
"endpoint": "GET /v1/datasets/status",
|
||||
"datasets": [str(dataset_id) for dataset_id in datasets],
|
||||
"cognee_version": cognee_version,
|
||||
},
|
||||
)
|
||||
|
||||
|
|
@ -433,6 +440,7 @@ def get_datasets_router() -> APIRouter:
|
|||
"endpoint": f"GET /v1/datasets/{str(dataset_id)}/data/{str(data_id)}/raw",
|
||||
"dataset_id": str(dataset_id),
|
||||
"data_id": str(data_id),
|
||||
"cognee_version": cognee_version,
|
||||
},
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ from cognee.shared.logging_utils import get_logger
|
|||
from cognee.modules.users.models import User
|
||||
from cognee.modules.users.methods import get_authenticated_user
|
||||
from cognee.shared.utils import send_telemetry
|
||||
from cognee import __version__ as cognee_version
|
||||
|
||||
logger = get_logger()
|
||||
|
||||
|
|
@ -39,6 +40,7 @@ def get_delete_router() -> APIRouter:
|
|||
"endpoint": "DELETE /v1/delete",
|
||||
"dataset_id": str(dataset_id),
|
||||
"data_id": str(data_id),
|
||||
"cognee_version": cognee_version,
|
||||
},
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ from cognee.modules.users.methods import get_authenticated_user
|
|||
from cognee.shared.utils import send_telemetry
|
||||
from cognee.modules.pipelines.models import PipelineRunErrored
|
||||
from cognee.shared.logging_utils import get_logger
|
||||
from cognee import __version__ as cognee_version
|
||||
|
||||
logger = get_logger()
|
||||
|
||||
|
|
@ -73,7 +74,7 @@ def get_memify_router() -> APIRouter:
|
|||
send_telemetry(
|
||||
"Memify API Endpoint Invoked",
|
||||
user.id,
|
||||
additional_properties={"endpoint": "POST /v1/memify"},
|
||||
additional_properties={"endpoint": "POST /v1/memify", "cognee_version": cognee_version},
|
||||
)
|
||||
|
||||
if not payload.dataset_id and not payload.dataset_name:
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ from fastapi.responses import JSONResponse
|
|||
from cognee.modules.users.models import User
|
||||
from cognee.modules.users.methods import get_authenticated_user
|
||||
from cognee.shared.utils import send_telemetry
|
||||
from cognee import __version__ as cognee_version
|
||||
|
||||
|
||||
def get_permissions_router() -> APIRouter:
|
||||
|
|
@ -48,6 +49,7 @@ def get_permissions_router() -> APIRouter:
|
|||
"endpoint": f"POST /v1/permissions/datasets/{str(principal_id)}",
|
||||
"dataset_ids": str(dataset_ids),
|
||||
"principal_id": str(principal_id),
|
||||
"cognee_version": cognee_version,
|
||||
},
|
||||
)
|
||||
|
||||
|
|
@ -89,6 +91,7 @@ def get_permissions_router() -> APIRouter:
|
|||
additional_properties={
|
||||
"endpoint": "POST /v1/permissions/roles",
|
||||
"role_name": role_name,
|
||||
"cognee_version": cognee_version,
|
||||
},
|
||||
)
|
||||
|
||||
|
|
@ -133,6 +136,7 @@ def get_permissions_router() -> APIRouter:
|
|||
"endpoint": f"POST /v1/permissions/users/{str(user_id)}/roles",
|
||||
"user_id": str(user_id),
|
||||
"role_id": str(role_id),
|
||||
"cognee_version": cognee_version,
|
||||
},
|
||||
)
|
||||
|
||||
|
|
@ -175,6 +179,7 @@ def get_permissions_router() -> APIRouter:
|
|||
"endpoint": f"POST /v1/permissions/users/{str(user_id)}/tenants",
|
||||
"user_id": str(user_id),
|
||||
"tenant_id": str(tenant_id),
|
||||
"cognee_version": cognee_version,
|
||||
},
|
||||
)
|
||||
|
||||
|
|
@ -209,6 +214,7 @@ def get_permissions_router() -> APIRouter:
|
|||
additional_properties={
|
||||
"endpoint": "POST /v1/permissions/tenants",
|
||||
"tenant_name": tenant_name,
|
||||
"cognee_version": cognee_version,
|
||||
},
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ from cognee.modules.users.models import User
|
|||
from cognee.modules.search.operations import get_history
|
||||
from cognee.modules.users.methods import get_authenticated_user
|
||||
from cognee.shared.utils import send_telemetry
|
||||
from cognee import __version__ as cognee_version
|
||||
|
||||
|
||||
# Note: Datasets sent by name will only map to datasets owned by the request sender
|
||||
|
|
@ -61,9 +62,7 @@ def get_search_router() -> APIRouter:
|
|||
send_telemetry(
|
||||
"Search API Endpoint Invoked",
|
||||
user.id,
|
||||
additional_properties={
|
||||
"endpoint": "GET /v1/search",
|
||||
},
|
||||
additional_properties={"endpoint": "GET /v1/search", "cognee_version": cognee_version},
|
||||
)
|
||||
|
||||
try:
|
||||
|
|
@ -118,6 +117,7 @@ def get_search_router() -> APIRouter:
|
|||
"top_k": payload.top_k,
|
||||
"only_context": payload.only_context,
|
||||
"use_combined_context": payload.use_combined_context,
|
||||
"cognee_version": cognee_version,
|
||||
},
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ from cognee.modules.sync.methods import get_running_sync_operations_for_user, ge
|
|||
from cognee.shared.utils import send_telemetry
|
||||
from cognee.shared.logging_utils import get_logger
|
||||
from cognee.api.v1.sync import SyncResponse
|
||||
from cognee import __version__ as cognee_version
|
||||
from cognee.context_global_variables import set_database_global_context_variables
|
||||
|
||||
logger = get_logger()
|
||||
|
|
@ -99,6 +100,7 @@ def get_sync_router() -> APIRouter:
|
|||
user.id,
|
||||
additional_properties={
|
||||
"endpoint": "POST /v1/sync",
|
||||
"cognee_version": cognee_version,
|
||||
"dataset_ids": [str(id) for id in request.dataset_ids]
|
||||
if request.dataset_ids
|
||||
else "*",
|
||||
|
|
@ -205,6 +207,7 @@ def get_sync_router() -> APIRouter:
|
|||
user.id,
|
||||
additional_properties={
|
||||
"endpoint": "GET /v1/sync/status",
|
||||
"cognee_version": cognee_version,
|
||||
},
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ from cognee.shared.logging_utils import get_logger
|
|||
from cognee.modules.users.models import User
|
||||
from cognee.modules.users.methods import get_authenticated_user
|
||||
from cognee.shared.utils import send_telemetry
|
||||
from cognee import __version__ as cognee_version
|
||||
from cognee.modules.pipelines.models.PipelineRunInfo import (
|
||||
PipelineRunErrored,
|
||||
)
|
||||
|
|
@ -64,6 +65,7 @@ def get_update_router() -> APIRouter:
|
|||
"dataset_id": str(dataset_id),
|
||||
"data_id": str(data_id),
|
||||
"node_set": str(node_set),
|
||||
"cognee_version": cognee_version,
|
||||
},
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ from cognee.modules.users.models import User
|
|||
|
||||
from cognee.context_global_variables import set_database_global_context_variables
|
||||
from cognee.shared.utils import send_telemetry
|
||||
from cognee import __version__ as cognee_version
|
||||
|
||||
logger = get_logger()
|
||||
|
||||
|
|
@ -46,6 +47,7 @@ def get_visualize_router() -> APIRouter:
|
|||
additional_properties={
|
||||
"endpoint": "GET /v1/visualize",
|
||||
"dataset_id": str(dataset_id),
|
||||
"cognee_version": cognee_version,
|
||||
},
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ import inspect
|
|||
from cognee.shared.logging_utils import get_logger
|
||||
from cognee.modules.users.models import User
|
||||
from cognee.shared.utils import send_telemetry
|
||||
from cognee import __version__ as cognee_version
|
||||
|
||||
from ..tasks.task import Task
|
||||
|
||||
|
|
@ -25,6 +26,7 @@ async def handle_task(
|
|||
user_id=user.id,
|
||||
additional_properties={
|
||||
"task_name": running_task.executable.__name__,
|
||||
"cognee_version": cognee_version,
|
||||
},
|
||||
)
|
||||
|
||||
|
|
@ -46,6 +48,7 @@ async def handle_task(
|
|||
user_id=user.id,
|
||||
additional_properties={
|
||||
"task_name": running_task.executable.__name__,
|
||||
"cognee_version": cognee_version,
|
||||
},
|
||||
)
|
||||
except Exception as error:
|
||||
|
|
@ -58,6 +61,7 @@ async def handle_task(
|
|||
user_id=user.id,
|
||||
additional_properties={
|
||||
"task_name": running_task.executable.__name__,
|
||||
"cognee_version": cognee_version,
|
||||
},
|
||||
)
|
||||
raise error
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ from cognee.modules.settings import get_current_settings
|
|||
from cognee.modules.users.models import User
|
||||
from cognee.shared.logging_utils import get_logger
|
||||
from cognee.shared.utils import send_telemetry
|
||||
from cognee import __version__ as cognee_version
|
||||
|
||||
from .run_tasks_base import run_tasks_base
|
||||
from ..tasks.task import Task
|
||||
|
|
@ -26,6 +27,7 @@ async def run_tasks_with_telemetry(
|
|||
user.id,
|
||||
additional_properties={
|
||||
"pipeline_name": str(pipeline_name),
|
||||
"cognee_version": cognee_version,
|
||||
}
|
||||
| config,
|
||||
)
|
||||
|
|
@ -39,7 +41,9 @@ async def run_tasks_with_telemetry(
|
|||
user.id,
|
||||
additional_properties={
|
||||
"pipeline_name": str(pipeline_name),
|
||||
},
|
||||
"cognee_version": cognee_version,
|
||||
}
|
||||
| config,
|
||||
)
|
||||
except Exception as error:
|
||||
logger.error(
|
||||
|
|
@ -53,6 +57,7 @@ async def run_tasks_with_telemetry(
|
|||
user.id,
|
||||
additional_properties={
|
||||
"pipeline_name": str(pipeline_name),
|
||||
"cognee_version": cognee_version,
|
||||
}
|
||||
| config,
|
||||
)
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ from cognee.modules.data.models import Dataset
|
|||
from cognee.modules.data.methods.get_authorized_existing_datasets import (
|
||||
get_authorized_existing_datasets,
|
||||
)
|
||||
|
||||
from cognee import __version__ as cognee_version
|
||||
from .get_search_type_tools import get_search_type_tools
|
||||
from .no_access_control_search import no_access_control_search
|
||||
from ..utils.prepare_search_result import prepare_search_result
|
||||
|
|
@ -64,7 +64,11 @@ async def search(
|
|||
Searching by dataset is only available in ENABLE_BACKEND_ACCESS_CONTROL mode
|
||||
"""
|
||||
query = await log_query(query_text, query_type.value, user.id)
|
||||
send_telemetry("cognee.search EXECUTION STARTED", user.id)
|
||||
send_telemetry(
|
||||
"cognee.search EXECUTION STARTED",
|
||||
user.id,
|
||||
additional_properties={"cognee_version": cognee_version},
|
||||
)
|
||||
|
||||
# Use search function filtered by permissions if access control is enabled
|
||||
if os.getenv("ENABLE_BACKEND_ACCESS_CONTROL", "false").lower() == "true":
|
||||
|
|
@ -101,7 +105,11 @@ async def search(
|
|||
)
|
||||
]
|
||||
|
||||
send_telemetry("cognee.search EXECUTION COMPLETED", user.id)
|
||||
send_telemetry(
|
||||
"cognee.search EXECUTION COMPLETED",
|
||||
user.id,
|
||||
additional_properties={"cognee_version": cognee_version},
|
||||
)
|
||||
|
||||
await log_result(
|
||||
query.id,
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ import http.server
|
|||
import socketserver
|
||||
from threading import Thread
|
||||
import pathlib
|
||||
from uuid import uuid4
|
||||
from uuid import uuid4, uuid5, NAMESPACE_OID
|
||||
|
||||
from cognee.base_config import get_base_config
|
||||
from cognee.infrastructure.databases.graph import get_graph_engine
|
||||
|
|
@ -51,6 +51,26 @@ def get_anonymous_id():
|
|||
return anonymous_id
|
||||
|
||||
|
||||
def _sanitize_nested_properties(obj, property_names: list[str]):
|
||||
"""
|
||||
Recursively replaces any property whose key matches one of `property_names`
|
||||
(e.g., ['url', 'path']) in a nested dict or list with a uuid5 hash
|
||||
of its string value. Returns a new sanitized copy.
|
||||
"""
|
||||
if isinstance(obj, dict):
|
||||
new_obj = {}
|
||||
for k, v in obj.items():
|
||||
if k in property_names and isinstance(v, str):
|
||||
new_obj[k] = str(uuid5(NAMESPACE_OID, v))
|
||||
else:
|
||||
new_obj[k] = _sanitize_nested_properties(v, property_names)
|
||||
return new_obj
|
||||
elif isinstance(obj, list):
|
||||
return [_sanitize_nested_properties(item, property_names) for item in obj]
|
||||
else:
|
||||
return obj
|
||||
|
||||
|
||||
def send_telemetry(event_name: str, user_id, additional_properties: dict = {}):
|
||||
if os.getenv("TELEMETRY_DISABLED"):
|
||||
return
|
||||
|
|
@ -58,7 +78,9 @@ def send_telemetry(event_name: str, user_id, additional_properties: dict = {}):
|
|||
env = os.getenv("ENV")
|
||||
if env in ["test", "dev"]:
|
||||
return
|
||||
|
||||
additional_properties = _sanitize_nested_properties(
|
||||
obj=additional_properties, property_names=["url"]
|
||||
)
|
||||
current_time = datetime.now(timezone.utc)
|
||||
payload = {
|
||||
"anonymous_id": str(get_anonymous_id()),
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue