def _monitorCurrentRecording(self,recProcess,recordingJob): done = False #this is testing: emergencyCount=0; jobID=recordingJob.getEPGInfo().getJobID() isRecurrentWriteError=False recPath = self._config.getRecordingPath() videoSize=OSTools.getDirectorySize(recPath) xtime.sleep(self.HEARTBEAT) self._log("Monitoring JOB "+jobID) while not done: result = recProcess.poll() isAlive = result is None if isAlive: currentSize = OSTools.getDirectorySize(recPath) delta = currentSize - videoSize print(("JOB "+jobID+" - bytes written:"+str(delta))) #live sign- not logging videoSize = currentSize if delta == 0: self._log("JOB "+jobID+" does not write any data") if isRecurrentWriteError: done=True self._log("Terminating Rec process, preventing reschedule.. ") recProcess.terminate() self.__handleProcessTermination(recProcess) isRecurrentWriteError=True #only on retry permitted else: self._log("Quit JOB "+jobID) self.__handleProcessTermination(recProcess) done=True if not done: #Ensure that an adjacent job can follow - decrease the wait time gludu=recordingJob.getGluedDurance() endtime = OSTools.addToDateTime(recordingJob.getExecutionTime(),gludu) delta = max(10,OSTools.getDifferenceInSeconds(endtime,datetime.now())) sleepTime = min(self.HEARTBEAT,delta) if sleepTime != self.HEARTBEAT: emergencyCount+=1; endTimeString=endtime.strftime("%H:%M.%S") startTimeString = recordingJob.getExecutionTime().strftime("%H:%M.%S") self._log("Stopping in seconds: %d (Info Start: %s expected end: %s with dur %d)"%(sleepTime,startTimeString,endTimeString,gludu))#log only the fragments if emergencyCount > 10: self._log("REC Q error- force process termination") recProcess.terminate() self.__handleProcessTermination(recProcess) done=True xtime.sleep(sleepTime) self._log("JOB "+jobID+" is done") OSTools.syncFiles()
def getEndTime(self): return OSTools.addToDateTime(self._execTime, self._duranceInSeconds)
def isMaintenanceNeeded(self,recInfo): maintenanceDurance = 15*60; nextStart = OSTools.getDateTimeWithOffset(self.MAINT_DAY) maintEnd = OSTools.addToDateTime(nextStart, maintenanceDurance) scheduledStartTime = recInfo.getEPGInfo().getStartTime() return maintEnd <= scheduledStartTime