Genesys Cloud Modeling Rule

Modeling Rule

Genesys Cloud

Details

IDGenesys_Cloud_ModelingRule
From Version8.4.0

Rules (XIF)

[MODEL: dataset=genesys_cloud_raw]
/* Data Extraction & Normalization: 
   - Extract 'remoteIp' from the context metadata.
   - Parse and sanitize the primary IP address from the source array.
   - Filter and categorize IP addresses into dedicated IPv4 and IPv6 arrays.
*/
alter
    extract_context_ip_address = context -> remoteIp,
    extract_first_ip_in_array = replex(arrayindex(arraymap(remoteIp -> [], "@element"),0),"\"",""),
    extract_ip_v4_addresses_array = arraymap(remoteIp -> [], if(is_ipv4(replex("@element","\"","")) ,trim("@element", "\""),null)),
    extract_ip_v6_addresses_array = arraymap(remoteIp -> [], if(is_ipv6(replex("@element","\"","")) ,trim("@element", "\""),null))
// Perform protocol validation to identify if the source IP is IPv4 or IPv6.
| alter
    check_remote_ip_v4 = if(is_ipv4(extract_first_ip_in_array), extract_first_ip_in_array, null),
    check_remote_ip_v6 = if(is_ipv6(extract_first_ip_in_array), extract_first_ip_in_array, null),
    check_extract_context_ip_v4 = if(is_ipv4(extract_context_ip_address), extract_context_ip_address,null),
    check_extract_context_ip_v6 = if(is_ipv6(extract_context_ip_address), extract_context_ip_address, null)
/* Data Model (XDM) Mapping:
   Aligning Genesys Cloud audit telemetry with XDM specifications for cross-platform correlation.
   
   Technical References:
   - Action Catalog: https://developer.genesys.cloud/platform/audit/actioncatalog
   - Audit Query API: https://developer.genesys.cloud/platform/audit/auditquerycreate
*/
| alter
    xdm.source.ipv4 = coalesce(check_extract_context_ip_v4,check_remote_ip_v4),
    xdm.source.ipv6 = coalesce(check_extract_context_ip_v6,check_remote_ip_v6),
    xdm.source.host.ipv4_addresses = if(array_length(extract_ip_v4_addresses_array) > 1, arrayfilter(extract_ip_v4_addresses_array, is_known_private_ipv4("@element")), null), // Evaluate if the IPv4 array contains internal addresses.
    xdm.source.host.ipv4_public_addresses = if(array_length(extract_ip_v4_addresses_array) > 1, arrayfilter(extract_ip_v4_addresses_array, is_known_private_ipv4("@element") = FALSE), null), // Evaluate if the IPv4 array contains public addresses.
    xdm.source.host.ipv6_addresses = if(array_length(extract_ip_v6_addresses_array) > 1, arrayfilter(extract_ip_v6_addresses_array, is_known_private_ipv6("@element")), null), // Evaluate if the IPv6 array contains internal addresses.
    xdm.source.host.ipv6_public_addresses = if(array_length(extract_ip_v6_addresses_array) > 1, arrayfilter(extract_ip_v6_addresses_array, is_known_private_ipv6("@element") = FALSE), null), // Evaluate if the IPv6 array contains public addresses.
    xdm.observer.name = serviceName,
    xdm.event.id = id,
    xdm.event.type = action,
    xdm.event.outcome = if(lowercase(status) = "success",XDM_CONST.OUTCOME_SUCCESS ,lowercase(status) = "failure",XDM_CONST.OUTCOME_FAILED,null),
    xdm.event.outcome_reason = message -> localizableMessageCode,
    xdm.event.description = message -> message,
    xdm.event.operation = if(lowercase(action) contains "create", XDM_CONST.OPERATION_TYPE_CREATE, lowercase(action) contains "delete", XDM_CONST.OPERATION_TYPE_DELETE, lowercase(action) contains "update", XDM_CONST.OPERATION_TYPE_UPDATE, lowercase(action) contains "change", XDM_CONST.OPERATION_TYPE_UPDATE, lowercase(action) = "authorize",XDM_CONST.OPERATION_TYPE_AUTHENTICATION, null),
    xdm.source.user.username = user -> name,
    xdm.source.user.identifier = user -> id,
    xdm.auth.privilege_level = if(lowercase(level) = "system", XDM_CONST.PRIVILEGE_LEVEL_SYSTEM, lowercase(level) = "user", XDM_CONST.PRIVILEGE_LEVEL_USER, null),
    xdm.target.resource.name = entity -> name,
    xdm.target.resource.type = entityType,
    xdm.target.resource.sub_type = arraystring(arraymap(propertyChanges -> [], "@element" -> property),", "),
    xdm.target.resource_before.value = arraystring(arraymerge(arraymap(propertyChanges ->[], "@element" -> oldValues{})), " , "),
    xdm.target.resource.value = arraystring(arraymerge(arraymap(propertyChanges ->[], "@element" -> newValues{})), " , ");

Schema

genesys_cloud_raw

Field Type Array?
action string
context string
entity string
entityType string
id string
level string
message string
propertyChanges string
remoteIp string
serviceName string
status string
user string
Raw JSON
{
    "genesys_cloud_raw": {
      "context": {
        "type": "string",
        "is_array": false
      },
      "remoteIp": {
        "type": "string",
        "is_array": false
      },
      "serviceName": {
        "type": "string",
        "is_array": false
      },
      "id": {
        "type": "string",
        "is_array": false
      },
      "action": {
        "type": "string",
        "is_array": false
      },
      "status": {
        "type": "string",
        "is_array": false
      },
      "message": {
        "type": "string",
        "is_array": false
      },
      "user": {
        "type": "string",
        "is_array": false
      },
      "level": {
        "type": "string",
        "is_array": false
      },
      "entity": {
        "type": "string",
        "is_array": false
      },
      "entityType": {
        "type": "string",
        "is_array": false
      },
      "propertyChanges": {
        "type": "string",
        "is_array": false
      }
    }
  }