File size: 3,331 Bytes
71b4454
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
from sqlalchemy import Column, Integer, String, DateTime, Text, JSON, Float, Boolean, ForeignKey
from sqlalchemy.orm import declarative_base
from sqlalchemy.orm import relationship
from datetime import datetime

Base = declarative_base()

class Metric(Base):
    __tablename__ = "metrics"
    id = Column(Integer, primary_key=True)
    metric_id = Column(String(64), unique=True, nullable=False)
    name = Column(String(128), nullable=False)           # e.g., "api_request_count", "build_duration"
    value = Column(Float, nullable=False)
    labels = Column(JSON, default={})                    # e.g., {"service": "api", "endpoint": "/v1/builds"}
    timestamp = Column(DateTime, default=datetime.utcnow)
    source = Column(String(64), nullable=True)           # e.g., "build_farm", "api_gateway"

class Trace(Base):
    __tablename__ = "traces"
    id = Column(Integer, primary_key=True)
    trace_id = Column(String(64), unique=True, nullable=False)
    span_id = Column(String(64), nullable=False)
    parent_span_id = Column(String(64), nullable=True)
    operation = Column(String(128), nullable=False)      # e.g., "generate", "build", "deploy"
    start_time = Column(DateTime, nullable=False)
    end_time = Column(DateTime, nullable=True)
    duration_ms = Column(Float, nullable=True)
    tags = Column(JSON, default={})                       # e.g., {"provider": "openai", "model": "gpt-4"}
    error = Column(Text, nullable=True)

class AuditLog(Base):
    __tablename__ = "audit_logs"
    id = Column(Integer, primary_key=True)
    audit_id = Column(String(64), unique=True, nullable=False)
    user_id = Column(String(64), nullable=True)          # who performed the action
    action = Column(String(64), nullable=False)          # e.g., "create_workflow", "deploy_app"
    resource = Column(String(128), nullable=True)        # e.g., "workflow_id", "deployment_id"
    details = Column(JSON, default={})
    ip = Column(String(45), nullable=True)
    timestamp = Column(DateTime, default=datetime.utcnow)

class AILog(Base):
    __tablename__ = "ai_logs"
    id = Column(Integer, primary_key=True)
    log_id = Column(String(64), unique=True, nullable=False)
    session_id = Column(String(64), nullable=True)       # for grouping AI interactions
    provider = Column(String(64), nullable=False)        # e.g., "openai", "anthropic"
    model = Column(String(64), nullable=False)
    prompt = Column(Text, nullable=False)
    response = Column(Text, nullable=True)
    tokens_used = Column(Integer, default=0)
    cost = Column(Float, default=0.0)
    duration_ms = Column(Float, default=0.0)
    success = Column(Boolean, default=True)
    error = Column(Text, nullable=True)
    timestamp = Column(DateTime, default=datetime.utcnow)

class Alert(Base):
    __tablename__ = "alerts"
    id = Column(Integer, primary_key=True)
    alert_id = Column(String(64), unique=True, nullable=False)
    name = Column(String(128), nullable=False)
    condition = Column(String(256), nullable=False)     # e.g., "value > 100"
    severity = Column(String(16), default="warning")    # info, warning, critical
    triggered = Column(Boolean, default=False)
    last_triggered_at = Column(DateTime, nullable=True)
    resolved_at = Column(DateTime, nullable=True)
    created_at = Column(DateTime, default=datetime.utcnow)