diff --git a/gate-web/src/main/groovy/com/netflix/spinnaker/gate/controllers/PubsubSubscriptionController.java b/gate-web/src/main/groovy/com/netflix/spinnaker/gate/controllers/PubsubSubscriptionController.java new file mode 100644 index 0000000000..32528cdc2e --- /dev/null +++ b/gate-web/src/main/groovy/com/netflix/spinnaker/gate/controllers/PubsubSubscriptionController.java @@ -0,0 +1,39 @@ +/* + * Copyright 2017 Google, Inc. + * + * 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 com.netflix.spinnaker.gate.controllers; + +import com.netflix.spinnaker.gate.services.PubsubSubscriptionService; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RestController +public class PubsubSubscriptionController { + + @Autowired + private PubsubSubscriptionService pubsubSubscriptionService; + + @ApiOperation(value = "Retrieve the list of pub/sub subscriptions configured in Echo.") + @RequestMapping(value = "/pubsub/subscriptions", method = RequestMethod.GET) + List all() { + return pubsubSubscriptionService.getPubsubSubscriptions(); + } +} \ No newline at end of file diff --git a/gate-web/src/main/groovy/com/netflix/spinnaker/gate/services/PubsubSubscriptionService.java b/gate-web/src/main/groovy/com/netflix/spinnaker/gate/services/PubsubSubscriptionService.java new file mode 100644 index 0000000000..8baf74679d --- /dev/null +++ b/gate-web/src/main/groovy/com/netflix/spinnaker/gate/services/PubsubSubscriptionService.java @@ -0,0 +1,40 @@ +/* + * Copyright 2017 Google, Inc. + * + * 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 com.netflix.spinnaker.gate.services; + +import com.netflix.spinnaker.gate.services.internal.EchoService; +import groovy.transform.CompileStatic; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; + +@CompileStatic +@Component +public class PubsubSubscriptionService { + + @Autowired(required = false) + private EchoService echoService; + + public List getPubsubSubscriptions() { + if (echoService == null) { + throw new IllegalStateException("No Echo service available."); + } + + return echoService.getPubsubSubscriptions(); + } +} diff --git a/gate-web/src/main/groovy/com/netflix/spinnaker/gate/services/internal/EchoService.groovy b/gate-web/src/main/groovy/com/netflix/spinnaker/gate/services/internal/EchoService.groovy index 8c989354f0..c3c9da0570 100644 --- a/gate-web/src/main/groovy/com/netflix/spinnaker/gate/services/internal/EchoService.groovy +++ b/gate-web/src/main/groovy/com/netflix/spinnaker/gate/services/internal/EchoService.groovy @@ -16,8 +16,8 @@ package com.netflix.spinnaker.gate.services.internal -import retrofit.http.* import retrofit.client.Response +import retrofit.http.* interface EchoService { @@ -38,4 +38,6 @@ interface EchoService { @GET("/validateCronExpression") Map validateCronExpression(@Query("cronExpression") String cronExpression) + @GET("/pubsub/subscriptions") + List getPubsubSubscriptions() }