summaryrefslogtreecommitdiff
path: root/cron/jordan_handle.py
diff options
context:
space:
mode:
Diffstat (limited to 'cron/jordan_handle.py')
-rw-r--r--cron/jordan_handle.py88
1 files changed, 88 insertions, 0 deletions
diff --git a/cron/jordan_handle.py b/cron/jordan_handle.py
new file mode 100644
index 0000000..57c9f28
--- /dev/null
+++ b/cron/jordan_handle.py
@@ -0,0 +1,88 @@
+import boto3
+import json
+import urllib3
+
+import dateutil.parser as dp
+import xml.etree.ElementTree as ET
+
+from datetime import datetime, timedelta
+from io import StringIO
+
+
+BUCKET = 'imgs.geshem.space'
+
+http = urllib3.PoolManager()
+s3 = boto3.resource('s3')
+client = boto3.client('s3')
+yesterday = (datetime.utcnow().date() - timedelta(days=1)).strftime('%Y%m%d')
+
+
+def jordan_update():
+ SOURCE_XML = 'http://212.35.78.67:8383/data/212JOC_rain_intensity.dpsri_dBR.xml'
+ IMG_PREFIX = 'jordan/'
+
+ try:
+ res = http.request('GET', SOURCE_XML).data.decode('utf-8')
+ except:
+ return 'Connection error'
+
+ root = ET.fromstring(res)
+
+ try:
+ latest_imgs = client.list_objects_v2(Bucket=BUCKET, Prefix=IMG_PREFIX, StartAfter=IMG_PREFIX + yesterday)['Contents']
+ latest_keys = [i['Key'] for i in latest_imgs]
+ except KeyError:
+ latest_keys = []
+
+ for r in ['images140', 'images280']:
+ imgs = sorted(maps_json[r].items(), key=lambda x: x[0], reverse=True)
+ res = r[-3:]
+ for ts, url in imgs:
+ dt = datetime.strptime(ts, '%Y:%m:%d:%H:%M')
+ d = dt.strftime('%Y%m%d')
+ t = dt.strftime('%H%M')
+ img = http.request('GET', url).data
+ key = '{}{}/{}/{}.png'.format(IMG_PREFIX, d, t, res)
+
+ if latest_keys:
+ if key not in latest_keys:
+ client.put_object(Bucket=BUCKET, Key=key, Body=img, ContentType='image/png', CacheControl='public, max-age=31536000')
+ latest_keys.append(key)
+ response += 'Put {}, '.format(key)
+ else:
+ response += 'Skipping {}, '.format(key)
+ else:
+ try:
+ _ = client.head_object(Bucket=BUCKET, Key=key)
+ response += 'Skipping {}, '.format(key)
+ except:
+ client.put_object(Bucket=BUCKET, Key=key, Body=img)
+ latest_keys.append(key)
+ response += 'Put {}, '.format(key)
+
+ if latest_keys:
+ index = {}
+ for r in ['220']:
+ keys = sorted(list(filter(lambda k: k.endswith('{}.png'.format(r)), latest_keys)))[-10:]
+ index[r] = keys
+ client.put_object(Bucket=BUCKET, Key='jordan.json', Body=json.dumps(index),
+ ContentType='application/json', CacheControl='public, max-age=60')
+
+ return response
+
+
+def update(event, context):
+
+ res = jordan_update()
+
+ body = {
+ 'message': f'SUCCESS: {res}',
+ 'input': event
+ }
+
+ response = {
+ 'statusCode': 200,
+ 'body': json.dumps(body)
+ }
+
+ return response