[Twisted-Python] Klein?
Noman Sarker
notorious.no at gmail.com
Mon Mar 1 21:15:35 MST 2021
I've used decorators that execute the route function and then fire a call
back at the end. Here's a quick example of "metrics at the start of a
request and at the end.
```
from functools import wraps
from random import randint
import time
from klein import Klein
from twisted.internet import defer, reactor
def startMetric(f):
@wraps(f)
def deco(*args, **kw):
req = args[1]
print(f"[x] start:{time.time()} path:{req.path.decode('utf8')}")
result = defer.maybeDeferred(f, *args, **kw)
result.addBoth(endMetric, req)
return result
return deco
def endMetric(result, req):
print(f"[x] end:{time.time()} path:{req.path.decode('utf8')}
status:{req.code}")
return result
class MyApp:
rtr = Klein()
@rtr.route("/hello")
@startMetric
def hello(self, req):
d = defer.Deferred()
delay = randint(1, 5)
reactor.callLater(delay, d.callback, f"delay:{delay}")
req.setResponseCode(403, b"whoopsie")
return d
def main():
app = MyApp()
app.rtr.run("localhost", 9999)
main()
```
On Mon, Mar 1, 2021, 15:52 Robert DiFalco <robert.difalco at gmail.com> wrote:
> Is this the right place to ask klein questions? I'm writing a metrics
> plugin for Klein and I can't figure out how to inject a metrics handler so
> that I can get route, path, duration, and status code. What I'm doing now
> sucks because Klein and twisted interact in complex ways on Failure and
> status codes.
>
> # Replace the klein _call with the metrics generating call
> _app._call = _callWithMetrics
>
> Rather than replace _call with my version of _call I was hoping there was
> a cleaner way to get the start and stop with the result code of a route
> invocation. Thoughts?
>
>
>
> _______________________________________________
> Twisted-Python mailing list
> Twisted-Python at twistedmatrix.com
> https://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: </pipermail/twisted-python/attachments/20210301/eb372820/attachment-0001.htm>
More information about the Twisted-Python
mailing list