feat(bridges): next generation bridge management
This commit is contained in:
parent
20fad30a06
commit
05285a4ae6
12 changed files with 329 additions and 89 deletions
|
@ -23,6 +23,19 @@ PROXY_PROVIDERS = {p.provider: p for p in [ # type: ignore[attr-defined]
|
|||
|
||||
|
||||
def create_proxy(pool: Pool, origin: Origin) -> bool:
|
||||
"""
|
||||
Creates a web proxy resource for the given origin and pool combination.
|
||||
|
||||
Initially it will attempt to create smart proxies on providers that support smart proxies,
|
||||
and "simple" proxies on other providers. If other providers have exhausted their quota
|
||||
already then a "simple" proxy may be created on a platform that supports smart proxies.
|
||||
|
||||
A boolean is returned to indicate whether a proxy resource was created.
|
||||
|
||||
:param pool: pool to create the resource for
|
||||
:param origin: origin to create the resource for
|
||||
:return: whether a proxy resource was created
|
||||
"""
|
||||
for desperate in [False, True]:
|
||||
for provider in PROXY_PROVIDERS.values():
|
||||
if origin.smart and not provider.smart_proxies: # type: ignore[attr-defined]
|
||||
|
@ -31,12 +44,12 @@ def create_proxy(pool: Pool, origin: Origin) -> bool:
|
|||
continue
|
||||
next_subgroup = provider.next_subgroup(origin.group_id) # type: ignore[attr-defined]
|
||||
if next_subgroup is None:
|
||||
continue
|
||||
continue # Exceeded maximum number of subgroups and last subgroup is full
|
||||
proxy = Proxy()
|
||||
proxy.pool_id = pool.id
|
||||
proxy.origin_id = origin.id
|
||||
proxy.provider = provider.provider # type: ignore[attr-defined]
|
||||
proxy.psg = provider.next_subgroup(origin.group_id) # type: ignore[attr-defined]
|
||||
proxy.psg = next_subgroup
|
||||
# The random usage below is good enough for its purpose: to create a slug that
|
||||
# hasn't been used recently.
|
||||
proxy.slug = tldextract.extract(origin.domain_name).domain[:5] + ''.join(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue