Example #1
0
        private ElasticsearchResponse <BulkResponse> HandleBulkRequest(string content)
        {
            if (string.IsNullOrWhiteSpace(content))
            {
                return(ElasticsearchResponseExtensions.ParseException());
            }

            var          lines   = content.Split('\n');
            IndexCommand current = null;

            dynamic responseBuilder = ElasticsearchResponseExtensions.GetBulkResponseBuilder();
            var     itemsToIndex    = new Dictionary <string, Dictionary <string, Dictionary <string, string> > >();

            foreach (var line in lines)
            {
                if (current == null)
                {
                    if (string.IsNullOrWhiteSpace(line))
                    {
                        continue;
                    }

                    // Validate the action metadata line.
                    current = IndexCommand.Parse(line);
                    if (current == null)
                    {
                        return(ElasticsearchResponseExtensions.JsonParseException());
                    }
                    if (current.index == null)
                    {
                        return(ElasticsearchResponseExtensions.MalformedActionException());
                    }
                    if (string.IsNullOrWhiteSpace(current.index._index))
                    {
                        return(ElasticsearchResponseExtensions.ActionIndexMissingException());
                    }
                    if (string.IsNullOrWhiteSpace(current.index._type))
                    {
                        return(ElasticsearchResponseExtensions.ActionTypeMissingException());
                    }
                }
                else
                {
                    if (string.IsNullOrWhiteSpace(line))
                    {
                        ElasticsearchResponseExtensions.AddEmptyItem(responseBuilder, current.index._index, current.index._type, current.index._id);
                    }
                    else if (!IsValidJson(line))
                    {
                        ElasticsearchResponseExtensions.AddInvalidJsonItem(responseBuilder, current.index._index, current.index._type, current.index._id);
                    }
                    else
                    {
                        ElasticsearchResponseExtensions.AddBulkItem(responseBuilder, current.index._index, current.index._type, current.index._id);
                        TrackItemToIndex(itemsToIndex, current.index._index, current.index._type, current.index._id, line);
                    }

                    current = null;
                }
            }

            if (responseBuilder.items.Count == 0)
            {
                return(ElasticsearchResponseExtensions.ParseException());
            }

            IndexItems(itemsToIndex);
            return(ElasticsearchResponseExtensions.GetBulkResponse(HttpStatusCode.OK, responseBuilder));
        }