[MODEL: dataset = cisco_thousandeyes_raw] /* Activity Audit logs (https://developer.cisco.com/docs/thousandeyes/list-activity-log-events/) */ filter SOURCE_LOG_TYPE = "AuditEvents" | alter affected_resources_count = array_length(resources -> []), user_ipv4 = if(ipAddress ~= "(?:\d{1,3}\.){3}\d{1,3}", ipAddress), user_ipv6 = if(ipAddress ~= "(?:[a-fA-F\d]{0,4}\:){2,7}[a-fA-F\d]{0,4}", ipAddress) | alter xdm.event.original_event_type = event, xdm.event.type = SOURCE_LOG_TYPE, xdm.source.host.ipv4_public_addresses = if(user_ipv4 != null and not incidr(user_ipv4, "10.0.0.0/8") and not incidr(user_ipv4, "172.16.0.0/12") and not incidr(user_ipv4, "192.168.0.0/16") and not incidr(user_ipv4, "127.0.0.0/8") and not incidr(user_ipv4, "169.254.0.0/16") and not incidr(user_ipv4, "100.64.0.0/10"), arraycreate(user_ipv4)), xdm.source.ipv4 = user_ipv4, xdm.source.ipv6 = user_ipv6, xdm.source.user.groups = arrayfilter(arraycreate(accountGroupName, aid), "@element" != null), xdm.source.user.identifier = uid, xdm.source.user.username = coalesce(arrayindex(regextract(user, "\(([^\)]+)\)"), 0), user), // extract user email from within parentheses, e.g., "API Sandbox User (noreply@thousandeyes.com)" xdm.target.resource.name = if(affected_resources_count > 0, arraystring(arraydistinct(arraymap(resources -> [], "@element" -> name)), ",")), xdm.target.resource.type = if(affected_resources_count > 0, arraystring(arraydistinct(arraymap(resources -> [], "@element" -> type)), ",")); /* Alerts (https://developer.cisco.com/docs/thousandeyes/alert/) */ filter SOURCE_LOG_TYPE = "Alerts" | alter xdm.alert.original_alert_id = id, xdm.alert.severity = alertSeverity, xdm.alert.category = alertType, xdm.event.duration = to_integer(duration), xdm.event.is_completed = if(alertState = "clear"), xdm.event.original_event_type = alertType, xdm.event.type = SOURCE_LOG_TYPE, xdm.network.rule = alertRuleId;