-
Notifications
You must be signed in to change notification settings - Fork 2k
/
ruby_example.rb
73 lines (61 loc) · 1.72 KB
/
ruby_example.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
require 'socket'
class Statsd
@@config = {}
def self.configure(host, port)
@@config = {
:host => host,
:port => port
}
end
def self.timing(stat, time, sample_rate=1)
# Log timing information
# > require 'ruby_example'
# > Statsd.timing('some.time', 500)
stats = {}
stats[stat] = "#{time}|ms"
Statsd.send(stats, sample_rate)
end
def self.increment(stats, sample_rate=1)
# Increments one or more stats counters
# > Statsd.increment('some.int')
# > Statsd.increment('some.int',0.5)
Statsd.update_stats(stats, 1, sample_rate)
end
def self.decrement(stats, sample_rate=1)
# Decrements one or more stats counters
# > Statsd.decrement('some.int')
Statsd.update_stats(stats, -1, sample_rate)
end
def self.update_stats(stats, delta=1, sampleRate=1)
# Updates one or more stats counters by arbitrary amounts
# > Statsd.update_stats('some.int',10)
stats = [stats] unless stats.kind_of?(Array)
data = {}
stats.each do |stat|
data[stat] = "#{delta}|c"
end
Statsd.send(data, sampleRate)
end
def self.send(data, sample_rate=1)
# Squirt the metrics over UDP
if @@config[:host].nil? || @@config[:port].nil?
raise ArgumentError.new("No configuration was specified")
end
sampled_data = {}
if sample_rate < 1
if rand <= sample_rate
data.each_key do |stat|
value = data[stat]
sampled_data[stat] = "#{value}|@#{sample_rate}"
end
end
else
sampled_data = data
sock = UDPSocket.new
sampled_data.each_key do |stat|
value = data[stat]
sock.send("#{stat}:#{value}", 0, @@config[:host], @@config[:port])
end
end
end
end