{"ScriptPreparationCode":"function hasValue(value) {\r\n if ( (value === null) || (value === undefined) )\r\n return false;\r\n return true;\r\n}\r\n\r\nfunction isUuid(uuid) {\r\n if ( !hasValue(uuid) )\r\n return false;\r\n // eslint-disable-next-line\r\n var regex = /^(\\{){0,1}[0-9a-fA-F]{8}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{12}(\\}){0,1}$/i;\r\n return regex.test(uuid);\r\n}\r\n\r\nfunction getSchemaFieldMetadata() {\r\n return JSON.parse(\u0060{\u0022actionTaken\u0022:{\u0022name\u0022:\u0022actionTaken\u0022,\u0022type\u0022:\u0022Enum8(\u0027DENY\u0027 = 0, \u0027ALLOW\u0027 = 1, \u0027OPEN\u0027 = 2, \u0027CLOSE\u0027 = 3, \u0027UPDATE\u0027 = 4)\u0022,\u0022default_type\u0022:\u0022\u0022,\u0022default_expression\u0022:\u0022\u0022,\u0022comment\u0022:\u0022\u0022,\u0022codec_expression\u0022:\u0022\u0022,\u0022ttl_expression\u0022:\u0022\u0022,\u0022enums\u0022:{\u0022DENY\u0022:0,\u0022ALLOW\u0022:1,\u0022OPEN\u0022:2,\u0022CLOSE\u0022:3,\u0022UPDATE\u0022:4}},\u0022ruleId\u0022:{\u0022name\u0022:\u0022ruleId\u0022,\u0022type\u0022:\u0022String\u0022,\u0022default_type\u0022:\u0022\u0022,\u0022default_expression\u0022:\u0022\u0022,\u0022comment\u0022:\u0022\u0022,\u0022codec_expression\u0022:\u0022\u0022,\u0022ttl_expression\u0022:\u0022\u0022},\u0022sessionId\u0022:{\u0022name\u0022:\u0022sessionId\u0022,\u0022type\u0022:\u0022UInt32\u0022,\u0022default_type\u0022:\u0022\u0022,\u0022default_expression\u0022:\u0022\u0022,\u0022comment\u0022:\u0022\u0022,\u0022codec_expression\u0022:\u0022\u0022,\u0022ttl_expression\u0022:\u0022\u0022},\u0022segmentLogicalId\u0022:{\u0022name\u0022:\u0022segmentLogicalId\u0022,\u0022type\u0022:\u0022UUID\u0022,\u0022default_type\u0022:\u0022\u0022,\u0022default_expression\u0022:\u0022\u0022,\u0022comment\u0022:\u0022\u0022,\u0022codec_expression\u0022:\u0022\u0022,\u0022ttl_expression\u0022:\u0022\u0022},\u0022inputInterface\u0022:{\u0022name\u0022:\u0022inputInterface\u0022,\u0022type\u0022:\u0022String\u0022,\u0022default_type\u0022:\u0022\u0022,\u0022default_expression\u0022:\u0022\u0022,\u0022comment\u0022:\u0022\u0022,\u0022codec_expression\u0022:\u0022\u0022,\u0022ttl_expression\u0022:\u0022\u0022},\u0022protocol\u0022:{\u0022name\u0022:\u0022protocol\u0022,\u0022type\u0022:\u0022UInt16\u0022,\u0022default_type\u0022:\u0022\u0022,\u0022default_expression\u0022:\u0022\u0022,\u0022comment\u0022:\u0022\u0022,\u0022codec_expression\u0022:\u0022\u0022,\u0022ttl_expression\u0022:\u0022\u0022},\u0022sourceIp\u0022:{\u0022name\u0022:\u0022sourceIp\u0022,\u0022type\u0022:\u0022String\u0022,\u0022default_type\u0022:\u0022\u0022,\u0022default_expression\u0022:\u0022\u0022,\u0022comment\u0022:\u0022\u0022,\u0022codec_expression\u0022:\u0022\u0022,\u0022ttl_expression\u0022:\u0022\u0022},\u0022destIp\u0022:{\u0022name\u0022:\u0022destIp\u0022,\u0022type\u0022:\u0022String\u0022,\u0022default_type\u0022:\u0022\u0022,\u0022default_expression\u0022:\u0022\u0022,\u0022comment\u0022:\u0022\u0022,\u0022codec_expression\u0022:\u0022\u0022,\u0022ttl_expression\u0022:\u0022\u0022},\u0022sourcePort\u0022:{\u0022name\u0022:\u0022sourcePort\u0022,\u0022type\u0022:\u0022UInt16\u0022,\u0022default_type\u0022:\u0022\u0022,\u0022default_expression\u0022:\u0022\u0022,\u0022comment\u0022:\u0022\u0022,\u0022codec_expression\u0022:\u0022\u0022,\u0022ttl_expression\u0022:\u0022\u0022},\u0022destPort\u0022:{\u0022name\u0022:\u0022destPort\u0022,\u0022type\u0022:\u0022UInt16\u0022,\u0022default_type\u0022:\u0022\u0022,\u0022default_expression\u0022:\u0022\u0022,\u0022comment\u0022:\u0022\u0022,\u0022codec_expression\u0022:\u0022\u0022,\u0022ttl_expression\u0022:\u0022\u0022},\u0022destination\u0022:{\u0022name\u0022:\u0022destination\u0022,\u0022type\u0022:\u0022String\u0022,\u0022default_type\u0022:\u0022\u0022,\u0022default_expression\u0022:\u0022\u0022,\u0022comment\u0022:\u0022\u0022,\u0022codec_expression\u0022:\u0022\u0022,\u0022ttl_expression\u0022:\u0022\u0022},\u0022domainName\u0022:{\u0022name\u0022:\u0022domainName\u0022,\u0022type\u0022:\u0022String\u0022,\u0022default_type\u0022:\u0022\u0022,\u0022default_expression\u0022:\u0022\u0022,\u0022comment\u0022:\u0022\u0022,\u0022codec_expression\u0022:\u0022\u0022,\u0022ttl_expression\u0022:\u0022\u0022},\u0022firewallPolicyName\u0022:{\u0022name\u0022:\u0022firewallPolicyName\u0022,\u0022type\u0022:\u0022String\u0022,\u0022default_type\u0022:\u0022\u0022,\u0022default_expression\u0022:\u0022\u0022,\u0022comment\u0022:\u0022\u0022,\u0022codec_expression\u0022:\u0022\u0022,\u0022ttl_expression\u0022:\u0022\u0022},\u0022segmentName\u0022:{\u0022name\u0022:\u0022segmentName\u0022,\u0022type\u0022:\u0022String\u0022,\u0022default_type\u0022:\u0022\u0022,\u0022default_expression\u0022:\u0022\u0022,\u0022comment\u0022:\u0022\u0022,\u0022codec_expression\u0022:\u0022\u0022,\u0022ttl_expression\u0022:\u0022\u0022},\u0022extensionHeader\u0022:{\u0022name\u0022:\u0022extensionHeader\u0022,\u0022type\u0022:\u0022String\u0022,\u0022default_type\u0022:\u0022\u0022,\u0022default_expression\u0022:\u0022\u0022,\u0022comment\u0022:\u0022\u0022,\u0022codec_expression\u0022:\u0022\u0022,\u0022ttl_expression\u0022:\u0022\u0022},\u0022application\u0022:{\u0022name\u0022:\u0022application\u0022,\u0022type\u0022:\u0022String\u0022,\u0022default_type\u0022:\u0022\u0022,\u0022default_expression\u0022:\u0022\u0022,\u0022comment\u0022:\u0022\u0022,\u0022codec_expression\u0022:\u0022\u0022,\u0022ttl_expression\u0022:\u0022\u0022},\u0022sessionDurationSecs\u0022:{\u0022name\u0022:\u0022sessionDurationSecs\u0022,\u0022type\u0022:\u0022UInt32\u0022,\u0022default_type\u0022:\u0022\u0022,\u0022default_expression\u0022:\u0022\u0022,\u0022comment\u0022:\u0022\u0022,\u0022codec_expression\u0022:\u0022\u0022,\u0022ttl_expression\u0022:\u0022\u0022},\u0022bytesSent\u0022:{\u0022name\u0022:\u0022bytesSent\u0022,\u0022type\u0022:\u0022UInt32\u0022,\u0022default_type\u0022:\u0022\u0022,\u0022default_expression\u0022:\u0022\u0022,\u0022comment\u0022:\u0022\u0022,\u0022codec_expression\u0022:\u0022\u0022,\u0022ttl_expression\u0022:\u0022\u0022},\u0022bytesReceived\u0022:{\u0022name\u0022:\u0022bytesReceived\u0022,\u0022type\u0022:\u0022UInt32\u0022,\u0022default_type\u0022:\u0022\u0022,\u0022default_expression\u0022:\u0022\u0022,\u0022comment\u0022:\u0022\u0022,\u0022codec_expression\u0022:\u0022\u0022,\u0022ttl_expression\u0022:\u0022\u0022},\u0022closeReason\u0022:{\u0022name\u0022:\u0022closeReason\u0022,\u0022type\u0022:\u0022String\u0022,\u0022default_type\u0022:\u0022\u0022,\u0022default_expression\u0022:\u0022\u0022,\u0022comment\u0022:\u0022\u0022,\u0022codec_expression\u0022:\u0022\u0022,\u0022ttl_expression\u0022:\u0022\u0022},\u0022signatureId\u0022:{\u0022name\u0022:\u0022signatureId\u0022,\u0022type\u0022:\u0022UInt32\u0022,\u0022default_type\u0022:\u0022\u0022,\u0022default_expression\u0022:\u0022\u0022,\u0022comment\u0022:\u0022\u0022,\u0022codec_expression\u0022:\u0022\u0022,\u0022ttl_expression\u0022:\u0022\u0022},\u0022signatureName\u0022:{\u0022name\u0022:\u0022signatureName\u0022,\u0022type\u0022:\u0022String\u0022,\u0022default_type\u0022:\u0022\u0022,\u0022default_expression\u0022:\u0022\u0022,\u0022comment\u0022:\u0022\u0022,\u0022codec_expression\u0022:\u0022\u0022,\u0022ttl_expression\u0022:\u0022\u0022},\u0022signatureCategory\u0022:{\u0022name\u0022:\u0022signatureCategory\u0022,\u0022type\u0022:\u0022String\u0022,\u0022default_type\u0022:\u0022\u0022,\u0022default_expression\u0022:\u0022\u0022,\u0022comment\u0022:\u0022\u0022,\u0022codec_expression\u0022:\u0022\u0022,\u0022ttl_expression\u0022:\u0022\u0022},\u0022signatureSeverity\u0022:{\u0022name\u0022:\u0022signatureSeverity\u0022,\u0022type\u0022:\u0022UInt32\u0022,\u0022default_type\u0022:\u0022\u0022,\u0022default_expression\u0022:\u0022\u0022,\u0022comment\u0022:\u0022\u0022,\u0022codec_expression\u0022:\u0022\u0022,\u0022ttl_expression\u0022:\u0022\u0022},\u0022threatImpact\u0022:{\u0022name\u0022:\u0022threatImpact\u0022,\u0022type\u0022:\u0022Enum8(\u0027SUSPICIOUS\u0027 = 0, \u0027LOW\u0027 = 1, \u0027MEDIUM\u0027 = 2, \u0027HIGH\u0027 = 3, \u0027CRITICAL\u0027 = 4)\u0022,\u0022default_type\u0022:\u0022\u0022,\u0022default_expression\u0022:\u0022\u0022,\u0022comment\u0022:\u0022\u0022,\u0022codec_expression\u0022:\u0022\u0022,\u0022ttl_expression\u0022:\u0022\u0022,\u0022enums\u0022:{\u0022SUSPICIOUS\u0022:0,\u0022LOW\u0022:1,\u0022MEDIUM\u0022:2,\u0022HIGH\u0022:3,\u0022CRITICAL\u0022:4}},\u0022threatSourceIp\u0022:{\u0022name\u0022:\u0022threatSourceIp\u0022,\u0022type\u0022:\u0022String\u0022,\u0022default_type\u0022:\u0022\u0022,\u0022default_expression\u0022:\u0022\u0022,\u0022comment\u0022:\u0022\u0022,\u0022codec_expression\u0022:\u0022\u0022,\u0022ttl_expression\u0022:\u0022\u0022},\u0022threatSourceGeoCountry\u0022:{\u0022name\u0022:\u0022threatSourceGeoCountry\u0022,\u0022type\u0022:\u0022String\u0022,\u0022default_type\u0022:\u0022\u0022,\u0022default_expression\u0022:\u0022\u0022,\u0022comment\u0022:\u0022\u0022,\u0022codec_expression\u0022:\u0022\u0022,\u0022ttl_expression\u0022:\u0022\u0022},\u0022threatTargetIp\u0022:{\u0022name\u0022:\u0022threatTargetIp\u0022,\u0022type\u0022:\u0022String\u0022,\u0022default_type\u0022:\u0022\u0022,\u0022default_expression\u0022:\u0022\u0022,\u0022comment\u0022:\u0022\u0022,\u0022codec_expression\u0022:\u0022\u0022,\u0022ttl_expression\u0022:\u0022\u0022},\u0022enterpriseLogicalId\u0022:{\u0022name\u0022:\u0022enterpriseLogicalId\u0022,\u0022type\u0022:\u0022UUID\u0022,\u0022default_type\u0022:\u0022\u0022,\u0022default_expression\u0022:\u0022\u0022,\u0022comment\u0022:\u0022\u0022,\u0022codec_expression\u0022:\u0022\u0022,\u0022ttl_expression\u0022:\u0022\u0022},\u0022edgeLogicalId\u0022:{\u0022name\u0022:\u0022edgeLogicalId\u0022,\u0022type\u0022:\u0022UUID\u0022,\u0022default_type\u0022:\u0022\u0022,\u0022default_expression\u0022:\u0022\u0022,\u0022comment\u0022:\u0022\u0022,\u0022codec_expression\u0022:\u0022\u0022,\u0022ttl_expression\u0022:\u0022\u0022},\u0022edgeName\u0022:{\u0022name\u0022:\u0022edgeName\u0022,\u0022type\u0022:\u0022String\u0022,\u0022default_type\u0022:\u0022\u0022,\u0022default_expression\u0022:\u0022\u0022,\u0022comment\u0022:\u0022\u0022,\u0022codec_expression\u0022:\u0022\u0022,\u0022ttl_expression\u0022:\u0022\u0022},\u0022timestamp\u0022:{\u0022name\u0022:\u0022timestamp\u0022,\u0022type\u0022:\u0022DateTime\u0022,\u0022default_type\u0022:\u0022DEFAULT\u0022,\u0022default_expression\u0022:\u0022now()\u0022,\u0022comment\u0022:\u0022\u0022,\u0022codec_expression\u0022:\u0022\u0022,\u0022ttl_expression\u0022:\u0022\u0022},\u0022idpsAlertType\u0022:{\u0022name\u0022:\u0022idpsAlertType\u0022,\u0022type\u0022:\u0022Enum8(\u0027IDS\u0027 = 0, \u0027IPS\u0027 = 1)\u0022,\u0022default_type\u0022:\u0022\u0022,\u0022default_expression\u0022:\u0022\u0022,\u0022comment\u0022:\u0022\u0022,\u0022codec_expression\u0022:\u0022\u0022,\u0022ttl_expression\u0022:\u0022\u0022,\u0022enums\u0022:{\u0022IDS\u0022:0,\u0022IPS\u0022:1}},\u0022idpsAction\u0022:{\u0022name\u0022:\u0022idpsAction\u0022,\u0022type\u0022:\u0022Enum8(\u0027ALLOW\u0027 = 0, \u0027MONITOR\u0027 = 1, \u0027DENY\u0027 = 2)\u0022,\u0022default_type\u0022:\u0022\u0022,\u0022default_expression\u0022:\u0022\u0022,\u0022comment\u0022:\u0022\u0022,\u0022codec_expression\u0022:\u0022\u0022,\u0022ttl_expression\u0022:\u0022\u0022,\u0022enums\u0022:{\u0022ALLOW\u0022:0,\u0022MONITOR\u0022:1,\u0022DENY\u0022:2}},\u0022urlCategories\u0022:{\u0022name\u0022:\u0022urlCategories\u0022,\u0022type\u0022:\u0022Array(UInt16)\u0022,\u0022default_type\u0022:\u0022\u0022,\u0022default_expression\u0022:\u0022\u0022,\u0022comment\u0022:\u0022\u0022,\u0022codec_expression\u0022:\u0022\u0022,\u0022ttl_expression\u0022:\u0022\u0022},\u0022urlCatFilterAction\u0022:{\u0022name\u0022:\u0022urlCatFilterAction\u0022,\u0022type\u0022:\u0022Enum8(\u0027ALLOW\u0027 = 0, \u0027MONITOR\u0027 = 1, \u0027DENY\u0027 = 2)\u0022,\u0022default_type\u0022:\u0022\u0022,\u0022default_expression\u0022:\u0022\u0022,\u0022comment\u0022:\u0022\u0022,\u0022codec_expression\u0022:\u0022\u0022,\u0022ttl_expression\u0022:\u0022\u0022,\u0022enums\u0022:{\u0022ALLOW\u0022:0,\u0022MONITOR\u0022:1,\u0022DENY\u0022:2}},\u0022urlRisk\u0022:{\u0022name\u0022:\u0022urlRisk\u0022,\u0022type\u0022:\u0022Enum8(\u0027UNKNOWN\u0027 = 0, \u0027HIGH\u0027 = 1, \u0027SUSPICIOUS\u0027 = 2, \u0027MEDIUM\u0027 = 3, \u0027LOW\u0027 = 4, \u0027TRUSTWORTHY\u0027 = 5)\u0022,\u0022default_type\u0022:\u0022\u0022,\u0022default_expression\u0022:\u0022\u0022,\u0022comment\u0022:\u0022\u0022,\u0022codec_expression\u0022:\u0022\u0022,\u0022ttl_expression\u0022:\u0022\u0022,\u0022enums\u0022:{\u0022UNKNOWN\u0022:0,\u0022HIGH\u0022:1,\u0022SUSPICIOUS\u0022:2,\u0022MEDIUM\u0022:3,\u0022LOW\u0022:4,\u0022TRUSTWORTHY\u0022:5}},\u0022urlReputationAction\u0022:{\u0022name\u0022:\u0022urlReputationAction\u0022,\u0022type\u0022:\u0022Enum8(\u0027ALLOW\u0027 = 0, \u0027MONITOR\u0027 = 1, \u0027DENY\u0027 = 2)\u0022,\u0022default_type\u0022:\u0022\u0022,\u0022default_expression\u0022:\u0022\u0022,\u0022comment\u0022:\u0022\u0022,\u0022codec_expression\u0022:\u0022\u0022,\u0022ttl_expression\u0022:\u0022\u0022,\u0022enums\u0022:{\u0022ALLOW\u0022:0,\u0022MONITOR\u0022:1,\u0022DENY\u0022:2}},\u0022maliciousIpCategories\u0022:{\u0022name\u0022:\u0022maliciousIpCategories\u0022,\u0022type\u0022:\u0022Array(UInt16)\u0022,\u0022default_type\u0022:\u0022\u0022,\u0022default_expression\u0022:\u0022\u0022,\u0022comment\u0022:\u0022\u0022,\u0022codec_expression\u0022:\u0022\u0022,\u0022ttl_expression\u0022:\u0022\u0022},\u0022malIpAction\u0022:{\u0022name\u0022:\u0022malIpAction\u0022,\u0022type\u0022:\u0022Enum8(\u0027ALLOW\u0027 = 0, \u0027MONITOR\u0027 = 1, \u0027DENY\u0027 = 2)\u0022,\u0022default_type\u0022:\u0022\u0022,\u0022default_expression\u0022:\u0022\u0022,\u0022comment\u0022:\u0022\u0022,\u0022codec_expression\u0022:\u0022\u0022,\u0022ttl_expression\u0022:\u0022\u0022,\u0022enums\u0022:{\u0022ALLOW\u0022:0,\u0022MONITOR\u0022:1,\u0022DENY\u0022:2}},\u0022engineType\u0022:{\u0022name\u0022:\u0022engineType\u0022,\u0022type\u0022:\u0022Array(UInt32)\u0022,\u0022default_type\u0022:\u0022\u0022,\u0022default_expression\u0022:\u0022\u0022,\u0022comment\u0022:\u0022\u0022,\u0022codec_expression\u0022:\u0022\u0022,\u0022ttl_expression\u0022:\u0022\u0022}}\u0060);\r\n}\r\n\r\nconst isValidUInt = (value) =\u003E _.toNumber(value) \u003E= 0 \u0026\u0026 _.isInteger(_.toNumber(value));\r\nconst isValidInt = (value) =\u003E _.isInteger(_.toNumber(value));\r\nconst isValidFloat = (value) =\u003E _.isFinite(_.toNumber(value));\r\nconst isValidUuid = (value) =\u003E value === \u0027\u0027 || isUuid(value);\r\nconst isValidDate = (value) =\u003E value === \u0027\u0027 || (!isValidFloat(value || NaN) \u0026\u0026 !isNaN(new Date(value)));\r\nconst isValidEnum = (value, statsType, csvField) =\u003E value === \u0027\u0027 || _.has(getSchemaFieldMetadata(statsType)[csvField].enums, value);\r\n\r\nconst validDataTypeMap = {\r\n \u0027UInt8\u0027: isValidUInt,\r\n \u0027UInt16\u0027: isValidUInt,\r\n \u0027UInt32\u0027: isValidUInt,\r\n \u0027UInt64\u0027: isValidUInt,\r\n \u0027UInt128\u0027: isValidUInt,\r\n \u0027UInt256\u0027: isValidUInt,\r\n \u0027Int8\u0027: isValidInt,\r\n \u0027Int16\u0027: isValidInt,\r\n \u0027Int32\u0027: isValidInt,\r\n \u0027Int64\u0027: isValidInt,\r\n \u0027Int128\u0027: isValidInt,\r\n \u0027Int256\u0027: isValidInt,\r\n \u0027Float32\u0027: isValidFloat,\r\n \u0027Float64\u0027: isValidFloat,\r\n \u0027UUID\u0027: isValidUuid,\r\n \u0027DateTime\u0027: isValidDate,\r\n \u0027Enum\u0027: isValidEnum,\r\n};\r\nObject.freeze(validDataTypeMap);\r\n\r\nfunction isValidDataType(statsType, csvField, dataType, value) {\r\n const validDataTypeFn = validDataTypeMap[dataType.startsWith(\u0027Enum\u0027) ? \u0027Enum\u0027 : dataType];\r\n if (!_.isNil(validDataTypeFn)) {\r\n return validDataTypeFn(value, statsType, csvField);\r\n }\r\n return true;\r\n}\r\n\r\nfunction getCsvEntry() {\r\n return JSON.parse(\u0027{\u0022columns\u0022:[\u0022\u0022,\u0022\\\\\u00229ifvMYhsOtWSUIGV7De6k5\\\\\u0022\u0022,\u00229077\u0022,\u002269e45410-4264-44e0-ba94-5eac5251b764\u0022,\u0022\\\\\u0022VCF\\\\\u0022\u0022,\u00221\u0022,\u0022\\\\\u0022241.152.20.27\\\\\u0022\u0022,\u0022\\\\\u0022232.214.227.14\\\\\u0022\u0022,\u002220609\u0022,\u002212831\u0022,\u0022\\\\\u0022https://hlbnwz4o6ACBcjeksM72Za.com\\\\\u0022\u0022,\u0022\\\\\u0022hlbnwz4o6ACBcjeksM72Za.com\\\\\u0022\u0022,\u0022\\\\\u0022ALLOW_1989\\\\\u0022\u0022,\u0022\\\\\u0022Global\\\\\u0022\u0022,\u0022\u0022,\u0022\\\\\u0022Outlook\\\\\u0022\u0022,\u0022192\u0022,\u002286355\u0022,\u002291792\u0022,\u0022\\\\\u0022\\\\\u0022\u0022,\u0022\u0022,\u0022\u0022,\u0022\u0022,\u0022\u0022,\u0022\u0022,\u0022\u0022,\u0022\\\\\u0022\\\\\u0022\u0022,\u0022\u0022,\u00224b534ae2-8f67-4ec8-85a9-768cd4354fcb\u0022,\u0022402dffed-2151-4e27-9472-1923ac147b1c\u0022,\u0022\u0022,\u00222025-07-21 20:27:10\u0022,\u0022\u0022,\u0022\u0022,\u0022\u0022,\u0022\u0022,\u0022\u0022,\u0022\u0022,\u0022\u0022,\u0022MONITOR\u0022,\u0022\u0022,\u0022\u0022],\u0022header\u0022:[\u0022actionTaken\u0022,\u0022ruleId\u0022,\u0022sessionId\u0022,\u0022segmentLogicalId\u0022,\u0022inputInterface\u0022,\u0022protocol\u0022,\u0022sourceIp\u0022,\u0022destIp\u0022,\u0022sourcePort\u0022,\u0022destPort\u0022,\u0022destination\u0022,\u0022domainName\u0022,\u0022firewallPolicyName\u0022,\u0022segmentName\u0022,\u0022extensionHeader\u0022,\u0022application\u0022,\u0022sessionDurationSecs\u0022,\u0022bytesSent\u0022,\u0022bytesReceived\u0022,\u0022closeReason\u0022,\u0022signatureId\u0022,\u0022signatureName\u0022,\u0022signatureCategory\u0022,\u0022signatureSeverity\u0022,\u0022threatImpact\u0022,\u0022threatSourceIp\u0022,\u0022threatSourceGeoCountry\u0022,\u0022threatTargetIp\u0022,\u0022enterpriseLogicalId\u0022,\u0022edgeLogicalId\u0022,\u0022edgeName\u0022,\u0022timestamp\u0022,\u0022idpsAlertType\u0022,\u0022idpsAction\u0022,\u0022urlCategories\u0022,\u0022urlCatFilterAction\u0022,\u0022urlRisk\u0022,\u0022urlReputationAction\u0022,\u0022maliciousIpCategories\u0022,\u0022malIpAction\u0022,\u0022engineType\u0022,\u0022\u0022]}\u0027);\r\n}\r\n\r\nconst csvEntry = getCsvEntry();\r\n\r\nfunction validateCsvEntry({ columns, header}, statsType) {\r\n // Theoretically this should never happen since we are relying on the schema object to initialize correctly.\r\n // If this error occurs, we are generating the schema for some unwanted column type\r\n if (columns.length !== header.length) {\r\n return {\r\n entry: columns.join(\u0027,\u0027),\r\n malformed: true,\r\n failedFields: [...header],\r\n header: header.join(\u0027,\u0027)\r\n };\r\n }\r\n\r\n let i = 0;\r\n const fieldInfo = getSchemaFieldMetadata(statsType);\r\n const failedFields = [];\r\n for (const csvField in fieldInfo) {\r\n if (!isValidDataType(statsType, csvField, fieldInfo[csvField].type, columns[i])) {\r\n failedFields.push(csvField);\r\n }\r\n \u002B\u002Bi;\r\n }\r\n\r\n return {\r\n entry: columns.join(\u0027,\u0027),\r\n malformed: false,\r\n failedFields: failedFields,\r\n header: header.join(\u0027,\u0027)\r\n };\r\n}\r\n","TestCases":[{"Name":"validateCsvEntry","Code":"/*When writing async/deferred tests, use \u0060deferred.resolve()\u0060 to mark test as done*/\r\n\r\nfor (let i = 0; i \u003C 1000; i\u002B\u002B) {\r\n validateCsvEntry(csvEntry, \u0027FIREWALLLOGS_PROTO\u0027);\r\n}","IsDeferred":false},{"Name":"validateCsvEntry Optimized","Code":"const v = new FastestValidator();\r\n\r\nconst schema = {\r\n id: { type: \u0022number\u0022, positive: true, integer: true },\r\n name: { type: \u0022string\u0022, min: 3, max: 255 },\r\n status: \u0022boolean\u0022 // short-hand def\r\n};\r\n\r\nconst check = v.compile(schema);\r\n\r\nconsole.log(check({ id: 5, name: \u0022John\u0022, status: true }));","IsDeferred":false}]}