newrelic-metrics 0.0.4 → 0.1.01

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/newrelic-metrics.rb +76 -43
  3. metadata +55 -21
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: bc497481ce38d254f1f8a3188f2901390160bbfe
4
+ data.tar.gz: 83906f78d545be5a46376c44950dba36613eb35b
5
+ SHA512:
6
+ metadata.gz: 7be5c3706c40e88e2ab52fac74006418e18aa83fb2a5e74ac92512b03194ffd39cd0a1372b29e172ac30c9e595b57ceda7e236ec096a95c36ad11b6e952cb83a
7
+ data.tar.gz: cde7e16dc50eb7f71cf3b4b10b7701e5bcd92c41cca3ccef9fc211f04842f21e0d3d3cb493d6576494cfaa1576608fb381a058f9a7719e914ed9ecfdc2da5c77
@@ -3,63 +3,96 @@ require 'json'
3
3
  require 'uri'
4
4
  require 'chronic'
5
5
 
6
- class NewRelicMetrics
7
- BASE = 'https://api.newrelic.com/v2'
8
-
9
- def initialize(api_key,ids={})
10
- @api_key = api_key
11
- raise ArgumentError, "Need to define either an application or server id" if ids.keys.length!=1
12
- raise ArgumentError, "#{ids.keys.first} must be `application` or `server`" if ids.keys.first != :server && ids.keys.first != :application
13
- @resource = "#{ids.keys.first}s"
14
- @resource_id = ids.values.first
6
+ module NewRelicMetrics
7
+ class Configuration
8
+ attr_accessor :api_key
9
+ def initialize(api_key:nil,&block)
10
+ @api_key=api_key
11
+ yield(self) if block
12
+ end
15
13
  end
16
14
 
17
- def names
18
- get("metrics")
15
+ class << self
16
+ attr_accessor :configuration
19
17
  end
20
18
 
21
- def summarize(metrics={},range={})
22
- throw ArgumentError, "Range must be an array with the from and to time" if range.length>2
23
-
24
- settings = {summarize:true}.merge(range)
19
+ def self.configure
20
+ self.configuration ||= Configuration.new
21
+ yield(configuration)
22
+ end
25
23
 
26
- metrics(metrics,settings)
24
+ class RequestFailed < StandardError
27
25
  end
28
26
 
29
- def metrics(metrics={},options={})
30
- query = ""
31
- conditions = []
27
+ class Client
28
+ BASE = 'https://api.newrelic.com/v2'
32
29
 
33
- names = metrics.keys
34
- values = metrics.values.flatten
30
+ def initialize(config=nil)
31
+ @config = config || NewRelicMetrics.configuration
35
32
 
36
- names.each {|name| conditions << "names[]=#{URI.encode(name)}" }
37
- values.each {|val| conditions << "values[]=#{URI.encode(val)}" }
33
+ raise ArgumentError, "No API Key is configured" unless @config && @config.api_key
34
+ end
38
35
 
39
- if options[:from]
40
- from_time = Chronic.parse(options[:from], context: :past)
41
- to_time = Chronic.parse(options[:to]) if options[:to]
42
- to_time ||= Time.now
43
- if from_time
44
- conditions << "from=#{from_time.getlocal('+00:00').iso8601}"
45
- conditions << "to=#{to_time.getlocal('+00:00').iso8601}"
46
- end
36
+ def names(application:nil, server:nil)
37
+ raise ArgumentError, "Need to define either an application or server id" unless application || server
38
+ raise ArgumentError, "Need to define either an application or server id, but not both" if application && server
39
+ resource = application ? 'applications' : 'servers'
40
+ resource_id = application || server
41
+ get(resource, resource_id, "metrics")
47
42
  end
48
43
 
49
- conditions << "summarize=true" if options[:summarize]
44
+ def metrics(application:nil, server:nil, metrics:, range:{}, summarize: false)
45
+ if range && range!={}
46
+ raise ArgumentError, "Range must only contain a :to and :from time" unless range.keys.all?{|k| k==:to || k==:from }
47
+ raise ArgumentError, "Range must contain a :from time" unless range.keys.include?(:from)
48
+ end
50
49
 
51
- query = conditions.join('&')
52
- get("metrics/data",query)
53
- end
50
+ raise ArgumentError, "Need to define either an application or server id" unless application || server
51
+ raise ArgumentError, "Need to define either an application or server id, but not both" if application && server
52
+
53
+ resource = application ? 'applications' : 'servers'
54
+ resource_id = application || server
55
+
56
+ conditions = []
54
57
 
55
- private
58
+ metrics.keys.each {|name| conditions << "names[]=#{URI.encode(name)}" }
59
+ metrics.values.flatten.each {|val| conditions << "values[]=#{URI.encode(val)}" }
56
60
 
57
- def get(path,query=nil)
58
- uri = URI.parse('https://api.newrelic.com/')
59
- uri.path = "/v2/#{@resource}/#{@resource_id}/#{path}.json"
60
- uri.query = query if query && query != ""
61
+ if range[:from]
62
+ from_time = Chronic.parse(range[:from], context: :past)
63
+ to_time = Chronic.parse(range[:to]) if range[:to]
64
+ to_time ||= Time.now
65
+ if from_time
66
+ conditions << "from=#{from_time.getlocal('+00:00').iso8601}"
67
+ conditions << "to=#{to_time.getlocal('+00:00').iso8601}"
68
+ end
69
+ end
70
+
71
+ conditions << "summarize=true" if summarize
72
+
73
+ query = conditions.join('&')
74
+ get(resource, resource_id, "metrics/data", query)
75
+ end
76
+
77
+ private
61
78
 
62
- response = RestClient.get(uri.to_s,'X-Api-Key'=>@api_key)
63
- JSON.parse(response).values.first
79
+ def get(resource, resource_id, path, query=nil)
80
+ uri = URI.parse('https://api.newrelic.com/')
81
+ uri.path = "/v2/#{resource}/#{resource_id}/#{path}.json"
82
+ uri.query = query if query && query != ""
83
+
84
+ puts uri.to_s
85
+
86
+ begin
87
+ response = RestClient.get(uri.to_s,'X-Api-Key'=>@config.api_key)
88
+ rescue => ex
89
+ if ex.response
90
+ message = JSON.parse(ex.response).values.first['title']
91
+ raise RequestFailed, message
92
+ else
93
+ raise RequestFailed, ex.message
94
+ end
95
+ end
96
+ end
64
97
  end
65
- end
98
+ end
metadata CHANGED
@@ -1,64 +1,99 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: newrelic-metrics
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
5
- prerelease:
4
+ version: 0.1.01
6
5
  platform: ruby
7
6
  authors:
8
7
  - Maciej Skierkowski
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2014-10-14 00:00:00.000000000 Z
11
+ date: 2014-12-04 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rest-client
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ~>
17
+ - - "~>"
20
18
  - !ruby/object:Gem::Version
21
19
  version: 1.7.2
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ~>
24
+ - - "~>"
28
25
  - !ruby/object:Gem::Version
29
26
  version: 1.7.2
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: chronic
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ~>
31
+ - - "~>"
36
32
  - !ruby/object:Gem::Version
37
33
  version: 0.10.2
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ~>
38
+ - - "~>"
44
39
  - !ruby/object:Gem::Version
45
40
  version: 0.10.2
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: json
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ~>
45
+ - - "~>"
52
46
  - !ruby/object:Gem::Version
53
47
  version: 1.8.1
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ~>
52
+ - - "~>"
60
53
  - !ruby/object:Gem::Version
61
54
  version: 1.8.1
55
+ - !ruby/object:Gem::Dependency
56
+ name: codeclimate-test-reporter
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 0.3.0
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 0.3.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 3.1.0
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 3.1.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 10.3.2
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 10.3.2
62
97
  description:
63
98
  email:
64
99
  - maciej@factor.io
@@ -69,26 +104,25 @@ files:
69
104
  - lib/newrelic-metrics.rb
70
105
  homepage: https://factor.io
71
106
  licenses: []
107
+ metadata: {}
72
108
  post_install_message:
73
109
  rdoc_options: []
74
110
  require_paths:
75
111
  - lib
76
112
  required_ruby_version: !ruby/object:Gem::Requirement
77
- none: false
78
113
  requirements:
79
- - - ! '>='
114
+ - - ">="
80
115
  - !ruby/object:Gem::Version
81
116
  version: '0'
82
117
  required_rubygems_version: !ruby/object:Gem::Requirement
83
- none: false
84
118
  requirements:
85
- - - ! '>='
119
+ - - ">="
86
120
  - !ruby/object:Gem::Version
87
121
  version: '0'
88
122
  requirements: []
89
123
  rubyforge_project:
90
- rubygems_version: 1.8.25
124
+ rubygems_version: 2.2.2
91
125
  signing_key:
92
- specification_version: 3
126
+ specification_version: 4
93
127
  summary: Easily get metrics out of New Relic for your application or servers
94
128
  test_files: []