rt-watchman 0.9.0 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2518ea25e48bd1335da7036b1f356abe99707b95
4
- data.tar.gz: 8761422a4906f54a9a90a1cb0555d60173036e0f
3
+ metadata.gz: 0ea317e3767bb88fc1f9ad45dd8f0e59d390e878
4
+ data.tar.gz: 38d7f082ccc4f9232e22a3be8491ad994df0d31c
5
5
  SHA512:
6
- metadata.gz: 910ff071eebce01b84107f71db699907b4a4eb29f680a2f5749143b2320cf8ecd12d6aefde11f00b93be8445839240772e336e26c76529a50120d2a2d93fac3f
7
- data.tar.gz: 26f3715758b471d21d25678a49bd9d9d2a680321abcaf2c02b73995876e8c3fbe2314fc8449b0c120675bcfb21a5da19d0cc3e0a3bc1194611435503e55fbc28
6
+ metadata.gz: 729390c5b43c85c590e32c52cb73690f891c2a1d80286d1c33faaa5dbf90cc1433607265394342aeb45d7ce24b0afc6fd8c1b9457a26e8086f8e36695f417fc9
7
+ data.tar.gz: 3485485924f7705cdd29156f2279a78b0410b1d04670d9c037c3b590c74fa18c41adfff4d1ef85db4b27c8a596f1a0a5506ddaec8cddc17df8e2a0a0a9adf25d
data/README.md CHANGED
@@ -17,7 +17,18 @@ Watchman.host = "localhost"
17
17
  Watchman.port = 22345
18
18
  ```
19
19
 
20
- To submit a simple value from your service:
20
+ To submit a value to statsd from your service use:
21
+
22
+ ``` ruby
23
+ Watchman.submit(name, value, type)
24
+ ```
25
+
26
+ Available types:
27
+ * :gauge `default`
28
+ * :timing
29
+ * :count
30
+
31
+ Submitting a simple gauge value from your service would look like:
21
32
 
22
33
  ``` ruby
23
34
  Watchman.submit("number.of.kittens", 30)
@@ -33,12 +44,52 @@ Watchman.benchmark("time.to.wake.up") do
33
44
  end
34
45
  ```
35
46
 
36
- To submit a time value in miliseconds:
47
+ To submit a time value in milliseconds use:
37
48
 
38
49
  ``` ruby
39
50
  Watchman.submit("number.of.kittens", 30, :timing)
40
51
  ```
41
52
 
53
+ To submit a count value use:
54
+
55
+ ``` ruby
56
+ # To increse:
57
+ Watchman.increment("number.of.kittens")
58
+
59
+ # or decrese:
60
+ Watchman.decrement("number.of.kittens")
61
+ ```
62
+
63
+ Alternatively you can use:
64
+
65
+ ``` ruby
66
+ # To increse:
67
+ Watchman.submit("number.of.kittens", 1, :count)
68
+
69
+ # or decrese:
70
+ Watchman.submit("number.of.kittens", -1, :count)
71
+ ```
72
+
73
+ to achieve the equivalent effect, with the added possibility of tweaking the
74
+ value.
75
+
76
+ ## Tags
77
+
78
+ If you want to use a variable that changes often, don't use this:
79
+
80
+ ``` ruby
81
+ Watchman.submit("user.#{id}", 30)
82
+ ```
83
+
84
+ Use tags. A list of tags is an optional last parameter of `:submit`, `:benchmark`,
85
+ `:increment` and `:decrement` methods.
86
+
87
+ ``` ruby
88
+ Watchman.submit("user", 30, tags: [id])
89
+ ```
90
+
91
+ Tags list is limited to 3 values.
92
+
42
93
  ## Global metric prefix
43
94
 
44
95
  If you want to prepend all the metric names with a prefix, do the following:
data/lib/watchman.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require "watchman/version"
2
+ require "watchman/metric_name"
2
3
  require "watchman/mock_statsd"
3
4
  require "benchmark"
4
5
  require "statsd"
@@ -12,35 +13,39 @@ class Watchman
12
13
  attr_accessor :port
13
14
  attr_accessor :test_mode
14
15
 
15
- def submit(name, value, type = :gauge)
16
- metric = metric_name_with_prefix(name)
17
-
18
- case type
19
- when :gauge then statsd_client.gauge(metric, value)
20
- when :timing then statsd_client.timing(metric, value)
21
- when :count then statsd_client.count(metric, value)
22
- else raise SubmitTypeError.new("Submit type '#{type}' is not recognized")
23
- end
24
- end
25
-
26
- def benchmark(name)
16
+ def benchmark(name, options = {})
27
17
  result = nil
28
18
 
29
19
  time = Benchmark.measure do
30
20
  result = yield
31
21
  end
32
22
 
33
- submit(name, (time.real * 1000).floor, :timing)
23
+ timing(name, (time.real * 1000).floor, options)
34
24
 
35
25
  result
36
26
  end
37
27
 
38
- def increment(name)
39
- submit(name, 1, :count)
28
+ def timing(name, value, options = {})
29
+ submit(name, value, :timing, options)
30
+ end
31
+
32
+ def increment(name, options = {})
33
+ submit(name, 1, :count, options)
34
+ end
35
+
36
+ def decrement(name, options = {})
37
+ submit(name, -1, :count, options)
40
38
  end
41
39
 
42
- def decrement(name)
43
- submit(name, -1, :count)
40
+ def submit(name, value, type = :gauge, options = {})
41
+ metric = Watchman::MetricName.construct(name, prefix, options[:tags])
42
+
43
+ case type
44
+ when :gauge then statsd_client.gauge(metric, value)
45
+ when :timing then statsd_client.timing(metric, value)
46
+ when :count then statsd_client.count(metric, value)
47
+ else raise SubmitTypeError.new("Submit type '#{type}' is not recognized")
48
+ end
44
49
  end
45
50
 
46
51
  private
@@ -52,13 +57,5 @@ class Watchman
52
57
  @client ||= Statsd.new(@host, @port)
53
58
  end
54
59
  end
55
-
56
- def metric_name_with_prefix(name)
57
- if @prefix
58
- "#{@prefix}.#{name}"
59
- else
60
- name
61
- end
62
- end
63
60
  end
64
61
  end
@@ -0,0 +1,36 @@
1
+ class Watchman
2
+ class MetricName
3
+ def self.construct(base_name, prefix, tags)
4
+ new(base_name, prefix, tags).construct
5
+ end
6
+
7
+ def initialize(base_name, prefix = nil, tags)
8
+ @base_name = base_name
9
+ @prefix = prefix
10
+ @tags = tags || []
11
+ end
12
+
13
+ def construct
14
+ full_name = []
15
+
16
+ full_name << "tagged" if tagged?
17
+ full_name << @prefix if @prefix
18
+ full_name << formated_tags if tagged?
19
+ full_name << @base_name
20
+
21
+ full_name.join(".")
22
+ end
23
+
24
+ def formated_tags
25
+ @tags
26
+ .map(&:to_s)
27
+ .fill("no_tag", @tags.length, [3 - @tags.length, 0].max)
28
+ .first(3)
29
+ .join(".")
30
+ end
31
+
32
+ def tagged?
33
+ @tags.size > 0
34
+ end
35
+ end
36
+ end
@@ -1,3 +1,3 @@
1
1
  class Watchman
2
- VERSION = "0.9.0"
2
+ VERSION = "0.10.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rt-watchman
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rendered Text
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-12-01 00:00:00.000000000 Z
11
+ date: 2017-05-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: statsd-ruby
@@ -83,6 +83,7 @@ files:
83
83
  - bin/console
84
84
  - bin/setup
85
85
  - lib/watchman.rb
86
+ - lib/watchman/metric_name.rb
86
87
  - lib/watchman/mock_statsd.rb
87
88
  - lib/watchman/version.rb
88
89
  - watchman.gemspec