majuna/app/terraform/proxy/__init__.py

70 lines
2.4 KiB
Python
Raw Normal View History

2022-03-10 14:26:22 +00:00
import datetime
2022-04-25 15:05:28 +01:00
from collections import defaultdict
2022-03-10 14:26:22 +00:00
from app import app
from app.extensions import db
2022-04-22 14:01:16 +01:00
from app.models.base import Group
from app.models.mirrors import Origin, Proxy
2022-03-10 14:26:22 +00:00
from app.terraform import BaseAutomation
class ProxyAutomation(BaseAutomation):
2022-04-25 15:05:28 +01:00
def get_subgroups(self):
conn = db.engine.connect()
result = conn.execute("""
SELECT origin.group_id, proxy.psg, COUNT(proxy.id) FROM proxy, origin
WHERE proxy.origin_id = origin.id
AND proxy.destroyed IS NULL
AND proxy.provider = :provider
GROUP BY origin.group_id, proxy.psg;
""", provider=self.provider)
subgroups = defaultdict(lambda: defaultdict(lambda: 0))
for row in result:
subgroups[row[0]][row[1]] = row[2]
return subgroups
2022-03-10 14:26:22 +00:00
def create_missing_proxies(self):
origins = Origin.query.all()
for origin in origins:
cloudfront_proxies = [
x for x in origin.proxies
if x.provider == self.provider and x.deprecated is None and x.destroyed is None
]
if not cloudfront_proxies:
proxy = Proxy()
proxy.origin_id = origin.id
proxy.provider = self.provider
proxy.added = datetime.datetime.utcnow()
proxy.updated = datetime.datetime.utcnow()
db.session.add(proxy)
db.session.commit()
def destroy_expired_proxies(self):
cutoff = datetime.datetime.utcnow() - datetime.timedelta(days=3)
proxies = Proxy.query.filter(
Proxy.destroyed == None,
Proxy.provider == self.provider,
Proxy.deprecated < cutoff
).all()
for proxy in proxies:
proxy.destroyed = datetime.datetime.utcnow()
proxy.updated = datetime.datetime.utcnow()
db.session.commit()
def generate_terraform(self):
self.write_terraform_config(
self.template,
groups=Group.query.all(),
proxies=Proxy.query.filter(
Proxy.provider == self.provider,
Proxy.destroyed == None
).all(),
2022-04-25 15:05:28 +01:00
subgroups = self.get_subgroups(),
2022-03-10 14:26:22 +00:00
global_namespace=app.config['GLOBAL_NAMESPACE'],
2022-04-19 14:32:04 +01:00
bypass_token=app.config['BYPASS_TOKEN'],
2022-03-10 14:26:22 +00:00
**{
k: app.config[k.upper()]
for k in self.template_parameters
}
)