Search in sources :

Example 1 with GetMetricStatisticsResponse

use of org.jclouds.cloudwatch.domain.GetMetricStatisticsResponse in project legacy-jclouds-examples by jclouds.

the class MainApp method getCPUUtilizationStatsForInstanceOverTheLast24Hours.

/**
    * Return an array of doubles with the CPUUtilization {@link EC2Constants.MetricName#CPU_UTILIZATION}
    * average, maximum and minimum values in respective order over the last 24 hours.
    *
    * @param metricClient the {@link MetricClient} to use
    * @param nodeId the instance id whose CPUUtilization statistics we're intersted in calculating
    *
    * @return the array of doubles describe above or null if there are no CPUUtilization metrics stored for the given
    * instance id over the past 24 hours
    */
private static double[] getCPUUtilizationStatsForInstanceOverTheLast24Hours(MetricClient metricClient, String nodeId) {
    Dimension instanceIdDimension = new Dimension(EC2Constants.Dimension.INSTANCE_ID, nodeId);
    ListMetricsOptions lmOptions = ListMetricsOptions.builder().metricName(EC2Constants.MetricName.CPU_UTILIZATION).namespace(Namespaces.EC2).dimension(instanceIdDimension).build();
    // Return null to indicate there are no CPUUtilization metrics stored for the given node id
    if (Iterators.size(metricClient.listMetrics(lmOptions).iterator()) == 0) {
        return null;
    }
    // Now
    Date endDate = new Date();
    // One day ago
    Date startDate = new Date(endDate.getTime() - (1000 * 60 * 60 * 24));
    GetMetricStatistics statistics = GetMetricStatistics.builder().dimension(instanceIdDimension).metricName(EC2Constants.MetricName.CPU_UTILIZATION).namespace(Namespaces.EC2).statistic(Statistics.AVERAGE).statistic(Statistics.MAXIMUM).statistic(Statistics.MINIMUM).startTime(startDate).endTime(endDate).period(3600).unit(Unit.PERCENT).build();
    GetMetricStatisticsResponse statisticsResponse = metricClient.getMetricStatistics(statistics);
    double avg = 0d;
    double max = 0d;
    double min = 0d;
    Iterator<Datapoint> datapointIterator = statisticsResponse.iterator();
    while (datapointIterator.hasNext()) {
        Datapoint datapoint = datapointIterator.next();
        Double dAvg = datapoint.getAverage();
        Double dMax = datapoint.getMaximum();
        Double dMin = datapoint.getMinimum();
        if (dAvg != null) {
            avg = ((avg + dAvg) / 2);
        }
        if (dMax != null) {
            if (dMax > max) {
                max = dMax;
            }
        }
        if (dMin != null) {
            if (dMin < min) {
                min = dMin;
            }
        }
    }
    return new double[] { avg, max, min };
}
Also used : Datapoint(org.jclouds.cloudwatch.domain.Datapoint) ListMetricsOptions(org.jclouds.cloudwatch.options.ListMetricsOptions) GetMetricStatistics(org.jclouds.cloudwatch.domain.GetMetricStatistics) GetMetricStatisticsResponse(org.jclouds.cloudwatch.domain.GetMetricStatisticsResponse) Dimension(org.jclouds.cloudwatch.domain.Dimension) Date(java.util.Date)

Aggregations

Date (java.util.Date)1 Datapoint (org.jclouds.cloudwatch.domain.Datapoint)1 Dimension (org.jclouds.cloudwatch.domain.Dimension)1 GetMetricStatistics (org.jclouds.cloudwatch.domain.GetMetricStatistics)1 GetMetricStatisticsResponse (org.jclouds.cloudwatch.domain.GetMetricStatisticsResponse)1 ListMetricsOptions (org.jclouds.cloudwatch.options.ListMetricsOptions)1