From e81821f0f7f74d03bf38db44a35aefe20a119cba Mon Sep 17 00:00:00 2001 From: Steve Gordon Date: Fri, 23 Apr 2021 10:59:22 +0100 Subject: [PATCH 1/2] Add registered domain processor (#5616) --- src/Nest/Ingest/ProcessorFormatter.cs | 9 ++- .../Processors/NetworkDirectionProcessor.cs | 6 +- .../Processors/RegisteredDomainProcoessor.cs | 65 +++++++++++++++++++ src/Nest/Ingest/ProcessorsDescriptor.cs | 4 ++ tests/Tests/Ingest/ProcessorAssertions.cs | 26 ++++++++ 5 files changed, 108 insertions(+), 2 deletions(-) create mode 100644 src/Nest/Ingest/Processors/RegisteredDomainProcoessor.cs diff --git a/src/Nest/Ingest/ProcessorFormatter.cs b/src/Nest/Ingest/ProcessorFormatter.cs index c012ef8da66..7cc0287e870 100644 --- a/src/Nest/Ingest/ProcessorFormatter.cs +++ b/src/Nest/Ingest/ProcessorFormatter.cs @@ -45,7 +45,8 @@ internal class ProcessorFormatter : IJsonFormatter { "uri_parts", 33 }, { "fingerprint", 34 }, { "community_id", 35 }, - { "network_direction", 36 } + { "network_direction", 36 }, + { "registered_domain", 37 } }; public IProcessor Deserialize(ref JsonReader reader, IJsonFormatterResolver formatterResolver) @@ -177,6 +178,9 @@ public IProcessor Deserialize(ref JsonReader reader, IJsonFormatterResolver form case 36: processor = Deserialize(ref reader, formatterResolver); break; + case 37: + processor = Deserialize(ref reader, formatterResolver); + break; } } else @@ -309,6 +313,9 @@ public void Serialize(ref JsonWriter writer, IProcessor value, IJsonFormatterRes case "network_direction": Serialize(ref writer, value, formatterResolver); break; + case "registered_domain": + Serialize(ref writer, value, formatterResolver); + break; default: var formatter = DynamicObjectResolver.ExcludeNullCamelCase.GetFormatter(); formatter.Serialize(ref writer, value, formatterResolver); diff --git a/src/Nest/Ingest/Processors/NetworkDirectionProcessor.cs b/src/Nest/Ingest/Processors/NetworkDirectionProcessor.cs index f28370de690..80ccc3fde5b 100644 --- a/src/Nest/Ingest/Processors/NetworkDirectionProcessor.cs +++ b/src/Nest/Ingest/Processors/NetworkDirectionProcessor.cs @@ -1,4 +1,8 @@ -using System; +// Licensed to Elasticsearch B.V under one or more agreements. +// 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; using System.Collections.Generic; using System.Linq.Expressions; using System.Runtime.Serialization; diff --git a/src/Nest/Ingest/Processors/RegisteredDomainProcoessor.cs b/src/Nest/Ingest/Processors/RegisteredDomainProcoessor.cs new file mode 100644 index 00000000000..21490277e11 --- /dev/null +++ b/src/Nest/Ingest/Processors/RegisteredDomainProcoessor.cs @@ -0,0 +1,65 @@ +// Licensed to Elasticsearch B.V under one or more agreements. +// 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; +using System.Linq.Expressions; +using System.Runtime.Serialization; +using Elasticsearch.Net.Utf8Json; + +namespace Nest +{ + [InterfaceDataContract] + public interface IRegisteredDomainProcessor : IProcessor + { + [DataMember(Name = "field")] + Field Field { get; set; } + + [DataMember(Name = "ignore_missing")] + bool? IgnoreMissing { get; set; } + + [DataMember(Name = "target_field")] + Field TargetField { get; set; } + } + + public class RegisteredDomainProcessor : ProcessorBase, IRegisteredDomainProcessor + { + protected override string Name => "registered_domain"; + + /// + public Field Field { get; set; } + /// + public bool? IgnoreMissing { get; set; } + /// + public Field TargetField { get; set; } + } + + /// + public class RegisteredDomainProcessorDescriptor + : ProcessorDescriptorBase, IRegisteredDomainProcessor>, IRegisteredDomainProcessor + where T : class + { + protected override string Name => "registered_domain"; + + Field IRegisteredDomainProcessor.Field { get; set; } + bool? IRegisteredDomainProcessor.IgnoreMissing { get; set; } + Field IRegisteredDomainProcessor.TargetField { get; set; } + + /// + public RegisteredDomainProcessorDescriptor Field(Field field) => Assign(field, (a, v) => a.Field = v); + + /// + public RegisteredDomainProcessorDescriptor Field(Expression> objectPath) => + Assign(objectPath, (a, v) => a.Field = v); + + /// + public RegisteredDomainProcessorDescriptor IgnoreMissing(bool? ignoreMissing = true) => Assign(ignoreMissing, (a, v) => a.IgnoreMissing = v); + + /// + public RegisteredDomainProcessorDescriptor TargetField(Field field) => Assign(field, (a, v) => a.TargetField = v); + + /// + public RegisteredDomainProcessorDescriptor TargetField(Expression> objectPath) => + Assign(objectPath, (a, v) => a.TargetField = v); + } +} diff --git a/src/Nest/Ingest/ProcessorsDescriptor.cs b/src/Nest/Ingest/ProcessorsDescriptor.cs index ba3180eb4c1..b6bb5e7c3ea 100644 --- a/src/Nest/Ingest/ProcessorsDescriptor.cs +++ b/src/Nest/Ingest/ProcessorsDescriptor.cs @@ -193,5 +193,9 @@ public ProcessorsDescriptor NetworkCommunityId(Func public ProcessorsDescriptor NetworkDirection(Func, INetworkDirectionProcessor> selector) where T : class => Assign(selector, (a, v) => a.AddIfNotNull(v?.Invoke(new NetworkDirectionProcessorDescriptor()))); + + /// + public ProcessorsDescriptor RegisteredDomain(Func, IRegisteredDomainProcessor> selector) where T : class => + Assign(selector, (a, v) => a.AddIfNotNull(v?.Invoke(new RegisteredDomainProcessorDescriptor()))); } } diff --git a/tests/Tests/Ingest/ProcessorAssertions.cs b/tests/Tests/Ingest/ProcessorAssertions.cs index ac68b0a8c4f..91fffbf7c2c 100644 --- a/tests/Tests/Ingest/ProcessorAssertions.cs +++ b/tests/Tests/Ingest/ProcessorAssertions.cs @@ -850,5 +850,31 @@ public class NetworkDirectionWithField : ProcessorAssertion public override string Key => "network_direction"; } + + [SkipVersion("<7.13.0", "Register_domain processor added in 7.13.0")] + public class RegisteredDomain : ProcessorAssertion + { + public override ProcFunc Fluent => d => d + .RegisteredDomain(ud => ud + .Field(f => f.Name) + .TargetField("domain") + .IgnoreMissing()); + + public override IProcessor Initializer => new RegisteredDomainProcessor + { + Field = Field(f => f.Name), + TargetField = "domain", + IgnoreMissing = true + }; + + public override object Json => new + { + field = "name", + target_field = "domain", + ignore_missing = true + }; + + public override string Key => "registered_domain"; + } } } From 36891c2a45c219ce102ee8764ad1ebff5017f9f9 Mon Sep 17 00:00:00 2001 From: Steve Gordon Date: Fri, 23 Apr 2021 12:04:08 +0100 Subject: [PATCH 2/2] Fixup namespace --- src/Nest/Ingest/Processors/RegisteredDomainProcoessor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nest/Ingest/Processors/RegisteredDomainProcoessor.cs b/src/Nest/Ingest/Processors/RegisteredDomainProcoessor.cs index 21490277e11..462335cd25f 100644 --- a/src/Nest/Ingest/Processors/RegisteredDomainProcoessor.cs +++ b/src/Nest/Ingest/Processors/RegisteredDomainProcoessor.cs @@ -5,7 +5,7 @@ using System; using System.Linq.Expressions; using System.Runtime.Serialization; -using Elasticsearch.Net.Utf8Json; +using Nest.Utf8Json; namespace Nest {