File size: 1,422 Bytes
5005501
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
from sqlalchemy import Column, String, Float, Integer, DateTime, Text, JSON
from sqlalchemy.dialects.postgresql import UUID
from datetime import datetime, timezone
import uuid

from src.config.db import Base

class ProfilingLog(Base):
    __tablename__ = "profiling_logs"

    id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
    created_at = Column(DateTime(timezone=True), default=lambda: datetime.now(timezone.utc), nullable=False)
    
    endpoint = Column(String(255), nullable=False) 
    method = Column(String(10), nullable=False)     
    model_name = Column(String(100), nullable=True) 
    
    total_time_ms = Column(Float, nullable=False)
    num_predictions = Column(Integer, nullable=False, default=0)
    
    time_preprocessing_ms = Column(Float, nullable=True)
    time_inference_ms = Column(Float, nullable=True)
    time_database_ms = Column(Float, nullable=True)
    time_serialization_ms = Column(Float, nullable=True)
    
    top_functions = Column(JSON, nullable=True)
    
    ncalls_total = Column(Integer, nullable=True)
    ncalls_pandas = Column(Integer, nullable=True)
    ncalls_database = Column(Integer, nullable=True)
    
    cpu_percent = Column(Float, nullable=True)
    memory_mb = Column(Float, nullable=True)
    
    full_profile = Column(Text, nullable=True)

    def __repr__(self):
        return f"<ProfilingLog {self.endpoint} - {self.total_time_ms}ms>"