vantage_aws/models/logs/
stream.rs1use serde::{Deserialize, Serialize};
2use vantage_table::table::Table;
3
4use crate::{AwsAccount, eq};
5
6use super::event::{LogEvent, events_table};
7
8#[derive(Debug, Clone, Serialize, Deserialize)]
11pub struct LogStream {
12 #[serde(rename = "logStreamName")]
13 pub log_stream_name: String,
14 #[serde(default)]
15 pub arn: String,
16 #[serde(rename = "creationTime", default)]
17 pub creation_time: i64,
18 #[serde(rename = "firstEventTimestamp", default)]
19 pub first_event_timestamp: i64,
20 #[serde(rename = "lastEventTimestamp", default)]
21 pub last_event_timestamp: i64,
22 #[serde(rename = "lastIngestionTime", default)]
23 pub last_ingestion_time: i64,
24 #[serde(rename = "storedBytes", default)]
25 pub stored_bytes: i64,
26 #[serde(rename = "uploadSequenceToken", default)]
27 pub upload_sequence_token: String,
28}
29
30pub fn streams_table(aws: AwsAccount) -> Table<AwsAccount, LogStream> {
43 Table::new(
44 "json1/logStreams:logs/Logs_20140328.DescribeLogStreams",
45 aws,
46 )
47 .with_id_column("logStreamName")
48 .with_column_of::<String>("arn")
49 .with_column_of::<i64>("creationTime")
50 .with_column_of::<i64>("firstEventTimestamp")
51 .with_column_of::<i64>("lastEventTimestamp")
52 .with_column_of::<i64>("lastIngestionTime")
53 .with_column_of::<i64>("storedBytes")
54 .with_column_of::<String>("uploadSequenceToken")
55}
56
57impl LogStream {
58 pub fn log_group_name(&self) -> Option<&str> {
62 let after = self.arn.split(":log-group:").nth(1)?;
63 after.split(":log-stream:").next()
64 }
65
66 pub fn ref_events(&self, aws: AwsAccount) -> Option<Table<AwsAccount, LogEvent>> {
70 let group = self.log_group_name()?;
71 Some(self.ref_events_in(aws, group))
72 }
73
74 pub fn ref_events_in(
78 &self,
79 aws: AwsAccount,
80 log_group_name: &str,
81 ) -> Table<AwsAccount, LogEvent> {
82 let mut t = events_table(aws);
83 t.add_condition(eq("logGroupName", log_group_name));
84 t.add_condition(eq("logStreamNamePrefix", self.log_stream_name.clone()));
85 t
86 }
87}