dogapi 1.3.2 → 1.3.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +19 -1
- data/lib/dogapi/common.rb +2 -1
- data/lib/dogapi/event.rb +3 -3
- data/lib/dogapi/facade.rb +4 -4
- data/lib/dogapi/v1/event.rb +68 -41
- data/lib/dogapi/v1/metric.rb +35 -26
- data/lib/dogapi/v1/tag.rb +83 -38
- data/tests/test_client.rb +3 -1
- metadata +3 -3
data/README.rdoc
CHANGED
@@ -1,9 +1,18 @@
|
|
1
|
-
= Ruby client for Datadog API v1.3.
|
1
|
+
= Ruby client for Datadog API v1.3.2
|
2
2
|
|
3
3
|
The Ruby client is a library suitable for inclusion in existing Ruby projects or for development of standalone scripts. It provides an abstraction on top of Datadog's raw HTTP interface for reporting events and metrics.
|
4
4
|
|
5
5
|
= What's new?
|
6
6
|
|
7
|
+
== v1.3.2
|
8
|
+
|
9
|
+
* Support an aggregation key to aggregate events together
|
10
|
+
|
11
|
+
== v1.3.1
|
12
|
+
|
13
|
+
* Metrics can be counters, rather than just gauges (thanks to @treeder)
|
14
|
+
* Metrics can be tagged.
|
15
|
+
|
7
16
|
== v1.3.0
|
8
17
|
|
9
18
|
* Capistrano integration. See https://github.com/DataDog/dogapi-rb/tree/master/lib/capistrano
|
@@ -35,6 +44,15 @@ Gem page: https://rubygems.org/gems/dogapi
|
|
35
44
|
|
36
45
|
$ gem install dogapi
|
37
46
|
|
47
|
+
If you get a permission error, you might need to run the install process with sudo:
|
48
|
+
|
49
|
+
$ sudo gem install dogapi
|
50
|
+
|
51
|
+
If you get a LoadError, missing mkmf, you need to install the development packages for ruby.
|
52
|
+
|
53
|
+
$ # on ubuntu e.g.
|
54
|
+
$ sudo apt-get install ruby-dev
|
55
|
+
|
38
56
|
= Usage
|
39
57
|
|
40
58
|
== How to find your API and application keys
|
data/lib/dogapi/common.rb
CHANGED
@@ -73,10 +73,11 @@ module Dogapi
|
|
73
73
|
|
74
74
|
# Superclass that deals with the details of communicating with the DataDog API
|
75
75
|
class APIService
|
76
|
-
def initialize(api_key, application_key)
|
76
|
+
def initialize(api_key, application_key, silent=true)
|
77
77
|
@api_key = api_key
|
78
78
|
@application_key = application_key
|
79
79
|
@api_host = Dogapi.find_datadog_host()
|
80
|
+
@silent = silent
|
80
81
|
end
|
81
82
|
|
82
83
|
# Manages the HTTP connection
|
data/lib/dogapi/event.rb
CHANGED
@@ -52,9 +52,9 @@ module Dogapi
|
|
52
52
|
# Copy and pasted from the internets
|
53
53
|
# http://stackoverflow.com/a/5031637/25276
|
54
54
|
def to_hash
|
55
|
-
|
56
|
-
[var[1..-1].to_sym
|
57
|
-
|
55
|
+
hash = {}
|
56
|
+
instance_variables.each {|var| hash[var[1..-1].to_sym] = instance_variable_get(var) }
|
57
|
+
hash
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
data/lib/dogapi/facade.rb
CHANGED
@@ -11,7 +11,7 @@ module Dogapi
|
|
11
11
|
class Client
|
12
12
|
|
13
13
|
# Create a new Client optionally specifying a default host and device
|
14
|
-
def initialize(api_key, application_key=nil, host=nil, device=nil)
|
14
|
+
def initialize(api_key, application_key=nil, host=nil, device=nil, silent=true)
|
15
15
|
|
16
16
|
if api_key
|
17
17
|
@api_key = api_key
|
@@ -26,9 +26,9 @@ module Dogapi
|
|
26
26
|
@host = host
|
27
27
|
@device = device
|
28
28
|
|
29
|
-
@metric_svc = Dogapi::V1::MetricService.new(@api_key, @application_key)
|
30
|
-
@event_svc = Dogapi::V1::EventService.new(@api_key, @application_key)
|
31
|
-
@tag_svc = Dogapi::V1::TagService.new(@api_key, @application_key)
|
29
|
+
@metric_svc = Dogapi::V1::MetricService.new(@api_key, @application_key, silent)
|
30
|
+
@event_svc = Dogapi::V1::EventService.new(@api_key, @application_key, silent)
|
31
|
+
@tag_svc = Dogapi::V1::TagService.new(@api_key, @application_key, silent)
|
32
32
|
|
33
33
|
@legacy_event_svc = Dogapi::EventService.new(@datadog_host)
|
34
34
|
end
|
data/lib/dogapi/v1/event.rb
CHANGED
@@ -10,59 +10,86 @@ module Dogapi
|
|
10
10
|
|
11
11
|
# Records an Event with no duration
|
12
12
|
def post(event, scope=nil)
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
body = event.to_hash.merge({
|
19
|
-
:title => event.msg_title,
|
20
|
-
:text => event.msg_text,
|
21
|
-
:date_happened => event.date_happened.to_i,
|
22
|
-
:host => scope.host,
|
23
|
-
:device => scope.device,
|
24
|
-
:aggregation_key => event.aggregation_key.to_s
|
25
|
-
})
|
13
|
+
begin
|
14
|
+
scope = scope || Dogapi::Scope.new()
|
15
|
+
params = {
|
16
|
+
:api_key => @api_key
|
17
|
+
}
|
26
18
|
|
27
|
-
|
19
|
+
body = event.to_hash.merge({
|
20
|
+
:title => event.msg_title,
|
21
|
+
:text => event.msg_text,
|
22
|
+
:date_happened => event.date_happened.to_i,
|
23
|
+
:host => scope.host,
|
24
|
+
:device => scope.device,
|
25
|
+
:aggregation_key => event.aggregation_key.to_s
|
26
|
+
})
|
27
|
+
|
28
|
+
request(Net::HTTP::Post, '/api/v1/events', params, body, true)
|
29
|
+
rescue Exception => e
|
30
|
+
if @silent
|
31
|
+
warn e
|
32
|
+
return -1, {}
|
33
|
+
else
|
34
|
+
raise e
|
35
|
+
end
|
36
|
+
end
|
28
37
|
end
|
29
38
|
|
30
39
|
def get(id)
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
40
|
+
begin
|
41
|
+
params = {
|
42
|
+
:api_key => @api_key,
|
43
|
+
:application_key => @application_key
|
44
|
+
}
|
35
45
|
|
36
|
-
|
46
|
+
request(Net::HTTP::Get, '/api/' + API_VERSION + '/events/' + id.to_s, params, nil, false)
|
47
|
+
rescue Exception => e
|
48
|
+
if @silent
|
49
|
+
warn e
|
50
|
+
return -1, {}
|
51
|
+
else
|
52
|
+
raise e
|
53
|
+
end
|
54
|
+
end
|
37
55
|
end
|
38
56
|
|
39
57
|
def stream(start, stop, options={})
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
58
|
+
begin
|
59
|
+
defaults = {
|
60
|
+
:priority => nil,
|
61
|
+
:sources => nil,
|
62
|
+
:tags => nil
|
63
|
+
}
|
64
|
+
options = defaults.merge(options)
|
46
65
|
|
47
|
-
|
48
|
-
|
49
|
-
|
66
|
+
params = {
|
67
|
+
:api_key => @api_key,
|
68
|
+
:application_key => @application_key,
|
50
69
|
|
51
|
-
|
52
|
-
|
53
|
-
|
70
|
+
:start => start.to_i,
|
71
|
+
:end => stop.to_i
|
72
|
+
}
|
54
73
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
74
|
+
if options[:priority]
|
75
|
+
params[:priority] = options[:priority]
|
76
|
+
end
|
77
|
+
if options[:sources]
|
78
|
+
params[:sources] = options[:sources]
|
79
|
+
end
|
80
|
+
if options[:tags]
|
81
|
+
params[:tags] = options[:tags]
|
82
|
+
end
|
64
83
|
|
65
|
-
|
84
|
+
request(Net::HTTP::Get, '/api/' + API_VERSION + '/events', params, nil, false)
|
85
|
+
rescue Exception => e
|
86
|
+
if @silent
|
87
|
+
warn e
|
88
|
+
return -1, {}
|
89
|
+
else
|
90
|
+
raise e
|
91
|
+
end
|
92
|
+
end
|
66
93
|
end
|
67
94
|
|
68
95
|
end
|
data/lib/dogapi/v1/metric.rb
CHANGED
@@ -10,33 +10,42 @@ module Dogapi
|
|
10
10
|
|
11
11
|
# Records an Event with no duration
|
12
12
|
def submit(metric, points, scope, options={})
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
13
|
+
begin
|
14
|
+
params = {
|
15
|
+
:api_key => @api_key
|
16
|
+
}
|
17
|
+
typ = options[:type] || "gauge"
|
18
|
+
|
19
|
+
if typ != "gauge" && typ != "counter"
|
20
|
+
raise ArgumentError, "metric type must be gauge or counter"
|
21
|
+
end
|
22
|
+
|
23
|
+
body = { :series => [
|
24
|
+
{
|
25
|
+
:metric => metric,
|
26
|
+
:points => points,
|
27
|
+
:type => typ,
|
28
|
+
:host => scope.host,
|
29
|
+
:device => scope.device
|
30
|
+
}
|
31
|
+
]
|
32
|
+
}
|
33
|
+
|
34
|
+
|
35
|
+
# Add tags if there are any
|
36
|
+
if not options[:tags].nil?
|
37
|
+
body[:series][0][:tags] = options[:tags]
|
38
|
+
end
|
39
|
+
|
40
|
+
request(Net::HTTP::Post, '/api/' + API_VERSION + '/series', params, body, true)
|
41
|
+
rescue Exception => e
|
42
|
+
if @silent
|
43
|
+
warn e
|
44
|
+
return -1, {}
|
45
|
+
else
|
46
|
+
raise e
|
47
|
+
end
|
37
48
|
end
|
38
|
-
|
39
|
-
request(Net::HTTP::Post, '/api/' + API_VERSION + '/series', params, body, true)
|
40
49
|
end
|
41
50
|
end
|
42
51
|
|
data/lib/dogapi/v1/tag.rb
CHANGED
@@ -10,50 +10,86 @@ module Dogapi
|
|
10
10
|
|
11
11
|
# Gets all tags in your org and the hosts tagged with them
|
12
12
|
def get_all()
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
13
|
+
begin
|
14
|
+
params = {
|
15
|
+
:api_key => @api_key,
|
16
|
+
:application_key => @application_key
|
17
|
+
}
|
18
|
+
|
19
|
+
request(Net::HTTP::Get, '/api/' + API_VERSION + '/tags/hosts', params, nil, false)
|
20
|
+
rescue Exception => e
|
21
|
+
if @silent
|
22
|
+
warn e
|
23
|
+
return -1, {}
|
24
|
+
else
|
25
|
+
raise e
|
26
|
+
end
|
27
|
+
end
|
19
28
|
end
|
20
29
|
|
21
30
|
# Gets all tags for a given host
|
22
31
|
def get(host_id)
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
32
|
+
begin
|
33
|
+
params = {
|
34
|
+
:api_key => @api_key,
|
35
|
+
:application_key => @application_key
|
36
|
+
}
|
37
|
+
|
38
|
+
request(Net::HTTP::Get, '/api/' + API_VERSION + '/tags/hosts/' + host_id.to_s, params, nil, false)
|
39
|
+
rescue Exception => e
|
40
|
+
if @silent
|
41
|
+
warn e
|
42
|
+
return -1, {}
|
43
|
+
else
|
44
|
+
raise e
|
45
|
+
end
|
46
|
+
end
|
29
47
|
end
|
30
48
|
|
31
49
|
# Adds a list of tags to a host
|
32
50
|
def add(host_id, tags)
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
51
|
+
begin
|
52
|
+
params = {
|
53
|
+
:api_key => @api_key,
|
54
|
+
:application_key => @application_key
|
55
|
+
}
|
56
|
+
|
57
|
+
body = {
|
58
|
+
:tags => tags
|
59
|
+
}
|
60
|
+
|
61
|
+
request(Net::HTTP::Post, '/api/' + API_VERSION + '/tags/hosts/' + host_id.to_s, params, body, true)
|
62
|
+
rescue Exception => e
|
63
|
+
if @silent
|
64
|
+
warn e
|
65
|
+
return -1, {}
|
66
|
+
else
|
67
|
+
raise e
|
68
|
+
end
|
69
|
+
end
|
43
70
|
end
|
44
71
|
|
45
72
|
# Remove all tags from a host and replace them with a new list
|
46
73
|
def update(host_id, tags)
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
74
|
+
begin
|
75
|
+
params = {
|
76
|
+
:api_key => @api_key,
|
77
|
+
:application_key => @application_key
|
78
|
+
}
|
79
|
+
|
80
|
+
body = {
|
81
|
+
:tags => tags
|
82
|
+
}
|
83
|
+
|
84
|
+
request(Net::HTTP::Put, '/api/' + API_VERSION + '/tags/hosts/' + host_id.to_s, params, body, true)
|
85
|
+
rescue Exception => e
|
86
|
+
if @silent
|
87
|
+
warn e
|
88
|
+
return -1, {}
|
89
|
+
else
|
90
|
+
raise e
|
91
|
+
end
|
92
|
+
end
|
57
93
|
end
|
58
94
|
|
59
95
|
# <b>DEPRECATED:</b> Spelling mistake temporarily preserved as an alias.
|
@@ -64,12 +100,21 @@ module Dogapi
|
|
64
100
|
|
65
101
|
# Remove all tags from a host
|
66
102
|
def detach(host_id)
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
103
|
+
begin
|
104
|
+
params = {
|
105
|
+
:api_key => @api_key,
|
106
|
+
:application_key => @application_key
|
107
|
+
}
|
108
|
+
|
109
|
+
request(Net::HTTP::Delete, '/api/' + API_VERSION + '/tags/hosts/' + host_id.to_s, params, nil, false)
|
110
|
+
rescue Exception => e
|
111
|
+
if @silent
|
112
|
+
warn e
|
113
|
+
return -1, {}
|
114
|
+
else
|
115
|
+
raise e
|
116
|
+
end
|
117
|
+
end
|
73
118
|
end
|
74
119
|
|
75
120
|
end
|
data/tests/test_client.rb
CHANGED
@@ -97,9 +97,11 @@ class TestClient < Test::Unit::TestCase
|
|
97
97
|
# Testing priorities
|
98
98
|
code, resp = dog_r.emit_event(Dogapi::Event.new(now_message, :msg_title =>now_title, :date_happened => now_ts, :priority => "low"))
|
99
99
|
low_event_id = resp["event"]["id"]
|
100
|
+
|
101
|
+
sleep 3
|
102
|
+
|
100
103
|
code, resp = dog.get_event(low_event_id)
|
101
104
|
low_event = resp['event']
|
102
|
-
puts low_event
|
103
105
|
assert low_event['priority'] == "low"
|
104
106
|
|
105
107
|
# Testing aggregates
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 1
|
7
7
|
- 3
|
8
|
-
-
|
9
|
-
version: 1.3.
|
8
|
+
- 3
|
9
|
+
version: 1.3.3
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Datadog, Inc.
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2012-
|
17
|
+
date: 2012-07-05 00:00:00 -04:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|