fix: add api tracking events (#1128)

<!-- .github/pull_request_template.md -->

## Description
<!-- Provide a clear description of the changes in this PR -->

## 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:
Boris 2025-07-22 18:20:15 +02:00 committed by GitHub
parent 022c96de55
commit 7ba35f2f14
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 180 additions and 6 deletions

View file

@ -1,16 +1,17 @@
import os import os
import requests
import subprocess
from uuid import UUID from uuid import UUID
from fastapi import Form, File, UploadFile, Depends
from fastapi.responses import JSONResponse
from fastapi import APIRouter from fastapi import APIRouter
from fastapi.responses import JSONResponse
from fastapi import Form, File, UploadFile, Depends
from typing import List, Optional, Union, Literal from typing import List, Optional, Union, Literal
import subprocess
from cognee.shared.logging_utils import get_logger
import requests
from cognee.modules.users.models import User from cognee.modules.users.models import User
from cognee.modules.users.methods import get_authenticated_user from cognee.modules.users.methods import get_authenticated_user
from cognee.shared.utils import send_telemetry
from cognee.shared.logging_utils import get_logger
logger = get_logger() logger = get_logger()
@ -60,6 +61,14 @@ def get_add_router() -> APIRouter:
- The ALLOW_HTTP_REQUESTS environment variable controls URL processing - The ALLOW_HTTP_REQUESTS environment variable controls URL processing
- datasetId value can only be the UUID of an already existing dataset - datasetId value can only be the UUID of an already existing dataset
""" """
send_telemetry(
"Add API Endpoint Invoked",
user.id,
additional_properties={
"endpoint": "POST /v1/add",
},
)
from cognee.api.v1.add import add as cognee_add from cognee.api.v1.add import add as cognee_add
if not datasetId and not datasetName: if not datasetId and not datasetName:

View file

@ -23,6 +23,7 @@ from cognee.modules.pipelines.queues.pipeline_run_info_queues import (
remove_queue, remove_queue,
) )
from cognee.shared.logging_utils import get_logger from cognee.shared.logging_utils import get_logger
from cognee.shared.utils import send_telemetry
logger = get_logger("api.cognify") logger = get_logger("api.cognify")
@ -82,6 +83,14 @@ def get_cognify_router() -> APIRouter:
## Next Steps ## Next Steps
After successful processing, use the search endpoints to query the generated knowledge graph for insights, relationships, and semantic search. After successful processing, use the search endpoints to query the generated knowledge graph for insights, relationships, and semantic search.
""" """
send_telemetry(
"Cognify API Endpoint Invoked",
user.id,
additional_properties={
"endpoint": "POST /v1/cognify",
},
)
if not payload.datasets and not payload.dataset_ids: if not payload.datasets and not payload.dataset_ids:
return JSONResponse( return JSONResponse(
status_code=400, content={"error": "No datasets or dataset_ids provided"} status_code=400, content={"error": "No datasets or dataset_ids provided"}

View file

@ -22,6 +22,7 @@ from cognee.modules.users.permissions.methods import (
) )
from cognee.modules.graph.methods import get_formatted_graph_data from cognee.modules.graph.methods import get_formatted_graph_data
from cognee.modules.pipelines.models import PipelineRunStatus from cognee.modules.pipelines.models import PipelineRunStatus
from cognee.shared.utils import send_telemetry
logger = get_logger() logger = get_logger()
@ -92,6 +93,14 @@ def get_datasets_router() -> APIRouter:
## Error Codes ## Error Codes
- **418 I'm a teapot**: Error retrieving datasets - **418 I'm a teapot**: Error retrieving datasets
""" """
send_telemetry(
"Datasets API Endpoint Invoked",
user.id,
additional_properties={
"endpoint": "GET /v1/datasets",
},
)
try: try:
datasets = await get_all_user_permission_datasets(user, "read") datasets = await get_all_user_permission_datasets(user, "read")
@ -130,6 +139,14 @@ def get_datasets_router() -> APIRouter:
## Error Codes ## Error Codes
- **418 I'm a teapot**: Error creating dataset - **418 I'm a teapot**: Error creating dataset
""" """
send_telemetry(
"Datasets API Endpoint Invoked",
user.id,
additional_properties={
"endpoint": "POST /v1/datasets",
},
)
try: try:
datasets = await get_datasets_by_name([dataset_data.name], user.id) datasets = await get_datasets_by_name([dataset_data.name], user.id)
@ -175,6 +192,15 @@ def get_datasets_router() -> APIRouter:
- **404 Not Found**: Dataset doesn't exist or user doesn't have access - **404 Not Found**: Dataset doesn't exist or user doesn't have access
- **500 Internal Server Error**: Error during deletion - **500 Internal Server Error**: Error during deletion
""" """
send_telemetry(
"Datasets API Endpoint Invoked",
user.id,
additional_properties={
"endpoint": f"DELETE /v1/datasets/{str(dataset_id)}",
"dataset_id": str(dataset_id),
},
)
from cognee.modules.data.methods import get_dataset, delete_dataset from cognee.modules.data.methods import get_dataset, delete_dataset
dataset = await get_dataset(user.id, dataset_id) dataset = await get_dataset(user.id, dataset_id)
@ -210,6 +236,16 @@ def get_datasets_router() -> APIRouter:
- **404 Not Found**: Dataset or data item doesn't exist, or user doesn't have access - **404 Not Found**: Dataset or data item doesn't exist, or user doesn't have access
- **500 Internal Server Error**: Error during deletion - **500 Internal Server Error**: Error during deletion
""" """
send_telemetry(
"Datasets API Endpoint Invoked",
user.id,
additional_properties={
"endpoint": f"DELETE /v1/datasets/{str(dataset_id)}/data/{str(data_id)}",
"dataset_id": str(dataset_id),
"data_id": str(data_id),
},
)
from cognee.modules.data.methods import get_data, delete_data from cognee.modules.data.methods import get_data, delete_data
from cognee.modules.data.methods import get_dataset from cognee.modules.data.methods import get_dataset
@ -288,6 +324,15 @@ def get_datasets_router() -> APIRouter:
- **404 Not Found**: Dataset doesn't exist or user doesn't have access - **404 Not Found**: Dataset doesn't exist or user doesn't have access
- **500 Internal Server Error**: Error retrieving data - **500 Internal Server Error**: Error retrieving data
""" """
send_telemetry(
"Datasets API Endpoint Invoked",
user.id,
additional_properties={
"endpoint": f"GET /v1/datasets/{str(dataset_id)}/data",
"dataset_id": str(dataset_id),
},
)
from cognee.modules.data.methods import get_dataset_data, get_dataset from cognee.modules.data.methods import get_dataset_data, get_dataset
# Verify user has permission to read dataset # Verify user has permission to read dataset
@ -331,6 +376,15 @@ def get_datasets_router() -> APIRouter:
## Error Codes ## Error Codes
- **500 Internal Server Error**: Error retrieving status information - **500 Internal Server Error**: Error retrieving status information
""" """
send_telemetry(
"Datasets API Endpoint Invoked",
user.id,
additional_properties={
"endpoint": "GET /v1/datasets/status",
"datasets": [str(dataset_id) for dataset_id in datasets],
},
)
from cognee.api.v1.datasets.datasets import datasets as cognee_datasets from cognee.api.v1.datasets.datasets import datasets as cognee_datasets
try: try:
@ -367,6 +421,16 @@ def get_datasets_router() -> APIRouter:
- **404 Not Found**: Dataset or data item doesn't exist, or user doesn't have access - **404 Not Found**: Dataset or data item doesn't exist, or user doesn't have access
- **500 Internal Server Error**: Error accessing the raw data file - **500 Internal Server Error**: Error accessing the raw data file
""" """
send_telemetry(
"Datasets API Endpoint Invoked",
user.id,
additional_properties={
"endpoint": f"GET /v1/datasets/{str(dataset_id)}/data/{str(data_id)}/raw",
"dataset_id": str(dataset_id),
"data_id": str(data_id),
},
)
from cognee.modules.data.methods import get_data from cognee.modules.data.methods import get_data
from cognee.modules.data.methods import get_dataset_data from cognee.modules.data.methods import get_dataset_data

View file

@ -5,6 +5,7 @@ from uuid import UUID
from cognee.shared.logging_utils import get_logger from cognee.shared.logging_utils import get_logger
from cognee.modules.users.models import User from cognee.modules.users.models import User
from cognee.modules.users.methods import get_authenticated_user from cognee.modules.users.methods import get_authenticated_user
from cognee.shared.utils import send_telemetry
logger = get_logger() logger = get_logger()
@ -31,6 +32,16 @@ def get_delete_router() -> APIRouter:
JSON response indicating success or failure JSON response indicating success or failure
""" """
send_telemetry(
"Delete API Endpoint Invoked",
user.id,
additional_properties={
"endpoint": "DELETE /v1/delete",
"dataset_id": str(dataset_id),
"data_id": str(data_id),
},
)
from cognee.api.v1.delete import delete as cognee_delete from cognee.api.v1.delete import delete as cognee_delete
try: try:

View file

@ -6,12 +6,13 @@ from fastapi.responses import JSONResponse
from cognee.modules.users.models import User from cognee.modules.users.models import User
from cognee.modules.users.methods import get_authenticated_user from cognee.modules.users.methods import get_authenticated_user
from cognee.shared.utils import send_telemetry
def get_permissions_router() -> APIRouter: def get_permissions_router() -> APIRouter:
permissions_router = APIRouter() permissions_router = APIRouter()
@permissions_router.post("/datasets/{principal_id}/") @permissions_router.post("/datasets/{principal_id}")
async def give_datasets_permission_to_principal( async def give_datasets_permission_to_principal(
permission_name: str, permission_name: str,
dataset_ids: List[UUID], dataset_ids: List[UUID],
@ -40,6 +41,16 @@ def get_permissions_router() -> APIRouter:
- **403 Forbidden**: User doesn't have permission to grant access - **403 Forbidden**: User doesn't have permission to grant access
- **500 Internal Server Error**: Error granting permission - **500 Internal Server Error**: Error granting permission
""" """
send_telemetry(
"Permissions API Endpoint Invoked",
user.id,
additional_properties={
"endpoint": f"POST /v1/permissions/datasets/{str(principal_id)}",
"dataset_ids": str(dataset_ids),
"principal_id": str(principal_id),
},
)
from cognee.modules.users.permissions.methods import authorized_give_permission_on_datasets from cognee.modules.users.permissions.methods import authorized_give_permission_on_datasets
await authorized_give_permission_on_datasets( await authorized_give_permission_on_datasets(
@ -72,6 +83,15 @@ def get_permissions_router() -> APIRouter:
- **400 Bad Request**: Invalid role name or role already exists - **400 Bad Request**: Invalid role name or role already exists
- **500 Internal Server Error**: Error creating the role - **500 Internal Server Error**: Error creating the role
""" """
send_telemetry(
"Permissions API Endpoint Invoked",
user.id,
additional_properties={
"endpoint": "POST /v1/permissions/roles",
"role_name": role_name,
},
)
from cognee.modules.users.roles.methods import create_role as create_role_method from cognee.modules.users.roles.methods import create_role as create_role_method
await create_role_method(role_name=role_name, owner_id=user.id) await create_role_method(role_name=role_name, owner_id=user.id)
@ -104,6 +124,16 @@ def get_permissions_router() -> APIRouter:
- **404 Not Found**: User or role doesn't exist - **404 Not Found**: User or role doesn't exist
- **500 Internal Server Error**: Error adding user to role - **500 Internal Server Error**: Error adding user to role
""" """
send_telemetry(
"Permissions API Endpoint Invoked",
user.id,
additional_properties={
"endpoint": f"POST /v1/permissions/users/{str(user_id)}/roles",
"user_id": str(user_id),
"role_id": str(role_id),
},
)
from cognee.modules.users.roles.methods import add_user_to_role as add_user_to_role_method from cognee.modules.users.roles.methods import add_user_to_role as add_user_to_role_method
await add_user_to_role_method(user_id=user_id, role_id=role_id, owner_id=user.id) await add_user_to_role_method(user_id=user_id, role_id=role_id, owner_id=user.id)
@ -136,6 +166,16 @@ def get_permissions_router() -> APIRouter:
- **404 Not Found**: User or tenant doesn't exist - **404 Not Found**: User or tenant doesn't exist
- **500 Internal Server Error**: Error adding user to tenant - **500 Internal Server Error**: Error adding user to tenant
""" """
send_telemetry(
"Permissions API Endpoint Invoked",
user.id,
additional_properties={
"endpoint": f"POST /v1/permissions/users/{str(user_id)}/tenants",
"user_id": str(user_id),
"tenant_id": str(tenant_id),
},
)
from cognee.modules.users.tenants.methods import add_user_to_tenant from cognee.modules.users.tenants.methods import add_user_to_tenant
await add_user_to_tenant(user_id=user_id, tenant_id=tenant_id, owner_id=user.id) await add_user_to_tenant(user_id=user_id, tenant_id=tenant_id, owner_id=user.id)
@ -161,6 +201,15 @@ def get_permissions_router() -> APIRouter:
- **400 Bad Request**: Invalid tenant name or tenant already exists - **400 Bad Request**: Invalid tenant name or tenant already exists
- **500 Internal Server Error**: Error creating the tenant - **500 Internal Server Error**: Error creating the tenant
""" """
send_telemetry(
"Permissions API Endpoint Invoked",
user.id,
additional_properties={
"endpoint": "POST /v1/permissions/tenants",
"tenant_name": tenant_name,
},
)
from cognee.modules.users.tenants.methods import create_tenant as create_tenant_method from cognee.modules.users.tenants.methods import create_tenant as create_tenant_method
await create_tenant_method(tenant_name=tenant_name, user_id=user.id) await create_tenant_method(tenant_name=tenant_name, user_id=user.id)

View file

@ -10,6 +10,7 @@ from cognee.modules.users.exceptions.exceptions import PermissionDeniedError
from cognee.modules.users.models import User from cognee.modules.users.models import User
from cognee.modules.search.operations import get_history from cognee.modules.search.operations import get_history
from cognee.modules.users.methods import get_authenticated_user from cognee.modules.users.methods import get_authenticated_user
from cognee.shared.utils import send_telemetry
# Note: Datasets sent by name will only map to datasets owned by the request sender # Note: Datasets sent by name will only map to datasets owned by the request sender
@ -49,6 +50,14 @@ def get_search_router() -> APIRouter:
## Error Codes ## Error Codes
- **500 Internal Server Error**: Error retrieving search history - **500 Internal Server Error**: Error retrieving search history
""" """
send_telemetry(
"Search API Endpoint Invoked",
user.id,
additional_properties={
"endpoint": "GET /v1/search",
},
)
try: try:
history = await get_history(user.id, limit=0) history = await get_history(user.id, limit=0)
@ -84,6 +93,19 @@ def get_search_router() -> APIRouter:
- To search datasets not owned by the request sender, dataset UUID is needed - To search datasets not owned by the request sender, dataset UUID is needed
- If permission is denied, returns empty list instead of error - If permission is denied, returns empty list instead of error
""" """
send_telemetry(
"Search API Endpoint Invoked",
user.id,
additional_properties={
"endpoint": "POST /v1/search",
"search_type": str(payload.search_type),
"datasets": payload.datasets,
"dataset_ids": [str(dataset_id) for dataset_id in payload.dataset_ids or []],
"query": payload.query,
"top_k": payload.top_k,
},
)
from cognee.api.v1.search import search as cognee_search from cognee.api.v1.search import search as cognee_search
try: try:

View file

@ -7,6 +7,7 @@ from cognee.modules.data.methods import get_authorized_existing_datasets
from cognee.modules.users.models import User from cognee.modules.users.models import User
from cognee.context_global_variables import set_database_global_context_variables from cognee.context_global_variables import set_database_global_context_variables
from cognee.shared.utils import send_telemetry
logger = get_logger() logger = get_logger()
@ -39,6 +40,15 @@ def get_visualize_router() -> APIRouter:
- User must have read permissions on the dataset - User must have read permissions on the dataset
- Visualization is interactive and allows graph exploration - Visualization is interactive and allows graph exploration
""" """
send_telemetry(
"Visualize API Endpoint Invoked",
user.id,
additional_properties={
"endpoint": "GET /v1/visualize",
"dataset_id": str(dataset_id),
},
)
from cognee.api.v1.visualize import visualize_graph from cognee.api.v1.visualize import visualize_graph
try: try: