orthancJob.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. import orthancDatabaseBrowser
  2. import datetime
  3. import time
  4. def checkJobStatus(net,jobId):
  5. #returns jobStatus as JSON (ErrorCode, ErrorDescription, ErrorDetails, Progress, State)
  6. apiUrl='/'.join([net.getCoreURL(),'jobs',f'{jobId}'])
  7. response=net.get(apiUrl)
  8. return orthancDatabaseBrowser.extractJSON(response.data)
  9. def monitorProgress(net,jobId,tSleepGuess=10):
  10. dateFormat='%Y%m%dT%H%M%S.%f'
  11. tSleep=tSleepGuess
  12. while True:
  13. #wait 10 s
  14. time.sleep(tSleep)
  15. jobStatus=checkJobStatus(net,jobId)
  16. if jobStatus['State']=="Success":
  17. print('Job succeeded')
  18. return True
  19. if jobStatus['State']=="Failure":
  20. print('Job failed')
  21. return False
  22. try:
  23. eta=datetime.datetime.strptime(jobStatus['EstimatedTimeOfArrival'],dateFormat)
  24. except KeyError:
  25. continue
  26. t0=datetime.datetime.strptime(jobStatus['Timestamp'],dateFormat)
  27. delta=eta-t0
  28. tSleep=0.05*delta.seconds
  29. tSleep=max(tSleep,tSleepGuess)
  30. print('Working: {}/100, ETA: {} s, next check {} s'.format(jobStatus['Progress'],delta.seconds,tSleep))