actually create a job for scan now, and let the job manager do the work and send back output via new PA_JobManager_FE_Message table
This commit is contained in:
@@ -202,7 +202,12 @@ class Settings(Base):
|
||||
### Initiatlise the file data set
|
||||
filedata = FileData()
|
||||
|
||||
#### DDP: work out the class creation line for just sqlalchemy
|
||||
################################################################################
|
||||
# classes for the job manager:
|
||||
# PA_JobManager overall status tracking),
|
||||
# Job (and Joblog) for each JOb, and
|
||||
# PA_Jobmanager_fe_message (to pass messages to the front-end web)
|
||||
################################################################################
|
||||
class PA_JobManager(Base):
|
||||
__tablename__ = "pa_job_manager"
|
||||
id = Column(Integer, Sequence('pa_job_manager_id_seq'), primary_key=True)
|
||||
@@ -213,20 +218,16 @@ class PA_JobManager(Base):
|
||||
def __repr__(self):
|
||||
return "<id={}, state={}, num_active_jobs={}, num_completed_jobs={}>".format( self.id, self.state, self.num_active_jobs, self.num_completed_jobs )
|
||||
|
||||
|
||||
class Joblog(Base):
|
||||
__tablename__ = "joblog"
|
||||
id = Column(Integer, Sequence('ill_id_seq'), primary_key=True )
|
||||
job_id = Column(Integer, ForeignKey('job.id'), primary_key=True )
|
||||
job_id = Column(Integer, ForeignKey('job.id') )
|
||||
log_date = Column(DateTime(timezone=True))
|
||||
log = Column(String)
|
||||
|
||||
def __repr__(self):
|
||||
return "<id: {}, job_id: {}, log: {}".format(self.id, self.job_id, self.log )
|
||||
|
||||
################################################################################
|
||||
# Class describing Action in the database, and via sqlalchemy, connected to the DB as well
|
||||
################################################################################
|
||||
class Job(Base):
|
||||
__tablename__ = "job"
|
||||
id = Column(Integer, Sequence('joblog_id_seq'), primary_key=True )
|
||||
@@ -245,6 +246,19 @@ class Job(Base):
|
||||
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)
|
||||
|
||||
class PA_JobManager_FE_Message(Base):
|
||||
__tablename__ = "pa_job_manager_fe_message"
|
||||
id = Column(Integer, Sequence('pa_job_manager_fe_message_id_seq'), primary_key=True )
|
||||
job_id = Column(Integer, ForeignKey('job.id'), primary_key=True )
|
||||
alert = Column(String)
|
||||
message = Column(String)
|
||||
def __repr__(self):
|
||||
return "<id: {}, job_id: {}, alert: {}, message: {}".format(self.id, self.job_id, self.alert, self.message)
|
||||
|
||||
def MessageToFE( job_id, alert, message ):
|
||||
msg = PA_JobManager_FE_Message( job_id=job_id, alert=alert, message=message)
|
||||
session.add(msg)
|
||||
session.commit()
|
||||
|
||||
def GetJobs():
|
||||
return session.query(Job).all()
|
||||
@@ -261,16 +275,19 @@ def InitialiseManager():
|
||||
|
||||
def RunJob(job):
|
||||
print("Run job: {}, pa_eng state: {}, internal job state: {}".format( job.name, job.pa_job_state, job.state) )
|
||||
if job.name =="scannow":
|
||||
print("scannow not being handled yet")
|
||||
JobScanNow(job)
|
||||
elif job.name =="forcescan":
|
||||
print("force scan not being handled yet")
|
||||
else:
|
||||
print("Requested to process unknown job type: {}".format(job.name))
|
||||
try:
|
||||
if job.name =="scannow":
|
||||
JobScanNow(job)
|
||||
elif job.name =="forcescan":
|
||||
print("force scan not being handled yet")
|
||||
else:
|
||||
print("Requested to process unknown job type: {}".format(job.name))
|
||||
except:
|
||||
MessageToFE( job.id, "danger", "Failed (see log for details)" )
|
||||
return
|
||||
|
||||
def HandleJobs():
|
||||
print("PA job manager is scanning for jobs")
|
||||
pa_eng.state = 'Scanning Jobs'
|
||||
jobs=GetJobs()
|
||||
for job in jobs:
|
||||
@@ -279,23 +296,19 @@ def HandleJobs():
|
||||
pa_eng.num_active_jobs = pa_eng.num_active_jobs + 1
|
||||
else:
|
||||
pa_eng.num_completed_jobs = pa_eng.num_completed_jobs +1
|
||||
print("PA job manager is up")
|
||||
print("PA job manager is waiting jobs")
|
||||
pa_eng.state = 'Waiting for new Jobs'
|
||||
return
|
||||
|
||||
def JobScanNow(job):
|
||||
print("About to call GenerateFileData()")
|
||||
filedata.GenerateFileData()
|
||||
print( "need to update job");
|
||||
job.state="Completed"
|
||||
job.pa_job_state="Completed"
|
||||
job.last_update=datetime.now(pytz.utc)
|
||||
MessageToFE( job.id, "success", "Completed (scan for new files)" )
|
||||
session.commit()
|
||||
return
|
||||
|
||||
def UpdateJob():
|
||||
return
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("PA job manager starting")
|
||||
try:
|
||||
@@ -304,10 +317,5 @@ if __name__ == "__main__":
|
||||
except Exception as e:
|
||||
print( "Failed to initialise PA Job Manager: {}".format(e) )
|
||||
session.rollback()
|
||||
HandleJobs()
|
||||
print("Exiting for now: {}".format( pa_eng ))
|
||||
cnt=0
|
||||
while cnt < 3:
|
||||
HandleJobs()
|
||||
time.sleep(60)
|
||||
cnt=cnt+1
|
||||
|
||||
|
||||
Reference in New Issue
Block a user