| import boto3 |
| import json |
| import time |
| import urllib.parse # pylint: disable=E0611 |
| |
| DAYS_TO_KEEP = 14 |
| EPOCH_DAY = 86400 |
| ARCHIVE_TABLE_NAME = 'archives.webkit.org' |
| PLATFORM_TABLE_NAME = 'platforms.webkit.org' |
| URL_PREFIX = 'https://s3-us-west-2.amazonaws.com' |
| |
| dynamodb_client = boto3.client('dynamodb') |
| s3 = boto3.client('s3') |
| |
| |
| def lambda_handler(event, context): |
| print("Received event: " + json.dumps(event, indent=2)) |
| |
| # Get the bucket name from the event |
| bucket = event['Records'][0]['s3']['bucket']['name'] |
| key = urllib.parse.unquote_plus(event['Records'][0]['s3']['object']['key'], encoding='utf-8') # pylint: disable=E1101 |
| # ex: mac-sierra-x86_64-debug/218331.zip |
| |
| split_key = key.split('/') |
| identifier = split_key[0] # mac-sierra-x86_64-debug |
| filename = split_key[1] # 218331.zip |
| revision = filename.split('.')[0] # 218331 |
| creation_time = int(time.time()) |
| expiration_time = creation_time + DAYS_TO_KEEP * EPOCH_DAY |
| |
| creation_time = str(creation_time) |
| expiration_time = str(expiration_time) |
| s3_url = '/'.join([URL_PREFIX, bucket, key]) |
| |
| try: |
| item = { |
| 'identifier': {'S': identifier}, |
| 'revision': {'N': revision}, |
| 's3_url': {'S': s3_url}, |
| 'creationTime': {'N': creation_time}, |
| 'expirationTime': {'N': expiration_time}, |
| } |
| print('Item: {}'.format(item)) |
| dynamodb_client.put_item(TableName=ARCHIVE_TABLE_NAME, Item=item) |
| |
| platform = { |
| 'identifier': {'S': identifier}, |
| 'creationTime': {'N': creation_time}, |
| 'expirationTime': {'N': expiration_time}, |
| } |
| print('Platform: {}'.format(platform)) |
| dynamodb_client.put_item(TableName=PLATFORM_TABLE_NAME, Item=platform) |
| |
| return s3_url |
| except Exception as e: |
| print(e) |
| print('Error registering item: {}\nfrom bucket {}.'.format(item, bucket)) |
| raise e |