From f5d83e9d5ff5a80c660a30d5c2b6e14aa53bfbd7 Mon Sep 17 00:00:00 2001 From: Aviraj <100823015+avirajsingh7@users.noreply.github.com> Date: Thu, 7 Aug 2025 16:15:36 +0530 Subject: [PATCH 1/9] logs for cred --- backend/app/api/routes/credentials.py | 27 ++++++++++++++++++++++++ backend/app/core/providers.py | 9 ++++++++ backend/app/crud/credentials.py | 30 ++++++++++++++++++++++----- 3 files changed, 61 insertions(+), 5 deletions(-) diff --git a/backend/app/api/routes/credentials.py b/backend/app/api/routes/credentials.py index 0091e8e0..d8063a4a 100644 --- a/backend/app/api/routes/credentials.py +++ b/backend/app/api/routes/credentials.py @@ -1,3 +1,4 @@ +import logging from typing import List from fastapi import APIRouter, Depends @@ -19,6 +20,7 @@ from app.core.providers import validate_provider from app.core.exception_handlers import HTTPException +logger = logging.getLogger(__name__) router = APIRouter(prefix="/credentials", tags=["credentials"]) @@ -37,6 +39,9 @@ def create_new_credential(*, session: SessionDep, creds_in: CredsCreate): if creds_in.project_id: project = validate_project(session, creds_in.project_id) if project.organization_id != creds_in.organization_id: + logger.error( + f"[create_new_credential] Project {creds_in.project_id} does not belong to organization {creds_in.organization_id}" + ) raise HTTPException( status_code=400, detail="Project does not belong to the specified organization", @@ -51,6 +56,9 @@ def create_new_credential(*, session: SessionDep, creds_in: CredsCreate): project_id=creds_in.project_id, ) if existing_cred: + logger.error( + f"[create_new_credential] Credentials for provider '{provider}' already exist for organization {creds_in.organization_id} and project {creds_in.project_id}" + ) raise HTTPException( status_code=400, detail=( @@ -62,6 +70,9 @@ def create_new_credential(*, session: SessionDep, creds_in: CredsCreate): # Create credentials new_creds = set_creds_for_org(session=session, creds_add=creds_in) if not new_creds: + logger.error( + f"[create_new_credential] Failed to create credentials for organization {creds_in.organization_id}, project {creds_in.project_id}" + ) raise Exception(status_code=500, detail="Failed to create credentials") return APIResponse.success_response([cred.to_public() for cred in new_creds]) @@ -77,6 +88,9 @@ def create_new_credential(*, session: SessionDep, creds_in: CredsCreate): def read_credential(*, session: SessionDep, org_id: int, project_id: int | None = None): creds = get_creds_by_org(session=session, org_id=org_id, project_id=project_id) if not creds: + logger.error( + f"[read_credential] No credentials found for organization {org_id}, project_id {project_id}" + ) raise HTTPException(status_code=404, detail="Credentials not found") return APIResponse.success_response([cred.to_public() for cred in creds]) @@ -100,6 +114,9 @@ def read_provider_credential( project_id=project_id, ) if provider_creds is None: + logger.error( + f"[read_provider_credential] No credentials found for organization {org_id}, provider {provider}" + ) raise HTTPException(status_code=404, detail="Provider credentials not found") return APIResponse.success_response(provider_creds) @@ -115,6 +132,7 @@ def read_provider_credential( def update_credential(*, session: SessionDep, org_id: int, creds_in: CredsUpdate): validate_organization(session, org_id) if not creds_in or not creds_in.provider or not creds_in.credential: + logger.error(f"[update_credential] Invalid input for organization {org_id}") raise HTTPException( status_code=400, detail="Provider and credential must be provided" ) @@ -137,6 +155,9 @@ def delete_provider_credential( ): provider_enum = validate_provider(provider) if not provider_enum: + logger.error( + f"[delete_provider_credential] Invalid provider: {provider} | org_id: {org_id}, project_id: {project_id}" + ) raise HTTPException(status_code=400, detail="Invalid provider") provider_creds = get_provider_credential( session=session, @@ -145,6 +166,9 @@ def delete_provider_credential( project_id=project_id, ) if provider_creds is None: + logger.error( + f"[delete_provider_credential] Provider credentials not found | org_id: {org_id}, provider: {provider}, project_id: {project_id}" + ) raise HTTPException(status_code=404, detail="Provider credentials not found") updated_creds = remove_provider_credential( @@ -168,6 +192,9 @@ def delete_all_credentials( ): creds = remove_creds_for_org(session=session, org_id=org_id, project_id=project_id) if not creds: + logger.error( + f"[delete_all_credentials] Credentials not found for organization {org_id} | project_id: {project_id}" + ) raise HTTPException( status_code=404, detail="Credentials for organization not found" ) diff --git a/backend/app/core/providers.py b/backend/app/core/providers.py index f703d2e6..5e1541ed 100644 --- a/backend/app/core/providers.py +++ b/backend/app/core/providers.py @@ -1,7 +1,10 @@ +import logging from typing import Dict, List, Optional from enum import Enum from dataclasses import dataclass +logger = logging.getLogger(__name__) + class Provider(str, Enum): """Enumeration of supported credential providers.""" @@ -46,6 +49,9 @@ def validate_provider(provider: str) -> Provider: return Provider(provider.lower()) except ValueError: supported = ", ".join(p.value for p in Provider) + logger.error( + f"[validate_provider] Unsupported provider: {provider}. Supported providers are: {supported}" + ) raise ValueError( f"Unsupported provider: {provider}. Supported providers are: {supported}" ) @@ -67,6 +73,9 @@ def validate_provider_credentials(provider: str, credentials: Dict[str, str]) -> if missing_fields := [ field for field in required_fields if field not in credentials ]: + logger.error( + f"[validate_provider_credentials] Missing required fields for {provider}: {', '.join(missing_fields)}" + ) raise ValueError( f"Missing required fields for {provider}: {', '.join(missing_fields)}" ) diff --git a/backend/app/crud/credentials.py b/backend/app/crud/credentials.py index f456d48e..4ec1c700 100644 --- a/backend/app/crud/credentials.py +++ b/backend/app/crud/credentials.py @@ -1,24 +1,28 @@ +import logging from typing import Optional, Dict, Any, List, Union from sqlmodel import Session, select from sqlalchemy.exc import IntegrityError -from datetime import datetime, timezone from app.models import Credential, CredsCreate, CredsUpdate from app.core.providers import ( validate_provider, validate_provider_credentials, - get_supported_providers, ) from app.core.security import encrypt_credentials, decrypt_credentials from app.core.util import now from app.core.exception_handlers import HTTPException +logger = logging.getLogger(__name__) + def set_creds_for_org(*, session: Session, creds_add: CredsCreate) -> List[Credential]: """Set credentials for an organization. Creates a separate row for each provider.""" created_credentials = [] if not creds_add.credential: + logger.error( + f"[set_creds_for_org] No credentials provided | project_id: {creds_add.project_id}" + ) raise HTTPException(400, "No credentials provided") for provider, credentials in creds_add.credential.items(): @@ -45,10 +49,16 @@ def set_creds_for_org(*, session: Session, creds_add: CredsCreate) -> List[Crede created_credentials.append(credential) except IntegrityError as e: session.rollback() + logger.error( + f"[set_creds_for_org] Integrity error while adding credentials | organization_id {creds_add.organization_id}, project_id {creds_add.project_id}, provider {provider}: {str(e)}", + exc_info=True, + ) raise ValueError( f"Error while adding credentials for provider {provider}: {str(e)}" ) - + logger.info( + f"[set_creds_for_org] Successfully created credentials | organization_id {creds_add.organization_id}, project_id {creds_add.project_id}" + ) return created_credentials @@ -149,6 +159,9 @@ def update_creds_for_org( ) creds = session.exec(statement).first() if creds is None: + logger.error( + f"[update_creds_for_org] Credentials not found for organization {org_id}, provider {creds_in.provider}, project_id {creds_in.project_id}" + ) raise HTTPException( status_code=404, detail="Credentials not found for this provider" ) @@ -158,7 +171,9 @@ def update_creds_for_org( session.add(creds) session.commit() session.refresh(creds) - + logger.info( + f"[update_creds_for_org] Successfully updated credentials | organization_id {org_id}, provider {creds_in.provider}, project_id {creds_in.project_id}" + ) return [creds] @@ -182,7 +197,9 @@ def remove_provider_credential( session.add(creds) session.commit() session.refresh(creds) - + logger.info( + f"[remove_provider_credential] Successfully removed credentials for provider | organization_id {org_id}, provider {provider}, project_id {project_id}" + ) return creds @@ -203,4 +220,7 @@ def remove_creds_for_org( session.add(cred) session.commit() + logger.info( + f"[remove_creds_for_org] Successfully removed all the credentials | organization_id {org_id}, project_id {project_id}" + ) return creds From fa02f651337d539da0b340063f56d2b3800b3579 Mon Sep 17 00:00:00 2001 From: Aviraj <100823015+avirajsingh7@users.noreply.github.com> Date: Fri, 8 Aug 2025 11:59:40 +0530 Subject: [PATCH 2/9] logs for user and utils --- backend/app/api/routes/users.py | 23 ++++++++++++++++++++++- backend/app/core/util.py | 10 ++++++---- backend/app/crud/user.py | 9 ++++++++- backend/app/utils.py | 2 +- 4 files changed, 37 insertions(+), 7 deletions(-) diff --git a/backend/app/api/routes/users.py b/backend/app/api/routes/users.py index 12761875..d9687084 100644 --- a/backend/app/api/routes/users.py +++ b/backend/app/api/routes/users.py @@ -1,4 +1,4 @@ -import uuid +import logging from typing import Any from fastapi import APIRouter, Depends @@ -26,6 +26,7 @@ from app.utils import generate_new_account_email, send_email from app.core.exception_handlers import HTTPException +logger = logging.getLogger(__name__) router = APIRouter(prefix="/users", tags=["users"]) @@ -49,6 +50,9 @@ def read_users(session: SessionDep, skip: int = 0, limit: int = 100) -> Any: ) def create_user_endpoint(*, session: SessionDep, user_in: UserCreate) -> Any: if get_user_by_email(session=session, email=user_in.email): + logger.error( + f"[create_user_endpoint] Attempt to create user with existing email: {user_in.email}" + ) raise HTTPException( status_code=400, detail="The user with this email already exists in the system.", @@ -75,6 +79,9 @@ def update_user_me( if user_in.email: existing_user = get_user_by_email(session=session, email=user_in.email) if existing_user and existing_user.id != current_user.id: + logger.error( + f"[update_user_me] Attempt to update user with existing email: {user_in.email}" + ) raise HTTPException( status_code=409, detail="User with this email already exists" ) @@ -83,6 +90,7 @@ def update_user_me( session.add(current_user) session.commit() session.refresh(current_user) + logger.info(f"[update_user_me] User updated with email: {current_user.email}") return current_user @@ -102,6 +110,7 @@ def update_password_me( current_user.hashed_password = get_password_hash(body.new_password) session.add(current_user) session.commit() + logger.info(f"[update_password_me] Password updated for user: {current_user.email}") return Message(message="Password updated successfully") @@ -113,11 +122,13 @@ def read_user_me(current_user: CurrentUser) -> Any: @router.delete("/me", response_model=Message) def delete_user_me(session: SessionDep, current_user: CurrentUser) -> Any: if current_user.is_superuser: + logger.error("[delete_user_me] Attempt to delete superuser account by itself") raise HTTPException( status_code=403, detail="Super users are not allowed to delete themselves" ) session.delete(current_user) session.commit() + logger.info(f"[delete_user_me] User deleted: {current_user.email}") return Message(message="User deleted successfully") @@ -131,6 +142,9 @@ def register_user(session: SessionDep, user_in: UserRegister) -> Any: This endpoint allows the registration of a new user and is accessible only by a superuser. """ if get_user_by_email(session=session, email=user_in.email): + logger.error( + f"[register_user] Attempt to create user with existing email: {user_in.email}" + ) raise HTTPException( status_code=400, detail="The user with this email already exists in the system", @@ -171,6 +185,7 @@ def update_user_endpoint( ) -> Any: db_user = session.get(User, user_id) if not db_user: + logger.error(f"[update_user_endpoint] User with id {user_id} not found") raise HTTPException( status_code=404, detail="The user with this id does not exist in the system", @@ -179,6 +194,9 @@ def update_user_endpoint( if user_in.email: existing_user = get_user_by_email(session=session, email=user_in.email) if existing_user and existing_user.id != user_id: + logger.error( + f"[update_user_endpoint] Attempt to update user with existing email: {user_in.email}" + ) raise HTTPException( status_code=409, detail="User with this email already exists" ) @@ -196,13 +214,16 @@ def delete_user( ) -> Message: user = session.get(User, user_id) if not user: + logger.error(f"[delete_user] User with id {user_id} not found") raise HTTPException(status_code=404, detail="User not found") if user == current_user: + logger.error("[delete_user] Attempt to delete self by superuser") raise HTTPException( status_code=403, detail="Super users are not allowed to delete themselves" ) session.delete(user) session.commit() + logger.info(f"[delete_user] User deleted: {user.email}") return Message(message="User deleted successfully") diff --git a/backend/app/core/util.py b/backend/app/core/util.py index c3cd4c93..2ac9107d 100644 --- a/backend/app/core/util.py +++ b/backend/app/core/util.py @@ -9,13 +9,15 @@ from langfuse.decorators import langfuse_context from openai import OpenAI +logger = logging.getLogger(__name__) + def now(): return datetime.now(timezone.utc).replace(tzinfo=None) def raise_from_unknown(error: Exception, status_code=500): - warnings.warn( + logger.warning( 'Unexpected exception "{}": {}'.format( type(error).__name__, error, @@ -31,7 +33,7 @@ def post_callback(url: HttpUrl, payload: BaseModel): try: response.raise_for_status() except RequestException as err: - warnings.warn(f"Callback failure: {err}") + logger.warning(f"Callback failure: {err}") errno += 1 return not errno @@ -67,7 +69,7 @@ def configure_langfuse(credentials: dict) -> tuple[Langfuse, bool]: return langfuse, True except Exception as e: - warnings.warn(f"Failed to configure Langfuse: {str(e)}") + logger.error(f"Failed to configure Langfuse: {str(e)}") return None, False @@ -89,5 +91,5 @@ def configure_openai(credentials: dict) -> tuple[OpenAI, bool]: client = OpenAI(api_key=credentials["api_key"]) return client, True except Exception as e: - warnings.warn(f"Failed to configure OpenAI client: {str(e)}") + logger.error(f"Failed to configure OpenAI client: {str(e)}") return None, False diff --git a/backend/app/crud/user.py b/backend/app/crud/user.py index a30cc7e6..2d1ab501 100644 --- a/backend/app/crud/user.py +++ b/backend/app/crud/user.py @@ -1,11 +1,14 @@ -import uuid +import logging from typing import Any from sqlmodel import Session, select from app.core.security import get_password_hash, verify_password + from app.models import User, UserCreate, UserUpdate +logger = logging.getLogger(__name__) + def create_user(*, session: Session, user_create: UserCreate) -> User: db_obj = User.model_validate( @@ -14,6 +17,7 @@ def create_user(*, session: Session, user_create: UserCreate) -> User: session.add(db_obj) session.commit() session.refresh(db_obj) + logger.info(f"[create_user] User created with email: {db_obj.email}") return db_obj @@ -28,6 +32,9 @@ def update_user(*, session: Session, db_user: User, user_in: UserUpdate) -> Any: session.add(db_user) session.commit() session.refresh(db_user) + logger.info( + f"[update_user] User updated with email: {db_user.email}, updated fields: {user_data.keys()}" + ) return db_user diff --git a/backend/app/utils.py b/backend/app/utils.py index 38f8c650..415e4444 100644 --- a/backend/app/utils.py +++ b/backend/app/utils.py @@ -177,7 +177,7 @@ def get_openai_client(session: Session, org_id: int, project_id: int) -> OpenAI: ) if not credentials or "api_key" not in credentials: - logger.warning( + logger.error( f"[get_openai_client] OpenAI credentials not found. | project_id: {project_id}" ) raise HTTPException( From 831cc5239355bf938bfc6887388c36656dcc72dc Mon Sep 17 00:00:00 2001 From: Aviraj <100823015+avirajsingh7@users.noreply.github.com> Date: Thu, 14 Aug 2025 12:26:25 +0530 Subject: [PATCH 3/9] log id instead of email --- backend/app/api/routes/credentials.py | 5 +---- backend/app/api/routes/users.py | 16 ++++++++-------- backend/app/crud/user.py | 4 ++-- 3 files changed, 11 insertions(+), 14 deletions(-) diff --git a/backend/app/api/routes/credentials.py b/backend/app/api/routes/credentials.py index d8063a4a..f04b09bf 100644 --- a/backend/app/api/routes/credentials.py +++ b/backend/app/api/routes/credentials.py @@ -56,7 +56,7 @@ def create_new_credential(*, session: SessionDep, creds_in: CredsCreate): project_id=creds_in.project_id, ) if existing_cred: - logger.error( + logger.warning( f"[create_new_credential] Credentials for provider '{provider}' already exist for organization {creds_in.organization_id} and project {creds_in.project_id}" ) raise HTTPException( @@ -155,9 +155,6 @@ def delete_provider_credential( ): provider_enum = validate_provider(provider) if not provider_enum: - logger.error( - f"[delete_provider_credential] Invalid provider: {provider} | org_id: {org_id}, project_id: {project_id}" - ) raise HTTPException(status_code=400, detail="Invalid provider") provider_creds = get_provider_credential( session=session, diff --git a/backend/app/api/routes/users.py b/backend/app/api/routes/users.py index d9687084..e8da92b9 100644 --- a/backend/app/api/routes/users.py +++ b/backend/app/api/routes/users.py @@ -51,7 +51,7 @@ def read_users(session: SessionDep, skip: int = 0, limit: int = 100) -> Any: def create_user_endpoint(*, session: SessionDep, user_in: UserCreate) -> Any: if get_user_by_email(session=session, email=user_in.email): logger.error( - f"[create_user_endpoint] Attempt to create user with existing email: {user_in.email}" + f"[create_user_endpoint] Attempt to create user with existing email" ) raise HTTPException( status_code=400, @@ -80,7 +80,7 @@ def update_user_me( existing_user = get_user_by_email(session=session, email=user_in.email) if existing_user and existing_user.id != current_user.id: logger.error( - f"[update_user_me] Attempt to update user with existing email: {user_in.email}" + f"[update_user_me] Attempt to update user with existing email" ) raise HTTPException( status_code=409, detail="User with this email already exists" @@ -90,7 +90,7 @@ def update_user_me( session.add(current_user) session.commit() session.refresh(current_user) - logger.info(f"[update_user_me] User updated with email: {current_user.email}") + logger.info(f"[update_user_me] User updated with id: {current_user.id}") return current_user @@ -110,7 +110,7 @@ def update_password_me( current_user.hashed_password = get_password_hash(body.new_password) session.add(current_user) session.commit() - logger.info(f"[update_password_me] Password updated for user: {current_user.email}") + logger.info(f"[update_password_me] Password updated for user: {current_user.id}") return Message(message="Password updated successfully") @@ -128,7 +128,7 @@ def delete_user_me(session: SessionDep, current_user: CurrentUser) -> Any: ) session.delete(current_user) session.commit() - logger.info(f"[delete_user_me] User deleted: {current_user.email}") + logger.info(f"[delete_user_me] User deleted: {current_user.id}") return Message(message="User deleted successfully") @@ -143,7 +143,7 @@ def register_user(session: SessionDep, user_in: UserRegister) -> Any: """ if get_user_by_email(session=session, email=user_in.email): logger.error( - f"[register_user] Attempt to create user with existing email: {user_in.email}" + f"[register_user] Attempt to create user with existing email" ) raise HTTPException( status_code=400, @@ -195,7 +195,7 @@ def update_user_endpoint( existing_user = get_user_by_email(session=session, email=user_in.email) if existing_user and existing_user.id != user_id: logger.error( - f"[update_user_endpoint] Attempt to update user with existing email: {user_in.email}" + f"[update_user_endpoint] Attempt to update user with existing email" ) raise HTTPException( status_code=409, detail="User with this email already exists" @@ -225,5 +225,5 @@ def delete_user( session.delete(user) session.commit() - logger.info(f"[delete_user] User deleted: {user.email}") + logger.info(f"[delete_user] User deleted: {user.id}") return Message(message="User deleted successfully") diff --git a/backend/app/crud/user.py b/backend/app/crud/user.py index 2d1ab501..3aa30d8d 100644 --- a/backend/app/crud/user.py +++ b/backend/app/crud/user.py @@ -17,7 +17,7 @@ def create_user(*, session: Session, user_create: UserCreate) -> User: session.add(db_obj) session.commit() session.refresh(db_obj) - logger.info(f"[create_user] User created with email: {db_obj.email}") + logger.info(f"[create_user] User created with id: {db_obj.id}") return db_obj @@ -33,7 +33,7 @@ def update_user(*, session: Session, db_user: User, user_in: UserUpdate) -> Any: session.commit() session.refresh(db_user) logger.info( - f"[update_user] User updated with email: {db_user.email}, updated fields: {user_data.keys()}" + f"[update_user] User updated with id: {db_user.id}, updated fields: {user_data.keys()}" ) return db_user From eb38becafbe1fc3d1127475a9cafa69b6dab1a4c Mon Sep 17 00:00:00 2001 From: Aviraj <100823015+avirajsingh7@users.noreply.github.com> Date: Thu, 14 Aug 2025 12:26:47 +0530 Subject: [PATCH 4/9] precommit --- backend/app/api/routes/users.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/backend/app/api/routes/users.py b/backend/app/api/routes/users.py index e8da92b9..1e15bb1a 100644 --- a/backend/app/api/routes/users.py +++ b/backend/app/api/routes/users.py @@ -79,9 +79,7 @@ def update_user_me( if user_in.email: existing_user = get_user_by_email(session=session, email=user_in.email) if existing_user and existing_user.id != current_user.id: - logger.error( - f"[update_user_me] Attempt to update user with existing email" - ) + logger.error(f"[update_user_me] Attempt to update user with existing email") raise HTTPException( status_code=409, detail="User with this email already exists" ) @@ -142,9 +140,7 @@ def register_user(session: SessionDep, user_in: UserRegister) -> Any: This endpoint allows the registration of a new user and is accessible only by a superuser. """ if get_user_by_email(session=session, email=user_in.email): - logger.error( - f"[register_user] Attempt to create user with existing email" - ) + logger.error(f"[register_user] Attempt to create user with existing email") raise HTTPException( status_code=400, detail="The user with this email already exists in the system", From 2636478cf09067ff19f536ade8914567fb52dd31 Mon Sep 17 00:00:00 2001 From: Aviraj <100823015+avirajsingh7@users.noreply.github.com> Date: Tue, 26 Aug 2025 11:05:50 +0530 Subject: [PATCH 5/9] structure logs to [function_name] Message | param1: value1, param2: value2 --- backend/app/api/routes/credentials.py | 16 ++++++++-------- backend/app/api/routes/users.py | 24 ++++++++++++------------ backend/app/core/providers.py | 4 ++-- backend/app/crud/credentials.py | 2 +- backend/app/crud/user.py | 4 ++-- 5 files changed, 25 insertions(+), 25 deletions(-) diff --git a/backend/app/api/routes/credentials.py b/backend/app/api/routes/credentials.py index f04b09bf..4fe2327c 100644 --- a/backend/app/api/routes/credentials.py +++ b/backend/app/api/routes/credentials.py @@ -40,7 +40,7 @@ def create_new_credential(*, session: SessionDep, creds_in: CredsCreate): project = validate_project(session, creds_in.project_id) if project.organization_id != creds_in.organization_id: logger.error( - f"[create_new_credential] Project {creds_in.project_id} does not belong to organization {creds_in.organization_id}" + f"[create_new_credential] Project does not belong to organization | organization_id: {creds_in.organization_id}, project_id: {creds_in.project_id}" ) raise HTTPException( status_code=400, @@ -57,7 +57,7 @@ def create_new_credential(*, session: SessionDep, creds_in: CredsCreate): ) if existing_cred: logger.warning( - f"[create_new_credential] Credentials for provider '{provider}' already exist for organization {creds_in.organization_id} and project {creds_in.project_id}" + f"[create_new_credential] Credentials for provider already exist | organization_id: {creds_in.organization_id}, project_id: {creds_in.project_id}, provider: {provider}" ) raise HTTPException( status_code=400, @@ -71,7 +71,7 @@ def create_new_credential(*, session: SessionDep, creds_in: CredsCreate): new_creds = set_creds_for_org(session=session, creds_add=creds_in) if not new_creds: logger.error( - f"[create_new_credential] Failed to create credentials for organization {creds_in.organization_id}, project {creds_in.project_id}" + f"[create_new_credential] Failed to create credentials | organization_id: {creds_in.organization_id}, project_id: {creds_in.project_id}" ) raise Exception(status_code=500, detail="Failed to create credentials") @@ -89,7 +89,7 @@ def read_credential(*, session: SessionDep, org_id: int, project_id: int | None creds = get_creds_by_org(session=session, org_id=org_id, project_id=project_id) if not creds: logger.error( - f"[read_credential] No credentials found for organization {org_id}, project_id {project_id}" + f"[read_credential] No credentials found | organization_id: {org_id}, project_id: {project_id}" ) raise HTTPException(status_code=404, detail="Credentials not found") @@ -115,7 +115,7 @@ def read_provider_credential( ) if provider_creds is None: logger.error( - f"[read_provider_credential] No credentials found for organization {org_id}, provider {provider}" + f"[read_provider_credential] No credentials found | organization_id: {org_id}, provider: {provider}" ) raise HTTPException(status_code=404, detail="Provider credentials not found") @@ -132,7 +132,7 @@ def read_provider_credential( def update_credential(*, session: SessionDep, org_id: int, creds_in: CredsUpdate): validate_organization(session, org_id) if not creds_in or not creds_in.provider or not creds_in.credential: - logger.error(f"[update_credential] Invalid input for organization {org_id}") + logger.error(f"[update_credential] Invalid input | organization_id: {org_id}") raise HTTPException( status_code=400, detail="Provider and credential must be provided" ) @@ -164,7 +164,7 @@ def delete_provider_credential( ) if provider_creds is None: logger.error( - f"[delete_provider_credential] Provider credentials not found | org_id: {org_id}, provider: {provider}, project_id: {project_id}" + f"[delete_provider_credential] Provider credentials not found | organization_id: {org_id}, provider: {provider}, project_id: {project_id}" ) raise HTTPException(status_code=404, detail="Provider credentials not found") @@ -190,7 +190,7 @@ def delete_all_credentials( creds = remove_creds_for_org(session=session, org_id=org_id, project_id=project_id) if not creds: logger.error( - f"[delete_all_credentials] Credentials not found for organization {org_id} | project_id: {project_id}" + f"[delete_all_credentials] Credentials not found | organization_id: {org_id}, project_id: {project_id}" ) raise HTTPException( status_code=404, detail="Credentials for organization not found" diff --git a/backend/app/api/routes/users.py b/backend/app/api/routes/users.py index 1e15bb1a..3c494642 100644 --- a/backend/app/api/routes/users.py +++ b/backend/app/api/routes/users.py @@ -51,7 +51,7 @@ def read_users(session: SessionDep, skip: int = 0, limit: int = 100) -> Any: def create_user_endpoint(*, session: SessionDep, user_in: UserCreate) -> Any: if get_user_by_email(session=session, email=user_in.email): logger.error( - f"[create_user_endpoint] Attempt to create user with existing email" + f"[create_user_endpoint] Attempting to create user with existing email | email: {user_in.email}" ) raise HTTPException( status_code=400, @@ -79,7 +79,7 @@ def update_user_me( if user_in.email: existing_user = get_user_by_email(session=session, email=user_in.email) if existing_user and existing_user.id != current_user.id: - logger.error(f"[update_user_me] Attempt to update user with existing email") + logger.error(f"[update_user_me] Attempting to update user with existing email | email: {user_in.email}, user_id: {current_user.id}") raise HTTPException( status_code=409, detail="User with this email already exists" ) @@ -88,7 +88,7 @@ def update_user_me( session.add(current_user) session.commit() session.refresh(current_user) - logger.info(f"[update_user_me] User updated with id: {current_user.id}") + logger.info(f"[update_user_me] User updated | user_id: {current_user.id}") return current_user @@ -108,7 +108,7 @@ def update_password_me( current_user.hashed_password = get_password_hash(body.new_password) session.add(current_user) session.commit() - logger.info(f"[update_password_me] Password updated for user: {current_user.id}") + logger.info(f"[update_password_me] Password updated | user_id: {current_user.id}") return Message(message="Password updated successfully") @@ -120,13 +120,13 @@ def read_user_me(current_user: CurrentUser) -> Any: @router.delete("/me", response_model=Message) def delete_user_me(session: SessionDep, current_user: CurrentUser) -> Any: if current_user.is_superuser: - logger.error("[delete_user_me] Attempt to delete superuser account by itself") + logger.error(f"[delete_user_me] Attempt to delete superuser account by itself | user_id: {current_user.id}") raise HTTPException( status_code=403, detail="Super users are not allowed to delete themselves" ) session.delete(current_user) session.commit() - logger.info(f"[delete_user_me] User deleted: {current_user.id}") + logger.info(f"[delete_user_me] User deleted | user_id: {current_user.id}") return Message(message="User deleted successfully") @@ -140,7 +140,7 @@ def register_user(session: SessionDep, user_in: UserRegister) -> Any: This endpoint allows the registration of a new user and is accessible only by a superuser. """ if get_user_by_email(session=session, email=user_in.email): - logger.error(f"[register_user] Attempt to create user with existing email") + logger.error(f"[register_user] Attempt to create user with existing email | email: {user_in.email}") raise HTTPException( status_code=400, detail="The user with this email already exists in the system", @@ -181,7 +181,7 @@ def update_user_endpoint( ) -> Any: db_user = session.get(User, user_id) if not db_user: - logger.error(f"[update_user_endpoint] User with id {user_id} not found") + logger.error(f"[update_user_endpoint] User not found | user_id: {user_id}") raise HTTPException( status_code=404, detail="The user with this id does not exist in the system", @@ -191,7 +191,7 @@ def update_user_endpoint( existing_user = get_user_by_email(session=session, email=user_in.email) if existing_user and existing_user.id != user_id: logger.error( - f"[update_user_endpoint] Attempt to update user with existing email" + f"[update_user_endpoint] Attempt to update user with existing email | email: {user_in.email}, user_id: {user_id}" ) raise HTTPException( status_code=409, detail="User with this email already exists" @@ -210,16 +210,16 @@ def delete_user( ) -> Message: user = session.get(User, user_id) if not user: - logger.error(f"[delete_user] User with id {user_id} not found") + logger.error(f"[delete_user] User not found | user_id: {user_id}") raise HTTPException(status_code=404, detail="User not found") if user == current_user: - logger.error("[delete_user] Attempt to delete self by superuser") + logger.error(f"[delete_user] Attempt to delete self by superuser | user_id: {current_user.id}") raise HTTPException( status_code=403, detail="Super users are not allowed to delete themselves" ) session.delete(user) session.commit() - logger.info(f"[delete_user] User deleted: {user.id}") + logger.info(f"[delete_user] User deleted | user_id: {user.id}") return Message(message="User deleted successfully") diff --git a/backend/app/core/providers.py b/backend/app/core/providers.py index 5e1541ed..dfaae233 100644 --- a/backend/app/core/providers.py +++ b/backend/app/core/providers.py @@ -50,7 +50,7 @@ def validate_provider(provider: str) -> Provider: except ValueError: supported = ", ".join(p.value for p in Provider) logger.error( - f"[validate_provider] Unsupported provider: {provider}. Supported providers are: {supported}" + f"[validate_provider] Unsupported provider | provider: {provider}, supported_providers: {supported}" ) raise ValueError( f"Unsupported provider: {provider}. Supported providers are: {supported}" @@ -74,7 +74,7 @@ def validate_provider_credentials(provider: str, credentials: Dict[str, str]) -> field for field in required_fields if field not in credentials ]: logger.error( - f"[validate_provider_credentials] Missing required fields for {provider}: {', '.join(missing_fields)}" + f"[validate_provider_credentials] Missing required fields | provider: {provider}, missing_fields: {', '.join(missing_fields)}" ) raise ValueError( f"Missing required fields for {provider}: {', '.join(missing_fields)}" diff --git a/backend/app/crud/credentials.py b/backend/app/crud/credentials.py index 4ec1c700..6d654c70 100644 --- a/backend/app/crud/credentials.py +++ b/backend/app/crud/credentials.py @@ -160,7 +160,7 @@ def update_creds_for_org( creds = session.exec(statement).first() if creds is None: logger.error( - f"[update_creds_for_org] Credentials not found for organization {org_id}, provider {creds_in.provider}, project_id {creds_in.project_id}" + f"[update_creds_for_org] Credentials not found | organization {org_id}, provider {creds_in.provider}, project_id {creds_in.project_id}" ) raise HTTPException( status_code=404, detail="Credentials not found for this provider" diff --git a/backend/app/crud/user.py b/backend/app/crud/user.py index 3aa30d8d..cdf500e9 100644 --- a/backend/app/crud/user.py +++ b/backend/app/crud/user.py @@ -17,7 +17,7 @@ def create_user(*, session: Session, user_create: UserCreate) -> User: session.add(db_obj) session.commit() session.refresh(db_obj) - logger.info(f"[create_user] User created with id: {db_obj.id}") + logger.info(f"[create_user] User created | user_id: {db_obj.id}") return db_obj @@ -33,7 +33,7 @@ def update_user(*, session: Session, db_user: User, user_in: UserUpdate) -> Any: session.commit() session.refresh(db_user) logger.info( - f"[update_user] User updated with id: {db_user.id}, updated fields: {user_data.keys()}" + f"[update_user] User updated | user_id: {db_user.id}, updated_fields: {list(user_data.keys())}" ) return db_user From ee6a317d6e4b0d8adda1efdbb4867bde657e062c Mon Sep 17 00:00:00 2001 From: Aviraj <100823015+avirajsingh7@users.noreply.github.com> Date: Wed, 27 Aug 2025 13:56:07 +0530 Subject: [PATCH 6/9] pre commit --- backend/app/api/routes/users.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/backend/app/api/routes/users.py b/backend/app/api/routes/users.py index 3c494642..550f6cea 100644 --- a/backend/app/api/routes/users.py +++ b/backend/app/api/routes/users.py @@ -79,7 +79,9 @@ def update_user_me( if user_in.email: existing_user = get_user_by_email(session=session, email=user_in.email) if existing_user and existing_user.id != current_user.id: - logger.error(f"[update_user_me] Attempting to update user with existing email | email: {user_in.email}, user_id: {current_user.id}") + logger.error( + f"[update_user_me] Attempting to update user with existing email | email: {user_in.email}, user_id: {current_user.id}" + ) raise HTTPException( status_code=409, detail="User with this email already exists" ) @@ -120,7 +122,9 @@ def read_user_me(current_user: CurrentUser) -> Any: @router.delete("/me", response_model=Message) def delete_user_me(session: SessionDep, current_user: CurrentUser) -> Any: if current_user.is_superuser: - logger.error(f"[delete_user_me] Attempt to delete superuser account by itself | user_id: {current_user.id}") + logger.error( + f"[delete_user_me] Attempt to delete superuser account by itself | user_id: {current_user.id}" + ) raise HTTPException( status_code=403, detail="Super users are not allowed to delete themselves" ) @@ -140,7 +144,9 @@ def register_user(session: SessionDep, user_in: UserRegister) -> Any: This endpoint allows the registration of a new user and is accessible only by a superuser. """ if get_user_by_email(session=session, email=user_in.email): - logger.error(f"[register_user] Attempt to create user with existing email | email: {user_in.email}") + logger.error( + f"[register_user] Attempt to create user with existing email | email: {user_in.email}" + ) raise HTTPException( status_code=400, detail="The user with this email already exists in the system", @@ -214,7 +220,9 @@ def delete_user( raise HTTPException(status_code=404, detail="User not found") if user == current_user: - logger.error(f"[delete_user] Attempt to delete self by superuser | user_id: {current_user.id}") + logger.error( + f"[delete_user] Attempt to delete self by superuser | user_id: {current_user.id}" + ) raise HTTPException( status_code=403, detail="Super users are not allowed to delete themselves" ) From 92b1c4b0ceafd1c493208c15242d78b5e9e50805 Mon Sep 17 00:00:00 2001 From: Aviraj <100823015+avirajsingh7@users.noreply.github.com> Date: Fri, 29 Aug 2025 12:16:43 +0530 Subject: [PATCH 7/9] fix logs in crud --- backend/app/crud/credentials.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/backend/app/crud/credentials.py b/backend/app/crud/credentials.py index 0430a688..d515aae5 100644 --- a/backend/app/crud/credentials.py +++ b/backend/app/crud/credentials.py @@ -23,7 +23,7 @@ def set_creds_for_org( if not creds_add.credential: logger.error( - f"[set_creds_for_org] No credentials provided | project_id: {creds_add.project_id}" + f"[set_creds_for_org] No credentials provided | project_id: {project_id}" ) raise HTTPException(400, "No credentials provided") @@ -52,14 +52,14 @@ def set_creds_for_org( except IntegrityError as e: session.rollback() logger.error( - f"[set_creds_for_org] Integrity error while adding credentials | organization_id {creds_add.organization_id}, project_id {creds_add.project_id}, provider {provider}: {str(e)}", + f"[set_creds_for_org] Integrity error while adding credentials | organization_id {organization_id}, project_id {project_id}, provider {provider}: {str(e)}", exc_info=True, ) raise ValueError( f"Error while adding credentials for provider {provider}: {str(e)}" ) logger.info( - f"[set_creds_for_org] Successfully created credentials | organization_id {creds_add.organization_id}, project_id {creds_add.project_id}" + f"[set_creds_for_org] Successfully created credentials | organization_id {organization_id}, project_id {project_id}" ) return created_credentials @@ -164,7 +164,7 @@ def update_creds_for_org( creds = session.exec(statement).first() if creds is None: logger.error( - f"[update_creds_for_org] Credentials not found | organization {org_id}, provider {creds_in.provider}, project_id {creds_in.project_id}" + f"[update_creds_for_org] Credentials not found | organization {org_id}, provider {creds_in.provider}, project_id {project_id}" ) raise HTTPException( status_code=404, detail="Credentials not found for this provider" @@ -176,7 +176,7 @@ def update_creds_for_org( session.commit() session.refresh(creds) logger.info( - f"[update_creds_for_org] Successfully updated credentials | organization_id {org_id}, provider {creds_in.provider}, project_id {creds_in.project_id}" + f"[update_creds_for_org] Successfully updated credentials | organization_id {org_id}, provider {creds_in.provider}, project_id {project_id}" ) return [creds] From 00be7232317975723b2501a5796d84fe7fea1f60 Mon Sep 17 00:00:00 2001 From: Aviraj <100823015+avirajsingh7@users.noreply.github.com> Date: Fri, 29 Aug 2025 12:17:57 +0530 Subject: [PATCH 8/9] pre commit --- backend/app/api/routes/credentials.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/backend/app/api/routes/credentials.py b/backend/app/api/routes/credentials.py index 1aab76ac..b6bb8977 100644 --- a/backend/app/api/routes/credentials.py +++ b/backend/app/api/routes/credentials.py @@ -133,7 +133,9 @@ def update_credential( _current_user: UserProjectOrg = Depends(get_current_user_org_project), ): if not creds_in or not creds_in.provider or not creds_in.credential: - logger.error(f"[update_credential] Invalid input | organization_id: {_current_user.organization_id}, project_id: {_current_user.project_id}") + logger.error( + f"[update_credential] Invalid input | organization_id: {_current_user.organization_id}, project_id: {_current_user.project_id}" + ) raise HTTPException( status_code=400, detail="Provider and credential must be provided" ) From 03fe0ccdbd1cfb8f8fa3232d5974a2cb61885fbe Mon Sep 17 00:00:00 2001 From: Aviraj <100823015+avirajsingh7@users.noreply.github.com> Date: Wed, 3 Sep 2025 11:07:39 +0530 Subject: [PATCH 9/9] change attempt to attempting --- backend/app/api/routes/users.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/backend/app/api/routes/users.py b/backend/app/api/routes/users.py index 550f6cea..5dd83fa3 100644 --- a/backend/app/api/routes/users.py +++ b/backend/app/api/routes/users.py @@ -123,7 +123,7 @@ def read_user_me(current_user: CurrentUser) -> Any: def delete_user_me(session: SessionDep, current_user: CurrentUser) -> Any: if current_user.is_superuser: logger.error( - f"[delete_user_me] Attempt to delete superuser account by itself | user_id: {current_user.id}" + f"[delete_user_me] Attempting to delete superuser account by itself | user_id: {current_user.id}" ) raise HTTPException( status_code=403, detail="Super users are not allowed to delete themselves" @@ -145,7 +145,7 @@ def register_user(session: SessionDep, user_in: UserRegister) -> Any: """ if get_user_by_email(session=session, email=user_in.email): logger.error( - f"[register_user] Attempt to create user with existing email | email: {user_in.email}" + f"[register_user] Attempting to create user with existing email | email: {user_in.email}" ) raise HTTPException( status_code=400, @@ -197,7 +197,7 @@ def update_user_endpoint( existing_user = get_user_by_email(session=session, email=user_in.email) if existing_user and existing_user.id != user_id: logger.error( - f"[update_user_endpoint] Attempt to update user with existing email | email: {user_in.email}, user_id: {user_id}" + f"[update_user_endpoint] Attempting to update user with existing email | email: {user_in.email}, user_id: {user_id}" ) raise HTTPException( status_code=409, detail="User with this email already exists" @@ -221,7 +221,7 @@ def delete_user( if user == current_user: logger.error( - f"[delete_user] Attempt to delete self by superuser | user_id: {current_user.id}" + f"[delete_user] Attempting to delete self by superuser | user_id: {current_user.id}" ) raise HTTPException( status_code=403, detail="Super users are not allowed to delete themselves"