cloud-logger2 0.0.1 → 0.0.3
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.
- checksums.yaml +4 -4
- data/.document +5 -0
- data/.rspec +1 -0
- data/Gemfile +1 -0
- data/Rakefile +50 -0
- data/cloud-logger2.gemspec +14 -6
- data/lib/{cloud-logger2.rb → cloud-logger.rb} +1 -0
- data/lib/event.rb +1 -1
- data/lib/loggly.rb +5 -4
- data/lib/papertrail.rb +23 -0
- data/spec/event_spec.rb +34 -0
- data/spec/loggly_spec.rb +109 -0
- data/spec/papertrail_spec.rb +58 -0
- data/spec/spec_helper.rb +13 -0
- metadata +12 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 976c4cb162d82558b1e733859f16094bee2c01d3
|
4
|
+
data.tar.gz: 124b186464edd742265257f84dcab48cd5328196
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 286b0d4a82f885b10d04ff58d791553ef7c0e21b352720f79a2e01a2708f5995d98538bb56b8893f2b8c370273b43244eaea855af07c7ad0e628cc63a20bc601
|
7
|
+
data.tar.gz: ab21716ab5eca9a88deaed57b3929a1457eff21950d65f8949361ed33f8f07c1d1130bdcef9fbbb836cb3fb68d27746a0509aebc2311ff6f77a05010845b1557
|
data/.document
ADDED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/Gemfile
CHANGED
data/Rakefile
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'bundler'
|
5
|
+
begin
|
6
|
+
Bundler.setup(:default, :development)
|
7
|
+
rescue Bundler::BundlerError => e
|
8
|
+
$stderr.puts e.message
|
9
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
10
|
+
exit e.status_code
|
11
|
+
end
|
12
|
+
require 'rake'
|
13
|
+
|
14
|
+
require 'jeweler'
|
15
|
+
Jeweler::Tasks.new do |gem|
|
16
|
+
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
17
|
+
gem.name = "cloud-logger2"
|
18
|
+
gem.homepage = "http://github.com/ryan-mitchell/cloud-logger"
|
19
|
+
gem.license = "MIT"
|
20
|
+
gem.summary = "Simple Ruby interface to cloud logging services such as Loggly and Papertrail"
|
21
|
+
gem.description ="A simple Ruby interface to the APIs of various cloud logging services"
|
22
|
+
gem.email = "nadams@lynchmarks.com"
|
23
|
+
gem.authors = ["Ryan Mitchell"]
|
24
|
+
gem.version = "0.0.3"
|
25
|
+
# dependencies defined in Gemfile
|
26
|
+
end
|
27
|
+
Jeweler::RubygemsDotOrgTasks.new
|
28
|
+
|
29
|
+
require 'rspec/core'
|
30
|
+
require 'rspec/core/rake_task'
|
31
|
+
RSpec::Core::RakeTask.new(:spec) do |spec|
|
32
|
+
spec.pattern = FileList['spec/**/*_spec.rb']
|
33
|
+
end
|
34
|
+
|
35
|
+
RSpec::Core::RakeTask.new(:rcov) do |spec|
|
36
|
+
spec.pattern = 'spec/**/*_spec.rb'
|
37
|
+
spec.rcov = true
|
38
|
+
end
|
39
|
+
|
40
|
+
task :default => :spec
|
41
|
+
|
42
|
+
require 'rake/rdoctask'
|
43
|
+
Rake::RDocTask.new do |rdoc|
|
44
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
45
|
+
|
46
|
+
rdoc.rdoc_dir = 'rdoc'
|
47
|
+
rdoc.title = "cloud-logger2 #{version}"
|
48
|
+
rdoc.rdoc_files.include('README*')
|
49
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
50
|
+
end
|
data/cloud-logger2.gemspec
CHANGED
@@ -5,26 +5,34 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "cloud-logger2"
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.3"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Ryan Mitchell"]
|
12
12
|
s.date = "2011-09-22"
|
13
13
|
s.description = "A simple Ruby interface to the APIs of various cloud logging services"
|
14
|
-
s.email = "
|
14
|
+
s.email = "nadams@lynchmarks.com"
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"LICENSE.txt",
|
17
17
|
"README.rdoc"
|
18
18
|
]
|
19
19
|
s.files = [
|
20
|
+
".document",
|
21
|
+
".rspec",
|
20
22
|
"Gemfile",
|
21
23
|
"LICENSE.txt",
|
22
24
|
"README.rdoc",
|
25
|
+
"Rakefile",
|
23
26
|
"cloud-logger2.gemspec",
|
24
27
|
"lib/base.rb",
|
25
|
-
"lib/cloud-
|
28
|
+
"lib/cloud-logger.rb",
|
26
29
|
"lib/event.rb",
|
27
30
|
"lib/loggly.rb",
|
31
|
+
"lib/papertrail.rb",
|
32
|
+
"spec/event_spec.rb",
|
33
|
+
"spec/loggly_spec.rb",
|
34
|
+
"spec/papertrail_spec.rb",
|
35
|
+
"spec/spec_helper.rb"
|
28
36
|
]
|
29
37
|
s.homepage = "http://github.com/ryan-mitchell/cloud-logger"
|
30
38
|
s.licenses = ["MIT"]
|
@@ -40,20 +48,20 @@ Gem::Specification.new do |s|
|
|
40
48
|
s.add_development_dependency(%q<rspec>, ["> 2.3.0"])
|
41
49
|
s.add_development_dependency(%q<bundler>, ["> 1.0.0"])
|
42
50
|
s.add_development_dependency(%q<jeweler>, [">= 1.6.4"])
|
43
|
-
s.add_development_dependency(%q<
|
51
|
+
s.add_development_dependency(%q<simplecov>, [">= 0"])
|
44
52
|
else
|
45
53
|
s.add_dependency(%q<rest-client>, [">= 1.6.3"])
|
46
54
|
s.add_dependency(%q<rspec>, ["> 2.3.0"])
|
47
55
|
s.add_dependency(%q<bundler>, ["> 1.0.0"])
|
48
56
|
s.add_dependency(%q<jeweler>, [">= 1.6.4"])
|
49
|
-
s.add_dependency(%q<
|
57
|
+
s.add_dependency(%q<simplecov>, [">= 0"])
|
50
58
|
end
|
51
59
|
else
|
52
60
|
s.add_dependency(%q<rest-client>, [">= 1.6.3"])
|
53
61
|
s.add_dependency(%q<rspec>, ["> 2.3.0"])
|
54
62
|
s.add_dependency(%q<bundler>, ["> 1.0.0"])
|
55
63
|
s.add_dependency(%q<jeweler>, [">= 1.6.4"])
|
56
|
-
s.add_dependency(%q<
|
64
|
+
s.add_dependency(%q<simplecov>, [">= 0"])
|
57
65
|
end
|
58
66
|
end
|
59
67
|
|
data/lib/event.rb
CHANGED
data/lib/loggly.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
|
1
|
+
|
2
|
+
module CloudLogger
|
2
3
|
|
3
4
|
class Loggly < Base
|
4
5
|
|
@@ -19,12 +20,12 @@ module Cloudlogger2
|
|
19
20
|
end
|
20
21
|
|
21
22
|
def search(query)
|
22
|
-
raw_response = RestClient.get("https://#{@user}:#{@pass}@#{@subdomain}.loggly.com/
|
23
|
+
raw_response = RestClient.get("https://#{@user}:#{@pass}@#{@subdomain}.loggly.com/api/search", {:params => {:q => query}})
|
23
24
|
result = JSON.parse(raw_response)['data'].map do |log_entry|
|
24
|
-
|
25
|
+
CloudLogger::Event.new(log_entry['text'], log_entry['timestamp'])
|
25
26
|
end
|
26
27
|
yield result if block_given?
|
27
28
|
result
|
28
29
|
end
|
29
30
|
end
|
30
|
-
end
|
31
|
+
end
|
data/lib/papertrail.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
module CloudLogger
|
2
|
+
|
3
|
+
class Papertrail < Base
|
4
|
+
|
5
|
+
def initialize(options)
|
6
|
+
@user = options[:user]
|
7
|
+
@pass = options[:pass]
|
8
|
+
end
|
9
|
+
|
10
|
+
def log(message)
|
11
|
+
raise "sending logs is not supported for the Papertrail driver"
|
12
|
+
end
|
13
|
+
|
14
|
+
def search(query)
|
15
|
+
raw_response = RestClient.get("https://#{@user}:#{@pass}@papertrailapp.com/api/vi/events/search.json", {:params => {:q => query}})
|
16
|
+
result = JSON.parse(raw_response)['events'].map do |log_entry|
|
17
|
+
CloudLogger::Event.new(log_entry['message'], log_entry['received_at'])
|
18
|
+
end
|
19
|
+
yield result if block_given?
|
20
|
+
result
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/spec/event_spec.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe CloudLogger::Event do
|
4
|
+
|
5
|
+
it "should construct a valid event from a DateTime instance" do
|
6
|
+
time = DateTime.now
|
7
|
+
event = CloudLogger::Event.new('test', time)
|
8
|
+
event.timestamp.should be_instance_of DateTime
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should construct a valid event from a Time instance" do
|
12
|
+
time = Time.now
|
13
|
+
event = CloudLogger::Event.new('test', time)
|
14
|
+
event.timestamp.should be_instance_of DateTime
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should construct a valid event from a Date instance" do
|
18
|
+
time = Date.today
|
19
|
+
event = CloudLogger::Event.new('test', time)
|
20
|
+
event.timestamp.should be_instance_of DateTime
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should construct a valid event from a string representation of a date" do
|
24
|
+
time = "2011-09-21T18:48:55.151Z"
|
25
|
+
event = CloudLogger::Event.new('test', time)
|
26
|
+
event.timestamp.should be_instance_of DateTime
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should construct a valid event from a Unix timestamp" do
|
30
|
+
time = 1316645975
|
31
|
+
event = CloudLogger::Event.new('test', time)
|
32
|
+
event.timestamp.should be_instance_of DateTime
|
33
|
+
end
|
34
|
+
end
|
data/spec/loggly_spec.rb
ADDED
@@ -0,0 +1,109 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe CloudLogger::Loggly do
|
4
|
+
|
5
|
+
before(:all) do
|
6
|
+
@test_subdomain = 'example'
|
7
|
+
@test_user = 'user'
|
8
|
+
@test_pass = 'pass'
|
9
|
+
@test_key = '123456'
|
10
|
+
@loggly = CloudLogger::Loggly.new(
|
11
|
+
:subdomain => @test_subdomain,
|
12
|
+
:user => @test_user,
|
13
|
+
:pass => @test_pass,
|
14
|
+
:key => @test_key
|
15
|
+
)
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "#search" do
|
19
|
+
|
20
|
+
before(:each) do
|
21
|
+
RestClient.stub!(:get)
|
22
|
+
Kernel.stub!(:print)
|
23
|
+
@test_response = JSON.generate({ :data => [ { :timestamp => "2011-09-21T18:48:55.151Z", :text => "Test Data" } ] })
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should generate an appropriate RestClient GET" do
|
28
|
+
|
29
|
+
search_string = "search string"
|
30
|
+
RestClient.should_receive(:get).with(
|
31
|
+
"https://#{@test_user}:#{@test_pass}@#{@test_subdomain}.loggly.com/api/search",
|
32
|
+
{:params => {:q => search_string}}
|
33
|
+
).and_return(@test_response)
|
34
|
+
@loggly.search(search_string)
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should convert the returned text to a CloudLogger::Event" do
|
38
|
+
RestClient.should_receive(:get).and_return(@test_response)
|
39
|
+
@loggly.search("Test Data") do |data|
|
40
|
+
data.first.should be_instance_of CloudLogger::Event
|
41
|
+
data.first.text.should == "Test Data"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should execute the callback if one is provided" do
|
46
|
+
|
47
|
+
Kernel.should_receive(:print).with an_instance_of Array
|
48
|
+
RestClient.should_receive(:get).and_return(@test_response)
|
49
|
+
|
50
|
+
@loggly.search('anything') do |data|
|
51
|
+
Kernel.print data
|
52
|
+
data.first.should be_instance_of CloudLogger::Event
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should return the response if no callback is provided" do
|
57
|
+
|
58
|
+
RestClient.should_receive(:get).and_return(@test_response)
|
59
|
+
@loggly.search('anything').should_not be_nil
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
describe "#log" do
|
64
|
+
|
65
|
+
before(:each) do
|
66
|
+
RestClient.stub!(:post)
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should generate an appropriate RestClient POST with a raw payload" do
|
70
|
+
|
71
|
+
log_string = "this is a test log"
|
72
|
+
RestClient.should_receive(:post).with(
|
73
|
+
"https://logs.loggly.com/inputs/%s" % @test_key,
|
74
|
+
log_string
|
75
|
+
)
|
76
|
+
|
77
|
+
@loggly.log(log_string)
|
78
|
+
end
|
79
|
+
|
80
|
+
it "should generate an appropriate RestClient POST with parameters" do
|
81
|
+
|
82
|
+
log_parameters = { :time => 123456, :type => 'foo', :logger => 'bar' }
|
83
|
+
RestClient.should_receive(:post).with(
|
84
|
+
"https://logs.loggly.com/inputs/%s" % @test_key,
|
85
|
+
log_parameters
|
86
|
+
)
|
87
|
+
|
88
|
+
@loggly.log(log_parameters)
|
89
|
+
end
|
90
|
+
|
91
|
+
it "should use the EC2 host if the EC2 flag is set" do
|
92
|
+
|
93
|
+
log_string = "this is a test log"
|
94
|
+
ec2logger = CloudLogger::Loggly.new(
|
95
|
+
:subdomain => @test_subdomain,
|
96
|
+
:user => @test_user,
|
97
|
+
:pass => @test_pass,
|
98
|
+
:key => @test_key,
|
99
|
+
:ec2 => true
|
100
|
+
)
|
101
|
+
RestClient.should_receive(:post).with(
|
102
|
+
"https://ec2.logs.loggly.com/inputs/%s" % @test_key,
|
103
|
+
log_string
|
104
|
+
)
|
105
|
+
|
106
|
+
ec2logger.log(log_string)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe CloudLogger::Papertrail do
|
4
|
+
|
5
|
+
before(:all) do
|
6
|
+
@test_user = 'user'
|
7
|
+
@test_pass = 'pass'
|
8
|
+
@logger = CloudLogger::Papertrail.new(
|
9
|
+
:user => @test_user,
|
10
|
+
:pass => @test_pass,
|
11
|
+
)
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "#search" do
|
15
|
+
|
16
|
+
before(:each) do
|
17
|
+
RestClient.stub!(:get)
|
18
|
+
Kernel.stub!(:print)
|
19
|
+
@test_response = JSON.generate({ :events => [ { :received_at => "2011-09-21T18:48:55.15-07:00", :message => "Test Data" } ] })
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should generate an appropriate RestClient GET" do
|
24
|
+
|
25
|
+
search_string = "search string"
|
26
|
+
RestClient.should_receive(:get).with(
|
27
|
+
"https://#{@test_user}:#{@test_pass}@papertrailapp.com/api/vi/events/search.json",
|
28
|
+
{:params => {:q => search_string}}
|
29
|
+
).and_return(@test_response)
|
30
|
+
@logger.search(search_string)
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should convert the returned text to a CloudLogger::Event" do
|
34
|
+
RestClient.should_receive(:get).and_return(@test_response)
|
35
|
+
@logger.search("Test Data") do |data|
|
36
|
+
data.first.should be_instance_of CloudLogger::Event
|
37
|
+
data.first.text.should == "Test Data"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should execute the callback if one is provided" do
|
42
|
+
|
43
|
+
Kernel.should_receive(:print).with an_instance_of Array
|
44
|
+
RestClient.should_receive(:get).and_return(@test_response)
|
45
|
+
|
46
|
+
@logger.search('anything') do |data|
|
47
|
+
Kernel.print data
|
48
|
+
data.first.should be_instance_of CloudLogger::Event
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should return the response if no callback is provided" do
|
53
|
+
|
54
|
+
RestClient.should_receive(:get).and_return(@test_response)
|
55
|
+
@logger.search('anything').should_not be_nil
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
3
|
+
require 'rspec'
|
4
|
+
require 'cloud-logger'
|
5
|
+
require 'json'
|
6
|
+
|
7
|
+
# Requires supporting files with custom matchers and macros, etc,
|
8
|
+
# in ./support/ and its subdirectories.
|
9
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
10
|
+
|
11
|
+
RSpec.configure do |config|
|
12
|
+
|
13
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cloud-logger2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Mitchell
|
@@ -67,7 +67,7 @@ dependencies:
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 1.6.4
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: simplecov
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - ">="
|
@@ -81,21 +81,29 @@ dependencies:
|
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
description: A simple Ruby interface to the APIs of various cloud logging services
|
84
|
-
email:
|
84
|
+
email: nadams@lynchmarks.com
|
85
85
|
executables: []
|
86
86
|
extensions: []
|
87
87
|
extra_rdoc_files:
|
88
88
|
- LICENSE.txt
|
89
89
|
- README.rdoc
|
90
90
|
files:
|
91
|
+
- ".document"
|
92
|
+
- ".rspec"
|
91
93
|
- Gemfile
|
92
94
|
- LICENSE.txt
|
93
95
|
- README.rdoc
|
96
|
+
- Rakefile
|
94
97
|
- cloud-logger2.gemspec
|
95
98
|
- lib/base.rb
|
96
|
-
- lib/cloud-
|
99
|
+
- lib/cloud-logger.rb
|
97
100
|
- lib/event.rb
|
98
101
|
- lib/loggly.rb
|
102
|
+
- lib/papertrail.rb
|
103
|
+
- spec/event_spec.rb
|
104
|
+
- spec/loggly_spec.rb
|
105
|
+
- spec/papertrail_spec.rb
|
106
|
+
- spec/spec_helper.rb
|
99
107
|
homepage: http://github.com/ryan-mitchell/cloud-logger
|
100
108
|
licenses:
|
101
109
|
- MIT
|