diff --git a/igor-monitor-travis/igor-monitor-travis.gradle b/igor-monitor-travis/igor-monitor-travis.gradle index 17ceef07c..819e82117 100644 --- a/igor-monitor-travis/igor-monitor-travis.gradle +++ b/igor-monitor-travis/igor-monitor-travis.gradle @@ -23,6 +23,7 @@ dependencies { implementation "io.spinnaker.kork:kork-jedis" implementation "io.spinnaker.kork:kork-security" implementation "io.spinnaker.kork:kork-web" + implementation "io.spinnaker.kork:kork-retrofit" implementation "com.fasterxml.jackson.core:jackson-databind" implementation "com.fasterxml.jackson.dataformat:jackson-dataformat-xml" diff --git a/igor-monitor-travis/src/main/java/com/netflix/spinnaker/igor/travis/config/TravisConfig.java b/igor-monitor-travis/src/main/java/com/netflix/spinnaker/igor/travis/config/TravisConfig.java index 2df2d31c8..f691316b7 100644 --- a/igor-monitor-travis/src/main/java/com/netflix/spinnaker/igor/travis/config/TravisConfig.java +++ b/igor-monitor-travis/src/main/java/com/netflix/spinnaker/igor/travis/config/TravisConfig.java @@ -25,6 +25,7 @@ import com.netflix.spinnaker.igor.travis.client.TravisClient; import com.netflix.spinnaker.igor.travis.client.model.v3.Root; import com.netflix.spinnaker.igor.travis.service.TravisService; +import com.netflix.spinnaker.kork.retrofit.exceptions.SpinnakerRetrofitErrorHandler; import com.netflix.spinnaker.retrofit.Slf4jRetrofitLogger; import com.squareup.okhttp.OkHttpClient; import io.github.resilience4j.circuitbreaker.CircuitBreakerRegistry; @@ -132,6 +133,7 @@ public static TravisClient travisClient(String address, int timeout, ObjectMappe .setClient(new OkClient(client)) .setConverter(new JacksonConverter(objectMapper)) .setLog(new Slf4jRetrofitLogger(TravisClient.class)) + .setErrorHandler(SpinnakerRetrofitErrorHandler.getInstance()) .build() .create(TravisClient.class); } diff --git a/igor-monitor-travis/src/main/java/com/netflix/spinnaker/igor/travis/service/TravisService.java b/igor-monitor-travis/src/main/java/com/netflix/spinnaker/igor/travis/service/TravisService.java index 28ad7ca63..c0ac541ec 100644 --- a/igor-monitor-travis/src/main/java/com/netflix/spinnaker/igor/travis/service/TravisService.java +++ b/igor-monitor-travis/src/main/java/com/netflix/spinnaker/igor/travis/service/TravisService.java @@ -50,6 +50,7 @@ import com.netflix.spinnaker.igor.travis.client.model.v3.V3Builds; import com.netflix.spinnaker.igor.travis.client.model.v3.V3Job; import com.netflix.spinnaker.igor.travis.client.model.v3.V3Log; +import com.netflix.spinnaker.kork.retrofit.exceptions.SpinnakerServerException; import io.github.resilience4j.circuitbreaker.CircuitBreaker; import io.github.resilience4j.circuitbreaker.CircuitBreakerRegistry; import io.github.resilience4j.core.SupplierUtils; @@ -59,7 +60,6 @@ import java.util.Collection; import java.util.Collections; import java.util.Comparator; -import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; @@ -73,7 +73,6 @@ import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import retrofit.RetrofitError; public class TravisService implements BuildOperations, BuildProperties { @@ -444,26 +443,20 @@ private Optional getAndCacheJobLog(int jobId) { travisCache.setJobLog(groupKey, jobId, v3Log.getContent()); return Optional.of(v3Log.getContent()); } - } catch (RetrofitError e) { - if (e.getBody() != null) { - try { - Map body = (Map) e.getBodyAs(HashMap.class); - if ("log_expired".equals(body.get("error_type"))) { - log.info( - "{}: The log for job id {} has expired and the corresponding build was ignored", - groupKey, - jobId); - } else { - log.warn( - "{}: Could not get log for job id {}. Error from Travis:\n{}", - groupKey, - jobId, - body); - } - } catch (RuntimeException ex) { - log.warn("{}: Could not parse original error message from Travis", groupKey, ex); + } catch (SpinnakerServerException e) { + if (e.getResponseBody() != null) { + Map body = e.getResponseBody(); + if ("log_expired".equals(body.get("error_type"))) { + log.info( + "{}: The log for job id {} has expired and the corresponding build was ignored", + groupKey, + jobId); + } else { + log.warn( + "{}: Could not get log for job id {}. Error from Travis:\n{}", groupKey, jobId, body); } } + log.warn("{}: Could not get log for job id {}. Error from Travis", groupKey, jobId, e); } return Optional.empty(); } @@ -553,7 +546,7 @@ public Map queuedBuild(String master, int queueId) { public void syncRepos() { try { travisClient.usersSync(getAccessToken(), new EmptyObject()); - } catch (RetrofitError e) { + } catch (SpinnakerServerException e) { log.error( "synchronizing travis repositories for {} failed with error: {}", groupKey, diff --git a/igor-monitor-travis/src/test/groovy/com/netflix/spinnaker/igor/travis/service/TravisServiceSpec.groovy b/igor-monitor-travis/src/test/groovy/com/netflix/spinnaker/igor/travis/service/TravisServiceSpec.groovy index f3b04dbda..3b231e063 100644 --- a/igor-monitor-travis/src/test/groovy/com/netflix/spinnaker/igor/travis/service/TravisServiceSpec.groovy +++ b/igor-monitor-travis/src/test/groovy/com/netflix/spinnaker/igor/travis/service/TravisServiceSpec.groovy @@ -37,6 +37,7 @@ import com.netflix.spinnaker.igor.travis.client.model.v3.V3Job import com.netflix.spinnaker.igor.travis.client.model.v3.V3Jobs import com.netflix.spinnaker.igor.travis.client.model.v3.V3Log import com.netflix.spinnaker.igor.travis.client.model.v3.V3Repository +import com.netflix.spinnaker.kork.retrofit.exceptions.SpinnakerHttpException import io.github.resilience4j.circuitbreaker.CircuitBreakerRegistry import org.assertj.core.util.Lists import retrofit.RetrofitError @@ -391,7 +392,7 @@ class TravisServiceSpec extends Specification { 2 * travisCache.getJobLog("travis-ci", _) >> null 1 * client.jobLog(_, 1) >> v3log 1 * client.jobLog(_, 2) >> { - throw RetrofitError.httpError( + throw new SpinnakerHttpException(RetrofitError.httpError( "https://travis-ci.com/api/job/2/log", new Response("https://travis-ci.com/api/job/2/log", 403, "Forbidden", [], new TypedString( """{ @@ -401,7 +402,7 @@ class TravisServiceSpec extends Specification { } """)), new JacksonConverter(), - Map) + Map)) } !ready }