Explorar o código

insert processed files to db. list them

David %!s(int64=10) %!d(string=hai) anos
pai
achega
01be052e82
Modificáronse 3 ficheiros con 48 adicións e 4 borrados
  1. 22 1
      back/db.py
  2. 21 2
      back/tasks.py
  3. 5 1
      back/web.py

+ 22 - 1
back/db.py

@@ -26,10 +26,27 @@ class db():
         if _id:
             ret = jsonable(self.raw_files.find_one({"_id": ObjectId(_id)}))
         else:
-            ret = [ jsonable(r) for r in self.raw_files.find() ]
+            ret = [ jsonable(fix_date(r)) for r in self.raw_files.find() ]
 
         return ret
 
+    def cut(self, _id=None):
+        ret = None
+        if _id:
+            ret = jsonable(self.cut.find_one({"_id": ObjectId(_id)}))
+        else:
+            ret = [ jsonable(fix_date(c)) for c in self.cut.find() ]
+
+        return ret
+
+    def insert_processed(self, data):
+        try:
+            self.cut_files.insert_one(data)
+            return True
+        except errors.DuplicateKeyError:
+            print("Dup")
+            return False
+        
     def insert_raw(self, rawfile):
         try:
             self.raw_files.insert_one(rawfile)
@@ -44,6 +61,10 @@ class db():
                 self.insert_raw(file_info(os.path.join(RAW_PATH,fname)))
 
 
+def fix_date(obj):
+    ret = obj
+    #ret["date"]=ret["date"].strftime('%Y-%m-%dT%H:%M:%S')
+    return ret
 def get_video_length(fname):
     process="ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 -sexagesimal %s" % fname
     process=process.split(" ")

+ 21 - 2
back/tasks.py

@@ -1,5 +1,5 @@
 import os.path
-import time
+import datetime
 import json
 
 from constants import CUT_OUTPUT_PATH
@@ -9,7 +9,9 @@ from rq.job import Job
 from rq.decorators import job
 from worker import conn,q
 from dateutil import tz
+from db import db
 
+d = db()
 job_key_list = []
 date_fmt='%d/%m/%Y, %H:%M'
 
@@ -36,11 +38,16 @@ def result(job_key):
 def jobs():
     ret = []
     for j in job_key_list:#q.jobs:
-        job = Job.fetch(j, connection=conn)
+        try:
+            job = Job.fetch(j, connection=conn)
+        except Exception as e:
+            job_key_list.remove(j)
+            print("%s deleted" % j)
         out = job.meta
         out["id"]=j
         out["eq"]=utctolocal(job.enqueued_at).strftime(date_fmt)
         out["finished"]=job.is_finished
+        out["result"]=job.result
         ret.append(out)
     return ret
 
@@ -64,6 +71,7 @@ def upload_video(title,thumb_path,video_path):
 
 @job('default',connection=conn, timeout=360*2, result_ttl=360*2)
 def cut_video(in_fname,start_time,end_time,out_fname):
+    job_start = datetime.datetime.now()
     if not os.path.isfile(in_fname):
         return { "status":"error",
                  "error": "El archivo %s no existe" % in_fname
@@ -89,6 +97,17 @@ def cut_video(in_fname,start_time,end_time,out_fname):
     out = run_process(process)
     if out == "":
         out = { "status": "Proceso finalizado" }
+
+
+    job_end = datetime.datetime.now()
+    d.insert_processed({
+                'job_start': job_start,
+                'job_end':   job_end,
+                'start_time':start_time,
+                'end_time':  end_time,
+                'in_fname':  in_fname,
+                'out_fname': out_fname
+                })
     return out
 
 def run_process(process = None):

+ 5 - 1
back/web.py

@@ -15,7 +15,7 @@ d=db()
 def index():
     return "Hello world"
 
-@app.route(BASE_PATH + '/raw')
+@app.route(BASE_PATH + '/list/raw')
 def raw_list():
     ret={'list': d.raw() }
     return jsonify(ret)
@@ -26,6 +26,10 @@ def raw_file(video_id):
     ret["file"]=ret["file"].split("front")[1] #FIXME, path relativo al webserver
     return jsonify(ret)
 
+@app.route(BASE_PATH + '/list/cut/')
+def cut_list():
+    ret={'list': d.cut() }
+    return jsonify(ret)
 @app.route(BASE_PATH + '/cut/', methods=["POST"])
 def cut():
     ret={"status":"Procesando"}