papertrail 0.8.3

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source :rubygems
2
+
3
+ gem 'rake', '0.8.7'
4
+
5
+ gemspec
data/README.md ADDED
@@ -0,0 +1,131 @@
1
+ # papertrail Command-line tail & search client for Papertrail log management service
2
+
3
+ Small standalone [binary] to retrieve, search, and tail recent app
4
+ server log and system syslog messages from [Papertrail].
5
+
6
+ Supports optional Boolean search queries and polling for new events
7
+ (like "tail -f"). Example:
8
+
9
+ papertrail -f "(www OR db) (nginx OR pgsql) -accepted"
10
+
11
+ Output is line-buffered so it can be fed into a pipe, like for grep.
12
+ See below for colorization setup.
13
+
14
+ The [SearchClient] class can be used by other apps to perform one-off
15
+ API searches or follow (tail) events matching a given query. Interface
16
+ may change.
17
+
18
+
19
+ ## Quick Start
20
+
21
+ $ [sudo] gem install papertrail-cli
22
+ $ echo "token: 123456789012345678901234567890ab" > ~/.papertrail.yml
23
+ $ papertrail
24
+
25
+ Retrieve token from Papertrail [User Profile].
26
+
27
+
28
+ ## Installation
29
+
30
+ Install the gem (details on [RubyGems]), which includes a binary called
31
+ "papertrail":
32
+
33
+ $ [sudo] gem install papertrail-cli
34
+
35
+
36
+ ## Configuration
37
+
38
+ Create ~/.papertrail.yml containing your API token, or specify the
39
+ path to that file with -c. Example (from
40
+ examples/papertrail.yml.example):
41
+
42
+ token: 123456789012345678901234567890ab
43
+
44
+ Retrieve token from Papertrail [User Profile]. For compatibility with
45
+ older config files, `username` and `password` keys are also supported.
46
+
47
+ You may want to alias "trail" to "papertrail", like:
48
+
49
+ echo "alias trail=papertrail" >> ~/.bashrc
50
+
51
+
52
+ ## Usage & Examples
53
+
54
+ $ papertrail -h
55
+ papertrail - command-line tail and search for Papertrail log management service
56
+ -h, --help Show usage
57
+ -f, --follow Continue running and print new events (off)
58
+ -d, --delay SECONDS Delay between refresh (3)
59
+ -c, --configfile PATH Path to config (~/.papertrail.yml)
60
+
61
+ Usage: papertrail [-f] [-d seconds] [-c /path/to/papertrail.yml] [query]
62
+
63
+ Examples:
64
+ papertrail -f
65
+ papertrail something
66
+ papertrail 1.2.3 Failure
67
+ papertrail -f "(www OR db) (nginx OR pgsql) -accepted"
68
+ papertrail -f -d 10 "ns1 OR 'connection refused'"
69
+
70
+ More: http://papertrailapp.com/
71
+
72
+
73
+ ## Colors
74
+
75
+ Pipe through [colortail] or [MultiTail]. We recommend colortail:
76
+
77
+ $ sudo gem install colortail
78
+
79
+ Save [colortailrc] as `~/.colortailrc` and edit it to enable:
80
+
81
+ $ papertrail -f -d 5 | colortail -g papertrail
82
+
83
+ ### Shorthand
84
+
85
+ If you're using bash, create a function that accepts arguments, then
86
+ invoke `pt` with optional search operators:
87
+
88
+ $ function pt() { papertrail -f -d 5 $_ | colortail -g papertrail }
89
+ $ pt 1.2.3 Failure
90
+
91
+ Add the function line to your `~/.bashrc`.
92
+
93
+ ### Advanced
94
+
95
+ For complete control, pipe through anything capable of inserting ANSI
96
+ control characters. Here's an example that colorizes 3 fields separately
97
+ - the first 15 characters for the date, a word for the hostname, and a
98
+ word for the program name:
99
+
100
+ $ papertrail | perl -pe 's/^(.{15})(.)([\S]+)(.)([\S]+)/\e[1;31;43m\1\e[0m\2\e[1;31;43m\3\e[0m\4\e[1;31;43m\5\e[0m/g'
101
+
102
+ the "1;31;43" are bold (1), foreground red (31), background yellow (43),
103
+ and can be any ANSI [escape characters].
104
+
105
+
106
+ ## Contribute
107
+
108
+ Bug report:
109
+
110
+ 1. See whether the issue has already been reported:
111
+ http://github.com/papertrail/papertrail-cli/issues/
112
+ 2. If you don't find one, create an issue with a repro case.
113
+
114
+ Enhancement or fix:
115
+
116
+ 1. Fork the project:
117
+ http://github.com/papertrail/papertrail-cli
118
+ 2. Make your changes with tests.
119
+ 3. Commit the changes without changing the Rakefile or other files unrelated
120
+ to your enhancement.
121
+ 4. Send a pull request.
122
+
123
+ [binary]: https://github.com/papertrail/papertrail-cli/blob/master/bin/papertrail
124
+ [Papertrail]: http://papertrailapp.com/
125
+ [SearchClient]: https://github.com/papertrail/papertrail-cli/blob/master/lib/papertrail/search_client.rb
126
+ [User Profile]: https://papertrailapp.com/user/edit
127
+ [RubyGems]: https://rubygems.org/gems/papertrail-cli
128
+ [colortail]: http://rubydoc.info/gems/colortail
129
+ [colortailrc]: https://github.com/papertrail/papertrail-cli/wiki/colortailrc
130
+ [MultiTail]: http://www.vanheusden.com/multitail/index.html
131
+ [escape characters]: http://en.wikipedia.org/wiki/ANSI_escape_code#Colors
data/Rakefile ADDED
@@ -0,0 +1,154 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'date'
4
+
5
+ #############################################################################
6
+ #
7
+ # Helper functions
8
+ #
9
+ #############################################################################
10
+
11
+ def name
12
+ @name ||= Dir['*.gemspec'].first.split('.').first
13
+ end
14
+
15
+ def module_name
16
+ name.split('-').first
17
+ end
18
+
19
+ def version
20
+ line = File.read("lib/#{name}.rb")[/^\s*VERSION\s*=\s*.*/]
21
+ line.match(/.*VERSION\s*=\s*['"](.*)['"]/)[1]
22
+ end
23
+
24
+ def date
25
+ Date.today.to_s
26
+ end
27
+
28
+ def rubyforge_project
29
+ name
30
+ end
31
+
32
+ def gemspec_file
33
+ "#{name}.gemspec"
34
+ end
35
+
36
+ def gem_file
37
+ "#{name}-#{version}.gem"
38
+ end
39
+
40
+ def replace_header(head, header_name)
41
+ head.sub!(/(\.#{header_name}\s*= ').*'/) { "#{$1}#{send(header_name)}'"}
42
+ end
43
+
44
+ #############################################################################
45
+ #
46
+ # Standard tasks
47
+ #
48
+ #############################################################################
49
+
50
+ task :default => :test
51
+
52
+ require 'rake/testtask'
53
+ Rake::TestTask.new(:test) do |test|
54
+ test.libs << 'lib' << 'test'
55
+ test.pattern = 'test/**/test_*.rb'
56
+ test.verbose = true
57
+ end
58
+
59
+ desc "Generate RCov test coverage and open in your browser"
60
+ task :coverage do
61
+ require 'rcov'
62
+ sh "rm -fr coverage"
63
+ sh "rcov test/test_*.rb"
64
+ sh "open coverage/index.html"
65
+ end
66
+
67
+ require 'rake/rdoctask'
68
+ Rake::RDocTask.new do |rdoc|
69
+ rdoc.rdoc_dir = 'rdoc'
70
+ rdoc.title = "#{name} #{version}"
71
+ rdoc.rdoc_files.include('README*')
72
+ rdoc.rdoc_files.include('lib/**/*.rb')
73
+ end
74
+
75
+ desc "Open an irb session preloaded with this library"
76
+ task :console do
77
+ sh "irb -rubygems -r ./lib/#{name}.rb"
78
+ end
79
+
80
+ #############################################################################
81
+ #
82
+ # Custom tasks (add your own tasks here)
83
+ #
84
+ #############################################################################
85
+
86
+
87
+
88
+ #############################################################################
89
+ #
90
+ # Packaging tasks
91
+ #
92
+ #############################################################################
93
+
94
+ desc "Create tag v#{version} and build and push #{gem_file} to Rubygems"
95
+ task :release => :build do
96
+ unless `git branch` =~ /^\* master$/
97
+ puts "You must be on the master branch to release!"
98
+ exit!
99
+ end
100
+ sh "git commit --allow-empty -a -m 'Release #{version}'"
101
+ sh "git tag v#{version}"
102
+ sh "git push origin master"
103
+ sh "git push origin v#{version}"
104
+ sh "gem push pkg/#{name}-#{version}.gem"
105
+ end
106
+
107
+ desc "Build #{gem_file} into the pkg directory"
108
+ task :build => :gemspec do
109
+ sh "mkdir -p pkg"
110
+ sh "gem build #{gemspec_file}"
111
+ sh "mv #{gem_file} pkg"
112
+ end
113
+
114
+ desc "Generate #{gemspec_file}"
115
+ task :gemspec => :validate do
116
+ # read spec file and split out manifest section
117
+ spec = File.read(gemspec_file)
118
+ head, manifest, tail = spec.split(" # = MANIFEST =\n")
119
+
120
+ # replace name version and date
121
+ replace_header(head, :name)
122
+ replace_header(head, :version)
123
+ replace_header(head, :date)
124
+ #comment this out if your rubyforge_project has a different name
125
+ replace_header(head, :rubyforge_project)
126
+
127
+ # determine file list from git ls-files
128
+ files = `git ls-files`.
129
+ split("\n").
130
+ sort.
131
+ reject { |file| file =~ /^\./ }.
132
+ reject { |file| file =~ /^(rdoc|pkg)/ }.
133
+ map { |file| " #{file}" }.
134
+ join("\n")
135
+
136
+ # piece file back together and write
137
+ manifest = " s.files = %w[\n#{files}\n ]\n"
138
+ spec = [head, manifest, tail].join(" # = MANIFEST =\n")
139
+ File.open(gemspec_file, 'w') { |io| io.write(spec) }
140
+ puts "Updated #{gemspec_file}"
141
+ end
142
+
143
+ desc "Validate #{gemspec_file}"
144
+ task :validate do
145
+ libfiles = Dir['lib/*'] - ["lib/#{name}.rb", "lib/#{module_name}"]
146
+ unless libfiles.empty?
147
+ puts "Directory `lib` should only contain a `#{name}.rb` file and `#{module_name}` dir."
148
+ exit!
149
+ end
150
+ unless Dir['VERSION*'].empty?
151
+ puts "A `VERSION` file at root level violates Gem best practices."
152
+ exit!
153
+ end
154
+ end
data/bin/papertrail ADDED
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'papertrail/cli'
4
+
5
+ begin
6
+ Papertrail::Cli.new.run
7
+ rescue Interrupt
8
+ exit(0)
9
+ end
@@ -0,0 +1 @@
1
+ token: 123456789012345678901234567890ab
data/lib/papertrail.rb ADDED
@@ -0,0 +1,5 @@
1
+ module Papertrail
2
+ VERSION = "0.8.3"
3
+ end
4
+
5
+ require 'papertrail/search_client'
@@ -0,0 +1,95 @@
1
+ require 'optparse'
2
+ require 'yaml'
3
+
4
+ require 'papertrail/connection'
5
+
6
+ module Papertrail
7
+ class Cli
8
+ def run
9
+ options = {
10
+ :configfile => File.expand_path('~/.papertrail.yml'),
11
+ :delay => 2,
12
+ :follow => false
13
+ }
14
+
15
+ OptionParser.new do |opts|
16
+ opts.banner = "papertrail - command-line tail and search for Papertrail log management service"
17
+
18
+ opts.on("-h", "--help", "Show usage") do |v|
19
+ puts opts
20
+ exit
21
+ end
22
+ opts.on("-f", "--follow", "Continue running and print new events (off)") do |v|
23
+ options[:follow] = true
24
+ end
25
+ opts.on("-d", "--delay SECONDS", "Delay between refresh (2)") do |v|
26
+ options[:delay] = v.to_i
27
+ end
28
+ opts.on("-c", "--configfile PATH", "Path to config (~/.papertrail.yml)") do |v|
29
+ options[:configfile] = File.expand_path(v)
30
+ end
31
+ opts.on("-s", "--system SYSTEM", "System to search") do |v|
32
+ options[:system] = v
33
+ end
34
+ opts.on("-g", "--group GROUP", "Group to search") do |v|
35
+ options[:group] = v
36
+ end
37
+
38
+ opts.separator usage
39
+ end.parse!
40
+
41
+ credentials = open(options[:configfile]) do |f|
42
+ YAML.load(f)
43
+ end
44
+
45
+ if credentials['token']
46
+ connection = Papertrail::Connection.new(:token => credentials['token'])
47
+ else
48
+ connection = Papertrail::Connection.new(:username => credentials['username'], :password => credentials['password'])
49
+ end
50
+
51
+ query_options = {}
52
+
53
+ if options[:system]
54
+ query_options[:system_id] = connection.find_id_for_source(options[:system])
55
+ end
56
+
57
+ if options[:group]
58
+ query_options[:group_id] = connection.find_id_for_group(options[:group])
59
+ end
60
+
61
+ search_query = connection.query(ARGV[0], query_options)
62
+
63
+ if options[:follow]
64
+ loop do
65
+ search_query.search.events.each do |event|
66
+ $stdout.puts event
67
+ end
68
+ $stdout.flush
69
+ sleep options[:delay]
70
+ end
71
+ else
72
+ search_query.search.events.each do |event|
73
+ $stdout.puts event
74
+ end
75
+ end
76
+ end
77
+
78
+ def usage
79
+ <<-EOF
80
+
81
+ Usage: papertrail [-f] [-d seconds] [-c /path/to/papertrail.yml] [query]
82
+
83
+ Examples:
84
+ papertrail -f
85
+ papertrail something
86
+ papertrail 1.2.3 Failure
87
+ papertrail -f "(www OR db) (nginx OR pgsql) -accepted"
88
+ papertrail -f -d 10 "ns1 OR 'connection refused'"
89
+
90
+ More: https://papertrailapp.com/
91
+
92
+ EOF
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,62 @@
1
+ require 'faraday'
2
+ require 'openssl'
3
+ require 'faraday_stack'
4
+
5
+ require 'papertrail/search_query'
6
+
7
+ module Papertrail
8
+ class Connection
9
+ extend Forwardable
10
+
11
+ attr_reader :connection
12
+
13
+ def_delegators :@connection, :get, :put, :post
14
+
15
+ def initialize(options)
16
+ ssl_options = { :verify => OpenSSL::SSL::VERIFY_PEER }
17
+
18
+ # Make Ubuntu OpenSSL work
19
+ #
20
+ # From: https://bugs.launchpad.net/ubuntu/+source/openssl/+bug/396818
21
+ # "[OpenSSL] does not presume to select a set of CAs by default."
22
+ if File.file?('/etc/ssl/certs/ca-certificates.crt')
23
+ ssl_options[:ca_file] = '/etc/ssl/certs/ca-certificates.crt'
24
+ end
25
+
26
+ @connection = Faraday::Connection.new(:url => 'https://papertrailapp.com', :ssl => ssl_options) do |builder|
27
+ builder.adapter Faraday.default_adapter
28
+ builder.use FaradayStack::ResponseJSON
29
+ end.tap do |conn|
30
+ if options[:username] && options[:password]
31
+ conn.basic_auth(options[:username], options[:password])
32
+ else
33
+ conn.headers['X-Papertrail-Token'] = options[:token]
34
+ end
35
+ end
36
+ end
37
+
38
+ def find_id_for_source(name)
39
+ response = @connection.get('/api/v1/systems.json')
40
+
41
+ response.body.each do |source|
42
+ return source['id'] if source['name'] =~ /#{Regexp.escape(name)}/i
43
+ end
44
+
45
+ return nil
46
+ end
47
+
48
+ def find_id_for_group(name)
49
+ response = @connection.get('/api/v1/groups.json')
50
+
51
+ response.body.each do |group|
52
+ return group['id'] if group['name'] =~ /#{Regexp.escape(name)}/i
53
+ end
54
+
55
+ return nil
56
+ end
57
+
58
+ def query(query = nil, options = {})
59
+ Papertrail::SearchQuery.new(self, query, options)
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,15 @@
1
+ require 'time'
2
+
3
+ module Papertrail
4
+ class Event
5
+ attr_reader :data
6
+
7
+ def initialize(data)
8
+ @data = data
9
+ end
10
+
11
+ def to_s
12
+ "#{Time.parse(data['received_at']).strftime('%b %e %X')} #{data['hostname']} #{data['program']}: #{data['message']}"
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,23 @@
1
+ require 'papertrail/search_result'
2
+
3
+ module Papertrail
4
+ class SearchQuery
5
+ def initialize(connection, query = nil, options = {})
6
+ @connection = connection
7
+ @query = query
8
+ @options = options
9
+ end
10
+
11
+ def search
12
+ response = @connection.get('/api/v1/events/search.json') do |r|
13
+ r.params = @options.dup
14
+
15
+ r.params[:q] = @query if @query
16
+ r.params[:min_id] = @max_id if @max_id
17
+ end
18
+
19
+ @max_id = response.body['max_id']
20
+ Papertrail::SearchResult.new(response.body)
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ require 'papertrail/event'
2
+
3
+ module Papertrail
4
+ class SearchResult
5
+ attr_reader :data, :events
6
+
7
+ def initialize(data)
8
+ @data = data
9
+
10
+ @events = @data['events'].collect do |event|
11
+ Papertrail::Event.new(event)
12
+ end
13
+ end
14
+
15
+ def max_id
16
+ @data['max_id']
17
+ end
18
+
19
+ def min_id
20
+ @data['min_id']
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,83 @@
1
+ ## This is the rakegem gemspec template. Make sure you read and understand
2
+ ## all of the comments. Some sections require modification, and others can
3
+ ## be deleted if you don't need them. Once you understand the contents of
4
+ ## this file, feel free to delete any comments that begin with two hash marks.
5
+ ## You can find comprehensive Gem::Specification documentation, at
6
+ ## http://docs.rubygems.org/read/chapter/20
7
+ Gem::Specification.new do |s|
8
+ s.specification_version = 2 if s.respond_to? :specification_version=
9
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
10
+ s.rubygems_version = '1.3.5'
11
+
12
+ ## Leave these as is they will be modified for you by the rake gemspec task.
13
+ ## If your rubyforge_project name is different, then edit it and comment out
14
+ ## the sub! line in the Rakefile
15
+ s.name = 'papertrail'
16
+ s.version = '0.8.3'
17
+ s.date = '2012-02-11'
18
+ s.rubyforge_project = 'papertrail'
19
+
20
+ ## Make sure your summary is short. The description may be as long
21
+ ## as you like.
22
+ s.summary = "Command-line client for Papertrail hosted log management service."
23
+ s.description = "Command-line client for Papertrail hosted log management service. Tails and searches app server logs and system syslog. Supports Boolean search and works with grep and pipe output (Unix)."
24
+
25
+ ## List the primary authors. If there are a bunch of authors, it's probably
26
+ ## better to set the email to an email list or something. If you don't have
27
+ ## a custom homepage, consider using your GitHub URL or the like.
28
+ s.authors = ['Papertrail']
29
+ s.email = 'troy@sevenscale.com'
30
+ s.homepage = 'http://github.com/papertrail/papertrail-cli'
31
+
32
+ ## This gets added to the $LOAD_PATH so that 'lib/NAME.rb' can be required as
33
+ ## require 'NAME.rb' or'/lib/NAME/file.rb' can be as require 'NAME/file.rb'
34
+ s.require_paths = %w[lib]
35
+
36
+ ## This sections is only necessary if you have C extensions.
37
+ # s.require_paths << 'ext'
38
+ # s.extensions = %w[ext/extconf.rb]
39
+
40
+ ## If your gem includes any executables, list them here.
41
+ s.executables = ["papertrail"]
42
+ s.default_executable = 'papertrail'
43
+
44
+ ## Specify any RDoc options here. You'll want to add your README and
45
+ ## LICENSE files to the extra_rdoc_files list.
46
+ s.rdoc_options = ["--charset=UTF-8"]
47
+ # s.extra_rdoc_files = %w[README LICENSE]
48
+ s.extra_rdoc_files = []
49
+
50
+ ## List your runtime dependencies here. Runtime dependencies are those
51
+ ## that are needed for an end user to actually USE your code.
52
+ s.add_dependency('yajl-ruby')
53
+ s.add_dependency('faraday', [ '~> 0.6' ])
54
+ s.add_dependency('faraday-stack', [ '~> 0.1' ])
55
+
56
+ ## List your development dependencies here. Development dependencies are
57
+ ## those that are only needed during development
58
+ # s.add_development_dependency('DEVDEPNAME', [">= 1.1.0", "< 2.0.0"])
59
+
60
+ ## Leave this section as-is. It will be automatically generated from the
61
+ ## contents of your Git repository via the gemspec task. DO NOT REMOVE
62
+ ## THE MANIFEST COMMENTS, they are used as delimiters by the task.
63
+ # = MANIFEST =
64
+ s.files = %w[
65
+ Gemfile
66
+ README.md
67
+ Rakefile
68
+ bin/papertrail
69
+ examples/papertrail.yml.example
70
+ lib/papertrail.rb
71
+ lib/papertrail/cli.rb
72
+ lib/papertrail/connection.rb
73
+ lib/papertrail/event.rb
74
+ lib/papertrail/search_query.rb
75
+ lib/papertrail/search_result.rb
76
+ papertrail.gemspec
77
+ ]
78
+ # = MANIFEST =
79
+
80
+ ## Test files will be grabbed from the file list. Make sure the path glob
81
+ ## matches what you actually use.
82
+ s.test_files = s.files.select { |path| path =~ /^test\/test_.*\.rb/ }
83
+ end
metadata ADDED
@@ -0,0 +1,110 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: papertrail
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 8
8
+ - 3
9
+ version: 0.8.3
10
+ platform: ruby
11
+ authors:
12
+ - Papertrail
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2012-02-11 00:00:00 -08:00
18
+ default_executable: papertrail
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: yajl-ruby
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ version: "0"
30
+ type: :runtime
31
+ version_requirements: *id001
32
+ - !ruby/object:Gem::Dependency
33
+ name: faraday
34
+ prerelease: false
35
+ requirement: &id002 !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ~>
38
+ - !ruby/object:Gem::Version
39
+ segments:
40
+ - 0
41
+ - 6
42
+ version: "0.6"
43
+ type: :runtime
44
+ version_requirements: *id002
45
+ - !ruby/object:Gem::Dependency
46
+ name: faraday-stack
47
+ prerelease: false
48
+ requirement: &id003 !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ~>
51
+ - !ruby/object:Gem::Version
52
+ segments:
53
+ - 0
54
+ - 1
55
+ version: "0.1"
56
+ type: :runtime
57
+ version_requirements: *id003
58
+ description: Command-line client for Papertrail hosted log management service. Tails and searches app server logs and system syslog. Supports Boolean search and works with grep and pipe output (Unix).
59
+ email: troy@sevenscale.com
60
+ executables:
61
+ - papertrail
62
+ extensions: []
63
+
64
+ extra_rdoc_files: []
65
+
66
+ files:
67
+ - Gemfile
68
+ - README.md
69
+ - Rakefile
70
+ - bin/papertrail
71
+ - examples/papertrail.yml.example
72
+ - lib/papertrail.rb
73
+ - lib/papertrail/cli.rb
74
+ - lib/papertrail/connection.rb
75
+ - lib/papertrail/event.rb
76
+ - lib/papertrail/search_query.rb
77
+ - lib/papertrail/search_result.rb
78
+ - papertrail.gemspec
79
+ has_rdoc: true
80
+ homepage: http://github.com/papertrail/papertrail-cli
81
+ licenses: []
82
+
83
+ post_install_message:
84
+ rdoc_options:
85
+ - --charset=UTF-8
86
+ require_paths:
87
+ - lib
88
+ required_ruby_version: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ segments:
93
+ - 0
94
+ version: "0"
95
+ required_rubygems_version: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ segments:
100
+ - 0
101
+ version: "0"
102
+ requirements: []
103
+
104
+ rubyforge_project: papertrail
105
+ rubygems_version: 1.3.6
106
+ signing_key:
107
+ specification_version: 2
108
+ summary: Command-line client for Papertrail hosted log management service.
109
+ test_files: []
110
+