From 20fc0967d751c8cf4fa9b924c221511ea3a93873 Mon Sep 17 00:00:00 2001 From: Sinisa Veseli <sveseli@aps.anl.gov> Date: Thu, 8 Oct 2015 07:10:16 +0000 Subject: [PATCH] added stat interface; separate user management --- .../service/impl/experimentManager.py | 52 +++++++++++++++---- 1 file changed, 41 insertions(+), 11 deletions(-) diff --git a/src/python/dm/ds_web_service/service/impl/experimentManager.py b/src/python/dm/ds_web_service/service/impl/experimentManager.py index 586f2a2e..1649e744 100755 --- a/src/python/dm/ds_web_service/service/impl/experimentManager.py +++ b/src/python/dm/ds_web_service/service/impl/experimentManager.py @@ -11,8 +11,10 @@ from dm.common.utility.osUtility import OsUtility from dm.common.utility.valueUtility import ValueUtility from dm.common.utility.objectUtility import ObjectUtility from dm.common.utility.threadingUtility import ThreadingUtility +from dm.common.utility.fileUtility import FileUtility from dm.common.db.api.experimentDbApi import ExperimentDbApi from dm.common.processing.fileProcessingManager import FileProcessingManager +from dm.common.exceptions.objectNotFound import ObjectNotFound class ExperimentManager(Singleton): @@ -75,6 +77,29 @@ class ExperimentManager(Singleton): experiment['storageHost'] = ConfigurationManager.getInstance().getHost() return storageDirectory + def addUserToGroup(self, username, experimentName): + experiment = self.experimentDbApi.getExperimentWithUsers(experimentName) + storageDirectory = self.__getExperimentStorageDataDirectory(experiment) + if os.path.exists(storageDirectory): + self.platformUtility.addUserToGroup(username, experimentName) + + def createExperimentGroup(self, experiment): + experimentName = experiment.get('name') + storageDirectory = experiment.get('storageDirectory') + + # Create experiment group + self.platformUtility.createGroup(experimentName) + self.logger.debug('Setting permissions for %s to %s' % (storageDirectory, self.DIR_PERMISSIONS_MODE)) + OsUtility.chmodPath(storageDirectory, dirMode=self.DIR_PERMISSIONS_MODE) + self.logger.debug('Changing group owner for %s to %s' % (storageDirectory, experimentName)) + self.platformUtility.changePathGroupOwner(storageDirectory, experimentName) + + # Add users to group + experimentUsers = experiment.get('experimentUsernameList', []) + self.logger.debug('Found experiment users: %s', experimentUsers) + for username in experimentUsers: + self.platformUtility.addUserToGroup(username, experimentName) + @ThreadingUtility.synchronize def createExperimentDataDirectory(self, experiment): experimentName = experiment.get('name') @@ -87,17 +112,7 @@ class ExperimentManager(Singleton): experiment['storageDirectory'] = storageDirectory experiment['storageHost'] = ConfigurationManager.getInstance().getHost() if self.manageStoragePermissions: - # Create experiment group - self.platformUtility.createGroup(experimentName) - self.logger.debug('Setting permissions for %s to %s' % (storageDirectory, self.DIR_PERMISSIONS_MODE)) - OsUtility.chmodPath(storageDirectory, dirMode=self.DIR_PERMISSIONS_MODE) - self.logger.debug('Changing group owner for %s to %s' % (storageDirectory, experimentName)) - self.platformUtility.changePathGroupOwner(storageDirectory, experimentName) - - experimentUsers = experiment.get('experimentUsernameList', []) - self.logger.debug('Found experiment users: %s', experimentUsers) - for username in experimentUsers: - self.platformUtility.addUserToGroup(username, experimentName) + self.createExperimentGroup(experiment) @ThreadingUtility.synchronize def processExperimentFile(self, experimentFilePath, experiment, fileInfo={}): @@ -119,6 +134,21 @@ class ExperimentManager(Singleton): else: self.logger.debug('File path %s does not exist' % filePath) + def statExperimentFile(self, experimentFilePath, experiment, fileInfo={}): + experimentName = experiment.get('name') + self.updateExperimentWithStorageDataDirectory(experiment) + storageDirectory = experiment.get('storageDirectory') + filePath = os.path.join(storageDirectory, experimentFilePath) + fileInfo['filePath'] = filePath + if os.path.exists(filePath): + self.logger.debug('Getting stat for file path %s' % (filePath)) + FileUtility.statFile(filePath, fileInfo) + FileUtility.getMd5Sum(filePath, fileInfo) + self.logger.debug('File Info after stat: %s' % (fileInfo)) + else: + self.logger.debug('File path %s does not exist' % filePath) + raise ObjectNotFound('File %s does not exist' % filePath) + @ThreadingUtility.synchronize def start(self): self.logger.debug('Started experiment manager') -- GitLab