fisheye-experimental / backend /aws_handler.py
oskarastrom's picture
Compatability with backend
128e4f0
import logging
import boto3
from botocore.exceptions import ClientError
import os
from datetime import datetime
import torch
def upload_file(file_name, bucket="fishcounting", object_name=None):
"""Upload a file to an S3 bucket
:param file_name: File to upload
:param bucket: Bucket to upload to
:param object_name: S3 object name. If not specified then file_name is used
:return: True if file was uploaded, else False
"""
# If S3 object_name was not specified, use file_name
if object_name is None:
object_name = os.path.basename(file_name)
if (not 'AAK_ID' in os.environ) or (not 'ASAK' in os.environ):
print('AWS keys not specified. Cancelling sync')
return False
# Upload the file
s3_client = boto3.client(
's3',
aws_access_key_id=os.environ['AAK_ID'],
aws_secret_access_key=os.environ['ASAK']
)
try:
response = s3_client.upload_file(file_name, bucket, object_name)
except ClientError as e:
logging.error(e)
return False
return True
def ping_server(aris_name, state):
"""Upload a notification file to AWS
:param aris_name: Name of the aris file uploaded
:return: True if file was uploaded, else False
"""
file_name = 'tmp/notification.txt'
os.makedirs('tmp', exist_ok=True)
with open(file_name, 'w') as f:
output = f"time: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n"
output += f"filename: {aris_name}\n"
output += f"app version: {state['version']}\n"
output += f"hardware: {torch.cuda.get_device_name() if torch.cuda.is_available() else 'CPU'}\n"
if 'CPU_CORES' in os.environ:
output += f"location: HuggingFace\n"
output += f"nbr cpu cores: {os.environ['CPU_CORES']}\n"
output += f"memory: {os.environ['MEMORY']}\n"
else:
output += f"location: local install"
f.write(output)
# If S3 object_name was not specified, use file_name
if (not 'AAK_ID' in os.environ) or (not 'ASAK' in os.environ):
print('AWS keys not specified. Cancelling sync')
return False
# Upload the file
s3_client = boto3.client(
's3',
aws_access_key_id=os.environ['AAK_ID'],
aws_secret_access_key=os.environ['ASAK']
)
try:
response = s3_client.upload_file(file_name, "fishcounting", "webapp_uploads/notifications/" + str(int(datetime.now().timestamp())) + ".txt")
except ClientError as e:
logging.error(e)
return False
return True