logworm_client 0.3.0
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/CHANGELOG +7 -0
- data/Manifest +14 -0
- data/README +0 -0
- data/Rakefile +10 -0
- data/bin/lw-compute +62 -0
- data/bin/lw-heroku +8 -0
- data/bin/lw-tail +75 -0
- data/lib/logworm_client.rb +4 -0
- data/lib/logworm_client/logger.rb +46 -0
- data/lib/logworm_client/rack.rb +52 -0
- data/lib/logworm_utils.rb +5 -0
- data/lib/logworm_utils/compute.rb +66 -0
- data/lib/logworm_utils/heroku.rb +17 -0
- data/lib/logworm_utils/tail.rb +84 -0
- data/logworm_client.gemspec +43 -0
- metadata +142 -0
data/CHANGELOG
ADDED
data/Manifest
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
CHANGELOG
|
2
|
+
Manifest
|
3
|
+
README
|
4
|
+
Rakefile
|
5
|
+
bin/lw-compute
|
6
|
+
bin/lw-heroku
|
7
|
+
bin/lw-tail
|
8
|
+
lib/logworm_client.rb
|
9
|
+
lib/logworm_client/logger.rb
|
10
|
+
lib/logworm_client/rack.rb
|
11
|
+
lib/logworm_utils.rb
|
12
|
+
lib/logworm_utils/compute.rb
|
13
|
+
lib/logworm_utils/heroku.rb
|
14
|
+
lib/logworm_utils/tail.rb
|
data/README
ADDED
File without changes
|
data/Rakefile
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'echoe'
|
2
|
+
Echoe.new('logworm_client', '0.3.0') do |p|
|
3
|
+
p.description = "logworm client utilities"
|
4
|
+
p.url = "http://www.logworm.com"
|
5
|
+
p.author = "Pomelo, LLC"
|
6
|
+
p.email = "schapira@pomelollc.com"
|
7
|
+
p.ignore_pattern = ["tmp/*", "script/*"]
|
8
|
+
p.development_dependencies = ["logworm", "json"]
|
9
|
+
p.runtime_dependencies = ["logworm", "json"]
|
10
|
+
end
|
data/bin/lw-compute
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
#!/usr/local/bin/ruby
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'logworm_utils'
|
5
|
+
require 'optparse'
|
6
|
+
|
7
|
+
options = {
|
8
|
+
:aggregate_group => [],
|
9
|
+
:conditions => [],
|
10
|
+
:start => nil,
|
11
|
+
:end => nil,
|
12
|
+
:debug => false
|
13
|
+
}
|
14
|
+
|
15
|
+
option_parser = OptionParser.new do |opts|
|
16
|
+
opts.banner = "Usage: #{$0} [options] <log table> <function> <field>"
|
17
|
+
|
18
|
+
opts.on("-g group", String, "Specify an aggregation group (e.g, hour(_ts_utc), or response.code)") do |k|
|
19
|
+
options[:aggregate_group] = k
|
20
|
+
end
|
21
|
+
|
22
|
+
opts.on("-c condition", String, "Specify a condition to match. May be used multiple times") do |c|
|
23
|
+
options[:conditions] << c.strip
|
24
|
+
end
|
25
|
+
|
26
|
+
opts.on("-s starttime", String, "Specify the start time for the query") do |c|
|
27
|
+
options[:start] = c.strip
|
28
|
+
end
|
29
|
+
|
30
|
+
opts.on("-e endtime", String, "Specify the end time for the query") do |c|
|
31
|
+
options[:end] = c.strip
|
32
|
+
end
|
33
|
+
|
34
|
+
opts.on("-v", "Show debug information") do
|
35
|
+
options[:debug] = true
|
36
|
+
end
|
37
|
+
|
38
|
+
opts.on( '-h', '--help', 'Display this screen' ) do
|
39
|
+
puts option_parser.help
|
40
|
+
exit(1)
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
# Parse, and get the required <table>
|
46
|
+
option_parser.parse!
|
47
|
+
if ARGV.size == 3
|
48
|
+
table = ARGV[0].strip
|
49
|
+
function = ARGV[1].strip
|
50
|
+
field = ARGV[2].strip
|
51
|
+
elsif ARGV.size == 2
|
52
|
+
table = ARGV[0].strip
|
53
|
+
function = ARGV[1].strip
|
54
|
+
else
|
55
|
+
puts option_parser.help
|
56
|
+
exit(1)
|
57
|
+
end
|
58
|
+
|
59
|
+
# and run
|
60
|
+
LogwormCompute.new(table, function, field, options).run
|
61
|
+
|
62
|
+
|
data/bin/lw-heroku
ADDED
data/bin/lw-tail
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
#!/usr/local/bin/ruby
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'logworm_utils'
|
5
|
+
require 'optparse'
|
6
|
+
|
7
|
+
options = {
|
8
|
+
:limit => 200,
|
9
|
+
:loop => false,
|
10
|
+
:frequency => 10,
|
11
|
+
:fields => [],
|
12
|
+
:conditions => [],
|
13
|
+
:start => nil,
|
14
|
+
:end => nil,
|
15
|
+
:debug => false,
|
16
|
+
:fkat => false
|
17
|
+
}
|
18
|
+
|
19
|
+
option_parser = OptionParser.new do |opts|
|
20
|
+
opts.banner = "Usage: #{$0} [options] <log table>"
|
21
|
+
|
22
|
+
opts.on("-f [secs]", Integer,
|
23
|
+
"Continuously check for more data, every [secs] seconds.", "Default: #{options[:frequency]}") do |s|
|
24
|
+
options[:loop] = true
|
25
|
+
options[:frequency] = s if s
|
26
|
+
end
|
27
|
+
|
28
|
+
opts.on("-r limit", Integer, "Specify how many log entries to fetch.", "Default: #{options[:limit]}") do |n|
|
29
|
+
options[:limit] = n
|
30
|
+
end
|
31
|
+
|
32
|
+
opts.on("-k fields", String, "Specify a comma-separated list of fields to retrieve.") do |k|
|
33
|
+
options[:fields] = k.split(",").map {|f| f.strip}
|
34
|
+
end
|
35
|
+
|
36
|
+
opts.on("-c condition", String, "Specify a condition to match. May be used multiple times") do |c|
|
37
|
+
options[:conditions] << c.strip
|
38
|
+
end
|
39
|
+
|
40
|
+
opts.on("-s starttime", String, "Specify the start time for the query") do |c|
|
41
|
+
options[:start] = c.strip
|
42
|
+
end
|
43
|
+
|
44
|
+
opts.on("-e endtime", String, "Specify the end time for the query") do |c|
|
45
|
+
options[:end] = c.strip
|
46
|
+
end
|
47
|
+
|
48
|
+
opts.on("--flat", "Do not expand log entries when printing them") do
|
49
|
+
options[:flat] = true
|
50
|
+
end
|
51
|
+
|
52
|
+
opts.on("-v", "Show debug information") do
|
53
|
+
options[:debug] = true
|
54
|
+
end
|
55
|
+
|
56
|
+
opts.on( '-h', '--help', 'Display this screen' ) do
|
57
|
+
puts option_parser.help
|
58
|
+
exit(1)
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
# Parse, and get the required <table>
|
64
|
+
option_parser.parse!
|
65
|
+
table = ARGV.pop
|
66
|
+
if !table
|
67
|
+
puts option_parser.help
|
68
|
+
exit(1)
|
69
|
+
end
|
70
|
+
table.strip!
|
71
|
+
|
72
|
+
# and run
|
73
|
+
t = LogwormTail.new(table, options).run
|
74
|
+
|
75
|
+
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
module Logworm
|
4
|
+
class LogwormException < Exception ; end
|
5
|
+
|
6
|
+
class Logger
|
7
|
+
# Initialize
|
8
|
+
LW_SERVER = DB.new() # Find from config file, or from keys
|
9
|
+
$lr_queue = []
|
10
|
+
|
11
|
+
def self.start_cycle
|
12
|
+
$request_id = "#{Thread.current.object_id}-#{(Time.now.utc.to_f * 1000).to_i}"
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.log(table, values = {})
|
16
|
+
begin
|
17
|
+
# Rename conflicting keys
|
18
|
+
kvalues = values.delete_if {|k,v| k.to_s == ""}.map {|k,v| [k.to_sym, v]}
|
19
|
+
kvalues = Hash[*kvalues.flatten]
|
20
|
+
[:_ts, :_ts_utc, :_request_id].each do |k|
|
21
|
+
kvalues["orig_#{k}".to_sym] = kvalues[k] if kvalues.has_key? k
|
22
|
+
end
|
23
|
+
# Add information
|
24
|
+
ts = Time.now.utc
|
25
|
+
log_details = {:_ts => ts.strftime("%Y-%m-%dT%H:%M:%SZ"), :_ts_utc => (ts.to_f * 1000).to_i}
|
26
|
+
log_details[:_request_id] = $request_id if $request_id
|
27
|
+
# Enqueue
|
28
|
+
payload = kvalues.merge(log_details)
|
29
|
+
$lr_queue << [table, payload]
|
30
|
+
rescue Exception => e
|
31
|
+
$stderr.puts "Error in Logworm::Logger.log: #{e}"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.flush
|
36
|
+
if $lr_queue.size > 0
|
37
|
+
begin
|
38
|
+
LW_SERVER.batch_log($lr_queue.to_json)
|
39
|
+
rescue Exception => e
|
40
|
+
$stderr.puts "in Logworm::Logger.flush: #{e}"
|
41
|
+
end
|
42
|
+
$lr_queue = []
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module Logworm
|
2
|
+
class Rack
|
3
|
+
|
4
|
+
def initialize(app, options = {})
|
5
|
+
@app = app
|
6
|
+
@log_requests_short = options[:log_requests].nil? or options[:log_requests] != false
|
7
|
+
@log_requests_long = !options[:log_requests_long].nil? and options[:log_requests_long] == true
|
8
|
+
end
|
9
|
+
|
10
|
+
def call(env)
|
11
|
+
startTime = Time.now
|
12
|
+
Logger.start_cycle
|
13
|
+
status, headers, body = @app.call(env)
|
14
|
+
appTime = (Time.now - startTime)
|
15
|
+
Logger.log(:web_log_long, {:summary => "#{env['REQUEST_METHOD']} #{env['REQUEST_URI']} - #{status} #{appTime}",
|
16
|
+
:request => env_to_log(env),
|
17
|
+
:response => {:status => status, :headers => headers},
|
18
|
+
:profiling => appTime}) if @log_requests_long
|
19
|
+
Logger.log(:web_log, {:summary => "#{env['REQUEST_METHOD']} #{env['REQUEST_URI']} - #{status} #{appTime}",
|
20
|
+
:request_path => env['REQUEST_PATH'], :request_ip => env['REMOTE_ADDR'],
|
21
|
+
:request_method => env['REQUEST_METHOD'], :input => collect_input(env),
|
22
|
+
:response_status => status,
|
23
|
+
:profiling => appTime}) if @log_requests_short
|
24
|
+
begin
|
25
|
+
Timeout::timeout(1) {
|
26
|
+
Logger.flush # Flushes only if there are any entries. Times out after half second
|
27
|
+
}
|
28
|
+
rescue Exception => e
|
29
|
+
# Ignore --nothing we can do
|
30
|
+
# The list of logs may (and most likely will) be preserved for the next request
|
31
|
+
env['rack.errors'].puts "logworm call failed: #{e}"
|
32
|
+
end
|
33
|
+
[status, headers, body]
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
def env_to_log(env)
|
38
|
+
to_log = {}
|
39
|
+
env.each do |k,v|
|
40
|
+
to_log[k.to_s.downcase.to_sym] = v unless (k.to_s =~ /rack/i or k.to_s =~ /\./i)
|
41
|
+
end
|
42
|
+
to_log.merge({:input => collect_input(env)})
|
43
|
+
end
|
44
|
+
|
45
|
+
def collect_input(env)
|
46
|
+
inputstr = ""
|
47
|
+
env['rack.input'].each {|content| inputstr += content }
|
48
|
+
env['rack.input'].rewind
|
49
|
+
inputstr
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
class LogwormCompute
|
2
|
+
def initialize(table, function, field, options)
|
3
|
+
@table = table
|
4
|
+
@function = function
|
5
|
+
@field = field
|
6
|
+
@options = options
|
7
|
+
|
8
|
+
@valuefield = @field ? "#{@function}(#{@field})" : @function
|
9
|
+
|
10
|
+
begin
|
11
|
+
@db = Logworm::DB.new(false)
|
12
|
+
spec = {:aggregate_function => @function, :aggregate_argument => @field}.merge(@options)
|
13
|
+
@query = Logworm::QueryBuilder.new(spec)
|
14
|
+
rescue Exception => e
|
15
|
+
$stderr.puts "Error: #{e}"
|
16
|
+
exit(-1)
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
def run
|
22
|
+
# Create a resource for the query
|
23
|
+
begin
|
24
|
+
query_data = @db.query(@table, @query.to_json)
|
25
|
+
url = query_data["results_uri"]
|
26
|
+
rows = @db.results(url + "?nocache=1")["results"]
|
27
|
+
rescue Logworm::DatabaseException, Logworm::ForbiddenAccessException => e
|
28
|
+
$stderr.puts "Error: #{e}"
|
29
|
+
exit(-1)
|
30
|
+
rescue Logworm::InvalidQueryException => e
|
31
|
+
$stderr.puts "#{e}, #{@query.to_json}"
|
32
|
+
exit(-1)
|
33
|
+
rescue Exception => e
|
34
|
+
$stderr.puts "Error: #{e}"
|
35
|
+
exit(-1)
|
36
|
+
end
|
37
|
+
|
38
|
+
if @options[:debug]
|
39
|
+
puts "logworm query: #{@query.to_json}"
|
40
|
+
puts "logworm query url: #{query_data["self_uri"]}"
|
41
|
+
puts "logworm results url: #{url}"
|
42
|
+
puts
|
43
|
+
end
|
44
|
+
|
45
|
+
if @query.groups.length > 0
|
46
|
+
results = {}
|
47
|
+
rows.each do |r|
|
48
|
+
grp = []
|
49
|
+
@query.groups.each do |g|
|
50
|
+
grp << "#{g}:#{r[g]}"
|
51
|
+
end
|
52
|
+
key = "[#{grp.join(', ')}]"
|
53
|
+
value = r[@function]
|
54
|
+
results[key] = {:value => value, :keys => r.dup}
|
55
|
+
results[key][:keys].delete(@function)
|
56
|
+
end
|
57
|
+
results.keys.sort.each do |k|
|
58
|
+
puts "#{k} \t ==> #{@valuefield} = #{results[k][:value]}"
|
59
|
+
end
|
60
|
+
else
|
61
|
+
puts "#{@valuefield} = #{rows.first[@function]}"
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class LogwormHeroku
|
2
|
+
def initialize()
|
3
|
+
c = Logworm::Config.instance
|
4
|
+
if !c.file_found?
|
5
|
+
$stderr.puts "Could not find .logworm file in the current directory with proper keys"
|
6
|
+
exit(-1)
|
7
|
+
end
|
8
|
+
@keys = c.keys
|
9
|
+
end
|
10
|
+
|
11
|
+
def run
|
12
|
+
cmd = "heroku config:add LW_CONSUMER_KEY=\"#{@keys[0]}\" LW_CONSUMER_SECRET=\"#{@keys[1]}\" "
|
13
|
+
cmd << "LW_PROJECT_KEY=\"#{@keys[2]}\" LW_PROJECT_SECRET=\"#{@keys[3]}\""
|
14
|
+
puts "Push configuration keys to Heroku"
|
15
|
+
puts "There was an error --configuration files not pushed" if system(cmd) == false
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
class LogwormTail
|
2
|
+
def initialize(table, options)
|
3
|
+
@table = table
|
4
|
+
@options = options
|
5
|
+
|
6
|
+
begin
|
7
|
+
@db = Logworm::DB.new(false)
|
8
|
+
@query = Logworm::QueryBuilder.new(@options.merge(:force_ts => true))
|
9
|
+
rescue Exception => e
|
10
|
+
$stderr.puts "Error: #{e}"
|
11
|
+
exit(-1)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def run
|
16
|
+
# Create a resource for the query
|
17
|
+
begin
|
18
|
+
query_data = @db.query(@table, @query.to_json)
|
19
|
+
url = query_data["results_uri"]
|
20
|
+
rescue Logworm::DatabaseException, Logworm::ForbiddenAccessException => e
|
21
|
+
$stderr.puts "Error: #{e}"
|
22
|
+
exit(-1)
|
23
|
+
rescue Logworm::InvalidQueryException => e
|
24
|
+
$stderr.puts "#{e}"
|
25
|
+
exit(-1)
|
26
|
+
rescue Exception => e
|
27
|
+
$stderr.puts "Error: #{e}"
|
28
|
+
exit(-1)
|
29
|
+
end
|
30
|
+
|
31
|
+
if @options[:debug]
|
32
|
+
puts "logworm query: #{@query.to_json}"
|
33
|
+
puts "logworm query url: #{query_data["self_uri"]}"
|
34
|
+
puts "logworm results url: #{url}"
|
35
|
+
puts "refresh frequency: #{@options[:frequency]}" if @options[:loop]
|
36
|
+
puts
|
37
|
+
end
|
38
|
+
|
39
|
+
while true do
|
40
|
+
begin
|
41
|
+
last_printed = print_rows(@db.results(url + "?nocache=1")["results"], last_printed || nil)
|
42
|
+
rescue Logworm::DatabaseException, Logworm::ForbiddenAccessException => e
|
43
|
+
$stderr.puts "Error: #{e}"
|
44
|
+
exit(-1)
|
45
|
+
rescue Logworm::InvalidQueryException => e
|
46
|
+
$stderr.puts "#{e}"
|
47
|
+
exit(-1)
|
48
|
+
rescue Exception => e
|
49
|
+
$stderr.puts "Error: #{e}"
|
50
|
+
exit(-1)
|
51
|
+
end
|
52
|
+
exit(0) unless @options[:loop]
|
53
|
+
sleep @options[:frequency]
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
def print_rows(rows, last)
|
60
|
+
last = "" if last.nil?
|
61
|
+
rows.reverse.each do |r|
|
62
|
+
next unless r["_ts"]
|
63
|
+
if r["_ts"] > last
|
64
|
+
last = r["_ts"]
|
65
|
+
r.delete("_id") unless @options[:fields].include?("_id")
|
66
|
+
r.delete("_ts") unless @options[:fields].include?("_ts")
|
67
|
+
puts "#{last.gsub(/T/, ' @ ').gsub(/Z/, ' GMT')} ==> "
|
68
|
+
print_row(r)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
last
|
72
|
+
end
|
73
|
+
|
74
|
+
def print_row(r)
|
75
|
+
if @options[:flat]
|
76
|
+
r.keys.sort.map {|k| "#{k}: #{r[k].inspect}"}.join(', ')
|
77
|
+
else
|
78
|
+
r.keys.sort.each do |k|
|
79
|
+
puts "\t#{k}: #{r[k].inspect}"
|
80
|
+
end
|
81
|
+
puts
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = %q{logworm_client}
|
5
|
+
s.version = "0.3.0"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["Pomelo, LLC"]
|
9
|
+
s.date = %q{2010-03-01}
|
10
|
+
s.description = %q{logworm client utilities}
|
11
|
+
s.email = %q{schapira@pomelollc.com}
|
12
|
+
s.executables = ["lw-compute", "lw-heroku", "lw-tail"]
|
13
|
+
s.extra_rdoc_files = ["CHANGELOG", "README", "bin/lw-compute", "bin/lw-heroku", "bin/lw-tail", "lib/logworm_client.rb", "lib/logworm_client/logger.rb", "lib/logworm_client/rack.rb", "lib/logworm_utils.rb", "lib/logworm_utils/compute.rb", "lib/logworm_utils/heroku.rb", "lib/logworm_utils/tail.rb"]
|
14
|
+
s.files = ["CHANGELOG", "Manifest", "README", "Rakefile", "bin/lw-compute", "bin/lw-heroku", "bin/lw-tail", "lib/logworm_client.rb", "lib/logworm_client/logger.rb", "lib/logworm_client/rack.rb", "lib/logworm_utils.rb", "lib/logworm_utils/compute.rb", "lib/logworm_utils/heroku.rb", "lib/logworm_utils/tail.rb", "logworm_client.gemspec"]
|
15
|
+
s.homepage = %q{http://www.logworm.com}
|
16
|
+
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Logworm_client", "--main", "README"]
|
17
|
+
s.require_paths = ["lib"]
|
18
|
+
s.rubyforge_project = %q{logworm_client}
|
19
|
+
s.rubygems_version = %q{1.3.6}
|
20
|
+
s.summary = %q{logworm client utilities}
|
21
|
+
|
22
|
+
if s.respond_to? :specification_version then
|
23
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
24
|
+
s.specification_version = 3
|
25
|
+
|
26
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
27
|
+
s.add_runtime_dependency(%q<logworm>, [">= 0"])
|
28
|
+
s.add_runtime_dependency(%q<json>, [">= 0"])
|
29
|
+
s.add_development_dependency(%q<logworm>, [">= 0"])
|
30
|
+
s.add_development_dependency(%q<json>, [">= 0"])
|
31
|
+
else
|
32
|
+
s.add_dependency(%q<logworm>, [">= 0"])
|
33
|
+
s.add_dependency(%q<json>, [">= 0"])
|
34
|
+
s.add_dependency(%q<logworm>, [">= 0"])
|
35
|
+
s.add_dependency(%q<json>, [">= 0"])
|
36
|
+
end
|
37
|
+
else
|
38
|
+
s.add_dependency(%q<logworm>, [">= 0"])
|
39
|
+
s.add_dependency(%q<json>, [">= 0"])
|
40
|
+
s.add_dependency(%q<logworm>, [">= 0"])
|
41
|
+
s.add_dependency(%q<json>, [">= 0"])
|
42
|
+
end
|
43
|
+
end
|
metadata
ADDED
@@ -0,0 +1,142 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: logworm_client
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 3
|
8
|
+
- 0
|
9
|
+
version: 0.3.0
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Pomelo, LLC
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-03-01 00:00:00 -05:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: logworm
|
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: json
|
34
|
+
prerelease: false
|
35
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
segments:
|
40
|
+
- 0
|
41
|
+
version: "0"
|
42
|
+
type: :runtime
|
43
|
+
version_requirements: *id002
|
44
|
+
- !ruby/object:Gem::Dependency
|
45
|
+
name: logworm
|
46
|
+
prerelease: false
|
47
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
48
|
+
requirements:
|
49
|
+
- - ">="
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
segments:
|
52
|
+
- 0
|
53
|
+
version: "0"
|
54
|
+
type: :development
|
55
|
+
version_requirements: *id003
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: json
|
58
|
+
prerelease: false
|
59
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
segments:
|
64
|
+
- 0
|
65
|
+
version: "0"
|
66
|
+
type: :development
|
67
|
+
version_requirements: *id004
|
68
|
+
description: logworm client utilities
|
69
|
+
email: schapira@pomelollc.com
|
70
|
+
executables:
|
71
|
+
- lw-compute
|
72
|
+
- lw-heroku
|
73
|
+
- lw-tail
|
74
|
+
extensions: []
|
75
|
+
|
76
|
+
extra_rdoc_files:
|
77
|
+
- CHANGELOG
|
78
|
+
- README
|
79
|
+
- bin/lw-compute
|
80
|
+
- bin/lw-heroku
|
81
|
+
- bin/lw-tail
|
82
|
+
- lib/logworm_client.rb
|
83
|
+
- lib/logworm_client/logger.rb
|
84
|
+
- lib/logworm_client/rack.rb
|
85
|
+
- lib/logworm_utils.rb
|
86
|
+
- lib/logworm_utils/compute.rb
|
87
|
+
- lib/logworm_utils/heroku.rb
|
88
|
+
- lib/logworm_utils/tail.rb
|
89
|
+
files:
|
90
|
+
- CHANGELOG
|
91
|
+
- Manifest
|
92
|
+
- README
|
93
|
+
- Rakefile
|
94
|
+
- bin/lw-compute
|
95
|
+
- bin/lw-heroku
|
96
|
+
- bin/lw-tail
|
97
|
+
- lib/logworm_client.rb
|
98
|
+
- lib/logworm_client/logger.rb
|
99
|
+
- lib/logworm_client/rack.rb
|
100
|
+
- lib/logworm_utils.rb
|
101
|
+
- lib/logworm_utils/compute.rb
|
102
|
+
- lib/logworm_utils/heroku.rb
|
103
|
+
- lib/logworm_utils/tail.rb
|
104
|
+
- logworm_client.gemspec
|
105
|
+
has_rdoc: true
|
106
|
+
homepage: http://www.logworm.com
|
107
|
+
licenses: []
|
108
|
+
|
109
|
+
post_install_message:
|
110
|
+
rdoc_options:
|
111
|
+
- --line-numbers
|
112
|
+
- --inline-source
|
113
|
+
- --title
|
114
|
+
- Logworm_client
|
115
|
+
- --main
|
116
|
+
- README
|
117
|
+
require_paths:
|
118
|
+
- lib
|
119
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - ">="
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
segments:
|
124
|
+
- 0
|
125
|
+
version: "0"
|
126
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - ">="
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
segments:
|
131
|
+
- 1
|
132
|
+
- 2
|
133
|
+
version: "1.2"
|
134
|
+
requirements: []
|
135
|
+
|
136
|
+
rubyforge_project: logworm_client
|
137
|
+
rubygems_version: 1.3.6
|
138
|
+
signing_key:
|
139
|
+
specification_version: 3
|
140
|
+
summary: logworm client utilities
|
141
|
+
test_files: []
|
142
|
+
|