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 requests
import subprocess
from uuid import UUID
from fastapi import Form, File, UploadFile, Depends
from fastapi.responses import JSONResponse
from fastapi import APIRouter
from fastapi.responses import JSONResponse
from fastapi import Form, File, UploadFile, Depends
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.methods import get_authenticated_user
from cognee.shared.utils import send_telemetry
from cognee.shared.logging_utils import get_logger
logger = get_logger()
@ -60,6 +61,14 @@ def get_add_router() -> APIRouter:
- The ALLOW_HTTP_REQUESTS environment variable controls URL processing
- 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
if not datasetId and not datasetName:

View file

@ -23,6 +23,7 @@ from cognee.modules.pipelines.queues.pipeline_run_info_queues import (
remove_queue,
)
from cognee.shared.logging_utils import get_logger
from cognee.shared.utils import send_telemetry
logger = get_logger("api.cognify")
@ -82,6 +83,14 @@ def get_cognify_router() -> APIRouter:
## Next Steps
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:
return JSONResponse(
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.pipelines.models import PipelineRunStatus
from cognee.shared.utils import send_telemetry
logger = get_logger()
@ -92,6 +93,14 @@ def get_datasets_router() -> APIRouter:
## Error Codes
- **418 I'm a teapot**: Error retrieving datasets
"""
send_telemetry(
"Datasets API Endpoint Invoked",
user.id,
additional_properties={
"endpoint": "GET /v1/datasets",
},
)
try:
datasets = await get_all_user_permission_datasets(user, "read")
@ -130,6 +139,14 @@ def get_datasets_router() -> APIRouter:
## Error Codes
- **418 I'm a teapot**: Error creating dataset
"""
send_telemetry(
"Datasets API Endpoint Invoked",
user.id,
additional_properties={
"endpoint": "POST /v1/datasets",
},
)
try:
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
- **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
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
- **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_dataset
@ -288,6 +324,15 @@ def get_datasets_router() -> APIRouter:
- **404 Not Found**: Dataset doesn't exist or user doesn't have access
- **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
# Verify user has permission to read dataset
@ -331,6 +376,15 @@ def get_datasets_router() -> APIRouter:
## Error Codes
- **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
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
- **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_dataset_data

View file

@ -5,6 +5,7 @@ from uuid import UUID
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
logger = get_logger()
@ -31,6 +32,16 @@ def get_delete_router() -> APIRouter:
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
try:

View file

@ -6,12 +6,13 @@ 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
def get_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(
permission_name: str,
dataset_ids: List[UUID],
@ -40,6 +41,16 @@ def get_permissions_router() -> APIRouter:
- **403 Forbidden**: User doesn't have permission to grant access
- **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
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
- **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
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
- **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
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
- **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
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
- **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
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.search.operations import get_history
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
@ -49,6 +50,14 @@ def get_search_router() -> APIRouter:
## Error Codes
- **500 Internal Server Error**: Error retrieving search history
"""
send_telemetry(
"Search API Endpoint Invoked",
user.id,
additional_properties={
"endpoint": "GET /v1/search",
},
)
try:
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
- 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
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.context_global_variables import set_database_global_context_variables
from cognee.shared.utils import send_telemetry
logger = get_logger()
@ -39,6 +40,15 @@ def get_visualize_router() -> APIRouter:
- User must have read permissions on the dataset
- 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
try: