kb-simple-metrics 0.0.12-java

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.
Files changed (57) hide show
  1. data/.gitignore +20 -0
  2. data/.rspec +2 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE +13 -0
  5. data/README.md +144 -0
  6. data/Rakefile +7 -0
  7. data/doc/NurseRatched.html +246 -0
  8. data/doc/Rdio.html +233 -0
  9. data/doc/Samovar.html +241 -0
  10. data/doc/Simple/Metrics/Check.html +308 -0
  11. data/doc/Simple/Metrics/Graphite.html +262 -0
  12. data/doc/Simple/Metrics/HEALTHY.html +144 -0
  13. data/doc/Simple/Metrics/Health.html +288 -0
  14. data/doc/Simple/Metrics/Healthchecks.html +413 -0
  15. data/doc/Simple/Metrics/Meter.html +295 -0
  16. data/doc/Simple/Metrics/RackMetrics.html +366 -0
  17. data/doc/Simple/Metrics/Timer.html +232 -0
  18. data/doc/Simple/Metrics/UNHEALTHY.html +144 -0
  19. data/doc/Simple/Metrics/WARNING.html +144 -0
  20. data/doc/Simple/Metrics.html +510 -0
  21. data/doc/Simple.html +117 -0
  22. data/doc/_index.html +259 -0
  23. data/doc/class_list.html +53 -0
  24. data/doc/css/common.css +1 -0
  25. data/doc/css/full_list.css +57 -0
  26. data/doc/css/style.css +328 -0
  27. data/doc/file.README.html +224 -0
  28. data/doc/file_list.html +55 -0
  29. data/doc/frames.html +28 -0
  30. data/doc/index.html +224 -0
  31. data/doc/js/app.js +214 -0
  32. data/doc/js/full_list.js +173 -0
  33. data/doc/js/jquery.js +4 -0
  34. data/doc/method_list.html +180 -0
  35. data/doc/top-level-namespace.html +114 -0
  36. data/lib/java/jackson-core-asl-1.9.5.jar +0 -0
  37. data/lib/java/jackson-mapper-asl-1.9.5.jar +0 -0
  38. data/lib/java/metrics-core-2.1.1.jar +0 -0
  39. data/lib/java/metrics-graphite-2.1.1.jar +0 -0
  40. data/lib/java/metrics-servlet-2.1.1.jar +0 -0
  41. data/lib/java/slf4j-api-1.6.4.jar +0 -0
  42. data/lib/simple/metrics/graphite.rb +23 -0
  43. data/lib/simple/metrics/health.rb +15 -0
  44. data/lib/simple/metrics/healthcheck.rb +65 -0
  45. data/lib/simple/metrics/meter.rb +23 -0
  46. data/lib/simple/metrics/rack_metrics.rb +32 -0
  47. data/lib/simple/metrics/timer.rb +24 -0
  48. data/lib/simple/metrics.rb +51 -0
  49. data/lib/simple/version.rb +5 -0
  50. data/lib/simple.rb +6 -0
  51. data/simple-metrics.gemspec +21 -0
  52. data/spec/metrics/graphite_spec.rb +9 -0
  53. data/spec/metrics/healthcheck_spec.rb +55 -0
  54. data/spec/metrics/meter_spec.rb +20 -0
  55. data/spec/metrics/timer_spec.rb +29 -0
  56. data/spec/spec_helper.rb +13 -0
  57. metadata +182 -0
@@ -0,0 +1,65 @@
1
+ java_import com.yammer.metrics.core.HealthCheck
2
+
3
+ module Simple
4
+ module Metrics
5
+ module Healthchecks
6
+ include Simple::Metrics
7
+
8
+ # Create a new healthcheck
9
+ #
10
+ # @param [String] name The name of the healthcheck, eg `check_db`.
11
+ # @return [MetricName] the newly created metric name
12
+ def new_healthcheck(name, &blk)
13
+ healthcheck = Check.new(name, &blk)
14
+ Java::ComYammerMetrics::HealthChecks.register(healthcheck)
15
+ run_healthcheck_loop
16
+ end
17
+
18
+ # Run the healthcheck loop
19
+ # This starts a new thread that runs all of the defined healthcheck loops.
20
+ def run_healthcheck_loop
21
+ return if @running_healthcheck_loop
22
+ Thread.new do
23
+ loop do
24
+ run_all_healthchecks
25
+ sleep 5
26
+ end
27
+ end
28
+ @running_healthcheck_loop = true
29
+ end
30
+
31
+ # Run all of the healthchecks that have been defined
32
+ def run_all_healthchecks
33
+ Java::ComYammerMetrics::HealthChecks.runHealthChecks
34
+ end
35
+ end
36
+
37
+ class Check < Java::ComYammerMetricsCore::HealthCheck
38
+ def initialize(name, &blk)
39
+ super(name)
40
+ @blk = blk
41
+ end
42
+
43
+ # Call the block and capture the return value.
44
+ # If the result is `Simple::Metrics::HEALTHY`, mark the healthcheck as healthy.
45
+ # If the result is a `Simple::Metrics::WARNING`, mark the healthcheck in the warning state.
46
+ # If the result is a `Simple::Metrics::UNHEALTHY`, or throws an error,
47
+ # mark the healthcheck as unhealthy.
48
+ def check
49
+ begin
50
+ r = @blk.call
51
+ case (r.is_a?(Class) ? r.new : r)
52
+ when Simple::Metrics::HEALTHY
53
+ Java::ComYammerMetricsCore::HealthCheck::Result.healthy
54
+ when Simple::Metrics::WARNING
55
+ Java::ComYammerMetricsCore::HealthCheck::Result.warning
56
+ when Simple::Metrics::UNHEALTHY
57
+ Java::ComYammerMetricsCore::HealthCheck::Result.unhealthy(r.message)
58
+ end
59
+ rescue StandardError => e
60
+ Java::ComYammerMetricsCore::HealthCheck::Result.unhealthy(e.message)
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,23 @@
1
+ module Simple
2
+ module Metrics
3
+ module Meter
4
+ include Simple::Metrics
5
+
6
+ # Create a new meter
7
+ #
8
+ # @param [String] name The name of the meter
9
+ # @param [String] klass_name The name of the class, usually the application. Defaults to
10
+ # `self.class.name`
11
+ # @param [TimeUnit] time_unit The rate at which to measure marked data. Defaults to
12
+ # TimeUnit::SECONDS
13
+ def define_meter(name, klass_name = self.class.name, time_unit = Simple::Metrics::DEFAULT_RATE_UNIT)
14
+ type = "meter"
15
+ metric_name = new_metric_name(klass_name, name, type)
16
+ meter = Java::ComYammerMetrics::Metrics.new_meter(metric_name, name.to_s, time_unit)
17
+ define_method("#{name}") do
18
+ meter
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,32 @@
1
+ module Simple
2
+ module Metrics
3
+ class RackMetrics
4
+ extend Simple::Metrics::Meter
5
+
6
+ # Rack middleware for capturing response codes
7
+ #
8
+ # Creates a series of response meters that will be marked based on the response
9
+ # code that is returned by rack.
10
+ # @param [Object] app Rack application
11
+ # @param [String] application_name The name of the application
12
+ def initialize(app, application_name)
13
+ @app = app
14
+
15
+ self.class.define_meter '2xx-responses', application_name
16
+ self.class.define_meter '3xx-responses', application_name
17
+ self.class.define_meter '4xx-responses', application_name
18
+ self.class.define_meter '5xx-responses', application_name
19
+ end
20
+
21
+ def call(env)
22
+ begin
23
+ status, headers, body = @app.call(env)
24
+ ensure
25
+ status_code = (status ||= 500).to_s[0]
26
+ status_method = "#{status_code}xx-responses".to_sym
27
+ self.send(status_method).mark
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,24 @@
1
+ module Simple
2
+ module Metrics
3
+ module Timer
4
+ # Create creates a new timer, registers it with the metrics registry,
5
+ # yields the timer to the block and stops it when the block returns.
6
+ #
7
+ # @param [String] name The name of the timer
8
+ # @param [String] klass_name The name of the class, usually the application. Defaults to
9
+ # `self.class.name`
10
+ # @param [TimeUnit] time_unit The rate at which to measure timed data. Defaults to
11
+ # TimeUnit::SECONDS
12
+ def timer(name, klass_name = self.class.name, time_unit = Simple::Metrics::DEFAULT_RATE_UNIT)
13
+ metric_name = new_metric_name(sanitize_classname(klass_name), name, 'timer')
14
+ new_timer = metrics_registry.newTimer(metric_name, DEFAULT_DURATION_UNIT, time_unit)
15
+ captured_timer = new_timer.time
16
+ begin
17
+ yield new_timer
18
+ ensure
19
+ captured_timer.stop
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,51 @@
1
+ require 'java'
2
+ require 'java/metrics-core-2.1.1'
3
+ require 'java/slf4j-api-1.6.4'
4
+ require 'java/jackson-core-asl-1.9.5'
5
+ require 'java/jackson-mapper-asl-1.9.5'
6
+ require 'java/metrics-servlet-2.1.1'
7
+
8
+ require_relative 'metrics/timer'
9
+ require_relative 'metrics/meter'
10
+ require_relative 'metrics/healthcheck'
11
+ require_relative 'metrics/health'
12
+ require_relative 'metrics/graphite'
13
+
14
+ java_import java.util.concurrent.TimeUnit
15
+ java_import com.yammer.metrics.Metrics
16
+ java_import com.yammer.metrics.core.MetricName
17
+
18
+ module Simple
19
+ module Metrics
20
+ DEFAULT_DURATION_UNIT = TimeUnit::MILLISECONDS
21
+ DEFAULT_RATE_UNIT = TimeUnit::SECONDS
22
+ DEFAULT_TIMING_UNIT = TimeUnit::NANOSECONDS
23
+
24
+ include Timer
25
+
26
+ # Sanitize classnames for graphite
27
+ #
28
+ # @param [Object] klass_name The request object
29
+ # @return [String] The class name without colons
30
+ def sanitize_classname(klass_name)
31
+ klass_name.gsub(":","")
32
+ end
33
+
34
+ # The default metrics registry
35
+ #
36
+ # @return [Java::ComYammerMetrics::Metrics] the default metrics registry
37
+ def metrics_registry
38
+ Java::ComYammerMetrics::Metrics.defaultRegistry
39
+ end
40
+
41
+ # Create a new metric name
42
+ #
43
+ # @param [String] klass_name The name of the class, usually the application name
44
+ # @param [String] name The name of the metric
45
+ # @param [String] type The type of metric
46
+ # @return [MetricName] the newly created metric name
47
+ def new_metric_name(klass_name, name, type)
48
+ MetricName.new(klass_name.downcase, type, name.to_s)
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,5 @@
1
+ module Simple
2
+ module Metrics
3
+ VERSION = "0.0.12"
4
+ end
5
+ end
data/lib/simple.rb ADDED
@@ -0,0 +1,6 @@
1
+ require "simple/version"
2
+
3
+ module Simple
4
+ end
5
+
6
+ require "simple/metrics"
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/simple/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["dan herrera", "james pozdena"]
6
+ gem.email = ["dan@simple.com"]
7
+ gem.platform = 'java'
8
+ gem.description = %q{A simple JRuby wrapper around codahale's metrics package}
9
+ gem.summary = %q{MEASURE ALL THE THINGS!}
10
+ gem.homepage = "https://github.com/SimpleFinance/simple-metrics"
11
+ gem.files = `git ls-files`.split($\)
12
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
13
+ gem.name = "kb-simple-metrics"
14
+ gem.require_paths = ["lib"]
15
+ gem.version = Simple::Metrics::VERSION
16
+
17
+ gem.add_development_dependency 'rspec'
18
+ gem.add_development_dependency 'rake'
19
+ gem.add_development_dependency 'yard'
20
+ gem.add_development_dependency 'kramdown'
21
+ end
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ describe Simple::Metrics do
4
+ class GraphiteSpec
5
+ extend Simple::Metrics::Graphite
6
+
7
+ enable_graphite_reporter('graphite.example.com', 2003, 'example.class')
8
+ end
9
+ end
@@ -0,0 +1,55 @@
1
+ require 'spec_helper'
2
+
3
+ describe Simple::Metrics::Healthchecks do
4
+ it "should register a new healthcheck" do
5
+ class NurseRatched
6
+ extend Simple::Metrics::Healthchecks
7
+
8
+ class << self
9
+ def status=(v)
10
+ @status = v
11
+ end
12
+ def status
13
+ @status
14
+ end
15
+ end
16
+
17
+ self.status = "healthy"
18
+
19
+ new_healthcheck("temperature") do
20
+ case self.status
21
+ when "healthy"
22
+ Simple::Metrics::HEALTHY
23
+ when "unhealthy"
24
+ Simple::Metrics::UNHEALTHY.new("Too Many Tacos!")
25
+ when "dead"
26
+ raise "Pants"
27
+ end
28
+ end
29
+ end
30
+ end
31
+
32
+ it "should run all healthchecks" do
33
+ NurseRatched.status = "healthy"
34
+ NurseRatched.run_all_healthchecks.entrySet.each do |result|
35
+ result.getValue.isHealthy.should be_true
36
+ end
37
+ end
38
+
39
+ it "should return the last error message when unhealthy" do
40
+ NurseRatched.status = "unhealthy"
41
+ NurseRatched.run_all_healthchecks.entrySet.each do |result|
42
+ result.getValue.isHealthy.should be_false
43
+ result.getValue.getMessage.should == "Too Many Tacos!"
44
+ end
45
+ end
46
+
47
+ it "should return an unhealthy if the check raises an error" do
48
+ NurseRatched.status = "dead"
49
+ NurseRatched.run_all_healthchecks.entrySet.each do |result|
50
+ result.getValue.isHealthy.should be_false
51
+ result.getValue.getMessage.should == "Pants"
52
+ end
53
+ end
54
+
55
+ end
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+
3
+ describe Simple::Metrics do
4
+ class Rdio
5
+ extend Simple::Metrics::Meter
6
+
7
+ define_meter :bump_meter
8
+
9
+ def bump_dat
10
+ bump_meter.mark
11
+ end
12
+ end
13
+
14
+ let(:rdio) { Rdio.new }
15
+
16
+ it "should increment a meter" do
17
+ rdio.bump_dat
18
+ rdio.bump_meter.count.should == 1
19
+ end
20
+ end
@@ -0,0 +1,29 @@
1
+ require_relative '../spec_helper'
2
+
3
+ describe Simple::Metrics::Timer do
4
+ context "setting a metrics timer" do
5
+ class Samovar
6
+ include Simple::Metrics
7
+ attr_accessor :tea_timer
8
+
9
+ def make_tea
10
+ timer("tea time") do |tea_timer|
11
+ @tea_timer = tea_timer
12
+ "Brewing..."
13
+ end
14
+ end
15
+ end
16
+
17
+ let(:samovar) { Samovar.new }
18
+
19
+ it "should yield a new timer to the block" do
20
+ samovar.make_tea
21
+ samovar.tea_timer.count.should_not be_zero
22
+ end
23
+
24
+ it "should create a new timer" do
25
+ samovar.make_tea
26
+ samovar.tea_timer.should be_a_kind_of(Java::ComYammerMetricsCore::Timer)
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,13 @@
1
+ # This file was generated by the `rspec --init` command. Conventionally, all
2
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
+ # Require this file using `require "spec_helper.rb"` to ensure that it is only
4
+ # loaded once.
5
+ #
6
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
7
+ RSpec.configure do |config|
8
+ config.treat_symbols_as_metadata_keys_with_true_values = true
9
+ config.run_all_when_everything_filtered = true
10
+ config.filter_run :focus
11
+ end
12
+
13
+ require 'simple/metrics'
metadata ADDED
@@ -0,0 +1,182 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: kb-simple-metrics
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.12
6
+ platform: java
7
+ authors:
8
+ - dan herrera
9
+ - james pozdena
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2013-05-14 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rspec
17
+ version_requirements: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - ">="
20
+ - !ruby/object:Gem::Version
21
+ version: !binary |-
22
+ MA==
23
+ none: false
24
+ requirement: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ version: !binary |-
29
+ MA==
30
+ none: false
31
+ prerelease: false
32
+ type: :development
33
+ - !ruby/object:Gem::Dependency
34
+ name: rake
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: !binary |-
40
+ MA==
41
+ none: false
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: !binary |-
47
+ MA==
48
+ none: false
49
+ prerelease: false
50
+ type: :development
51
+ - !ruby/object:Gem::Dependency
52
+ name: yard
53
+ version_requirements: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: !binary |-
58
+ MA==
59
+ none: false
60
+ requirement: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: !binary |-
65
+ MA==
66
+ none: false
67
+ prerelease: false
68
+ type: :development
69
+ - !ruby/object:Gem::Dependency
70
+ name: kramdown
71
+ version_requirements: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: !binary |-
76
+ MA==
77
+ none: false
78
+ requirement: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: !binary |-
83
+ MA==
84
+ none: false
85
+ prerelease: false
86
+ type: :development
87
+ description: A simple JRuby wrapper around codahale's metrics package
88
+ email:
89
+ - dan@simple.com
90
+ executables: []
91
+ extensions: []
92
+ extra_rdoc_files: []
93
+ files:
94
+ - ".gitignore"
95
+ - ".rspec"
96
+ - Gemfile
97
+ - LICENSE
98
+ - README.md
99
+ - Rakefile
100
+ - doc/NurseRatched.html
101
+ - doc/Rdio.html
102
+ - doc/Samovar.html
103
+ - doc/Simple.html
104
+ - doc/Simple/Metrics.html
105
+ - doc/Simple/Metrics/Check.html
106
+ - doc/Simple/Metrics/Graphite.html
107
+ - doc/Simple/Metrics/HEALTHY.html
108
+ - doc/Simple/Metrics/Health.html
109
+ - doc/Simple/Metrics/Healthchecks.html
110
+ - doc/Simple/Metrics/Meter.html
111
+ - doc/Simple/Metrics/RackMetrics.html
112
+ - doc/Simple/Metrics/Timer.html
113
+ - doc/Simple/Metrics/UNHEALTHY.html
114
+ - doc/Simple/Metrics/WARNING.html
115
+ - doc/_index.html
116
+ - doc/class_list.html
117
+ - doc/css/common.css
118
+ - doc/css/full_list.css
119
+ - doc/css/style.css
120
+ - doc/file.README.html
121
+ - doc/file_list.html
122
+ - doc/frames.html
123
+ - doc/index.html
124
+ - doc/js/app.js
125
+ - doc/js/full_list.js
126
+ - doc/js/jquery.js
127
+ - doc/method_list.html
128
+ - doc/top-level-namespace.html
129
+ - lib/java/jackson-core-asl-1.9.5.jar
130
+ - lib/java/jackson-mapper-asl-1.9.5.jar
131
+ - lib/java/metrics-core-2.1.1.jar
132
+ - lib/java/metrics-graphite-2.1.1.jar
133
+ - lib/java/metrics-servlet-2.1.1.jar
134
+ - lib/java/slf4j-api-1.6.4.jar
135
+ - lib/simple.rb
136
+ - lib/simple/metrics.rb
137
+ - lib/simple/metrics/graphite.rb
138
+ - lib/simple/metrics/health.rb
139
+ - lib/simple/metrics/healthcheck.rb
140
+ - lib/simple/metrics/meter.rb
141
+ - lib/simple/metrics/rack_metrics.rb
142
+ - lib/simple/metrics/timer.rb
143
+ - lib/simple/version.rb
144
+ - simple-metrics.gemspec
145
+ - spec/metrics/graphite_spec.rb
146
+ - spec/metrics/healthcheck_spec.rb
147
+ - spec/metrics/meter_spec.rb
148
+ - spec/metrics/timer_spec.rb
149
+ - spec/spec_helper.rb
150
+ homepage: https://github.com/SimpleFinance/simple-metrics
151
+ licenses: []
152
+ post_install_message:
153
+ rdoc_options: []
154
+ require_paths:
155
+ - lib
156
+ required_ruby_version: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ version: !binary |-
161
+ MA==
162
+ none: false
163
+ required_rubygems_version: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - ">="
166
+ - !ruby/object:Gem::Version
167
+ version: !binary |-
168
+ MA==
169
+ none: false
170
+ requirements: []
171
+ rubyforge_project:
172
+ rubygems_version: 1.8.24
173
+ signing_key:
174
+ specification_version: 3
175
+ summary: MEASURE ALL THE THINGS!
176
+ test_files:
177
+ - spec/metrics/graphite_spec.rb
178
+ - spec/metrics/healthcheck_spec.rb
179
+ - spec/metrics/meter_spec.rb
180
+ - spec/metrics/timer_spec.rb
181
+ - spec/spec_helper.rb
182
+ has_rdoc: