event_tracer 0.0.1
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 +7 -0
- data/lib/event_tracer/appsignal_logger.rb +37 -0
- data/lib/event_tracer/basic_decorator.rb +18 -0
- data/lib/event_tracer/logger.rb +28 -0
- data/lib/event_tracer/version.rb +3 -0
- data/lib/event_tracer.rb +46 -0
- metadata +94 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 14d9cc0ad49951e17c576a3fc4c1fbc9ffba1823
|
4
|
+
data.tar.gz: 3bc38170384e3d53f614222fc6e26dfc434b1ca1
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 92ad282b66078714af4e6345d3ffdfc3c4c347dabeae22dcf6d957072dcb4c899257297ed0c33502dd1a04a099fe973306e639dacc40094fec9bab9f490612a8
|
7
|
+
data.tar.gz: 7e520b9b01770affe29bd639aa3bc7828ead5a5ac9de73d12515029fe55ed7cba27ead64695d1795b4cab482bed9b2e13787e3453414cfac9ba65d992c142da2
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require_relative '../event_tracer'
|
2
|
+
require_relative './basic_decorator'
|
3
|
+
|
4
|
+
# NOTES
|
5
|
+
# Appsignal interface to send our usual actions
|
6
|
+
# BasicDecorator adds a transparent interface on top of the appsignal interface
|
7
|
+
#
|
8
|
+
# Usage: EventTracer.register :appsignal, EventTracer::AppsignalLogger.new(Appsignal)
|
9
|
+
# appsignal_logger.info appsignal: { increment_counter: { counter_1: 1, counter_2: 2 }, set_gauge: { gauge_1: 1 } }
|
10
|
+
module EventTracer
|
11
|
+
class AppsignalLogger < BasicDecorator
|
12
|
+
|
13
|
+
SUPPORTED_METRICS ||= %i(increment_counter add_distribution_value set_gauge)
|
14
|
+
|
15
|
+
LOG_TYPES.each do |log_type|
|
16
|
+
define_method log_type do |**args|
|
17
|
+
SUPPORTED_METRICS.each do |metric|
|
18
|
+
next unless args[:appsignal] && args[:appsignal][metric].is_a?(Hash)
|
19
|
+
send_metric(metric, args[:appsignal][metric]) unless args[:appsignal][metric].empty?
|
20
|
+
end
|
21
|
+
true
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
attr_reader :appsignal, :decoratee
|
28
|
+
alias_method :appsignal, :decoratee
|
29
|
+
|
30
|
+
def send_metric(metric, payload)
|
31
|
+
payload.each do |increment, value|
|
32
|
+
appsignal.send(metric, increment, value)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module EventTracer
|
2
|
+
class BasicDecorator < Delegator
|
3
|
+
|
4
|
+
def initialize(decoratee)
|
5
|
+
super
|
6
|
+
@delegate_sd_obj = @decoratee = decoratee
|
7
|
+
end
|
8
|
+
|
9
|
+
def __getobj__
|
10
|
+
@delegate_sd_obj
|
11
|
+
end
|
12
|
+
|
13
|
+
def __setobj__(obj)
|
14
|
+
@delegate_sd_obj = obj
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require_relative '../event_tracer'
|
2
|
+
require_relative './basic_decorator'
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
# Usage: EventTracer.register :base, EventTracer::Logger.new(Logger.new(STDOUT))
|
6
|
+
module EventTracer
|
7
|
+
class Logger < BasicDecorator
|
8
|
+
|
9
|
+
LOG_TYPES.each do |log_type|
|
10
|
+
define_method log_type do |*args|
|
11
|
+
send_message(log_type, *args)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
attr_reader :logger, :decoratee
|
18
|
+
alias_method :logger, :decoratee
|
19
|
+
|
20
|
+
# execute only if there's a message to be logged
|
21
|
+
def send_message(log_method, action: nil, simple_message: nil, **args)
|
22
|
+
return false unless simple_message || args[:message]
|
23
|
+
message_to_send = simple_message ? simple_message : args.to_json
|
24
|
+
logger.send(log_method, "[#{action}] #{message_to_send}")
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
data/lib/event_tracer.rb
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
require "event_tracer/version"
|
2
|
+
|
3
|
+
module EventTracer
|
4
|
+
|
5
|
+
LOG_TYPES ||= %i(info warn error)
|
6
|
+
|
7
|
+
@loggers = {}
|
8
|
+
|
9
|
+
def self.register(code, logger)
|
10
|
+
@loggers[code] = logger
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.find(code)
|
14
|
+
@loggers[code]
|
15
|
+
end
|
16
|
+
|
17
|
+
LOG_TYPES.each do |log_type|
|
18
|
+
define_singleton_method log_type do |loggers: nil, **args|
|
19
|
+
begin
|
20
|
+
(selected_loggers(loggers) || @loggers).each do |_code, logger|
|
21
|
+
logger.send(log_type, **args)
|
22
|
+
end
|
23
|
+
true
|
24
|
+
rescue Exception => e
|
25
|
+
p e.message
|
26
|
+
false
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def self.selected_loggers(logger_codes)
|
34
|
+
return unless logger_codes.is_a?(Array)
|
35
|
+
return if logger_codes.detect { |code| !code.is_a?(Symbol) }
|
36
|
+
|
37
|
+
selected_codes = logger_codes.uniq & @loggers.keys
|
38
|
+
|
39
|
+
return if selected_codes.empty?
|
40
|
+
@loggers.select { |code, _logger| selected_codes.include?(code) }
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
project_root = File.dirname(File.absolute_path(__FILE__))
|
46
|
+
Dir.glob("#{project_root}/event_tracer/*") {|file| require file}
|
metadata
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: event_tracer
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- melvrickgoh
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2019-01-06 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.17'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.17'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.0'
|
55
|
+
description: 'Thin wrapper for formatted logging/ metric services to be used as a
|
56
|
+
single service. External service(s) supported: Appsignal'
|
57
|
+
email:
|
58
|
+
- melvrickgoh@hotmail.com
|
59
|
+
executables: []
|
60
|
+
extensions: []
|
61
|
+
extra_rdoc_files: []
|
62
|
+
files:
|
63
|
+
- lib/event_tracer.rb
|
64
|
+
- lib/event_tracer/appsignal_logger.rb
|
65
|
+
- lib/event_tracer/basic_decorator.rb
|
66
|
+
- lib/event_tracer/logger.rb
|
67
|
+
- lib/event_tracer/version.rb
|
68
|
+
homepage: https://github.com/melvrickgoh/event_tracer
|
69
|
+
licenses:
|
70
|
+
- MIT
|
71
|
+
metadata: {}
|
72
|
+
post_install_message:
|
73
|
+
rdoc_options: []
|
74
|
+
require_paths:
|
75
|
+
- lib/event_tracer
|
76
|
+
- lib
|
77
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
83
|
+
requirements:
|
84
|
+
- - ">="
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '0'
|
87
|
+
requirements: []
|
88
|
+
rubyforge_project:
|
89
|
+
rubygems_version: 2.5.1
|
90
|
+
signing_key:
|
91
|
+
specification_version: 4
|
92
|
+
summary: Thin wrapper for formatted logging/ metric services to be used as a single
|
93
|
+
service
|
94
|
+
test_files: []
|