From d06f5184827d1d740584186f327168837c42f899 Mon Sep 17 00:00:00 2001 From: Jake Landis Date: Thu, 31 Jan 2019 14:00:15 -0600 Subject: [PATCH] Ingest node - user agent, move device to an object (#38115) When the ingest node user_agent parses the device field, it will result in a string value. To match the ecs schema this commit moves the value of the parsed device to an object with an inner field named 'name'. There are not any passivity concerns since this modifies an unreleased change. closes #38094 relates #37329 --- .../ingest/processors/user-agent.asciidoc | 4 +++- .../ingest/useragent/UserAgentProcessor.java | 6 ++++-- .../useragent/UserAgentProcessorTests.java | 16 ++++++++++++---- .../ingest-useragent/20_useragent_processor.yml | 2 +- .../test/ingest-useragent/30_custom_regex.yml | 2 +- 5 files changed, 21 insertions(+), 9 deletions(-) diff --git a/docs/reference/ingest/processors/user-agent.asciidoc b/docs/reference/ingest/processors/user-agent.asciidoc index 7c13fb5203866..69ed88a9be615 100644 --- a/docs/reference/ingest/processors/user-agent.asciidoc +++ b/docs/reference/ingest/processors/user-agent.asciidoc @@ -69,7 +69,9 @@ Which returns "version": "10.10.5", "full": "Mac OS X 10.10.5" }, - "device": "Other" + "device" : { + "name" : "Other" + }, } } } diff --git a/modules/ingest-user-agent/src/main/java/org/elasticsearch/ingest/useragent/UserAgentProcessor.java b/modules/ingest-user-agent/src/main/java/org/elasticsearch/ingest/useragent/UserAgentProcessor.java index f3d45ec389c0c..11c8d356bf2e2 100644 --- a/modules/ingest-user-agent/src/main/java/org/elasticsearch/ingest/useragent/UserAgentProcessor.java +++ b/modules/ingest-user-agent/src/main/java/org/elasticsearch/ingest/useragent/UserAgentProcessor.java @@ -139,11 +139,13 @@ public IngestDocument execute(IngestDocument ingestDocument) { } break; case DEVICE: + Map deviceDetails = new HashMap<>(1); if (uaClient.device != null && uaClient.device.name != null) { - uaDetails.put("device", uaClient.device.name); + deviceDetails.put("name", uaClient.device.name); } else { - uaDetails.put("device", "Other"); + deviceDetails.put("name", "Other"); } + uaDetails.put("device", deviceDetails); break; } } diff --git a/modules/ingest-user-agent/src/test/java/org/elasticsearch/ingest/useragent/UserAgentProcessorTests.java b/modules/ingest-user-agent/src/test/java/org/elasticsearch/ingest/useragent/UserAgentProcessorTests.java index 59aa68be6d31d..4cb270e75a94b 100644 --- a/modules/ingest-user-agent/src/test/java/org/elasticsearch/ingest/useragent/UserAgentProcessorTests.java +++ b/modules/ingest-user-agent/src/test/java/org/elasticsearch/ingest/useragent/UserAgentProcessorTests.java @@ -110,7 +110,9 @@ public void testCommonBrowser() throws Exception { os.put("version", "10.9.2"); os.put("full", "Mac OS X 10.9.2"); assertThat(target.get("os"), is(os)); - assertThat(target.get("device"), is("Other")); + Map device = new HashMap<>(); + device.put("name", "Other"); + assertThat(target.get("device"), is(device)); } @SuppressWarnings("unchecked") @@ -136,7 +138,9 @@ public void testUncommonDevice() throws Exception { os.put("full", "Android 3.0"); assertThat(target.get("os"), is(os)); - assertThat(target.get("device"), is("Motorola Xoom")); + Map device = new HashMap<>(); + device.put("name", "Motorola Xoom"); + assertThat(target.get("device"), is(device)); } @SuppressWarnings("unchecked") @@ -157,7 +161,9 @@ public void testSpider() throws Exception { assertNull(target.get("version")); assertNull(target.get("os")); - assertThat(target.get("device"), is("Spider")); + Map device = new HashMap<>(); + device.put("name", "Spider"); + assertThat(target.get("device"), is(device)); } @SuppressWarnings("unchecked") @@ -181,6 +187,8 @@ public void testUnknown() throws Exception { assertNull(target.get("os")); - assertThat(target.get("device"), is("Other")); + Map device = new HashMap<>(); + device.put("name", "Other"); + assertThat(target.get("device"), is(device)); } } diff --git a/modules/ingest-user-agent/src/test/resources/rest-api-spec/test/ingest-useragent/20_useragent_processor.yml b/modules/ingest-user-agent/src/test/resources/rest-api-spec/test/ingest-useragent/20_useragent_processor.yml index 02b7ca4ce06e1..c5539a8ccc6d4 100644 --- a/modules/ingest-user-agent/src/test/resources/rest-api-spec/test/ingest-useragent/20_useragent_processor.yml +++ b/modules/ingest-user-agent/src/test/resources/rest-api-spec/test/ingest-useragent/20_useragent_processor.yml @@ -35,7 +35,7 @@ - match: { _source.user_agent.original: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.149 Safari/537.36" } - match: { _source.user_agent.os: {"name":"Mac OS X", "version":"10.9.2", "full":"Mac OS X 10.9.2"} } - match: { _source.user_agent.version: "33.0.1750" } - - match: { _source.user_agent.device: "Other" } + - match: { _source.user_agent.device: {"name": "Other" }} --- "Test user agent processor with parameters": diff --git a/modules/ingest-user-agent/src/test/resources/rest-api-spec/test/ingest-useragent/30_custom_regex.yml b/modules/ingest-user-agent/src/test/resources/rest-api-spec/test/ingest-useragent/30_custom_regex.yml index e034fcd7b3867..388b98b7ee807 100644 --- a/modules/ingest-user-agent/src/test/resources/rest-api-spec/test/ingest-useragent/30_custom_regex.yml +++ b/modules/ingest-user-agent/src/test/resources/rest-api-spec/test/ingest-useragent/30_custom_regex.yml @@ -33,6 +33,6 @@ id: 1 - match: { _source.field1: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.149 Safari/537.36" } - match: { _source.user_agent.name: "Test" } - - match: { _source.user_agent.device: "Other" } + - match: { _source.user_agent.device: {"name": "Other" }} - is_false: _source.user_agent.os - is_false: _source.user_agent.version