Struct cloudfront_logs::ValidatedParquetLogline
source · pub struct ValidatedParquetLogline<'a> {Show 34 fields
pub date: NaiveDate,
pub time: &'a str,
pub datetime: NaiveDateTime,
pub x_edge_location: &'a str,
pub sc_bytes: u64,
pub c_ip: &'a str,
pub cs_method: &'a str,
pub cs_host: &'a str,
pub cs_uri_stem: &'a str,
pub sc_status: u16,
pub cs_referer: Option<&'a str>,
pub cs_user_agent: &'a str,
pub cs_uri_query: Option<&'a str>,
pub cs_cookie: Option<&'a str>,
pub x_edge_result_type: &'a str,
pub x_edge_request_id: &'a str,
pub x_host_header: &'a str,
pub cs_protocol: &'a str,
pub cs_bytes: u64,
pub time_taken: f64,
pub x_forwarded_for: Option<&'a str>,
pub ssl_protocol: Option<&'a str>,
pub ssl_cipher: Option<&'a str>,
pub x_edge_response_result_type: &'a str,
pub cs_protocol_version: &'a str,
pub fle_status: Option<&'a str>,
pub fle_encrypted_fields: Option<u64>,
pub c_port: u16,
pub time_to_first_byte: f64,
pub x_edge_detailed_result_type: &'a str,
pub sc_content_type: &'a str,
pub sc_content_len: u64,
pub sc_range_start: Option<u64>,
pub sc_range_end: Option<u64>,
}Available on crate feature
parquet only.Expand description
The validated log line for parquet usage
Most fields are parsed into more meaningful types.
Unfortunately, parquet_derive does not support all the types;
thus we lower some fields down to:
- &str / Option<&str> (instead of enums, NaiveTime, IpAddr)
- f64 (instead of Duration)
On construction it checks if the line can be parsed. This is useful if you cannot skip the comment lines or have reason to not trust the input for format correctness. The latter should be only an issue if you do not use this crate on CloudFront logs directly.
§Panics
Construction can panic if the input is not a valid log line!
§Examples
Use .try_from() or .try_into() to construct an instance, since action can fail.
use cloudfront_logs::{borrowed::parquet::ValidatedLogline, types::*};
let line = "2019-12-04 21:02:31 LAX1 392 192.0.2.100 GET d111111abcdef8.cloudfront.net /index.html 200 - Mozilla/5.0%20(Windows%20NT%2010.0;%20Win64;%20x64)%20AppleWebKit/537.36%20(KHTML,%20like%20Gecko)%20Chrome/78.0.3904.108%20Safari/537.36 - - Hit SOX4xwn4XV6Q4rgb7XiVGOHms_BGlTAC4KyHmureZmBNrjGdRLiNIQ== d111111abcdef8.cloudfront.net https 23 0.001 - TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256 Hit HTTP/2.0 - - 11040 0.001 Hit text/html 78 - -";
let item = ValidatedLogline::try_from(line).unwrap();
// alternative:
let item: ValidatedLogline<'_> = line.try_into().unwrap();
assert_eq!(item.date, NaiveDate::from_ymd_opt(2019, 12, 4).unwrap());
assert_eq!(item.sc_bytes, 392u64);
assert_eq!(item.cs_protocol, "https");Fields§
§date: NaiveDate§time: &'a str§datetime: NaiveDateTime§x_edge_location: &'a str§sc_bytes: u64§c_ip: &'a str§cs_method: &'a str§cs_host: &'a str§cs_uri_stem: &'a str§sc_status: u16§cs_referer: Option<&'a str>§cs_user_agent: &'a str§cs_uri_query: Option<&'a str>§x_edge_result_type: &'a str§x_edge_request_id: &'a str§x_host_header: &'a str§cs_protocol: &'a str§cs_bytes: u64§time_taken: f64§x_forwarded_for: Option<&'a str>§ssl_protocol: Option<&'a str>§ssl_cipher: Option<&'a str>§x_edge_response_result_type: &'a str§cs_protocol_version: &'a str§fle_status: Option<&'a str>§fle_encrypted_fields: Option<u64>§c_port: u16§time_to_first_byte: f64§x_edge_detailed_result_type: &'a str§sc_content_type: &'a str§sc_content_len: u64§sc_range_start: Option<u64>§sc_range_end: Option<u64>Trait Implementations§
source§impl<'a> Clone for ValidatedLogline<'a>
impl<'a> Clone for ValidatedLogline<'a>
source§fn clone(&self) -> ValidatedLogline<'a>
fn clone(&self) -> ValidatedLogline<'a>
Returns a copy of the value. Read more
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moresource§impl<'a> Debug for ValidatedLogline<'a>
impl<'a> Debug for ValidatedLogline<'a>
source§impl<'a> From<UnvalidatedLogline<'a>> for ValidatedLogline<'a>
impl<'a> From<UnvalidatedLogline<'a>> for ValidatedLogline<'a>
source§fn from(unvalidated: UnvalidatedLogline<'a>) -> Self
fn from(unvalidated: UnvalidatedLogline<'a>) -> Self
Converts to this type from the input type.
source§impl<'a> From<ValidatedLogline<'a>> for UnvalidatedLogline<'a>
impl<'a> From<ValidatedLogline<'a>> for UnvalidatedLogline<'a>
source§fn from(validated: ValidatedLogline<'a>) -> Self
fn from(validated: ValidatedLogline<'a>) -> Self
Converts to this type from the input type.
source§impl<'a> PartialEq for ValidatedLogline<'a>
impl<'a> PartialEq for ValidatedLogline<'a>
source§fn eq(&self, other: &ValidatedLogline<'a>) -> bool
fn eq(&self, other: &ValidatedLogline<'a>) -> bool
This method tests for
self and other values to be equal, and is used
by ==.source§impl<'a> RecordWriter<ValidatedLogline<'a>> for &[ValidatedLogline<'a>]
impl<'a> RecordWriter<ValidatedLogline<'a>> for &[ValidatedLogline<'a>]
fn write_to_row_group<W: Write + Send>( &self, row_group_writer: &mut SerializedRowGroupWriter<'_, W>, ) -> Result<(), ParquetError>
source§impl<'a> TryFrom<&'a str> for ValidatedLogline<'a>
impl<'a> TryFrom<&'a str> for ValidatedLogline<'a>
impl<'a> StructuralPartialEq for ValidatedLogline<'a>
Auto Trait Implementations§
impl<'a> Freeze for ValidatedLogline<'a>
impl<'a> RefUnwindSafe for ValidatedLogline<'a>
impl<'a> Send for ValidatedLogline<'a>
impl<'a> Sync for ValidatedLogline<'a>
impl<'a> Unpin for ValidatedLogline<'a>
impl<'a> UnwindSafe for ValidatedLogline<'a>
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§default unsafe fn clone_to_uninit(&self, dst: *mut T)
default unsafe fn clone_to_uninit(&self, dst: *mut T)
🔬This is a nightly-only experimental API. (
clone_to_uninit)