def set_rse_usage(rse, source, used, free, session=None): """ Set RSE usage information. :param rse: the location name. :param source: The information source, e.g. srm. :param used: the used space in bytes. :param free: the free in bytes. :param session: The database session in use. :returns: True if successful, otherwise false. """ rse_id = get_rse_id(rse, session=session) rse_usage = models.RSEUsage(rse_id=rse_id, source=source, used=used, free=free) # versioned_session(session) rse_usage = session.merge(rse_usage) rse_usage.save(session=session) # rse_usage_history = models.RSEUsage.__history_mapper__.class_(rse_id=rse.id, source=source, used=used, free=free) # rse_usage_history.save(session=session) return True
def update_rse_counter(rse_id, session=None): """ Read the updated_rse_counters and update the rse_counter. :param rse_id: The rse_id to update. :param session: Database session in use. """ updated_rse_counters = session.query( models.UpdatedRSECounter).filter_by(rse_id=rse_id).all() sum_bytes = sum([ updated_rse_counter.bytes for updated_rse_counter in updated_rse_counters ]) sum_files = sum([ updated_rse_counter.files for updated_rse_counter in updated_rse_counters ]) try: rse_counter = session.query(models.RSEUsage).filter_by( rse_id=rse_id, source='rucio').one() rse_counter.used += sum_bytes rse_counter.files += sum_files except NoResultFound: models.RSEUsage(rse_id=rse_id, used=sum_bytes, files=sum_files, source='rucio').save(session=session) for update in updated_rse_counters: update.delete(flush=False, session=session)
def add_counter(rse_id, session=None): """ Creates the specified counter for a rse_id. :param rse_id: The id of the RSE. :param session: The database session in use. """ models.RSEUsage(rse_id=rse_id, source='rucio', files=0, used=0).\ save(session=session)