package org.avaje.metric.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Marker that public methods should have timed execution statistics collected.
 */
@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
public @interface Timed {

  /**
   * Set the method name part of the full metric name.
   * <p>
   * This is used when the method name is not appropriate or when there is method overloading and
   * the otherwise generated unique name is unclear.
   * <p>
   * The package and class names are still used and prepended to this name value.
   */
  String name() default "";

  /**
   * Set the full name of the metric.
   * <p>
   * Provides a complete replacement of the metric name. The package and class names are not used at
   * all.
   */
  String fullName() default "";

}

@@ -193,16 +193,97 @@
 arget;%0A%0A
+import org.avaje.metric.BucketTimedMetric;%0Aimport org.avaje.metric.TimedMetric;%0A%0A
 /**%0A * M
@@ -1025,10 +1025,458 @@
 lt %22%22;%0A%0A
+  %0A  /**%0A   * Define buckets as a list of millisecond times.%0A   * %3Cp%3E%0A   * For example with values of 100, 200, 300 there a with 4 bucket ranges of:%0A   * %3Cpre%3E%0A   *      0 to 100 milliseconds%0A   *    100 to 200 milliseconds%0A   *    200 to 300 milliseconds%0A   *    300+       milliseconds%0A   * %3C/pre%3E%0A   * %3Cp%3E%0A   * Defining buckets means a %7B@link BucketTimedMetric%7D will be used instead of a %7B@link TimedMetric%7D.%0A   */%0A  int%5B%5D buckets() default %7B%7D;%0A
 %7D%0A

Add buckets attribute to @Timed