示例#1
0
文件: server.py 项目: znavy/zato
class _RemoteServer(_Server):
    """ API through which it is possible to invoke services directly on other remote servers or clusters.
    """
    def __init__(self, cluster_id, cluster_name, name, preferred_address, port, crypto_use_tls, api_password):
        self.cluster_id = cluster_id
        self.cluster_name = cluster_name
        self.name = name
        self.preferred_address = preferred_address
        self.port = port
        self.crypto_use_tls = crypto_use_tls
        self.api_password = api_password
        self.address = 'http{}://{}:{}'.format(
            's' if self.crypto_use_tls else '', self.preferred_address, self.port)

        self.invoker = AnyServiceInvoker(self.address, '/zato/internal/invoke', (api_user, self.api_password))

    def invoke(self, service, request=None, *args, **kwargs):
        response = self.invoker.invoke(service, request, *args, **kwargs)

        if response.ok:
            return response.data
        else:
            raise Exception(response.details)

    def invoke_async(self, service, request=None, *args, **kwargs):
        return self.invoker.invoke_async(service, request, *args, **kwargs)
示例#2
0
class _RemoteServer(_Server):
    """ API through which it is possible to invoke services directly on other remote servers or clusters.
    """
    repr_to_avoid = ['api_password']

    def __init__(self, cluster_id, cluster_name, name, preferred_address, port,
                 crypto_use_tls, api_password, up_status):
        self.cluster_id = cluster_id
        self.cluster_name = cluster_name
        self.name = name
        self.preferred_address = preferred_address
        self.port = port
        self.crypto_use_tls = crypto_use_tls
        self.api_password = api_password
        self.up_status = up_status
        self.address = 'http{}://{}:{}'.format(
            's' if self.crypto_use_tls else '', self.preferred_address,
            self.port)
        self.invoker = AnyServiceInvoker(self.address, '/zato/internal/invoke',
                                         (api_user, self.api_password))
        self.ping_address = '{}/zato/ping'.format(self.address)
        self.ping_timeout = 2

# ################################################################################################################################

    def invoke(self, service, request=None, *args, **kwargs):

        # Ping the remote server to quickly find out if it is still available
        requests_get(self.ping_address, timeout=self.ping_timeout)

        response = self.invoker.invoke(service, request, *args, **kwargs)

        if response.ok:
            return response.data
        else:
            raise Exception(response.details)

# ################################################################################################################################

    def invoke_all_pids(self, service, request=None, *args, **kwargs):

        # Ping the remote server to quickly find out if it is still available
        requests_get(self.ping_address, timeout=self.ping_timeout)

        return self.invoker.invoke(service,
                                   request,
                                   all_pids=True,
                                   *args,
                                   **kwargs)

# ################################################################################################################################

    def invoke_async(self, service, request=None, *args, **kwargs):
        return self.invoker.invoke_async(service, request, *args, **kwargs)