From 05e518e63d881c90ee3f0240e823b44d4dab2292 Mon Sep 17 00:00:00 2001 From: Martijn Laarman Date: Tue, 31 Jan 2023 13:20:57 +0100 Subject: [PATCH 1/2] Automatically apply logs/metrics defaults based on DataStreamName.Type --- .../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..cb69869 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 string[] 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.ToArray(); + } } } From 758e6152105cc056255cf8eba2b97ab3ec37aff0 Mon Sep 17 00:00:00 2001 From: Martijn Laarman Date: Tue, 31 Jan 2023 13:25:51 +0100 Subject: [PATCH 2/2] return List instead of array --- .../DataStreams/DataStreamChannel.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Elastic.Ingest.Elasticsearch/DataStreams/DataStreamChannel.cs b/src/Elastic.Ingest.Elasticsearch/DataStreams/DataStreamChannel.cs index cb69869..ca6d51e 100644 --- a/src/Elastic.Ingest.Elasticsearch/DataStreams/DataStreamChannel.cs +++ b/src/Elastic.Ingest.Elasticsearch/DataStreams/DataStreamChannel.cs @@ -46,7 +46,7 @@ protected override (string, string) GetDefaultIndexTemplate(string name, string return (name, indexTemplateBody); } - protected string[] GetInferredComponentTemplates() + 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. @@ -54,7 +54,7 @@ protected string[] GetInferredComponentTemplates() additionalComponents.AddRange(new[] { "logs-settings", "logs-mappings" }); else if (Options.DataStream.Type.ToLowerInvariant() == "metrics") additionalComponents.AddRange(new[] { "metrics-settings", "metrics-mappings" }); - return additionalComponents.ToArray(); + return additionalComponents; } } }