class Stax::Datadog::Api

Public Class Methods

add_to_list(id, dashboards) click to toggle source
# File lib/stax/datadog/api.rb, line 53
def add_to_list(id, dashboards)
  resp = client.add_items_to_dashboard_list(id, Array(dashboards))
  handle_response(resp)
end
client() click to toggle source
# File lib/stax/datadog/api.rb, line 18
def client
  @_client ||= Dogapi::Client.new(datadog_api_key, datadog_app_key)
rescue RuntimeError => e
  abort("Stax::Datadog: #{e.message}")
end
create_dashboard(*args) click to toggle source
# File lib/stax/datadog/api.rb, line 87
def create_dashboard(*args)
  if dashboard_exists?(args[0])
    warn("Dashboard #{args[0]} already exists")
  else
    handle_response(client.create_dashboard(*args)).dig('dash', 'id')
  end
end
create_or_get_list(name) click to toggle source

create list, unless there is already a list with this name

# File lib/stax/datadog/api.rb, line 40
def create_or_get_list(name)
  list = find_lists(name)&.first || handle_response(client.create_dashboard_list(name))
  get_list(list['id'])
end
dashboard_exists?(name) click to toggle source
# File lib/stax/datadog/api.rb, line 74
def dashboard_exists?(name)
  !find_dashboards(name).empty?
end
dashboards() click to toggle source
# File lib/stax/datadog/api.rb, line 63
def dashboards
  @_dashboards ||= client.get_dashboards[1]['dashes']
end
datadog_api_key() click to toggle source

override to set these values in a different way, eg from SSM param store

# File lib/stax/datadog/api.rb, line 10
def datadog_api_key
  ENV['DATADOG_API_KEY']
end
datadog_app_key() click to toggle source
# File lib/stax/datadog/api.rb, line 14
def datadog_app_key
  ENV['DATADOG_APP_KEY']
end
delete_dashboards(name) click to toggle source
# File lib/stax/datadog/api.rb, line 104
def delete_dashboards(name)
  find_dashboards(name).each do |dashboard|
    id = dashboard['id']
    warn("Deleting dashboard #{name} (#{id})")
    handle_response(client.delete_dashboard(id))
  end
end
delete_from_list(id, dashboards) click to toggle source
# File lib/stax/datadog/api.rb, line 58
def delete_from_list(id, dashboards)
  resp = client.delete_items_from_dashboard_list(id, Array(dashboards))
  handle_response(resp)
end
find_dashboards(x) click to toggle source

find all dashboards with title or id

# File lib/stax/datadog/api.rb, line 68
def find_dashboards(x)
  dashboards.select do |t|
    (t['title'] == x) || (t['id'] == x)
  end
end
find_lists(x) click to toggle source

find all lists with name or id

# File lib/stax/datadog/api.rb, line 29
def find_lists(x)
  lists.select do |l|
    (l['name'] == x) || (l['id'] == x)
  end
end
get_list(id) click to toggle source
# File lib/stax/datadog/api.rb, line 45
def get_list(id)
  handle_response(client.get_dashboard_list(id))
end
get_list_items(id) click to toggle source
# File lib/stax/datadog/api.rb, line 49
def get_list_items(id)
  handle_response(client.get_items_of_dashboard_list(id))
end
handle_response(resp) click to toggle source
# File lib/stax/datadog/api.rb, line 78
def handle_response(resp)
  if resp[0].match(/^2\d\d$/)
    resp[1]
  else
    warn(resp[1].fetch('errors', 'datadog error'))
    nil
  end
end
list_exists?(name) click to toggle source
# File lib/stax/datadog/api.rb, line 35
def list_exists?(name)
  !find_lists(name).empty?
end
lists() click to toggle source
# File lib/stax/datadog/api.rb, line 24
def lists
  handle_response(client.get_all_dashboard_lists)['dashboard_lists']
end
update_dashboard(*args) click to toggle source
# File lib/stax/datadog/api.rb, line 95
def update_dashboard(*args)
  if dashboard_exists?(args[0])
    id = find_dashboards(args[0]).first['id']
    handle_response(client.update_dashboard(id, *args))
  else
    warn("Dashboard #{args[0]} does not exist")
  end
end