fixed up JobExtra printout in class, also put it in job.py, and passed extras to templates/jobs.html to show the extra details on the jobs list page so we can see what path is imported for example
This commit is contained in:
23
job.py
23
job.py
@@ -10,6 +10,19 @@ import pytz
|
|||||||
import socket
|
import socket
|
||||||
from shared import PA_JOB_MANAGER_HOST, PA_JOB_MANAGER_PORT
|
from shared import PA_JOB_MANAGER_HOST, PA_JOB_MANAGER_PORT
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Class describing Job in the database, and via sqlalchemy, connected to the DB as well
|
||||||
|
################################################################################
|
||||||
|
class JobExtra(db.Model):
|
||||||
|
__tablename__ = "jobextra"
|
||||||
|
id = db.Column(db.Integer, db.Sequence('jobextra_id_seq'), primary_key=True )
|
||||||
|
job_id = db.Column(db.Integer, db.ForeignKey('job.id') )
|
||||||
|
name = db.Column(db.String)
|
||||||
|
value = db.Column(db.String)
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return "<id: {}, job_id: {}, name: {}, value: {}>".format(self.id, self.job_id, self.name, self.value )
|
||||||
|
|
||||||
class Joblog(db.Model):
|
class Joblog(db.Model):
|
||||||
id = db.Column(db.Integer, db.Sequence('ill_id_seq'), primary_key=True )
|
id = db.Column(db.Integer, db.Sequence('ill_id_seq'), primary_key=True )
|
||||||
job_id = db.Column(db.Integer, db.ForeignKey('job.id'), primary_key=True )
|
job_id = db.Column(db.Integer, db.ForeignKey('job.id'), primary_key=True )
|
||||||
@@ -19,9 +32,6 @@ class Joblog(db.Model):
|
|||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return "<id: {}, job_id: {}, log: {}".format(self.id, self.job_id, self.log )
|
return "<id: {}, job_id: {}, log: {}".format(self.id, self.job_id, self.log )
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Class describing Job in the database, and via sqlalchemy, connected to the DB as well
|
|
||||||
################################################################################
|
|
||||||
class Job(db.Model):
|
class Job(db.Model):
|
||||||
id = db.Column(db.Integer, db.Sequence('joblog_id_seq'), primary_key=True )
|
id = db.Column(db.Integer, db.Sequence('joblog_id_seq'), primary_key=True )
|
||||||
start_time = db.Column(db.DateTime(timezone=True))
|
start_time = db.Column(db.DateTime(timezone=True))
|
||||||
@@ -36,15 +46,18 @@ class Job(db.Model):
|
|||||||
wait_for = db.Column(db.Integer)
|
wait_for = db.Column(db.Integer)
|
||||||
pa_job_state = db.Column(db.String)
|
pa_job_state = db.Column(db.String)
|
||||||
|
|
||||||
|
extra = db.relationship( "JobExtra")
|
||||||
|
logs = db.relationship( "Joblog")
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return "<id: {}, start_time: {}, last_update: {}, name: {}, state: {}, num_passes: {}, current_passes: {}, num_files: {}, current_file_num: {}, current_file: {}>".format(self.id, self.start_time, self.last_update, self.name, self.state, self.num_passes, self.current_pass, self.num_files, self.num_files, self.current_file_num, self.current_file)
|
return "<id: {}, start_time: {}, last_update: {}, name: {}, state: {}, num_passes: {}, current_pass: {}, num_files: {}, current_file_num: {}, current_file: {}, pa_job_state: {}, wait_for: {}, extra: {}, logs: {}>".format(self.id, self.start_time, self.last_update, self.name, self.state, self.num_passes, self.current_pass, self.num_files, self.current_file_num, self.current_file, self.pa_job_state, self.wait_for, self.extra, self.logs)
|
||||||
|
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
# Utility classes for Jobs
|
# Utility classes for Jobs
|
||||||
################################################################################
|
################################################################################
|
||||||
def GetNumActiveJobs():
|
def GetNumActiveJobs():
|
||||||
ret = db.engine.execute("select count(1) from job where pa_job_state != 'Completed'").first()
|
ret = db.engine.execute("select count(1) from job where pa_job_state is distinct from 'Completed'").first()
|
||||||
return ret.count
|
return ret.count
|
||||||
|
|
||||||
def WakePAJobManager():
|
def WakePAJobManager():
|
||||||
|
|||||||
@@ -261,7 +261,7 @@ class Job(Base):
|
|||||||
extra = relationship( "JobExtra")
|
extra = relationship( "JobExtra")
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return "<id: {}, start_time: {}, last_update: {}, name: {}, state: {}, num_passes: {}, current_passes: {}, num_files: {}, current_file_num: {}, current_file: {}, pa_job_state: {}, wait_for: {}, extra: {}, logs: {}>".format(self.id, self.start_time, self.last_update, self.name, self.state, self.num_passes, self.current_pass, self.num_files, self.num_files, self.current_file_num, self.current_file, self.pa_job_state, self.wait_for, self.extra, self.logs)
|
return "<id: {}, start_time: {}, last_update: {}, name: {}, state: {}, num_passes: {}, current_pass: {}, num_files: {}, current_file_num: {}, current_file: {}, pa_job_state: {}, wait_for: {}, extra: {}, logs: {}>".format(self.id, self.start_time, self.last_update, self.name, self.state, self.num_passes, self.current_pass, self.num_files, self.current_file_num, self.current_file, self.pa_job_state, self.wait_for, self.extra, self.logs)
|
||||||
|
|
||||||
class PA_JobManager_FE_Message(Base):
|
class PA_JobManager_FE_Message(Base):
|
||||||
__tablename__ = "pa_job_manager_fe_message"
|
__tablename__ = "pa_job_manager_fe_message"
|
||||||
@@ -427,7 +427,6 @@ def JobImportDir(job):
|
|||||||
if os.path.isdir(file):
|
if os.path.isdir(file):
|
||||||
path_prefix=os.path.join(symlink,fname)
|
path_prefix=os.path.join(symlink,fname)
|
||||||
dir=AddDir( job, fname, path_prefix, dir )
|
dir=AddDir( job, fname, path_prefix, dir )
|
||||||
print("DEBUG(adddir)");
|
|
||||||
else:
|
else:
|
||||||
file_cnt=file_cnt+1
|
file_cnt=file_cnt+1
|
||||||
if isImage(file):
|
if isImage(file):
|
||||||
@@ -438,7 +437,6 @@ def JobImportDir(job):
|
|||||||
type_str = 'File'
|
type_str = 'File'
|
||||||
fsize = round(os.stat(file).st_size/(1024*1024))
|
fsize = round(os.stat(file).st_size/(1024*1024))
|
||||||
e=AddFile( job, os.path.basename(fname), type_str, fsize, dir )
|
e=AddFile( job, os.path.basename(fname), type_str, fsize, dir )
|
||||||
print("DEBUG(addfile)");
|
|
||||||
else:
|
else:
|
||||||
AddLogForJob(job, "DEBUG: {} - {} is OLDER than {}".format( file, stat.st_ctime, last_import_date ), file )
|
AddLogForJob(job, "DEBUG: {} - {} is OLDER than {}".format( file, stat.st_ctime, last_import_date ), file )
|
||||||
print("DEBUG: {} - {} is OLDER than {}".format( file, stat.st_ctime, last_import_date ), file )
|
print("DEBUG: {} - {} is OLDER than {}".format( file, stat.st_ctime, last_import_date ), file )
|
||||||
@@ -448,7 +446,6 @@ def JobImportDir(job):
|
|||||||
job.state = "Completed"
|
job.state = "Completed"
|
||||||
job.last_updated = datetime.now(pytz.utc)
|
job.last_updated = datetime.now(pytz.utc)
|
||||||
# settings.last_import_date = time.time()
|
# settings.last_import_date = time.time()
|
||||||
print ("DEBUG-END: finished Job import dir: {}".format(job))
|
|
||||||
else:
|
else:
|
||||||
AddLogForJob(job, "Finished Importing: {} -- Path does not exist".format( path) )
|
AddLogForJob(job, "Finished Importing: {} -- Path does not exist".format( path) )
|
||||||
job.pa_job_state = "Completed"
|
job.pa_job_state = "Completed"
|
||||||
|
|||||||
@@ -3,6 +3,10 @@
|
|||||||
{% block main_content %}
|
{% block main_content %}
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<h3>{{page_title}}</h3>
|
<h3>{{page_title}}</h3>
|
||||||
|
<div class="row col-lg-12">
|
||||||
|
<label class="form-control-plaintext col-lg-2">Job #:</label>
|
||||||
|
<label class="form-control-plaintext col-lg-10">{{job.id}}</label>
|
||||||
|
</div>
|
||||||
<div class="row col-lg-12">
|
<div class="row col-lg-12">
|
||||||
<label class="form-control-plaintext col-lg-2">Name:</label>
|
<label class="form-control-plaintext col-lg-2">Name:</label>
|
||||||
<label class="form-control-plaintext col-lg-10">{{job.name}}</label>
|
<label class="form-control-plaintext col-lg-10">{{job.name}}</label>
|
||||||
|
|||||||
@@ -7,14 +7,14 @@
|
|||||||
var completed_rows=Array()
|
var completed_rows=Array()
|
||||||
|
|
||||||
{% for job in jobs %}
|
{% for job in jobs %}
|
||||||
row=`
|
row='<tr><td><a href="{{url_for('joblog', id=job.id)}}">{{job.name}}</a>'
|
||||||
<tr><td>
|
{% for ex in job.extra %}
|
||||||
<a href="{{url_for('joblog', id=job.id )}}">{{job.name}}</td><td>{{job.start_time}}</td>
|
row+=' ({{ex.name}} == {{ ex.value }})'
|
||||||
<td>
|
{% endfor %}
|
||||||
`
|
row+= '</td><td>{{job.start_time}}</td><td>'
|
||||||
{% if job.pa_job_state != "Completed" %}
|
{% if job.pa_job_state != "Completed" %}
|
||||||
row +=`
|
row +=`
|
||||||
Not yet
|
In Progress (no details yet)
|
||||||
</td></tr>
|
</td></tr>
|
||||||
`
|
`
|
||||||
active_rows.push(row)
|
active_rows.push(row)
|
||||||
|
|||||||
Reference in New Issue
Block a user