diff --git a/controller/cuda_grid_controller/browser_overlays.py b/controller/cuda_grid_controller/browser_overlays.py index ca4ff3f..b6008a2 100644 --- a/controller/cuda_grid_controller/browser_overlays.py +++ b/controller/cuda_grid_controller/browser_overlays.py @@ -69,6 +69,10 @@ class DashboardCfg(BaseModel): ) page_timeout_ms: int = Field(default=10000, ge=1000, le=60000, description="Max time to wait for page load") + extra_http_headers: dict[str, str] = Field(default_factory=dict, + description="HTTP headers для каждого request — auth tokens, custom UA. " + "Пример Grafana service account: " + '{"Authorization": "Bearer glsa_xxxxxxxx"}') opacity: float = 1.0 z_order: int = 28 @@ -109,12 +113,15 @@ class BrowserRenderer: self.icon_dir.mkdir(parents=True, exist_ok=True) self._playwright = await async_playwright().start() - # Transparent background через `--default-background-color=00000000` - # (требует hex с alpha=00 для full transparency). + # Full chromium (не headless-shell) — нужен для `--default-background-color` + # transparency support. headless-shell incompatible с remote debugging при + # этом флаге. channel="chromium" → use full browser binary (~170MB, + # установлен через `playwright install chromium`). self._browser = await self._playwright.chromium.launch( + channel="chromium", headless=True, args=[ - "--default-background-color=00000000", + "--default-background-color=00000000", # hex alpha=00 = full transparent "--no-sandbox", # требуется в docker root context "--disable-dev-shm-usage", # /dev/shm в Docker обычно мал "--disable-gpu", # headless без GPU OK для PIL @@ -128,6 +135,8 @@ class BrowserRenderer: page = await self._browser.new_page( viewport={"width": vw, "height": vh}, ) + if cfg.extra_http_headers: + await page.set_extra_http_headers(cfg.extra_http_headers) # background_color в new_context не работает для transparent — used CLI arg await page.goto(cfg.url, wait_until=cfg.wait_until, timeout=cfg.page_timeout_ms)