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

introduced interface for notifying ds service to update experiment users; fix...

introduced interface for notifying ds service to update experiment users; fix bug in linux experiment utility
parent cd1a3d7e
No related branches found
No related tags found
No related merge requests found
......@@ -50,7 +50,7 @@ class LinuxUtility:
def setGroupUsers(cls, groupName, usernameList):
""" Set list of users for a given group. """
logger = cls.getLogger()
logger.debug('Setting group %s users to: %s' % (groupName, username))
logger.debug('Setting group %s users to: %s' % (groupName, usernameList))
cmd = '%s -M "%s" %s' % (cls.GPASSWD_CMD, ','.join(usernameList), groupName)
cls.executeSudoCommand(cmd)
......
......@@ -51,6 +51,15 @@ class ExperimentRestApi(DsRestApi):
responseDict = self.sendSessionRequest(url=url, method='PUT')
return Experiment(responseDict)
@DsRestApi.execute
def updateExperiment(self, name):
url = '%s/experiments/update' % (self.getContextRoot())
if name is None or not len(name):
raise InvalidRequest('Experiment name must be provided.')
url += '?name=%s' % Encoder.encode(name)
responseDict = self.sendSessionRequest(url=url, method='PUT')
return Experiment(responseDict)
@DsRestApi.execute
def stopExperiment(self, name):
url = '%s/experiments/stop' % (self.getContextRoot())
......
#!/usr/bin/env python
from dm.ds_web_service.api.experimentRestApi import ExperimentRestApi
from dm.common.exceptions.invalidRequest import InvalidRequest
from dsWebServiceSessionCli import DsWebServiceSessionCli
class UpdateExperimentCli(DsWebServiceSessionCli):
def __init__(self):
DsWebServiceSessionCli.__init__(self)
self.addOption('', '--experiment', dest='experimentName', help='Experiment name.')
def checkArgs(self):
if self.options.experimentName is None:
raise InvalidRequest('Experiment name must be provided.')
def getExperimentName(self):
return self.options.experimentName
def runCommand(self):
self.parseArgs(usage="""
dm-update-experiment --experiment=EXPERIMENTNAME
Description:
Updates experiment group users.
""")
self.checkArgs()
api = ExperimentRestApi(self.getLoginUsername(), self.getLoginPassword(), self.getServiceHost(), self.getServicePort(), self.getServiceProtocol())
experiment = api.updateExperiment(self.getExperimentName())
print experiment.getDisplayString(self.getDisplayKeys(), self.getDisplayFormat())
#######################################################################
# Run command.
if __name__ == '__main__':
cli = UpdateExperimentCli()
cli.run()
......@@ -73,6 +73,15 @@ class ExperimentRouteDescriptor:
'method' : ['PUT']
},
# Update experiment
{
'name' : 'updateExperiment',
'path' : '%s/experiments/update' % contextRoot,
'controller' : experimentSessionController,
'action' : 'updateExperiment',
'method' : ['PUT']
},
# Stop experiment
{
'name' : 'stopExperiment',
......
......@@ -79,6 +79,18 @@ class ExperimentSessionController(DmSessionController):
self.logger.debug('Returning: %s' % response)
return response
@cherrypy.expose
@DmSessionController.require(DmSessionController.isAdministrator())
@DmSessionController.execute
def updateExperiment(self, **kwargs):
name = kwargs.get('name')
if name is None or not len(name):
raise InvalidRequest('Missing experiment name.')
name = Encoder.decode(name)
response = self.experimentSessionControllerImpl.updateExperiment(name).getFullJsonRep()
self.logger.debug('Returning: %s' % response)
return response
@cherrypy.expose
@DmSessionController.require(DmSessionController.isAdministrator())
@DmSessionController.execute
......
......@@ -97,9 +97,15 @@ class ExperimentManager(Singleton):
# 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)
self.platformUtility.setGroupUsers(experimentName, experimentUsers)
#for username in experimentUsers:
# self.platformUtility.addUserToGroup(username, experimentName)
def updateExperimentGroupUsers(self, experiment):
experimentName = experiment.get('name')
experimentUsers = experiment.get('experimentUsernameList', [])
self.platformUtility.setGroupUsers(experimentName, experimentUsers)
@ThreadingUtility.synchronize
def createExperimentDataDirectory(self, experiment):
experimentName = experiment.get('name')
......
......@@ -49,6 +49,13 @@ class ExperimentSessionControllerImpl(DmObjectManager):
ExperimentManager.getInstance().createExperimentDataDirectory(experiment)
return experiment
def updateExperiment(self, name):
experiment = self.experimentDbApi.getExperimentWithUsers(name)
if experiment.get('startDate') is None:
raise InvalidRequest('Experiment %s has not been started.' % name)
ExperimentManager.getInstance().updateExperimentGroupUsers(experiment)
return experiment
def stopExperiment(self, name):
experiment = self.experimentDbApi.getExperimentByName(name)
if experiment.get('endDate') is None:
......
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