---
title: TimerDecorator
description: Records time to process filters, handlers, and access token resolvers.
component: pinggateway
version: 2026
page_id: pinggateway:reference:TimerDecorator
canonical_url: https://docs.pingidentity.com/pinggateway/2026/reference/TimerDecorator.html
revdate: 2025-06-02T18:01:47Z
section_ids:
  TimerDecorator-dec-usage: Decorator usage
  TimerDecorator-ob-usage: Decorated object usage
  TimerDecorator-metrics-slf4j: Timer metrics
  TimerDecorator-examples: Examples
  TimerDecorator-moreinfo: More information
---

# TimerDecorator

Records time to process filters, handlers, and access token resolvers.

## Decorator usage

```json
{
    "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.

* `"timeUnit"`: *configuration expression<[string](preface.html#definition-string)>, optional*

  Unit of time used in the decorator output. The unit of time can be any unit allowed in the <[duration](preface.html#definition-duration)> field.

  Default: `ms`

## Decorated object usage

```json
{
    "name": string,
    "type": string,
    "config": object,
    decorator name: boolean
}
```

* `"name"`: *[string](preface.html#definition-string), required except for inline objects*

  The unique name of the object to decorate.

* `"type"`: *[string](preface.html#definition-string), required*

  The class name of the object to decorate, which must be a [Filter](Filters.html), [Handler](Handlers.html), or the `accessTokenResolver` property of [OAuth2ResourceServerFilter](OAuth2ResourceServerFilter.html).

* `"config"`: [object](preface.html#definition-object), optional

  The configuration of the object, just like an object that isn't decorated.

  Default: Empty

* `decorator name`: *configuration expression<[boolean](preface.html#definition-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:

* [Metrics at the Prometheus Scrape Endpoint](MonitoringMetrics.html)

* [Timer metrics at the Common REST Monitoring Endpoint (deprecated)](MonitoringMetricsCrest.html#timer-metrics-api)

Timer metrics in SLF4J logs are named in this format:

```none
<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:

```none
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:

```none
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:

```json
{
  "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:

```json
{
  "heap": [
    {
      "name": "mytimerdecorator",
      "type": "TimerDecorator",
      "config": {
        "timeUnit": "nano"
      }
    },
    ...
  ],
  "handler": {
    "type": "Chain",
    "config": {
      "filters": [
        {
          "type": "SingleSignOnFilter",
          "config": {
            ...
          },
          "mytimerdecorator": true
        }
      ],
      "handler": "ReverseProxyHandler"
    }
  }
}
```

## More information

[org.forgerock.openig.decoration.timer.TimerDecorator](../_attachments/apidocs/org/forgerock/openig/decoration/timer/TimerDecorator.html)
