Age limit featured for proxies added.

This commit is contained in:
Christian Laffin
2021-05-08 00:32:02 +01:00
parent 4232890a38
commit 7c1bc9c9ef
4 changed files with 34 additions and 9 deletions

View File

@@ -47,6 +47,17 @@ All you need is:
### Installation
#### Environment variables:
##### Required
`` USERNAME`` - set the username for the forward proxy.
`` PASSWORD`` - set the password for the forward proxy.
##### Optional
`` AGE_LIMIT`` - set the age limit for your forward proxies in seconds. Once the age limit is reached, the proxy is replaced. A value of 0 disables the feature. Default value: 0.
See individual provider pages for environment variables required in above providers supported section.
#### Docker (recommended)

View File

@@ -42,15 +42,21 @@ def aws_check_alive():
ip_ready = []
for instance in list_instances():
try:
if check_alive(instance["Instances"][0]["PublicIpAddress"]):
elapsed = datetime.datetime.now(
datetime.timezone.utc
) - dateparser.parse(instance["Instances"][0]["LaunchTime"])
if config["age_limit"] > 0:
if elapsed > datetime.timedelta(seconds=config["age_limit"]):
delete_proxy(instance["Instances"][0]["InstanceId"])
logger.info(
"Recycling droplet, reached age limit -> " + instance["Instances"][0]["PublicIpAddress"]
)
elif check_alive(instance["Instances"][0]["PublicIpAddress"]):
logger.info(
"Alive: AWS -> " + instance["Instances"][0]["PublicIpAddress"]
)
ip_ready.append(instance["Instances"][0]["PublicIpAddress"])
else:
elapsed = datetime.datetime.now(
datetime.timezone.utc
) - dateparser.parse(instance["Instances"][0]["LaunchTime"])
if elapsed > datetime.timedelta(minutes=10):
delete_proxy(instance["Instances"][0]["InstanceId"])
logger.info(

View File

@@ -11,7 +11,7 @@ from cloudproxy.providers.digitalocean.functions import (
delete_proxy,
)
from cloudproxy.providers import settings
from cloudproxy.providers.settings import delete_queue
from cloudproxy.providers.settings import delete_queue, config
def do_deployment(min_scaling):
@@ -38,13 +38,19 @@ def do_check_alive():
ip_ready = []
for droplet in list_droplets():
try:
if check_alive(droplet.ip_address):
elapsed = datetime.datetime.now(
datetime.timezone.utc
) - dateparser.parse(droplet.created_at)
if config["age_limit"] > 0:
if elapsed > datetime.timedelta(seconds=config["age_limit"]):
delete_proxy(droplet)
logger.info(
"Recycling droplet, reached age limit -> " + str(droplet.ip_address)
)
elif check_alive(droplet.ip_address):
logger.info("Alive: DO -> " + str(droplet.ip_address))
ip_ready.append(droplet.ip_address)
else:
elapsed = datetime.datetime.now(
datetime.timezone.utc
) - dateparser.parse(droplet.created_at)
if elapsed > datetime.timedelta(minutes=10):
delete_proxy(droplet)
logger.info(

View File

@@ -3,6 +3,7 @@ from dotenv import load_dotenv
config = {
"auth": {"username": "", "password": ""},
"age_limit": 0,
"providers": {
"digitalocean": {
"enabled": False,
@@ -30,6 +31,7 @@ load_dotenv()
# Set proxy authentication
config["auth"]["username"] = os.environ.get("USERNAME", "changeme")
config["auth"]["password"] = os.environ.get("PASSWORD", "changeme")
config["age_limit"] = int(os.environ.get('AGE_LIMIT', 0))
# Set DigitalOceana config
config["providers"]["digitalocean"]["enabled"] = os.environ.get(