logstash-cli 0.0.6 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.rvmrc +1 -1
- data/README.md +7 -4
- data/lib/logstash-cli/cli.rb +3 -3
- data/lib/logstash-cli/command/count.rb +2 -1
- data/lib/logstash-cli/command/grep.rb +48 -21
- data/lib/logstash-cli/command/tail.rb +1 -1
- data/lib/logstash-cli/version.rb +1 -1
- data/spec/logstash-cli/command/grep_spec.rb +58 -0
- data/spec/spec_helper.rb +0 -0
- metadata +135 -136
data/.rvmrc
CHANGED
data/README.md
CHANGED
@@ -25,6 +25,10 @@ Mucho inspired by a gist of the eminent @lusis - <https://gist.github.com/138807
|
|
25
25
|
|
26
26
|
### Using the Gem
|
27
27
|
|
28
|
+
# If you no rvm
|
29
|
+
$ bundle exec bin/logstash-cli
|
30
|
+
|
31
|
+
# If you have rvm , there is an alias in .rvmrc
|
28
32
|
$ logstash-cli
|
29
33
|
|
30
34
|
### Using the Github version - through bundler
|
@@ -46,18 +50,18 @@ Mucho inspired by a gist of the eminent @lusis - <https://gist.github.com/138807
|
|
46
50
|
[--meta=META] # Meta Logstash fields to show
|
47
51
|
# Default: type,message
|
48
52
|
[--to=TO] # End date
|
49
|
-
# Default: Today in YYYY-MM-DD form
|
53
|
+
# Default: Today in YYYY-MM-DD HH:MM:SS form (the time is optional)
|
50
54
|
[--delim=DELIM] # plain or csv delimiter
|
51
55
|
# Default: |
|
52
56
|
[--format=FORMAT] # Format to use for exporting
|
53
57
|
# Default: csv
|
54
58
|
[--from=FROM] # Begin date
|
55
|
-
# Default: Today in YYYY-MM-DD form
|
59
|
+
# Default: Today in YYYY-MM-DD HH:MM:SS form (the time is optional)
|
56
60
|
[--size=SIZE] # Number of results to return
|
57
61
|
# Default: 500
|
58
62
|
[--esurl=ESURL] # URL to connect to elasticsearch
|
59
63
|
# Default: http://localhost:9200
|
60
|
-
[--last=LAST] # Specify period since now
|
64
|
+
[--last=LAST] # Specify period since now (Examples: 10min, 3hrs, 4days, 1wk, 1yr)
|
61
65
|
|
62
66
|
Search logstash for a pattern
|
63
67
|
|
@@ -138,7 +142,6 @@ Mucho inspired by a gist of the eminent @lusis - <https://gist.github.com/138807
|
|
138
142
|
## TODO
|
139
143
|
|
140
144
|
- find a way to query existing instances
|
141
|
-
- specify last 15m
|
142
145
|
- find a way to get the results by streaming instead of loading all in memory (maybe pagination will help here)
|
143
146
|
- produce ascii histograms
|
144
147
|
- or sparklines
|
data/lib/logstash-cli/cli.rb
CHANGED
@@ -18,11 +18,11 @@ module LogstashCli
|
|
18
18
|
desc "grep PATTERN", "Search logstash for a pattern"
|
19
19
|
method_option :esurl , :default => 'http://localhost:9200', :desc => "URL to connect to elasticsearch"
|
20
20
|
method_option :index_prefix , :default => "logstash-", :desc => "Logstash index prefix"
|
21
|
-
method_option :from , :default =>
|
22
|
-
method_option :to, :default =>
|
21
|
+
method_option :from , :default => nil, :desc => "Begin date and (optionally) time."
|
22
|
+
method_option :to, :default => nil, :desc => "End date and (optionally) time"
|
23
23
|
method_option :format , :default => 'plain', :desc => "Format to use for exporting (plain,csv,json)"
|
24
24
|
method_option :size , :default => 500, :desc => "Number of results to return"
|
25
|
-
method_option :last , :default =>
|
25
|
+
method_option :last , :default => '1d', :desc => "Specify period since now f.i. 1d"
|
26
26
|
method_option :meta , :default => "type,message", :desc => "Meta Logstash fields to show"
|
27
27
|
method_option :fields , :default => "", :desc => "Logstash Fields to show"
|
28
28
|
method_option :delim , :default => "|", :desc => "plain or csv delimiter"
|
@@ -65,7 +65,8 @@ module Count
|
|
65
65
|
puts _format(header, options)
|
66
66
|
|
67
67
|
results['terms'].each do |terms|
|
68
|
-
|
68
|
+
result = [ terms['term'], terms['count'] ]
|
69
|
+
puts _format(result, options)
|
69
70
|
|
70
71
|
unless fields.empty? and metafields.empty?
|
71
72
|
term = terms['term']
|
@@ -4,32 +4,60 @@ require 'yajl/json_gem'
|
|
4
4
|
|
5
5
|
module Grep
|
6
6
|
|
7
|
+
def self.indexes_from_interval(from, to)
|
8
|
+
(from.to_date..to.to_date).sort.map do |date|
|
9
|
+
date.to_s.gsub('-', '.')
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
# Very naive time range description parsing.
|
14
|
+
def self.parse_time_range(desc)
|
15
|
+
/(?<value>\d+)\s*(?<units>\w*)/ =~ desc
|
16
|
+
value = value.to_i
|
17
|
+
start = case units.to_s.downcase
|
18
|
+
when 'm', 'min', 'mins', 'minute', 'minutes'
|
19
|
+
DateTime.now - (value/(60*24.0))
|
20
|
+
when 'h', 'hr', 'hrs', 'hour', 'hours'
|
21
|
+
DateTime.now - (value/24.0)
|
22
|
+
when 'd', 'day', 'days'
|
23
|
+
DateTime.now - value
|
24
|
+
when 'w', 'wk', 'wks', 'week', 'weeks'
|
25
|
+
DateTime.now - (7.0*value)
|
26
|
+
when 'y', 'yr', 'yrs', 'year', 'years'
|
27
|
+
DateTime.now - (365.0*value)
|
28
|
+
else
|
29
|
+
raise ArgumentError
|
30
|
+
end
|
31
|
+
[start, DateTime.now]
|
32
|
+
end
|
33
|
+
|
7
34
|
def _grep(pattern,options)
|
8
35
|
es_url = options[:esurl]
|
9
36
|
index_prefix = options[:index_prefix]
|
10
|
-
|
11
|
-
from = options[:from]
|
12
|
-
to = options[:to]
|
13
37
|
metafields = options[:meta].split(',')
|
14
38
|
fields = options[:fields].split(',')
|
15
39
|
|
16
40
|
begin
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
to = to_date.to_s
|
41
|
+
if options[:last].nil?
|
42
|
+
from_time = DateTime.parse(options[:from])
|
43
|
+
to_time = DateTime.parse(options[:to])
|
44
|
+
else
|
45
|
+
from_time, to_time = Grep.parse_time_range(options[:last])
|
23
46
|
end
|
24
|
-
|
25
|
-
|
26
|
-
to_date = Date.parse(to)
|
27
|
-
rescue Exception => ex
|
28
|
-
$stderr.puts "Something went wrong while parsing the dates: currently only dates are supported with last. Be sure to add the suffix 'd' "+ex
|
47
|
+
rescue ArgumentError
|
48
|
+
$stderr.puts "Something went wrong while parsing the date range."
|
29
49
|
exit -1
|
30
50
|
end
|
31
51
|
|
32
|
-
|
52
|
+
index_range = Grep.indexes_from_interval(from_time, to_time).map do |i|
|
53
|
+
"#{index_prefix}#{i}"
|
54
|
+
end
|
55
|
+
|
56
|
+
$stderr.puts "Searching #{es_url}[#{index_range.first}..#{index_range.last}] - #{pattern}"
|
57
|
+
|
58
|
+
# Reformat time interval to match logstash's internal timestamp'
|
59
|
+
from = from_time.to_time.utc.strftime('%FT%T')
|
60
|
+
to = to_time.to_time.utc.strftime('%FT%T')
|
33
61
|
|
34
62
|
# Total of results to show
|
35
63
|
total_result_size = options[:size]
|
@@ -40,19 +68,17 @@ module Grep
|
|
40
68
|
running_result_size = total_result_size.to_i
|
41
69
|
|
42
70
|
# We reverse the order of working ourselves through the index
|
43
|
-
|
44
|
-
|
45
|
-
es_index = index_prefix+date.to_s.gsub('-','.')
|
46
|
-
|
71
|
+
index_range.reverse.each do |idx|
|
47
72
|
begin
|
48
73
|
Tire.configure {url es_url}
|
49
|
-
search = Tire.search(
|
74
|
+
search = Tire.search(idx) do
|
50
75
|
query do
|
51
76
|
string "#{pattern}"
|
52
77
|
end
|
53
78
|
sort do
|
54
79
|
by :@timestamp, 'desc'
|
55
80
|
end
|
81
|
+
filter "range", "@timestamp" => { "from" => from, "to" => to}
|
56
82
|
size running_result_size
|
57
83
|
end
|
58
84
|
rescue Exception => e
|
@@ -81,7 +107,8 @@ module Grep
|
|
81
107
|
result = []
|
82
108
|
end
|
83
109
|
rescue ::Tire::Search::SearchRequestFailed => e
|
84
|
-
|
110
|
+
# If we got a 404 it likely means we simply don't have logs for that day, not failing over necessarily.
|
111
|
+
$stderr.puts e.message unless search.response.code == 404
|
85
112
|
end
|
86
113
|
end
|
87
114
|
end
|
@@ -36,7 +36,7 @@ module Tail
|
|
36
36
|
|
37
37
|
channel = AMQP::Channel.new(connection, :auto_recovery => true)
|
38
38
|
|
39
|
-
channel.queue("", :auto_delete => auto_delete, :
|
39
|
+
channel.queue("", :auto_delete => auto_delete, :persistent => persistent , :durable => durable) do |queue, declare_ok|
|
40
40
|
queue.bind(exchange_name, :routing_key => routing_key)
|
41
41
|
queue.subscribe do |payload|
|
42
42
|
parsed_message = JSON.parse(payload)
|
data/lib/logstash-cli/version.rb
CHANGED
@@ -0,0 +1,58 @@
|
|
1
|
+
require_relative '../../spec_helper.rb'
|
2
|
+
require_relative '../../../lib/logstash-cli/command/grep.rb'
|
3
|
+
|
4
|
+
describe Grep do
|
5
|
+
it "determines index range needed for a given date range" do
|
6
|
+
Grep.indexes_from_interval(DateTime.now, DateTime.now).should == [DateTime.now.to_date.to_s.gsub('-', '.')]
|
7
|
+
end
|
8
|
+
|
9
|
+
it "calculates time range required to search last X minutes" do
|
10
|
+
# The to_i removes fractions seconds. Unsure on the best way to test this.
|
11
|
+
diff = 10*(1/60.0*24.0)
|
12
|
+
Grep.parse_time_range("10m").map{|t| t.to_time.to_i}.should == [DateTime.now - diff, DateTime.now].map{|t| t.to_time.to_i}
|
13
|
+
Grep.parse_time_range("10mins").map{|t| t.to_time.to_i}.should == [DateTime.now - diff, DateTime.now].map{|t| t.to_time.to_i}
|
14
|
+
Grep.parse_time_range("10 min").map{|t| t.to_time.to_i}.should == [DateTime.now - diff, DateTime.now].map{|t| t.to_time.to_i}
|
15
|
+
Grep.parse_time_range("10 minute").map{|t| t.to_time.to_i}.should == [DateTime.now - diff, DateTime.now].map{|t| t.to_time.to_i}
|
16
|
+
Grep.parse_time_range("10 minutes").map{|t| t.to_time.to_i}.should == [DateTime.now - diff, DateTime.now].map{|t| t.to_time.to_i}
|
17
|
+
end
|
18
|
+
|
19
|
+
it "calculates time range required to search last X hours" do
|
20
|
+
diff = 10*(1/24.0)
|
21
|
+
Grep.parse_time_range("10h").map{|t| t.to_time.to_i}.should == [DateTime.now - diff, DateTime.now].map{|t| t.to_time.to_i}
|
22
|
+
Grep.parse_time_range("10hr").map{|t| t.to_time.to_i}.should == [DateTime.now - diff, DateTime.now].map{|t| t.to_time.to_i}
|
23
|
+
Grep.parse_time_range("10hrs").map{|t| t.to_time.to_i}.should == [DateTime.now - diff, DateTime.now].map{|t| t.to_time.to_i}
|
24
|
+
Grep.parse_time_range("10 hour").map{|t| t.to_time.to_i}.should == [DateTime.now - diff, DateTime.now].map{|t| t.to_time.to_i}
|
25
|
+
Grep.parse_time_range("10 hours").map{|t| t.to_time.to_i}.should == [DateTime.now - diff, DateTime.now].map{|t| t.to_time.to_i}
|
26
|
+
end
|
27
|
+
|
28
|
+
it "calculates time range required to search last X days" do
|
29
|
+
diff = 10
|
30
|
+
Grep.parse_time_range("10d").map{|t| t.to_time.to_i}.should == [DateTime.now - diff, DateTime.now].map{|t| t.to_time.to_i}
|
31
|
+
Grep.parse_time_range("10days").map{|t| t.to_time.to_i}.should == [DateTime.now - diff, DateTime.now].map{|t| t.to_time.to_i}
|
32
|
+
Grep.parse_time_range("10 day").map{|t| t.to_time.to_i}.should == [DateTime.now - diff, DateTime.now].map{|t| t.to_time.to_i}
|
33
|
+
end
|
34
|
+
|
35
|
+
it "calculates time range required to search last X weeks" do
|
36
|
+
diff = 10*7
|
37
|
+
Grep.parse_time_range("10w").map{|t| t.to_time.to_i}.should == [DateTime.now - diff, DateTime.now].map{|t| t.to_time.to_i}
|
38
|
+
Grep.parse_time_range("10wk").map{|t| t.to_time.to_i}.should == [DateTime.now - diff, DateTime.now].map{|t| t.to_time.to_i}
|
39
|
+
Grep.parse_time_range("10 wks").map{|t| t.to_time.to_i}.should == [DateTime.now - diff, DateTime.now].map{|t| t.to_time.to_i}
|
40
|
+
Grep.parse_time_range("10 week").map{|t| t.to_time.to_i}.should == [DateTime.now - diff, DateTime.now].map{|t| t.to_time.to_i}
|
41
|
+
Grep.parse_time_range("10 weeks").map{|t| t.to_time.to_i}.should == [DateTime.now - diff, DateTime.now].map{|t| t.to_time.to_i}
|
42
|
+
end
|
43
|
+
|
44
|
+
it "calculates time range required to search last X years" do
|
45
|
+
diff = 10*365
|
46
|
+
Grep.parse_time_range("10y").map{|t| t.to_time.to_i}.should == [DateTime.now - diff, DateTime.now].map{|t| t.to_time.to_i}
|
47
|
+
Grep.parse_time_range("10 yr").map{|t| t.to_time.to_i}.should == [DateTime.now - diff, DateTime.now].map{|t| t.to_time.to_i}
|
48
|
+
Grep.parse_time_range("10 yrs").map{|t| t.to_time.to_i}.should == [DateTime.now - diff, DateTime.now].map{|t| t.to_time.to_i}
|
49
|
+
Grep.parse_time_range("10 year").map{|t| t.to_time.to_i}.should == [DateTime.now - diff, DateTime.now].map{|t| t.to_time.to_i}
|
50
|
+
Grep.parse_time_range("10 years").map{|t| t.to_time.to_i}.should == [DateTime.now - diff, DateTime.now].map{|t| t.to_time.to_i}
|
51
|
+
end
|
52
|
+
|
53
|
+
it "raises an ArgumentError if it can't cacluate the time range" do
|
54
|
+
lambda {Grep.parse_time_range("two-weeks")}.should raise_error ArgumentError
|
55
|
+
lambda {Grep.parse_time_range("10parsecs")}.should raise_error ArgumentError
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
data/spec/spec_helper.rb
ADDED
File without changes
|
metadata
CHANGED
@@ -1,146 +1,152 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-cli
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.7
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 0
|
9
|
-
- 6
|
10
|
-
version: 0.0.6
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Patrick Debois
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
21
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
22
|
-
none: false
|
23
|
-
requirements:
|
24
|
-
- - ">="
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
hash: 3
|
27
|
-
segments:
|
28
|
-
- 0
|
29
|
-
version: "0"
|
30
|
-
type: :runtime
|
12
|
+
date: 2012-12-06 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
31
15
|
name: tire
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
- - ">="
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
hash: 3
|
41
|
-
segments:
|
42
|
-
- 0
|
43
|
-
version: "0"
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
44
22
|
type: :runtime
|
45
|
-
name: thor
|
46
|
-
version_requirements: *id002
|
47
23
|
prerelease: false
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: thor
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
58
38
|
type: :runtime
|
59
|
-
name: amqp
|
60
|
-
version_requirements: *id003
|
61
39
|
prerelease: false
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: amqp
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
72
54
|
type: :runtime
|
73
|
-
name: rack
|
74
|
-
version_requirements: *id004
|
75
55
|
prerelease: false
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: rack
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
86
70
|
type: :runtime
|
87
|
-
name: yajl-ruby
|
88
|
-
version_requirements: *id005
|
89
71
|
prerelease: false
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: yajl-ruby
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
100
86
|
type: :runtime
|
101
|
-
name: fastercsv
|
102
|
-
version_requirements: *id006
|
103
87
|
prerelease: false
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: fastercsv
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
114
102
|
type: :runtime
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
115
111
|
name: json
|
116
|
-
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :runtime
|
117
119
|
prerelease: false
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: bundler
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
130
|
+
requirements:
|
131
|
+
- - ! '>='
|
132
|
+
- !ruby/object:Gem::Version
|
129
133
|
version: 1.0.0
|
130
134
|
type: :development
|
131
|
-
name: bundler
|
132
|
-
version_requirements: *id008
|
133
135
|
prerelease: false
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ! '>='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: 1.0.0
|
134
142
|
description: CLI interface to logstash
|
135
|
-
email:
|
143
|
+
email:
|
136
144
|
- patrick.debois@jedi.be
|
137
|
-
executables:
|
145
|
+
executables:
|
138
146
|
- logstash-cli
|
139
147
|
extensions: []
|
140
|
-
|
141
148
|
extra_rdoc_files: []
|
142
|
-
|
143
|
-
files:
|
149
|
+
files:
|
144
150
|
- .gitignore
|
145
151
|
- .rvmrc
|
146
152
|
- Gemfile
|
@@ -155,40 +161,33 @@ files:
|
|
155
161
|
- lib/logstash-cli/command/tail.rb
|
156
162
|
- lib/logstash-cli/version.rb
|
157
163
|
- logstashcli.gemspec
|
164
|
+
- spec/logstash-cli/command/grep_spec.rb
|
165
|
+
- spec/spec_helper.rb
|
158
166
|
homepage: http://github.com/jedi4ever/logstash-cli/
|
159
167
|
licenses: []
|
160
|
-
|
161
168
|
post_install_message:
|
162
169
|
rdoc_options: []
|
163
|
-
|
164
|
-
require_paths:
|
170
|
+
require_paths:
|
165
171
|
- lib
|
166
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
172
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
167
173
|
none: false
|
168
|
-
requirements:
|
169
|
-
- -
|
170
|
-
- !ruby/object:Gem::Version
|
171
|
-
|
172
|
-
segments:
|
174
|
+
requirements:
|
175
|
+
- - ! '>='
|
176
|
+
- !ruby/object:Gem::Version
|
177
|
+
version: '0'
|
178
|
+
segments:
|
173
179
|
- 0
|
174
|
-
|
175
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
180
|
+
hash: 3090991630995914937
|
181
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
176
182
|
none: false
|
177
|
-
requirements:
|
178
|
-
- -
|
179
|
-
- !ruby/object:Gem::Version
|
180
|
-
hash: 23
|
181
|
-
segments:
|
182
|
-
- 1
|
183
|
-
- 3
|
184
|
-
- 6
|
183
|
+
requirements:
|
184
|
+
- - ! '>='
|
185
|
+
- !ruby/object:Gem::Version
|
185
186
|
version: 1.3.6
|
186
187
|
requirements: []
|
187
|
-
|
188
188
|
rubyforge_project: logstash-cli
|
189
|
-
rubygems_version: 1.8.
|
189
|
+
rubygems_version: 1.8.24
|
190
190
|
signing_key:
|
191
191
|
specification_version: 3
|
192
192
|
summary: CLI interface to logstash
|
193
193
|
test_files: []
|
194
|
-
|