logasm 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +27 -12
- data/lib/logasm/adapters/logstash_adapter.rb +1 -0
- data/lib/logasm/adapters/rabbitmq_adapter/message_builder.rb +22 -0
- data/lib/logasm/adapters/rabbitmq_adapter/publisher.rb +20 -0
- data/lib/logasm/adapters/rabbitmq_adapter.rb +43 -0
- data/lib/logasm/adapters/stdout_adapter.rb +2 -2
- data/lib/logasm/adapters.rb +1 -0
- data/lib/logasm.rb +0 -3
- data/logasm.gemspec +2 -1
- data/spec/adapters/logstash_adapter/formatter_spec.rb +1 -0
- data/spec/adapters/logstash_adapter_spec.rb +1 -0
- data/spec/adapters/rabbitmq_adapter/message_builder_spec.rb +19 -0
- data/spec/adapters/rabbitmq_adapter_spec.rb +39 -0
- data/spec/adapters/stdout_adapter_spec.rb +1 -1
- data/spec/spec_helper.rb +0 -1
- metadata +23 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dc85c64499598712bb88fae7042b01cb73c2f43f
|
4
|
+
data.tar.gz: a31ac1cb0489c75c740d52316a72e968672d83b4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 99904786ff29d235df18e6a3752b55c450893ccb07a27d3add9045752fb4694c9ded0eb4f12c324a697daff0f805e1ff50b77c124158226ec5cacd3574350e0f
|
7
|
+
data.tar.gz: 8fbfe86ee157deb8f2da0b4e1fd8ca352c9e6de499d3ca915a5b763ca2b8ba704bf2935aa68ee19a8dd39c2626fe314c72a7a133b33f8de0d99892d48c13ec15
|
data/Gemfile.lock
CHANGED
@@ -1,15 +1,26 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
logasm (0.
|
4
|
+
logasm (0.2.0)
|
5
5
|
inflecto
|
6
6
|
logstash-event (~> 1.2)
|
7
7
|
|
8
8
|
GEM
|
9
9
|
remote: https://rubygems.org/
|
10
10
|
specs:
|
11
|
+
amq-protocol (2.0.0)
|
12
|
+
atomic (1.1.99)
|
13
|
+
bunny (1.6.3)
|
14
|
+
amq-protocol (>= 1.9.2)
|
11
15
|
coderay (1.1.0)
|
12
16
|
diff-lcs (1.2.5)
|
17
|
+
freddy (0.4.1)
|
18
|
+
bunny (= 1.6.3)
|
19
|
+
hamster (~> 1.0.1.pre.rc3)
|
20
|
+
symbolizer
|
21
|
+
thread (~> 0.2)
|
22
|
+
hamster (1.0.1.pre.rc3)
|
23
|
+
atomic (~> 1.1)
|
13
24
|
inflecto (0.0.2)
|
14
25
|
logstash-event (1.2.02)
|
15
26
|
method_source (0.8.2)
|
@@ -18,25 +29,29 @@ GEM
|
|
18
29
|
method_source (~> 0.8.1)
|
19
30
|
slop (~> 3.4)
|
20
31
|
rake (10.3.2)
|
21
|
-
rspec (3.
|
22
|
-
rspec-core (~> 3.
|
23
|
-
rspec-expectations (~> 3.
|
24
|
-
rspec-mocks (~> 3.
|
25
|
-
rspec-core (3.
|
26
|
-
rspec-support (~> 3.
|
27
|
-
rspec-expectations (3.1
|
32
|
+
rspec (3.3.0)
|
33
|
+
rspec-core (~> 3.3.0)
|
34
|
+
rspec-expectations (~> 3.3.0)
|
35
|
+
rspec-mocks (~> 3.3.0)
|
36
|
+
rspec-core (3.3.2)
|
37
|
+
rspec-support (~> 3.3.0)
|
38
|
+
rspec-expectations (3.3.1)
|
28
39
|
diff-lcs (>= 1.2.0, < 2.0)
|
29
|
-
rspec-support (~> 3.
|
30
|
-
rspec-mocks (3.
|
31
|
-
|
32
|
-
|
40
|
+
rspec-support (~> 3.3.0)
|
41
|
+
rspec-mocks (3.3.2)
|
42
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
43
|
+
rspec-support (~> 3.3.0)
|
44
|
+
rspec-support (3.3.0)
|
33
45
|
slop (3.6.0)
|
46
|
+
symbolizer (0.0.1)
|
47
|
+
thread (0.2.2)
|
34
48
|
|
35
49
|
PLATFORMS
|
36
50
|
ruby
|
37
51
|
|
38
52
|
DEPENDENCIES
|
39
53
|
bundler (~> 1.3)
|
54
|
+
freddy (~> 0.4.1)
|
40
55
|
logasm!
|
41
56
|
pry
|
42
57
|
rake
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'socket'
|
2
|
+
|
3
|
+
class Logasm
|
4
|
+
module Adapters
|
5
|
+
class RabbitmqAdapter
|
6
|
+
class MessageBuilder
|
7
|
+
HOST = ::Socket.gethostname
|
8
|
+
|
9
|
+
def initialize(service_name)
|
10
|
+
@service_name = service_name
|
11
|
+
end
|
12
|
+
|
13
|
+
def build_message(metadata, level)
|
14
|
+
metadata.merge({ application: @service_name,
|
15
|
+
level: level,
|
16
|
+
host: HOST,
|
17
|
+
:@timestamp => Time.now.utc.iso8601(3) })
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'bunny'
|
2
|
+
|
3
|
+
class Logasm
|
4
|
+
module Adapters
|
5
|
+
class RabbitmqAdapter
|
6
|
+
class Publisher
|
7
|
+
def initialize(queue, config)
|
8
|
+
connection = Bunny.new("amqp://#{config[:user]}:#{config[:pass]}@#{config[:host]}:#{config[:port]}")
|
9
|
+
connection.start
|
10
|
+
@exchange = connection.create_channel.default_exchange
|
11
|
+
@queue = queue
|
12
|
+
end
|
13
|
+
|
14
|
+
def publish(message)
|
15
|
+
@exchange.publish(message.to_json, :routing_key => @queue)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
begin
|
2
|
+
require 'freddy'
|
3
|
+
rescue LoadError => e
|
4
|
+
raise unless e.message =~ /freddy/
|
5
|
+
exception = e.exception('To use RabbitMQ adapter for logging, please install freddy!')
|
6
|
+
exception.set_backtrace(e.backtrace)
|
7
|
+
raise exception
|
8
|
+
end
|
9
|
+
|
10
|
+
require_relative 'rabbitmq_adapter/message_builder'
|
11
|
+
|
12
|
+
class Logasm
|
13
|
+
module Adapters
|
14
|
+
class RabbitmqAdapter
|
15
|
+
attr_reader :publisher
|
16
|
+
|
17
|
+
CONFIGURATION_KEYS = [:host, :user, :pass, :port]
|
18
|
+
|
19
|
+
def initialize(level, service, arguments = {})
|
20
|
+
config = arguments.select { |key, value| CONFIGURATION_KEYS.include?(key) }
|
21
|
+
logger = Logger.new(STDOUT)
|
22
|
+
@queue = arguments.fetch(:queue, 'logstash-queue')
|
23
|
+
@level = level
|
24
|
+
|
25
|
+
@message_builder = MessageBuilder.new(service)
|
26
|
+
@freddy = Freddy.build(logger, config)
|
27
|
+
end
|
28
|
+
|
29
|
+
def log(level, metadata = {})
|
30
|
+
if meets_threshold?(level)
|
31
|
+
message = @message_builder.build_message metadata, level
|
32
|
+
@freddy.deliver @queue, metadata
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def meets_threshold?(level)
|
39
|
+
LOG_LEVELS.index(level.to_s) >= @level
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -10,8 +10,8 @@ class Logasm
|
|
10
10
|
|
11
11
|
def log(level, metadata = {})
|
12
12
|
message = metadata[:message]
|
13
|
-
metadata.
|
14
|
-
log_data = [message,
|
13
|
+
data = metadata.select { |key, value| key != :message }
|
14
|
+
log_data = [message, data.empty? ? nil : data.to_json].compact.join(' ')
|
15
15
|
|
16
16
|
@logger.public_send level, log_data
|
17
17
|
end
|
data/lib/logasm/adapters.rb
CHANGED
@@ -3,6 +3,7 @@ class Logasm
|
|
3
3
|
LOG_LEVELS = %w(debug info warn error fatal unknown).freeze
|
4
4
|
|
5
5
|
def self.get(type, service_name, arguments)
|
6
|
+
require_relative "adapters/#{type.to_s}_adapter"
|
6
7
|
adapter = const_get(Inflecto.camelize(type.to_s) + 'Adapter')
|
7
8
|
level = LOG_LEVELS.index(arguments.fetch(:level, 'debug'))
|
8
9
|
adapter.new(level, service_name, arguments)
|
data/lib/logasm.rb
CHANGED
@@ -1,9 +1,6 @@
|
|
1
1
|
require 'inflecto'
|
2
2
|
require 'logger'
|
3
3
|
require_relative 'logasm/adapters'
|
4
|
-
require_relative 'logasm/adapters/stdout_adapter'
|
5
|
-
require_relative 'logasm/adapters/logstash_adapter'
|
6
|
-
require_relative 'logasm/adapters/logstash_adapter/formatter'
|
7
4
|
|
8
5
|
class Logasm
|
9
6
|
def self.build(service_name, loggers_config)
|
data/logasm.gemspec
CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |gem|
|
6
6
|
gem.name = "logasm"
|
7
|
-
gem.version = '0.
|
7
|
+
gem.version = '0.2.0'
|
8
8
|
gem.authors = ["Salemove"]
|
9
9
|
gem.email = ["support@salemove.com"]
|
10
10
|
gem.description = %q{It's logasmic}
|
@@ -21,4 +21,5 @@ Gem::Specification.new do |gem|
|
|
21
21
|
|
22
22
|
gem.add_development_dependency "bundler", "~> 1.3"
|
23
23
|
gem.add_development_dependency "rake"
|
24
|
+
gem.add_development_dependency "freddy", "~> 0.4.1"
|
24
25
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require_relative '../../../lib/logasm/adapters/rabbitmq_adapter/message_builder'
|
3
|
+
|
4
|
+
describe Logasm::Adapters::RabbitmqAdapter::MessageBuilder do
|
5
|
+
subject { message_builder.build_message(metadata, level) }
|
6
|
+
|
7
|
+
let(:message_builder) { described_class.new(service_name) }
|
8
|
+
let(:service_name) { 'test_service' }
|
9
|
+
let(:level) { :info }
|
10
|
+
let(:metadata) { {message: 'test'} }
|
11
|
+
|
12
|
+
it 'adds necessary arguments' do
|
13
|
+
expect(subject[:message]).to eq(metadata[:message])
|
14
|
+
expect(subject[:application]).to eq(service_name)
|
15
|
+
expect(subject[:level]).to eq(level)
|
16
|
+
expect(subject).to have_key(:host)
|
17
|
+
expect(subject).to have_key(:@timestamp)
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require_relative '../../lib/logasm/adapters/rabbitmq_adapter'
|
3
|
+
|
4
|
+
describe Logasm::Adapters::RabbitmqAdapter do
|
5
|
+
let(:publisher) { adapter.publisher }
|
6
|
+
|
7
|
+
before do
|
8
|
+
Logasm::Adapters::RabbitmqAdapter::Publisher.any_instance.stub(:initialize).and_return(double)
|
9
|
+
end
|
10
|
+
|
11
|
+
describe '#log' do
|
12
|
+
context 'when logging a message' do
|
13
|
+
let(:adapter) { described_class.new(0, nil, { host: 'localhost',
|
14
|
+
user: 'guest',
|
15
|
+
pass: 'guest',
|
16
|
+
port: '5672' }
|
17
|
+
) }
|
18
|
+
|
19
|
+
it 'delegates to publisher' do
|
20
|
+
expect(publisher).to receive(:publish)
|
21
|
+
|
22
|
+
adapter.log :info, message: 'test'
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
context 'when log level is lower than threshold' do
|
27
|
+
let(:adapter) { described_class.new(3, nil, { host: 'localhost',
|
28
|
+
user: 'guest',
|
29
|
+
pass: 'guest',
|
30
|
+
port: '5672' }
|
31
|
+
) }
|
32
|
+
|
33
|
+
it 'does not delegate to freddy' do
|
34
|
+
expect(publisher).not_to receive(:publish)
|
35
|
+
adapter.log :info, message: 'test'
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logasm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Salemove
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-08-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: logstash-event
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: freddy
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 0.4.1
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 0.4.1
|
69
83
|
description: It's logasmic
|
70
84
|
email:
|
71
85
|
- support@salemove.com
|
@@ -85,10 +99,15 @@ files:
|
|
85
99
|
- lib/logasm/adapters.rb
|
86
100
|
- lib/logasm/adapters/logstash_adapter.rb
|
87
101
|
- lib/logasm/adapters/logstash_adapter/formatter.rb
|
102
|
+
- lib/logasm/adapters/rabbitmq_adapter.rb
|
103
|
+
- lib/logasm/adapters/rabbitmq_adapter/message_builder.rb
|
104
|
+
- lib/logasm/adapters/rabbitmq_adapter/publisher.rb
|
88
105
|
- lib/logasm/adapters/stdout_adapter.rb
|
89
106
|
- logasm.gemspec
|
90
107
|
- spec/adapters/logstash_adapter/formatter_spec.rb
|
91
108
|
- spec/adapters/logstash_adapter_spec.rb
|
109
|
+
- spec/adapters/rabbitmq_adapter/message_builder_spec.rb
|
110
|
+
- spec/adapters/rabbitmq_adapter_spec.rb
|
92
111
|
- spec/adapters/stdout_adapter_spec.rb
|
93
112
|
- spec/logasm_spec.rb
|
94
113
|
- spec/spec_helper.rb
|
@@ -119,6 +138,8 @@ summary: What description said
|
|
119
138
|
test_files:
|
120
139
|
- spec/adapters/logstash_adapter/formatter_spec.rb
|
121
140
|
- spec/adapters/logstash_adapter_spec.rb
|
141
|
+
- spec/adapters/rabbitmq_adapter/message_builder_spec.rb
|
142
|
+
- spec/adapters/rabbitmq_adapter_spec.rb
|
122
143
|
- spec/adapters/stdout_adapter_spec.rb
|
123
144
|
- spec/logasm_spec.rb
|
124
145
|
- spec/spec_helper.rb
|