Class: Dogapi::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/dogapi/facade.rb

Overview

A simple DogAPI client

See Dogapi::V1 for the thick underlying clients

Class methods return a tuple of (response_code, response_body). Unless otherwise noted, the response body is deserialized JSON. Up-to-date information about the JSON object structure is available in the HTTP API documentation, here.

Instance Method Summary collapse

Constructor Details

#initialize(api_key, application_key = nil, host = nil, device = nil, silent = true, timeout = nil) ⇒ Client

Create a new Client optionally specifying a default host and device


14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/dogapi/facade.rb', line 14

def initialize(api_key, application_key=nil, host=nil, device=nil, silent=true, timeout=nil)

  if api_key
    @api_key = api_key
  else
    raise 'Please provide an API key to submit your data'
  end

  @application_key = application_key

  @datadog_host = Dogapi.find_datadog_host()

  @host = host ||= Dogapi.find_localhost()

  @device = device

  # FIXME: refactor to avoid all this code duplication
  @metric_svc = Dogapi::V1::MetricService.new(@api_key, @application_key, silent, timeout)
  @event_svc = Dogapi::V1::EventService.new(@api_key, @application_key, silent, timeout)
  @tag_svc = Dogapi::V1::TagService.new(@api_key, @application_key, silent, timeout)
  @comment_svc = Dogapi::V1::CommentService.new(@api_key, @application_key, silent, timeout)
  @search_svc = Dogapi::V1::SearchService.new(@api_key, @application_key, silent, timeout)
  @dash_service = Dogapi::V1::DashService.new(@api_key, @application_key, silent, timeout)
  @alert_svc = Dogapi::V1::AlertService.new(@api_key, @application_key, silent, timeout)
  @user_svc = Dogapi::V1::UserService.new(@api_key, @application_key, silent, timeout)
  @snapshot_svc = Dogapi::V1::SnapshotService.new(@api_key, @application_key, silent, timeout)
  @screenboard_svc = Dogapi::V1::ScreenboardService.new(@api_key, @application_key, silent, timeout)
  @monitor_svc = Dogapi::V1::MonitorService.new(@api_key, @application_key, silent, timeout)
  @service_check_svc = Dogapi::V1::ServiceCheckService.new(@api_key, @application_key, silent, timeout)
  @legacy_event_svc = Dogapi::EventService.new(@datadog_host)
end

Instance Method Details

#add_tags(host_id, tags, source = nil) ⇒ Object

Add the tags to the given host

host_id can be the host's numeric id or string name

tags is and Array of Strings


201
202
203
# File 'lib/dogapi/facade.rb', line 201

def add_tags(host_id, tags, source = nil)
  @tag_svc.add(host_id, tags, source)
end

#alert(query, options = {}) ⇒ Object

ALERTS


260
261
262
# File 'lib/dogapi/facade.rb', line 260

def alert(query, options = {})
  @alert_svc.alert(query, options)
end

#all_tags(source = nil) ⇒ Object

Get all tags and their associated hosts at your org


185
186
187
# File 'lib/dogapi/facade.rb', line 185

def all_tags(source = nil)
  @tag_svc.get_all(source)
end

#batch_metricsObject


93
94
95
96
97
98
99
100
101
# File 'lib/dogapi/facade.rb', line 93

def batch_metrics()
  @metric_svc.switch_to_batched
  begin
    yield
    @metric_svc.flush_buffer # flush_buffer should returns the response from last API call
  ensure
    @metric_svc.switch_to_single
  end
end

#cancel_downtime(downtime_id) ⇒ Object


385
386
387
# File 'lib/dogapi/facade.rb', line 385

def cancel_downtime(downtime_id)
  @monitor_svc.cancel_downtime(downtime_id)
end

#comment(message, options = {}) ⇒ Object

Post a comment


157
158
159
# File 'lib/dogapi/facade.rb', line 157

def comment(message, options = {})
  @comment_svc.comment(message, options)
end

#create_dashboard(title, description, graphs, template_variables = nil) ⇒ Object

Create a dashboard.


232
233
234
# File 'lib/dogapi/facade.rb', line 232

def create_dashboard(title, description, graphs, template_variables = nil)
  @dash_service.create_dashboard(title, description, graphs, template_variables)
end

#create_screenboard(description) ⇒ Object

SCREENBOARD


301
302
303
# File 'lib/dogapi/facade.rb', line 301

def create_screenboard(description)
  @screenboard_svc.create_screenboard(description)
end

#delete_alert(alert_id) ⇒ Object


272
273
274
# File 'lib/dogapi/facade.rb', line 272

def delete_alert(alert_id)
  @alert_svc.delete_alert(alert_id)
end

#delete_comment(comment_id) ⇒ Object


166
167
168
# File 'lib/dogapi/facade.rb', line 166

def delete_comment(comment_id)
  @comment_svc.delete_comment(comment_id)
end

#delete_dashboard(dash_id) ⇒ Object

Delete the given dashboard.


252
253
254
# File 'lib/dogapi/facade.rb', line 252

def delete_dashboard(dash_id)
  @dash_service.delete_dashboard(dash_id)
end

#delete_monitor(monitor_id) ⇒ Object


345
346
347
# File 'lib/dogapi/facade.rb', line 345

def delete_monitor(monitor_id)
  @monitor_svc.delete_monitor(monitor_id)
end

#delete_screenboard(board_id) ⇒ Object


317
318
319
# File 'lib/dogapi/facade.rb', line 317

def delete_screenboard(board_id)
  @screenboard_svc.delete_screenboard(board_id)
end

#detach_tags(host_id, source = nil) ⇒ Object

Remove all tags from the given host

host_id can be the host's numeric id or string name


223
224
225
# File 'lib/dogapi/facade.rb', line 223

def detach_tags(host_id, source = nil)
  @tag_svc.detach(host_id, source)
end

#detatch_tags(host_id) ⇒ Object

DEPRECATED: Spelling mistake temporarily preserved as an alias.


215
216
217
218
# File 'lib/dogapi/facade.rb', line 215

def detatch_tags(host_id)
  warn "[DEPRECATION] Dogapi::Client.detatch() is deprecated. Use `detach` instead."
  detach_tags(host_id)
end

#emit_event(event, options = {}) ⇒ Object

Record an event

Optional arguments:

:host        => String
:device      => String

111
112
113
114
115
# File 'lib/dogapi/facade.rb', line 111

def emit_event(event, options = {})
  scope = override_scope options

  @event_svc.post(event, scope)
end

#emit_point(metric, value, options = {}) ⇒ Object

Record a single point of metric data

Optional arguments:

:timestamp => Ruby stdlib Time
:host      => String
:device    => String
:options   => Map

options = “counter” to specify a counter metric options = [“tag1”, “tag2”] to tag the point


59
60
61
62
63
64
65
66
67
68
# File 'lib/dogapi/facade.rb', line 59

def emit_point(metric, value, options = {})
  defaults = { :timestamp => Time.now }
  options = defaults.merge(options)

  self.emit_points(
    metric,
    [[options[:timestamp], value]],
    options
  )
end

#emit_points(metric, points, options = {}) ⇒ Object

Record a set of points of metric data

points is an array of [Time, value] doubles

Optional arguments:

:host   => String
:device => String
:options   => Map

options = “counter” to specify a counter metric options = [“tag1”, “tag2”] to tag the point


81
82
83
84
85
86
87
88
89
90
91
# File 'lib/dogapi/facade.rb', line 81

def emit_points(metric, points, options = {})
  scope = override_scope options

  points.each do |p|
    p[0].kind_of? Time or raise "Not a Time"
    p[0] = p[0].to_i
    p[1] = p[1].to_f # TODO: stupid to_f will never raise an exception
  end

  @metric_svc.submit(metric, points, scope, options)
end

#get_alert(alert_id) ⇒ Object


268
269
270
# File 'lib/dogapi/facade.rb', line 268

def get_alert(alert_id)
  @alert_svc.get_alert(alert_id)
end

#get_all_alertsObject


276
277
278
# File 'lib/dogapi/facade.rb', line 276

def get_all_alerts()
  @alert_svc.get_all_alerts()
end

#get_all_downtimes(options = {}) ⇒ Object


389
390
391
# File 'lib/dogapi/facade.rb', line 389

def get_all_downtimes(options = {})
  @monitor_svc.get_all_downtimes(options)
end

#get_all_monitors(options = {}) ⇒ Object


349
350
351
# File 'lib/dogapi/facade.rb', line 349

def get_all_monitors(options = {})
  @monitor_svc.get_all_monitors(options)
end

#get_all_screenboardsObject


313
314
315
# File 'lib/dogapi/facade.rb', line 313

def get_all_screenboards()
  @screenboard_svc.get_all_screenboards()
end

#get_dashboard(dash_id) ⇒ Object

Fetch the given dashboard.


242
243
244
# File 'lib/dogapi/facade.rb', line 242

def get_dashboard(dash_id)
  @dash_service.get_dashboard(dash_id)
end

#get_dashboardsObject

Fetch all of the dashboards.


247
248
249
# File 'lib/dogapi/facade.rb', line 247

def get_dashboards
  @dash_service.get_dashboards
end

#get_downtime(downtime_id) ⇒ Object


381
382
383
# File 'lib/dogapi/facade.rb', line 381

def get_downtime(downtime_id)
  @monitor_svc.get_downtime(downtime_id)
end

#get_event(id) ⇒ Object

Get the details of an event

id of the event to get


120
121
122
# File 'lib/dogapi/facade.rb', line 120

def get_event(id)
  @event_svc.get(id)
end

#get_monitor(monitor_id, options = {}) ⇒ Object


341
342
343
# File 'lib/dogapi/facade.rb', line 341

def get_monitor(monitor_id, options = {})
  @monitor_svc.get_monitor(monitor_id, options)
end

#get_screenboard(board_id) ⇒ Object


309
310
311
# File 'lib/dogapi/facade.rb', line 309

def get_screenboard(board_id)
  @screenboard_svc.get_screenboard(board_id)
end

#graph_snapshot(metric_query, start_ts, end_ts, event_query = nil) ⇒ Object

Graph snapshot


294
295
296
# File 'lib/dogapi/facade.rb', line 294

def graph_snapshot(metric_query, start_ts, end_ts, event_query = nil)
  @snapshot_svc.snapshot(metric_query, start_ts, end_ts, event_query)
end

#host_tags(host_id, source = nil, by_source = false) ⇒ Object

Get all tags for the given host

host_id can be the host's numeric id or string name


192
193
194
# File 'lib/dogapi/facade.rb', line 192

def host_tags(host_id, source = nil, by_source = false)
  @tag_svc.get(host_id, source, by_source)
end

#invite(emails, options = {}) ⇒ Object

User invite


289
290
291
# File 'lib/dogapi/facade.rb', line 289

def invite(emails, options = {})
  @user_svc.invite(emails, options)
end

#monitor(type, query, options = {}) ⇒ Object

MONITORS


333
334
335
# File 'lib/dogapi/facade.rb', line 333

def monitor(type, query, options = {})
  @monitor_svc.monitor(type, query, options)
end

#mute_alertsObject


280
281
282
# File 'lib/dogapi/facade.rb', line 280

def mute_alerts()
  @alert_svc.mute_alerts()
end

#mute_host(hostname, options = {}) ⇒ Object

HOST MUTING


397
398
399
# File 'lib/dogapi/facade.rb', line 397

def mute_host(hostname, options = {})
  @monitor_svc.mute_host(hostname, options)
end

#mute_monitor(monitor_id, options = {}) ⇒ Object


361
362
363
# File 'lib/dogapi/facade.rb', line 361

def mute_monitor(monitor_id, options = {})
  @monitor_svc.mute_monitor(monitor_id, options)
end

#mute_monitorsObject


353
354
355
# File 'lib/dogapi/facade.rb', line 353

def mute_monitors()
  @monitor_svc.mute_monitors()
end

#revoke_screenboard(board_id) ⇒ Object


325
326
327
# File 'lib/dogapi/facade.rb', line 325

def revoke_screenboard(board_id)
  @screenboard_svc.revoke_screenboard(board_id)
end

#schedule_downtime(scope, options = {}) ⇒ Object

MONITOR DOWNTIME


373
374
375
# File 'lib/dogapi/facade.rb', line 373

def schedule_downtime(scope, options = {})
  @monitor_svc.schedule_downtime(scope, options)
end

#search(query) ⇒ Object

Run the given search query.


175
176
177
# File 'lib/dogapi/facade.rb', line 175

def search(query)
  @search_svc.search query
end

#service_check(check, host, status, options = {}) ⇒ Object

SERVICE CHECKS


409
410
411
# File 'lib/dogapi/facade.rb', line 409

def service_check(check, host, status, options = {})
  @service_check_svc.service_check(check, host, status, options)
end

#share_screenboard(board_id) ⇒ Object


321
322
323
# File 'lib/dogapi/facade.rb', line 321

def share_screenboard(board_id)
  @screenboard_svc.share_screenboard(board_id)
end

#start_event(event, options = {}) ⇒ Object

DEPRECATED: Recording events with a duration has been deprecated. The functionality will be removed in a later release.


140
141
142
143
144
145
146
147
148
149
150
# File 'lib/dogapi/facade.rb', line 140

def start_event(event, options = {})
  warn "[DEPRECATION] Dogapi::Client.start_event() is deprecated. Use `emit_event` instead."
  defaults = { :source_type => nil }
  options = defaults.merge(options)

  scope = override_scope options

  @legacy_event_svc.start(@api_key, event, scope, options[:source_type]) do
    yield
  end
end

#stream(start, stop, options = {}) ⇒ Object

Get an optionally filtered event stream

start is a Time object for when to start the stream

stop is a Time object for when to end the stream

Optional arguments:

:priority   => "normal" or "low"
:sources    => String, see https://github.com/DataDog/dogapi/wiki/Event for a current list of sources
:tags       => Array of Strings

134
135
136
# File 'lib/dogapi/facade.rb', line 134

def stream(start, stop, options = {})
  @event_svc.stream(start, stop, options)
end

#unmute_alertsObject


284
285
286
# File 'lib/dogapi/facade.rb', line 284

def unmute_alerts()
  @alert_svc.unmute_alerts()
end

#unmute_host(hostname) ⇒ Object


401
402
403
# File 'lib/dogapi/facade.rb', line 401

def unmute_host(hostname)
  @monitor_svc.unmute_host(hostname)
end

#unmute_monitor(monitor_id, options = {}) ⇒ Object


365
366
367
# File 'lib/dogapi/facade.rb', line 365

def unmute_monitor(monitor_id, options = {})
  @monitor_svc.unmute_monitor(monitor_id, options)
end

#unmute_monitorsObject


357
358
359
# File 'lib/dogapi/facade.rb', line 357

def unmute_monitors()
  @monitor_svc.unmute_monitors()
end

#update_alert(alert_id, query, options = {}) ⇒ Object


264
265
266
# File 'lib/dogapi/facade.rb', line 264

def update_alert(alert_id, query, options = {})
  @alert_svc.update_alert(alert_id, query, options)
end

#update_comment(comment_id, options = {}) ⇒ Object

Post a comment


162
163
164
# File 'lib/dogapi/facade.rb', line 162

def update_comment(comment_id, options = {})
  @comment_svc.update_comment(comment_id, options)
end

#update_dashboard(dash_id, title, description, graphs, template_variables = nil) ⇒ Object

Update a dashboard.


237
238
239
# File 'lib/dogapi/facade.rb', line 237

def update_dashboard(dash_id, title, description, graphs, template_variables = nil)
  @dash_service.update_dashboard(dash_id, title, description, graphs, template_variables)
end

#update_downtime(downtime_id, options = {}) ⇒ Object


377
378
379
# File 'lib/dogapi/facade.rb', line 377

def update_downtime(downtime_id, options = {})
  @monitor_svc.update_downtime(downtime_id, options)
end

#update_monitor(monitor_id, query, options = {}) ⇒ Object


337
338
339
# File 'lib/dogapi/facade.rb', line 337

def update_monitor(monitor_id, query, options = {})
  @monitor_svc.update_monitor(monitor_id, query, options)
end

#update_screenboard(board_id, description) ⇒ Object


305
306
307
# File 'lib/dogapi/facade.rb', line 305

def update_screenboard(board_id, description)
  @screenboard_svc.update_screenboard(board_id, description)
end

#update_tags(host_id, tags, source = nil) ⇒ Object

Replace the tags on the given host

host_id can be the host's numeric id or string name

tags is and Array of Strings


210
211
212
# File 'lib/dogapi/facade.rb', line 210

def update_tags(host_id, tags, source = nil)
  @tag_svc.update(host_id, tags, source)
end