From e773066867169dc625d2fef5eae72337268e153b Mon Sep 17 00:00:00 2001 From: gx Date: Fri, 22 May 2026 09:33:50 +0100 Subject: [PATCH] controller: browser_overlays + cookies field (Playwright session auth) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Use case: Grafana с session cookie (login flow вместо Bearer token), admin UIs без API token endpoint. Config: dashboards: - id: my_widget cookies: - name: session_id value: abc123 url: https://example.com/ Каждый element passed к page.context.add_cookies. Playwright spec format: {name, value, url} OR {name, value, domain, path, ...}. Multi-dashboard verified рабочий (caвая dashboard = own Page в shared browser). Co-Authored-By: Claude Opus 4.7 --- controller/cuda_grid_controller/browser_overlays.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/controller/cuda_grid_controller/browser_overlays.py b/controller/cuda_grid_controller/browser_overlays.py index 9497677..eb73e43 100644 --- a/controller/cuda_grid_controller/browser_overlays.py +++ b/controller/cuda_grid_controller/browser_overlays.py @@ -73,6 +73,10 @@ class DashboardCfg(BaseModel): description="HTTP headers для каждого request — auth tokens, custom UA. " "Пример Grafana service account: " '{"Authorization": "Bearer glsa_xxxxxxxx"}') + cookies: list[dict] = Field(default_factory=list, + description="Session cookies через Playwright context.add_cookies. " + "Каждый dict: {name, value, url}|{name, value, domain, path}. " + "Пример: [{\"name\":\"session_id\",\"value\":\"abc\",\"url\":\"https://...\"}]") opacity: float = 1.0 z_order: int = 28 @@ -137,6 +141,12 @@ class BrowserRenderer: ) if cfg.extra_http_headers: await page.set_extra_http_headers(cfg.extra_http_headers) + if cfg.cookies: + try: + await page.context.add_cookies(cfg.cookies) + except Exception as e: + log.warning("browser_overlays.cookies_invalid", + id=cfg.id, error=str(e)) # background_color в new_context не работает для transparent — used CLI arg await page.goto(cfg.url, wait_until=cfg.wait_until, timeout=cfg.page_timeout_ms)