copperegg 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # gems dependencies should be in copperegg.gemspec
4
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,14 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ copperegg (0.0.0)
5
+
6
+ GEM
7
+ remote: http://rubygems.org/
8
+ specs:
9
+
10
+ PLATFORMS
11
+ ruby
12
+
13
+ DEPENDENCIES
14
+ copperegg!
data/LICENSE ADDED
@@ -0,0 +1,19 @@
1
+ Copyright (c) 2012 CopperEgg Corporation.
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,79 @@
1
+ # CopperEgg Gem
2
+ The CopperEgg gem allows programmatic access to the CopperEgg API.
3
+
4
+
5
+ ## Usage
6
+
7
+ ### Requirements
8
+
9
+ ## Install
10
+
11
+ Via rubygems.org:
12
+
13
+ ```
14
+ $ gem install copperegg-ruby
15
+ ```
16
+
17
+ To build and install the development branch yourself from the latest source:
18
+
19
+ ```
20
+ $ git clone git@github.com:copperegg/copperegg-ruby.git
21
+ $ cd copperegg-ruby
22
+ $ git checkout develop
23
+ $ gem build copperegg.gemspec
24
+ $ gem install copperegg-{version}.gem
25
+ ```
26
+
27
+ ## Getting Started
28
+
29
+ ### Setup
30
+
31
+ ``` ruby
32
+ require 'rubygems' # not necessary with ruby 1.9 but included for completeness
33
+ require 'copperegg'
34
+
35
+ # Get a Metrics object:
36
+ apikey = 'sdf87xxxxxxxxxxxxxxxxxxxxx' # from the web UI
37
+ metrics = CopperEgg::Metrics.new(apikey)
38
+ ```
39
+
40
+ ### Get a metrics group:
41
+
42
+ ``` ruby
43
+ group_name = "my_new_metrics_group"
44
+ mg = metrics.metric_group(group_name)
45
+ ```
46
+
47
+ ### Create a metric group:
48
+
49
+ ``` ruby
50
+ group_name = "this_is_a_new_group"
51
+ groupcfg = {}
52
+ groupcfg["name"] = group_name
53
+ groupcfg["label"] = "Cool New Group Visible Name"
54
+ groupcfg["frequency"] = "60" # data is sent every 60s
55
+ groupcfg["metrics"] = [{"type"=>"ce_gauge", "name"=>"active_connections", "unit"=>"Connections"},
56
+ {"type"=>"ce_gauge", "name"=>"connections_accepts", "unit"=>"Connections"},
57
+ {"type"=>"ce_gauge", "name"=>"connections_handled", "unit"=>"Connections"},
58
+ {"type"=>"ce_gauge", "name"=>"connections_requested", "unit"=>"Connections"},
59
+ {"type"=>"ce_gauge", "name"=>"reading", "unit"=>"Connections"},
60
+ {"type"=>"ce_gauge", "name"=>"writing", "unit"=>"Connections"},
61
+ {"type"=>"ce_gauge", "name"=>"waiting", "unit"=>"Connections"}
62
+ ]
63
+
64
+ res = metrics.create_metric_group(group_name, groupcfg)
65
+ ```
66
+
67
+ ## Questions / Problems?
68
+
69
+
70
+ There are more detailed examples in the included [examples][examples]
71
+ directory.
72
+
73
+ Full [API docs][docs] are available.
74
+
75
+ [examples]:https://github.com/copperegg/copperegg-ruby/blob/master/examples
76
+ [docs]:http://dev.copperegg.com
77
+
78
+ ## Copyright
79
+ Copyright 2012 CopperEgg - See LICENSE for details.
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
data/copperegg.gemspec ADDED
@@ -0,0 +1,26 @@
1
+ require './lib/copperegg/ver'
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = 'copperegg'
5
+ s.version = CopperEgg::GEM_VERSION
6
+ s.author = 'Eric Anderson'
7
+ s.email = 'anderson@copperegg.com'
8
+
9
+ s.description = 'Library for using the CopperEgg REST API'
10
+ s.summary = 'Library for using the CopperEgg REST API'
11
+ s.homepage = 'http://github.com/copperegg/copperegg-ruby'
12
+ s.license = '???'
13
+
14
+ s.platform = Gem::Platform::RUBY
15
+ s.require_paths = %w[lib]
16
+ s.files = Dir["#{File.dirname(__FILE__)}/**/*"]
17
+ s.test_files = Dir.glob("{test,spec,features}/*")
18
+ s.executables = Dir.glob("bin/*")
19
+ s.add_dependency('multi_json', '>= 1.3.0')
20
+ #...
21
+
22
+ #s.add_development_dependency 'rake', '~> 0.9.0'
23
+
24
+ #s.extra_rdoc_files = ['README.md', 'LICENSE']
25
+ s.rdoc_options = ['--line-numbers', '--inline-source', '--title', 'copperegg-ruby', '--main', 'README.md']
26
+ end
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'copperegg'
4
+ require 'redis'
5
+ require 'getoptlong'
6
+
7
+ apikey = "asdadasdasd"
8
+
9
+ rm = CopperEgg::Metrics.new(apikey)
10
+
11
+ puts rm.apikey
12
+
13
+ metrics = {}
14
+ time = Time.now.to_i
15
+
16
+ rm.store(metrics, time, "my_group_name")
17
+
18
+ data = rm.samples(time-300, time, "my_group_name", "metric_foo")
19
+
data/lib/copperegg.rb ADDED
@@ -0,0 +1,16 @@
1
+ require 'copperegg/metrics'
2
+ require 'copperegg/util'
3
+ require 'net/http'
4
+ require 'uri'
5
+
6
+ API_VERSION = 'v2'
7
+ DEFAULTS = {
8
+ :apihost => 'https://api.copperegg.com',
9
+ :ssl_verify_peer => false,
10
+ #:ssl_ca_file => File.dirname(__FILE__) + '/../../../conf/cacert.pem',
11
+ :timeout => 10
12
+ }
13
+
14
+ module CopperEgg
15
+
16
+ end
@@ -0,0 +1,79 @@
1
+ module CopperEgg
2
+ class Metrics
3
+
4
+ attr_accessor :apikey
5
+
6
+ def initialize(apikey, apihost=nil)
7
+ @apikey = apikey
8
+ @util = CopperEgg::Util.new(@apikey, "revealmetrics", apihost)
9
+ end
10
+
11
+ def store_sample(group_name, identifier, timestamp, metric_data)
12
+ return if identifier.nil?
13
+ return if group_name.nil?
14
+ return if timestamp.nil? || timestamp == 0
15
+ return if metric_data.nil?
16
+
17
+ payload = {}
18
+ payload["timestamp"] = timestamp
19
+ payload["identifier"] = identifier
20
+ payload["values"] = metric_data
21
+
22
+ response = @util.make_api_post_request("/samples/#{group_name}.json", @apikey, payload)
23
+ return
24
+ end
25
+
26
+ def samples(starttime, endtime, group_name, metricname)
27
+ samples = @util.make_api_get_request("/samples.json", @apikey, nil)
28
+ return samples
29
+ end
30
+
31
+ def metric_groups
32
+ # return an array of metric groups
33
+ mgroup = @util.make_api_get_request("/metric_groups.json", @apikey, nil)
34
+ return mgroup
35
+ end
36
+
37
+ def metric_group(group_name)
38
+ mgroup = @util.make_api_get_request("/metric_groups/#{group_name}.json", @apikey, nil)
39
+ return mgroup
40
+ end
41
+
42
+ def metric_names(group_name)
43
+ # return an array of metric names in a metric group
44
+ mgroup = self.metric_group(group_name)
45
+ if !mgroup.nil?
46
+ # go through each and add to array
47
+
48
+
49
+ end
50
+ puts "NOT YET IMPLEMENTED"
51
+ end
52
+
53
+ def create_metric_group(group_name, group_definition)
54
+ response = @util.make_api_post_request("/metric_groups.json", @apikey, group_definition)
55
+ end
56
+
57
+ def dashboard(dashboard_name)
58
+ dashes = @util.make_api_get_request("/dashboards.json", @apikey, nil)
59
+ return nil if dashes.nil?
60
+
61
+ dashboards = JSON.parse(dashes.body)
62
+ dashboards.each do |dash|
63
+ if dash["name"] == dashboard_name
64
+ return dash
65
+ end
66
+ end
67
+
68
+ return nil
69
+ end
70
+
71
+ def create_dashboard(dashcfg)
72
+ response = @util.make_api_post_request("/dashboards.json", @apikey, dashcfg)
73
+ end
74
+
75
+ private
76
+
77
+
78
+ end
79
+ end
@@ -0,0 +1,62 @@
1
+ require 'multi_json'
2
+
3
+ module CopperEgg
4
+ class Util
5
+
6
+ attr_accessor :apikey
7
+
8
+ def initialize(apikey, product, apihost=nil)
9
+ @apikey = apikey
10
+ @product = product
11
+ if apihost
12
+ @apihost = apihost
13
+ else
14
+ @apihost = DEFAULTS[:apihost]
15
+ end
16
+ end
17
+
18
+ def make_api_get_request(api_cmd, apikey, params)
19
+ response = make_api_request("get", api_cmd, apikey, params)
20
+ return response
21
+ end
22
+
23
+ def make_api_post_request(api_cmd, apikey, body)
24
+ response = make_api_request("post", api_cmd, apikey, body)
25
+ return response
26
+ end
27
+
28
+ private
29
+
30
+ def make_uri(api_cmd)
31
+ return URI.parse("#{@apihost}/#{API_VERSION}/#{@product}#{api_cmd}")
32
+ end
33
+
34
+ def make_api_request(type, api_cmd, apikey, params)
35
+ request = nil
36
+ uri = make_uri(api_cmd)
37
+ http = Net::HTTP.new(uri.host, uri.port)
38
+
39
+ http.use_ssl = uri.scheme == 'https'
40
+ if !DEFAULTS[:ssl_verify_peer]
41
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
42
+ end
43
+
44
+ if type == "get"
45
+ uri.query = URI.encode_www_form(params) if !params.nil?
46
+ request = Net::HTTP::Get.new(uri.request_uri)
47
+ else
48
+ request = Net::HTTP::Post.new(uri.request_uri)
49
+ request.body = MultiJson.dump(params)
50
+ end
51
+
52
+ request.basic_auth(apikey, "U")
53
+ request["Content-Type"] = "application/json"
54
+ response = http.request(request)
55
+ if response.code != "200"
56
+ return nil
57
+ end
58
+ return response
59
+ end
60
+
61
+ end
62
+ end
@@ -0,0 +1,3 @@
1
+ module CopperEgg
2
+ GEM_VERSION = '0.5.1'
3
+ end
File without changes
Binary file
Binary file
metadata ADDED
@@ -0,0 +1,98 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: copperegg
3
+ version: !ruby/object:Gem::Version
4
+ hash: 9
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 5
9
+ - 1
10
+ version: 0.5.1
11
+ platform: ruby
12
+ authors:
13
+ - Eric Anderson
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2012-11-15 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: multi_json
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ hash: 27
29
+ segments:
30
+ - 1
31
+ - 3
32
+ - 0
33
+ version: 1.3.0
34
+ type: :runtime
35
+ version_requirements: *id001
36
+ description: Library for using the CopperEgg REST API
37
+ email: anderson@copperegg.com
38
+ executables: []
39
+
40
+ extensions: []
41
+
42
+ extra_rdoc_files: []
43
+
44
+ files:
45
+ - ./copperegg.gemspec
46
+ - ./examples/example.rb
47
+ - ./Gemfile
48
+ - ./Gemfile.lock
49
+ - ./lib/copperegg/metrics.rb
50
+ - ./lib/copperegg/util.rb
51
+ - ./lib/copperegg/ver.rb
52
+ - ./lib/copperegg.rb
53
+ - ./lib/test/test_copperegg.rb
54
+ - ./LICENSE
55
+ - ./pkg/copperegg-0.0.0.gem
56
+ - ./pkg/copperegg-0.5.0.gem
57
+ - ./Rakefile
58
+ - ./README.md
59
+ homepage: http://github.com/copperegg/copperegg-ruby
60
+ licenses:
61
+ - ???
62
+ post_install_message:
63
+ rdoc_options:
64
+ - --line-numbers
65
+ - --inline-source
66
+ - --title
67
+ - copperegg-ruby
68
+ - --main
69
+ - README.md
70
+ require_paths:
71
+ - lib
72
+ required_ruby_version: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ hash: 3
78
+ segments:
79
+ - 0
80
+ version: "0"
81
+ required_rubygems_version: !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ hash: 3
87
+ segments:
88
+ - 0
89
+ version: "0"
90
+ requirements: []
91
+
92
+ rubyforge_project:
93
+ rubygems_version: 1.8.24
94
+ signing_key:
95
+ specification_version: 3
96
+ summary: Library for using the CopperEgg REST API
97
+ test_files: []
98
+