dogapi 1.22.0 → 1.23.0
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 +4 -4
- data/.gitignore +1 -0
- data/.rspec +1 -1
- data/.rubocop.yml +13 -0
- data/.travis.yml +3 -1
- data/CHANGELOG.md +16 -1
- data/Gemfile +6 -3
- data/README.rdoc +1 -1
- data/Rakefile +8 -15
- data/lib/capistrano/datadog.rb +12 -12
- data/lib/capistrano/datadog/v2.rb +5 -5
- data/lib/capistrano/datadog/v3.rb +9 -4
- data/lib/dogapi/common.rb +43 -39
- data/lib/dogapi/event.rb +4 -4
- data/lib/dogapi/facade.rb +57 -54
- data/lib/dogapi/metric.rb +2 -2
- data/lib/dogapi/v1/alert.rb +17 -80
- data/lib/dogapi/v1/comment.rb +8 -39
- data/lib/dogapi/v1/dash.rb +20 -67
- data/lib/dogapi/v1/embed.rb +11 -57
- data/lib/dogapi/v1/event.rb +37 -72
- data/lib/dogapi/v1/metric.rb +17 -46
- data/lib/dogapi/v1/monitor.rb +54 -194
- data/lib/dogapi/v1/screenboard.rb +8 -77
- data/lib/dogapi/v1/search.rb +5 -11
- data/lib/dogapi/v1/service_check.rb +6 -15
- data/lib/dogapi/v1/snapshot.rb +10 -15
- data/lib/dogapi/v1/tag.rb +39 -99
- data/lib/dogapi/v1/user.rb +15 -69
- data/lib/dogapi/version.rb +1 -1
- data/spec/integration/alert_spec.rb +48 -0
- data/spec/integration/comment_spec.rb +32 -0
- data/spec/integration/common_spec.rb +32 -0
- data/spec/integration/dash_spec.rb +60 -0
- data/spec/integration/embed_spec.rb +43 -0
- data/spec/integration/event_spec.rb +73 -0
- data/spec/integration/metric_spec.rb +96 -0
- data/spec/integration/monitor_spec.rb +106 -0
- data/spec/integration/screenboard_spec.rb +61 -0
- data/spec/integration/search_spec.rb +11 -0
- data/spec/integration/service_check_spec.rb +12 -0
- data/spec/integration/snapshot_spec.rb +24 -0
- data/spec/integration/tag_spec.rb +66 -0
- data/spec/integration/user_spec.rb +46 -0
- data/spec/spec_helper.rb +85 -16
- data/spec/unit/common_spec.rb +101 -0
- data/spec/unit/facade_spec.rb +79 -0
- metadata +55 -52
- data/spec/alerts_spec.rb +0 -33
- data/spec/common_spec.rb +0 -37
- data/spec/facade_spec.rb +0 -166
- data/spec/support/cassettes/Alerts/create/returns_HTTP_code_200.yml +0 -114
- data/spec/support/cassettes/Alerts/create/returns_a_valid_event_ID.yml +0 -114
- data/spec/support/cassettes/Alerts/create/returns_the_same_query_as_sent.yml +0 -114
- data/spec/support/cassettes/Facade/Events/emits_aggregate_events.yml +0 -193
- data/spec/support/cassettes/Facade/Events/emits_events_and_retrieves_them.yml +0 -100
- data/spec/support/cassettes/Facade/Events/emits_events_with_specified_priority.yml +0 -98
- data/spec/support/cassettes/Facade/Tags/adds_updates_and_detaches_tags.yml +0 -442
- data/tests/test_alerts.rb +0 -38
- data/tests/test_base.rb +0 -30
- data/tests/test_client.rb +0 -23
- data/tests/test_comments.rb +0 -39
- data/tests/test_dashes.rb +0 -85
- data/tests/test_embed.rb +0 -194
- data/tests/test_monitors.rb +0 -192
- data/tests/test_screenboard.rb +0 -90
- data/tests/test_search.rb +0 -20
- data/tests/test_snapshot.rb +0 -28
- data/tests/test_users.rb +0 -65
data/lib/dogapi/v1/snapshot.rb
CHANGED
@@ -5,23 +5,18 @@ module Dogapi
|
|
5
5
|
|
6
6
|
class SnapshotService < Dogapi::APIService
|
7
7
|
|
8
|
-
API_VERSION =
|
8
|
+
API_VERSION = 'v1'
|
9
9
|
|
10
10
|
def snapshot(metric_query, start_ts, end_ts, event_query=nil)
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
request(Net::HTTP::Get, "/api/#{API_VERSION}/graph/snapshot", params, nil, false)
|
22
|
-
rescue Exception => e
|
23
|
-
suppress_error_if_silent e
|
24
|
-
end
|
11
|
+
extra_params = {
|
12
|
+
:metric_query => metric_query,
|
13
|
+
:start => start_ts,
|
14
|
+
:end => end_ts,
|
15
|
+
}
|
16
|
+
|
17
|
+
extra_params[:event_query] = event_query if event_query
|
18
|
+
|
19
|
+
request(Net::HTTP::Get, "/api/#{API_VERSION}/graph/snapshot", extra_params, nil, false)
|
25
20
|
end
|
26
21
|
|
27
22
|
end
|
data/lib/dogapi/v1/tag.rb
CHANGED
@@ -3,136 +3,76 @@ require 'dogapi'
|
|
3
3
|
module Dogapi
|
4
4
|
class V1 # for namespacing
|
5
5
|
|
6
|
-
#
|
6
|
+
#
|
7
7
|
class TagService < Dogapi::APIService
|
8
8
|
|
9
|
-
API_VERSION =
|
9
|
+
API_VERSION = 'v1'
|
10
10
|
|
11
11
|
# Gets all tags in your org and the hosts tagged with them
|
12
12
|
def get_all(source=nil)
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
:application_key => @application_key
|
17
|
-
}
|
18
|
-
if source
|
19
|
-
params['source'] = source
|
20
|
-
end
|
21
|
-
|
22
|
-
request(Net::HTTP::Get, '/api/' + API_VERSION + '/tags/hosts', params, nil, false)
|
23
|
-
rescue Exception => e
|
24
|
-
if @silent
|
25
|
-
warn e
|
26
|
-
return -1, {}
|
27
|
-
else
|
28
|
-
raise e
|
29
|
-
end
|
13
|
+
extra_params = {}
|
14
|
+
if source
|
15
|
+
extra_params['source'] = source
|
30
16
|
end
|
17
|
+
|
18
|
+
request(Net::HTTP::Get, '/api/' + API_VERSION + '/tags/hosts', extra_params, nil, false)
|
31
19
|
end
|
32
20
|
|
33
21
|
# Gets all tags for a given host
|
34
22
|
def get(host_id, source=nil, by_source=false)
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
params['source'] = source
|
42
|
-
end
|
43
|
-
if by_source
|
44
|
-
params['by_source'] = 'true'
|
45
|
-
end
|
46
|
-
|
47
|
-
request(Net::HTTP::Get, '/api/' + API_VERSION + '/tags/hosts/' + host_id.to_s, params, nil, false)
|
48
|
-
rescue Exception => e
|
49
|
-
if @silent
|
50
|
-
warn e
|
51
|
-
return -1, {}
|
52
|
-
else
|
53
|
-
raise e
|
54
|
-
end
|
23
|
+
extra_params = {}
|
24
|
+
if source
|
25
|
+
extra_params['source'] = source
|
26
|
+
end
|
27
|
+
if by_source
|
28
|
+
extra_params['by_source'] = 'true'
|
55
29
|
end
|
30
|
+
|
31
|
+
request(Net::HTTP::Get, '/api/' + API_VERSION + '/tags/hosts/' + host_id.to_s, extra_params, nil, false)
|
56
32
|
end
|
57
33
|
|
58
34
|
# Adds a list of tags to a host
|
59
35
|
def add(host_id, tags, source=nil)
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
:application_key => @application_key
|
64
|
-
}
|
65
|
-
if source
|
66
|
-
params['source'] = source
|
67
|
-
end
|
68
|
-
|
69
|
-
body = {
|
70
|
-
:tags => tags
|
71
|
-
}
|
72
|
-
|
73
|
-
request(Net::HTTP::Post, '/api/' + API_VERSION + '/tags/hosts/' + host_id.to_s, params, body, true)
|
74
|
-
rescue Exception => e
|
75
|
-
if @silent
|
76
|
-
warn e
|
77
|
-
return -1, {}
|
78
|
-
else
|
79
|
-
raise e
|
80
|
-
end
|
36
|
+
extra_params = {}
|
37
|
+
if source
|
38
|
+
extra_params['source'] = source
|
81
39
|
end
|
40
|
+
|
41
|
+
body = {
|
42
|
+
:tags => tags
|
43
|
+
}
|
44
|
+
|
45
|
+
request(Net::HTTP::Post, '/api/' + API_VERSION + '/tags/hosts/' + host_id.to_s, extra_params, body, true)
|
82
46
|
end
|
83
47
|
|
84
48
|
# Remove all tags from a host and replace them with a new list
|
85
49
|
def update(host_id, tags, source=nil)
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
:application_key => @application_key
|
90
|
-
}
|
91
|
-
if source
|
92
|
-
params['source'] = source
|
93
|
-
end
|
94
|
-
|
95
|
-
body = {
|
96
|
-
:tags => tags
|
97
|
-
}
|
98
|
-
|
99
|
-
request(Net::HTTP::Put, '/api/' + API_VERSION + '/tags/hosts/' + host_id.to_s, params, body, true)
|
100
|
-
rescue Exception => e
|
101
|
-
if @silent
|
102
|
-
warn e
|
103
|
-
return -1, {}
|
104
|
-
else
|
105
|
-
raise e
|
106
|
-
end
|
50
|
+
extra_params = {}
|
51
|
+
if source
|
52
|
+
extra_params['source'] = source
|
107
53
|
end
|
54
|
+
|
55
|
+
body = {
|
56
|
+
:tags => tags
|
57
|
+
}
|
58
|
+
|
59
|
+
request(Net::HTTP::Put, '/api/' + API_VERSION + '/tags/hosts/' + host_id.to_s, extra_params, body, true)
|
108
60
|
end
|
109
61
|
|
110
62
|
# <b>DEPRECATED:</b> Spelling mistake temporarily preserved as an alias.
|
111
63
|
def detatch(host_id)
|
112
|
-
warn
|
64
|
+
warn '[DEPRECATION] Dogapi::V1::TagService.detatch() is deprecated. Use `detach` instead.'
|
113
65
|
detach(host_id)
|
114
66
|
end
|
115
67
|
|
116
68
|
# Remove all tags from a host
|
117
69
|
def detach(host_id, source=nil)
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
:application_key => @application_key
|
122
|
-
}
|
123
|
-
if source
|
124
|
-
params['source'] = source
|
125
|
-
end
|
126
|
-
|
127
|
-
request(Net::HTTP::Delete, '/api/' + API_VERSION + '/tags/hosts/' + host_id.to_s, params, nil, false)
|
128
|
-
rescue Exception => e
|
129
|
-
if @silent
|
130
|
-
warn e
|
131
|
-
return -1, {}
|
132
|
-
else
|
133
|
-
raise e
|
134
|
-
end
|
70
|
+
extra_params = {}
|
71
|
+
if source
|
72
|
+
extra_params['source'] = source
|
135
73
|
end
|
74
|
+
|
75
|
+
request(Net::HTTP::Delete, '/api/' + API_VERSION + '/tags/hosts/' + host_id.to_s, extra_params, nil, false)
|
136
76
|
end
|
137
77
|
|
138
78
|
end
|
data/lib/dogapi/v1/user.rb
CHANGED
@@ -5,72 +5,36 @@ module Dogapi
|
|
5
5
|
|
6
6
|
class UserService < Dogapi::APIService
|
7
7
|
|
8
|
-
API_VERSION =
|
8
|
+
API_VERSION = 'v1'
|
9
9
|
|
10
10
|
# <b>DEPRECATED:</b> Going forward, we're using a new and more restful API,
|
11
11
|
# the new methods are get_user, create_user, update_user, disable_user
|
12
|
-
def invite(emails, options
|
13
|
-
warn
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
:application_key => @application_key
|
18
|
-
}
|
12
|
+
def invite(emails, options= {})
|
13
|
+
warn '[DEPRECATION] Dogapi::V1::UserService::invite has been deprecated in favor of Dogapi::V1::UserService::create_user'
|
14
|
+
body = {
|
15
|
+
'emails' => emails,
|
16
|
+
}.merge options
|
19
17
|
|
20
|
-
|
21
|
-
'emails' => emails,
|
22
|
-
}.merge options
|
23
|
-
|
24
|
-
request(Net::HTTP::Post, "/api/#{API_VERSION}/invite_users", params, body, true)
|
25
|
-
rescue Exception => e
|
26
|
-
suppress_error_if_silent e
|
27
|
-
end
|
18
|
+
request(Net::HTTP::Post, "/api/#{API_VERSION}/invite_users", nil, body, true)
|
28
19
|
end
|
29
20
|
|
30
21
|
# Create a user
|
31
22
|
#
|
32
23
|
# :description => Hash: user description containing 'handle' and 'name' properties
|
33
|
-
def create_user(description
|
34
|
-
|
35
|
-
params = {
|
36
|
-
:api_key => @api_key,
|
37
|
-
:application_key => @application_key
|
38
|
-
}
|
39
|
-
|
40
|
-
request(Net::HTTP::Post, "/api/#{API_VERSION}/user", params, description, true)
|
41
|
-
rescue Exception => e
|
42
|
-
suppress_error_if_silent e
|
43
|
-
end
|
24
|
+
def create_user(description= {})
|
25
|
+
request(Net::HTTP::Post, "/api/#{API_VERSION}/user", nil, description, true)
|
44
26
|
end
|
45
27
|
|
46
28
|
# Retrieve user information
|
47
29
|
#
|
48
30
|
# :handle => String: user handle
|
49
31
|
def get_user(handle)
|
50
|
-
|
51
|
-
params = {
|
52
|
-
:api_key => @api_key,
|
53
|
-
:application_key => @application_key
|
54
|
-
}
|
55
|
-
|
56
|
-
request(Net::HTTP::Get, "/api/#{API_VERSION}/user/#{handle}", params, nil, false)
|
57
|
-
rescue Exception => e
|
58
|
-
suppress_error_if_silent e
|
59
|
-
end
|
32
|
+
request(Net::HTTP::Get, "/api/#{API_VERSION}/user/#{handle}", nil, nil, false)
|
60
33
|
end
|
61
34
|
|
62
35
|
# Retrieve all users
|
63
|
-
def get_all_users
|
64
|
-
|
65
|
-
params = {
|
66
|
-
:api_key => @api_key,
|
67
|
-
:application_key => @application_key
|
68
|
-
}
|
69
|
-
|
70
|
-
request(Net::HTTP::Get, "/api/#{API_VERSION}/user", params, nil, false)
|
71
|
-
rescue Exception => e
|
72
|
-
suppress_error_if_silent e
|
73
|
-
end
|
36
|
+
def get_all_users
|
37
|
+
request(Net::HTTP::Get, "/api/#{API_VERSION}/user", nil, nil, false)
|
74
38
|
end
|
75
39
|
|
76
40
|
# Update a user
|
@@ -78,33 +42,15 @@ module Dogapi
|
|
78
42
|
# :handle => String: user handle
|
79
43
|
# :description => Hash: user description optionally containing 'name', 'email',
|
80
44
|
# 'is_admin', 'disabled' properties
|
81
|
-
def update_user(handle, description
|
82
|
-
|
83
|
-
params = {
|
84
|
-
:api_key => @api_key,
|
85
|
-
:application_key => @application_key
|
86
|
-
}
|
87
|
-
|
88
|
-
request(Net::HTTP::Put, "/api/#{API_VERSION}/user/#{handle}", params, description, true)
|
89
|
-
rescue Exception => e
|
90
|
-
suppress_error_if_silent e
|
91
|
-
end
|
45
|
+
def update_user(handle, description= {})
|
46
|
+
request(Net::HTTP::Put, "/api/#{API_VERSION}/user/#{handle}", nil, description, true)
|
92
47
|
end
|
93
48
|
|
94
49
|
# Disable a user
|
95
50
|
#
|
96
51
|
# :handle => String: user handle
|
97
52
|
def disable_user(handle)
|
98
|
-
|
99
|
-
params = {
|
100
|
-
:api_key => @api_key,
|
101
|
-
:application_key => @application_key
|
102
|
-
}
|
103
|
-
|
104
|
-
request(Net::HTTP::Delete, "/api/#{API_VERSION}/user/#{handle}", params, nil, false)
|
105
|
-
rescue Exception => e
|
106
|
-
suppress_error_if_silent e
|
107
|
-
end
|
53
|
+
request(Net::HTTP::Delete, "/api/#{API_VERSION}/user/#{handle}", nil, nil, false)
|
108
54
|
end
|
109
55
|
|
110
56
|
end
|
data/lib/dogapi/version.rb
CHANGED
@@ -0,0 +1,48 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
|
3
|
+
describe Dogapi::Client do
|
4
|
+
ALERT_ID = 42
|
5
|
+
QUERY = 'avg(last_10m):avg:test.metric.metric{host:test.metric.host} > 5'.freeze
|
6
|
+
|
7
|
+
describe '#alert' do
|
8
|
+
it_behaves_like 'an api method with options',
|
9
|
+
:alert, [QUERY],
|
10
|
+
:post, '/alert', 'query' => QUERY
|
11
|
+
end
|
12
|
+
|
13
|
+
describe '#update_alert' do
|
14
|
+
it_behaves_like 'an api method with options',
|
15
|
+
:update_alert, [ALERT_ID, QUERY],
|
16
|
+
:put, "/alert/#{ALERT_ID}", 'query' => QUERY
|
17
|
+
end
|
18
|
+
|
19
|
+
describe '#get_alert' do
|
20
|
+
it_behaves_like 'an api method',
|
21
|
+
:get_alert, [ALERT_ID],
|
22
|
+
:get, "/alert/#{ALERT_ID}"
|
23
|
+
end
|
24
|
+
|
25
|
+
describe '#delete_alert' do
|
26
|
+
it_behaves_like 'an api method',
|
27
|
+
:delete_alert, [ALERT_ID],
|
28
|
+
:delete, "/alert/#{ALERT_ID}"
|
29
|
+
end
|
30
|
+
|
31
|
+
describe '#get_all_alerts' do
|
32
|
+
it_behaves_like 'an api method',
|
33
|
+
:get_all_alerts, [],
|
34
|
+
:get, '/alert'
|
35
|
+
end
|
36
|
+
|
37
|
+
describe '#mute_alerts' do
|
38
|
+
it_behaves_like 'an api method',
|
39
|
+
:mute_alerts, [], :post,
|
40
|
+
'/mute_alerts'
|
41
|
+
end
|
42
|
+
|
43
|
+
describe '#unmute_alerts' do
|
44
|
+
it_behaves_like 'an api method',
|
45
|
+
:unmute_alerts, [],
|
46
|
+
:post, '/unmute_alerts'
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require_relative '../spec_helper'
|
3
|
+
|
4
|
+
describe Dogapi::Client do
|
5
|
+
COMMENT_ID = 4242
|
6
|
+
MESSAGE = 'this is an example message: éè'.freeze
|
7
|
+
|
8
|
+
describe '#comment' do
|
9
|
+
it_behaves_like 'an api method with options',
|
10
|
+
:comment, [MESSAGE],
|
11
|
+
:post, '/comments', 'message' => MESSAGE
|
12
|
+
end
|
13
|
+
|
14
|
+
describe '#update_comment' do
|
15
|
+
it 'queries the api with options' do
|
16
|
+
url = api_url + "/comments/#{COMMENT_ID}"
|
17
|
+
options = { 'zzz' => 'aaa' }
|
18
|
+
stub_request(:put, /#{url}/).to_return(body: '{}').then.to_raise(StandardError)
|
19
|
+
expect(dog.send(:update_comment, COMMENT_ID, options)).to eq ['200', {}]
|
20
|
+
|
21
|
+
expect(WebMock).to have_requested(:put, url).with(
|
22
|
+
query: default_query
|
23
|
+
)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe '#delete_comment' do
|
28
|
+
it_behaves_like 'an api method',
|
29
|
+
:delete_comment, [COMMENT_ID],
|
30
|
+
:delete, "/comments/#{COMMENT_ID}"
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
|
3
|
+
describe Dogapi::APIService do
|
4
|
+
describe '#connect' do
|
5
|
+
let(:url) { api_url + '/awesome' }
|
6
|
+
let(:second_url) { 'http://app.example.com/api/v1/awesome' }
|
7
|
+
|
8
|
+
context 'when only the default endpoint is used' do
|
9
|
+
let(:service) { Dogapi::APIService.new api_key, app_key }
|
10
|
+
context 'and it is up' do
|
11
|
+
it 'only queries one endpoint' do
|
12
|
+
stub_request(:get, /#{url}/).to_return(body: '{}').then.to_raise(StandardError)
|
13
|
+
expect(service.request(Net::HTTP::Get, '/api/v1/awesome', nil, nil, true, true)).to eq(['200', {}])
|
14
|
+
|
15
|
+
expect(WebMock).to have_requested(:get, url).with(
|
16
|
+
query: default_query
|
17
|
+
)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
context 'and it is down' do
|
21
|
+
it 'only queries one endpoint' do
|
22
|
+
stub_request(:get, /#{url}/).to_timeout
|
23
|
+
expect(service.request(Net::HTTP::Get, '/api/v1/awesome', nil, nil, true, true)).to eq([-1, {}])
|
24
|
+
|
25
|
+
expect(WebMock).to have_requested(:get, url).with(
|
26
|
+
query: default_query
|
27
|
+
)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|