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
accessTokenResolverproperty 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"
    }
  }
}