l2meter 0.3.1 → 0.4.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ca72b1aefa9cc8a14625c446cdba60322189cf28
4
- data.tar.gz: 37facf6c0d869aa46d2f0cc9eb51ad2a90e70991
3
+ metadata.gz: 0cbfc8921bc865126c979734995c67271967b7d2
4
+ data.tar.gz: 8f5f6484144b0a7b7dc402f01a7f4bf5eb71370b
5
5
  SHA512:
6
- metadata.gz: 17fa618bc634d0aca1784e8c057dd97c4360b6b61e932162c6ea22a8aedb3e57494711883dd3c2c5c67632a2c997fd555473ac6cbbec14cd6acbc0c9e0c55f4d
7
- data.tar.gz: 9b8af786812aa2113c2baf321866166f4b8da90e363757494e69ca3c3d74ca098518c92c153c60e640509d3304d22fd7d9c3c330e085c61e7c4e90314b62aa8d
6
+ metadata.gz: f462a4e6cb2bbb2cf59440ceb9e4b5cece82efc834e67e4adf2c4e6abd03daee45bd9230e924c051480a2c3282a3dc6e93b49a3969bb1d692f6174a089196777
7
+ data.tar.gz: c4b23fb0182c6295ec25fac023305e6717bbdad1aa120bfd206e5f6a69a4d88f7f3292eba01e54f5de304cfba6a91f3431004488fc47dd3b9e8d5712758344ed
data/README.md CHANGED
@@ -145,7 +145,7 @@ config.context = { app_name: "my-app-name" }
145
145
 
146
146
  # ...
147
147
 
148
- Metrics.log foo: :bar # => app-name=my-app-name foo-bar
148
+ Metrics.log foo: :bar # => app-name=my-app-name foo=bar
149
149
  ```
150
150
 
151
151
  Dynamic context is also supported:
@@ -46,8 +46,6 @@ module L2meter
46
46
  end
47
47
  end
48
48
 
49
- def context=(block_or_value)
50
- @context = block_or_value
51
- end
49
+ attr_writer :context
52
50
  end
53
51
  end
@@ -10,7 +10,7 @@ module L2meter
10
10
  end
11
11
 
12
12
  def log(*args)
13
- params = transform_log_args(*args)
13
+ params = unwrap(*args)
14
14
  params = merge_contexts(params)
15
15
 
16
16
  if block_given?
@@ -50,7 +50,7 @@ module L2meter
50
50
  log_with_prefix :sample, metric, value, unit: unit
51
51
  end
52
52
 
53
- def count(metric, value=1)
53
+ def count(metric, value = 1)
54
54
  log_with_prefix :count, metric, value
55
55
  end
56
56
 
@@ -58,11 +58,12 @@ module L2meter
58
58
  log_with_prefix :unique, metric, value
59
59
  end
60
60
 
61
- def context(hash_or_proc)
62
- @contexts.push hash_or_proc
61
+ def context(*context_data)
62
+ return clone_with_context(context_data) unless block_given?
63
+ push_context context_data
63
64
  yield
64
65
  ensure
65
- @contexts.pop
66
+ context_data.length.times { @contexts.pop }
66
67
  end
67
68
 
68
69
  def clone
@@ -76,11 +77,23 @@ module L2meter
76
77
  flush_buffer @outputs.pop
77
78
  end
78
79
 
80
+ protected
81
+
82
+ def push_context(context_data)
83
+ @contexts.concat context_data.reverse
84
+ end
85
+
79
86
  private
80
87
 
81
- def transform_log_args(*args)
88
+ def clone_with_context(context)
89
+ clone.tap do |emitter|
90
+ emitter.push_context context
91
+ end
92
+ end
93
+
94
+ def unwrap(*args)
82
95
  params = Hash === args.last ? args.pop : {}
83
- args = args.compact.map { |key| [ key, true ] }.to_h
96
+ args = args.compact.map { |key| [key, true] }.to_h
84
97
  args.merge(params)
85
98
  end
86
99
 
@@ -102,9 +115,9 @@ module L2meter
102
115
  end
103
116
 
104
117
  def current_context
105
- contexts_queue.inject({}) do |result, c|
106
- current = c.respond_to?(:call) ? c.call.to_h : c.clone
107
- result.merge(current)
118
+ contexts_queue.inject({}) do |result, context|
119
+ context = context.call if context.respond_to?(:call)
120
+ result.merge(unwrap(context))
108
121
  end.to_a.reverse.to_h
109
122
  end
110
123
 
@@ -124,19 +137,16 @@ module L2meter
124
137
 
125
138
  def write(params)
126
139
  tokens = format_keys(params).map do |key, value|
127
- value == true ? key : [ key, format_value(value) ] * ?=
140
+ value == true ? key : [key, format_value(value)] * ?=
128
141
  end
129
142
 
130
- tokens.sort! if configuration.sort?
131
-
132
- emit tokens
143
+ emit configuration.sort?? tokens.sort : tokens
133
144
  end
134
145
 
135
146
  def emit(tokens)
136
147
  output_queue.last.puts [*tokens].join(" ")
137
148
  end
138
149
 
139
-
140
150
  def log_with_prefix(method, key, value, unit: nil)
141
151
  key = [configuration.prefix, key, unit].compact * ?.
142
152
  log Hash["#{method}##{key}", value]
@@ -145,36 +155,34 @@ module L2meter
145
155
  def wrap(params)
146
156
  write params.merge(at: :start)
147
157
 
148
- result, exception, elapsed = execute_with_elapsed(&proc)
158
+ result, error, elapsed = execute_with_elapsed(&proc)
149
159
 
150
- if exception
151
- status = { at: :exception, exception: exception.class.name, message: exception.message.strip }
160
+ status = if error
161
+ { at: :exception, exception: error.class, message: error.message.strip }
152
162
  else
153
- status = { at: :finish }
163
+ { at: :finish }
154
164
  end
155
165
 
156
- status = merge_elapsed(elapsed, status)
157
-
158
- write params.merge(status)
166
+ write params.merge(merge_elapsed(elapsed, status))
159
167
 
160
- raise exception if exception
168
+ raise error if error
161
169
 
162
170
  result
163
171
  end
164
172
 
165
173
  def execute_with_elapsed
166
174
  time_at_start = Time.now
167
- [ yield, nil, Time.now - time_at_start ]
168
- rescue Exception => exception
169
- [ nil, exception, Time.now - time_at_start ]
175
+ [yield, nil, Time.now - time_at_start]
176
+ rescue Object => exception
177
+ [nil, exception, Time.now - time_at_start]
170
178
  end
171
179
 
172
180
  def contexts_queue
173
- [ configuration.context, *@contexts ].compact
181
+ [configuration.context, *@contexts].compact
174
182
  end
175
183
 
176
184
  def output_queue
177
- [ configuration.output, *@outputs ].compact
185
+ [configuration.output, *@outputs].compact
178
186
  end
179
187
 
180
188
  def flush_buffer(buffer)
@@ -15,6 +15,7 @@ module L2meter
15
15
  count
16
16
  log
17
17
  measure
18
+ push_context
18
19
  sample
19
20
  silence
20
21
  silence!
@@ -1,3 +1,3 @@
1
1
  module L2meter
2
- VERSION = "0.3.1".freeze
2
+ VERSION = "0.4.0".freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: l2meter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pavel Pravosud
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-27 00:00:00.000000000 Z
11
+ date: 2016-04-06 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email:
@@ -45,7 +45,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
45
45
  version: '0'
46
46
  requirements: []
47
47
  rubyforge_project:
48
- rubygems_version: 2.4.8
48
+ rubygems_version: 2.5.2
49
49
  signing_key:
50
50
  specification_version: 4
51
51
  summary: L2met friendly log formatter