added persistent and cant_close to PA_JobManager_FE_Message, used them from pa_job_manager to set status messages with persistence/close buttons appropriately for items like fix_dups/stale_jobs. When "fixing" now, the persistent Status message stays, but its now positioned approx. below the navbar on the right and is ok. Started on changing status to a more sensible naming conventions (away from alert to level) - more work to complete this
This commit is contained in:
@@ -503,6 +503,8 @@ class PA_JobManager_FE_Message(Base):
|
||||
job_id = Column(Integer, ForeignKey('job.id') )
|
||||
alert = Column(String)
|
||||
message = Column(String)
|
||||
persistent = Column(Boolean)
|
||||
cant_close = Column(Boolean)
|
||||
def __repr__(self):
|
||||
return "<id: {}, job_id: {}, alert: {}, message: {}".format(self.id, self.job_id, self.alert, self.message)
|
||||
|
||||
@@ -561,8 +563,8 @@ def NewJob(name, num_files=0, wait_for=None, jex=None, parent_job=None ):
|
||||
# MessageToFE(): sends a specific alert/messasge for a given job via the DB to
|
||||
# the front end
|
||||
##############################################################################
|
||||
def MessageToFE( job_id, alert, message ):
|
||||
msg = PA_JobManager_FE_Message( job_id=job_id, alert=alert, message=message)
|
||||
def MessageToFE( job_id, alert, message, persistent, cant_close ):
|
||||
msg = PA_JobManager_FE_Message( job_id=job_id, alert=alert, message=message, persistent=persistent, cant_close=cant_close)
|
||||
session.add(msg)
|
||||
session.commit()
|
||||
return msg.id
|
||||
@@ -904,7 +906,7 @@ def HandleJobs(first_run=False):
|
||||
job.pa_job_state = 'Stale'
|
||||
session.add(job)
|
||||
AddLogForJob( job, "ERROR: Job has been marked stale as it did not complete" )
|
||||
MessageToFE( job.id, "danger", f'Stale job, click <a href="javascript:document.body.innerHTML+=\'<form id=_fm method=GET action=/stale_jobs></form>\'; document.getElementById(\'_fm\').submit();">here</a> to restart or cancel' )
|
||||
MessageToFE( job.id, "danger", f'Stale job, click <a href="javascript:document.body.innerHTML+=\'<form id=_fm method=GET action=/stale_jobs></form>\'; document.getElementById(\'_fm\').submit();">here</a> to restart or cancel', True, False )
|
||||
session.commit()
|
||||
continue
|
||||
if job.pa_job_state == 'New':
|
||||
@@ -930,7 +932,7 @@ def HandleJobs(first_run=False):
|
||||
# threading.Thread(target=RunJob, args=(job,)).start()
|
||||
except Exception as e:
|
||||
try:
|
||||
MessageToFE( job.id, "danger", "Failed with: {} (try job log for details)".format(e) )
|
||||
MessageToFE( job.id, "danger", "Failed with: {} (try job log for details)".format(e), True, False )
|
||||
except Exception as e2:
|
||||
print("ERROR: Failed to let front-end know, but back-end Failed to run job (id: {}, name: {} -- orig exep was: {}, this exception was: {})".format( job.id, job.name, e, e2) )
|
||||
print("INFO: PA job manager is waiting for a job")
|
||||
@@ -954,7 +956,7 @@ def JobScanNow(job):
|
||||
JobProgressState( job, "In Progress" )
|
||||
ProcessImportDirs(job)
|
||||
FinishJob( job, "Completed (scan for new files)" )
|
||||
MessageToFE( job.id, "success", "Completed (scan for new files)" )
|
||||
MessageToFE( job.id, "success", "Completed (scan for new files)", False, False )
|
||||
return
|
||||
|
||||
##############################################################################
|
||||
@@ -964,7 +966,7 @@ def JobScanStorageDir(job):
|
||||
JobProgressState( job, "In Progress" )
|
||||
ProcessStorageDirs(job)
|
||||
FinishJob( job, "Completed (scan for new files)" )
|
||||
MessageToFE( job.id, "success", "Completed (scan for new files)" )
|
||||
MessageToFE( job.id, "success", "Completed (scan for new files)", False, False )
|
||||
return
|
||||
|
||||
|
||||
@@ -1078,7 +1080,7 @@ def JobForceScan(job):
|
||||
ProcessImportDirs(job)
|
||||
ProcessStorageDirs(job)
|
||||
FinishJob(job, "Completed (forced remove and recreation of all file data)")
|
||||
MessageToFE( job.id, "success", "Completed (forced remove and recreation of all file data)" )
|
||||
MessageToFE( job.id, "success", "Completed (forced remove and recreation of all file data)", False, False )
|
||||
return
|
||||
|
||||
##############################################################################
|
||||
@@ -1319,6 +1321,10 @@ def MoveFileToRecycleBin(job,del_me):
|
||||
bin_path=session.query(Path).join(PathType).filter(PathType.name=='Bin').first()
|
||||
parent_dir=session.query(Dir).join(PathDirLink).filter(PathDirLink.path_id==bin_path.id).first()
|
||||
|
||||
# check/delete if we already have a deleted file of this name/number (only # happened in testing, but jic)
|
||||
# 99.9% of the time, this will just delete nothing
|
||||
session.query(DelFile).filter(DelFile.file_eid==del_me.id).delete()
|
||||
|
||||
# if we ever need to restore, lets remember this file's original path
|
||||
# (use a string in case the dir/path is ever deleted from FS (and then DB) and we need to recreate)
|
||||
del_file_details = DelFile( file_eid=del_me.id, orig_path_prefix=del_me.in_dir.in_path.path_prefix )
|
||||
@@ -2036,7 +2042,7 @@ def JobCheckForDups(job):
|
||||
for row in res:
|
||||
if row.count > 0:
|
||||
AddLogForJob(job, f"Found duplicates, Creating Status message in front-end for attention")
|
||||
MessageToFE( job.id, "danger", f'Found duplicate(s), click <a href="javascript:document.body.innerHTML+=\'<form id=_fm method=POST action=/fix_dups></form>\'; document.getElementById(\'_fm\').submit();">here</a> to finalise import by removing duplicates' )
|
||||
MessageToFE( job.id, "danger", f'Found duplicate(s), click <a href="javascript:document.body.innerHTML+=\'<form id=_fm method=POST action=/fix_dups></form>\'; document.getElementById(\'_fm\').submit();">here</a> to finalise import by removing duplicates', True, True )
|
||||
else:
|
||||
FinishJob(job, f"No duplicates found")
|
||||
FinishJob(job, f"Finished looking for duplicates")
|
||||
@@ -2107,7 +2113,8 @@ def JobRemoveDups(job):
|
||||
|
||||
# Need to put another checkdups job in now to force / validate we have no dups
|
||||
next_job=NewJob( "checkdups" )
|
||||
AddLogForJob(job, "adding <a href='/job/{}'>job id={} {}</a> to confirm there are no more duplicates".format( next_job.id, next_job.id, next_job.name ) )
|
||||
AddLogForJob(job, f"adding <a href='/job/{next_job.id}'>job id={next_job.id} {next_job.name}</a> to confirm there are no more duplicates" )
|
||||
MessageToFE( job.id, "success", f"Finished Job#{job.id} removing duplicate files", False, False )
|
||||
return
|
||||
|
||||
####################################################################################################################################
|
||||
@@ -2137,7 +2144,7 @@ def JobMoveFiles(job):
|
||||
move_me=session.query(Entry).get(jex.value)
|
||||
MoveEntriesToOtherFolder( job, move_me, dst_storage_path, f"{prefix}{suffix}" )
|
||||
next_job=NewJob( "checkdups" )
|
||||
MessageToFE( job.id, "success", "Completed (move of selected files)" )
|
||||
MessageToFE( job.id, "success", "Completed (move of selected files)", False, False )
|
||||
FinishJob(job, f"Finished move selected file(s)")
|
||||
return
|
||||
|
||||
@@ -2152,7 +2159,7 @@ def JobDeleteFiles(job):
|
||||
del_me=session.query(Entry).join(File).filter(Entry.id==jex.value).first()
|
||||
MoveFileToRecycleBin(job,del_me)
|
||||
next_job=NewJob( "checkdups" )
|
||||
MessageToFE( job.id, "success", "Completed (delete of selected files)" )
|
||||
MessageToFE( job.id, "success", "Completed (delete of selected files)", False, False )
|
||||
FinishJob(job, f"Finished deleting selected file(s)")
|
||||
return
|
||||
|
||||
@@ -2167,7 +2174,7 @@ def JobRestoreFiles(job):
|
||||
restore_me=session.query(Entry).join(File).filter(Entry.id==jex.value).first()
|
||||
RestoreFile(job,restore_me)
|
||||
next_job=NewJob( "checkdups" )
|
||||
MessageToFE( job.id, "success", "Completed (restore of selected files)" )
|
||||
MessageToFE( job.id, "success", "Completed (restore of selected files)", False, False )
|
||||
FinishJob(job, f"Finished restoring selected file(s)")
|
||||
return
|
||||
|
||||
|
||||
Reference in New Issue
Block a user