示例#1
0
class Message(_dmsresource.Resource):

    # No response for this post method
    base_path = '/queues/%(queue_id)s/messages'

    service = dms_service.DMSService()

    # capabilities
    allow_create = True

    # Properties
    #: Queue id
    queue_id = resource.URI('queue_id')

    @classmethod
    def create_messages(cls, session, queue_id=queue_id, **kwargs):
        endpoint_override = cls.service.get_endpoint_override()
        uri = cls.base_path % {'queue_id': queue_id}

        headers = {}
        headers.update({'Content-type': 'application/json'})
        headers.update({'Content-Length': str(len(str(kwargs)))})

        response = session.post(uri,
                                endpoint_filter=cls.service,
                                endpoint_override=endpoint_override,
                                json=kwargs,
                                headers=headers)

        return response
示例#2
0
    def __init__(self, plugins=None):
        """User preference for each service.

        :param plugins: List of entry point namespaces to load.

        Create a new :class:`~openstack.profile.Profile`
        object with no preferences defined, but knowledge of the services.
        Services are identified by their service type, e.g.: 'identity',
        'compute', etc.
        """
        self._services = {}

        self._add_service(anti_ddos_service.AntiDDosService(version="v1"))
        self._add_service(block_store_service.BlockStoreService(version="v2"))
        self._add_service(compute_service.ComputeService(version="v2"))
        self._add_service(cts_service.CTSService(version="v1"))
        self._add_service(dms_service.DMSService(version="v1"))
        self._add_service(identity_service.IdentityService(version="v3"))
        self._add_service(image_service.ImageService(version="v2"))
        self._add_service(kms_service.KMSService(version="v1"))
        self._add_service(maas_service.MaaSService(version="v1"))
        self._add_service(network_service.NetworkService(version="v2.0"))
        self._add_service(
            orchestration_service.OrchestrationService(version="v1"))
        self._add_service(smn_service.SMNService(version="v2"))
        # QianBiao.NG HuaWei Services
        self._add_service(dns_service.DNSService(version="v2"))
        self._add_service(cloud_eye_service.CloudEyeService(version="v1"))
        ass = auto_scaling_service.AutoScalingService(version="v1")
        self._add_service(ass)
        vbs_v2 = volume_backup_service.VolumeBackupService(version="v2")
        self._add_service(vbs_v2)
        self._add_service(map_reduce_service.MapReduceService(version="v1"))
        self._add_service(evs_service.EvsServiceV2_1(version='v2.1'))
        self._add_service(evs_service.EvsService(version='v2'))
        self._add_service(ecs_service.EcsService(version='v1'))
        self._add_service(ecs_service.EcsServiceV1_1(version='v1.1'))
        self._add_service(vpc_service.VpcService(version='v2.0'))
        self._add_service(bms_service.BmsService(version='v1'))
        self._add_service(lb_service.LoadBalancerService(version='v1'))
        # not support below service
        # self._add_service(message_service.MessageService(version="v1"))
        # self._add_service(cluster_service.ClusterService(version="v1"))
        # self._add_service(database_service.DatabaseService(version="v1"))
        # self._add_service(alarm_service.AlarmService(version="v2"))
        # self._add_service(bare_metal_service.BareMetalService(version="v1"))
        # self._add_service(key_manager_service.KeyManagerService(version="v1"))
        # self._add_service(
        # object_store_service.ObjectStoreService(version="v1"))

        self._add_service(rds_service.RDSService(version="v1"))
        self._add_service(cdn_service.CDNService(version='v1'))

        # self._add_service(rds_os_service.RDSService(version="v1"))
        # self._add_service(telemetry_service.TelemetryService(version="v2"))
        # self._add_service(workflow_service.WorkflowService(version="v2"))
        if plugins:
            for plugin in plugins:
                self._load_plugin(plugin)
        self.service_keys = sorted(self._services.keys())
 def test_service(self):
     sot = dms_service.DMSService()
     self.assertEqual('dms', sot.service_type)
     self.assertEqual('public', sot.interface)
     self.assertIsNone(sot.region)
     self.assertIsNone(sot.service_name)
     self.assertEqual(1, len(sot.valid_versions))
     self.assertEqual('v1', sot.valid_versions[0].module)
     self.assertEqual('v1', sot.valid_versions[0].path)
     self.assertTrue(sot.requires_project_id)
示例#4
0
class Group(_dmsresource.Resource):

    resources_key = 'groups'

    base_path = 'queues/%(queue_id)s/groups'
    service = dms_service.DMSService()

    # capabilities
    allow_list = True
    allow_delete = True

    # Properties
    #: Queue id
    queue_id = resource.URI('queue_id')
    #: Consume roup Id
    id = resource.Body('id')
    #: Consume group name
    name = resource.Body('name')
    #: Total message number, not including deleted message
    #: *Type: int*
    produced_messages = resource.Body('produced_messages', type=int)
    #: Consumed message number
    #: *Type: int*
    consumed_messages = resource.Body('consumed_messages', type=int)
    #: Available message number
    #: *Type: int*
    available_messages = resource.Body('available_messages', type=int)

    # This does a post and return a list of self
    @classmethod
    def create_groups(cls, session, queue_id=queue_id, **kwargs):
        endpoint_override = cls.service.get_endpoint_override()
        uri = cls.base_path % {'queue_id': queue_id}

        headers = {}
        headers.update({'Content-type': 'application/json'})
        headers.update({'Content-Length': str(len(str(kwargs)))})

        response = session.post(uri,
                                endpoint_filter=cls.service,
                                endpoint_override=endpoint_override,
                                json=kwargs,
                                headers=headers)

        if response is not None:
            response = response.json()
            resp = response['groups']

            ret = []
            for r in resp:
                r['queue_id'] = queue_id
                ret.append(cls.existing(**r))

            return ret
示例#5
0
class Queue(_dmsresource.Resource):

    resources_key = 'queues'

    base_path = '/queues'
    service = dms_service.DMSService()

    # capabilities
    allow_create = True
    allow_list = True
    allow_get = True
    allow_delete = True

    # Properties
    #: Queue Id
    id = resource.Body('id')
    #: Queue name
    name = resource.Body('name')
    #: Created time
    #: *Type: int*
    created = resource.Body('created', type=int)
    #: Description for the queue
    description = resource.Body('description')
    #: reservation time (min)
    #: *Type: int*
    reservation = resource.Body('reservation', type=int)
    #: Max mesage size in Byte
    #: *Type: int*
    max_msg_size_byte = resource.Body('max_msg_size_byte', type=int)
    #: Total message number
    #: *Type: int*
    produced_messages = resource.Body('produced_messages', type=int)
    #: Queue mode
    queue_mode = resource.Body('queue_mode')
    #: Redrive policy
    redrive_policy = resource.Body('redrive_policy')
    #: Max consume count number
    #: *Type: int*
    max_consume_count = resource.Body('max_consume_count', type=int)
示例#6
0
class Quota(resource.Resource):

    base_path = '/quotas/dms'

    service = dms_service.DMSService()

    allow_list = True

    # Properties
    #: Quota resource type
    type = resource.Body('type')
    #: Quota of this resource
    #: *Type: int*
    quota = resource.Body('quota', type=int)
    #: Used of this resource
    #: *Type: int*
    used = resource.Body('used', type=int)

    @classmethod
    def list(cls, session, paginated=False, **params):
        more_data = True
        query_params = cls._query_mapping._transpose(params)
        uri = cls.base_path % params

        # Notes: dms requires to have Content-type Header, but there's no way
        # to update header in list method, rewrite it, most are copied from
        # resource2.py.list
        headers = {
            "Accept": "application/json",
            "Content-type": "application/json"
        }

        while more_data:
            endpoint_override = cls.service.get_endpoint_override()
            resp = session.get(uri,
                               endpoint_filter=cls.service,
                               endpoint_override=endpoint_override,
                               headers=headers,
                               params=query_params)
            resp = resp.json()

            # Quota for dms are a list of resources
            resp = resp['quotas']['resources']

            if not resp:
                more_data = False

            # Keep track of how many items we've yielded. If we yielded
            # less than our limit, we don't need to do an extra request
            # to get back an empty data set, which acts as a sentinel.
            yielded = 0
            new_marker = None
            for data in resp:

                value = cls.existing(**data)
                new_marker = value.id
                yielded += 1
                yield value

            if not paginated:
                return
            if "limit" in query_params and yielded < query_params["limit"]:
                return
            query_params["limit"] = yielded
            query_params["marker"] = new_marker
示例#7
0
class MessageConsume(resource.Resource):

    base_path = '/queues/%(queue_id)s/groups/%(consumer_group_id)s/messages'

    service = dms_service.DMSService()

    _query_mapping = resource.QueryParameters('max_msgs', 'time_wait')

    # Properties
    #: Queue id
    queue_id = resource.URI('queue_id')
    #: Consumer group id
    consumer_group_id = resource.URI('consumer_group_id')
    #: Message dict
    #: *Type: dict
    message = resource.Body('message', type=dict)
    #: handler
    handler = resource.Body('handler')
    #: Status of the message
    status = resource.Body('status')
    #: Success number of the message
    #: *Type: int
    success = resource.Body('success', type=int)
    #: Fail number of the message
    #: *Type: int
    fail = resource.Body('fail', type=int)

    # NOTES: this API is so different from others, it's not a RESTFUL
    # style, allow user to pass mulitple tags as the query parameters
    # which can not leverage method of session directlly.
    # return an url with query params
    # it accepts multiple query params e.g. tag=tag1&tag=tag2
    # S-u-c-k-s, huh !
    @classmethod
    def _assemble_query_params(cls, base_url, params):
        # pop queue_id and consumer_group_id
        params.pop('queue_id', None)
        params.pop('consumer_group_id', None)
        if len(params) == 0:
            return base_url
        base_url = base_url + '?'
        for (p, v) in params.items():
            if p == 'tags':
                for tag in v:
                    base_url = base_url + 'tag=' + tag + '&'
            else:
                base_url = base_url + p + '=' + str(v) + '&'

        # remove last `&`
        return base_url[:-1]

    # use get method to consume message, return a list of self
    @classmethod
    def list(cls, session, paginated=False, **params):

        headers = {
            "Accept": "application/json",
            "Content-type": "application/json"
        }
        uri = cls.base_path % params
        endpoint_override = cls.service.get_endpoint_override()

        tags = params.get("tags", None)
        # NOTES: this API is so different from others, it's not a RESTFUL
        # style, allow user to pass mulitple tags as the query parameters
        # which can not leverage method of session directlly.
        if tags is not None:
            if endpoint_override is not None:
                uri = cls._assemble_query_params(uri, params)
                full_url = endpoint_override % {
                    'project_id': session.get_project_id()
                }
                full_url = full_url + uri
                resp = session.get(full_url,
                                   endpoint_filter=cls.service,
                                   headers=headers)
            else:
                # TOOD: Don't support non override yet
                resp = None
        else:
            query_params = cls._query_mapping._transpose(params)
            resp = session.get(uri,
                               endpoint_filter=cls.service,
                               endpoint_override=endpoint_override,
                               headers=headers,
                               params=query_params)

        if resp is not None:
            resp = resp.json()
            ret = []
            # resp is a list
            for r in resp:
                r['queue_id'] = params.get('queue_id')
                r['consumer_group_id'] = params.get('consumer_group_id')
                ret.append(cls.existing(**r))

            return ret

    def ack(self, session, status='success'):
        endpoint_override = self.service.get_endpoint_override()
        # base_path is /queues/{queue_id}/groups/{consumer_group_id}/ack
        base_path = 'ack'.join(self.base_path.rsplit('messages', 1))
        uri = base_path % self._uri.attributes

        body = {
            "message": [{
                "handler": self.handler,
                "status": self.status if self.status else status
            }]
        }

        headers = self._header.dirty
        headers.update({'Content-type': 'application/json'})
        headers.update({'Content-Length': str(len(str(body)))})

        response = session.post(uri,
                                endpoint_filter=self.service,
                                endpoint_override=endpoint_override,
                                json=body,
                                headers=headers)

        self._translate_response(response)
        return self