/*******************************************************************************
* Copyright (c) 2011 GigaSpaces Technologies Ltd. All rights reserved
*
* 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.cloudifysource.domain.statistics;
import org.cloudifysource.domain.internal.statistics.AverageCpuPercentageAutoScalingStatistics;
import org.cloudifysource.domain.internal.statistics.AverageStatisticsCalculation;
import org.cloudifysource.domain.internal.statistics.MaximumStatisticsCalculation;
import org.cloudifysource.domain.internal.statistics.MinimumStatisticsCalculation;
import org.cloudifysource.domain.internal.statistics.PercentileStatisticsCalculation;
import org.cloudifysource.domain.internal.statistics.ThroughputAutoScalingStatistics;
/**
*
* A helper DSL factory method for defining statistics calculations.
* @see {@link org.cloudifysource.dsl.internal.DSLReader#createCompilerConfiguration} for the "Statistics" static import
*
* @author itaif
* @since 2.1
*
*/
public class StatisticsCalculationFactory {
/**
* Reduces metric series to the average value.
* Applies for time series or instances series.
* @see AverageStatisticsCalculation#createTimeWindowStatistics(long, java.util.concurrent.TimeUnit)
* @see AverageStatisticsCalculation#createInstancesStatistics()
*/
public StatisticsCalculation getAverage() {
return average();
}
/**
* Reduces metric series to the average value.
* Applies for time series or instances series.
* @see AverageStatisticsCalculation#createTimeWindowStatistics(long, java.util.concurrent.TimeUnit)
* @see AverageStatisticsCalculation#createInstancesStatistics()
*/
public StatisticsCalculation average() {
return new AverageStatisticsCalculation();
}
/**
* Reduces metric series to the maximum value.
* Applies for time series or instances series.
* @see MaximumStatisticsCalculation#createTimeWindowStatistics(long, java.util.concurrent.TimeUnit)
* @see MaximumStatisticsCalculation#createInstancesStatistics()
*/
public StatisticsCalculation getMaximum() {
return maximum();
}
/**
* Reduces metric series to the maximum value.
* Applies for time series or instances series.
* @see MaximumStatisticsCalculation#createTimeWindowStatistics(long, java.util.concurrent.TimeUnit)
* @see MaximumStatisticsCalculation#createInstancesStatistics()
*/
public StatisticsCalculation maximum() {
return new MaximumStatisticsCalculation();
}
/**
* Reduces metric series to the minimum value.
* Applies for time series or instances series.
* @see MinimumStatisticsCalculation#createTimeWindowStatistics(long, java.util.concurrent.TimeUnit)
* @see MinimumStatisticsCalculation#createInstancesStatistics()
*/
public StatisticsCalculation getMinimum() {
return minimum();
}
/**
* Reduces metric series to the minimum value.
* Applies for time series or instances series.
* @see MinimumStatisticsCalculation#createTimeWindowStatistics(long, java.util.concurrent.TimeUnit)
* @see MinimumStatisticsCalculation#createInstancesStatistics()
*/
public StatisticsCalculation minimum() {
return new MinimumStatisticsCalculation();
}
/**
* Reduces metric series to the specified percentile value.
* Applies for time series or instances series.
* For example if percentile is 50, will choose the median value.
* @see PercentileStatisticsCalculation#createTimeWindowStatistics(long, java.util.concurrent.TimeUnit)
* @see PercentileStatisticsCalculation#createInstancesStatistics()
*/
public StatisticsCalculation percentile(double percentile) {
return new PercentileStatisticsCalculation(percentile);
}
/**
* Reduces metric series to the median value. Same as percentile(50)
* Applies for time series or instances series.
* @see PercentileStatisticsCalculation#createTimeWindowStatistics(long, java.util.concurrent.TimeUnit)
* @see PercentileStatisticsCalculation#createInstancesStatistics()
*/
public StatisticsCalculation median() {
return new PercentileStatisticsCalculation(50.0);
}
/**
* Reduces metric series to the median value.
* Applies for time series or instances series.
* @see PercentileStatisticsCalculation#createTimeWindowStatistics(long, java.util.concurrent.TimeUnit)
* @see PercentileStatisticsCalculation#createInstancesStatistics()
*/
public StatisticsCalculation getMedian() {
return median();
}
/**
* Reduces metric time series of total requests per seconds to throughput.
* Applies for time series.
* @see ThroughputAutoScalingStatistics#createTimeWindowStatistics(long, java.util.concurrent.TimeUnit)
*/
public TimeWindowStatisticsCalculation throughput() {
return new ThroughputAutoScalingStatistics();
}
/**
* Reduces metric time series of total requests per seconds to throughput.
* Applies for time series.
* @see ThroughputAutoScalingStatistics#createTimeWindowStatistics(long, java.util.concurrent.TimeUnit)
*/
public TimeWindowStatisticsCalculation getThroughput() {
return throughput();
}
/**
* Reduces metric time series of total CPU ticks, to CPU percentage.
* Applies for time series.
* @see AverageCpuPercentageAutoScalingStatistics#createTimeWindowStatistics(long, java.util.concurrent.TimeUnit)
*/
public TimeWindowStatisticsCalculation averageCpuPercentage() {
return new AverageCpuPercentageAutoScalingStatistics();
}
/**
* Reduces metric time series of total CPU ticks, to CPU percentage.
* Applies for time series.
* @see AverageCpuPercentageAutoScalingStatistics#createTimeWindowStatistics(long, java.util.concurrent.TimeUnit)
*/
public TimeWindowStatisticsCalculation getAverageCpuPercentage() {
return throughput();
}
/**
* Reduces metric time series of total requests per seconds to per-instance throughput
* then chooses the maximum throughput among instances.
* @see ThroughputAutoScalingStatistics#createTimeWindowStatistics(long, java.util.concurrent.TimeUnit)
* @see MaximumStatisticsCalculation#createInstancesStatistics()
*/
public ServiceStatisticsCalculation maximumThroughput() {
return new ServiceStatisticsCalculation(maximum(), throughput());
}
/**
* Reduces metric time series of total requests per seconds to per-instance throughput
* then chooses the maximum throughput among instances.
* @see ThroughputAutoScalingStatistics#createTimeWindowStatistics(long, java.util.concurrent.TimeUnit)
* @see MaximumStatisticsCalculation#createInstancesStatistics()
*/
public ServiceStatisticsCalculation getMaximumThroughput() {
return maximumThroughput();
}
/**
* Reduces metric time series of total requests per seconds to per-instance throughput
* then chooses the minimum throughput among instances.
* @see ThroughputAutoScalingStatistics#createTimeWindowStatistics(long, java.util.concurrent.TimeUnit)
* @see MinimumStatisticsCalculation#createInstancesStatistics()
*/
public ServiceStatisticsCalculation minimumThroughput() {
return new ServiceStatisticsCalculation(minimum(), throughput());
}
/**
* Reduces metric time series of total requests per seconds to per-instance throughput
* then chooses the minimum throughput among instances.
* @see ThroughputAutoScalingStatistics#createTimeWindowStatistics(long, java.util.concurrent.TimeUnit)
* @see MinimumStatisticsCalculation#createInstancesStatistics()
*/
public ServiceStatisticsCalculation getMinimumThroughput() {
return minimumThroughput();
}
/**
* Reduces metric time series of total requests per seconds to per-instance throughput
* then calculates the average throughput among instances.
* @see ThroughputAutoScalingStatistics#createTimeWindowStatistics(long, java.util.concurrent.TimeUnit)
* @see AverageStatisticsCalculation#createInstancesStatistics()
*/
public ServiceStatisticsCalculation averageThroughput() {
return new ServiceStatisticsCalculation(average(), throughput());
}
/**
* Reduces metric time series of total requests per seconds to per-instance throughput
* then calculates the average throughput among instances.
* @see ThroughputAutoScalingStatistics#createTimeWindowStatistics(long, java.util.concurrent.TimeUnit)
* @see AverageStatisticsCalculation#createInstancesStatistics()
*/
public ServiceStatisticsCalculation getAverageThroughput() {
return averageThroughput();
}
/**
* Reduces metric time series to the average value per-instance
* then calculates the average value among instances.
* @see AverageStatisticsCalculation#createTimeWindowStatistics(long, java.util.concurrent.TimeUnit)
* @see AverageStatisticsCalculation#createInstancesStatistics()
*/
public ServiceStatisticsCalculation getAverageOfAverages() {
return averageOfAverages();
}
/**
* Reduces metric time series to the average value per-instance
* then calculates the average value among instances.
* @see AverageStatisticsCalculation#createTimeWindowStatistics(long, java.util.concurrent.TimeUnit)
* @see AverageStatisticsCalculation#createInstancesStatistics()
*/
public ServiceStatisticsCalculation averageOfAverages() {
return new ServiceStatisticsCalculation ( average(), average() );
}
/**
* Reduces metric time series to the average value per-instance
* then chooses the percentile value among instances.
* @see AverageStatisticsCalculation#createTimeWindowStatistics(long, java.util.concurrent.TimeUnit)
* @see PercentileStatisticsCalculation#createInstancesStatistics()
*/
public ServiceStatisticsCalculation getPercentileOfAverages(double percentile) {
return new ServiceStatisticsCalculation ( percentile(percentile), average() );
}
/**
* Reduces metric time series to the average value per-instance
* then chooses the minimum value among instances.
* @see AverageStatisticsCalculation#createTimeWindowStatistics(long, java.util.concurrent.TimeUnit)
* @see MinimumStatisticsCalculation#createInstancesStatistics()
*/
public ServiceStatisticsCalculation getMinimumOfAverages() {
return minimumOfAverages();
}
/**
* Reduces metric time series to the average value per-instance
* then chooses the minimum value among instances.
* @see AverageStatisticsCalculation#createTimeWindowStatistics(long, java.util.concurrent.TimeUnit)
* @see MinimumStatisticsCalculation#createInstancesStatistics()
*/
public ServiceStatisticsCalculation minimumOfAverages() {
return new ServiceStatisticsCalculation ( minimum(), average() );
}
/**
* Reduces metric time series to the average value per-instance
* then chooses the maximum value among instances.
* @see AverageStatisticsCalculation#createTimeWindowStatistics(long, java.util.concurrent.TimeUnit)
* @see MaximumStatisticsCalculation#createInstancesStatistics()
*/
public ServiceStatisticsCalculation getMaximumOfAverages() {
return maximumOfAverages();
}
/**
* Reduces metric time series to the average value per-instance
* then chooses the maximum value among instances.
* @see AverageStatisticsCalculation#createTimeWindowStatistics(long, java.util.concurrent.TimeUnit)
* @see MaximumStatisticsCalculation#createInstancesStatistics()
*/
public ServiceStatisticsCalculation maximumOfAverages() {
return new ServiceStatisticsCalculation ( maximum(), average() );
}
/**
* Reduces metric time series to the maximum value per-instance
* then chooses the maximum value among instances.
* @see MaximumStatisticsCalculation#createTimeWindowStatistics(long, java.util.concurrent.TimeUnit)
* @see MaximumStatisticsCalculation#createInstancesStatistics()
*/
public ServiceStatisticsCalculation getMaximumOfMaximums() {
return maximumOfMaximums();
}
/**
* Reduces metric time series to the maximum value per-instance
* then chooses the maximum value among instances.
* @see MaximumStatisticsCalculation#createTimeWindowStatistics(long, java.util.concurrent.TimeUnit)
* @see MaximumStatisticsCalculation#createInstancesStatistics()
*/
public ServiceStatisticsCalculation maximumOfMaximums() {
return new ServiceStatisticsCalculation ( maximum(), maximum() );
}
/**
* Reduces metric time series to the minimum value per-instance
* then chooses the minimum value among instances.
* @see MinimumStatisticsCalculation#createTimeWindowStatistics(long, java.util.concurrent.TimeUnit)
* @see MinimumStatisticsCalculation#createInstancesStatistics()
*/
public ServiceStatisticsCalculation getMinimumOfMinimums() {
return minimumOfMinimums();
}
/**
* Reduces metric time series to the minimum value per-instance
* then chooses the minimum value among instances.
* @see MinimumStatisticsCalculation#createTimeWindowStatistics(long, java.util.concurrent.TimeUnit)
* @see MinimumStatisticsCalculation#createInstancesStatistics()
*/
public ServiceStatisticsCalculation minimumOfMinimums() {
return new ServiceStatisticsCalculation ( minimum(), minimum() );
}
}