diff --git a/alembic/versions/2025_12_04_0703-44e95cb21d98_add_more_browser_session_history_index.py b/alembic/versions/2025_12_04_0703-44e95cb21d98_add_more_browser_session_history_index.py new file mode 100644 index 00000000..53b73a05 --- /dev/null +++ b/alembic/versions/2025_12_04_0703-44e95cb21d98_add_more_browser_session_history_index.py @@ -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 ### diff --git a/skyvern/forge/sdk/db/client.py b/skyvern/forge/sdk/db/client.py index 0578c86a..59218f1b 100644 --- a/skyvern/forge/sdk/db/client.py +++ b/skyvern/forge/sdk/db/client.py @@ -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 diff --git a/skyvern/forge/sdk/db/models.py b/skyvern/forge/sdk/db/models.py index af1fe03a..9aa253c4 100644 --- a/skyvern/forge/sdk/db/models.py +++ b/skyvern/forge/sdk/db/models.py @@ -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)