All Downloads are FREE. Search and download functionalities are using the official Maven repository.

it.jnrpe.utils.thresholds.Range Maven / Gradle / Ivy

The newest version!
/*******************************************************************************
 * Copyright (c) 2007, 2014 Massimiliano Ziccardi
 *
 * 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 it.jnrpe.utils.thresholds;

import it.jnrpe.plugins.Metric;

import java.math.BigDecimal;

/**
 * Builds the range object parsing the range passed inside the threshold
 * definition.
 * 
 * A range can have the following format:
 * 

* * [^](start..end) *

* * Where: *

    *
  • start and end must be defined *
  • start and end match the regular expression /^[+-]?[0-9]+\.?[0-9]*$|^inf$/ * (ie, a numeric or "inf") *
  • start <= end *
  • if start = "inf", this is negative infinity. This can also be written as * "-inf" *
  • if end = "inf", this is positive infinity *
  • endpoints are excluded from the range if () are used, otherwise endpoints * are included in the range *
  • alert is raised if value is within start and end range, unless ^ is used, * in which case alert is raised if outside the range *
* * @author Massimiliano Ziccardi * @version $Revision: 1.0 $ */ class Range extends RangeConfig { /** * The unparsed range string. */ private final String rangeString; /** * * @param range * The range to be parsed * @throws RangeException * - */ Range(final String range) throws RangeException { rangeString = range; parse(range); } /** * * @param range * The range to be parsed * @throws RangeException * - */ private void parse(final String range) throws RangeException { RangeStringParser.parse(range, this); } /** * Evaluates if the passed in value falls inside the range. The negation is * ignored. * * @param metric * The metric to evaluate * @param prefix * Used to interpret the values of the range boundaries. * * @return true if the metric value falls inside the range. * The negation ('^') is ignored. */ private boolean evaluate(final Metric metric, final Prefixes prefix) { if (metric == null || metric.getMetricValue() == null) { throw new NullPointerException("Value can't be null"); } BigDecimal value = metric.getMetricValue(prefix); if (!isNegativeInfinity()) { switch (value.compareTo(getLeftBoundary())) { case 0: if (!isLeftInclusive()) { return false; } break; case -1: return false; default: } } if (!isPositiveInfinity()) { switch (value.compareTo(getRightBoundary())) { case 0: if (!isRightInclusive()) { return false; } break; case 1: return false; default: } } return true; } /** * @param metric * The metric to be evaluated. * * @return Whether the passed in metric value falls inside this range. */ public boolean isValueInside(final Metric metric) { return isValueInside(metric, Prefixes.RAW); } /** * @param metric * The metric to be evaluated. * @param prefix * Used to interpret the values of the range boundaries * @return Whether the passed in metric falls inside this range */ public boolean isValueInside(final Metric metric, final Prefixes prefix) { boolean res = evaluate(metric, prefix); if (isNegate()) { return !res; } else { return res; } } /** * @return The unparsed range string. */ String getRangeString() { return rangeString; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy