Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • Refactor a bit current metrics. Create interfaces for writable metric registry, metric manager. Create interfaces for some essential metrics (like int, double, long, longAdder, boolean, object ) and the gauge metrics (IntGauge, LongGauge, etc.).  are below.
  • Provide tiny enough facade with consumers and suppliers for int, long, double value metrics.

...

   public IgniteMetrics metrics();

}

3.  Interfaces for existing metrics.

Instead of #4, we could create interfaces for the existing metrics implementations.

3.1 IgniteMetric

package org.apache.ignite.metric;
/**
* Allows to manage custom metrics and to obtain read-only internal metrics.
*
* Note: Names of custom metric registries are required to start with 'custom.' (lower case) and may have additional
* dot-separated qualifiers. The prefix is automatically added if missed. For example, if provided custom registry name
* is "a.b.c.mname", it is automatically extended to "custom.a.b.c.mname".
*
* Any custom name or dot-separated name part cannot have spaces and must not be empty. Spaces are removed.
*
* Examples of custom metric registry names: "custom", "custom.admin", "custom.admin.sessions", "custom.processes", etc.
*
* @see ReadOnlyMetricRegistry
* @see IgniteMetricRegistry
*/
@IgniteExperimental
public interface IgniteMetrics extends Iterable<ReadOnlyMetricRegistry> {
/**
* Gets or creates custom metric registry named "custom." + {@code registryName}.
*
* @return {@link IgniteMetricRegistry} registry.
*/
IgniteMetricRegistry customRegistry(String registryName);

/**
* Gets or creates custom metric registry named "custom.".
*
* @return {@link IgniteMetricRegistry} registry.
*/
default IgniteMetricRegistry customRegistry() {
return customRegistry(null);
}

/**
* Gets metric registry including the Ignite's internal registries.
*
* @return Certain read-only metric registry.
*/
@Nullable ReadOnlyMetricRegistry findRegistry(String registryName);

/** */
void removeCustomRegistry(String registryName);

/** Removes custom metric registry with name '.custom'./
default void removeCustomRegistry() {
removeCustomRegistry(null);
}
}

3.2 IgniteMetricRegistry

Probably should be named "MetricRegistry" with renaming of internal "MetricRegistry" to "MetricRegistryImpl".  


package org.apache.ignite.metric;

/**
* Metric registry. Allows to get, add or remove metrics.
*
* @see IgniteMetrics
* @see ReadOnlyMetricRegistry
*/
@IgniteExperimental
public interface IgniteMetricRegistry extends ReadOnlyMetricRegistry {
/**
* Registers an int metric which value will be queried from the specified supplier.
*
* @return {@code True} if new metric was added. {@code False} is other metric already exists with the same name.
*/
boolean gauge(String name, IntSupplier supplier, @Nullable String desc);

/**
* Registers a long which value will be queried from the specified supplier.
*
* @return {@code True} if new metric was added. {@code False} is other metric already exists with the same name.
*/
boolean gauge(String name, LongSupplier supplier, @Nullable String desc);

/**
* Registers a double metric which value will be queried from the specified supplier.
*
* @return {@code True} if new metric was added. {@code False} is other metric already exists with the same name.
*/
boolean gauge(String name, DoubleSupplier supplier, @Nullable String desc);

/**
* Registers an object metric which value will be queried from the specified supplier.
*
* @return {@code True} if new metric was added. {@code False} is other metric already exists with the same name.
*/
<T> boolean gauge(String name, Supplier<T> supplier, Class<T> type, @Nullable String desc);

/**
* Registers a boolean metric which value will be queried from the specified supplier.
*
* @return {@code True} if new metric was added. {@code False} is other metric already exists with the same name.
*/
boolean gauge(String name, BooleanSupplier supplier, @Nullable String desc);

/**
* Registers an updatable int metric.
*
* @return New {@link IntValueMetric} or previous one with the same name. {@code Null} if previous metric exists and
* is not a {@link IntValueMetric}.
*/
@Nullable IntValueMetric intMetric(String name, @Nullable String desc);

/**
* Registers an updatable long metric.
*
* @return New {@link LongValueMetric} or previous one with the same name. {@code Null} if previous metric exists and
* is not a {@link LongValueMetric}.
*/
@Nullable LongValueMetric longMetric(String name, @Nullable String desc);

/**
* Registers an updatable long adder metric.
*
* @return New {@link LongValueMetric} or previous one with the same name. {@code Null} if previous metric exists and
* is not a {@link LongValueMetric}.
*/
@Nullable LongSumMetric longAdderMetric(String name, @Nullable String desc);

/**
* Registers an updatable double metric.
*
* @return New {@link DoubleValueMetric} or previous one with the same name. {@code Null} if previous metric exists and
* is not a {@link DoubleValueMetric}.
*/
@Nullable DoubleValueMetric doubleMetric(String name, @Nullable String desc);

/**
* Registers an updatable double metric.
*
* @param <T> Metric value type.
* @return New {@link CustomMetric} or previous one with the same name. {@code Null} if previous metric exists and
* is not a {@link CustomMetric}.
*/
@Nullable <T> AnyValueMetric<T> objectMetric(String name, Class<T> type, @Nullable String desc);

/**
* Removes metrics with the {@code name}.
*
* @param name Metric name..
*/
void remove(String name);

/** Resets all metrics of this metric registry. */
void reset();
}

3.3 New writeable metric intefraces

To the package "org.apache.ignite.metric" we add:

  • BooleanValueMetric
    IntValueMetric
    LongValueMetric
    LongSumMetric (a long adder)
    DoubleValueMetric
    AnyValueMetric<T> (an object metric)

4. Minimal Custom Metric interface

Instead of #3, we could bring only a minimal interface.


package org.apache.ignite;

...

  1. IEP-35 Monitoring & Profiling
  2. New Metric System
  3. Ticket of a public metric API
  4. IEP-116 : Ignite 3 metric

Discussion Links

Tickets

Custom metric introductionIGNITE-21156