Skip to content

Commit 59811de

Browse files
committed
Initial metrics PORO.
1 parent b5c684a commit 59811de

File tree

3 files changed

+79
-4
lines changed

3 files changed

+79
-4
lines changed

lib/lambdakiq.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
require 'lambdakiq/job'
1414
require 'lambdakiq/record'
1515
require 'lambdakiq/backoff'
16+
require 'lambdakiq/metrics'
1617
require 'rails/railtie'
1718
require 'lambdakiq/railtie'
1819

lib/lambdakiq/metrics.rb

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
module Lambdakiq
2+
class Metrics
3+
4+
def initialize
5+
@logger = ActiveJob::Base.logger
6+
@namespace = Rails.application.class.name.split('::').first
7+
@dimensions = Concurrent::Array.new
8+
@metrics = Concurrent::Array.new
9+
@properties = Concurrent::Hash.new
10+
end
11+
12+
def metrics
13+
yield(self)
14+
ensure
15+
flush
16+
end
17+
18+
def flush
19+
@logger.info(message) unless empty?
20+
end
21+
22+
def benchmark
23+
value = nil
24+
seconds = Benchmark.realtime { value = yield }
25+
milliseconds = (seconds * 1000).to_i
26+
[value, milliseconds]
27+
end
28+
29+
def put_dimension(name, value)
30+
@dimensions << { name => value }
31+
self
32+
end
33+
34+
def put_metric(name, value, unit = nil)
35+
@metrics << { 'Name' => name }.tap do |m|
36+
m['Unit'] = unit if unit
37+
end
38+
set_property name, value
39+
end
40+
41+
def set_property(name, value)
42+
@properties[name] = value
43+
self
44+
end
45+
46+
def empty?
47+
[@dimensions, @metrics, @properties].all?(&:empty?)
48+
end
49+
50+
def message
51+
{
52+
'_aws' => {
53+
'Timestamp' => timestamp,
54+
'CloudWatchMetrics' => [
55+
{
56+
'Namespace' => @namespace,
57+
'Dimensions' => [@dimensions.map(&:keys).flatten],
58+
'Metrics' => @metrics
59+
}
60+
]
61+
}
62+
}.tap do |m|
63+
@dimensions.each { |dim| m.merge!(dim) }
64+
m.merge!(@properties)
65+
end
66+
end
67+
68+
def timestamp
69+
Time.now.strftime('%s%3N').to_i
70+
end
71+
72+
end
73+
end

test/test_helper/client_helpers.rb

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
module TestHelper
22
module ClientHelpers
3+
extend ActiveSupport::Concern
4+
5+
included do
6+
let(:max_receive_count) { 8 }
7+
end
38

49
private
510

@@ -25,9 +30,5 @@ def api_requests
2530
client.api_requests
2631
end
2732

28-
def max_receive_count
29-
8
30-
end
31-
3233
end
3334
end

0 commit comments

Comments
 (0)