optimize browser session history query (#4193)

This commit is contained in:
LawyZheng
2025-12-04 15:07:55 +08:00
committed by GitHub
parent 9888bd27d4
commit 606580828f
3 changed files with 44 additions and 5 deletions

View File

@@ -0,0 +1,36 @@
"""add more browser session history index
Revision ID: 44e95cb21d98
Revises: 24bd4ab81e07
Create Date: 2025-12-04 07:03:22.218433+00:00
"""
from typing import Sequence, Union
import sqlalchemy as sa
from alembic import op
# revision identifiers, used by Alembic.
revision: str = "44e95cb21d98"
down_revision: Union[str, None] = "24bd4ab81e07"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.create_index(
"idx_persistent_browser_sessions_org_status_created",
"persistent_browser_sessions",
["organization_id", "status", sa.literal_column("created_at DESC")],
unique=False,
)
# ### end Alembic commands ###
def downgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.drop_index("idx_persistent_browser_sessions_org_status_created", table_name="persistent_browser_sessions")
# ### end Alembic commands ###

View File

@@ -4159,10 +4159,7 @@ class AgentDB:
async with self.Session() as session:
open_first = case(
(
and_(
PersistentBrowserSessionModel.started_at.is_not(None),
PersistentBrowserSessionModel.completed_at.is_(None),
),
PersistentBrowserSessionModel.status == "running",
0, # open
),
else_=1, # not open
@@ -4173,7 +4170,7 @@ class AgentDB:
.filter_by(organization_id=organization_id)
.filter_by(deleted_at=None)
.filter(
PersistentBrowserSessionModel.created_at > datetime.utcnow() - timedelta(hours=lookback_hours)
PersistentBrowserSessionModel.created_at > (datetime.utcnow() - timedelta(hours=lookback_hours))
)
.order_by(
open_first.asc(), # open sessions first

View File

@@ -801,6 +801,12 @@ class PersistentBrowserSessionModel(Base):
"started_at",
"completed_at",
),
Index(
"idx_persistent_browser_sessions_org_status_created",
"organization_id",
"status",
desc("created_at"),
),
)
persistent_browser_session_id = Column(String, primary_key=True, default=generate_persistent_browser_session_id)