public async Task <LineProtocolWriteResult> WriteAsync(LineProtocolPayload payload,
                                                               CancellationToken cancellationToken = default(CancellationToken))
        {
            var result = await _policy.ExecuteAndCaptureAsync(async() =>
            {
                var payloadText = new StringWriter();
                payload.Format(payloadText);

                var content  = new StringContent(payloadText.ToString(), Encoding.UTF8);
                var response = await _httpClient.PostAsync(_influxDbSettings.Endpoint, content, cancellationToken).ConfigureAwait(false);

                response.EnsureSuccessStatusCode();

                return(new LineProtocolWriteResult(true, null));
            }, cancellationToken);

            if (result.Outcome == OutcomeType.Failure)
            {
                _logger.LogError(LoggingEvents.InfluxDbWriteError, result.FinalException, "Failed to write to InfluxDB");

                return(new LineProtocolWriteResult(false, result.FinalException.ToString()));
            }

            _logger.LogDebug("Successful write to InfluxDB");

            return(result.Result);
        }
        public async Task <LineProtocolWriteResult> WriteAsync(LineProtocolPayload payload,
                                                               CancellationToken cancellationToken = default(CancellationToken))
        {
            var endpoint = $"write?db={Uri.EscapeDataString(_database)}";

            if (_retentionPolicy.IsPresent())
            {
                endpoint += $"&rp={Uri.EscapeDataString(_retentionPolicy)}";
            }

            if (_consistenency.IsPresent())
            {
                endpoint += $"&consistency={Uri.EscapeDataString(_consistenency)}";
            }

            var result = await _policy.ExecuteAndCaptureAsync(async() =>
            {
                var payloadText = new StringWriter();
                payload.Format(payloadText);

                var content  = new StringContent(payloadText.ToString(), Encoding.UTF8);
                var response = await _httpClient.PostAsync(endpoint, content, cancellationToken).ConfigureAwait(false);

                return(response.IsSuccessStatusCode
                    ? new LineProtocolWriteResult(true, null)
                    : new LineProtocolWriteResult(false, $"{response.StatusCode} {response.ReasonPhrase}"));
            }, cancellationToken);

            return(result.Result);
        }
Beispiel #3
0
        public async Task <LineProtocolWriteResult> WriteAsync(
            LineProtocolPayload payload,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            if (NeedToBackoff())
            {
                return(new LineProtocolWriteResult(false, "Too many failures in writing to InfluxDB, Circuit Opened"));
            }

            var payloadText = new StringWriter();

            payload.Format(payloadText);
            var content = new StringContent(payloadText.ToString(), Encoding.UTF8);

            try
            {
                var response = await _httpClient.PostAsync(_influxDbSettings.Endpoint, content, cancellationToken).ConfigureAwait(false);

                if (!response.IsSuccessStatusCode)
                {
                    Interlocked.Increment(ref _failureAttempts);

                    var errorMessage = $"Failed to write to InfluxDB - StatusCode: {response.StatusCode} Reason: {response.ReasonPhrase}";
                    _logger.LogError(LoggingEvents.InfluxDbWriteError, errorMessage);

                    return(new LineProtocolWriteResult(false, errorMessage));
                }

                _logger.LogTrace("Successful write to InfluxDB");

                return(new LineProtocolWriteResult(true));
            }
            catch (Exception ex)
            {
                Interlocked.Increment(ref _failureAttempts);
                _logger.LogError(LoggingEvents.InfluxDbWriteError, "Failed to write to InfluxDB", ex);
                return(new LineProtocolWriteResult(false, ex.ToString()));
            }
        }
Beispiel #4
0
        public async Task <LineProtocolWriteResult> WriteAsync(LineProtocolPayload payload,
                                                               CancellationToken cancellationToken = default(CancellationToken))
        {
            var endpoint = $"write?db={Uri.EscapeDataString(_database)}";

            if (_retentionPolicy.IsPresent())
            {
                endpoint += $"&rp={Uri.EscapeDataString(_retentionPolicy)}";
            }

            if (_consistenency.IsPresent())
            {
                endpoint += $"&consistency={Uri.EscapeDataString(_consistenency)}";
            }

            var result = await _policy.ExecuteAndCaptureAsync(async() =>
            {
                var payloadText = new StringWriter();
                payload.Format(payloadText);

                var content  = new StringContent(payloadText.ToString(), Encoding.UTF8);
                var response = await _httpClient.PostAsync(endpoint, content, cancellationToken).ConfigureAwait(false);

                return(response.IsSuccessStatusCode
                    ? new LineProtocolWriteResult(true, null)
                    : new LineProtocolWriteResult(false, $"{response.StatusCode} {response.ReasonPhrase}"));
            }, cancellationToken);

            if (result.Outcome == OutcomeType.Failure)
            {
                _logger.LogError(LoggingEvents.InfluxDbWriteError, result.FinalException, "Failed to write to InfluxDB {error}", result.Result.ErrorMessage);
            }
            else
            {
                _logger.LogDebug("Successful write to InfluxDB");
            }

            return(result.Result);
        }
 public LineProtocolPayloadBuilder Init()
 {
     _payload = new LineProtocolPayload();
     return(this);
 }
 public void Clear()
 {
     _payload = null;
 }