feature: воркер удаляет профили, не использованные PROFILE_TTL_DAYS дней (#20)
Отметка последнего использования — mtime файла в профиле, ставится при открытии и закрытии окна. Очистка при старте воркера и раз в час; профили с открытым окном (на этом воркере или по ключу сессии в Redis) не трогаются. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
1075267d27
commit
4c8394eb4c
6 files changed
+97
-8
No files matched your search
@@ -178,3 +178,34 @@ def test_dead_worker_window_goes_to_common_queue(env):
|
||||
env.auto = False
|
||||
create(env, url="https://example.com")
|
||||
assert env.messages[-1].queue_name == COMMON_QUEUE
|
||||
|
||||
|
||||
def test_old_profiles_cleaned_up(env, tmp_path):
|
||||
"""#20: профили старше PROFILE_TTL_DAYS удаляются, кроме тех, где открыто окно."""
|
||||
import os
|
||||
import time
|
||||
|
||||
from worker.windows import LAST_USED_FILE
|
||||
|
||||
create(env, url="https://example.com", browser_idle_timeout=5)
|
||||
held = env.client.cookies["session_id"]
|
||||
elsewhere, old, fresh = (str(uuid.uuid4()) for _ in range(3))
|
||||
env.redis.hset(session_key(elsewhere), mapping={"worker_id": "w2", "idle_timeout": 5})
|
||||
|
||||
long_ago = time.time() - 8 * 86400
|
||||
for sid in (held, elsewhere, old, fresh, "not-a-session"):
|
||||
(tmp_path / sid).mkdir(exist_ok=True)
|
||||
marker = tmp_path / sid / LAST_USED_FILE
|
||||
marker.touch()
|
||||
if sid != fresh:
|
||||
os.utime(marker, (long_ago, long_ago))
|
||||
|
||||
assert env.call(env.pool.cleanup_profiles) == [old]
|
||||
assert sorted(p.name for p in tmp_path.iterdir()) == sorted([held, elsewhere, fresh, "not-a-session"])
|
||||
|
||||
|
||||
def test_profile_marked_as_used(env, tmp_path):
|
||||
from worker.windows import LAST_USED_FILE
|
||||
|
||||
create(env, url="https://example.com")
|
||||
assert (tmp_path / env.client.cookies["session_id"] / LAST_USED_FILE).exists()
|
||||
Reference in new issue
Block a user