graphite_client 0.3.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,5 +1,22 @@
1
+ # graphite_client #
2
+
3
+ ## About ##
4
+
1
5
  Very simple ruby client for reporting metrics to [Graphite](http://graphite.wikidot.com/).
2
6
 
3
- Original code taken from a Gist created by [joakimk](https://github.com/joakimk).
4
- https://gist.github.com/1678399
7
+ [Original code](https://gist.github.com/1678399) taken from a Gist by [joakimk](https://github.com/joakimk/).
8
+
9
+ ## Usage ##
10
+
11
+ ### Reporting the standard way, over TCP ###
12
+
13
+ graphite = GraphiteClient.new('graphite_host')
14
+ graphite.report('metric name', value, time)
15
+ graphite.report('another metric name', another_value, another_time)
16
+
17
+ ### Reporting [events](https://code.launchpad.net/~lucio.torre/graphite/add-events/+merge/69142) ###
18
+
19
+ graphite_event = GraphiteClient::EventReporter.new('http://graphite_host/events/')
20
+ graphite_event.report(:what => 'an event', :tags => ['some', 'tags'], :data => 'some info')
5
21
 
22
+ * When reporting an event, you can (optionally) pass `:basic_auth => { :username => 'un', :password => 'pw' }` to the `GraphiteClient::EventReporter` constructor.
data/Rakefile CHANGED
@@ -20,7 +20,8 @@ Jeweler::Tasks.new do |gem|
20
20
  gem.summary = %Q{Very simple ruby client for graphite.}
21
21
  gem.description = %Q{Original code by https://github.com/joakimk.}
22
22
  gem.email = "alex@crackpot.org"
23
- gem.authors = ["Alex Dean"]
23
+ gem.authors = ["Alex Dean", "Matthew Trost"]
24
+ gem.require_paths = ["lib", "lib/graphite_client"]
24
25
  # dependencies defined in Gemfile
25
26
  end
26
27
  Jeweler::RubygemsDotOrgTasks.new
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.0
1
+ 0.4.1
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "graphite_client"
8
- s.version = "0.3.0"
8
+ s.version = "0.4.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Alex Dean"]
12
- s.date = "2012-11-10"
11
+ s.authors = ["Alex Dean", "Matthew Trost"]
12
+ s.date = "2012-12-14"
13
13
  s.description = "Original code by https://github.com/joakimk."
14
14
  s.email = "alex@crackpot.org"
15
15
  s.extra_rdoc_files = [
@@ -27,12 +27,14 @@ Gem::Specification.new do |s|
27
27
  "VERSION",
28
28
  "graphite_client.gemspec",
29
29
  "lib/graphite_client.rb",
30
+ "lib/graphite_client/event_reporter.rb",
31
+ "spec/event_reporter_spec.rb",
30
32
  "spec/graphite_client_spec.rb",
31
33
  "spec/spec_helper.rb"
32
34
  ]
33
35
  s.homepage = "http://github.com/tedconf/graphite_client"
34
36
  s.licenses = ["MIT"]
35
- s.require_paths = ["lib"]
37
+ s.require_paths = ["lib", "lib/graphite_client"]
36
38
  s.rubygems_version = "1.8.24"
37
39
  s.summary = "Very simple ruby client for graphite."
38
40
 
@@ -27,3 +27,5 @@ class GraphiteClient
27
27
  @socket = nil
28
28
  end
29
29
  end
30
+
31
+ require 'graphite_client/event_reporter'
@@ -0,0 +1,27 @@
1
+ require 'json'
2
+ require 'net/http'
3
+ require 'net/https'
4
+
5
+ class GraphiteClient
6
+ class EventReporter
7
+ def initialize(graphite_server_events_url, opts={})
8
+ uri = URI(graphite_server_events_url)
9
+ @http = Net::HTTP.new(uri.host, uri.port)
10
+ @req = Net::HTTP::Post.new(uri.request_uri)
11
+
12
+ @http.use_ssl = true if uri.scheme == 'https'
13
+
14
+ if opts[:basic_auth]
15
+ username = opts[:basic_auth][:username]
16
+ password = opts[:basic_auth][:password]
17
+ @req.basic_auth(username, password)
18
+ end
19
+ end
20
+
21
+ def report(event={})
22
+ event[:tags] = Array(event[:tags]).join(',')
23
+ @req.body = event.to_json
24
+ @http.request(@req)
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,67 @@
1
+ require 'graphite_client'
2
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
3
+
4
+ describe "GraphiteClient::EventReporter" do
5
+ before do
6
+ @url = 'http://example.com/path'
7
+ @uri = URI(@url)
8
+ @https_url = 'https://example.com/path'
9
+ @https_uri = URI(@https_url)
10
+ @event = {:what => 'test', :tags => 'test', :data => 'test'}
11
+ @basic_auth = {:username => 'test', :password => 'test'}
12
+ end
13
+
14
+ it "should create an HTTP connection and POST to it" do
15
+ Net::HTTP.should_receive(:new).with(@uri.host, @uri.port).and_return(http = mock())
16
+ Net::HTTP::Post.should_receive(:new).with(@uri.request_uri).and_return(req = mock())
17
+ req.should_receive(:body=).with(@event.to_json)
18
+ http.should_receive(:request).with(req)
19
+ event_reporter = GraphiteClient::EventReporter.new(@url)
20
+ event_reporter.report(@event)
21
+ end
22
+
23
+ it "should reuse the same HTTP connection" do
24
+ Net::HTTP.should_receive(:new).with(@uri.host, @uri.port).and_return(http = mock())
25
+ Net::HTTP::Post.should_receive(:new).with(@uri.request_uri).and_return(req = mock())
26
+ req.should_receive(:body=).twice.with(@event.to_json)
27
+ http.should_receive(:request).twice.with(req)
28
+ event_reporter = GraphiteClient::EventReporter.new(@url)
29
+ event_reporter.report(@event)
30
+ event_reporter.report(@event)
31
+ end
32
+
33
+ context "with basic auth" do
34
+ it "should create an HTTP connection and POST to it, using basic auth" do
35
+ Net::HTTP.should_receive(:new).with(@uri.host, @uri.port).and_return(http = mock())
36
+ Net::HTTP::Post.should_receive(:new).with(@uri.request_uri).and_return(req = mock())
37
+ req.should_receive(:basic_auth).with(@basic_auth[:username], @basic_auth[:password])
38
+ req.should_receive(:body=).with(@event.to_json)
39
+ http.should_receive(:request).with(req)
40
+ event_reporter = GraphiteClient::EventReporter.new(@url, basic_auth: @basic_auth)
41
+ event_reporter.report(@event)
42
+ end
43
+ end
44
+
45
+ context "over SSL" do
46
+ it "should create an HTTPS connection and POST to it" do
47
+ Net::HTTP.should_receive(:new).with(@https_uri.host, @https_uri.port).and_return(http = mock())
48
+ Net::HTTP::Post.should_receive(:new).with(@https_uri.request_uri).and_return(req = mock())
49
+ http.should_receive(:use_ssl=).with(true)
50
+ req.should_receive(:body=).with(@event.to_json)
51
+ http.should_receive(:request).with(req)
52
+ event_reporter = GraphiteClient::EventReporter.new(@https_url)
53
+ event_reporter.report(@event)
54
+ end
55
+
56
+ it "should create an HTTPS connection and POST to it, using basic auth" do
57
+ Net::HTTP.should_receive(:new).with(@https_uri.host, @https_uri.port).and_return(http = mock())
58
+ Net::HTTP::Post.should_receive(:new).with(@https_uri.request_uri).and_return(req = mock())
59
+ http.should_receive(:use_ssl=).with(true)
60
+ req.should_receive(:basic_auth).with(@basic_auth[:username], @basic_auth[:password])
61
+ req.should_receive(:body=).with(@event.to_json)
62
+ http.should_receive(:request).with(req)
63
+ event_reporter = GraphiteClient::EventReporter.new(@https_url, basic_auth: @basic_auth)
64
+ event_reporter.report(@event)
65
+ end
66
+ end
67
+ end
metadata CHANGED
@@ -1,15 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: graphite_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Alex Dean
9
+ - Matthew Trost
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2012-11-10 00:00:00.000000000 Z
13
+ date: 2012-12-14 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: rspec
@@ -93,6 +94,8 @@ files:
93
94
  - VERSION
94
95
  - graphite_client.gemspec
95
96
  - lib/graphite_client.rb
97
+ - lib/graphite_client/event_reporter.rb
98
+ - spec/event_reporter_spec.rb
96
99
  - spec/graphite_client_spec.rb
97
100
  - spec/spec_helper.rb
98
101
  homepage: http://github.com/tedconf/graphite_client
@@ -102,6 +105,7 @@ post_install_message:
102
105
  rdoc_options: []
103
106
  require_paths:
104
107
  - lib
108
+ - lib/graphite_client
105
109
  required_ruby_version: !ruby/object:Gem::Requirement
106
110
  none: false
107
111
  requirements:
@@ -110,7 +114,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
110
114
  version: '0'
111
115
  segments:
112
116
  - 0
113
- hash: -2039767072647927840
117
+ hash: 654855312543279234
114
118
  required_rubygems_version: !ruby/object:Gem::Requirement
115
119
  none: false
116
120
  requirements: