Procházet zdrojové kódy

jobrunner => registers + queues. misc

David před 10 roky
rodič
revize
b48f581ead

+ 1 - 0
back/constants.py

@@ -3,3 +3,4 @@ BASE_PATH="/back" #changes based on webserver
 
 
 RAW_PATH='/home/david/git/youtube-uploader/web/front/raw/'
 RAW_PATH='/home/david/git/youtube-uploader/web/front/raw/'
 CUT_OUTPUT_PATH='/home/david/git/youtube-uploader/web/front/videos/'
 CUT_OUTPUT_PATH='/home/david/git/youtube-uploader/web/front/videos/'
+INCOMING_PATH='/home/david/git/youtube-uploader/watched/'

+ 30 - 23
back/tasks.py

@@ -2,10 +2,12 @@ import os.path
 import datetime
 import datetime
 import json
 import json
 import thumb
 import thumb
+import time
 
 
 from constants import CUT_OUTPUT_PATH
 from constants import CUT_OUTPUT_PATH
 from subprocess import Popen,PIPE
 from subprocess import Popen,PIPE
 from rq import get_current_job,Queue
 from rq import get_current_job,Queue
+from rq.registry import StartedJobRegistry,FinishedJobRegistry 
 from rq.job import Job
 from rq.job import Job
 from rq.decorators import job
 from rq.decorators import job
 from worker import conn,q
 from worker import conn,q
@@ -13,17 +15,8 @@ from dateutil import tz
 from db import db
 from db import db
 
 
 d = db()
 d = db()
-job_key_list = []
 date_fmt='%d/%m/%Y, %H:%M'
 date_fmt='%d/%m/%Y, %H:%M'
 
 
-
-def jobrunner(fn,args):
-    print(args)
-    job = fn.delay(*args)
-    print(job.get_id())
-    job_key_list.append(job.get_id())
-    return job
-
 def utctolocal(date):
 def utctolocal(date):
     date=date.replace(tzinfo=tz.tzutc())
     date=date.replace(tzinfo=tz.tzutc())
     return date.astimezone(tz.tzlocal())
     return date.astimezone(tz.tzlocal())
@@ -38,23 +31,32 @@ def result(job_key):
     else:
     else:
         return ("Process: %s" % json.dumps(job.meta), 202)
         return ("Process: %s" % json.dumps(job.meta), 202)
 
 
-def jobs():
+def l_from_ids(ids,status=None):
     ret = []
     ret = []
-    for j in job_key_list:#q.jobs:
-        try:
-            job = Job.fetch(j, connection=conn)
-        except Exception as e:
-            job_key_list.remove(j)
-            print("%s deleted" % j)
-            continue
+    for job_id in ids:
+        job = Job.fetch(job_id, connection=conn)
         out = job.meta
         out = job.meta
-        out["id"]=j
         out["eq"]=utctolocal(job.enqueued_at).strftime(date_fmt)
         out["eq"]=utctolocal(job.enqueued_at).strftime(date_fmt)
-        out["finished"]=job.is_finished
+        out["working"]=True
         out["result"]=job.result
         out["result"]=job.result
+        if status:
+            out["progress"]=status
         ret.append(out)
         ret.append(out)
     return ret
     return ret
 
 
+def jobs():
+    ret = []
+    ids = StartedJobRegistry(name='default', connection=conn).get_job_ids()
+    ret.extend(l_from_ids(ids))
+    ids = FinishedJobRegistry(name='default', connection=conn).get_job_ids()
+    ret.extend(l_from_ids(ids,'Finished'))
+
+    for q_name in q.all(connection=conn):
+        ids = q_name.job_ids
+        ret.extend(l_from_ids(ids,'Waiting'))
+
+    return ret
+
 def upload_video(_id,prof,texto1,texto2):
 def upload_video(_id,prof,texto1,texto2):
     vid=d.processed(_id)
     vid=d.processed(_id)
     ul_file = vid["out_fname"]
     ul_file = vid["out_fname"]
@@ -65,8 +67,6 @@ def upload_video(_id,prof,texto1,texto2):
     #job = jobrunner(upload (titulo, thumb_file, ul_file)) 
     #job = jobrunner(upload (titulo, thumb_file, ul_file)) 
     #FIXME
     #FIXME
     job = upload.delay(titulo, thumb_file, ul_file)
     job = upload.delay(titulo, thumb_file, ul_file)
-    job_key_list.append(job.get_id())
-    print(job.get_id())
 
 
 
 
 @job('default',connection=conn, timeout=3600*2, result_ttl=3600*2)
 @job('default',connection=conn, timeout=3600*2, result_ttl=3600*2)
@@ -79,13 +79,18 @@ def upload(title,thumb_path,video_path):
     d.insert_uploaded({'title': title,'yt': v_id, 'video':video_path, 'enqueued_at': job_start, 'finished_at': job_end })
     d.insert_uploaded({'title': title,'yt': v_id, 'video':video_path, 'enqueued_at': job_start, 'finished_at': job_end })
     return v_id
     return v_id
 
 
-@job('default',connection=conn, timeout=30)
+@job('default',connection=conn, timeout=30, result_ttl=135)
 def long_job(arg):
 def long_job(arg):
+    job = get_current_job()
+    job.meta['type'] = "Test"
+    job.meta['target'] = 20
+    job.save()
     for i in range(20):
     for i in range(20):
         time.sleep(1)
         time.sleep(1)
         job = get_current_job()
         job = get_current_job()
         job.meta['progress'] = i
         job.meta['progress'] = i
         job.save()
         job.save()
+        print("working")
     #push to db, return id if ok. return error if not ok
     #push to db, return id if ok. return error if not ok
     return "37"
     return "37"
 
 
@@ -119,7 +124,7 @@ def crop_video(in_fname,start_time,end_time,out_fname):
 
 
     out = run_process(process)
     out = run_process(process)
     if out == "":
     if out == "":
-        out = { "status": "Proceso finalizado" }
+        out = "Proceso finalizado"
 
 
 
 
     job_end = datetime.datetime.now()
     job_end = datetime.datetime.now()
@@ -146,5 +151,7 @@ def run_process(process = None):
             job.meta['progress'] = line.rstrip()
             job.meta['progress'] = line.rstrip()
             job.save()
             job.save()
         else:
         else:
+            job.meta['progress'] = "Finalizado"
+            job.save()
             break
             break
     return ""
     return ""

+ 1 - 1
back/thumb.py

@@ -8,7 +8,7 @@ from wand.color import Color
 draw = Drawing()
 draw = Drawing()
 
 
 def create_thumb(prof,texto1,texto2):
 def create_thumb(prof,texto1,texto2):
-    with tempfile.NamedTemporaryFile(suffix='.png',delete=None) as fp:
+    with tempfile.NamedTemporaryFile(suffix='.png',delete=False) as fp:
         with Image(filename='especificosos-nuevo.png') as img:
         with Image(filename='especificosos-nuevo.png') as img:
             draw.font = "Helvetica"
             draw.font = "Helvetica"
             draw.gravity = "center"
             draw.gravity = "center"

+ 2 - 4
back/web.py

@@ -65,8 +65,7 @@ def crop():
                                 today.strftime('%Y%m%d'),
                                 today.strftime('%Y%m%d'),
                                 data["desc"])
                                 data["desc"])
 
 
-    #job = tasks.crop_video.delay(video["file"],
-    job = tasks.jobrunner(tasks.crop_video, 
+    job = tasks.crop_video.delay(
                             (video["file"],
                             (video["file"],
                             str(data["inicio"]),
                             str(data["inicio"]),
                             str(data["fin"]),
                             str(data["fin"]),
@@ -88,8 +87,7 @@ def upload():
 
 
 @app.route(BASE_PATH + '/job')
 @app.route(BASE_PATH + '/job')
 def job():
 def job():
-    job = tasks.jobrunner(tasks.long_job, ("test",))
-    #job = tasks.long_job.delay("test")
+    job = tasks.long_job.delay("test")
 
 
     ret = {"id":job.get_id()}
     ret = {"id":job.get_id()}
 
 

+ 3 - 1
back/youtube_upload/main.py

@@ -45,7 +45,7 @@ def get_progress_info():
     def _callback(total_size, completed):
     def _callback(total_size, completed):
         if JOB is not None:
         if JOB is not None:
             JOB.meta['status'] = 'uploading'
             JOB.meta['status'] = 'uploading'
-            JOB.meta['progress'] = (completed/total_size)*100
+            JOB.meta['progress'] = "%.2f%%" % ((completed/total_size)*100)
             JOB.save()
             JOB.save()
     def _finish():
     def _finish():
         if JOB is not None:
         if JOB is not None:
@@ -140,6 +140,8 @@ def run_main(title,thumb,path,output=sys.stdout):
                     'default_audio_language': None, 'publish_at': None, 'auth_browser': None
                     'default_audio_language': None, 'publish_at': None, 'auth_browser': None
                     })
                     })
 
 
+    JOB.meta["type"]="Youtube"
+    JOB.meta["target"]=title
     youtube = get_youtube_handler(options)
     youtube = get_youtube_handler(options)
     video_path = path
     video_path = path
     video_id=None
     video_id=None

+ 3 - 3
front/controllers/jobsCtrl.js

@@ -1,10 +1,10 @@
-app.controller('jobsCtrl', ['$scope', '$http', function ($scope, $http) {
+app.controller('jobsCtrl', function ($scope, $http,$interval) {
 	$scope.update = function() {
 	$scope.update = function() {
 		$http.get('back/list/jobs').success(function(data) {
 		$http.get('back/list/jobs').success(function(data) {
-	   		$scope.finished = data.finished;
 	   		$scope.working  = data.working;
 	   		$scope.working  = data.working;
 		});
 		});
 	};
 	};
 
 
 	$scope.update();
 	$scope.update();
-}]);
+	$interval($scope.update, 1500);
+});

+ 7 - 3
front/views/jobs.html

@@ -5,10 +5,11 @@
 		<th>Tipo</th>
 		<th>Tipo</th>
 		<th>Target</th>
 		<th>Target</th>
 		<th>Estado</th>
 		<th>Estado</th>
+		<th>Resultado</th>
 	</tr>
 	</tr>
-	<tr ng-repeat="j in joblist">
+	<tr ng-repeat="j in working">
 		<td>
 		<td>
-			{{j.start}}
+			{{j.eq}}
 		</td>
 		</td>
 		<td>
 		<td>
 			{{j.type}}
 			{{j.type}}
@@ -17,7 +18,10 @@
 			{{j.target}}
 			{{j.target}}
 		</td>
 		</td>
 		<td>
 		<td>
-			{{j.status}}
+			{{j.progress}}
+		</td>
+		<td>
+			{{j.result}}
 		</td>
 		</td>
 	</tr>
 	</tr>
 </table>
 </table>

+ 4 - 0
front/views/uploadList.html

@@ -3,6 +3,7 @@
 	<tr>
 	<tr>
 		<th>Inicio</th>
 		<th>Inicio</th>
 		<th>Fin</th>
 		<th>Fin</th>
+		<th>Titulo</th>
 		<th>Archivo</th>
 		<th>Archivo</th>
 		<th>Link</th>
 		<th>Link</th>
 	</tr>
 	</tr>
@@ -13,6 +14,9 @@
 		<td>
 		<td>
 			{{v.finished_at}}
 			{{v.finished_at}}
 		</td>
 		</td>
+		<td>
+			{{v.title}}
+		</td>
 		<td>
 		<td>
 			{{v.video}}
 			{{v.video}}
 		</td>
 		</td>