#!/usr/bin/env python import os import time from dm.common.utility.loggingManager import LoggingManager from dm.common.utility.timeUtility import TimeUtility from dm.common.processing.plugins.fileProcessor import FileProcessor from dm.common.mongodb.api.fileMongoDbApi import FileMongoDbApi from dm.common.utility.dmSubprocess import DmSubprocess class ScriptProcessingPlugin(FileProcessor): PROCESSING_SCRIPT_KEY = 'processingScript' def __init__(self): FileProcessor.__init__(self) self.fileMongoDbApi = FileMongoDbApi() self.logger = LoggingManager.getInstance().getLogger(self.__class__.__name__) def processFile(self, fileInfo): experimentName = fileInfo.get('experimentName') experimentFilePath = fileInfo.get('experimentFilePath') daqInfo = fileInfo.get('daqInfo', {}) processingScript = daqInfo.get(self.PROCESSING_SCRIPT_KEY) if not processingScript: self.logger.debug('Ignoring file %s for experiment %s' % (experimentFilePath, experimentName)) return self.logger.debug('Processing file %s for experiment %s' % (experimentFilePath, experimentName)) storageDirectory = fileInfo.get('storageDirectory') storageFilePath = os.path.join(storageDirectory, experimentFilePath) # Process file try: p = DmSubprocess('%s %s' % (processingScript, storageFilePath)) p.run() stdOut = p.getStdOut() except Exception, ex: self.logger.error('Cannot process file %s for experiment %s: %s' % (experimentFilePath, experimentName, ex)) return # Prepare catalogging entry fileInfo2 = {} fileInfo2['fileName'] = os.path.basename(experimentFilePath) fileInfo2['experimentName'] = experimentName fileInfo2['processingScriptOutput'] = '%s' % stdOut.strip() self.fileMongoDbApi.updateOrAddExperimentFile(fileInfo2) ####################################################################### # Testing. if __name__ == '__main__': pass