logasm 0.2.1 → 0.2.2
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/Gemfile.lock +15 -3
- data/lib/logasm/adapters/logstash_adapter/formatter.rb +2 -21
- data/lib/logasm/adapters/logstash_adapter.rb +0 -1
- data/lib/logasm/adapters/rabbitmq_adapter.rb +3 -5
- data/lib/logasm/utils.rb +35 -0
- data/lib/logasm.rb +2 -0
- data/logasm.gemspec +1 -2
- data/spec/adapters/logstash_adapter/formatter_spec.rb +12 -30
- data/spec/adapters/rabbitmq_adapter_spec.rb +19 -7
- data/spec/spec_helper.rb +9 -5
- data/spec/support/freddy_mock.rb +11 -0
- data/spec/utils_spec.rb +37 -0
- metadata +8 -20
- data/lib/logasm/adapters/rabbitmq_adapter/message_builder.rb +0 -22
- data/spec/adapters/rabbitmq_adapter/message_builder_spec.rb +0 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 95ef4c8dd10a76b6775e23d3ed9788b8fd0c566e
|
4
|
+
data.tar.gz: c42a97f69f78953749d22008b8dd8dadab680ba8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 71b8cd77787497193c97508a269c0d538c3fd2a38a8940eaff94174f5918222ff3d59ec8f1fbb1cd7b1f7c90f1147ea08e776762f5919a1eeb20f005b74cd460
|
7
|
+
data.tar.gz: a766efc45eff5765e72353fc49c6680f31722e3bd81d710ceb0f64ef130901c8823349b6556f0bba3e33b07806e69cde3dd842937a621522b78d56af84961029
|
data/Gemfile.lock
CHANGED
@@ -1,17 +1,26 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
logasm (0.2.
|
4
|
+
logasm (0.2.2)
|
5
5
|
inflecto
|
6
|
-
logstash-event (~> 1.2)
|
7
6
|
|
8
7
|
GEM
|
9
8
|
remote: https://rubygems.org/
|
10
9
|
specs:
|
10
|
+
amq-protocol (2.0.0)
|
11
|
+
atomic (1.1.99)
|
12
|
+
bunny (1.6.3)
|
13
|
+
amq-protocol (>= 1.9.2)
|
11
14
|
coderay (1.1.0)
|
12
15
|
diff-lcs (1.2.5)
|
16
|
+
freddy (0.4.1)
|
17
|
+
bunny (= 1.6.3)
|
18
|
+
hamster (~> 1.0.1.pre.rc3)
|
19
|
+
symbolizer
|
20
|
+
thread (~> 0.2)
|
21
|
+
hamster (1.0.1.pre.rc3)
|
22
|
+
atomic (~> 1.1)
|
13
23
|
inflecto (0.0.2)
|
14
|
-
logstash-event (1.2.02)
|
15
24
|
method_source (0.8.2)
|
16
25
|
pry (0.10.1)
|
17
26
|
coderay (~> 1.1.0)
|
@@ -32,12 +41,15 @@ GEM
|
|
32
41
|
rspec-support (~> 3.3.0)
|
33
42
|
rspec-support (3.3.0)
|
34
43
|
slop (3.6.0)
|
44
|
+
symbolizer (0.0.1)
|
45
|
+
thread (0.2.2)
|
35
46
|
|
36
47
|
PLATFORMS
|
37
48
|
ruby
|
38
49
|
|
39
50
|
DEPENDENCIES
|
40
51
|
bundler (~> 1.3)
|
52
|
+
freddy (~> 0.4.1)
|
41
53
|
logasm!
|
42
54
|
pry
|
43
55
|
rake
|
@@ -2,33 +2,14 @@ class Logasm
|
|
2
2
|
module Adapters
|
3
3
|
class LogstashAdapter
|
4
4
|
class Formatter < ::Logger::Formatter
|
5
|
-
HOST = ::Socket.gethostname
|
6
|
-
|
7
5
|
def initialize(service_name)
|
8
6
|
@service_name = service_name
|
9
7
|
end
|
10
8
|
|
11
|
-
def call(
|
12
|
-
event = build_event(message,
|
9
|
+
def call(level, _time, _progname, message)
|
10
|
+
event = Utils.build_event(message, level, @service_name)
|
13
11
|
"#{event.to_json}\n"
|
14
12
|
end
|
15
|
-
|
16
|
-
private
|
17
|
-
|
18
|
-
def build_event(metadata, level, time)
|
19
|
-
event = LogStash::Event.new(metadata.merge("@timestamp" => time))
|
20
|
-
|
21
|
-
event['application'] = @service_name if @service_name
|
22
|
-
event['level'] = level.downcase
|
23
|
-
event['host'] ||= HOST
|
24
|
-
|
25
|
-
# In case Time#to_json has been overridden
|
26
|
-
if event.timestamp.is_a?(Time)
|
27
|
-
event.timestamp = event.timestamp.iso8601(3)
|
28
|
-
end
|
29
|
-
|
30
|
-
event
|
31
|
-
end
|
32
13
|
end
|
33
14
|
end
|
34
15
|
end
|
@@ -7,8 +7,6 @@ rescue LoadError => e
|
|
7
7
|
raise exception
|
8
8
|
end
|
9
9
|
|
10
|
-
require_relative 'rabbitmq_adapter/message_builder'
|
11
|
-
|
12
10
|
class Logasm
|
13
11
|
module Adapters
|
14
12
|
class RabbitmqAdapter
|
@@ -16,18 +14,18 @@ class Logasm
|
|
16
14
|
|
17
15
|
CONFIGURATION_KEYS = [:host, :user, :pass, :port]
|
18
16
|
|
19
|
-
def initialize(level,
|
17
|
+
def initialize(level, service_name, arguments = {})
|
20
18
|
config = arguments.select { |key, value| CONFIGURATION_KEYS.include?(key) }
|
21
19
|
logger = Logger.new(STDOUT)
|
22
20
|
@queue = arguments.fetch(:queue, 'logstash-queue')
|
23
21
|
@level = level
|
24
|
-
@
|
22
|
+
@service_name = service_name
|
25
23
|
@freddy = Freddy.build(logger, config.merge({recover_from_connection_close: true}))
|
26
24
|
end
|
27
25
|
|
28
26
|
def log(level, metadata = {})
|
29
27
|
if meets_threshold?(level)
|
30
|
-
message =
|
28
|
+
message = Utils.build_event(metadata, level, @service_name)
|
31
29
|
deliver_message message
|
32
30
|
end
|
33
31
|
end
|
data/lib/logasm/utils.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'socket'
|
2
|
+
|
3
|
+
class Logasm
|
4
|
+
module Utils
|
5
|
+
HOST = ::Socket.gethostname
|
6
|
+
|
7
|
+
# Build logstash json compatible event
|
8
|
+
#
|
9
|
+
# @param [Hash] metadata
|
10
|
+
# @param [#to_s] level
|
11
|
+
# @param [String] service_name
|
12
|
+
#
|
13
|
+
# @return [Hash]
|
14
|
+
def self.build_event(metadata, level, service_name)
|
15
|
+
metadata.merge(
|
16
|
+
application: application_name(service_name),
|
17
|
+
level: level.to_s.downcase,
|
18
|
+
host: HOST,
|
19
|
+
:@timestamp => Time.now.utc.iso8601(3)
|
20
|
+
)
|
21
|
+
end
|
22
|
+
|
23
|
+
# Return application name
|
24
|
+
#
|
25
|
+
# Returns lower snake case application name. This allows the
|
26
|
+
# application value to be used in the elasticsearch index name.
|
27
|
+
#
|
28
|
+
# @param [String] service_name
|
29
|
+
#
|
30
|
+
# @return [String]
|
31
|
+
def self.application_name(service_name)
|
32
|
+
Inflecto.underscore(service_name)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/lib/logasm.rb
CHANGED
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.2.
|
7
|
+
gem.version = '0.2.2'
|
8
8
|
gem.authors = ["Salemove"]
|
9
9
|
gem.email = ["support@salemove.com"]
|
10
10
|
gem.description = %q{It's logasmic}
|
@@ -16,7 +16,6 @@ Gem::Specification.new do |gem|
|
|
16
16
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
17
17
|
gem.require_paths = ["lib"]
|
18
18
|
|
19
|
-
gem.add_dependency 'logstash-event', '~> 1.2'
|
20
19
|
gem.add_dependency 'inflecto'
|
21
20
|
|
22
21
|
gem.add_development_dependency "bundler", "~> 1.3"
|
@@ -2,37 +2,19 @@ require 'spec_helper'
|
|
2
2
|
require_relative '../../../lib/logasm/adapters/logstash_adapter/formatter'
|
3
3
|
|
4
4
|
describe Logasm::Adapters::LogstashAdapter::Formatter do
|
5
|
-
subject(:event) {
|
5
|
+
subject(:event) { formatter.call(severity, Time.now, nil, message) }
|
6
6
|
|
7
|
-
let(:formatter)
|
7
|
+
let(:formatter) { described_class.new(service_name) }
|
8
8
|
let(:service_name) { 'test_service' }
|
9
|
-
let(:severity)
|
10
|
-
let(:
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
context 'when service name is not present' do
|
20
|
-
let(:service_name) { nil }
|
21
|
-
|
22
|
-
it 'includes does not include the application key' do
|
23
|
-
expect(event).to_not have_key('application')
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
it 'includes severity as lowercase level' do
|
28
|
-
expect(event['level']).to eq('info')
|
29
|
-
end
|
30
|
-
|
31
|
-
it 'includes timestamp' do
|
32
|
-
expect(event['@timestamp']).to match(/\d{4}.*/)
|
33
|
-
end
|
34
|
-
|
35
|
-
it 'includes the host' do
|
36
|
-
expect(event['host']).to be_a(String)
|
9
|
+
let(:severity) { 'INFO' }
|
10
|
+
let(:message) { {x: 'y'} }
|
11
|
+
|
12
|
+
it 'returns correct json' do
|
13
|
+
hash = JSON.parse(subject)
|
14
|
+
expect(hash['x']).to eq('y')
|
15
|
+
expect(hash['application']).to eq('test_service')
|
16
|
+
expect(hash['level']).to eq('info')
|
17
|
+
expect(hash['host']).to be_a(String)
|
18
|
+
expect(hash['@timestamp']).to match(/\d{4}-\d{2}-\d{2}T.*/)
|
37
19
|
end
|
38
20
|
end
|
@@ -2,21 +2,33 @@ require 'spec_helper'
|
|
2
2
|
require_relative '../../lib/logasm/adapters/rabbitmq_adapter'
|
3
3
|
|
4
4
|
describe Logasm::Adapters::RabbitmqAdapter do
|
5
|
-
let(:adapter)
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
5
|
+
let(:adapter) do
|
6
|
+
described_class.new(log_level, 'TestService', {
|
7
|
+
host: 'localhost', user: 'guest', pass: 'guest', port: '5672'
|
8
|
+
})
|
9
|
+
end
|
10
10
|
let(:freddy) { adapter.freddy }
|
11
11
|
|
12
|
+
before do
|
13
|
+
allow(Freddy).to receive(:build) { FreddyMock.new }
|
14
|
+
end
|
15
|
+
|
12
16
|
describe '#log' do
|
13
17
|
context 'when logging a message' do
|
14
18
|
let(:log_level) { 0 }
|
15
19
|
|
16
20
|
it 'delegates to freddy' do
|
17
|
-
expect(freddy).to receive(:deliver)
|
18
|
-
|
19
21
|
adapter.log :info, message: 'test'
|
22
|
+
|
23
|
+
expect(freddy.deliveries.size).to eq(1)
|
24
|
+
|
25
|
+
queue, event = freddy.deliveries[0]
|
26
|
+
expect(queue).to eq('logstash-queue')
|
27
|
+
expect(event[:message]).to eq('test')
|
28
|
+
expect(event[:application]).to eq('test_service')
|
29
|
+
expect(event[:level]).to eq('info')
|
30
|
+
expect(event[:host]).to be_a(String)
|
31
|
+
expect(event[:@timestamp]).to match(/\d{4}-\d{2}-\d{2}T.*/)
|
20
32
|
end
|
21
33
|
end
|
22
34
|
|
data/spec/spec_helper.rb
CHANGED
@@ -1,10 +1,14 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler'
|
3
|
+
require 'pry'
|
4
|
+
Bundler.setup
|
5
|
+
|
6
|
+
require 'logasm'
|
7
|
+
|
8
|
+
Dir[File.dirname(__FILE__) + '/support/*.rb'].each {|f| require f}
|
9
|
+
|
1
10
|
RSpec.configure do |config|
|
2
11
|
config.run_all_when_everything_filtered = true
|
3
12
|
config.filter_run :focus
|
4
13
|
config.order = 'random'
|
5
14
|
end
|
6
|
-
|
7
|
-
require 'pry'
|
8
|
-
require 'securerandom'
|
9
|
-
|
10
|
-
require 'logasm'
|
data/spec/utils_spec.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Logasm::Utils do
|
4
|
+
describe '.build_event' do
|
5
|
+
subject(:event) { described_class.build_event(metadata, level, service_name) }
|
6
|
+
|
7
|
+
let(:service_name) { 'test_service' }
|
8
|
+
let(:level) { 'INFO' }
|
9
|
+
let(:metadata) { {x: 'y'} }
|
10
|
+
|
11
|
+
context 'when service name is in correct format' do
|
12
|
+
it 'includes it in the event as application' do
|
13
|
+
expect(event[:application]).to eq('test_service')
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
context 'when service name is in camelcase' do
|
18
|
+
let(:service_name) { 'InformationService' }
|
19
|
+
|
20
|
+
it 'includes it in the event as lower snake case' do
|
21
|
+
expect(event[:application]).to eq('information_service')
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'includes level as a lower case string' do
|
26
|
+
expect(event[:level]).to eq('info')
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'includes timestamp' do
|
30
|
+
expect(event[:@timestamp]).to match(/\d{4}.*/)
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'includes the host' do
|
34
|
+
expect(event[:host]).to be_a(String)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logasm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
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-09-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: logstash-event
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '1.2'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '1.2'
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: inflecto
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -100,16 +86,17 @@ files:
|
|
100
86
|
- lib/logasm/adapters/logstash_adapter.rb
|
101
87
|
- lib/logasm/adapters/logstash_adapter/formatter.rb
|
102
88
|
- lib/logasm/adapters/rabbitmq_adapter.rb
|
103
|
-
- lib/logasm/adapters/rabbitmq_adapter/message_builder.rb
|
104
89
|
- lib/logasm/adapters/stdout_adapter.rb
|
90
|
+
- lib/logasm/utils.rb
|
105
91
|
- logasm.gemspec
|
106
92
|
- spec/adapters/logstash_adapter/formatter_spec.rb
|
107
93
|
- spec/adapters/logstash_adapter_spec.rb
|
108
|
-
- spec/adapters/rabbitmq_adapter/message_builder_spec.rb
|
109
94
|
- spec/adapters/rabbitmq_adapter_spec.rb
|
110
95
|
- spec/adapters/stdout_adapter_spec.rb
|
111
96
|
- spec/logasm_spec.rb
|
112
97
|
- spec/spec_helper.rb
|
98
|
+
- spec/support/freddy_mock.rb
|
99
|
+
- spec/utils_spec.rb
|
113
100
|
homepage:
|
114
101
|
licenses:
|
115
102
|
- MIT
|
@@ -130,15 +117,16 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
130
117
|
version: '0'
|
131
118
|
requirements: []
|
132
119
|
rubyforge_project:
|
133
|
-
rubygems_version: 2.4.
|
120
|
+
rubygems_version: 2.4.5.1
|
134
121
|
signing_key:
|
135
122
|
specification_version: 4
|
136
123
|
summary: What description said
|
137
124
|
test_files:
|
138
125
|
- spec/adapters/logstash_adapter/formatter_spec.rb
|
139
126
|
- spec/adapters/logstash_adapter_spec.rb
|
140
|
-
- spec/adapters/rabbitmq_adapter/message_builder_spec.rb
|
141
127
|
- spec/adapters/rabbitmq_adapter_spec.rb
|
142
128
|
- spec/adapters/stdout_adapter_spec.rb
|
143
129
|
- spec/logasm_spec.rb
|
144
130
|
- spec/spec_helper.rb
|
131
|
+
- spec/support/freddy_mock.rb
|
132
|
+
- spec/utils_spec.rb
|
@@ -1,22 +0,0 @@
|
|
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
|
@@ -1,19 +0,0 @@
|
|
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
|