diff --git a/.travis.yml b/.travis.yml index d7d8c92..a274981 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,7 +6,7 @@ python: env: global: - secure: KTWs8jE9COxyuULlAiynxrI61wKfZhz56B99zT75e4tdcCSGRIIWut8Skm1thAUSQsEymXhvhhmgND3qbjChyw90F/hAiA8xgo/QxpESvI48AXi9CLPfB9kyaf9SPqXokKxj0yYqCCYLLfmCu/glO66S69+5iQbwn8M+9WHdeHwYffJrFJonUt/E0HAuaNdmJIDCd3nuAp7Ol7JAuUsg8971SoeDqk+wBPNzN4UWYtpWGvxUas51w7YjIPwG7cr6C3XvP/G1x2YPU6yP0gQBtgKt3X3+W6FJqO1GZaiQ1iTK+nRhaU1SecjmkHJJKQjQDX+0CLVWW5Y98SrbtKYht/Ez3/3GG4NyHTtmBZ67F4cC3ikdTRDp3ixTAoay7M4osIgvkdNsCeiYGz8dXvIbOsh+bebCPHwYfdsVk0656XS3V2G5EnXMhqaOzDqdwdCMCUR/LUm4GOmZ2BqNAQT/CnsWugE7BZwyN9I8S1bVMfU0a4soXNAlXbr6Kzr01cdX7Po43y7GOe4QgQHMJuNrFzbJ24IT/OOKJKkgRRfUQoX3LQHH++EHUnKpeTDrT72MRp095jiRW5gjUVjidTtYG0YruZ4PFv66ICKHEmVEm57ATxjupea/goESWslp1/Vj2XV3mKhVcGwJ52WHV2czh8EEu/G16XZMHqwFDjIOg6c= - - APPENGINE_SDK=google_appengine_1.9.21 + - APPENGINE_SDK=google_appengine_1.9.24 cache: directories: diff --git a/src/cron.yaml b/src/cron.yaml index 14158a4..ff21f0b 100644 --- a/src/cron.yaml +++ b/src/cron.yaml @@ -19,7 +19,6 @@ cron: schedule: every monday 05:00 - description: weekly backup - url: /_ah/datastore_admin/backup.create?kind=Clue&kind=Question&kind=Season&kind=User&kind=UserQuestion&kind=UserSeason&kind=UserToken&kind=League&kind=LeagueUser&filesystem=gs&gs_bucket_name=ffcapp.appspot.com + url: /tasks/backup schedule: every saturday 01:00 - target: ah-builtin-python-bundle timezone: Europe/London diff --git a/src/main.py b/src/main.py index e070e29..1a611f1 100755 --- a/src/main.py +++ b/src/main.py @@ -45,6 +45,7 @@ 'tasks-cleananonusers'), webapp2.Route(r'/tasks/cleanupusertokens', tasks.CleanUpUserTokens, 'tasks-cleanupusertokens'), + webapp2.Route(r'/tasks/backup', tasks.ScheduledBackup, 'tasks-backup'), # Api. webapp2.Route(r'/api/question/<:.+>', question.Question, 'api-question'), diff --git a/src/queue.yaml b/src/queue.yaml index 4220b59..394b6d7 100644 --- a/src/queue.yaml +++ b/src/queue.yaml @@ -1,3 +1,6 @@ queue: - name: pose rate: 100/s +- name: backup-builtin-queue + rate: 30/s + target: ah-builtin-python-bundle \ No newline at end of file diff --git a/src/tasks.py b/src/tasks.py index ed37e45..bc01afd 100644 --- a/src/tasks.py +++ b/src/tasks.py @@ -9,6 +9,7 @@ import datetime import logging +from google.appengine.api import taskqueue from google.appengine.ext import deferred, blobstore, ndb from webapp2_extras.appengine.auth.models import UserToken @@ -16,6 +17,17 @@ import models BATCH_SIZE = 100 +BACKUP_ENTITIES = [ + 'Clue', + 'Question', + 'Season', + 'User', + 'UserQuestion', + 'UserSeason', + 'UserToken', + 'League', + 'LeagueUser', +] def delete_user(user_id, anonymous=False): @@ -93,3 +105,19 @@ def get(self): else: break + +class ScheduledBackup(baserequesthandler.RequestHandler): + + def get(self): + backup_folder = datetime.now().strftime('%y-%m-%d') + bucket_name = 'ffcapp.appspot.com/backups/%s' % backup_folder + params = { + 'filesystem' : 'gs', + 'gs_bucket_name': bucket_name, + 'kind' : BACKUP_ENTITIES + } + + url = '/_ah/datastore_admin/backup.create' + + logging.info('Backing up %s to: %s' % (BACKUP_ENTITIES, bucket_name)) + taskqueue.add(url=url, params=params, queue_name='backup-builtin-queue')