aws-logs 0.2.0 → 0.3.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 64ddf1d20fab423535f9f50bb65c10ae9be2130c57fbf15575a12ea5c3d63e96
4
- data.tar.gz: f48a61b93834a37c64e22e088465f4d2212a863fc69c42214f250237713a4886
3
+ metadata.gz: 1b5f2fc9111e29b7a67550c1513dd21b67840279bd3c12538aa5532ef72b2ab4
4
+ data.tar.gz: e0913aae37e2d27b81959b47a9fa89a74724a2494ebffa956c27acfa982ec6bc
5
5
  SHA512:
6
- metadata.gz: 1d362480e5d9aa1279ff5350bf685b3cdb350523f960e29a884106857c8a0f3033c9dc6974d778dc17971ca07c65d523b74da7b6e3e4f9e232331328bff801bc
7
- data.tar.gz: 456686311206099c88a2f931e6369eb030145a97d3e45d54381b6e5a237b816bf5234bc029edd2fb0d6062e156d6092e6c4dec5ec7fe1753121c669227d1f6a9
6
+ metadata.gz: 2ddeb28e8dc13db69efcd1e6c861a4c08f8c800333dbdedb669ee56f6c9fe0fda57ae31c783aea91200156f22120a6cedace8fb2d7fff81d11e6ef537bd4b5cc
7
+ data.tar.gz: '091350a05ffecae55423ea1fcff0e6914b9db6bf8c8123749667d586fb5ae4459a12f58d02f29f9b2e6b92a8a7028482855536476f7b6604c820e671ded84ad8'
data/CHANGELOG.md CHANGED
@@ -3,6 +3,21 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  This project *tries* to adhere to [Semantic Versioning](http://semver.org/), even before v1.0.
5
5
 
6
+ ## [0.3.4]
7
+ - set next_token for large filter_log_events responses
8
+
9
+ ## [0.3.3]
10
+ - #2 add overlap to window to account for delayed logs received at the same time
11
+
12
+ ## [0.3.2]
13
+ - #1 clean up end_loop_signal logic
14
+
15
+ ## [0.3.1]
16
+ - fix --no-follow option
17
+
18
+ ## [0.3.0]
19
+ - display final logs upon stop_follow!
20
+
6
21
  ## [0.2.0]
7
22
  - add stop_follow! method
8
23
  - friendly error message when log not found
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # aws-logs
2
2
 
3
- [![Gem Version](https://badge.fury.io/rb/GEMNAME.png)](http://badge.fury.io/rb/GEMNAME)
3
+ [![Gem Version](https://badge.fury.io/rb/aws-logs.png)](http://badge.fury.io/rb/aws-logs)
4
4
 
5
5
  [![BoltOps Badge](https://img.boltops.com/boltops/badges/boltops-badge.png)](https://www.boltops.com)
6
6
 
@@ -41,7 +41,7 @@ Since supports these formats:
41
41
  * d - days
42
42
  * w - weeks
43
43
 
44
- Since does not current support combining the formats. IE: 5m30s.
44
+ Since does not support combining the formats. IE: 5m30s.
45
45
 
46
46
  ## Filter Pattern
47
47
 
@@ -52,6 +52,6 @@ To match terms with spaces in it, you'll need quotes around it. Otherise, the ma
52
52
 
53
53
  aws-logs tail /aws/codebuild/demo --filter-pattern '"Wed Nov 27 23"' --since 3h --no-follow
54
54
 
55
- Here's an example of matching with an exclude patter using the `-` (minus sign).
55
+ Here's an example of matching with an exclude pattern using the `-` (minus sign).
56
56
 
57
57
  aws-logs tail /aws/codebuild/demo --filter-pattern '"ERROR" - "Exiting"' --since 3h --no-follow
data/lib/aws_logs/tail.rb CHANGED
@@ -8,7 +8,7 @@ module AwsLogs
8
8
  @options = options
9
9
  @log_group_name = options[:log_group_name]
10
10
  # Setting to ensure matches default CLI option
11
- @follow = @options[:follow] || true
11
+ @follow = @options[:follow].nil? ? true : @options[:follow]
12
12
 
13
13
  @loop_count = 0
14
14
  @output = [] # for specs
@@ -35,14 +35,21 @@ module AwsLogs
35
35
  return
36
36
  end
37
37
 
38
+ # We overlap the sliding window because CloudWatch logs can receive or send the logs out of order.
39
+ # For example, a bunch of logs can all come in at the same second, but they haven't registered to CloudWatch logs
40
+ # yet. If we don't overlap the sliding window then we'll miss the logs that were delayed in registering.
41
+ overlap = 60*1000 # overlap the sliding window by a minute
38
42
  since, now = initial_since, current_now
39
- while true && !end_loop?
43
+ until end_loop?
40
44
  refresh_events(since, now)
41
45
  display
42
- since, now = now, current_now
46
+ since, now = now-overlap, current_now
43
47
  loop_count!
44
- sleep 5 if @follow && !@@end_loop_signal && !ENV["AWS_LOGS_TEST"]
48
+ sleep 5 if @follow && !ENV["AWS_LOGS_TEST"]
45
49
  end
50
+ # Refresh and display a final time in case the end_loop gets interrupted by stop_follow!
51
+ refresh_events(since, now)
52
+ display
46
53
  rescue Aws::CloudWatchLogs::Errors::ResourceNotFoundException => e
47
54
  puts "ERROR: #{e.class}: #{e.message}".color(:red)
48
55
  puts "Log group #{@log_group_name} not found."
@@ -58,11 +65,13 @@ module AwsLogs
58
65
  log_group_name: @log_group_name, # required
59
66
  start_time: start_time,
60
67
  end_time: end_time,
61
- # limit: 10,
68
+ # limit: 1000,
69
+ # interleaved: true,
62
70
  }
63
71
  options[:log_stream_names] = @options[:log_stream_names] if @options[:log_stream_names]
64
72
  options[:log_stream_name_prefix] = @options[:log_stream_name_prefix] if @options[:log_stream_name_prefix]
65
73
  options[:filter_pattern] = @options[:filter_pattern] if @options[:filter_pattern]
74
+ options[:next_token] = next_token if next_token != :start && !next_token.nil?
66
75
  resp = cloudwatchlogs.filter_log_events(options)
67
76
 
68
77
  @events += resp.events
@@ -97,9 +106,7 @@ module AwsLogs
97
106
  return unless follow_until
98
107
 
99
108
  messages = @events.map(&:message)
100
- if messages.detect { |m| m.include?(follow_until) }
101
- @@end_loop_signal = true
102
- end
109
+ @@end_loop_signal = messages.detect { |m| m.include?(follow_until) }
103
110
  end
104
111
 
105
112
  def say(text)
@@ -110,15 +117,17 @@ module AwsLogs
110
117
  @output.join("\n") + "\n"
111
118
  end
112
119
 
113
- @@end_loop_signal = false
114
120
  def set_trap
115
121
  Signal.trap("INT") {
116
122
  puts "\nCtrl-C detected. Exiting..."
117
- @@end_loop_signal = true # useful to control loop
118
123
  exit # immediate exit
119
124
  }
120
125
  end
121
126
 
127
+ # The stop_follow! results in a little waiting because it signals to break the polling loop.
128
+ # Since it's in the middle of the loop process, the loop will finish the sleep 5 first.
129
+ # So it can pause from 0-5 seconds.
130
+ @@end_loop_signal = false
122
131
  def self.stop_follow!
123
132
  @@end_loop_signal = true
124
133
  end
@@ -1,3 +1,3 @@
1
1
  module AwsLogs
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.4"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aws-logs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tung Nguyen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-11-28 00:00:00.000000000 Z
11
+ date: 2019-12-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport