public IngestDocument execute()

in modules/ingest-user-agent/src/main/java/org/opensearch/ingest/useragent/UserAgentProcessor.java [94:241]


    public IngestDocument execute(IngestDocument ingestDocument) {
        String userAgent = ingestDocument.getFieldValue(field, String.class, ignoreMissing);

        if (userAgent == null && ignoreMissing) {
            return ingestDocument;
        } else if (userAgent == null) {
            throw new IllegalArgumentException("field [" + field + "] is null, cannot parse user-agent.");
        }

        Details uaClient = parser.parse(userAgent);

        Map<String, Object> uaDetails = new HashMap<>();

        if (useECS) {
            // Parse the user agent in the ECS (Elastic Common Schema) format
            for (Property property : this.properties) {
                switch (property) {
                    case ORIGINAL:
                        uaDetails.put("original", userAgent);
                        break;
                    case NAME:
                        if (uaClient.userAgent != null && uaClient.userAgent.name != null) {
                            uaDetails.put("name", uaClient.userAgent.name);
                        } else {
                            uaDetails.put("name", "Other");
                        }
                        break;
                    case VERSION:
                        StringBuilder version = new StringBuilder();
                        if (uaClient.userAgent != null && uaClient.userAgent.major != null) {
                            version.append(uaClient.userAgent.major);
                            if (uaClient.userAgent.minor != null) {
                                version.append(".").append(uaClient.userAgent.minor);
                                if (uaClient.userAgent.patch != null) {
                                    version.append(".").append(uaClient.userAgent.patch);
                                    if (uaClient.userAgent.build != null) {
                                        version.append(".").append(uaClient.userAgent.build);
                                    }
                                }
                            }
                            uaDetails.put("version", version.toString());
                        }
                        break;
                    case OS:
                        if (uaClient.operatingSystem != null) {
                            Map<String, String> osDetails = new HashMap<>(3);
                            if (uaClient.operatingSystem.name != null) {
                                osDetails.put("name", uaClient.operatingSystem.name);
                                StringBuilder sb = new StringBuilder();
                                if (uaClient.operatingSystem.major != null) {
                                    sb.append(uaClient.operatingSystem.major);
                                    if (uaClient.operatingSystem.minor != null) {
                                        sb.append(".").append(uaClient.operatingSystem.minor);
                                        if (uaClient.operatingSystem.patch != null) {
                                            sb.append(".").append(uaClient.operatingSystem.patch);
                                            if (uaClient.operatingSystem.build != null) {
                                                sb.append(".").append(uaClient.operatingSystem.build);
                                            }
                                        }
                                    }
                                    osDetails.put("version", sb.toString());
                                    osDetails.put("full", uaClient.operatingSystem.name + " " + sb.toString());
                                }
                                uaDetails.put("os", osDetails);
                            }
                        }
                        break;
                    case DEVICE:
                        Map<String, String> deviceDetails = new HashMap<>(1);
                        if (uaClient.device != null && uaClient.device.name != null) {
                            deviceDetails.put("name", uaClient.device.name);
                        } else {
                            deviceDetails.put("name", "Other");
                        }
                        uaDetails.put("device", deviceDetails);
                        break;
                }
            }
        } else {
            // Deprecated format, removed in 8.0
            for (Property property : this.properties) {
                switch (property) {
                    case NAME:
                        if (uaClient.userAgent != null && uaClient.userAgent.name != null) {
                            uaDetails.put("name", uaClient.userAgent.name);
                        } else {
                            uaDetails.put("name", "Other");
                        }
                        break;
                    case MAJOR:
                        if (uaClient.userAgent != null && uaClient.userAgent.major != null) {
                            uaDetails.put("major", uaClient.userAgent.major);
                        }
                        break;
                    case MINOR:
                        if (uaClient.userAgent != null && uaClient.userAgent.minor != null) {
                            uaDetails.put("minor", uaClient.userAgent.minor);
                        }
                        break;
                    case PATCH:
                        if (uaClient.userAgent != null && uaClient.userAgent.patch != null) {
                            uaDetails.put("patch", uaClient.userAgent.patch);
                        }
                        break;
                    case BUILD:
                        if (uaClient.userAgent != null && uaClient.userAgent.build != null) {
                            uaDetails.put("build", uaClient.userAgent.build);
                        }
                        break;
                    case OS:
                        if (uaClient.operatingSystem != null) {
                            uaDetails.put("os", buildFullOSName(uaClient.operatingSystem));
                        } else {
                            uaDetails.put("os", "Other");
                        }

                        break;
                    case OS_NAME:
                        if (uaClient.operatingSystem != null && uaClient.operatingSystem.name != null) {
                            uaDetails.put("os_name", uaClient.operatingSystem.name);
                        } else {
                            uaDetails.put("os_name", "Other");
                        }
                        break;
                    case OS_MAJOR:
                        if (uaClient.operatingSystem != null && uaClient.operatingSystem.major != null) {
                            uaDetails.put("os_major", uaClient.operatingSystem.major);
                        }
                        break;
                    case OS_MINOR:
                        if (uaClient.operatingSystem != null && uaClient.operatingSystem.minor != null) {
                            uaDetails.put("os_minor", uaClient.operatingSystem.minor);
                        }
                        break;
                    case DEVICE:
                        if (uaClient.device != null && uaClient.device.name != null) {
                            uaDetails.put("device", uaClient.device.name);
                        } else {
                            uaDetails.put("device", "Other");
                        }
                        break;
                }
            }
        }

        ingestDocument.setFieldValue(targetField, uaDetails);
        return ingestDocument;
    }