class Fog::Monitoring::Rackspace::Real

Public Class Methods

new(options={}) click to toggle source
# File lib/rackspace-monitoring.rb, line 69
def initialize(options={})
  @rackspace_api_key = options[:rackspace_api_key]
  @rackspace_username = options[:rackspace_username]
  @rackspace_auth_url = options[:rackspace_auth_url]
  @rackspace_auth_token = options[:rackspace_auth_token]
  @rackspace_account_id = options[:rackspace_account_id]
  @rackspace_service_url = options[:rackspace_service_url] || ENDPOINT
  @rackspace_must_reauthenticate = false
  @connection_options = options[:connection_options] || {}

  if options.has_key?(:raise_errors)
    @raise_errors = options[:raise_errors]
  else
    @raise_errors = true
  end

  begin
    authenticate
  rescue Exception => error
    raise_error(error)
  end

  @persistent = options[:persistent] || false

  begin
    @connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options)
  rescue Exception => error
    raise_error(error)
  end
end

Public Instance Methods

create_agent_token(options = {}) click to toggle source
# File lib/rackspace-monitoring/monitoring/requests/create_agent_token.rb, line 6
def create_agent_token(options = {})
  data = options.dup
  request(
    :body     => JSON.encode(data),
    :expects  => [201],
    :method   => 'POST',
    :path     => 'agent_tokens'
  )
end
create_alarm(entity_id, options = {}) click to toggle source
# File lib/rackspace-monitoring/monitoring/requests/create_alarm.rb, line 6
def create_alarm(entity_id, options = {})
  data = options.dup
  request(
    :body     => JSON.encode(data),
    :expects  => [201],
    :method   => 'POST',
    :path     => "entities/#{entity_id}/alarms"
  )
end
create_check(entity_id, options = {}) click to toggle source
# File lib/rackspace-monitoring/monitoring/requests/create_check.rb, line 6
def create_check(entity_id, options = {})
  data = options.dup
  request(
    :body     => JSON.encode(data),
    :expects  => [201],
    :method   => 'POST',
    :path     => "entities/#{entity_id}/checks"
  )
end
create_entity(options = {}) click to toggle source
# File lib/rackspace-monitoring/monitoring/requests/create_entity.rb, line 6
def create_entity(options = {})
  data = options.dup
  request(
    :body     => JSON.encode(data),
    :expects  => [201],
    :method   => 'POST',
    :path     => 'entities'
  )
end
delete_check(entity_id, check_id) click to toggle source
# File lib/rackspace-monitoring/monitoring/requests/delete_check.rb, line 6
def delete_check(entity_id, check_id)
  request(
    :expects  => [204],
    :method   => 'DELETE',
    :path     => "entities/#{entity_id}/checks/#{check_id}"
  )
end
delete_entity(entity_id) click to toggle source
# File lib/rackspace-monitoring/monitoring/requests/delete_entity.rb, line 6
def delete_entity(entity_id)
  request(
    :expects  => [204],
    :method   => 'DELETE',
    :path     => "entities/#{entity_id}"
  )
end
evaluate_alarm_example(id, options = {}) click to toggle source
# File lib/rackspace-monitoring/monitoring/requests/evaluate_alarm_example.rb, line 6
def evaluate_alarm_example(id, options = {})
  options ||= {}
  data = {:values => options.dup}
  request(
    :body     => JSON.encode(data),
    :expects  => [200],
    :method   => 'POST',
    :path     => "alarm_examples/#{id}"
  )
end
get_agent_token(id) click to toggle source
# File lib/rackspace-monitoring/monitoring/requests/get_agent_token.rb, line 6
def get_agent_token(id)
  request(
    :expects  => [200, 203],
    :method   => 'GET',
    :path     => "agent_tokens/#{id}"
  )
end
get_alarm(entity_id, alarm_id) click to toggle source
# File lib/rackspace-monitoring/monitoring/requests/get_alarm.rb, line 6
def get_alarm(entity_id, alarm_id)
  request(
    :expects  => [200, 203],
    :method   => 'GET',
    :path     => "entities/#{entity_id}/alarms/#{alarm_id}"
  )
end
get_alarm_example(id) click to toggle source
# File lib/rackspace-monitoring/monitoring/requests/get_alarm_example.rb, line 6
def get_alarm_example(id)
  request(
    :expects  => [200, 203],
    :method   => 'GET',
    :path     => "alarm_examples/#{id}"
  )
end
get_check(entity_id, check_id) click to toggle source
# File lib/rackspace-monitoring/monitoring/requests/get_check.rb, line 6
def get_check(entity_id, check_id)
  request(
    :expects  => [200, 203],
    :method   => 'GET',
    :path     => "entities/#{entity_id}/checks/#{check_id}"
  )
end
get_entity(entity_id) click to toggle source
# File lib/rackspace-monitoring/monitoring/requests/get_entity.rb, line 6
def get_entity(entity_id)
  request(
    :expects  => [200, 203],
    :method   => 'GET',
    :path     => "entities/#{entity_id}"
  )
end
list_agent_tokens(options={}) click to toggle source
# File lib/rackspace-monitoring/monitoring/requests/list_agent_tokens.rb, line 6
def list_agent_tokens(options={})
  request(
    :expects  => [200, 203],
    :method   => 'GET',
    :path     => 'agent_tokens',
    :query    => options
  )
end
list_alarm_examples() click to toggle source
# File lib/rackspace-monitoring/monitoring/requests/list_alarm_examples.rb, line 6
def list_alarm_examples
  request(
    :expects  => [200, 203],
    :method   => 'GET',
    :path     => 'alarm_examples'
  )
end
list_alarms(entity_id) click to toggle source
# File lib/rackspace-monitoring/monitoring/requests/list_alarms.rb, line 6
def list_alarms(entity_id)
  request(
    :expects  => [200, 203],
    :method   => 'GET',
    :path     => "entities/#{entity_id}/alarms"
  )
end
list_check_types() click to toggle source
# File lib/rackspace-monitoring/monitoring/requests/list_check_types.rb, line 6
def list_check_types
  request(
    :expects  => [200, 203],
    :method   => 'GET',
    :path     => "check_types"
  )
end
list_checks(entity_id) click to toggle source
# File lib/rackspace-monitoring/monitoring/requests/list_checks.rb, line 6
def list_checks(entity_id)
  request(
    :expects  => [200, 203],
    :method   => 'GET',
    :path     => "entities/#{entity_id}/checks"
  )
end
list_data_points(entity_id, check_id, metric_name, options) click to toggle source
# File lib/rackspace-monitoring/monitoring/requests/list_data_points.rb, line 6
def list_data_points(entity_id, check_id, metric_name, options)
  request(
    :expects  => [200, 203],
    :method   => 'GET',
    :path     => "entities/#{entity_id}/checks/#{check_id}/metrics/#{metric_name}/plot",
    :query    => options
  )
end
list_entities() click to toggle source
# File lib/rackspace-monitoring/monitoring/requests/list_entities.rb, line 6
def list_entities
  request(
    :expects  => [200, 203],
    :method   => 'GET',
    :path     => 'entities'
  )
end
list_metrics(entity_id, check_id) click to toggle source
# File lib/rackspace-monitoring/monitoring/requests/list_metrics.rb, line 6
def list_metrics(entity_id, check_id)
  request(
    :expects  => [200, 203],
    :method   => 'GET',
    :path     => "entities/#{entity_id}/checks/#{check_id}/metrics"
  )
end
list_overview(opts={}) click to toggle source
# File lib/rackspace-monitoring/monitoring/requests/list_overview.rb, line 6
def list_overview(opts={})
  path = "views/overview"
  opts.keys.each do |key|
    path = path + "?#{key}=#{opts[key]}"
  end
  request(
    :expects  => [200, 203],
    :method   => 'GET',
    :path     => path
  )
end
raise_error(error) click to toggle source
# File lib/rackspace-monitoring.rb, line 104
def raise_error(error)
  if @raise_errors
    raise error
  else
    print "Error occurred: " + error.message
  end
end
reload() click to toggle source
# File lib/rackspace-monitoring.rb, line 100
def reload
  @connection.reset
end
request(params) click to toggle source
# File lib/rackspace-monitoring.rb, line 112
def request(params)
  begin
    begin
      response = @connection.request(params.merge({
        :headers  => {
          'Content-Type' => 'application/json',
          'X-Auth-Token' => @auth_token
        }.merge!(params[:headers] || {}),
        :host     => @host,
        :path     => "#{@path}/#{params[:path]}"
      }))
    rescue Excon::Errors::Unauthorized => error
      if error.response.body != 'Bad username or password' # token expiration
        @rackspace_must_reauthenticate = true
        authenticate
        retry
      else # bad credentials
        raise error
      end
    rescue Excon::Errors::HTTPStatusError => error
      raise case error
      when Excon::Errors::NotFound
        Fog::Monitoring::Rackspace::NotFound.slurp(error)
      else
        error
      end
    end
    unless response.body.empty?
      response.body = JSON.decode(response.body)
    end
    response
  rescue Exception => error
    raise_error(error)
  end
end
update_alarm(entity_id, id, options) click to toggle source
# File lib/rackspace-monitoring/monitoring/requests/update_alarm.rb, line 6
def update_alarm(entity_id, id, options)
  request(
    :body     => JSON.encode(options),
    :expects  => [204],
    :method   => 'PUT',
    :path     => "entities/#{entity_id}/alarms/#{id}"
  )
end
update_check(entity_id, id, options) click to toggle source
# File lib/rackspace-monitoring/monitoring/requests/update_check.rb, line 6
def update_check(entity_id, id, options)
  request(
    :body     => JSON.encode(options),
    :expects  => [204],
    :method   => 'PUT',
    :path     => "entities/#{entity_id}/checks/#{id}"
  )
end
update_entity(id, options) click to toggle source
# File lib/rackspace-monitoring/monitoring/requests/update_entity.rb, line 6
def update_entity(id, options)
  request(
    :body     => JSON.encode(options),
    :expects  => [204],
    :method   => 'PUT',
    :path     => "entities/#{id}"
  )
end

Private Instance Methods

authenticate() click to toggle source
# File lib/rackspace-monitoring.rb, line 150
def authenticate
  if @rackspace_must_reauthenticate || @rackspace_auth_token.nil? || @account_id.nil?
    options = {
      :rackspace_api_key  => @rackspace_api_key,
      :rackspace_username => @rackspace_username,
      :rackspace_auth_url => @rackspace_auth_url
    }

    begin
      credentials = Fog::Rackspace.authenticate(options)
    rescue Exception => error
      raise_error(error)
      return
    end

    @auth_token = credentials['X-Auth-Token']
    @account_id = credentials['X-Server-Management-Url'].match(/.*\/([\d]+)$/)[1]
  else
    @auth_token = @rackspace_auth_token
    @account_id = @rackspace_account_id
  end
  uri = URI.parse("#{@rackspace_service_url}/#{@account_id}")
  @host   = uri.host
  @path   = uri.path
  @port   = uri.port
  @scheme = uri.scheme
end