From b91d9e6b6086a8d5450826748c80ba6056331f30 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Wed, 4 Nov 2020 08:55:23 +0100 Subject: [PATCH 1/4] Add exception class to failed span of AdvancedHttpClient --- .../main/java/sonia/scm/net/ahc/DefaultAdvancedHttpClient.java | 3 ++- .../java/sonia/scm/net/ahc/DefaultAdvancedHttpClientTest.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/scm-webapp/src/main/java/sonia/scm/net/ahc/DefaultAdvancedHttpClient.java b/scm-webapp/src/main/java/sonia/scm/net/ahc/DefaultAdvancedHttpClient.java index 8ef0a22862..3bdfacf50c 100644 --- a/scm-webapp/src/main/java/sonia/scm/net/ahc/DefaultAdvancedHttpClient.java +++ b/scm-webapp/src/main/java/sonia/scm/net/ahc/DefaultAdvancedHttpClient.java @@ -201,7 +201,8 @@ public class DefaultAdvancedHttpClient extends AdvancedHttpClient } return response; } catch (IOException ex) { - span.label("exception", ex.getMessage()); + span.label("exception", ex.getClass().getName()); + span.label("message", ex.getMessage()); span.failed(); throw ex; } diff --git a/scm-webapp/src/test/java/sonia/scm/net/ahc/DefaultAdvancedHttpClientTest.java b/scm-webapp/src/test/java/sonia/scm/net/ahc/DefaultAdvancedHttpClientTest.java index 24b857ea9e..2b8d5cb381 100644 --- a/scm-webapp/src/test/java/sonia/scm/net/ahc/DefaultAdvancedHttpClientTest.java +++ b/scm-webapp/src/test/java/sonia/scm/net/ahc/DefaultAdvancedHttpClientTest.java @@ -302,7 +302,8 @@ public class DefaultAdvancedHttpClientTest verify(tracer).span("failures"); verify(span).label("url", "http://failing.host"); verify(span).label("method", "DELETE"); - verify(span).label("exception", "failed"); + verify(span).label("exception", IOException.class.getName()); + verify(span).label("message", "failed"); verify(span).failed(); verify(span).close(); } From 5694a89589304bf8c36616f42c93187ca341d597 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Wed, 4 Nov 2020 09:37:24 +0100 Subject: [PATCH 2/4] Set span kinds for internal requests --- .../sonia/scm/net/ahc/BaseHttpRequest.java | 2 +- .../sonia/scm/admin/ReleaseFeedParser.java | 9 ++++- .../sonia/scm/plugin/PluginCenterLoader.java | 7 ++-- .../sonia/scm/plugin/PluginInstaller.java | 4 ++- .../main/java/sonia/scm/plugin/Tracing.java | 33 +++++++++++++++++++ .../scm/admin/ReleaseFeedParserTest.java | 12 +++++-- .../scm/plugin/PluginCenterLoaderTest.java | 12 +++++-- .../sonia/scm/plugin/PluginInstallerTest.java | 12 +++++-- 8 files changed, 77 insertions(+), 14 deletions(-) create mode 100644 scm-webapp/src/main/java/sonia/scm/plugin/Tracing.java diff --git a/scm-core/src/main/java/sonia/scm/net/ahc/BaseHttpRequest.java b/scm-core/src/main/java/sonia/scm/net/ahc/BaseHttpRequest.java index bab0b4e0a8..9c36ae3b1c 100644 --- a/scm-core/src/main/java/sonia/scm/net/ahc/BaseHttpRequest.java +++ b/scm-core/src/main/java/sonia/scm/net/ahc/BaseHttpRequest.java @@ -422,5 +422,5 @@ public abstract class BaseHttpRequest private String url; /** kind of span for trace api */ - private String spanKind = "http-request"; + private String spanKind = "HTTP Request"; } diff --git a/scm-webapp/src/main/java/sonia/scm/admin/ReleaseFeedParser.java b/scm-webapp/src/main/java/sonia/scm/admin/ReleaseFeedParser.java index 26c4c63b94..6576cdbceb 100644 --- a/scm-webapp/src/main/java/sonia/scm/admin/ReleaseFeedParser.java +++ b/scm-webapp/src/main/java/sonia/scm/admin/ReleaseFeedParser.java @@ -24,6 +24,7 @@ package sonia.scm.admin; +import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Strings; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -46,6 +47,9 @@ public class ReleaseFeedParser { public static final int DEFAULT_TIMEOUT_IN_MILLIS = 1000; private static final Logger LOG = LoggerFactory.getLogger(ReleaseFeedParser.class); + + @VisibleForTesting + static final String SPAN_KIND = "Release Feed"; private final AdvancedHttpClient client; private final ExecutorService executorService; @@ -103,7 +107,10 @@ public class ReleaseFeedParser { if (Strings.isNullOrEmpty(url)) { return Optional.empty(); } - ReleaseFeedDto releaseFeed = client.get(url).request().contentFromXml(ReleaseFeedDto.class); + ReleaseFeedDto releaseFeed = client.get(url) + .spanKind(SPAN_KIND) + .request() + .contentFromXml(ReleaseFeedDto.class); return filterForLatestRelease(releaseFeed); } catch (Exception e) { LOG.error("Could not parse release feed from {}", url, e); diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/PluginCenterLoader.java b/scm-webapp/src/main/java/sonia/scm/plugin/PluginCenterLoader.java index efc967df49..0ab33dd6b1 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/PluginCenterLoader.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/PluginCenterLoader.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.plugin; import com.google.common.annotations.VisibleForTesting; @@ -34,6 +34,8 @@ import javax.inject.Inject; import java.util.Collections; import java.util.Set; +import static sonia.scm.plugin.Tracing.SPAN_KIND; + class PluginCenterLoader { private static final Logger LOG = LoggerFactory.getLogger(PluginCenterLoader.class); @@ -57,7 +59,8 @@ class PluginCenterLoader { Set load(String url) { try { LOG.info("fetch plugins from {}", url); - PluginCenterDto pluginCenterDto = client.get(url).request().contentFromJson(PluginCenterDto.class); + PluginCenterDto pluginCenterDto = client.get(url).spanKind(SPAN_KIND).request() + .contentFromJson(PluginCenterDto.class); return mapper.map(pluginCenterDto); } catch (Exception ex) { LOG.error("failed to load plugins from plugin center, returning empty list", ex); diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/PluginInstaller.java b/scm-webapp/src/main/java/sonia/scm/plugin/PluginInstaller.java index 5c371aa323..bea6451028 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/PluginInstaller.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/PluginInstaller.java @@ -38,6 +38,8 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.util.Optional; +import static sonia.scm.plugin.Tracing.SPAN_KIND; + @SuppressWarnings("UnstableApiUsage") // guava hash is marked as unstable class PluginInstaller { @@ -126,7 +128,7 @@ class PluginInstaller { } private InputStream download(AvailablePlugin plugin) throws IOException { - return client.get(plugin.getDescriptor().getUrl()).request().contentAsStream(); + return client.get(plugin.getDescriptor().getUrl()).spanKind(SPAN_KIND).request().contentAsStream(); } private Path createFile(AvailablePlugin plugin) throws IOException { diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/Tracing.java b/scm-webapp/src/main/java/sonia/scm/plugin/Tracing.java new file mode 100644 index 0000000000..41903830f2 --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/plugin/Tracing.java @@ -0,0 +1,33 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.plugin; + +final class Tracing { + + public static final String SPAN_KIND = "Plugin Center"; + + private Tracing() { + } +} diff --git a/scm-webapp/src/test/java/sonia/scm/admin/ReleaseFeedParserTest.java b/scm-webapp/src/test/java/sonia/scm/admin/ReleaseFeedParserTest.java index f2e9516f1e..1e67b74df9 100644 --- a/scm-webapp/src/test/java/sonia/scm/admin/ReleaseFeedParserTest.java +++ b/scm-webapp/src/test/java/sonia/scm/admin/ReleaseFeedParserTest.java @@ -32,6 +32,7 @@ import org.mockito.Answers; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import sonia.scm.net.ahc.AdvancedHttpClient; +import sonia.scm.net.ahc.AdvancedHttpResponse; import java.io.IOException; import java.util.Date; @@ -44,6 +45,7 @@ import java.util.concurrent.Semaphore; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.when; +import static sonia.scm.admin.ReleaseFeedParser.SPAN_KIND; @ExtendWith(MockitoExtension.class) class ReleaseFeedParserTest { @@ -62,7 +64,7 @@ class ReleaseFeedParserTest { void shouldFindLatestRelease() throws IOException { String url = "https://www.scm-manager.org/download/rss.xml"; - when(client.get(url).request().contentFromXml(ReleaseFeedDto.class)).thenReturn(createReleaseFeedDto()); + when(request(url).contentFromXml(ReleaseFeedDto.class)).thenReturn(createReleaseFeedDto()); Optional update = releaseFeedParser.findLatestRelease(url); @@ -71,13 +73,17 @@ class ReleaseFeedParserTest { assertThat(update.get().getLink()).isEqualTo("download-3"); } + private AdvancedHttpResponse request(String url) throws IOException { + return client.get(url).spanKind(SPAN_KIND).request(); + } + @Test void shouldHandleTimeout() throws IOException { String url = "https://www.scm-manager.org/download/rss.xml"; Semaphore waitWithResultUntilTimeout = new Semaphore(0); - when(client.get(url).request().contentFromXml(ReleaseFeedDto.class)).thenAnswer(invocation -> { + when(request(url).contentFromXml(ReleaseFeedDto.class)).thenAnswer(invocation -> { waitWithResultUntilTimeout.acquire(); return createReleaseFeedDto(); }); @@ -95,7 +101,7 @@ class ReleaseFeedParserTest { Semaphore waitWithResultUntilBothTriggered = new Semaphore(0); - when(client.get(url).request().contentFromXml(ReleaseFeedDto.class)).thenAnswer(invocation -> { + when(request(url).contentFromXml(ReleaseFeedDto.class)).thenAnswer(invocation -> { waitWithResultUntilBothTriggered.acquire(); return createReleaseFeedDto(); }); diff --git a/scm-webapp/src/test/java/sonia/scm/plugin/PluginCenterLoaderTest.java b/scm-webapp/src/test/java/sonia/scm/plugin/PluginCenterLoaderTest.java index cc59e42f62..ebd48a3b24 100644 --- a/scm-webapp/src/test/java/sonia/scm/plugin/PluginCenterLoaderTest.java +++ b/scm-webapp/src/test/java/sonia/scm/plugin/PluginCenterLoaderTest.java @@ -32,6 +32,7 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import sonia.scm.event.ScmEventBus; import sonia.scm.net.ahc.AdvancedHttpClient; +import sonia.scm.net.ahc.AdvancedHttpResponse; import java.io.IOException; import java.util.Collections; @@ -41,6 +42,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import static sonia.scm.plugin.Tracing.SPAN_KIND; @ExtendWith(MockitoExtension.class) class PluginCenterLoaderTest { @@ -63,16 +65,20 @@ class PluginCenterLoaderTest { void shouldFetch() throws IOException { Set plugins = Collections.emptySet(); PluginCenterDto dto = new PluginCenterDto(); - when(client.get(PLUGIN_URL).request().contentFromJson(PluginCenterDto.class)).thenReturn(dto); + when(request().contentFromJson(PluginCenterDto.class)).thenReturn(dto); when(mapper.map(dto)).thenReturn(plugins); Set fetched = loader.load(PLUGIN_URL); assertThat(fetched).isSameAs(plugins); } + private AdvancedHttpResponse request() throws IOException { + return client.get(PLUGIN_URL).spanKind(SPAN_KIND).request(); + } + @Test void shouldReturnEmptySetIfPluginCenterNotBeReached() throws IOException { - when(client.get(PLUGIN_URL).request()).thenThrow(new IOException("failed to fetch")); + when(request()).thenThrow(new IOException("failed to fetch")); Set fetch = loader.load(PLUGIN_URL); assertThat(fetch).isEmpty(); @@ -80,7 +86,7 @@ class PluginCenterLoaderTest { @Test void shouldFirePluginCenterErrorEvent() throws IOException { - when(client.get(PLUGIN_URL).request()).thenThrow(new IOException("failed to fetch")); + when(request()).thenThrow(new IOException("failed to fetch")); loader.load(PLUGIN_URL); diff --git a/scm-webapp/src/test/java/sonia/scm/plugin/PluginInstallerTest.java b/scm-webapp/src/test/java/sonia/scm/plugin/PluginInstallerTest.java index a619289094..7d18082833 100644 --- a/scm-webapp/src/test/java/sonia/scm/plugin/PluginInstallerTest.java +++ b/scm-webapp/src/test/java/sonia/scm/plugin/PluginInstallerTest.java @@ -34,6 +34,7 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import sonia.scm.SCMContextProvider; import sonia.scm.net.ahc.AdvancedHttpClient; +import sonia.scm.net.ahc.AdvancedHttpResponse; import java.io.ByteArrayInputStream; import java.io.IOException; @@ -50,6 +51,7 @@ import static org.mockito.Mockito.anyInt; import static org.mockito.Mockito.lenient; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import static sonia.scm.plugin.Tracing.SPAN_KIND; @ExtendWith({MockitoExtension.class}) class PluginInstallerTest { @@ -101,10 +103,14 @@ class PluginInstallerTest { } private void mockContent(String content) throws IOException { - when(client.get("https://download.hitchhiker.com").request().contentAsStream()) + when(request("https://download.hitchhiker.com").contentAsStream()) .thenReturn(new ByteArrayInputStream(content.getBytes(StandardCharsets.UTF_8))); } + private AdvancedHttpResponse request(String url) throws IOException { + return client.get(url).spanKind(SPAN_KIND).request(); + } + private AvailablePlugin createGitPlugin() { return createPlugin( "scm-git-plugin", @@ -115,7 +121,7 @@ class PluginInstallerTest { @Test void shouldThrowPluginDownloadException() throws IOException { - when(client.get("https://download.hitchhiker.com").request()).thenThrow(new IOException("failed to download")); + when(request("https://download.hitchhiker.com")).thenThrow(new IOException("failed to download")); PluginInstallationContext context = PluginInstallationContext.empty(); AvailablePlugin gitPlugin = createGitPlugin(); @@ -136,7 +142,7 @@ class PluginInstallerTest { void shouldThrowPluginDownloadExceptionAndCleanup() throws IOException { InputStream stream = mock(InputStream.class); when(stream.read(any(), anyInt(), anyInt())).thenThrow(new IOException("failed to read")); - when(client.get("https://download.hitchhiker.com").request().contentAsStream()).thenReturn(stream); + when(request("https://download.hitchhiker.com").contentAsStream()).thenReturn(stream); PluginInstallationContext context = PluginInstallationContext.empty(); AvailablePlugin gitPlugin = createGitPlugin(); From 423402e62b91049e89530a8b570a6c299bbec5b1 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Wed, 4 Nov 2020 09:44:08 +0100 Subject: [PATCH 3/4] Add option to disable request tracing --- .../main/java/sonia/scm/net/ahc/BaseHttpRequest.java | 11 +++++++++++ .../sonia/scm/net/ahc/DefaultAdvancedHttpClient.java | 10 ++++++++++ .../scm/net/ahc/DefaultAdvancedHttpClientTest.java | 12 +++++++++++- 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/scm-core/src/main/java/sonia/scm/net/ahc/BaseHttpRequest.java b/scm-core/src/main/java/sonia/scm/net/ahc/BaseHttpRequest.java index 9c36ae3b1c..302f2ac6fe 100644 --- a/scm-core/src/main/java/sonia/scm/net/ahc/BaseHttpRequest.java +++ b/scm-core/src/main/java/sonia/scm/net/ahc/BaseHttpRequest.java @@ -257,6 +257,17 @@ public abstract class BaseHttpRequest return self(); } + /** + * Disables tracing for the request. + * This should only be done for internal requests. + * + * @return request instance + */ + public T disableTracing() { + this.spanKind = null; + return self(); + } + //~--- get methods ---------------------------------------------------------- /** diff --git a/scm-webapp/src/main/java/sonia/scm/net/ahc/DefaultAdvancedHttpClient.java b/scm-webapp/src/main/java/sonia/scm/net/ahc/DefaultAdvancedHttpClient.java index 3bdfacf50c..ee3bdbb1e5 100644 --- a/scm-webapp/src/main/java/sonia/scm/net/ahc/DefaultAdvancedHttpClient.java +++ b/scm-webapp/src/main/java/sonia/scm/net/ahc/DefaultAdvancedHttpClient.java @@ -190,6 +190,16 @@ public class DefaultAdvancedHttpClient extends AdvancedHttpClient */ @Override protected AdvancedHttpResponse request(BaseHttpRequest request) throws IOException { + String spanKind = request.getSpanKind(); + if (Strings.isNullOrEmpty(spanKind)) { + logger.debug("execute request {} without tracing", request.getUrl()); + return doRequest(request); + } + return doRequestWithTracing(request); + } + + @Nonnull + private DefaultAdvancedHttpResponse doRequestWithTracing(BaseHttpRequest request) throws IOException { try (Span span = tracer.span(request.getSpanKind())) { span.label("url", request.getUrl()); span.label("method", request.getMethod()); diff --git a/scm-webapp/src/test/java/sonia/scm/net/ahc/DefaultAdvancedHttpClientTest.java b/scm-webapp/src/test/java/sonia/scm/net/ahc/DefaultAdvancedHttpClientTest.java index 2b8d5cb381..89004ece27 100644 --- a/scm-webapp/src/test/java/sonia/scm/net/ahc/DefaultAdvancedHttpClientTest.java +++ b/scm-webapp/src/test/java/sonia/scm/net/ahc/DefaultAdvancedHttpClientTest.java @@ -279,7 +279,7 @@ public class DefaultAdvancedHttpClientTest when(connection.getResponseCode()).thenReturn(500); new AdvancedHttpRequest(client, HttpMethod.GET, "https://www.scm-manager.org").request(); - verify(tracer).span("http-request"); + verify(tracer).span("HTTP Request"); verify(span).label("url", "https://www.scm-manager.org"); verify(span).label("method", "GET"); verify(span).label("status", 500); @@ -308,6 +308,16 @@ public class DefaultAdvancedHttpClientTest verify(span).close(); } + @Test + public void shouldNotCreateSpan() throws IOException { + when(connection.getResponseCode()).thenReturn(200); + + new AdvancedHttpRequest(client, HttpMethod.GET, "https://www.scm-manager.org") + .disableTracing().request(); + verify(tracer, never()).span(anyString()); + } + + //~--- set methods ---------------------------------------------------------- /** From c2ef568e547a4960dee82c2de07ee306b37d68eb Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Wed, 4 Nov 2020 09:49:48 +0100 Subject: [PATCH 4/4] Disable request tracing for mercurial hook manager --- .../sonia/scm/repository/HgHookManager.java | 77 +++++-------------- 1 file changed, 18 insertions(+), 59 deletions(-) diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgHookManager.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgHookManager.java index 5e93c1d859..3d333015ee 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgHookManager.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgHookManager.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.repository; //~--- non-JDK imports -------------------------------------------------------- @@ -54,11 +54,10 @@ import java.util.UUID; * @author Sebastian Sdorra */ @Singleton -public class HgHookManager -{ +public class HgHookManager { - /** Field description */ - public static final String URL_HOOKPATH = "/hook/hg/"; + @SuppressWarnings("java:S1075") // this url is fixed + private static final String URL_HOOKPATH = "/hook/hg/"; /** * the logger for HgHookManager @@ -191,64 +190,27 @@ public class HgHookManager return accessTokenBuilderFactory.create().build(); } - //~--- methods -------------------------------------------------------------- - - /** - * Method description - * - * - * @param request - */ - private void buildHookUrl(HttpServletRequest request) - { - if (configuration.isForceBaseUrl()) - { - if (logger.isDebugEnabled()) - { - logger.debug( - "create hook url from configured base url because force base url is enabled"); - } + private void buildHookUrl(HttpServletRequest request) { + if (configuration.isForceBaseUrl()) { + logger.debug("create hook url from configured base url because force base url is enabled"); hookUrl = createConfiguredUrl(); - - if (!isUrlWorking(hookUrl)) - { + if (!isUrlWorking(hookUrl)) { disableHooks(); } - } - else - { - if (logger.isDebugEnabled()) - { - logger.debug("create hook url from request"); - } + } else { + logger.debug("create hook url from request"); hookUrl = HttpUtil.getCompleteUrl(request, URL_HOOKPATH); - - if (!isUrlWorking(hookUrl)) - { - if (logger.isWarnEnabled()) - { - logger.warn( - "hook url {} from request does not work, try now localhost", - hookUrl); - } + if (!isUrlWorking(hookUrl)) { + logger.warn("hook url {} from request does not work, try now localhost", hookUrl); hookUrl = createLocalUrl(request); - - if (!isUrlWorking(hookUrl)) - { - if (logger.isWarnEnabled()) - { - logger.warn( - "localhost hook url {} does not work, try now from configured base url", - hookUrl); - } + if (!isUrlWorking(hookUrl)) { + logger.warn("localhost hook url {} does not work, try now from configured base url", hookUrl); hookUrl = createConfiguredUrl(); - - if (!isUrlWorking(hookUrl)) - { + if (!isUrlWorking(hookUrl)) { disableHooks(); } } @@ -270,7 +232,7 @@ public class HgHookManager configuration.getBaseUrl(), "http://localhost:8080/scm" ) - ).concat("/hook/hg/"); + ).concat(URL_HOOKPATH); //J+ } @@ -324,11 +286,7 @@ public class HgHookManager { request = httpServletRequestProvider.get(); } - catch (ProvisionException ex) - { - logger.debug("http servlet request is not available"); - } - catch (OutOfScopeException ex) + catch (ProvisionException | OutOfScopeException ex) { logger.debug("http servlet request is not available"); } @@ -358,6 +316,7 @@ public class HgHookManager .disableHostnameValidation(true) .disableCertificateValidation(true) .ignoreProxySettings(true) + .disableTracing() .request() .getStatus(); //J+