From 23874865120b785f90bd12a32b9ca2fcb712a411 Mon Sep 17 00:00:00 2001 From: Martijn Laarman Date: Tue, 31 Jan 2023 13:32:42 +0100 Subject: [PATCH] Automatically apply logs/metrics defaults based on DataStreamName.Type (#15) --- .../DataStreams/DataStreamChannel.cs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/Elastic.Ingest.Elasticsearch/DataStreams/DataStreamChannel.cs b/src/Elastic.Ingest.Elasticsearch/DataStreams/DataStreamChannel.cs index 3485301..ca6d51e 100644 --- a/src/Elastic.Ingest.Elasticsearch/DataStreams/DataStreamChannel.cs +++ b/src/Elastic.Ingest.Elasticsearch/DataStreams/DataStreamChannel.cs @@ -2,6 +2,8 @@ // Elasticsearch B.V licenses this file to you under the Apache 2.0 License. // See the LICENSE file in the project root for more information +using System.Collections.Generic; +using System.Linq; using Elastic.Ingest.Elasticsearch.Serialization; using Elastic.Ingest.Transport; @@ -28,10 +30,13 @@ public DataStreamChannel(DataStreamChannelOptions options) : base(option /// A tuple of (name, body) describing the index template protected override (string, string) GetDefaultIndexTemplate(string name, string match, string mappingsName, string settingsName) { + var additionalComponents = GetInferredComponentTemplates(); + var additionalComponentsJson = string.Join(", ", additionalComponents.Select(a => $"\"{a}\"")); + var indexTemplateBody = @$"{{ ""index_patterns"": [""{match}""], ""data_stream"": {{ }}, - ""composed_of"": [ ""{mappingsName}"", ""{settingsName}"", ""data-streams-mappings"" ], + ""composed_of"": [ ""{mappingsName}"", ""{settingsName}"", {additionalComponentsJson} ], ""priority"": 201, ""_meta"": {{ ""description"": ""Template installed by .NET ingest libraries (https://github.com/elastic/elastic-ingest-dotnet)"", @@ -40,5 +45,16 @@ protected override (string, string) GetDefaultIndexTemplate(string name, string }}"; return (name, indexTemplateBody); } + + protected List GetInferredComponentTemplates() + { + var additionalComponents = new List { "data-streams-mappings" }; + // if we know the type of data is logs or metrics apply certain defaults that Elasticsearch ships with. + if (Options.DataStream.Type.ToLowerInvariant() == "logs") + additionalComponents.AddRange(new[] { "logs-settings", "logs-mappings" }); + else if (Options.DataStream.Type.ToLowerInvariant() == "metrics") + additionalComponents.AddRange(new[] { "metrics-settings", "metrics-mappings" }); + return additionalComponents; + } } }