1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- import orthancInterface
- import orthancDatabaseBrowser
- import json
- import time
- import datetime
- def getStatus(jobStatus):
- return jobStatus['State']
-
- def isComplete(jobStatus):
- return getStatus(jobStatus)=='Success'
- class orthancPeers:
- def __init__(self,net):
- self.net=net
- def addPeer(self,name,url,username,password):
- v={"Url":url,"Username":username,"Password":password}
- jsonData=json.dumps(v)
- apiUrl=self.net.getCoreURL()
- apiUrl+=f'/peers/{name}'
- response=self.net.put(apiUrl,jsonData,'json')
- #empty response
- def deletePeer(self,name):
- apiUrl=self.net.getCoreURL()
- apiUrl+=f'/peers/{name}'
- response=self.net.delete(apiUrl)
- #empty response
- def createSendJob(self,name,orthancId):
- #returns jobDescription as JSON (ID,Path)
- apiUrl=self.net.getCoreURL()
- apiUrl+=f'/peers/{name}/store'
- #response=self.net.post(apiUrl,orthancId,'text')
- v={"Resources":[f'{orthancId}'],"Synchronous":False}
- jsonData=json.dumps(v)
- response=self.net.post(apiUrl,jsonData,'json')
- return orthancDatabaseBrowser.extractJSON(response.data)
- def checkJobStatus(self,jobId):
- #returns jobStatus as JSON (ErrorCode, ErrorDescription, ErrorDetails, Progress, State)
- apiUrl=self.net.getCoreURL()
- apiUrl+=f'/jobs/{jobId}'
- response=self.net.get(apiUrl)
- return orthancDatabaseBrowser.extractJSON(response.data)
- def test(self,name):
- apiUrl=self.net.getCoreURL()
- apiUrl+=f'/peers/{name}/system'
- response=self.net.get(apiUrl)
- return orthancDatabaseBrowser.extractJSON(response.data)
- def list(self):
- apiUrl=self.net.getCoreURL()
- apiUrl+=f'/peers?expand'
- response=self.net.get(apiUrl)
- return orthancDatabaseBrowser.extractJSON(response.data)
- def sendResource(self,name,orthancId):
- jobDescription=self.createSendJob(name,orthancId)
- jobId=jobDescription['ID']
- self.monitorProgress(jobId)
- def monitorProgress(self,jobId,tSleepGuess=10):
- dateFormat='%Y%m%dT%H%M%S.%f'
- tSleep=tSleepGuess
- while True:
- #wait 10 s
- time.sleep(tSleep)
- jobStatus=self.checkJobStatus(jobId)
- if jobStatus['State']=="Success":
- print('Job succeeded')
- return
- if jobStatus['State']=="Failure":
- print('Job failed')
- return
- try:
- eta=datetime.datetime.strptime(jobStatus['EstimatedTimeOfArrival'],dateFormat)
- except KeyError:
- continue
- t0=datetime.datetime.strptime(jobStatus['Timestamp'],dateFormat)
- delta=eta-t0
- tSleep=0.05*delta.seconds
- tSleep=max(tSleep,tSleepGuess)
- print('Working: {}/100, ETA: {} s, next check {} s'.format(jobStatus['Progress'],delta.seconds,tSleep))
-
|