@@ -5,7 +5,7 @@ aws_logs_list() {
55 aws_run_commandline ' aws logs describe-log-groups --query "*[].logGroupName"'
66}
77
8- aws_logs_tail () {
8+ function aws_logs_tail() {
99 aws_log_group_name=$1
1010
1111 # Check aws_log_group_name invalid
@@ -18,8 +18,88 @@ aws_logs_tail() {
1818 eval ${aws_cmd}
1919}
2020
21- aws_logs_tail_with_hint () {
21+ function aws_logs_tail_with_hint() {
2222 echo " Your log group name >"
2323 aws_log_group_name=$( peco_create_menu ' peco_aws_logs_list' )
2424 aws_logs_tail $aws_log_group_name $1
2525}
26+
27+ # Function to start an AWS CloudWatch Logs query
28+ aws_logs_run_query () {
29+ local log_group_name=" $1 " # The name of the log group
30+ local start_time=" $2 " # The start time for the query in milliseconds
31+ local end_time=" $3 " # The end time for the query in milliseconds
32+ local query_string=" $4 " # The CloudWatch Logs Insights query string
33+ local region=" $5 " # The AWS region
34+
35+ # Ensure required parameters are provided
36+ if [[ -z " $log_group_name " || -z " $start_time " || -z " $end_time " || -z " $query_string " || -z " $region " ]]; then
37+ echo " Error: Missing required arguments."
38+ echo " Usage: aws_logs_run_query <log_group_name> <start_time> <end_time> <query_string> <region>"
39+ return 1
40+ fi
41+
42+ # Execute the query
43+ local query_id
44+ query_id=$( aws logs start-query \
45+ --log-group-name " $log_group_name " \
46+ --start-time " $start_time " \
47+ --end-time " $end_time " \
48+ --query-string " $query_string " \
49+ --region " $region " \
50+ --query " queryId" \
51+ --output text 2>&1 )
52+
53+ # Check for errors
54+ if [[ $? -ne 0 ]]; then
55+ echo " Error starting the query: $query_id "
56+ return 1
57+ fi
58+
59+ echo " $query_id "
60+ }
61+
62+ # Function to get AWS CloudWatch Logs query results
63+ aws_logs_get_query_results () {
64+ local query_id=" $1 " # The query ID returned by aws_logs_run_query
65+ local region=" $2 " # The AWS region
66+
67+ # Ensure required parameters are provided
68+ if [[ -z " $query_id " || -z " $region " ]]; then
69+ echo " Error: Missing required arguments."
70+ echo " Usage: aws_logs_get_query_results <query_id> <region>"
71+ return 1
72+ fi
73+
74+ # Wait for the query to complete
75+ local query_status=" Running"
76+ while [[ " $query_status " == " Running" || " $query_status " == " Scheduled" ]]; do
77+ echo " Waiting for query results..."
78+ sleep 2
79+ query_status=$( aws logs get-query-results \
80+ --query-id " $query_id " \
81+ --region " $region " \
82+ --query " status" \
83+ --output text 2>&1 )
84+ done
85+
86+ # Check if the query was successful
87+ if [[ " $query_status " != " Complete" ]]; then
88+ echo " Error: Query did not complete successfully. Status: $query_status "
89+ return 1
90+ fi
91+
92+ # Retrieve and display query results
93+ local results
94+ results=$( aws logs get-query-results \
95+ --query-id " $query_id " \
96+ --region " $region " \
97+ --output json 2>&1 )
98+
99+ if [[ $? -ne 0 ]]; then
100+ echo " Error retrieving query results: $results "
101+ return 1
102+ fi
103+
104+ echo " $results "
105+ }
0 commit comments