public Task PingAsync()

in src/Elastic.Transport/Components/Pipeline/RequestPipeline.cs [396:436]


	public Task PingAsync(Node node, Auditor? auditor, CancellationToken cancellationToken = default)
		=> PingCoreAsync(true, node, auditor, cancellationToken).AsTask();

	private async ValueTask PingCoreAsync(bool isAsync, Node node, Auditor? auditor, CancellationToken cancellationToken = default)
	{
		if (!_productRegistration.SupportsPing) return;
		if (PingDisabled(node)) return;

		var pingEndpoint = _productRegistration.CreatePingEndpoint(node, PingAndSniffRequestConfiguration);

		using var audit = auditor?.Add(PingSuccess, _dateTimeProvider, node);

		TransportResponse response;

		try
		{
			if (isAsync)
				response = await _productRegistration.PingAsync(_requestInvoker, pingEndpoint, _boundConfiguration, cancellationToken).ConfigureAwait(false);
			else
				response = _productRegistration.Ping(_requestInvoker, pingEndpoint, _boundConfiguration);

			ThrowBadAuthPipelineExceptionWhenNeeded(response.ApiCallDetails);

			//ping should not silently accept bad but valid http responses
			if (!response.ApiCallDetails.HasSuccessfulStatusCodeAndExpectedContentType)
			{
				var pipelineFailure = response.ApiCallDetails.HttpStatusCode != null ? PipelineFailure.BadResponse : PipelineFailure.BadRequest;
				throw new PipelineException(pipelineFailure, response.ApiCallDetails.OriginalException) { Response = response };
			}
		}
		catch (Exception e)
		{
			response = (e as PipelineException)?.Response;
			if (audit is not null)
			{
				audit.Event = PingFailure;
				audit.Exception = e;
			}
			throw new PipelineException(PipelineFailure.PingFailure, e) { Response = response };
		}
	}