rusticity_term/cw/
logs.rs1use crate::common::UTC_TIMESTAMP_WIDTH;
2
3pub fn console_url_list(region: &str) -> String {
4 format!(
5 "https://{}.console.aws.amazon.com/cloudwatch/home?region={}#logsV2:log-groups",
6 region, region
7 )
8}
9
10pub fn console_url_detail(region: &str, group_name: &str) -> String {
11 let encoded_group = urlencoding::encode(group_name);
12 format!(
13 "https://{}.console.aws.amazon.com/cloudwatch/home?region={}#logsV2:log-groups/log-group/{}",
14 region, region, encoded_group
15 )
16}
17
18pub fn console_url_stream(region: &str, group_name: &str, stream_name: &str) -> String {
19 let encoded_group = urlencoding::encode(group_name);
20 let encoded_stream = urlencoding::encode(stream_name);
21 format!(
22 "https://{}.console.aws.amazon.com/cloudwatch/home?region={}#logsV2:log-groups/log-group/{}/log-events/{}",
23 region, region, encoded_group, encoded_stream
24 )
25}
26
27#[derive(Debug, Clone, Copy, PartialEq)]
28pub enum StreamColumn {
29 LogStream,
30 ARN,
31 CreationTime,
32 FirstEventTime,
33 LastEventTime,
34 LastIngestionTime,
35 UploadSequenceToken,
36}
37
38impl StreamColumn {
39 pub fn name(&self) -> &'static str {
40 match self {
41 StreamColumn::LogStream => "Log stream",
42 StreamColumn::ARN => "ARN",
43 StreamColumn::CreationTime => "Creation time",
44 StreamColumn::FirstEventTime => "First event time",
45 StreamColumn::LastEventTime => "Last event time",
46 StreamColumn::LastIngestionTime => "Last ingestion time",
47 StreamColumn::UploadSequenceToken => "Upload sequence token",
48 }
49 }
50
51 pub fn width(&self) -> u16 {
52 match self {
53 StreamColumn::LogStream => 50,
54 StreamColumn::ARN => 80,
55 StreamColumn::CreationTime => UTC_TIMESTAMP_WIDTH,
56 StreamColumn::FirstEventTime => UTC_TIMESTAMP_WIDTH,
57 StreamColumn::LastEventTime => UTC_TIMESTAMP_WIDTH,
58 StreamColumn::LastIngestionTime => UTC_TIMESTAMP_WIDTH,
59 StreamColumn::UploadSequenceToken => 30,
60 }
61 }
62
63 pub fn all() -> Vec<StreamColumn> {
64 vec![
65 StreamColumn::LogStream,
66 StreamColumn::ARN,
67 StreamColumn::CreationTime,
68 StreamColumn::FirstEventTime,
69 StreamColumn::LastEventTime,
70 StreamColumn::LastIngestionTime,
71 StreamColumn::UploadSequenceToken,
72 ]
73 }
74}
75
76#[derive(Debug, Clone, Copy, PartialEq)]
77pub enum EventColumn {
78 Timestamp,
79 IngestionTime,
80 Message,
81 EventId,
82 LogStreamName,
83}
84
85impl EventColumn {
86 pub fn name(&self) -> &'static str {
87 match self {
88 EventColumn::Timestamp => "Timestamp",
89 EventColumn::IngestionTime => "Ingestion time",
90 EventColumn::Message => "Message",
91 EventColumn::EventId => "Event ID",
92 EventColumn::LogStreamName => "Log stream name",
93 }
94 }
95
96 pub fn width(&self) -> u16 {
97 match self {
98 EventColumn::Timestamp => UTC_TIMESTAMP_WIDTH,
99 EventColumn::IngestionTime => UTC_TIMESTAMP_WIDTH,
100 EventColumn::Message => 0, EventColumn::EventId => 40,
102 EventColumn::LogStreamName => 50,
103 }
104 }
105
106 pub fn all() -> Vec<EventColumn> {
107 vec![
108 EventColumn::Timestamp,
109 EventColumn::IngestionTime,
110 EventColumn::Message,
111 EventColumn::EventId,
112 EventColumn::LogStreamName,
113 ]
114 }
115}
116
117#[cfg(test)]
118mod tests {
119 use super::*;
120
121 #[test]
122 fn test_stream_column_all_returns_seven_columns() {
123 let columns = StreamColumn::all();
124 assert_eq!(columns.len(), 7);
125 }
126
127 #[test]
128 fn test_event_column_all_returns_five_columns() {
129 let columns = EventColumn::all();
130 assert_eq!(columns.len(), 5);
131 }
132}