private InvalidResult GetInvalidPayloadAsync(DynamicResponse baseResult, List <string> payload, out List <string> cleanPayload) { int i = 0; cleanPayload = new List <string>(); var items = baseResult.Body["items"]; if (items == null) { return(null); } List <string> badPayload = new List <string>(); bool hasErrors = false; foreach (dynamic item in items) { var itemIndex = item?[ElasticsearchSink.BulkAction(_elasticOpType)]; long?status = itemIndex?["status"]; i++; if (!status.HasValue || status < 300) { continue; } hasErrors = true; var id = itemIndex?["_id"]; var error = itemIndex?["error"]; var errorString = $"type: {error?["type"] ?? "Unknown"}, reason: {error?["reason"] ?? "Unknown"}"; if (int.TryParse(id.Split('_')[0], out int index)) { SelfLog.WriteLine("Received failed ElasticSearch shipping result {0}: {1}. Failed payload : {2}.", status, errorString, payload.ElementAt(index * 2 + 1)); badPayload.Add(payload.ElementAt(index * 2)); badPayload.Add(payload.ElementAt(index * 2 + 1)); if (_cleanPayload != null) { cleanPayload.Add(payload.ElementAt(index * 2)); cleanPayload.Add(_cleanPayload(payload.ElementAt(index * 2 + 1), status, errorString)); } } else { SelfLog.WriteLine($"Received failed ElasticSearch shipping result {status}: {errorString}."); } } if (!hasErrors) { return(null); } return(new InvalidResult() { StatusCode = baseResult.HttpStatusCode ?? 500, Content = baseResult.ToString(), BadPayLoad = String.Join(Environment.NewLine, badPayload) }); }
private InvalidResult GetInvalidPayloadAsync(DynamicResponse baseResult, List <string> payload, out List <string> cleanPayload) { int i = 0; cleanPayload = new List <string>(); var items = baseResult.Body["items"]; if (items == null) { return(null); } List <string> badPayload = new List <string>(); bool hasErrors = false; foreach (dynamic item in items) { long?status = item.index?.status; i++; if (!status.HasValue || status < 300) { continue; } hasErrors = true; var id = item.index?._id; var error = item.index?.error; if (int.TryParse(id.Split('_')[0], out int index)) { SelfLog.WriteLine("Received failed ElasticSearch shipping result {0}: {1}. Failed payload : {2}.", status, error?.ToString(), payload.ElementAt(index * 2 + 1)); badPayload.Add(payload.ElementAt(index * 2)); badPayload.Add(payload.ElementAt(index * 2 + 1)); if (_cleanPayload != null) { cleanPayload.Add(payload.ElementAt(index * 2)); cleanPayload.Add(_cleanPayload(payload.ElementAt(index * 2 + 1), status, error?.ToString())); } } else { SelfLog.WriteLine($"Received failed ElasticSearch shipping result {status}: {error?.ToString()}."); } } if (!hasErrors) { return(null); } return(new InvalidResult() { StatusCode = baseResult.HttpStatusCode ?? 500, Content = baseResult.ToString(), BadPayLoad = String.Join(Environment.NewLine, badPayload) }); }