From e0db32b53fe204f3e95d1ed5d8947da0c0749a0e Mon Sep 17 00:00:00 2001 From: Victor Seva Date: Mon, 17 Jul 2017 10:39:42 +0200 Subject: [PATCH] TT#18651 purge-none periodic task * remove all JenkinsBuildInfo from tasks that are not release related every week Change-Id: Ibd4352fad5af6c8cae8fd4a8dcbb11faa696619a --- repoapi/models/jbi.py | 11 ++++++++--- repoapi/settings/prod.py | 5 +++++ repoapi/test/test_model_queries.py | 12 ++++++++++++ repoapi/test/test_tasks.py | 10 ++++++++++ 4 files changed, 35 insertions(+), 3 deletions(-) diff --git a/repoapi/models/jbi.py b/repoapi/models/jbi.py index de7af8f..58dcd29 100644 --- a/repoapi/models/jbi.py +++ b/repoapi/models/jbi.py @@ -137,9 +137,14 @@ class JenkinsBuildInfoManager(models.Manager): def purge_release(self, release, _timedelta=timedelta(weeks=3)): _date = datetime.now() - _timedelta - self.get_queryset().filter( - param_release=release, - date__date__lt=_date).delete() + if release is None: + self.get_queryset().filter( + param_release__isnull=True, + date__date__lt=_date).delete() + else: + self.get_queryset().filter( + param_release=release, + date__date__lt=_date).delete() class JenkinsBuildInfo(models.Model): diff --git a/repoapi/settings/prod.py b/repoapi/settings/prod.py index 998cb99..4822fc5 100644 --- a/repoapi/settings/prod.py +++ b/repoapi/settings/prod.py @@ -85,6 +85,11 @@ CELERYBEAT_SCHEDULE = { 'schedule': crontab(hour=7, minute=30, day_of_week='sunday'), 'args': ('none', 4), }, + 'purge-none': { + 'task': 'repoapi.tasks.jbi_purge', + 'schedule': crontab(hour=7, minute=30, day_of_week='sunday'), + 'args': (None, 1), + }, } CELERY_TIMEZONE = 'UTC' diff --git a/repoapi/test/test_model_queries.py b/repoapi/test/test_model_queries.py index 88107c4..16e9318 100644 --- a/repoapi/test/test_model_queries.py +++ b/repoapi/test/test_model_queries.py @@ -70,3 +70,15 @@ class JBIQueriesTestCase(BaseTest): 'mr3.1-fake', timedelta(weeks=3)) self.assertEquals(JenkinsBuildInfo.objects.count(), 1) + + def test_purge_release_none(self): + jbi = JenkinsBuildInfo.objects.get(pk=1) + jbi.param_release = None + jbi.save() + self.assertEquals(JenkinsBuildInfo.objects.filter( + param_release__isnull=True).count(), 1) + self.assertEquals(JenkinsBuildInfo.objects.count(), 5) + JenkinsBuildInfo.objects.purge_release( + None, + timedelta(weeks=3)) + self.assertEquals(JenkinsBuildInfo.objects.count(), 4) diff --git a/repoapi/test/test_tasks.py b/repoapi/test/test_tasks.py index eea3c95..24f1381 100644 --- a/repoapi/test/test_tasks.py +++ b/repoapi/test/test_tasks.py @@ -30,3 +30,13 @@ class TasksTestCase(BaseTest): self.assertEquals(JenkinsBuildInfo.objects.count(), 5) tasks.jbi_purge.delay('mr3.1-fake', 3) self.assertEquals(JenkinsBuildInfo.objects.count(), 1) + + def test_purge_none(self): + jbi = JenkinsBuildInfo.objects.get(pk=1) + jbi.param_release = None + jbi.save() + self.assertEquals(JenkinsBuildInfo.objects.filter( + param_release__isnull=True).count(), 1) + self.assertEquals(JenkinsBuildInfo.objects.count(), 5) + tasks.jbi_purge.delay(None, 3) + self.assertEquals(JenkinsBuildInfo.objects.count(), 4)