start project
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
"""Optional, time-boxed raw storage (Chapter 06) — retention (~30 days)
|
||||
enforced by `flask cleanup` (Chapter 12)."""
|
||||
from __future__ import annotations
|
||||
|
||||
from app.extensions import db
|
||||
|
||||
|
||||
class LogEntry(db.Model):
|
||||
__tablename__ = "log_entries"
|
||||
|
||||
id: int = db.Column(db.Integer, primary_key=True)
|
||||
log_file_id: int = db.Column(db.Integer, db.ForeignKey("log_files.id", ondelete="CASCADE"), nullable=False)
|
||||
timestamp = db.Column(db.DateTime, nullable=False) # normalized to UTC (Ch07)
|
||||
ip: str = db.Column(db.String(45), nullable=False) # IPv4 or IPv6
|
||||
method: str = db.Column(db.String(10), nullable=False)
|
||||
path: str = db.Column(db.Text, nullable=False)
|
||||
status_code: int = db.Column(db.SmallInteger, nullable=False)
|
||||
bytes_sent: int = db.Column(db.Integer, nullable=False, default=0)
|
||||
referrer: str | None = db.Column(db.Text, nullable=True)
|
||||
user_agent: str | None = db.Column(db.Text, nullable=True)
|
||||
is_bot: bool = db.Column(db.Boolean, nullable=False, default=False)
|
||||
flagged: bool = db.Column(db.Boolean, nullable=False, default=False)
|
||||
|
||||
__table_args__ = (
|
||||
db.Index("ix_log_entries_file_ts", "log_file_id", "timestamp"),
|
||||
db.Index("ix_log_entries_ip", "ip"),
|
||||
db.Index("ix_log_entries_path", "path"),
|
||||
db.Index("ix_log_entries_timestamp", "timestamp"),
|
||||
)
|
||||
Reference in New Issue
Block a user