diff --git a/SAS/ResourceAssignment/ResourceAssignmentDatabase/radb.py b/SAS/ResourceAssignment/ResourceAssignmentDatabase/radb.py index 4489152a7b0a67c834de6574f7524492951bd883..9f2662409406c2e68feecf51a9989de0e18130d1 100644 --- a/SAS/ResourceAssignment/ResourceAssignmentDatabase/radb.py +++ b/SAS/ResourceAssignment/ResourceAssignmentDatabase/radb.py @@ -466,6 +466,33 @@ class RADatabase: return list(self._executeQuery(query, qargs, fetch=_FETCH_ALL)) + def updateResourceAvailability(self, resource_id, active=None, available_capacity=None, total_capacity=None, commit=True): + if active is not None: + query = '''UPDATE resource_monitoring.resource_availability + SET (available) = (%s) + WHERE resource_id = %s;''' + + self._executeQuery(query, (active, resource_id)) + + if available_capacity is not None and total_capacity is not None: + query = '''UPDATE resource_monitoring.resource_capacity + SET (available, total) = (%s, %s) + WHERE resource_id = %s;''' + self._executeQuery(query, (available_capacity, total_capacity, resource_id)) + elif available_capacity is not None: + query = '''UPDATE resource_monitoring.resource_capacity + SET (available) = (%s) + WHERE resource_id = %s;''' + self._executeQuery(query, (available_capacity, resource_id)) + elif total_capacity is not None: + query = '''UPDATE resource_monitoring.resource_capacity + SET (total) = (%s) + WHERE resource_id = %s;''' + self._executeQuery(query, (total_capacity, resource_id)) + + if commit: + self.commit() + def getResourceGroups(self): query = '''SELECT rg.*, rgt.name as type from virtual_instrument.resource_group rg diff --git a/SAS/ResourceAssignment/ResourceAssignmentService/rpc.py b/SAS/ResourceAssignment/ResourceAssignmentService/rpc.py index a01530f817549e1cc0cb6eec4dd2ed9f5a739468..095636febd5ffffa6a4b13ec5e817885b6864f9e 100644 --- a/SAS/ResourceAssignment/ResourceAssignmentService/rpc.py +++ b/SAS/ResourceAssignment/ResourceAssignmentService/rpc.py @@ -118,6 +118,13 @@ class RARPC(RPCWrapper): def getResources(self, resource_types=None, include_availability=False): return self.rpc('GetResources', resource_types=resource_types, include_availability=include_availability) + def updateResourceAvailability(self, resource_id, active=None, available_capacity=None, total_capacity=None): + return self.rpc('UpdateResourceAvailability', + resource_id=resource_id, + active=active, + available_capacity=available_capacity, + total_capacity=total_capacity) + def getTask(self, id=None, mom_id=None, otdb_id=None): '''get a task for either the given (task)id, or for the given mom_id, or for the given otdb_id''' task = self.rpc('GetTask', id=id, mom_id=mom_id, otdb_id=otdb_id) diff --git a/SAS/ResourceAssignment/ResourceAssignmentService/service.py b/SAS/ResourceAssignment/ResourceAssignmentService/service.py index cc86971c6eee204d063bed07660771fa38b7611e..397d1e72a52878568ab791bc287eb56f50eb7886 100644 --- a/SAS/ResourceAssignment/ResourceAssignmentService/service.py +++ b/SAS/ResourceAssignment/ResourceAssignmentService/service.py @@ -54,6 +54,7 @@ class RADBHandler(MessageHandlerInterface): 'GetResourceGroupMemberships': self._getResourceGroupMemberships, 'GetResourceTypes': self._getResourceTypes, 'GetResources': self._getResources, + 'UpdateResourceAvailability': self._updateResourceAvailability, 'GetTasks': self._getTasks, 'GetTask': self._getTask, 'InsertTask': self._insertTask, @@ -194,6 +195,12 @@ class RADBHandler(MessageHandlerInterface): return self.radb.getResources(resource_types=kwargs.get('resource_types'), include_availability=kwargs.get('include_availability', False)) + def _updateResourceAvailability(self, **kwargs): + return self.radb.updateResourceAvailability(resource_id=kwargs['resource_id'], + active=kwargs.get('active'), + available_capacity=kwargs.get('available_capacity'), + total_capacity=kwargs.get('total_capacity')) + def _getTasks(self): return self.radb.getTasks()