newrelic-metrics 0.0.4 → 0.1.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.
- checksums.yaml +15 -0
- data/lib/newrelic-metrics.rb +97 -43
- metadata +51 -17
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
MGM2ODJkNGE4MTk3ZWY3MmE3NDg5MmFiNzVmYTJkZDc3YWRlMjI1Nw==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
MTVmYzIzNDc3NjgzY2YxMDUwYjEwMTExYzZlY2ZhMDk4OWQwNzE3Zg==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
MDMxOGYxMWUxZDFkOGIyZWYxZGU3NWY1ZDBlZTQ5NzBmODI2NTk5ZTY2ZDY2
|
10
|
+
MTQ2ZmFlNjkwMDdhN2I5N2M1ZDM4NjVkYzczZDZlMjc0NGRiYzU2MjlkYzRh
|
11
|
+
MDljZjE2Y2Q1OTk0NGFlNGZkYWEyNzM5MTk5NDE2ODYzYmUyNDU=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
NGI2M2E0MjExZTBiOTk1ZmIyOTM1ZWU1N2FkNzY3NjNhZGYyY2ZkYjFiMDM4
|
14
|
+
Y2ZjY2EwNGNkMjhlZmVhZWVlODQxOThlNTViNDQxZDU5ZjI1ZjljMDlhMWI2
|
15
|
+
MzFkZDE3ZGNkOTUzYzQ3Y2VkZGYzMGQ4ODQ1NTgxZDEyN2UwYWM=
|
data/lib/newrelic-metrics.rb
CHANGED
@@ -3,63 +3,117 @@ require 'json'
|
|
3
3
|
require 'uri'
|
4
4
|
require 'chronic'
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
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(options={},&block)
|
10
|
+
@api_key=options[:api_key]
|
11
|
+
yield(self) if block
|
12
|
+
end
|
15
13
|
end
|
16
14
|
|
17
|
-
|
18
|
-
|
15
|
+
class << self
|
16
|
+
attr_accessor :configuration
|
19
17
|
end
|
20
18
|
|
21
|
-
def
|
22
|
-
|
23
|
-
|
24
|
-
|
19
|
+
def self.configure
|
20
|
+
self.configuration ||= Configuration.new
|
21
|
+
yield(configuration)
|
22
|
+
end
|
25
23
|
|
26
|
-
|
24
|
+
class RequestFailed < StandardError
|
27
25
|
end
|
28
26
|
|
29
|
-
|
30
|
-
|
31
|
-
conditions = []
|
27
|
+
class Client
|
28
|
+
BASE = 'https://api.newrelic.com/v2'
|
32
29
|
|
33
|
-
|
34
|
-
|
30
|
+
def initialize(config=nil)
|
31
|
+
@config = config || NewRelicMetrics.configuration
|
35
32
|
|
36
|
-
|
37
|
-
|
33
|
+
raise ArgumentError.new("No API Key is configured") unless @config && @config.api_key
|
34
|
+
end
|
38
35
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
if
|
44
|
-
|
45
|
-
|
46
|
-
|
36
|
+
def names(options)
|
37
|
+
application = options[:application]
|
38
|
+
server = options[:server]
|
39
|
+
raise ArgumentError.new("Need to define either an application or server id") unless application || server
|
40
|
+
raise ArgumentError.new("Need to define either an application or server id, but not both") if application && server
|
41
|
+
resource = application ? 'applications' : 'servers'
|
42
|
+
resource_id = application || server
|
43
|
+
get(resource, resource_id, "metrics")['metrics']
|
47
44
|
end
|
48
45
|
|
49
|
-
|
46
|
+
def metrics(options)
|
47
|
+
application = options[:application]
|
48
|
+
server = options[:server]
|
49
|
+
metrics = options[:metrics]
|
50
|
+
range = options[:range] || {}
|
51
|
+
summarize = options[:summarize] || false
|
50
52
|
|
51
|
-
|
52
|
-
|
53
|
-
|
53
|
+
raise ArgumentError.new("missing keyword: metrics") unless metrics
|
54
|
+
|
55
|
+
if range && range!={}
|
56
|
+
raise ArgumentError.new("Range must only contain a :to and :from time") unless range.keys.all?{|k| k==:to || k==:from }
|
57
|
+
raise ArgumentError.new("Range must contain a :from time") unless range.keys.include?(:from)
|
58
|
+
end
|
59
|
+
|
60
|
+
raise ArgumentError.new("Need to define either an application or server id") unless application || server
|
61
|
+
raise ArgumentError.new("Need to define either an application or server id, but not both") if application && server
|
62
|
+
|
63
|
+
raise ArgumentError.new("Metrics must be set") if !metrics || metrics=={}
|
64
|
+
raise ArgumentError.new("Metrics must be an hash") unless metrics.is_a?(Hash)
|
65
|
+
raise ArgumentError.new("Metric keys must be string") unless metrics.keys.all?{|k| k.is_a?(String)}
|
66
|
+
raise ArgumentError.new("Metric values must be arrays") unless metrics.values.all?{|k| k.is_a?(Array)}
|
67
|
+
raise ArgumentError.new("Metric values must be an array of strings") unless metrics.values.all?{|k| k.all?{|v| v.is_a?(String)} }
|
68
|
+
|
69
|
+
resource = application ? 'applications' : 'servers'
|
70
|
+
resource_id = application || server
|
54
71
|
|
55
|
-
|
72
|
+
conditions = []
|
56
73
|
|
57
|
-
|
58
|
-
|
59
|
-
uri.path = "/v2/#{@resource}/#{@resource_id}/#{path}.json"
|
60
|
-
uri.query = query if query && query != ""
|
74
|
+
metrics.keys.each {|name| conditions << "names[]=#{URI.encode(name)}" }
|
75
|
+
metrics.values.flatten.each {|val| conditions << "values[]=#{URI.encode(val)}" }
|
61
76
|
|
62
|
-
|
63
|
-
|
77
|
+
if range[:from]
|
78
|
+
from_time = range[:from].is_a?(String) ? Chronic.parse(range[:from], context: :past) : range[:from]
|
79
|
+
to_time = range[:to].is_a?(String) ? Chronic.parse(range[:to]) : range[:to] if range[:to]
|
80
|
+
to_time ||= Time.now
|
81
|
+
if from_time
|
82
|
+
conditions << "from=#{from_time.getlocal('+00:00').iso8601}"
|
83
|
+
conditions << "to=#{to_time.getlocal('+00:00').iso8601}"
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
conditions << "summarize=true" if summarize
|
88
|
+
|
89
|
+
query = conditions.join('&')
|
90
|
+
get(resource, resource_id, "metrics/data", query)['metric_data']
|
91
|
+
end
|
92
|
+
|
93
|
+
private
|
94
|
+
|
95
|
+
def get(resource, resource_id, path, query=nil)
|
96
|
+
uri = URI.parse('https://api.newrelic.com/')
|
97
|
+
uri.path = "/v2/#{resource}/#{resource_id}/#{path}.json"
|
98
|
+
uri.query = query if query && query != ""
|
99
|
+
|
100
|
+
begin
|
101
|
+
response = RestClient.get(uri.to_s,'X-Api-Key'=>@config.api_key)
|
102
|
+
rescue => ex
|
103
|
+
if ex.response
|
104
|
+
message = JSON.parse(ex.response).values.first['title']
|
105
|
+
raise RequestFailed, message
|
106
|
+
else
|
107
|
+
raise RequestFailed, ex.message
|
108
|
+
end
|
109
|
+
end
|
110
|
+
begin
|
111
|
+
content = JSON.parse(response)
|
112
|
+
rescue => ex
|
113
|
+
raise RequestFailed, ex.message
|
114
|
+
end
|
115
|
+
|
116
|
+
content
|
117
|
+
end
|
64
118
|
end
|
65
|
-
end
|
119
|
+
end
|
metadata
CHANGED
@@ -1,36 +1,32 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: newrelic-metrics
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.1.1
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Maciej Skierkowski
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2015-04-10 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
|
-
version: 1.
|
19
|
+
version: 1.8.0
|
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
|
-
version: 1.
|
26
|
+
version: 1.8.0
|
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
|
@@ -38,7 +34,6 @@ dependencies:
|
|
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
|
@@ -46,19 +41,59 @@ dependencies:
|
|
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
|
-
version: 1.8.
|
47
|
+
version: 1.8.2
|
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
|
-
version: 1.8.
|
54
|
+
version: 1.8.2
|
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.4.7
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ~>
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.4.7
|
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.2.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.2.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.4.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.4.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:
|
124
|
+
rubygems_version: 2.4.5
|
91
125
|
signing_key:
|
92
|
-
specification_version:
|
126
|
+
specification_version: 4
|
93
127
|
summary: Easily get metrics out of New Relic for your application or servers
|
94
128
|
test_files: []
|