metrics-java 0.0.1
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.
- data/.gitignore +4 -0
- data/Gemfile +4 -0
- data/README.md +41 -0
- data/Rakefile +19 -0
- data/lib/metrics-java.rb +41 -0
- data/lib/metrics-java/base_mixin.rb +24 -0
- data/lib/metrics-java/jars/log4j-1.2.16.jar +0 -0
- data/lib/metrics-java/jars/metrics-core-3.0.0-SNAPSHOT.jar +0 -0
- data/lib/metrics-java/jars/metrics-log4j-3.0.0-SNAPSHOT.jar +0 -0
- data/lib/metrics-java/meter.rb +39 -0
- data/lib/metrics-java/version.rb +3 -0
- data/metrics-java.gemspec +24 -0
- data/spec/metrics-java/lib/metrics-java/meter_spec.rb +29 -0
- data/spec/spec_helper.rb +12 -0
- data/spec/support/custom_matchers.rb +54 -0
- metadata +92 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
# Metrics
|
2
|
+
|
3
|
+
This is a primitive JRuby wrapper around [Coda Hale's Metrics library](https://github.com/codahale/metrics). It is very incomplete and still a work in progress. Feedback is appreciated.
|
4
|
+
|
5
|
+
# How to Use
|
6
|
+
|
7
|
+
Somewhere during the initialization of your app, you should set the name of your app. If you do not, it will default to "MyProject"
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
MetricsJ.app_name = "Foo App"
|
11
|
+
```
|
12
|
+
|
13
|
+
You can view the metrics that your app is collecting by running `jconsole` from the command line. Select your JRuby app and navigate to the "MBeans" tab.
|
14
|
+
|
15
|
+
## Meters
|
16
|
+
|
17
|
+
```ruby
|
18
|
+
class Foo
|
19
|
+
extend MetricsJ::Meter
|
20
|
+
|
21
|
+
meter :bar
|
22
|
+
|
23
|
+
def baz
|
24
|
+
bar_meter.mark
|
25
|
+
# Do something...
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
```
|
30
|
+
|
31
|
+
# Todo
|
32
|
+
|
33
|
+
Most everything, still:
|
34
|
+
|
35
|
+
- Gauges
|
36
|
+
- Counters
|
37
|
+
- Histograms
|
38
|
+
- Timers
|
39
|
+
- Health Checks
|
40
|
+
|
41
|
+
In addition, there will be a Rails and a Sinatra/Padrino plugin that will hopefully hide most of these details.
|
data/Rakefile
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
require "bundler/gem_tasks"
|
3
|
+
|
4
|
+
require 'rspec'
|
5
|
+
require 'rspec/core'
|
6
|
+
require 'rspec/core/rake_task'
|
7
|
+
|
8
|
+
desc "Run Specs"
|
9
|
+
RSpec::Core::RakeTask.new(:spec) do |spec|
|
10
|
+
spec.pattern = "spec/**/*_spec.rb"
|
11
|
+
spec.verbose = true
|
12
|
+
spec.rspec_opts = ['--color']
|
13
|
+
end
|
14
|
+
|
15
|
+
task :consumer_email => :build do
|
16
|
+
require 'exact_target/version'
|
17
|
+
|
18
|
+
`cp pkg/exact_target-#{ExactTarget::VERSION}.gem ../consumer_email/vendor/cache/`
|
19
|
+
end
|
data/lib/metrics-java.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
Dir[ File.join(File.expand_path(__FILE__), '../metrics-java/jars/*.jar') ].each { |fi| require fi }
|
2
|
+
|
3
|
+
require 'slf4j'
|
4
|
+
require 'metrics-java/jars/log4j-1.2.16.jar'
|
5
|
+
require 'metrics-java/jars/metrics-core-3.0.0-SNAPSHOT.jar'
|
6
|
+
require 'metrics-java/jars/metrics-log4j-3.0.0-SNAPSHOT.jar'
|
7
|
+
|
8
|
+
require 'metrics-java/meter'
|
9
|
+
require 'metrics-java/version'
|
10
|
+
|
11
|
+
module MetricsJ
|
12
|
+
java_import 'java.util.concurrent.TimeUnit'
|
13
|
+
java_import 'com.yammer.metrics.Metrics'
|
14
|
+
java_import 'com.yammer.metrics.core.MetricName'
|
15
|
+
|
16
|
+
class << self
|
17
|
+
attr_accessor :app_name
|
18
|
+
|
19
|
+
def app_name
|
20
|
+
@app_name || "MyProject"
|
21
|
+
end
|
22
|
+
|
23
|
+
def time_unit_seconds
|
24
|
+
TimeUnit::SECONDS
|
25
|
+
end
|
26
|
+
|
27
|
+
# @param [String] group
|
28
|
+
# @param [String] type
|
29
|
+
# @param [String] name
|
30
|
+
# @param [optional, String] scope
|
31
|
+
# @return [com.yammer.metrics.core.MetricName]
|
32
|
+
def create_metric_name(group, type, name, scope=nil)
|
33
|
+
if scope
|
34
|
+
MetricName.new(group, type, name, scope)
|
35
|
+
else
|
36
|
+
MetricName.new(group, type, name)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'metrics-java'
|
2
|
+
|
3
|
+
module MetricsJ
|
4
|
+
module BaseMixin
|
5
|
+
attr_writer :metric_group, :metric_type
|
6
|
+
attr_accessor :metric_name
|
7
|
+
|
8
|
+
# @return [String] The group name to use for the metrics being collected
|
9
|
+
def metric_group
|
10
|
+
@metric_group ||= MetricsJ.app_name
|
11
|
+
end
|
12
|
+
|
13
|
+
# @return [String] The group name to use for the metrics being collected
|
14
|
+
def metric_type
|
15
|
+
@metrics_type ||= self.name
|
16
|
+
end
|
17
|
+
|
18
|
+
# @return [com.yammer.metrics.core.MetricName] The MetricName that describes where the Metric data lives in JMX
|
19
|
+
# @see MetricsJ.create_metric_name
|
20
|
+
def metric_name
|
21
|
+
@metric_name ||= MetricsJ.create_metric_name(metric_group, metric_type, metric_name)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'metrics-java'
|
2
|
+
require 'metrics-java/base_mixin'
|
3
|
+
|
4
|
+
module MetricsJ
|
5
|
+
module Meter
|
6
|
+
java_import 'java.util.concurrent.TimeUnit'
|
7
|
+
java_import 'com.yammer.metrics.Metrics'
|
8
|
+
|
9
|
+
def self.extended(base)
|
10
|
+
base.instance_exec {
|
11
|
+
extend MetricsJ::BaseMixin
|
12
|
+
include MetricsJ::Meter::InstanceMethods
|
13
|
+
}
|
14
|
+
end
|
15
|
+
|
16
|
+
# @param [Symbol, String] meter_name The name of the meter
|
17
|
+
# @return [com.yammer.metrics.core.MetricName] The MetricName that describes where the Metric data lives in JMX
|
18
|
+
# @see MetricsJ.create_metric_name
|
19
|
+
def meter(meter_name)
|
20
|
+
scoped_name = "#{meter_name}_meter"
|
21
|
+
metric_name = MetricsJ.create_metric_name(metric_group, metric_type, meter_name.to_s)
|
22
|
+
|
23
|
+
new_meter = Metrics.new_meter(metric_name, meter_name.to_s, MetricsJ.time_unit_seconds)
|
24
|
+
|
25
|
+
define_method(scoped_name) { new_meter }
|
26
|
+
|
27
|
+
new_meter
|
28
|
+
end
|
29
|
+
|
30
|
+
def meters(*meter_names)
|
31
|
+
meter_names.map!{ |meter_name| meter(meter_name) }
|
32
|
+
end
|
33
|
+
|
34
|
+
module InstanceMethods
|
35
|
+
# @todo
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "metrics-java/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "metrics-java"
|
7
|
+
s.version = MetricsJ::VERSION
|
8
|
+
s.authors = ["Scott Gonyea"]
|
9
|
+
s.email = ["sgonyea@truecar.com"]
|
10
|
+
s.homepage = ""
|
11
|
+
s.summary = %q{JRuby wrapper around Coda's Metrics Library}
|
12
|
+
s.description = %q{A JRuby wrapper around Coda Hale's Metrics Library}
|
13
|
+
|
14
|
+
s.rubyforge_project = "metrics-java"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
s.add_runtime_dependency "slf4j"
|
22
|
+
|
23
|
+
s.add_development_dependency "rspec"
|
24
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MetricsJ::Meter do
|
4
|
+
class MeterTest
|
5
|
+
extend MetricsJ::Meter
|
6
|
+
|
7
|
+
meter :foo
|
8
|
+
meters :baz, 'bar'
|
9
|
+
end
|
10
|
+
|
11
|
+
context "DSL" do
|
12
|
+
describe '.meter' do
|
13
|
+
it "should expose instance methods" do
|
14
|
+
meter_test = MeterTest.new
|
15
|
+
|
16
|
+
meter_test.foo_meter.should be_a com.yammer.metrics.core.Meter
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '.meters' do
|
21
|
+
it "should expose instance methods" do
|
22
|
+
meter_test = MeterTest.new
|
23
|
+
|
24
|
+
meter_test.baz_meter.should be_a com.yammer.metrics.core.Meter
|
25
|
+
meter_test.bar_meter.should be_a com.yammer.metrics.core.Meter
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'bundler/setup'
|
2
|
+
|
3
|
+
Bundler.require :default, :development, :test
|
4
|
+
|
5
|
+
require 'metrics-java'
|
6
|
+
|
7
|
+
# Pull in the support files
|
8
|
+
Dir[ Bundler.root.join("spec/support/**/*.rb") ].each{|f| require f}
|
9
|
+
|
10
|
+
RSpec.configure do |c|
|
11
|
+
c.include CustomMatchers
|
12
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module CustomMatchers
|
2
|
+
class BeWellFormed
|
3
|
+
attr_writer :errors
|
4
|
+
|
5
|
+
def errors
|
6
|
+
@errors ||= []
|
7
|
+
end
|
8
|
+
|
9
|
+
def matches?(files)
|
10
|
+
self.errors = files.dup
|
11
|
+
|
12
|
+
errors.map! do |filename|
|
13
|
+
file = File.read(filename).encode!("UTF-8")
|
14
|
+
|
15
|
+
next unless file.valid_encoding?
|
16
|
+
|
17
|
+
[ check_for_tabs(filename, file), excessive_spacing(filename, file), newline_precedes_eof(filename, file) ]
|
18
|
+
end
|
19
|
+
|
20
|
+
errors.flatten!
|
21
|
+
errors.compact!
|
22
|
+
|
23
|
+
errors.empty?
|
24
|
+
end
|
25
|
+
|
26
|
+
def failure_message_for_should
|
27
|
+
errors.join("\n")
|
28
|
+
end
|
29
|
+
|
30
|
+
def check_for_tabs(filename, file)
|
31
|
+
bad_lines = file.lines.each_with_index.map do |line, line_no|
|
32
|
+
line_no + 1 if line["\t"] and line !~ /^\s+#.*\s+\n$/
|
33
|
+
end.flatten.compact
|
34
|
+
|
35
|
+
"#{filename} has tab characters on lines #{bad_lines.join(', ')}" if bad_lines.any?
|
36
|
+
end
|
37
|
+
|
38
|
+
def excessive_spacing(filename, file)
|
39
|
+
bad_lines = file.lines.each_with_index.map do |line, line_no|
|
40
|
+
line_no + 1 if line =~ /\s+\n$/ and line !~ /^\s+#.*\s+\n$/
|
41
|
+
end.flatten.compact
|
42
|
+
|
43
|
+
"#{filename} has spaces on the EOL on lines #{bad_lines.join(', ')}" if bad_lines.any?
|
44
|
+
end
|
45
|
+
|
46
|
+
def newline_precedes_eof(filename, file)
|
47
|
+
"#{filename} does not have a newline (\\n) before EOF" if file !~ /\n$/
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def be_well_formed
|
52
|
+
BeWellFormed.new
|
53
|
+
end
|
54
|
+
end
|
metadata
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: metrics-java
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.0.1
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Scott Gonyea
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2012-03-25 00:00:00 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: slf4j
|
17
|
+
prerelease: false
|
18
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
19
|
+
none: false
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0"
|
24
|
+
type: :runtime
|
25
|
+
version_requirements: *id001
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: rspec
|
28
|
+
prerelease: false
|
29
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
30
|
+
none: false
|
31
|
+
requirements:
|
32
|
+
- - ">="
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: "0"
|
35
|
+
type: :development
|
36
|
+
version_requirements: *id002
|
37
|
+
description: A JRuby wrapper around Coda Hale's Metrics Library
|
38
|
+
email:
|
39
|
+
- sgonyea@truecar.com
|
40
|
+
executables: []
|
41
|
+
|
42
|
+
extensions: []
|
43
|
+
|
44
|
+
extra_rdoc_files: []
|
45
|
+
|
46
|
+
files:
|
47
|
+
- .gitignore
|
48
|
+
- Gemfile
|
49
|
+
- README.md
|
50
|
+
- Rakefile
|
51
|
+
- lib/metrics-java.rb
|
52
|
+
- lib/metrics-java/base_mixin.rb
|
53
|
+
- lib/metrics-java/jars/log4j-1.2.16.jar
|
54
|
+
- lib/metrics-java/jars/metrics-core-3.0.0-SNAPSHOT.jar
|
55
|
+
- lib/metrics-java/jars/metrics-log4j-3.0.0-SNAPSHOT.jar
|
56
|
+
- lib/metrics-java/meter.rb
|
57
|
+
- lib/metrics-java/version.rb
|
58
|
+
- metrics-java.gemspec
|
59
|
+
- spec/metrics-java/lib/metrics-java/meter_spec.rb
|
60
|
+
- spec/spec_helper.rb
|
61
|
+
- spec/support/custom_matchers.rb
|
62
|
+
homepage: ""
|
63
|
+
licenses: []
|
64
|
+
|
65
|
+
post_install_message:
|
66
|
+
rdoc_options: []
|
67
|
+
|
68
|
+
require_paths:
|
69
|
+
- lib
|
70
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
71
|
+
none: false
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: "0"
|
76
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
77
|
+
none: false
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: "0"
|
82
|
+
requirements: []
|
83
|
+
|
84
|
+
rubyforge_project: metrics-java
|
85
|
+
rubygems_version: 1.8.9
|
86
|
+
signing_key:
|
87
|
+
specification_version: 3
|
88
|
+
summary: JRuby wrapper around Coda's Metrics Library
|
89
|
+
test_files:
|
90
|
+
- spec/metrics-java/lib/metrics-java/meter_spec.rb
|
91
|
+
- spec/spec_helper.rb
|
92
|
+
- spec/support/custom_matchers.rb
|