/* * ModeShape (http://www.modeshape.org) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.modeshape.jboss.metric; import java.util.ArrayList; import java.util.List; import org.jboss.as.controller.OperationStepHandler; import org.jboss.as.controller.SimpleAttributeDefinition; import org.jboss.dmr.ModelType; import org.modeshape.common.util.StringUtil; import org.modeshape.jcr.api.monitor.DurationMetric; import org.modeshape.jcr.api.monitor.ValueMetric; import org.modeshape.jcr.api.monitor.Window; /** * Attributes that are metrics in ModeShape subsystem. These are runtime-only and default to a value of zero. */ public final class ModelMetrics { /** * All duration and value metric attribute definitions. */ public static final List<MetricAttributeDefinition> ALL_METRICS; static { final Window[] windows = Window.values(); final ValueMetric[] valueMetrics = ValueMetric.values(); final DurationMetric[] durationMetrics = DurationMetric.values(); ALL_METRICS = new ArrayList<>(windows.length * (valueMetrics.length + durationMetrics.length)); for (final Window window : windows) { for (final DurationMetric metric : durationMetrics) { final MetricAttributeDefinition attrDefn = new DurationMetricAttributeDefinition(metric, window); ALL_METRICS.add(attrDefn); } for (final ValueMetric metric : valueMetrics) { final MetricAttributeDefinition attrDefn = new ValueMetricAttributeDefinition(metric, window); ALL_METRICS.add(attrDefn); } } } /** * Don't allow construction outside this class. */ private ModelMetrics() { // nothing to do } /** * Represents an attribute definition of a duration metric. */ private static class DurationMetricAttributeDefinition extends MetricAttributeDefinition { final OperationStepHandler handler; /** * @param metric the duration metric (cannot be <code>null</code>) * @param window the metrics window (cannot be <code>null</code>) */ DurationMetricAttributeDefinition( final DurationMetric metric, final Window window ) { super(attributeName(metric.getLiteral(), window)); this.handler = new GetDurationMetric(metric, window); } /** * {@inheritDoc} * * @see org.modeshape.jboss.metric.ModelMetrics.MetricAttributeDefinition#metricHandler() */ @Override public OperationStepHandler metricHandler() { return this.handler; } } /** * Represents an attribute definition of a ModeShape metric. */ public abstract static class MetricAttributeDefinition extends SimpleAttributeDefinition { /** * @param metricName the metric name (cannot be <code>null</code> or empty) * @param window the metrics window (cannot be <code>null</code>) * @return the attribute definition name (never <code>null</code> or empty) */ public static final String attributeName( final String metricName, final Window window ) { assert !StringUtil.isBlank(metricName); assert (window != null); return (metricName + '-' + window.getLiteral()); } /** * @param name the attribute name (cannot be <code>null</code> or empty) */ protected MetricAttributeDefinition( final String name ) { super(name, ModelType.DOUBLE, true); } /** * @return the operation used to obtain the metric value (never <code>null</code>) */ public abstract OperationStepHandler metricHandler(); } /** * Represents an attribute definition of a value metric. */ private static class ValueMetricAttributeDefinition extends MetricAttributeDefinition { final OperationStepHandler handler; /** * @param metric the value metric (cannot be <code>null</code>) * @param window the metrics window (cannot be <code>null</code>) */ ValueMetricAttributeDefinition( final ValueMetric metric, final Window window ) { super(attributeName(metric.getLiteral(), window)); this.handler = new GetValueMetric(metric, window); } /** * {@inheritDoc} * * @see org.modeshape.jboss.metric.ModelMetrics.MetricAttributeDefinition#metricHandler() */ @Override public OperationStepHandler metricHandler() { return this.handler; } } }