JCLOUDS-150. De-async CloudWatch.

This commit is contained in:
Andrew Bayer 2013-07-02 18:42:28 -07:00
parent 100afba1d8
commit 91d6736c22
9 changed files with 182 additions and 440 deletions

View File

@ -24,50 +24,40 @@ import java.util.Properties;
import com.google.common.reflect.TypeToken;
import org.jclouds.apis.ApiMetadata;
import org.jclouds.cloudwatch.config.CloudWatchRestClientModule;
import org.jclouds.rest.internal.BaseRestApiMetadata;
import org.jclouds.cloudwatch.config.CloudWatchHttpApiModule;
import org.jclouds.rest.internal.BaseHttpApiMetadata;
/**
* Implementation of {@link ApiMetadata} for Amazon's CloudWatch api.
*
* @author Adrian Cole
*/
public class CloudWatchApiMetadata extends BaseRestApiMetadata {
public class CloudWatchApiMetadata extends BaseHttpApiMetadata {
/**
* @deprecated please use {@code org.jclouds.ContextBuilder#buildApi(CloudWatchApi.class)} as
* {@link CloudWatchAsyncApi} interface will be removed in jclouds 1.7.
*/
@Deprecated
public static final TypeToken<org.jclouds.rest.RestContext<CloudWatchApi, CloudWatchAsyncApi>> CONTEXT_TOKEN = new TypeToken<org.jclouds.rest.RestContext<CloudWatchApi, CloudWatchAsyncApi>>() {
private static final long serialVersionUID = 1L;
};
@Override
public Builder toBuilder() {
return new Builder(getApi(), getAsyncApi()).fromApiMetadata(this);
public Builder<?> toBuilder() {
return new ConcreteBuilder().fromApiMetadata(this);
}
@SuppressWarnings("deprecation")
public CloudWatchApiMetadata() {
this(new Builder(CloudWatchApi.class, CloudWatchAsyncApi.class));
this(new ConcreteBuilder());
}
protected CloudWatchApiMetadata(Builder builder) {
super(Builder.class.cast(builder));
protected CloudWatchApiMetadata(Builder<?> builder) {
super(builder);
}
public static Properties defaultProperties() {
Properties properties = BaseRestApiMetadata.defaultProperties();
Properties properties = BaseHttpApiMetadata.defaultProperties();
properties.setProperty(PROPERTY_AUTH_TAG, "AWS");
properties.setProperty(PROPERTY_HEADER_TAG, "amz");
return properties;
}
public static class Builder extends BaseRestApiMetadata.Builder<Builder> {
public abstract static class Builder<T extends Builder<T>> extends BaseHttpApiMetadata.Builder<CloudWatchApi, T> {
protected Builder(Class<?> api, Class<?> asyncApi) {
super(api, asyncApi);
protected Builder() {
id("cloudwatch")
.name("Amazon CloudWatch Api")
.identityName("Access Key ID")
@ -76,7 +66,7 @@ public class CloudWatchApiMetadata extends BaseRestApiMetadata {
.documentation(URI.create("http://docs.amazonwebservices.com/AmazonCloudWatch/latest/APIReference/"))
.defaultEndpoint("https://monitoring.us-east-1.amazonaws.com")
.defaultProperties(CloudWatchApiMetadata.defaultProperties())
.defaultModule(CloudWatchRestClientModule.class);
.defaultModule(CloudWatchHttpApiModule.class);
}
@Override
@ -84,8 +74,11 @@ public class CloudWatchApiMetadata extends BaseRestApiMetadata {
return new CloudWatchApiMetadata(this);
}
}
private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
@Override
protected Builder self() {
protected ConcreteBuilder self() {
return this;
}
}

View File

@ -1,75 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.jclouds.cloudwatch;
import java.io.Closeable;
import java.util.Set;
import com.google.inject.Provides;
import org.jclouds.cloudwatch.features.AlarmAsyncApi;
import org.jclouds.cloudwatch.features.MetricAsyncApi;
import org.jclouds.javax.annotation.Nullable;
import org.jclouds.location.Region;
import org.jclouds.location.functions.RegionToEndpointOrProviderIfNull;
import org.jclouds.rest.annotations.Delegate;
import org.jclouds.rest.annotations.EndpointParam;
/**
* Provides access to Amazon CloudWatch via the Query API
* <p/>
*
* @see <a
* href="http://docs.amazonwebservices.com/AmazonCloudWatch/latest/APIReference"
* />
* @author Adrian Cole
* @deprecated please use {@code org.jclouds.ContextBuilder#buildApi(CloudWatchApi.class)} as
* {@link CloudWatchAsyncApi} interface will be removed in jclouds 1.7.
*/
@Deprecated
public interface CloudWatchAsyncApi extends Closeable {
/**
*
* @return the Region codes configured
*/
@Provides
@Region
Set<String> getConfiguredRegions();
/**
* Provides asynchronous access to Metric features.
*/
@Delegate
MetricAsyncApi getMetricApi();
/**
* Provides asynchronous access to Metric features.
*/
@Delegate
MetricAsyncApi getMetricApiForRegion(@EndpointParam(parser = RegionToEndpointOrProviderIfNull.class) @Nullable String region);
/**
* Provides asynchronous access to Alarm features.
*/
@Delegate
AlarmAsyncApi getAlarmApi();
/**
* Provides asynchronous access to Metric features.
*/
@Delegate
AlarmAsyncApi getAlarmApiForRegion(@EndpointParam(parser = RegionToEndpointOrProviderIfNull.class) @Nullable String region);
}

View File

@ -17,18 +17,15 @@
package org.jclouds.cloudwatch.config;
import com.google.common.collect.ImmutableMap;
import org.jclouds.aws.config.FormSigningRestClientModule;
import org.jclouds.aws.config.FormSigningHttpApiModule;
import org.jclouds.cloudwatch.CloudWatchApi;
import org.jclouds.cloudwatch.CloudWatchAsyncApi;
import org.jclouds.cloudwatch.features.AlarmApi;
import org.jclouds.cloudwatch.features.AlarmAsyncApi;
import org.jclouds.cloudwatch.features.MetricApi;
import org.jclouds.cloudwatch.features.MetricAsyncApi;
import org.jclouds.cloudwatch.handlers.CloudWatchErrorHandler;
import org.jclouds.http.HttpErrorHandler;
import org.jclouds.http.annotation.ClientError;
import org.jclouds.http.annotation.ServerError;
import org.jclouds.rest.ConfiguresRestClient;
import org.jclouds.rest.ConfiguresHttpApi;
import java.util.Map;
@ -39,15 +36,10 @@ import static org.jclouds.reflect.Reflection2.typeToken;
*
* @author Adrian Cole
*/
@ConfiguresRestClient
public class CloudWatchRestClientModule extends FormSigningRestClientModule<CloudWatchApi, CloudWatchAsyncApi> {
public static final Map<Class<?>, Class<?>> DELEGATE_MAP = ImmutableMap.<Class<?>, Class<?>> builder()//
.put(MetricApi.class, MetricAsyncApi.class)
.put(AlarmApi.class, AlarmAsyncApi.class)
.build();
public CloudWatchRestClientModule() {
super(typeToken(CloudWatchApi.class), typeToken(CloudWatchAsyncApi.class), DELEGATE_MAP);
@ConfiguresHttpApi
public class CloudWatchHttpApiModule extends FormSigningHttpApiModule<CloudWatchApi> {
public CloudWatchHttpApiModule() {
super(CloudWatchApi.class);
}
@Override

View File

@ -16,26 +16,46 @@
*/
package org.jclouds.cloudwatch.features;
import javax.inject.Named;
import javax.ws.rs.FormParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import com.google.common.annotations.Beta;
import com.google.common.collect.FluentIterable;
import org.jclouds.Fallbacks;
import org.jclouds.aws.filters.FormSigner;
import org.jclouds.cloudwatch.binders.AlarmNamesBinder;
import org.jclouds.cloudwatch.domain.Alarm;
import org.jclouds.cloudwatch.domain.AlarmHistoryItem;
import org.jclouds.cloudwatch.functions.ListAlarmsToPagedIterable;
import org.jclouds.cloudwatch.options.ListAlarmHistoryOptions;
import org.jclouds.cloudwatch.options.ListAlarmsForMetric;
import org.jclouds.cloudwatch.options.ListAlarmsOptions;
import org.jclouds.cloudwatch.options.SaveAlarmOptions;
import org.jclouds.cloudwatch.xml.ListAlarmHistoryResponseHandler;
import org.jclouds.cloudwatch.xml.ListAlarmsForMetricResponseHandler;
import org.jclouds.cloudwatch.xml.ListAlarmsResponseHandler;
import org.jclouds.collect.IterableWithMarker;
import org.jclouds.collect.PagedIterable;
import org.jclouds.javax.annotation.Nullable;
import org.jclouds.rest.annotations.BinderParam;
import org.jclouds.rest.annotations.Fallback;
import org.jclouds.rest.annotations.FormParams;
import org.jclouds.rest.annotations.RequestFilters;
import org.jclouds.rest.annotations.Transform;
import org.jclouds.rest.annotations.VirtualHost;
import org.jclouds.rest.annotations.XMLResponseParser;
/**
* Provides access to Amazon CloudWatch via the Query API
* <p/>
*
* @see AlarmAsyncApi
* @see <a href="http://docs.amazonwebservices.com/AmazonCloudWatch/latest/APIReference" />
* @author Jeremy Whitlock
*/
@RequestFilters(FormSigner.class)
@VirtualHost
@Beta
public interface AlarmApi {
@ -47,13 +67,24 @@ public interface AlarmApi {
*
* @param alarmNames the list of alarms to delete
*/
void delete(Iterable<String> alarmNames);
@Named("DeleteAlarms")
@POST
@Path("/")
@FormParams(keys = "Action", values = "DeleteAlarms")
void delete(@BinderParam(AlarmNamesBinder.class) Iterable<String> alarmNames);
/**
* Return all history for all alarms.
*
* @return the response object
*/
@Named("DescribeAlarmHistory")
@POST
@Path("/")
@XMLResponseParser(ListAlarmHistoryResponseHandler.class)
@FormParams(keys = "Action", values = "DescribeAlarmHistory")
@Transform(ListAlarmsToPagedIterable.class)
@Fallback(Fallbacks.EmptyIterableWithMarkerOnNotFoundOr404.class)
PagedIterable<AlarmHistoryItem> listHistory();
/**
@ -61,6 +92,13 @@ public interface AlarmApi {
*
* @return the response object
*/
@Named("DescribeAlarmHistory")
@POST
@Path("/")
@XMLResponseParser(ListAlarmHistoryResponseHandler.class)
@FormParams(keys = "Action", values = "DescribeAlarmHistory")
@Transform(ListAlarmsToPagedIterable.class)
@Fallback(Fallbacks.EmptyIterableWithMarkerOnNotFoundOr404.class)
PagedIterable<AlarmHistoryItem> listHistory(ListAlarmHistoryOptions options);
/**
@ -70,13 +108,27 @@ public interface AlarmApi {
*
* @return the response object
*/
IterableWithMarker<AlarmHistoryItem> listHistoryAt(String nextToken);
@Named("DescribeAlarmHistory")
@POST
@Path("/")
@XMLResponseParser(ListAlarmHistoryResponseHandler.class)
@FormParams(keys = "Action", values = "DescribeAlarmHistory")
@Fallback(Fallbacks.EmptyIterableWithMarkerOnNotFoundOr404.class)
IterableWithMarker<AlarmHistoryItem> listHistoryAt(@FormParam("NextToken")
String nextToken);
/**
* Return all alarms.
*
* @return the response object
*/
@Named("DescribeAlarms")
@POST
@Path("/")
@XMLResponseParser(ListAlarmsResponseHandler.class)
@FormParams(keys = "Action", values = "DescribeAlarms")
@Transform(ListAlarmsToPagedIterable.class)
@Fallback(Fallbacks.EmptyIterableWithMarkerOnNotFoundOr404.class)
PagedIterable<Alarm> list();
/**
@ -86,6 +138,13 @@ public interface AlarmApi {
*
* @return the response object
*/
@Named("DescribeAlarms")
@POST
@Path("/")
@XMLResponseParser(ListAlarmsResponseHandler.class)
@FormParams(keys = "Action", values = "DescribeAlarms")
@Transform(ListAlarmsToPagedIterable.class)
@Fallback(Fallbacks.EmptyIterableWithMarkerOnNotFoundOr404.class)
PagedIterable<Alarm> list(ListAlarmsOptions options);
/**
@ -95,7 +154,13 @@ public interface AlarmApi {
*
* @return the response object
*/
IterableWithMarker<Alarm> listAt(String nextToken);
@Named("DescribeAlarms")
@POST
@Path("/")
@XMLResponseParser(ListAlarmsResponseHandler.class)
@FormParams(keys = "Action", values = "DescribeAlarms")
@Fallback(Fallbacks.EmptyIterableWithMarkerOnNotFoundOr404.class)
IterableWithMarker<Alarm> listAt(@FormParam("NextToken") String nextToken);
/**
* Return alarms all alarms for a single metric.
@ -104,6 +169,12 @@ public interface AlarmApi {
*
* @return the response object
*/
@Named("DescribeAlarmsForMetric")
@POST
@Path("/")
@XMLResponseParser(ListAlarmsForMetricResponseHandler.class)
@FormParams(keys = "Action", values = "DescribeAlarmsForMetric")
@Fallback(Fallbacks.EmptyIterableWithMarkerOnNotFoundOr404.class)
FluentIterable<Alarm> listForMetric(ListAlarmsForMetric options);
/**
@ -111,20 +182,32 @@ public interface AlarmApi {
*
* @param alarmNames the list of alarms to disable
*/
void disable(Iterable<String> alarmNames);
@Named("DisableAlarmActions")
@POST
@Path("/")
@FormParams(keys = "Action", values = "DisableAlarmActions")
void disable(@BinderParam(AlarmNamesBinder.class) Iterable<String> alarmNames);
/**
* Enables actions for the specified alarms.
*
* @param alarmNames the list of alarms to enable
*/
void enable(Iterable<String> alarmNames);
@Named("EnableAlarmActions")
@POST
@Path("/")
@FormParams(keys = "Action", values = "EnableAlarmActions")
void enable(@BinderParam(AlarmNamesBinder.class) Iterable<String> alarmNames);
/**
* Creates or updates an alarm and associates it with the specified Amazon CloudWatch metric.
*
* @param options the options describing the metric alarm to create/update
*/
@Named("PutMetricAlarm")
@POST
@Path("/")
@FormParams(keys = "Action", values = "PutMetricAlarm")
void save(SaveAlarmOptions options);
/**
@ -135,6 +218,13 @@ public interface AlarmApi {
* @param stateReasonData the reason that this alarm is set to this specific state (in machine-readable JSON format)
* @param state the value of the state
*/
void setState(String alarmName, String stateReason, @Nullable String stateReasonData, Alarm.State state);
@Named("SetAlarmState")
@POST
@Path("/")
@FormParams(keys = "Action", values = "SetAlarmState")
void setState(@FormParam("AlarmName") String alarmName,
@FormParam("StateReason") String stateReason,
@FormParam("StateReasonData") @Nullable String stateReasonData,
@FormParam("StateValue") Alarm.State state);
}

View File

@ -1,193 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.jclouds.cloudwatch.features;
import javax.inject.Named;
import javax.ws.rs.FormParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import com.google.common.annotations.Beta;
import com.google.common.collect.FluentIterable;
import com.google.common.util.concurrent.ListenableFuture;
import org.jclouds.Fallbacks;
import org.jclouds.aws.filters.FormSigner;
import org.jclouds.cloudwatch.binders.AlarmNamesBinder;
import org.jclouds.cloudwatch.domain.Alarm;
import org.jclouds.cloudwatch.domain.AlarmHistoryItem;
import org.jclouds.cloudwatch.functions.ListAlarmsToPagedIterable;
import org.jclouds.cloudwatch.options.ListAlarmHistoryOptions;
import org.jclouds.cloudwatch.options.ListAlarmsForMetric;
import org.jclouds.cloudwatch.options.ListAlarmsOptions;
import org.jclouds.cloudwatch.options.SaveAlarmOptions;
import org.jclouds.cloudwatch.xml.ListAlarmHistoryResponseHandler;
import org.jclouds.cloudwatch.xml.ListAlarmsForMetricResponseHandler;
import org.jclouds.cloudwatch.xml.ListAlarmsResponseHandler;
import org.jclouds.collect.IterableWithMarker;
import org.jclouds.collect.PagedIterable;
import org.jclouds.javax.annotation.Nullable;
import org.jclouds.rest.annotations.BinderParam;
import org.jclouds.rest.annotations.Fallback;
import org.jclouds.rest.annotations.FormParams;
import org.jclouds.rest.annotations.RequestFilters;
import org.jclouds.rest.annotations.Transform;
import org.jclouds.rest.annotations.VirtualHost;
import org.jclouds.rest.annotations.XMLResponseParser;
/**
* Provides access to Amazon CloudWatch via the Query API
* <p/>
*
* @see <a href="http://docs.amazonwebservices.com/AmazonCloudWatch/latest/APIReference" />
* @author Jeremy Whitlock
*/
@RequestFilters(FormSigner.class)
@VirtualHost
@Beta
public interface AlarmAsyncApi {
/**
* @see AlarmApi#delete(Iterable)
*/
@Named("DeleteAlarms")
@POST
@Path("/")
@FormParams(keys = "Action", values = "DeleteAlarms")
ListenableFuture<Void> delete(@BinderParam(AlarmNamesBinder.class) Iterable<String> alarmNames);
/**
* @see AlarmApi#listHistory()
*/
@Named("DescribeAlarmHistory")
@POST
@Path("/")
@XMLResponseParser(ListAlarmHistoryResponseHandler.class)
@FormParams(keys = "Action", values = "DescribeAlarmHistory")
@Transform(ListAlarmsToPagedIterable.class)
@Fallback(Fallbacks.EmptyIterableWithMarkerOnNotFoundOr404.class)
ListenableFuture<? extends PagedIterable<AlarmHistoryItem>> listHistory();
/**
* @see AlarmApi#listHistory(org.jclouds.cloudwatch.options.ListAlarmHistoryOptions)
*/
@Named("DescribeAlarmHistory")
@POST
@Path("/")
@XMLResponseParser(ListAlarmHistoryResponseHandler.class)
@FormParams(keys = "Action", values = "DescribeAlarmHistory")
@Transform(ListAlarmsToPagedIterable.class)
@Fallback(Fallbacks.EmptyIterableWithMarkerOnNotFoundOr404.class)
ListenableFuture<? extends PagedIterable<AlarmHistoryItem>> listHistory(ListAlarmHistoryOptions options);
/**
* @see AlarmApi#listHistoryAt(String)
*/
@Named("DescribeAlarmHistory")
@POST
@Path("/")
@XMLResponseParser(ListAlarmHistoryResponseHandler.class)
@FormParams(keys = "Action", values = "DescribeAlarmHistory")
@Fallback(Fallbacks.EmptyIterableWithMarkerOnNotFoundOr404.class)
ListenableFuture<? extends IterableWithMarker<AlarmHistoryItem>> listHistoryAt(@FormParam("NextToken")
String nextToken);
/**
* @see org.jclouds.cloudwatch.features.AlarmApi#list()
*/
@Named("DescribeAlarms")
@POST
@Path("/")
@XMLResponseParser(ListAlarmsResponseHandler.class)
@FormParams(keys = "Action", values = "DescribeAlarms")
@Transform(ListAlarmsToPagedIterable.class)
@Fallback(Fallbacks.EmptyIterableWithMarkerOnNotFoundOr404.class)
ListenableFuture<? extends PagedIterable<Alarm>> list();
/**
* @see AlarmApi#list(org.jclouds.cloudwatch.options.ListAlarmsOptions)
*/
@Named("DescribeAlarms")
@POST
@Path("/")
@XMLResponseParser(ListAlarmsResponseHandler.class)
@FormParams(keys = "Action", values = "DescribeAlarms")
@Transform(ListAlarmsToPagedIterable.class)
@Fallback(Fallbacks.EmptyIterableWithMarkerOnNotFoundOr404.class)
ListenableFuture<? extends PagedIterable<Alarm>> list(ListAlarmsOptions options);
/**
* @see AlarmApi#listAt(String)
*/
@Named("DescribeAlarms")
@POST
@Path("/")
@XMLResponseParser(ListAlarmsResponseHandler.class)
@FormParams(keys = "Action", values = "DescribeAlarms")
@Fallback(Fallbacks.EmptyIterableWithMarkerOnNotFoundOr404.class)
ListenableFuture<? extends IterableWithMarker<Alarm>> listAt(@FormParam("NextToken") String nextToken);
/**
* @see AlarmApi#listForMetric(org.jclouds.cloudwatch.options.ListAlarmsForMetric)
*/
@Named("DescribeAlarmsForMetric")
@POST
@Path("/")
@XMLResponseParser(ListAlarmsForMetricResponseHandler.class)
@FormParams(keys = "Action", values = "DescribeAlarmsForMetric")
@Fallback(Fallbacks.EmptyIterableWithMarkerOnNotFoundOr404.class)
ListenableFuture<? extends FluentIterable<Alarm>> listForMetric(ListAlarmsForMetric options);
/**
* @see AlarmApi#disable(Iterable)
*/
@Named("DisableAlarmActions")
@POST
@Path("/")
@FormParams(keys = "Action", values = "DisableAlarmActions")
ListenableFuture<Void> disable(@BinderParam(AlarmNamesBinder.class) Iterable<String> alarmNames);
/**
* @see AlarmApi#enable(Iterable)
*/
@Named("EnableAlarmActions")
@POST
@Path("/")
@FormParams(keys = "Action", values = "EnableAlarmActions")
ListenableFuture<Void> enable(@BinderParam(AlarmNamesBinder.class) Iterable<String> alarmNames);
/**
* @see AlarmApi#save(org.jclouds.cloudwatch.options.SaveAlarmOptions)
*/
@Named("PutMetricAlarm")
@POST
@Path("/")
@FormParams(keys = "Action", values = "PutMetricAlarm")
ListenableFuture<Void> save(SaveAlarmOptions options);
/**
* @see AlarmApi#setState(String, String, String, org.jclouds.cloudwatch.domain.Alarm.State)
*/
@Named("SetAlarmState")
@POST
@Path("/")
@FormParams(keys = "Action", values = "SetAlarmState")
ListenableFuture<Void> setState(@FormParam("AlarmName") String alarmName,
@FormParam("StateReason") String stateReason,
@FormParam("StateReasonData") @Nullable String stateReasonData,
@FormParam("StateValue") Alarm.State state);
}

View File

@ -16,23 +16,44 @@
*/
package org.jclouds.cloudwatch.features;
import javax.inject.Named;
import javax.ws.rs.FormParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import org.jclouds.Fallbacks.EmptyIterableWithMarkerOnNotFoundOr404;
import org.jclouds.Fallbacks.EmptyPagedIterableOnNotFoundOr404;
import org.jclouds.aws.filters.FormSigner;
import org.jclouds.cloudwatch.binders.GetMetricStatisticsBinder;
import org.jclouds.cloudwatch.binders.MetricDataBinder;
import org.jclouds.cloudwatch.domain.GetMetricStatistics;
import org.jclouds.cloudwatch.domain.GetMetricStatisticsResponse;
import org.jclouds.cloudwatch.domain.Metric;
import org.jclouds.cloudwatch.domain.MetricDatum;
import org.jclouds.cloudwatch.functions.MetricsToPagedIterable;
import org.jclouds.cloudwatch.options.GetMetricStatisticsOptions;
import org.jclouds.cloudwatch.options.ListMetricsOptions;
import org.jclouds.cloudwatch.xml.GetMetricStatisticsResponseHandlerV2;
import org.jclouds.cloudwatch.xml.ListMetricsResponseHandler;
import org.jclouds.collect.IterableWithMarker;
import org.jclouds.collect.PagedIterable;
import org.jclouds.rest.annotations.BinderParam;
import org.jclouds.rest.annotations.Fallback;
import org.jclouds.rest.annotations.FormParams;
import org.jclouds.rest.annotations.RequestFilters;
import org.jclouds.rest.annotations.Transform;
import org.jclouds.rest.annotations.VirtualHost;
import org.jclouds.rest.annotations.XMLResponseParser;
/**
* Provides access to Amazon CloudWatch via the Query API
* <p/>
*
* @see MetricAsyncApi
* @see <a href="http://docs.amazonwebservices.com/AmazonCloudWatch/latest/APIReference" />
* @author Jeremy Whitlock
*/
@RequestFilters(FormSigner.class)
@VirtualHost
public interface MetricApi {
/**
@ -50,8 +71,21 @@ public interface MetricApi {
*
* @return the response object
*/
@Named("ListMetrics")
@POST
@Path("/")
@XMLResponseParser(ListMetricsResponseHandler.class)
@FormParams(keys = "Action", values = "ListMetrics")
@Fallback(EmptyIterableWithMarkerOnNotFoundOr404.class)
IterableWithMarker<Metric> list(ListMetricsOptions options);
@Named("ListMetrics")
@POST
@Path("/")
@XMLResponseParser(ListMetricsResponseHandler.class)
@Transform(MetricsToPagedIterable.class)
@FormParams(keys = "Action", values = "ListMetrics")
@Fallback(EmptyPagedIterableOnNotFoundOr404.class)
PagedIterable<Metric> list();
/**
@ -62,9 +96,22 @@ public interface MetricApi {
*
* @return the response object
*/
GetMetricStatisticsResponse getMetricStatistics(GetMetricStatistics statistics, GetMetricStatisticsOptions options);
@Named("GetMetricStatistics")
@POST
@Path("/")
@XMLResponseParser(GetMetricStatisticsResponseHandlerV2.class)
@FormParams(keys = "Action", values = "GetMetricStatistics")
GetMetricStatisticsResponse getMetricStatistics(
@BinderParam(GetMetricStatisticsBinder.class) GetMetricStatistics statistics,
GetMetricStatisticsOptions options);
GetMetricStatisticsResponse getMetricStatistics(GetMetricStatistics statistics);
@Named("GetMetricStatistics")
@POST
@Path("/")
@XMLResponseParser(GetMetricStatisticsResponseHandlerV2.class)
@FormParams(keys = "Action", values = "GetMetricStatistics")
GetMetricStatisticsResponse getMetricStatistics(
@BinderParam(GetMetricStatisticsBinder.class) GetMetricStatistics statistics);
/**
* Publishes metric data points to Amazon CloudWatch.
@ -72,6 +119,11 @@ public interface MetricApi {
* @param metrics the metrics to publish
* @param namespace the namespace to publish the metrics to
*/
void putMetricsInNamespace(Iterable<MetricDatum> metrics, String namespace);
@Named("PutMetricData")
@POST
@Path("/")
@FormParams(keys = "Action", values = "PutMetricData")
void putMetricsInNamespace(@BinderParam(MetricDataBinder.class) Iterable<MetricDatum> metrics,
@FormParam("Namespace") String namespace);
}

View File

@ -1,117 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.jclouds.cloudwatch.features;
import javax.inject.Named;
import javax.ws.rs.FormParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import org.jclouds.Fallbacks.EmptyIterableWithMarkerOnNotFoundOr404;
import org.jclouds.Fallbacks.EmptyPagedIterableOnNotFoundOr404;
import org.jclouds.aws.filters.FormSigner;
import org.jclouds.cloudwatch.binders.GetMetricStatisticsBinder;
import org.jclouds.cloudwatch.binders.MetricDataBinder;
import org.jclouds.cloudwatch.domain.GetMetricStatistics;
import org.jclouds.cloudwatch.domain.GetMetricStatisticsResponse;
import org.jclouds.cloudwatch.domain.Metric;
import org.jclouds.cloudwatch.domain.MetricDatum;
import org.jclouds.cloudwatch.functions.MetricsToPagedIterable;
import org.jclouds.cloudwatch.options.GetMetricStatisticsOptions;
import org.jclouds.cloudwatch.options.ListMetricsOptions;
import org.jclouds.cloudwatch.xml.GetMetricStatisticsResponseHandlerV2;
import org.jclouds.cloudwatch.xml.ListMetricsResponseHandler;
import org.jclouds.collect.IterableWithMarker;
import org.jclouds.collect.PagedIterable;
import org.jclouds.rest.annotations.BinderParam;
import org.jclouds.rest.annotations.Fallback;
import org.jclouds.rest.annotations.FormParams;
import org.jclouds.rest.annotations.RequestFilters;
import org.jclouds.rest.annotations.Transform;
import org.jclouds.rest.annotations.VirtualHost;
import org.jclouds.rest.annotations.XMLResponseParser;
import com.google.common.util.concurrent.ListenableFuture;
/**
* Provides access to Amazon CloudWatch via the Query API
* <p/>
*
* @see <a href="http://docs.amazonwebservices.com/AmazonCloudWatch/latest/APIReference" />
* @author Jeremy Whitlock
*/
@RequestFilters(FormSigner.class)
@VirtualHost
public interface MetricAsyncApi {
/**
* @see MetricApi#list()
*/
@Named("ListMetrics")
@POST
@Path("/")
@XMLResponseParser(ListMetricsResponseHandler.class)
@Transform(MetricsToPagedIterable.class)
@FormParams(keys = "Action", values = "ListMetrics")
@Fallback(EmptyPagedIterableOnNotFoundOr404.class)
ListenableFuture<? extends PagedIterable<Metric>> list();
/**
* @see MetricApi#list(ListMetricsOptions)
*/
@Named("ListMetrics")
@POST
@Path("/")
@XMLResponseParser(ListMetricsResponseHandler.class)
@FormParams(keys = "Action", values = "ListMetrics")
@Fallback(EmptyIterableWithMarkerOnNotFoundOr404.class)
ListenableFuture<? extends IterableWithMarker<Metric>> list(ListMetricsOptions options);
/**
* @see MetricApi#getMetricStatistics(GetMetricStatistics)
*/
@Named("GetMetricStatistics")
@POST
@Path("/")
@XMLResponseParser(GetMetricStatisticsResponseHandlerV2.class)
@FormParams(keys = "Action", values = "GetMetricStatistics")
ListenableFuture<? extends GetMetricStatisticsResponse> getMetricStatistics(
@BinderParam(GetMetricStatisticsBinder.class) GetMetricStatistics statistics);
/**
* @see MetricApi#getMetricStatistics(GetMetricStatistics, GetMetricStatisticsOptions)
*/
@Named("GetMetricStatistics")
@POST
@Path("/")
@XMLResponseParser(GetMetricStatisticsResponseHandlerV2.class)
@FormParams(keys = "Action", values = "GetMetricStatistics")
ListenableFuture<? extends GetMetricStatisticsResponse> getMetricStatistics(
@BinderParam(GetMetricStatisticsBinder.class) GetMetricStatistics statistics,
GetMetricStatisticsOptions options);
/**
* @see MetricApi#putMetricsInNamespace(Iterable, String)
*/
@Named("PutMetricData")
@POST
@Path("/")
@FormParams(keys = "Action", values = "PutMetricData")
ListenableFuture<Void> putMetricsInNamespace(@BinderParam(MetricDataBinder.class) Iterable<MetricDatum> metrics,
@FormParam("Namespace") String namespace);
}

View File

@ -17,7 +17,7 @@
package org.jclouds.cloudwatch;
import org.jclouds.View;
import org.jclouds.rest.internal.BaseRestApiMetadataTest;
import org.jclouds.rest.internal.BaseHttpApiMetadataTest;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableSet;
@ -28,7 +28,7 @@ import com.google.common.reflect.TypeToken;
* @author Adrian Cole
*/
@Test(groups = "unit", testName = "CloudWatchApiMetadataTest")
public class CloudWatchApiMetadataTest extends BaseRestApiMetadataTest {
public class CloudWatchApiMetadataTest extends BaseHttpApiMetadataTest {
// no monitoring abstraction, yet
public CloudWatchApiMetadataTest() {

View File

@ -22,11 +22,11 @@ import java.net.URI;
import java.util.Map;
import org.jclouds.aws.domain.Region;
import org.jclouds.cloudwatch.config.CloudWatchRestClientModule;
import org.jclouds.cloudwatch.config.CloudWatchHttpApiModule;
import org.jclouds.date.DateService;
import org.jclouds.location.config.LocationModule;
import org.jclouds.location.suppliers.RegionIdToURISupplier;
import org.jclouds.rest.ConfiguresRestClient;
import org.jclouds.rest.ConfiguresHttpApi;
import org.jclouds.rest.internal.BaseRestApiExpectTest;
import org.jclouds.util.Suppliers2;
@ -44,8 +44,8 @@ public class BaseCloudWatchExpectTest<T> extends BaseRestApiExpectTest<T> {
provider = "cloudwatch";
}
@ConfiguresRestClient
private static final class TestMonitoringRestClientModule extends CloudWatchRestClientModule {
@ConfiguresHttpApi
private static final class TestMonitoringHttpApiModule extends CloudWatchHttpApiModule {
@Override
protected void installLocations() {
@ -71,6 +71,6 @@ public class BaseCloudWatchExpectTest<T> extends BaseRestApiExpectTest<T> {
@Override
protected Module createModule() {
return new TestMonitoringRestClientModule();
return new TestMonitoringHttpApiModule();
}
}