+ "query": "let parser=(disabled:bool=false, pack:bool=false) {\n let EventTypeLookup = datatable (EventOriginalType: string, EventType: string) [\n \"ApiTotalUsage\", \"ApiRequest\",\n \"RestApi\", \"ApiRequest\",\n \"BulkApi2\", \"ApiRequest\",\n \"ApexCallout\", \"ApiRequest\",\n \"ExternalODataCallout\", \"ApiRequest\",\n \"MetadataApiOperation\", \"ApiRequest\",\n \"NamedCredential\", \"ApiRequest\",\n \"URI\", \"WebServerSession\",\n \"AuraRequest\", \"WebServerSession\",\n \"LightningPageView\",\"WebServerSession\",\n \"LightningPerformance\", \"WebServerSession\",\n \"LightningInteraction\", \"WebServerSession\",\n \"UiTelemetryResourceTiming\", \"WebServerSession\",\n \"UiTelemetryNavigationTiming\", \"WebServerSession\",\n \"CSPViolation\", \"WebServerSession\"\n ];\n let WebSessionEventTypes = dynamic([\n \"ApiTotalUsage\", \"RestApi\", \"BulkApi2\", \"ApexCallout\",\n \"ExternalODataCallout\", \"MetadataApiOperation\", \"NamedCredential\",\n \"URI\", \"AuraRequest\", \"LightningPageView\", \"LightningPerformance\",\n \"LightningInteraction\", \"UiTelemetryResourceTiming\",\n \"UiTelemetryNavigationTiming\", \"CSPViolation\"\n ]);\n SalesforceServiceCloudV2_CL\n | where not(disabled)\n | where EventType in (WebSessionEventTypes)\n | project-rename EventOriginalType = EventType\n | lookup EventTypeLookup on EventOriginalType\n | extend\n // -- URL handling\n Url = coalesce(Url, Uri),\n _UrlHost = extract(@\"https?://([^/:?#]+)\", 1, Url)\n | extend\n DstFQDN = iff(_UrlHost has \".\", _UrlHost, \"\"),\n DstHostname = iff(isnotempty(_UrlHost), extract(@\"^([^.]+)\", 1, _UrlHost), \"\"),\n DstDomain = extract(@\"^[^.]+\\.(.*)\", 1, _UrlHost),\n DstDomainType = iff(_UrlHost has \".\", \"FQDN\", \"\")\n | extend\n // -- Event fields\n Type = \"SalesforceServiceCloudV2_CL\",\n EventCount = int(1),\n EventStartTime = TimeGenerated,\n EventEndTime = TimeGenerated,\n EventSchema = \"WebSession\",\n EventSchemaVersion = \"0.2.7\",\n EventVendor = \"Salesforce\",\n EventProduct = \"Salesforce Service Cloud\",\n EventProductVersion = ApiVersion,\n EventSeverity = \"Informational\",\n // -- Event result based on HTTP status code\n EventResultDetails = StatusCode,\n EventResult = case(\n isempty(StatusCode), \"NA\",\n toint(StatusCode) between (100 .. 399), \"Success\",\n toint(StatusCode) between (400 .. 599), \"Failure\",\n \"NA\"\n ),\n EventOriginalResultDetails = StatusCode\n | extend\n // -- HTTP fields\n HttpRequestMethod = HttpMethod,\n HttpStatusCode = EventResultDetails,\n HttpUserAgent = coalesce(HttpUserAgentOriginal, HttpUserAgent, UserAgent),\n HttpReferrer = coalesce(HttpReferrerOriginal, ReferrerUri),\n // -- Source fields\n SrcIpAddr = coalesce(ClientIp, SourceIp, SrcIpAddr),\n SrcUserId = UserId,\n SrcUserIdType = iff(isnotempty(UserId), \"SalesforceId\", \"\"),\n SrcUsername = coalesce(UserEmail, User),\n \n SrcUserType = case(\n UserType == \"Standard\" or UserType == \"S\", \"Regular\",\n UserType == \"X\", \"Admin\",\n \"\"\n ),\n SrcBytes = tolong(RequestSize),\n SrcDvcId = coalesce(SrcDvcId, DeviceId),\n SrcDvcModelName = coalesce(SrcDvcModelName, DeviceModel),\n SrcDvcOs = OsName,\n // -- Destination fields\n DstBytes = tolong(coalesce(DstBytes, ResponseSize)),\n DstAppName = \"Salesforce Service Cloud\",\n DstAppType = \"SaaS application\",\n // -- Device fields\n Dvc = \"Salesforce Service Cloud\",\n DvcScopeId = OrganizationId,\n // -- Network fields\n NetworkDuration = toint(Duration),\n NetworkSessionId = SessionKey,\n // -- TLS\n TlsVersion = TlsProtocol,\n TlsCipher = CipherSuite\n | extend\n SrcUsernameType = case(\n isnotempty(SrcUsername) and SrcUsername has \"@\", \"UPN\",\n isnotempty(SrcUsername), \"Simple\",\n \"\"\n )\n | extend\n // -- Conditional fields\n SrcDvcIdType = iff(isnotempty(SrcDvcId), \"Other\", \"\"),\n // -- Dst alias: use the best available destination identifier\n Dst = coalesce(DstFQDN, DstHostname, DstAppName),\n // -- Src alias\n Src = SrcIpAddr,\n // -- Aliases\n IpAddr = SrcIpAddr,\n User = SrcUsername,\n UserAgent = HttpUserAgent,\n Hostname = DstHostname,\n Duration = NetworkDuration,\n SessionId = NetworkSessionId\n | extend\n // -- AdditionalFields\n AdditionalFields = iff(\n pack,\n bag_pack(\n \"ApiVersion\", ApiVersion,\n \"ApiType\", ApiType,\n \"SessionType\", SessionType,\n \"BrowserName\", BrowserName,\n \"BrowserVersion\", BrowserVersion,\n \"OsVersion\", OsVersion,\n \"PlatformType\", PlatformType,\n \"DevicePlatform\", DevicePlatform,\n \"ConnectionType\", ConnectionType,\n \"RequestId\", RequestId,\n \"Quiddity\", Quiddity,\n \"ExecTime\", ExecTime,\n \"TotalTime\", TotalTime,\n \"CpuTime\", CpuTime,\n \"DbTotalTime\", DbTotalTime,\n \"DbCpuTime\", DbCpuTime,\n \"RowsProcessed\", RowsProcessed,\n \"IsLongRunningRequest\", IsLongRunningRequest\n ),\n dynamic({})\n )\n | project\n // -- Mandatory\n TimeGenerated,\n EventCount,\n EventStartTime,\n EventEndTime,\n EventType,\n EventResult,\n EventProduct,\n EventVendor,\n EventSchema,\n EventSchemaVersion,\n Dvc,\n Url,\n Dst,\n // -- Recommended\n EventResultDetails,\n EventSeverity,\n HttpRequestMethod,\n HttpStatusCode,\n DstHostname,\n DstBytes,\n SrcIpAddr,\n SrcBytes,\n ASimMatchingIpAddr = \"SrcIpAddr\",\n ASimMatchingHostname = \"DstHostname\",\n // -- Event optional\n EventOriginalType,\n EventOriginalResultDetails,\n EventProductVersion,\n // -- HTTP optional\n HttpUserAgent,\n HttpReferrer,\n // -- Destination optional\n DstFQDN,\n DstDomain,\n DstDomainType,\n DstAppName,\n DstAppType,\n // -- Source fields\n SrcUserId,\n SrcUserIdType,\n SrcUsername,\n SrcUsernameType,\n SrcUserType,\n SrcDvcId,\n SrcDvcIdType,\n SrcDvcModelName,\n SrcDvcOs,\n // -- Device fields\n DvcScopeId,\n // -- Network fields\n NetworkDuration,\n NetworkSessionId,\n // -- TLS\n TlsVersion,\n TlsCipher,\n // -- Additional\n AdditionalFields,\n // -- Aliases\n IpAddr,\n User,\n UserAgent,\n Hostname,\n Duration,\n SessionId,\n Src,\n // -- Source table\n Type\n};\nparser(disabled=disabled, pack=pack)\n",
0 commit comments