Exemple #1
0
        public async Task <IElasticLowLevelClient> BuildAsync(ElasticClientConfiguration config, IEnumerable <string> indices)
        {
            var settings = new ConnectionConfiguration(new Uri(config.Address));
            var client   = new ElasticLowLevelClient(settings);
            var errors   = new List <Exception>();

            foreach (var index in indices)
            {
                var indexExists = await client.IndicesExistsAsync <string>(index).ConfigureAwait(false);

                if (indexExists.HttpStatusCode == null || indexExists.HttpStatusCode.Value == 404)
                {
                    var postData = new
                    {
                        mappings = new
                        {
                            _default_ = new
                            {
                                properties = new
                                {
                                    Timestamp = new
                                    {
                                        type = "date"
                                    }
                                }
                            }
                        }
                    };

                    var response = await client.IndicesCreateAsync <VoidResponse>(index, postData).ConfigureAwait(false);

                    if (!response.Success)
                    {
                        errors.Add(new ElasticException(response));
                    }
                }
            }

            if (errors.Count > 0)
            {
                throw new AggregateException(errors);
            }

            return(client);
        }
Exemple #2
0
        private async Task CreateIndex(string correlationId, bool force)
        {
            var newIndex = GetCurrentIndex();

            if (!force && _currentIndexName == newIndex)
            {
                return;
            }

            _currentIndexName = newIndex;
            var response = await _client.IndicesExistsAsync <StringResponse>(_currentIndexName);

            if (response.HttpStatusCode == 404)
            {
                var request = new
                {
                    settings = new
                    {
                        number_of_shards = 1
                    },
                    mappings = new
                    {
                        log_message = new
                        {
                            properties = new
                            {
                                time           = new { type = "date", index = true },
                                source         = new { type = "keyword", index = true },
                                level          = new { type = "keyword", index = true },
                                correlation_id = new { type = "text", index = true },
                                error          = new
                                {
                                    type       = "object",
                                    properties = new
                                    {
                                        type           = new { type = "keyword", index = true },
                                        category       = new { type = "keyword", index = true },
                                        status         = new { type = "integer", index = false },
                                        code           = new { type = "keyword", index = true },
                                        message        = new { type = "text", index = false },
                                        details        = new { type = "object" },
                                        correlation_id = new { type = "text", index = false },
                                        cause          = new { type = "text", index = false },
                                        stack_trace    = new { type = "text", index = false }
                                    }
                                },
                                message = new { type = "text", index = _indexMessage }
                            }
                        }
                    }
                };
                var json = JsonConverter.ToJson(request);
                try
                {
                    response = await _client.IndicesCreateAsync <StringResponse>(_currentIndexName, PostData.String(json));

                    if (!response.Success)
                    {
                        throw new ConnectionException(correlationId, "CANNOT_CREATE_INDEX", response.Body);
                    }
                }
                catch (Exception ex)
                {
                    if (!ex.Message.Contains("resource_already_exists"))
                    {
                        throw;
                    }
                }
            }
            else if (!response.Success)
            {
                throw new ConnectionException(correlationId, "CONNECTION_FAILED", response.Body);
            }
        }