From: lukasz-jarocki-sonarsource Date: Mon, 24 Jun 2024 08:01:47 +0000 (+0200) Subject: SONAR-19530 acted upon warnings about missing response examples in webapi X-Git-Tag: 10.7.0.96327~435 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=6df23c460af61c95cb7681dc599d2dfb376fa526;p=sonarqube.git SONAR-19530 acted upon warnings about missing response examples in webapi --- diff --git a/gradle.properties b/gradle.properties index e57fce9dd1d..c267f21d4d8 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,7 +7,7 @@ version=10.7 # No change required for patch versions versionEOL=2025-03-01 -pluginApiVersion=10.7.0.2191 +pluginApiVersion=10.8.0.2326 description=Open source platform for continuous inspection of code quality projectTitle=SonarQube org.gradle.jvmargs=-Xmx2048m diff --git a/server/sonar-alm-client/src/main/java/org/sonar/alm/client/azure/AzureDevOpsHttpClient.java b/server/sonar-alm-client/src/main/java/org/sonar/alm/client/azure/AzureDevOpsHttpClient.java index ab6485bb903..80c9bd0ae91 100644 --- a/server/sonar-alm-client/src/main/java/org/sonar/alm/client/azure/AzureDevOpsHttpClient.java +++ b/server/sonar-alm-client/src/main/java/org/sonar/alm/client/azure/AzureDevOpsHttpClient.java @@ -43,8 +43,8 @@ import org.sonar.api.server.ServerSide; import org.sonarqube.ws.client.OkHttpClientBuilder; import static java.util.stream.Collectors.joining; -import static org.sonar.api.internal.apachecommons.lang.StringUtils.isBlank; -import static org.sonar.api.internal.apachecommons.lang.StringUtils.substringBeforeLast; +import static org.apache.commons.lang3.StringUtils.isBlank; +import static org.apache.commons.lang3.StringUtils.substringBeforeLast; @ServerSide public class AzureDevOpsHttpClient { diff --git a/server/sonar-alm-client/src/main/java/org/sonar/alm/client/bitbucket/bitbucketcloud/BitbucketCloudRestClient.java b/server/sonar-alm-client/src/main/java/org/sonar/alm/client/bitbucket/bitbucketcloud/BitbucketCloudRestClient.java index 79a99dccb1b..b11983d0a12 100644 --- a/server/sonar-alm-client/src/main/java/org/sonar/alm/client/bitbucket/bitbucketcloud/BitbucketCloudRestClient.java +++ b/server/sonar-alm-client/src/main/java/org/sonar/alm/client/bitbucket/bitbucketcloud/BitbucketCloudRestClient.java @@ -42,7 +42,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.sonar.server.exceptions.NotFoundException; -import static org.sonar.api.internal.apachecommons.lang.StringUtils.removeEnd; +import static org.apache.commons.lang3.StringUtils.removeEnd; @ServerSide public class BitbucketCloudRestClient { diff --git a/server/sonar-alm-client/src/main/java/org/sonar/alm/client/bitbucketserver/BitbucketServerRestClient.java b/server/sonar-alm-client/src/main/java/org/sonar/alm/client/bitbucketserver/BitbucketServerRestClient.java index 4dcad40fb56..e0ab68da9ce 100644 --- a/server/sonar-alm-client/src/main/java/org/sonar/alm/client/bitbucketserver/BitbucketServerRestClient.java +++ b/server/sonar-alm-client/src/main/java/org/sonar/alm/client/bitbucketserver/BitbucketServerRestClient.java @@ -47,7 +47,7 @@ import static java.lang.String.format; import static java.net.HttpURLConnection.HTTP_NOT_FOUND; import static java.net.HttpURLConnection.HTTP_UNAUTHORIZED; import static java.util.Locale.ENGLISH; -import static org.sonar.api.internal.apachecommons.lang.StringUtils.removeEnd; +import static org.apache.commons.lang3.StringUtils.removeEnd; @ServerSide public class BitbucketServerRestClient { diff --git a/server/sonar-alm-client/src/main/java/org/sonar/alm/client/github/GithubApplicationClientImpl.java b/server/sonar-alm-client/src/main/java/org/sonar/alm/client/github/GithubApplicationClientImpl.java index 63220e42961..9cc631bdda3 100644 --- a/server/sonar-alm-client/src/main/java/org/sonar/alm/client/github/GithubApplicationClientImpl.java +++ b/server/sonar-alm-client/src/main/java/org/sonar/alm/client/github/GithubApplicationClientImpl.java @@ -42,7 +42,7 @@ import org.sonar.alm.client.ApplicationHttpClient.GetResponse; import org.sonar.alm.client.github.security.AppToken; import org.sonar.alm.client.github.security.GithubAppSecurity; import org.sonar.alm.client.gitlab.GsonApp; -import org.sonar.api.internal.apachecommons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.sonar.auth.github.AppInstallationToken; import org.sonar.auth.github.GitHubSettings; import org.sonar.auth.github.GithubAppConfiguration; diff --git a/server/sonar-webserver-auth/src/main/java/org/sonar/server/authentication/SamlValidationRedirectionFilter.java b/server/sonar-webserver-auth/src/main/java/org/sonar/server/authentication/SamlValidationRedirectionFilter.java index d8ef581bd13..f602608a42a 100644 --- a/server/sonar-webserver-auth/src/main/java/org/sonar/server/authentication/SamlValidationRedirectionFilter.java +++ b/server/sonar-webserver-auth/src/main/java/org/sonar/server/authentication/SamlValidationRedirectionFilter.java @@ -26,7 +26,7 @@ import java.net.URL; import java.nio.charset.StandardCharsets; import javax.annotation.Nullable; import org.apache.commons.lang3.StringUtils; -import org.sonar.api.internal.apachecommons.lang.StringEscapeUtils; +import org.apache.commons.lang3.StringEscapeUtils; import org.sonar.api.platform.Server; import org.sonar.api.server.http.HttpRequest; import org.sonar.api.server.http.HttpResponse; @@ -78,7 +78,7 @@ public class SamlValidationRedirectionFilter extends HttpFilter { URI redirectionEndpointUrl = URI.create(server.getContextPath() + "/") .resolve(SAML_VALIDATION_CONTROLLER_CONTEXT + "/") .resolve(SAML_VALIDATION_KEY); - String samlResponse = StringEscapeUtils.escapeHtml(request.getParameter(SAML_RESPONSE_PARAMETER)); + String samlResponse = StringEscapeUtils.escapeHtml3(request.getParameter(SAML_RESPONSE_PARAMETER)); String csrfToken = getCsrfTokenFromRelayState(relayState); String nonce = SamlValidationCspHeaders.addCspHeadersWithNonceToResponse(response); @@ -103,7 +103,7 @@ public class SamlValidationRedirectionFilter extends HttpFilter { private static String getCsrfTokenFromRelayState(@Nullable String relayState) { if (relayState != null && relayState.contains("/")) { - return StringEscapeUtils.escapeHtml(relayState.split("/")[1]); + return StringEscapeUtils.escapeHtml3(relayState.split("/")[1]); } return ""; } diff --git a/server/sonar-webserver-core/src/main/java/org/sonar/server/telemetry/TelemetryDataLoaderImpl.java b/server/sonar-webserver-core/src/main/java/org/sonar/server/telemetry/TelemetryDataLoaderImpl.java index 40593143fee..728300033c9 100644 --- a/server/sonar-webserver-core/src/main/java/org/sonar/server/telemetry/TelemetryDataLoaderImpl.java +++ b/server/sonar-webserver-core/src/main/java/org/sonar/server/telemetry/TelemetryDataLoaderImpl.java @@ -72,7 +72,7 @@ import static java.util.Arrays.asList; import static java.util.Optional.ofNullable; import static java.util.stream.Collectors.groupingBy; import static java.util.stream.Collectors.toMap; -import static org.sonar.api.internal.apachecommons.lang.StringUtils.startsWithIgnoreCase; +import static org.apache.commons.lang3.StringUtils.startsWithIgnoreCase; import static org.sonar.api.measures.CoreMetrics.BUGS_KEY; import static org.sonar.api.measures.CoreMetrics.DEVELOPMENT_COST_KEY; import static org.sonar.api.measures.CoreMetrics.NCLOC_KEY; diff --git a/server/sonar-webserver-monitoring/src/test/java/org/sonar/server/monitoring/ElasticSearchMetricTaskTest.java b/server/sonar-webserver-monitoring/src/test/java/org/sonar/server/monitoring/ElasticSearchMetricTaskTest.java index 60fc17a201e..d4273b6ab51 100644 --- a/server/sonar-webserver-monitoring/src/test/java/org/sonar/server/monitoring/ElasticSearchMetricTaskTest.java +++ b/server/sonar-webserver-monitoring/src/test/java/org/sonar/server/monitoring/ElasticSearchMetricTaskTest.java @@ -36,7 +36,7 @@ import org.slf4j.event.Level; import org.sonar.api.config.Configuration; import org.sonar.api.config.internal.MapSettings; import org.sonar.api.internal.apachecommons.io.IOUtils; -import org.sonar.api.internal.apachecommons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.sonar.api.testfixtures.log.LogTester; import org.sonar.server.es.EsClient; import org.sonar.server.es.response.NodeStatsResponse; diff --git a/server/sonar-webserver-pushapi/src/main/java/org/sonar/server/pushapi/sonarlint/SonarLintPushAction.java b/server/sonar-webserver-pushapi/src/main/java/org/sonar/server/pushapi/sonarlint/SonarLintPushAction.java index 1b7c64e1319..8b9bb4545a7 100644 --- a/server/sonar-webserver-pushapi/src/main/java/org/sonar/server/pushapi/sonarlint/SonarLintPushAction.java +++ b/server/sonar-webserver-pushapi/src/main/java/org/sonar/server/pushapi/sonarlint/SonarLintPushAction.java @@ -62,6 +62,7 @@ public class SonarLintPushAction extends ServerPushAction { .setInternal(true) .setDescription("Endpoint for listening to server side events. Currently it notifies listener about change to activation of a rule") .setSince("9.4") + .setContentType(Response.ContentType.NO_CONTENT) .setHandler(this); action diff --git a/server/sonar-webserver-webapi/src/it/java/org/sonar/server/dismissmessage/ws/CheckActionIT.java b/server/sonar-webserver-webapi/src/it/java/org/sonar/server/dismissmessage/ws/CheckActionIT.java index d6f343e3251..d17e0382ec8 100644 --- a/server/sonar-webserver-webapi/src/it/java/org/sonar/server/dismissmessage/ws/CheckActionIT.java +++ b/server/sonar-webserver-webapi/src/it/java/org/sonar/server/dismissmessage/ws/CheckActionIT.java @@ -59,6 +59,7 @@ public class CheckActionIT { assertThat(def.params()).extracting(WebService.Param::key, WebService.Param::isRequired).containsOnly( tuple("projectKey", false), tuple("messageType", true)); + assertThat(def.responseExampleAsString()).isNotEmpty(); } @Test diff --git a/server/sonar-webserver-webapi/src/it/java/org/sonar/server/platform/ws/SafeModeMonitoringMetricActionIT.java b/server/sonar-webserver-webapi/src/it/java/org/sonar/server/platform/ws/SafeModeMonitoringMetricActionIT.java index 5c4545ea558..1648f8c64e2 100644 --- a/server/sonar-webserver-webapi/src/it/java/org/sonar/server/platform/ws/SafeModeMonitoringMetricActionIT.java +++ b/server/sonar-webserver-webapi/src/it/java/org/sonar/server/platform/ws/SafeModeMonitoringMetricActionIT.java @@ -51,6 +51,11 @@ public class SafeModeMonitoringMetricActionIT { private final SafeModeMonitoringMetricAction safeModeMonitoringMetricAction = new SafeModeMonitoringMetricAction(systemPasscode, bearerPasscode); private final WsActionTester ws = new WsActionTester(safeModeMonitoringMetricAction); + @Test + public void define_containsResponseExample() { + assertThat(ws.getDef().responseExampleAsString()).isNotEmpty(); + } + @Test public void no_authentication_throw_insufficient_privileges_error() { TestRequest request = ws.newRequest(); diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/almintegration/ws/CheckPatAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/almintegration/ws/CheckPatAction.java index 08c587a3b0c..6a792535f19 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/almintegration/ws/CheckPatAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/almintegration/ws/CheckPatAction.java @@ -74,6 +74,7 @@ public class CheckPatAction implements AlmIntegrationsWsAction { .setInternal(true) .setSince("8.2") .setHandler(this) + .setContentType(Response.ContentType.NO_CONTENT) .setChangelog(new Change("9.0", "Bitbucket Cloud support was added")); action.createParam(PARAM_ALM_SETTING) diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/dismissmessage/ws/CheckAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/dismissmessage/ws/CheckAction.java index 8d527b2f01f..dabbbaf1bf2 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/dismissmessage/ws/CheckAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/dismissmessage/ws/CheckAction.java @@ -56,6 +56,7 @@ public class CheckAction implements DismissMessageWsAction { WebService.NewAction action = context.createAction("check") .setDescription("Check if a message has been dismissed.") .setSince("10.2") + .setResponseExample(getClass().getResource("check-example.json")) .setInternal(true) .setHandler(this); diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/monitoring/MetricsAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/monitoring/MetricsAction.java index 6f5e731b00f..26e28f06430 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/monitoring/MetricsAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/monitoring/MetricsAction.java @@ -19,7 +19,6 @@ */ package org.sonar.server.monitoring; -import org.sonar.api.server.ws.WebService; import org.sonar.server.platform.ws.SafeModeMonitoringMetricAction; import org.sonar.server.user.BearerPasscode; import org.sonar.server.user.SystemPasscode; @@ -34,20 +33,6 @@ public class MetricsAction extends SafeModeMonitoringMetricAction { this.userSession = userSession; } - @Override - public void define(WebService.NewController context) { - context.createAction("metrics") - .setSince("9.3") - .setDescription(""" - Return monitoring metrics in Prometheus format.\s - Support content type 'text/plain' (default) and 'application/openmetrics-text'. - this endpoint can be access using a Bearer token, that needs to be defined in sonar.properties with the 'sonar.web.systemPasscode' key.""") - .setResponseExample(getClass().getResource("monitoring-metrics.txt")) - .setHandler(this); - - isWebUpGauge.set(1D); - } - @Override public boolean isSystemAdmin() { return userSession.isSystemAdministrator(); diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/platform/ws/LivenessActionSupport.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/platform/ws/LivenessActionSupport.java index f0ac87b12b2..e92c75b914f 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/platform/ws/LivenessActionSupport.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/platform/ws/LivenessActionSupport.java @@ -46,6 +46,7 @@ public class LivenessActionSupport { "

") .setSince("9.1") .setInternal(true) + .setContentType(Response.ContentType.NO_CONTENT) .setHandler(handler); } diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/platform/ws/SafeModeMonitoringMetricAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/platform/ws/SafeModeMonitoringMetricAction.java index 8a33cb0ebbb..e9948472929 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/platform/ws/SafeModeMonitoringMetricAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/platform/ws/SafeModeMonitoringMetricAction.java @@ -19,6 +19,7 @@ */ package org.sonar.server.platform.ws; +import com.google.common.io.Resources; import com.google.common.net.HttpHeaders; import io.prometheus.client.CollectorRegistry; import io.prometheus.client.Gauge; @@ -50,7 +51,14 @@ public class SafeModeMonitoringMetricAction implements MonitoringWsAction { @Override public void define(WebService.NewController context) { - context.createAction("metrics").setHandler(this); + context.createAction("metrics") + .setSince("9.3") + .setDescription(""" + Return monitoring metrics in Prometheus format.\s + Support content type 'text/plain' (default) and 'application/openmetrics-text'. + this endpoint can be access using a Bearer token, that needs to be defined in sonar.properties with the 'sonar.web.systemPasscode' key.""") + .setResponseExample(Resources.getResource(this.getClass(), "monitoring-metrics.txt")) + .setHandler(this); isWebUpGauge.set(1D); } diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/plugins/ws/DownloadAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/plugins/ws/DownloadAction.java index f1962812e4d..dd7605516b5 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/plugins/ws/DownloadAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/plugins/ws/DownloadAction.java @@ -47,7 +47,7 @@ public class DownloadAction implements PluginsWsAction { .setSince("7.2") .setDescription("Download plugin JAR, for usage by scanner engine") .setInternal(true) - .setResponseExample(getClass().getResource("example-download.json")) + .setContentType(Response.ContentType.BINARY) .setHandler(this); action.createParam(PLUGIN_PARAM) diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/saml/ws/ValidationInitAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/saml/ws/ValidationInitAction.java index ded626c07a5..d7257c6221a 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/saml/ws/ValidationInitAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/saml/ws/ValidationInitAction.java @@ -22,6 +22,7 @@ package org.sonar.server.saml.ws; import java.io.IOException; import org.sonar.api.server.http.HttpRequest; import org.sonar.api.server.http.HttpResponse; +import org.sonar.api.server.ws.Response; import org.sonar.api.server.ws.WebService; import org.sonar.api.web.FilterChain; import org.sonar.api.web.HttpFilter; @@ -67,6 +68,7 @@ public class ValidationInitAction extends HttpFilter implements SamlAction { .setPost(false) .setHandler(ServletFilterHandler.INSTANCE) .setDescription("Initiate a SAML request to the identity Provider for configuration validation purpose.") + .setContentType(Response.ContentType.NO_CONTENT) .setSince("9.7"); } diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/scannercache/ws/GetAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/scannercache/ws/GetAction.java index 73eee09e098..dcabfcb71c8 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/scannercache/ws/GetAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/scannercache/ws/GetAction.java @@ -67,6 +67,7 @@ public class GetAction implements AnalysisCacheWsAction { + "Data is returned gzipped if the corresponding 'Accept-Encoding' header is set in the request.") .setChangelog(new Change("9.9", "The web service is no longer internal")) .setSince("9.4") + .setContentType(Response.ContentType.BINARY) .setHandler(this); action.createParam(PROJECT) diff --git a/server/sonar-webserver-webapi/src/main/resources/org/sonar/server/dismissmessage/ws/check-example.json b/server/sonar-webserver-webapi/src/main/resources/org/sonar/server/dismissmessage/ws/check-example.json new file mode 100644 index 00000000000..e283786b1e1 --- /dev/null +++ b/server/sonar-webserver-webapi/src/main/resources/org/sonar/server/dismissmessage/ws/check-example.json @@ -0,0 +1,3 @@ +{ + "dismissed":true +} \ No newline at end of file diff --git a/server/sonar-webserver-webapi/src/main/resources/org/sonar/server/platform/ws/monitoring-metrics.txt b/server/sonar-webserver-webapi/src/main/resources/org/sonar/server/platform/ws/monitoring-metrics.txt new file mode 100644 index 00000000000..48b4b244045 --- /dev/null +++ b/server/sonar-webserver-webapi/src/main/resources/org/sonar/server/platform/ws/monitoring-metrics.txt @@ -0,0 +1,44 @@ +# HELP sonarqube_compute_engine_tasks_running_duration_seconds Compute engine task running time in seconds +# TYPE sonarqube_compute_engine_tasks_running_duration_seconds summary +# HELP sonarqube_health_web_status Tells whether Web process is up or down. 1 for up, 0 for down +# TYPE sonarqube_health_web_status gauge +sonarqube_health_web_status 1.0 +# HELP sonarqube_license_days_before_expiration_total Days until the SonarQube license will expire. +# TYPE sonarqube_license_days_before_expiration_total gauge +sonarqube_license_days_before_expiration_total 28.0 +# HELP sonarqube_license_number_of_lines_remaining_total Number of lines remaining until the limit for the current license is hit. +# TYPE sonarqube_license_number_of_lines_remaining_total gauge +sonarqube_license_number_of_lines_remaining_total 5000000.0 +# HELP sonarqube_health_compute_engine_status Tells whether Compute Engine is up (healthy, ready to take tasks) or down. 1 for up, 0 for down +# TYPE sonarqube_health_compute_engine_status gauge +sonarqube_health_compute_engine_status 1.0 +# HELP sonarqube_license_number_of_lines_analyzed_total Number of lines analyzed. +# TYPE sonarqube_license_number_of_lines_analyzed_total gauge +sonarqube_license_number_of_lines_analyzed_total 0.0 +# HELP sonarqube_web_uptime_minutes Number of minutes for how long the SonarQube instance is running +# TYPE sonarqube_web_uptime_minutes gauge +sonarqube_web_uptime_minutes 13.0 +# HELP sonarqube_health_integration_azuredevops_status Tells whether SonarQube instance has configured Azure integration and its status is green. 1 for green, 0 otherwise . +# TYPE sonarqube_health_integration_azuredevops_status gauge +sonarqube_health_integration_azuredevops_status 0.0 +# HELP sonarqube_health_elasticsearch_status Tells whether Elasticsearch is up or down. 1 for Up, 0 for down +# TYPE sonarqube_health_elasticsearch_status gauge +sonarqube_health_elasticsearch_status 1.0 +# HELP sonarqube_health_integration_gitlab_status Tells whether SonarQube instance has configured GitLab integration and its status is green. 1 for green, 0 otherwise . +# TYPE sonarqube_health_integration_gitlab_status gauge +sonarqube_health_integration_gitlab_status 0.0 +# HELP sonarqube_health_integration_github_status Tells whether SonarQube instance has configured GitHub integration and its status is green. 1 for green, 0 otherwise . +# TYPE sonarqube_health_integration_github_status gauge +sonarqube_health_integration_github_status 0.0 +# HELP sonarqube_health_integration_bitbucket_status Tells whether SonarQube instance has configured BitBucket integration and its status is green. 1 for green, 0 otherwise . +# TYPE sonarqube_health_integration_bitbucket_status gauge +sonarqube_health_integration_bitbucket_status 0.0 +# HELP sonarqube_elasticsearch_disk_space_total_bytes Total disk space on the device +# TYPE sonarqube_elasticsearch_disk_space_total_bytes gauge +sonarqube_elasticsearch_disk_space_total_bytes{node_name="sonarqube",} 9.9466258432E11 +# HELP sonarqube_elasticsearch_disk_space_free_bytes Space left on device +# TYPE sonarqube_elasticsearch_disk_space_free_bytes gauge +sonarqube_elasticsearch_disk_space_free_bytes{node_name="sonarqube",} 9.00287975424E11 +# HELP sonarqube_compute_engine_pending_tasks_total Number of tasks at given point of time that were pending in the Compute Engine queue [SHARED, same value for every SonarQube instance] +# TYPE sonarqube_compute_engine_pending_tasks_total gauge +sonarqube_compute_engine_pending_tasks_total 0.0 \ No newline at end of file