[Twisted-Python] Monitoring configuration of twisted calls.

Steve Lewis spiritualmechanic at yahoo.com
Thu Aug 28 11:42:13 MDT 2008


Actually, I think I just figured it out:

                    def wrapper(*args, **kw):
                        func = self._getProxy(URL["url"], URL["user"], URL["passwd"]).callRemote(remote_method, *args, **kw)
                        
                        func.addCallback(self.handleSuccess, method)
                                                
                        return func
                        
                    return wrapper

All I needed was to add a callback!
Steve



----- Original Message ----
From: Jean-Paul Calderone <exarkun at divmod.com>
To: Twisted general discussion <twisted-python at twistedmatrix.com>
Sent: Thursday, August 28, 2008 4:01:10 PM
Subject: Re: [Twisted-Python] Monitoring configuration of twisted calls.

On Thu, 28 Aug 2008 06:25:40 -0700 (PDT), Steve Lewis <spiritualmechanic at yahoo.com> wrote:
>I'm fairly new to twisted, although we are using it in production. What I'd like to do, is have a simple redlight/greenlight method (over XML-RPC) to tell me which methods have been called successfully at least once. The goal of this is not so much performance or uptime, but to just tell me that we are configured correctly.
>
>We're using twisted as a sort of service bus, so we have a decent amount of configuration that needs to be set up.
>
>What I've considered so far:
>
>[snip]
>
>2. Extending/subclassing XMLRPC:
>
>    def _getFunction(self, functionPath):
>        '''
>        Overrides XMLRPC._getFunction to use our simple mapper.
>        '''
>
>        ## attempt default behavior for local methods
>        try:
>            func = XMLRPC._getFunction(self, functionPath)
>            return func
>        except NoSuchFunction:
>            pass
>
>This would work in my head, but in actuality, the call doesn't actually happen here, it just returns the function.
>

This is probably the best approach.  `_getFunction´ should probably be a
public method.  Its docstring directs users to override it, which is rather
in conflict with it being private.

To overcome the problem of the function not actually being called inside
`_getFunction´, you just need to apply a wrapper to the function which is
looked up.  The wrapper can mark the call as successful.  For example:

    def _getFunction(self, functionPath):
        f = XMLRPC._getFunction(self, functionPath)
        def wrapper(*a, **kw):
            result = f(*a, **kw)
            self._monitor[functionPath] = True
            return result
        return wrapper

I'd also recommend filing a ticket to make `_getFunction´ public, so that
you don't have to rely on a private hook to make this work.

Jean-Paul

_______________________________________________
Twisted-Python mailing list
Twisted-Python at twistedmatrix.com
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python



      




More information about the Twisted-Python mailing list