Skip to content

Commit

Permalink
add management task for cleaning up stale S3 files
Browse files Browse the repository at this point in the history
  • Loading branch information
gedankenstuecke committed Aug 20, 2018
1 parent 95b30cb commit 57469bb
Show file tree
Hide file tree
Showing 7 changed files with 53 additions and 1 deletion.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ coverage.xml
local_settings.py
staticfiles/
db.sqlite3
dump.rdb

# dotenv (environment variables, used for secret/local stuff)
.env
Empty file.
Empty file.
23 changes: 23 additions & 0 deletions project_admin/management/commands/cleanup_files.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
from django.core.management.base import BaseCommand
import datetime
from django.conf import settings
from project_admin.models import S3Upload
from datetime import timedelta
import boto3


class Command(BaseCommand):
help = 'Delete stale zip files'

def handle(self, *args, **options):
s3_client = boto3.client('s3', aws_access_key_id=settings.AWS_ACCESS_KEY_ID,
aws_secret_access_key=settings.AWS_SECRET_ACCESS_KEY)
old_files = S3Upload.objects.filter(
created_at__date__lt=datetime.datetime.now() - timedelta(hours=24))
for of in old_files:
delete_response = s3_client.delete_object(
Bucket=settings.AWS_STORAGE_BUCKET_NAME,
Key=of.key)
if delete_response.get("ResponseMetadata").get('HTTPStatusCode') != 204:
print("Couldn't delete file {}".format(of.key))
old_files.delete()
21 changes: 21 additions & 0 deletions project_admin/migrations/0013_s3upload.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Generated by Django 2.0.7 on 2018-08-20 23:06

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('project_admin', '0012_auto_20180615_0240'),
]

operations = [
migrations.CreateModel(
name='S3Upload',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('key', models.CharField(max_length=60)),
('created_at', models.DateTimeField(auto_now_add=True)),
],
),
]
5 changes: 5 additions & 0 deletions project_admin/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,3 +70,8 @@ class Note(models.Model):
modified_at = models.DateTimeField(auto_now=True)
project = models.ForeignKey(Project, on_delete=models.CASCADE)
member = models.ForeignKey(ProjectMember, on_delete=models.CASCADE)


class S3Upload(models.Model):
key = models.CharField(max_length=60)
created_at = models.DateTimeField(auto_now_add=True)
4 changes: 3 additions & 1 deletion project_admin/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from celery.decorators import task
from celery.utils.log import get_task_logger
from django.conf import settings
from .models import Project
from .models import Project, S3Upload
from .utility import send_email
from .helpers import get_all_members, filter_members_group_id
logger = get_task_logger(__name__)
Expand Down Expand Up @@ -58,6 +58,8 @@ def download_zip_files(user, group_id=None):
zipfile_url = s3_client.generate_presigned_url('get_object',
Params={'Bucket': settings.AWS_STORAGE_BUCKET_NAME,
'Key': zip_filename}, ExpiresIn=86400)
s3uploaded_file = S3Upload(key=zip_filename)
s3uploaded_file.save()
send_email(download_success, zipfile_url, project.contact_email, project.name)
except Exception as e:
logger.error('Downloading zip file crashed', e)

0 comments on commit 57469bb

Please sign in to comment.