Skip to content
Snippets Groups Projects
Commit f8b03320 authored by sveseli's avatar sveseli
Browse files

first stab at file upload functionality

parent 83795aca
No related branches found
No related tags found
No related merge requests found
......@@ -12,6 +12,6 @@ if [ -z $DM_ROOT_DIR ]; then
source $setupFile > /dev/null
fi
$DM_ROOT_DIR/src/python/dm/daq_web_service/cli/uploadDataCli.py $@
$DM_ROOT_DIR/src/python/dm/daq_web_service/cli/startUploadCli.py $@
......@@ -34,6 +34,18 @@ class ExperimentRestApi(DaqRestApi):
responseDict = self.sendSessionRequest(url=url, method='POST')
return Experiment(responseDict)
@DaqRestApi.execute
def startUpload(self, name, dataDirectory):
url = '%s/experiments/startUpload' % (self.getContextRoot())
if name is None or not len(name):
raise InvalidRequest('Experiment name must be provided.')
url += '?name=%s' % Encoder.encode(name)
if dataDirectory is None or not len(dataDirectory):
raise InvalidRequest('Experiment data directory must be provided.')
url += '&dataDirectory=%s' % Encoder.encode(dataDirectory)
responseDict = self.sendSessionRequest(url=url, method='POST')
return Experiment(responseDict)
#######################################################################
# Testing.
......
......@@ -4,9 +4,9 @@ from daqWebServiceSessionCli import DaqWebServiceSessionCli
from dm.daq_web_service.api.experimentRestApi import ExperimentRestApi
from dm.common.exceptions.invalidRequest import InvalidRequest
class UploadDataCli(DaqWebServiceSessionCli):
class StartUploadCli(DaqWebServiceSessionCli):
def __init__(self):
DaqWebServiceCli.__init__(self)
DaqWebServiceSessionCli.__init__(self)
self.addOption('', '--experiment', dest='experimentName', help='Experiment name.')
self.addOption('', '--data-directory', dest='dataDirectory', help='Experiment data directory.')
......@@ -24,19 +24,19 @@ class UploadDataCli(DaqWebServiceSessionCli):
def runCommand(self):
self.parseArgs(usage="""
dm-upload-data --name=EXPERIMENTNAME --data-directory=DATADIRECTORY
dm-start-upload --name=EXPERIMENTNAME --data-directory=DATADIRECTORY
Description:
Schedules data upload for a given experiment.
""")
self.checkArgs()
api = ExperimentRestApi(self.getLoginUsername(), self.getLoginPassword(), self.getServiceHost(), self.getServicePort(), self.getServiceProtocol())
experiment = api.uploadData(self.getExperimentName(), self.getDataDirectory())
experiment = api.startUpload(self.getExperimentName(), self.getDataDirectory())
print experiment.getDisplayString(self.getDisplayKeys(), self.getDisplayFormat())
#######################################################################
# Run command.
if __name__ == '__main__':
cli = UploadDataCli()
cli = StartUploadCli()
cli.run()
......@@ -37,6 +37,15 @@ class ExperimentRouteDescriptor:
'method' : ['POST']
},
# Start experiment data upload
{
'name' : 'startUpload',
'path' : '%s/experiments/startUpload' % contextRoot,
'controller' : experimentSessionController,
'action' : 'startUpload',
'method' : ['POST']
},
]
return routes
......
......@@ -43,3 +43,19 @@ class ExperimentSessionController(DmSessionController):
self.logger.debug('Returning: %s' % response)
return response
@cherrypy.expose
@DmSessionController.require(DmSessionController.isLoggedIn())
@DmSessionController.execute
def startUpload(self, **kwargs):
name = kwargs.get('name')
if name is None or not len(name):
raise InvalidRequest('Missing experiment name.')
name = Encoder.decode(name)
dataDirectory = kwargs.get('dataDirectory')
if dataDirectory is None or not len(dataDirectory):
raise InvalidRequest('Missing experiment data directory.')
dataDirectory = Encoder.decode(dataDirectory)
response = self.experimentSessionControllerImpl.startUpload(name, dataDirectory).getFullJsonRep()
self.logger.debug('Returning: %s' % response)
return response
......@@ -9,9 +9,12 @@ import time
from dm.common.objects.experiment import Experiment
from dm.common.objects.dmObjectManager import DmObjectManager
from dm.common.exceptions.invalidRequest import InvalidRequest
from dm.common.utility.osUtility import OsUtility
from dm.common.objects.observedFile import ObservedFile
from dm.ds_web_service.api.dsRestApiFactory import DsRestApiFactory
from experimentTracker import ExperimentTracker
from fileSystemObserver import FileSystemObserver
from fileProcessingManager import FileProcessingManager
class ExperimentSessionControllerImpl(DmObjectManager):
""" Experiment session controller implementation class. """
......@@ -40,3 +43,17 @@ class ExperimentSessionControllerImpl(DmObjectManager):
experiment['daqEndTime'] = time.time()
FileSystemObserver.getInstance().stopObservingPath(dataDirectory, experiment)
return experiment
def startUpload(self, name, dataDirectory):
experiment = self.dsExperimentApi.getExperimentByName(name)
storageDirectory = experiment.get('storageDirectory')
if storageDirectory is None:
raise InvalidRequest('Experiment %s has not been started.' % name)
filePaths = OsUtility.findFiles(dataDirectory)
fileProcessingManager = FileProcessingManager.getInstance()
for filePath in filePaths:
observedFile = ObservedFile(filePath=filePath, daqPath=dataDirectory, experiment=experiment)
fileProcessingManager.processObservedFile(observedFile)
ExperimentTracker.getInstance().put(name, experiment)
return experiment
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment