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 ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in metrics-java.gemspec
4
+ gemspec
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
@@ -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
@@ -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,3 @@
1
+ module MetricsJ
2
+ VERSION = "0.0.1"
3
+ 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
@@ -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