JCLOUDS-150. De-async CloudWatch.
Project: http://git-wip-us.apache.org/repos/asf/incubator-jclouds/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-jclouds/commit/91d6736c Tree: http://git-wip-us.apache.org/repos/asf/incubator-jclouds/tree/91d6736c Diff: http://git-wip-us.apache.org/repos/asf/incubator-jclouds/diff/91d6736c Branch: refs/heads/master Commit: 91d6736c22d9cb488c0c0ba1ed3ec54f26ac146e Parents: 100afba Author: Andrew Bayer <[email protected]> Authored: Tue Jul 2 18:42:28 2013 -0700 Committer: Andrew Bayer <[email protected]> Committed: Tue Aug 27 12:16:30 2013 -0700 ---------------------------------------------------------------------- .../cloudwatch/CloudWatchApiMetadata.java | 39 ++-- .../jclouds/cloudwatch/CloudWatchAsyncApi.java | 75 ------- .../config/CloudWatchHttpApiModule.java | 51 +++++ .../config/CloudWatchRestClientModule.java | 59 ------ .../jclouds/cloudwatch/features/AlarmApi.java | 104 +++++++++- .../cloudwatch/features/AlarmAsyncApi.java | 193 ------------------- .../jclouds/cloudwatch/features/MetricApi.java | 60 +++++- .../cloudwatch/features/MetricAsyncApi.java | 117 ----------- .../cloudwatch/CloudWatchApiMetadataTest.java | 4 +- .../internal/BaseCloudWatchExpectTest.java | 10 +- 10 files changed, 227 insertions(+), 485 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/91d6736c/apis/cloudwatch/src/main/java/org/jclouds/cloudwatch/CloudWatchApiMetadata.java ---------------------------------------------------------------------- diff --git a/apis/cloudwatch/src/main/java/org/jclouds/cloudwatch/CloudWatchApiMetadata.java b/apis/cloudwatch/src/main/java/org/jclouds/cloudwatch/CloudWatchApiMetadata.java index d48863b..14ef3d4 100644 --- a/apis/cloudwatch/src/main/java/org/jclouds/cloudwatch/CloudWatchApiMetadata.java +++ b/apis/cloudwatch/src/main/java/org/jclouds/cloudwatch/CloudWatchApiMetadata.java @@ -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; } } http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/91d6736c/apis/cloudwatch/src/main/java/org/jclouds/cloudwatch/CloudWatchAsyncApi.java ---------------------------------------------------------------------- diff --git a/apis/cloudwatch/src/main/java/org/jclouds/cloudwatch/CloudWatchAsyncApi.java b/apis/cloudwatch/src/main/java/org/jclouds/cloudwatch/CloudWatchAsyncApi.java deleted file mode 100644 index 946280a..0000000 --- a/apis/cloudwatch/src/main/java/org/jclouds/cloudwatch/CloudWatchAsyncApi.java +++ /dev/null @@ -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); -} http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/91d6736c/apis/cloudwatch/src/main/java/org/jclouds/cloudwatch/config/CloudWatchHttpApiModule.java ---------------------------------------------------------------------- diff --git a/apis/cloudwatch/src/main/java/org/jclouds/cloudwatch/config/CloudWatchHttpApiModule.java b/apis/cloudwatch/src/main/java/org/jclouds/cloudwatch/config/CloudWatchHttpApiModule.java new file mode 100644 index 0000000..500e7e7 --- /dev/null +++ b/apis/cloudwatch/src/main/java/org/jclouds/cloudwatch/config/CloudWatchHttpApiModule.java @@ -0,0 +1,51 @@ +/* + * 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.config; + +import com.google.common.collect.ImmutableMap; +import org.jclouds.aws.config.FormSigningHttpApiModule; +import org.jclouds.cloudwatch.CloudWatchApi; +import org.jclouds.cloudwatch.features.AlarmApi; +import org.jclouds.cloudwatch.features.MetricApi; +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.ConfiguresHttpApi; + +import java.util.Map; + +import static org.jclouds.reflect.Reflection2.typeToken; + +/** + * Configures the Monitoring connection. + * + * @author Adrian Cole + */ +@ConfiguresHttpApi +public class CloudWatchHttpApiModule extends FormSigningHttpApiModule<CloudWatchApi> { + public CloudWatchHttpApiModule() { + super(CloudWatchApi.class); + } + + @Override + protected void bindErrorHandlers() { + bind(HttpErrorHandler.class).annotatedWith(ClientError.class).to(CloudWatchErrorHandler.class); + bind(HttpErrorHandler.class).annotatedWith(ServerError.class).to(CloudWatchErrorHandler.class); + } + +} http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/91d6736c/apis/cloudwatch/src/main/java/org/jclouds/cloudwatch/config/CloudWatchRestClientModule.java ---------------------------------------------------------------------- diff --git a/apis/cloudwatch/src/main/java/org/jclouds/cloudwatch/config/CloudWatchRestClientModule.java b/apis/cloudwatch/src/main/java/org/jclouds/cloudwatch/config/CloudWatchRestClientModule.java deleted file mode 100644 index 8c92594..0000000 --- a/apis/cloudwatch/src/main/java/org/jclouds/cloudwatch/config/CloudWatchRestClientModule.java +++ /dev/null @@ -1,59 +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.config; - -import com.google.common.collect.ImmutableMap; -import org.jclouds.aws.config.FormSigningRestClientModule; -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 java.util.Map; - -import static org.jclouds.reflect.Reflection2.typeToken; - -/** - * Configures the Monitoring connection. - * - * @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); - } - - @Override - protected void bindErrorHandlers() { - bind(HttpErrorHandler.class).annotatedWith(ClientError.class).to(CloudWatchErrorHandler.class); - bind(HttpErrorHandler.class).annotatedWith(ServerError.class).to(CloudWatchErrorHandler.class); - } - -} http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/91d6736c/apis/cloudwatch/src/main/java/org/jclouds/cloudwatch/features/AlarmApi.java ---------------------------------------------------------------------- diff --git a/apis/cloudwatch/src/main/java/org/jclouds/cloudwatch/features/AlarmApi.java b/apis/cloudwatch/src/main/java/org/jclouds/cloudwatch/features/AlarmApi.java index be22656..25ab508 100644 --- a/apis/cloudwatch/src/main/java/org/jclouds/cloudwatch/features/AlarmApi.java +++ b/apis/cloudwatch/src/main/java/org/jclouds/cloudwatch/features/AlarmApi.java @@ -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); } http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/91d6736c/apis/cloudwatch/src/main/java/org/jclouds/cloudwatch/features/AlarmAsyncApi.java ---------------------------------------------------------------------- diff --git a/apis/cloudwatch/src/main/java/org/jclouds/cloudwatch/features/AlarmAsyncApi.java b/apis/cloudwatch/src/main/java/org/jclouds/cloudwatch/features/AlarmAsyncApi.java deleted file mode 100644 index 28a9255..0000000 --- a/apis/cloudwatch/src/main/java/org/jclouds/cloudwatch/features/AlarmAsyncApi.java +++ /dev/null @@ -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); - -} http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/91d6736c/apis/cloudwatch/src/main/java/org/jclouds/cloudwatch/features/MetricApi.java ---------------------------------------------------------------------- diff --git a/apis/cloudwatch/src/main/java/org/jclouds/cloudwatch/features/MetricApi.java b/apis/cloudwatch/src/main/java/org/jclouds/cloudwatch/features/MetricApi.java index 8ff7079..9d47745 100644 --- a/apis/cloudwatch/src/main/java/org/jclouds/cloudwatch/features/MetricApi.java +++ b/apis/cloudwatch/src/main/java/org/jclouds/cloudwatch/features/MetricApi.java @@ -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); } http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/91d6736c/apis/cloudwatch/src/main/java/org/jclouds/cloudwatch/features/MetricAsyncApi.java ---------------------------------------------------------------------- diff --git a/apis/cloudwatch/src/main/java/org/jclouds/cloudwatch/features/MetricAsyncApi.java b/apis/cloudwatch/src/main/java/org/jclouds/cloudwatch/features/MetricAsyncApi.java deleted file mode 100644 index 7a760ed..0000000 --- a/apis/cloudwatch/src/main/java/org/jclouds/cloudwatch/features/MetricAsyncApi.java +++ /dev/null @@ -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); - -} http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/91d6736c/apis/cloudwatch/src/test/java/org/jclouds/cloudwatch/CloudWatchApiMetadataTest.java ---------------------------------------------------------------------- diff --git a/apis/cloudwatch/src/test/java/org/jclouds/cloudwatch/CloudWatchApiMetadataTest.java b/apis/cloudwatch/src/test/java/org/jclouds/cloudwatch/CloudWatchApiMetadataTest.java index 7bfe24f..831110b 100644 --- a/apis/cloudwatch/src/test/java/org/jclouds/cloudwatch/CloudWatchApiMetadataTest.java +++ b/apis/cloudwatch/src/test/java/org/jclouds/cloudwatch/CloudWatchApiMetadataTest.java @@ -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() { http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/91d6736c/apis/cloudwatch/src/test/java/org/jclouds/cloudwatch/internal/BaseCloudWatchExpectTest.java ---------------------------------------------------------------------- diff --git a/apis/cloudwatch/src/test/java/org/jclouds/cloudwatch/internal/BaseCloudWatchExpectTest.java b/apis/cloudwatch/src/test/java/org/jclouds/cloudwatch/internal/BaseCloudWatchExpectTest.java index a852d46..2c4e7e7 100644 --- a/apis/cloudwatch/src/test/java/org/jclouds/cloudwatch/internal/BaseCloudWatchExpectTest.java +++ b/apis/cloudwatch/src/test/java/org/jclouds/cloudwatch/internal/BaseCloudWatchExpectTest.java @@ -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(); } }
