terminate self and reclaim when claim failed (#3753)
This commit is contained in:
@@ -1,10 +1,25 @@
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
from enum import StrEnum
|
||||||
|
|
||||||
from pydantic import BaseModel, ConfigDict
|
from pydantic import BaseModel, ConfigDict
|
||||||
|
|
||||||
from skyvern.schemas.runs import ProxyLocation
|
from skyvern.schemas.runs import ProxyLocation
|
||||||
|
|
||||||
FINAL_STATUSES = ("completed", "failed")
|
|
||||||
|
class PersistentBrowserSessionStatus(StrEnum):
|
||||||
|
created = "created"
|
||||||
|
running = "running"
|
||||||
|
failed = "failed"
|
||||||
|
completed = "completed"
|
||||||
|
timeout = "timeout"
|
||||||
|
retry = "retry"
|
||||||
|
|
||||||
|
|
||||||
|
FINAL_STATUSES = (
|
||||||
|
PersistentBrowserSessionStatus.completed,
|
||||||
|
PersistentBrowserSessionStatus.failed,
|
||||||
|
PersistentBrowserSessionStatus.timeout,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def is_final_status(status: str | None) -> bool:
|
def is_final_status(status: str | None) -> bool:
|
||||||
|
|||||||
@@ -11,7 +11,11 @@ from skyvern.config import settings
|
|||||||
from skyvern.exceptions import BrowserSessionNotRenewable, MissingBrowserAddressError
|
from skyvern.exceptions import BrowserSessionNotRenewable, MissingBrowserAddressError
|
||||||
from skyvern.forge.sdk.db.client import AgentDB
|
from skyvern.forge.sdk.db.client import AgentDB
|
||||||
from skyvern.forge.sdk.db.polls import wait_on_persistent_browser_address
|
from skyvern.forge.sdk.db.polls import wait_on_persistent_browser_address
|
||||||
from skyvern.forge.sdk.schemas.persistent_browser_sessions import PersistentBrowserSession, is_final_status
|
from skyvern.forge.sdk.schemas.persistent_browser_sessions import (
|
||||||
|
PersistentBrowserSession,
|
||||||
|
PersistentBrowserSessionStatus,
|
||||||
|
is_final_status,
|
||||||
|
)
|
||||||
from skyvern.schemas.runs import ProxyLocation
|
from skyvern.schemas.runs import ProxyLocation
|
||||||
from skyvern.webeye.browser_factory import BrowserState
|
from skyvern.webeye.browser_factory import BrowserState
|
||||||
|
|
||||||
@@ -61,13 +65,19 @@ async def validate_session_for_renewal(
|
|||||||
)
|
)
|
||||||
raise BrowserSessionNotRenewable("Browser session has not started yet", session_id)
|
raise BrowserSessionNotRenewable("Browser session has not started yet", session_id)
|
||||||
|
|
||||||
if browser_session.status != "created":
|
if browser_session.status not in [
|
||||||
|
PersistentBrowserSessionStatus.created,
|
||||||
|
PersistentBrowserSessionStatus.retry,
|
||||||
|
PersistentBrowserSessionStatus.running,
|
||||||
|
]:
|
||||||
LOG.warning(
|
LOG.warning(
|
||||||
"Attempted to renew browser session that is not in the 'created' state",
|
"Attempted to renew browser session that is not in the 'created', 'retry' or 'running' state",
|
||||||
browser_session_id=session_id,
|
browser_session_id=session_id,
|
||||||
organization_id=organization_id,
|
organization_id=organization_id,
|
||||||
)
|
)
|
||||||
raise BrowserSessionNotRenewable("Browser session is not in the 'created' state", session_id)
|
raise BrowserSessionNotRenewable(
|
||||||
|
"Browser session is not in the 'created', 'retry' or 'running' state", session_id
|
||||||
|
)
|
||||||
|
|
||||||
started_at_utc = (
|
started_at_utc = (
|
||||||
browser_session.started_at.replace(tzinfo=timezone.utc)
|
browser_session.started_at.replace(tzinfo=timezone.utc)
|
||||||
@@ -141,6 +151,12 @@ async def update_status(
|
|||||||
)
|
)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
LOG.info(
|
||||||
|
"Updating browser session status",
|
||||||
|
browser_session_id=session_id,
|
||||||
|
organization_id=organization_id,
|
||||||
|
browser_status=status,
|
||||||
|
)
|
||||||
persistent_browser_session = await db.update_persistent_browser_session(
|
persistent_browser_session = await db.update_persistent_browser_session(
|
||||||
session_id,
|
session_id,
|
||||||
status=status,
|
status=status,
|
||||||
|
|||||||
Reference in New Issue
Block a user