mirror of
				https://gitlab.ub.uni-bielefeld.de/sfb1288inf/nopaque.git
				synced 2025-10-31 18:42:45 +00:00 
			
		
		
		
	Add infos to job model and show them on the job info pages.
This commit is contained in:
		| @@ -71,4 +71,30 @@ def job(job_id): | ||||
|     elif not job.user_id == current_user.id: | ||||
|         print('Job does not belong to current user.') | ||||
|         abort(403) | ||||
|     return render_template('main/jobs/job.html.j2', title='Job', job=job) | ||||
|     input_dir = os.path.join(current_app.config['OPAQUE_STORAGE'], | ||||
|                              str(current_user.id), | ||||
|                              'jobs', | ||||
|                              str(job.id)) | ||||
|     output_dir = os.path.join(current_app.config['OPAQUE_STORAGE'], | ||||
|                              str(current_user.id), | ||||
|                              'jobs', | ||||
|                              str(job.id), | ||||
|                              'output') | ||||
|  | ||||
|     input_files = {} | ||||
|     for file in os.listdir(input_dir): | ||||
|         if file == 'output': | ||||
|             continue | ||||
|         input_files[file] = os.path.join(input_dir, file) | ||||
|  | ||||
|     output_files = {} | ||||
|     if job.status == 'complete': | ||||
|         for input_file in input_files: | ||||
|             dir = os.path.join(output_dir, input_file) | ||||
|             for output_file in os.listdir(dir): | ||||
|                 output_files[output_file] = os.path.join(dir, output_file) | ||||
|  | ||||
|     return render_template('main/jobs/job.html.j2', | ||||
|                            input_files=input_files, | ||||
|                            job=job, | ||||
|                            output_files=output_files, title='Job') | ||||
|   | ||||
| @@ -222,6 +222,7 @@ class Job(db.Model): | ||||
|     id = db.Column(db.Integer, primary_key=True) | ||||
|     creation_date = db.Column(db.DateTime(), default=datetime.utcnow) | ||||
|     description = db.Column(db.String(255)) | ||||
|     end_date = db.Column(db.DateTime()) | ||||
|     mem_mb = db.Column(db.Integer) | ||||
|     n_cores = db.Column(db.Integer) | ||||
|     service = db.Column(db.String(64)) | ||||
|   | ||||
| @@ -73,7 +73,6 @@ def ocr(): | ||||
|                       service='ocr', | ||||
|                       service_args=json.dumps([ | ||||
|                         '-l {}'.format(new_ocr_job_form.language.data), | ||||
|                         '--keep-intermediates', | ||||
|                         '--skip-binarisation']), | ||||
|                       service_version=new_ocr_job_form.version.data, | ||||
|                       status='submitted', | ||||
|   | ||||
| @@ -1,3 +1,4 @@ | ||||
| from datetime import datetime | ||||
| from sqlalchemy import create_engine | ||||
| from sqlalchemy.orm import sessionmaker | ||||
| import docker | ||||
| @@ -110,6 +111,7 @@ class Swarm: | ||||
|                 break | ||||
|             time.sleep(1) | ||||
|             service.reload() | ||||
|         job.end_date = datetime.utcnow() | ||||
|         job.status = current_state | ||||
|         session.commit() | ||||
|         session.close() | ||||
|   | ||||
| @@ -4,21 +4,90 @@ | ||||
| <div class="col s12 m4"> | ||||
|   <h3>{{ job.title }}</h3> | ||||
|   <p>{{ job.description }}</p> | ||||
|   {% if job.status == 'pending' %} | ||||
|     {% set status_color = 'amber' %} | ||||
|   {% elif job.status =='running' %} | ||||
|     {% set status_color = 'indigo' %} | ||||
|   {% elif job.status =='complete' %} | ||||
|     {% set status_color = 'teal' %} | ||||
|   {% else %} | ||||
|     {% set status_color = 'red' %} | ||||
|   {% endif %} | ||||
|   <p><a class="waves-effect waves-light btn {{ status_color }}">{{ job.status }}</a></p> | ||||
| </div> | ||||
|  | ||||
| <div class="col s12 m8"> | ||||
|   <div class="card"> | ||||
|     <div class="card-content"> | ||||
|       <span class="card-title">Details</span> | ||||
|       <p><b>Creation date</b>: {{ job.creation_date }}</p> | ||||
|       <p><b>Description</b>: {{ job.description }}</p> | ||||
|       <p><b>Memory</b>: {{ job.mem_mb }} MB</p> | ||||
|       <p><b>Cores</b>: {{ job.n_cores }}</p> | ||||
|       <p><b>Service</b>: {{ job.service }}</p> | ||||
|       <p><b>Service arguments</b>: {{ job.service_args }}</p> | ||||
|       <p><b>Service version</b>: {{ job.service_version }}</p> | ||||
|       <p><b>Status</b>: {{ job.status }}</p> | ||||
|       <p><b>Title</b>: {{ job.title }}</p> | ||||
|       <span class="card-title">Chronometrics</span> | ||||
|       <div class="row"> | ||||
|         <div class="col s12 m6"> | ||||
|           <div class="input-field"> | ||||
|             <input disabled value="{{ job.creation_date }}" id="creation-date" type="text" class="validate"> | ||||
|             <label for="creation-date">Creation date</label> | ||||
|           </div> | ||||
|         </div> | ||||
|         <div class="col s12 m6"> | ||||
|           <div class="input-field"> | ||||
|             <input disabled value="{{ job.end_date }}" id="end-date" type="text" class="validate"> | ||||
|             <label for="end-date">End date</label> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
|       <span class="card-title">Ressource allocations</span> | ||||
|       <div class="row"> | ||||
|         <div class="col s12 m6"> | ||||
|           <div class="input-field"> | ||||
|             <input disabled value="{{ job.mem_mb }}" id="mem-mb" type="text" class="validate"> | ||||
|             <label for="mem-mb">Memory</label> | ||||
|           </div> | ||||
|         </div> | ||||
|         <div class="col s12 m6"> | ||||
|           <div class="input-field"> | ||||
|             <input disabled value="{{ job.n_cores }}" id="n-cores" type="text" class="validate"> | ||||
|             <label for="n-cores">CPU cores</label> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
|       <span class="card-title">Service informations</span> | ||||
|       <div class="row"> | ||||
|         <div class="col s12 m4"> | ||||
|           <div class="input-field"> | ||||
|             <input disabled value="{{ job.service }}" id="service" type="text" class="validate"> | ||||
|             <label for="service">Service</label> | ||||
|           </div> | ||||
|         </div> | ||||
|         <div class="col s12 m4"> | ||||
|           <div class="input-field"> | ||||
|             <input disabled value="{{ job.service_args|escape }}" id="service-args" type="text" class="validate"> | ||||
|             <label for="service-args">Service arguments</label> | ||||
|           </div> | ||||
|         </div> | ||||
|         <div class="col s12 m4"> | ||||
|           <div class="input-field"> | ||||
|             <input disabled value="{{ job.service_version }}" id="service-version" type="text" class="validate"> | ||||
|             <label for="service-version">Service version</label> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
|       <p> | ||||
|       {% for file in input_files %} | ||||
|         <a href="file://{{ input_files[file] }}" class="waves-effect waves-light btn-small"> | ||||
|           <i class="material-icons left">file_download</i>{{ file }} | ||||
|         </a> | ||||
|       {% endfor %} | ||||
|       </p> | ||||
|  | ||||
|       <p> </p> | ||||
|  | ||||
|       <span class="card-title">Results</span> | ||||
|       <p> | ||||
|       {% for file in output_files %} | ||||
|         <a href="file://{{ output_files[file] }}" class="waves-effect waves-light btn-small"> | ||||
|           <i class="material-icons left">file_download</i>{{ file }} | ||||
|         </a> | ||||
|       {% endfor %} | ||||
|       </p> | ||||
|   </div> | ||||
| </div> | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user