Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-04-09 07:58:20

0001 #!/usr/bin/env python
0002 #
0003 # Licensed under the Apache License, Version 2.0 (the "License");
0004 # You may not use this file except in compliance with the License.
0005 # You may obtain a copy of the License at
0006 # http://www.apache.org/licenses/LICENSE-2.0OA
0007 #
0008 # Authors:
0009 # - Wen Guan, <wen.guan@cern.ch>, 2025
0010 
0011 
0012 """
0013 operations related to Health.
0014 """
0015 
0016 import datetime
0017 import re
0018 
0019 from sqlalchemy.exc import DatabaseError, IntegrityError
0020 
0021 from idds.common import exceptions
0022 from idds.common.constants import RequestGroupType, RequestGroupStatus, RequestGroupLocking
0023 from idds.orm.base import models
0024 from idds.orm.base.session import read_session, transactional_session
0025 
0026 
0027 @transactional_session
0028 def add_request_group(campaign=None, campaign_scope=None, campaign_group=None, campaign_tag=None, requester=None,
0029                       username=None, userdn=None, priority=0, group_type=RequestGroupType.Workflow,
0030                       status=RequestGroupStatus.New, locking=RequestGroupLocking.Idle, lifetime=None,
0031                       new_retries=0, update_retries=0, max_new_retries=3, max_update_retries=0,
0032                       new_poll_period=1, update_poll_period=10, group_metadata=None, processing_metadata=None,
0033                       max_processing_requests=-1, session=None):
0034     """
0035     Add a request group.
0036 
0037     :param campaign: The campaign name.
0038     :param campaign_scope: The campaign scope.
0039     :param campaign_group: The campaign group.
0040     :param campaign_tag: The campaign tag.
0041     :param requester: The requester name.
0042     :param username: The user name.
0043     :param userdn: The user dn.
0044     :param priority: The priority.
0045     :param group_type: The group type.
0046     :param status: The request status as integer.
0047     :param group_metadata: The metadata as json.
0048     :param processing_metadata: The metadata as json.
0049     :param session: The database session.
0050 
0051     :returns group id.
0052     """
0053 
0054     try:
0055         if lifetime:
0056             expired_at = datetime.datetime.utcnow() + datetime.timedelta(days=lifetime)
0057         else:
0058             expired_at = None
0059 
0060         if new_poll_period:
0061             new_poll_period = datetime.timedelta(seconds=new_poll_period)
0062         if update_poll_period:
0063             update_poll_period = datetime.timedelta(seconds=update_poll_period)
0064 
0065         new_group = models.RequestGroup(campaign=campaign, campaign_scope=campaign_scope, campaign_group=campaign_group,
0066                                         campaign_tag=campaign_tag, requester=requester, username=username, userdn=userdn,
0067                                         priority=priority, group_type=group_type, status=status, locking=locking,
0068                                         expired_at=expired_at, new_retries=new_retries, update_retries=update_retries,
0069                                         max_new_retries=max_new_retries, max_update_retries=max_update_retries,
0070                                         new_poll_period=new_poll_period, update_poll_period=update_poll_period,
0071                                         group_metadata=group_metadata, processing_metadata=processing_metadata,
0072                                         max_processing_requests=max_processing_requests)
0073 
0074         new_group.save(session=session)
0075         group_id = new_group.group_id
0076         return group_id
0077     except IntegrityError as e:
0078         if re.match('.*ORA-00001.*', e.args[0]) or re.match('.*unique constraint.*', e.args[0]):
0079             print("unique constraintviolated: %s" % str(e))
0080     except DatabaseError as e:
0081         raise exceptions.DatabaseException('Could not persist request group info: %s' % str(e))
0082 
0083 
0084 @read_session
0085 def get_request_groups(campaign=None, campaign_scope=None, campaign_group=None, campaign_tag=None, group_id=None, session=None):
0086     """
0087     Retrieve request groups.
0088 
0089     :param campaign: The campaign name.
0090     :param campaign_scope: The campaign scope.
0091     :param campaign_group: The campaign group.
0092     :param campaign_tag: The campaign tag.
0093     :param group_id: The group id.
0094     :param session: The database session.
0095 
0096     :returns request groups: list of request groups
0097     """
0098     try:
0099         query = session.query(models.RequestGroup)
0100 
0101         if group_id is not None:
0102             query = query.filter(models.RequestGroup.group_id == group_id)
0103 
0104         if campaign:
0105             query = query.filter(models.RequestGroup.campaign == campaign)
0106         if campaign_scope:
0107             query = query.filter(models.RequestGroup.campaign_scope == campaign_scope)
0108         if campaign_group:
0109             query = query.filter(models.RequestGroup.campaign_group == campaign_group)
0110         if campaign_tag:
0111             query = query.filter(models.RequestGroup.campaign_tag == campaign_tag)
0112 
0113         tmp = query.all()
0114         rets = []
0115         if tmp:
0116             for t in tmp:
0117                 rets.append(t.to_dict())
0118         return rets
0119     except IntegrityError as e:
0120         raise exceptions.DatabaseException(e.args)