From 921b0f375a3bf6d151247d1c20aecadad4889394 Mon Sep 17 00:00:00 2001 From: Adam Jordens Date: Mon, 30 Nov 2015 18:43:20 -0800 Subject: [PATCH 1/2] Ensure InfoControllerSpec runs with a reasonable hystrix timeout --- .../netflix/spinnaker/igor/jenkins/InfoControllerSpec.groovy | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/igor-web/src/test/groovy/com/netflix/spinnaker/igor/jenkins/InfoControllerSpec.groovy b/igor-web/src/test/groovy/com/netflix/spinnaker/igor/jenkins/InfoControllerSpec.groovy index ea0800c69..4f1f0418d 100644 --- a/igor-web/src/test/groovy/com/netflix/spinnaker/igor/jenkins/InfoControllerSpec.groovy +++ b/igor-web/src/test/groovy/com/netflix/spinnaker/igor/jenkins/InfoControllerSpec.groovy @@ -16,6 +16,7 @@ package com.netflix.spinnaker.igor.jenkins +import com.netflix.config.ConfigurationManager import com.netflix.spinnaker.igor.config.JenkinsConfig import com.netflix.spinnaker.igor.jenkins.service.JenkinsService import com.squareup.okhttp.mockwebserver.MockResponse @@ -36,6 +37,9 @@ import spock.lang.Specification */ @SuppressWarnings(['UnnecessaryBooleanExpression', 'LineLength']) class InfoControllerSpec extends Specification { + static { + System.setProperty("hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds", "30000") + } MockMvc mockMvc JenkinsCache cache From bb01611865574ec8890f50d09aca1a25075191b3 Mon Sep 17 00:00:00 2001 From: Adam Jordens Date: Mon, 30 Nov 2015 18:57:04 -0800 Subject: [PATCH 2/2] Add MetricsInterceptor --- .../spinnaker/igor/config/IgorConfig.groovy | 16 ++++++++++++++++ .../igor/jenkins/BuildController.groovy | 4 ++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/igor-web/src/main/groovy/com/netflix/spinnaker/igor/config/IgorConfig.groovy b/igor-web/src/main/groovy/com/netflix/spinnaker/igor/config/IgorConfig.groovy index e921057e2..628e19cdb 100644 --- a/igor-web/src/main/groovy/com/netflix/spinnaker/igor/config/IgorConfig.groovy +++ b/igor-web/src/main/groovy/com/netflix/spinnaker/igor/config/IgorConfig.groovy @@ -17,12 +17,16 @@ package com.netflix.spinnaker.igor.config import com.netflix.hystrix.exception.HystrixRuntimeException +import com.netflix.spectator.api.Registry +import com.netflix.spinnaker.kork.web.interceptors.MetricsInterceptor import groovy.transform.CompileStatic +import org.springframework.beans.factory.annotation.Autowired import org.springframework.http.HttpStatus import org.springframework.web.bind.annotation.ControllerAdvice import org.springframework.web.bind.annotation.ExceptionHandler import org.springframework.web.bind.annotation.ResponseBody import org.springframework.web.bind.annotation.ResponseStatus +import org.springframework.web.servlet.config.annotation.InterceptorRegistry import retrofit.RetrofitError import java.util.concurrent.ExecutorService @@ -37,6 +41,18 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter @Configuration @CompileStatic class IgorConfig extends WebMvcConfigurerAdapter { + @Autowired + Registry registry + + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor( + new MetricsInterceptor( + this.registry, "controller.invocations", ["master"], ["BasicErrorController"] + ) + ) + } + @Bean ExecutorService executorService() { Executors.newCachedThreadPool() diff --git a/igor-web/src/main/groovy/com/netflix/spinnaker/igor/jenkins/BuildController.groovy b/igor-web/src/main/groovy/com/netflix/spinnaker/igor/jenkins/BuildController.groovy index 81e810aa8..87a9e64b0 100644 --- a/igor-web/src/main/groovy/com/netflix/spinnaker/igor/jenkins/BuildController.groovy +++ b/igor-web/src/main/groovy/com/netflix/spinnaker/igor/jenkins/BuildController.groovy @@ -86,9 +86,9 @@ class BuildController { masters.map[master].getBuilds(job).list } - @RequestMapping(value = '/masters/{name}/jobs/{job:.+}', method = RequestMethod.PUT) + @RequestMapping(value = '/masters/{master}/jobs/{job:.+}', method = RequestMethod.PUT) String build( - @PathVariable("name") String master, + @PathVariable("master") String master, @PathVariable String job, @RequestParam Map requestParams) { if (!masters.map.containsKey(master)) { throw new MasterNotFoundException()