summaryrefslogtreecommitdiff
path: root/cron/handler.py
diff options
context:
space:
mode:
authorYuval Adam <_@yuv.al>2025-09-24 10:53:13 +0200
committerYuval Adam <_@yuv.al>2025-09-24 10:53:13 +0200
commitec47e4f8722ca29119d13e58e7a890dbd578f84f (patch)
tree471ba483358fae23a4864725ca6190ea7683cdfa /cron/handler.py
parent2a050b383bcafefb8fc378531d6f15f352fdb5a5 (diff)
Remove legacy cron/
Diffstat (limited to 'cron/handler.py')
-rw-r--r--cron/handler.py102
1 files changed, 0 insertions, 102 deletions
diff --git a/cron/handler.py b/cron/handler.py
deleted file mode 100644
index 8c52d0f..0000000
--- a/cron/handler.py
+++ /dev/null
@@ -1,102 +0,0 @@
-import json
-import re
-
-import boto3
-import requests
-import urllib3
-
-from requests_ntlm import HttpNtlmAuth
-
-from datetime import datetime, timedelta
-from io import BytesIO
-from os import environ
-
-urllib3.disable_warnings()
-
-
-class GeshemUpdate():
-
- def __init__(self):
- self.s3 = boto3.client('s3')
- self.BUCKET = 'imgs.geshem.space'
- self.IMG_PREFIX = 'imgs/'
-
- self.BASE_URL = environ.get("BASE_URL")
- self.NTLM_AUTH = (environ.get("AUTH_USER"), environ.get("AUTH_PASS"))
-
- self.session = requests.Session()
- self.session.auth = HttpNtlmAuth(*self.NTLM_AUTH)
-
- def get_latest_images(self):
- imgres = self.session.get(self.BASE_URL, verify=False)
- imgs = list(set(re.findall(r"radar280comp_\d+.png", imgres.text)))
- return sorted(imgs)[-10:]
-
- def get_latest_bucket_keys(self):
- latest_keys = []
- yesterday = (datetime.utcnow().date() - timedelta(days=1)).strftime('%Y%m%d')
-
- try:
- latest_imgs = self.s3.list_objects_v2(Bucket=self.BUCKET, Prefix=self.IMG_PREFIX, StartAfter=self.IMG_PREFIX + yesterday)['Contents']
- latest_keys = [i['Key'] for i in latest_imgs]
- except KeyError:
- pass
-
- return latest_keys
-
- def fetch_missing_images(self):
- imgs = self.get_latest_images()
- s3_imgs = self.get_latest_bucket_keys()
- updated = False
-
- for img in imgs:
- key = self.key_from_filename(img)
- if key not in s3_imgs:
- self.fetch_image(img, key)
- updated = True
-
- return updated
-
- def fetch_image(self, img_name, key):
- print(f"Downloading {img_name} from web server")
- img = self.session.get(f"{self.BASE_URL}/{img_name}").content
- print(f"Uploading to {key}")
- self.s3.put_object(Bucket=self.BUCKET, Key=key, Body=img, ContentType='image/png', CacheControl='public, max-age=31536000')
-
- def key_from_filename(self, filename):
- _name, date = filename.split(".")[0].split("_")
- res = 280
- # date conversion isn't really needed but we do it anyway just to make sure
- dt = datetime.strptime(date, '%Y%m%d%H%M')
- d = dt.strftime('%Y%m%d')
- t = dt.strftime('%H%M')
- return f'{self.IMG_PREFIX}{d}/{t}/{res}.png'
-
- def generate_json(self):
- latest_keys = self.get_latest_bucket_keys()
- keys = sorted(list(filter(lambda k: k.endswith('280.png'), latest_keys)))[-10:]
- index = json.dumps({'280': keys})
- self.s3.put_object(Bucket=self.BUCKET, Key='imgs.json', Body=index, ContentType='application/json', CacheControl='public, max-age=60')
-
- def run(self):
- updated = self.fetch_missing_images()
- if updated:
- self.generate_json()
- return f"Updated: {updated}"
-
-
-def update(event, context):
- res = GeshemUpdate().run()
- body = {
- "message": "SUCCESS: \n" + res,
- "input": event
- }
- response = {
- "statusCode": 200,
- "body": json.dumps(body)
- }
- return response
-
-
-if __name__ == "__main__":
- GeshemUpdate().run()