Эх сурвалжийг харах

HUE-3797 [scheduler] Retrieve saved document to be scheduled

Romain 6 жил өмнө
parent
commit
c7b70f4ed8

+ 16 - 2
desktop/core/src/desktop/lib/scheduler/lib/beat.py

@@ -20,13 +20,24 @@ import json
 from django_celery_beat.models import PeriodicTask, CrontabSchedule, IntervalSchedule
 from django_celery_beat.models import PeriodicTask, CrontabSchedule, IntervalSchedule
 
 
 from desktop.lib.scheduler.lib.api import Api
 from desktop.lib.scheduler.lib.api import Api
+from desktop.models import Document2
 
 
 
 
 class CeleryBeatApi(Api):
 class CeleryBeatApi(Api):
 
 
   def submit_schedule(self, request, coordinator, mapping):
   def submit_schedule(self, request, coordinator, mapping):
+    '''
+    coordinator
+      Document2.objects.get(uuid=coordinator.get_data_for_json()['properties']['document'])
+
+    mapping
+      {u'oozie.use.system.libpath': u'True', 'dryrun': False, u'start_date': u'2019-08-10T17:02', u'end_date': u'2019-08-17T17:02'}
+    '''
     is_cron = True # IntervalSchedule is buggy https://github.com/celery/django-celery-beat/issues/279
     is_cron = True # IntervalSchedule is buggy https://github.com/celery/django-celery-beat/issues/279
 
 
+    # Assumes SQL queries currently
+    document = Document2.objects.get(uuid=coordinator.get_data_for_json()['properties']['document'])
+
     if is_cron:
     if is_cron:
       schedule, created = CrontabSchedule.objects.get_or_create(
       schedule, created = CrontabSchedule.objects.get_or_create(
           minute='*',
           minute='*',
@@ -38,9 +49,12 @@ class CeleryBeatApi(Api):
 
 
       task = PeriodicTask.objects.update_or_create(
       task = PeriodicTask.objects.update_or_create(
         crontab=schedule,
         crontab=schedule,
-        name='Scheduled query N',
+        name='Scheduled document %(user)s %(uuid)s' % {
+          'user': request.user.username,
+          'uuid': document.uuid
+        },
         task='notebook.tasks.run_sync_query',
         task='notebook.tasks.run_sync_query',
-        defaults={"args": json.dumps(['a7428a99-2f77-cf3a-ebbd-460f19ba46cc', request.user.username])},
+        defaults={"args": json.dumps([document.uuid, request.user.username])},
       )
       )
       task.enabled=True
       task.enabled=True
       task.save()
       task.save()

+ 6 - 5
desktop/libs/notebook/src/notebook/tasks.py

@@ -149,9 +149,9 @@ def close_statement_async(notebook, snippet, **kwargs):
 @app.task(ignore_result=True)
 @app.task(ignore_result=True)
 def run_sync_query(doc_id, user):
 def run_sync_query(doc_id, user):
   '''Independently run a query as a user.'''
   '''Independently run a query as a user.'''
-  # Add INSERT INTO table if persit result
-  # Add variables
-  # Return when done. send email notification. get taskid.
+  # Add INSERT INTO table if persist result
+  # Add variable substitution
+  # Send notifications: done/on failure
   if type(user) is str:
   if type(user) is str:
     user = User.objects.get(username=user)
     user = User.objects.get(username=user)
 
 
@@ -162,13 +162,14 @@ def run_sync_query(doc_id, user):
   editor_type = snippet['type']
   editor_type = snippet['type']
   sql = _get_statement(notebook)
   sql = _get_statement(notebook)
   request = MockedDjangoRequest(user=user)
   request = MockedDjangoRequest(user=user)
+  last_executed=time.mktime(datetime.datetime.now().timetuple()) * 1000
 
 
   notebook = make_notebook(
   notebook = make_notebook(
-      name='Scheduler query N',
+      name='Scheduled query %s at %s' % (query_document.name, last_executed),
       editor_type=editor_type,
       editor_type=editor_type,
       statement=sql,
       statement=sql,
       status='ready',
       status='ready',
-      last_executed=time.mktime(datetime.datetime.now().timetuple()) * 1000,
+      last_executed=last_executed,
       is_task=True
       is_task=True
   )
   )