Skip to content
Snippets Groups Projects
experimentSessionControllerImpl.py 2.56 KiB
Newer Older
#!/usr/bin/env python

#
# Implementation for experiment session controller.
#

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. """

    def __init__(self):
        DmObjectManager.__init__(self)
        self.dsExperimentApi = DsRestApiFactory.getExperimentRestApi()

    def startDaq(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)
        experiment['daqDataDirectory'] = dataDirectory 
        experiment['daqStartTime'] = startTime
        FileSystemObserver.getInstance().startObservingPath(dataDirectory, experiment)
        ExperimentTracker.getInstance().put(name, experiment)
        experiment = ExperimentTracker.getInstance().get(name)
        if experiment is None or experiment.get('daqEndTime') is not None:
            raise InvalidRequest('Experiment %s is not active.' % name)
        dataDirectory = experiment.get('dataDirectory')
        experiment['daqEndTime'] = time.time()
        FileSystemObserver.getInstance().stopObservingPath(dataDirectory, experiment)
sveseli's avatar
sveseli committed
    def upload(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