TimerDecorator
Records time to process filters, handlers, and access token resolvers.
Decorator usage
{
"name": string,
"type": "TimerDecorator",
"config": {
"timeUnit": configuration expression<string>
}
}
PingGateway configures a default TimerDecorator named timer
. Use
timer
as the decorator name without explicitly declaring a decorator named
timer.
Decorated object usage
{
"name": string,
"type": string,
"config": object,
decorator name: boolean
}
"name"
: string, required except for inline objects-
The unique name of the object to decorate.
"type"
: string, required-
The class name of the object to decorate, which must be a Filter, Handler, or the
accessTokenResolver
property of OAuth2ResourceServerFilter. "config"
: object, optional-
The configuration of the object, just like an object that isn’t decorated.
Default: Empty
decorator name
: configuration expression<boolean>, required-
PingGateway looks for the presence of the decorator name field for the TimerDecorator:
-
true
: Activate the timer -
false
: Deactivate the TimerDecorator
-
Timer metrics
Learn about Timer metrics:
Timer metrics in SLF4J logs are named in this format:
<className>.<decoratorName>.<decoratedObjectName>
If the decorated object isn’t named, the object path is used in the log.
When a route’s top-level handler is decorated, the timer decorator records the elapsed time for operations traversing the whole route:
2018-09-04T12:16:08,994Z | INFO | I/O dispatcher 17 | o.f.o.d.t.T.t.top-level-handler | @myroute | Elapsed time: 13 ms
When an individual handler in the route is decorated, the timer decorator records the elapsed time for operations traversing the handler:
2018-09-04T12:44:02,161Z | INFO | http-nio-8080-exec-8 | o.f.o.d.t.T.t.StaticResponseHandler-1 | @myroute | Elapsed time: 1 ms
Examples
The following example uses the default timer decorator to record the time that TokenIntrospectionAccessTokenResolver takes to process a request:
{
"accessTokenResolver": {
"name": "TokenIntrospectionAccessTokenResolver-1",
"type": "TokenIntrospectionAccessTokenResolver",
"config": {
"amService": "AmService-1",
...
},
"timer": true
}
}
The following example defines a customized timer decorator in the heap, and uses it to record the time that the SingleSignOnFilter takes to process a request:
{
"heap": [
{
"name": "mytimerdecorator",
"type": "TimerDecorator",
"config": {
"timeUnit": "nano"
}
},
...
],
"handler": {
"type": "Chain",
"config": {
"filters": [
{
"type": "SingleSignOnFilter",
"config": {
...
},
"mytimerdecorator": true
}
],
"handler": "ReverseProxyHandler"
}
}
}