diff --git a/apps/notification/backend/models/models.py b/apps/notification/backend/models/models.py index 542aa64..f1a02d1 100644 --- a/apps/notification/backend/models/models.py +++ b/apps/notification/backend/models/models.py @@ -55,7 +55,7 @@ class EmailSendStatusDoc(Document): indexes = [ "email_id", "tenant_id" - ] + ] class EmailTrackingDoc(Document): email_id: str @@ -83,7 +83,7 @@ class EmailTrackingDoc(Document): indexes = [ "email_id", "tenant_id" - ] + ] class EmailBounceDoc(Document): email: str @@ -104,5 +104,25 @@ class EmailBounceDoc(Document): indexes = [ "email", "tenant_id" - ] - \ No newline at end of file + ] + +class UsageLogDoc(Document): + timestamp: datetime = datetime.utcnow() # timestamp + tenant_id: str # tenant id + operation: str # operation type + request_id: str # request id # TODO: use true one + units: int # units + status: str # operation status + latency_ms: int # latency time(milliseconds) + bytes_in: int # input bytes + bytes_out: int # output bytes + key_id: Optional[str] = None # API Key ID + extra: dict = {} # extra information + + class Settings: + name = "usage_log_doc" + indexes = [ + "tenant_id", + "request_id", + "key_id" + ] \ No newline at end of file diff --git a/apps/notification/webapi/providers/database.py b/apps/notification/webapi/providers/database.py index 00e0d66..8a6e350 100644 --- a/apps/notification/webapi/providers/database.py +++ b/apps/notification/webapi/providers/database.py @@ -1,15 +1,12 @@ from webapi.config.site_settings import site_settings from beanie import init_beanie from motor.motor_asyncio import AsyncIOMotorClient -from backend.models.models import MessageTemplateDoc, EmailSenderDoc, EmailSendStatusDoc, EmailTrackingDoc, EmailBounceDoc +from backend.models.models import MessageTemplateDoc, EmailSenderDoc, EmailSendStatusDoc, EmailTrackingDoc, EmailBounceDoc, UsageLogDoc import os # MongoDB config -# TODO: for non-local environment, use the following config -#MONGODB_URI = os.getenv('MONGODB_URI', 'mongodb+srv://jetli:8IHKx6dZK8BfugGp@freeleaps2.hanbj.mongodb.net/') -#MONGODB_NAME = os.getenv('MONGODB_NAME', 'freeleaps2') -MONGODB_URI = os.getenv('MONGODB_URI', 'mongodb://localhost:27017/') -MONGODB_NAME = os.getenv('MONGODB_NAME', 'interview') +MONGODB_URI = os.getenv('MONGODB_URI') +MONGODB_NAME = os.getenv('MONGODB_NAME') # create MongoDB client client = AsyncIOMotorClient( @@ -26,7 +23,8 @@ document_models = [ EmailSenderDoc, EmailSendStatusDoc, EmailTrackingDoc, - EmailBounceDoc + EmailBounceDoc, + UsageLogDoc ] def register(app): @@ -40,13 +38,7 @@ def register(app): async def initiate_database(): """initiate Beanie database connection""" - try: - await init_beanie( - database=client[MONGODB_NAME], - document_models=document_models - ) - print(f"✅ database initialized successfully: {MONGODB_NAME}") - print(f" URI: {MONGODB_URI}") - except Exception as e: - print(f"❌ database initialization failed: {e}") - raise + await init_beanie( + database=client[MONGODB_NAME], + document_models=document_models + ) \ No newline at end of file