papertrail 0.9.6 → 0.9.7
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/papertrail.rb +1 -1
- data/lib/papertrail/cli.rb +68 -25
- data/lib/papertrail/event.rb +5 -1
- data/lib/papertrail/search_result.rb +8 -0
- data/papertrail.gemspec +2 -2
- metadata +3 -3
data/lib/papertrail.rb
CHANGED
data/lib/papertrail/cli.rb
CHANGED
@@ -9,18 +9,24 @@ module Papertrail
|
|
9
9
|
class Cli
|
10
10
|
include Papertrail::CliHelpers
|
11
11
|
|
12
|
-
|
13
|
-
# Let it slide if we have invalid JSON
|
14
|
-
if JSON.respond_to?(:default_options)
|
15
|
-
JSON.default_options[:check_utf8] = false
|
16
|
-
end
|
12
|
+
attr_reader :options, :query_options, :connection
|
17
13
|
|
18
|
-
|
14
|
+
def initialize
|
15
|
+
@options = {
|
19
16
|
:configfile => nil,
|
20
17
|
:delay => 2,
|
21
18
|
:follow => false
|
22
19
|
}
|
23
20
|
|
21
|
+
@query_options = {}
|
22
|
+
end
|
23
|
+
|
24
|
+
def run
|
25
|
+
# Let it slide if we have invalid JSON
|
26
|
+
if JSON.respond_to?(:default_options)
|
27
|
+
JSON.default_options[:check_utf8] = false
|
28
|
+
end
|
29
|
+
|
24
30
|
if configfile = find_configfile
|
25
31
|
configfile_options = load_configfile(configfile)
|
26
32
|
options.merge!(configfile_options)
|
@@ -66,9 +72,7 @@ module Papertrail
|
|
66
72
|
options.merge!(configfile_options)
|
67
73
|
end
|
68
74
|
|
69
|
-
connection = Papertrail::Connection.new(options)
|
70
|
-
|
71
|
-
query_options = {}
|
75
|
+
@connection = Papertrail::Connection.new(options)
|
72
76
|
|
73
77
|
if options[:system]
|
74
78
|
query_options[:system_id] = connection.find_id_for_source(options[:system])
|
@@ -84,33 +88,72 @@ module Papertrail
|
|
84
88
|
end
|
85
89
|
end
|
86
90
|
|
87
|
-
set_min_max_time!(options, query_options)
|
88
|
-
|
89
|
-
search_query = connection.query(ARGV[0], query_options)
|
90
|
-
|
91
91
|
if options[:follow]
|
92
|
+
search_query = connection.query(ARGV[0], query_options)
|
93
|
+
|
92
94
|
loop do
|
93
|
-
|
94
|
-
$stdout.puts search_query.search.data.to_json
|
95
|
-
else
|
96
|
-
search_query.search.events.each do |event|
|
97
|
-
$stdout.puts event
|
98
|
-
end
|
99
|
-
end
|
100
|
-
$stdout.flush
|
95
|
+
display_results(search_query.search)
|
101
96
|
sleep options[:delay]
|
102
97
|
end
|
98
|
+
elsif options[:min_time]
|
99
|
+
query_time_range
|
103
100
|
else
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
101
|
+
set_min_max_time!(options, query_options)
|
102
|
+
search_query = connection.query(ARGV[0], query_options)
|
103
|
+
display_results(search_query.search)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
def query_time_range
|
108
|
+
min_time = parse_time(options[:min_time])
|
109
|
+
|
110
|
+
if options[:max_time]
|
111
|
+
max_time = parse_time(options[:max_time])
|
112
|
+
end
|
113
|
+
|
114
|
+
search_results = connection.query(ARGV[0], query_options.merge(:min_time => min_time.to_i, :tail => false)).search
|
115
|
+
|
116
|
+
loop do
|
117
|
+
search_results.events.each do |event|
|
118
|
+
# If we've found an event beyond what we were looking for, we're done
|
119
|
+
if max_time && event.received_at > max_time
|
120
|
+
break
|
121
|
+
end
|
122
|
+
|
123
|
+
if options[:json]
|
124
|
+
$stdout.puts event.data.to_json
|
125
|
+
else
|
108
126
|
$stdout.puts event
|
109
127
|
end
|
110
128
|
end
|
129
|
+
|
130
|
+
# If we've found the end of what we're looking for, we're done
|
131
|
+
if max_time && search_results.max_time_at > max_time
|
132
|
+
break
|
133
|
+
end
|
134
|
+
|
135
|
+
if search_results.reached_end?
|
136
|
+
break
|
137
|
+
end
|
138
|
+
|
139
|
+
# Perform the next search
|
140
|
+
search_results = connection.query(ARGV[0], query_options.merge(:min_id => search_results.max_id, :tail => false)).search
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
def display_results(results)
|
145
|
+
if options[:json]
|
146
|
+
$stdout.puts results.data.to_json
|
147
|
+
else
|
148
|
+
results.events.each do |event|
|
149
|
+
$stdout.puts event
|
150
|
+
end
|
111
151
|
end
|
152
|
+
|
153
|
+
$stdout.flush
|
112
154
|
end
|
113
155
|
|
156
|
+
|
114
157
|
def usage
|
115
158
|
<<-EOF
|
116
159
|
|
data/lib/papertrail/event.rb
CHANGED
@@ -8,8 +8,12 @@ module Papertrail
|
|
8
8
|
@data = data
|
9
9
|
end
|
10
10
|
|
11
|
+
def received_at
|
12
|
+
@received_at ||= Time.parse(data['received_at'])
|
13
|
+
end
|
14
|
+
|
11
15
|
def to_s
|
12
|
-
"#{
|
16
|
+
"#{received_at.strftime('%b %e %X')} #{data['hostname']} #{data['program']}: #{data['message']}"
|
13
17
|
end
|
14
18
|
end
|
15
19
|
end
|
data/papertrail.gemspec
CHANGED
@@ -13,8 +13,8 @@ Gem::Specification.new do |s|
|
|
13
13
|
## If your rubyforge_project name is different, then edit it and comment out
|
14
14
|
## the sub! line in the Rakefile
|
15
15
|
s.name = 'papertrail'
|
16
|
-
s.version = '0.9.
|
17
|
-
s.date = '
|
16
|
+
s.version = '0.9.7'
|
17
|
+
s.date = '2013-02-18'
|
18
18
|
s.rubyforge_project = 'papertrail'
|
19
19
|
|
20
20
|
## Make sure your summary is short. The description may be as long
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 9
|
8
|
-
-
|
9
|
-
version: 0.9.
|
8
|
+
- 7
|
9
|
+
version: 0.9.7
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Papertrail
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date:
|
17
|
+
date: 2013-02-18 00:00:00 -08:00
|
18
18
|
default_executable: papertrail
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|