mirror of
https://github.com/fog/fog.git
synced 2022-11-09 13:51:43 -05:00
0e1daf3ddd
Unlike last attempt this replaces Fog::Connection with Fog::XML::Connection which should be directly compatible. Fog::Connection is there for old PRs but should be removed real soon. Providers using JSON should be able to replace "XML" with "Core" within their code to cut down on the dependency. If I get the time I may attempt to clean up some but testing with Mock will mean that is mostly educated guesswork.
188 lines
5.8 KiB
Ruby
188 lines
5.8 KiB
Ruby
require 'fog/rackspace/core'
|
|
# This class originally came from the rackspace-monitoring gem located here:
|
|
# https://github.com/racker/rackspace-monitoring-rb
|
|
# It has been heavily modified for import into Fog master.
|
|
|
|
|
|
module Fog
|
|
module Rackspace
|
|
class Monitoring < Fog::Service
|
|
include Fog::Rackspace::Errors
|
|
|
|
class IdentifierTaken < Fog::Errors::Error; end
|
|
class ServiceError < Fog::Rackspace::Errors::ServiceError; end
|
|
class InternalServerError < Fog::Rackspace::Errors::InternalServerError; end
|
|
class Conflict < Fog::Rackspace::Errors::Conflict; end
|
|
class ServiceUnavailable < Fog::Rackspace::Errors::ServiceUnavailable; end
|
|
|
|
|
|
class BadRequest < Fog::Rackspace::Errors::BadRequest
|
|
attr_reader :validation_errors
|
|
|
|
def self.slurp(error, service=nil)
|
|
new_error = super(error)
|
|
if new_error.response_data && new_error.response_data['details']
|
|
new_error.instance_variable_set(:@validation_errors, new_error.response_data['details'])
|
|
end
|
|
|
|
status_code = error.response ? error.response.status : nil
|
|
new_error.instance_variable_set(:@status_code, status_code)
|
|
new_error.set_transaction_id(error, service)
|
|
new_error
|
|
end
|
|
end
|
|
|
|
requires :rackspace_api_key, :rackspace_username
|
|
recognizes :rackspace_auth_url
|
|
recognizes :persistent
|
|
recognizes :rackspace_monitoring_url
|
|
recognizes :rackspace_region
|
|
|
|
model_path 'fog/rackspace/models/monitoring'
|
|
model :entity
|
|
collection :entities
|
|
model :check
|
|
collection :checks
|
|
model :alarm
|
|
collection :alarms
|
|
model :alarm_example
|
|
collection :alarm_examples
|
|
model :agent_token
|
|
collection :agent_tokens
|
|
model :metric
|
|
collection :metrics
|
|
model :data_point
|
|
collection :data_points
|
|
model :check_type
|
|
collection :check_types
|
|
model :notification
|
|
collection :notifications
|
|
|
|
request_path 'fog/rackspace/requests/monitoring'
|
|
request :list_agent_tokens
|
|
request :list_agents
|
|
request :list_alarms
|
|
request :list_alarm_examples
|
|
request :list_checks
|
|
request :list_entities
|
|
request :list_metrics
|
|
request :list_data_points
|
|
request :list_check_types
|
|
request :list_overview
|
|
request :list_notification_plans
|
|
request :list_notifications
|
|
|
|
request :get_agent
|
|
request :get_agent_token
|
|
request :get_alarm
|
|
request :get_alarm_example
|
|
request :get_check
|
|
request :get_entity
|
|
request :get_notification
|
|
request :get_cpus_info
|
|
request :get_disks_info
|
|
request :get_filesystems_info
|
|
request :get_memory_info
|
|
request :get_network_interfaces_info
|
|
request :get_processes_info
|
|
request :get_system_info
|
|
request :get_logged_in_user_info
|
|
|
|
request :create_agent_token
|
|
request :create_alarm
|
|
request :create_check
|
|
request :create_entity
|
|
request :create_notification
|
|
|
|
request :update_check
|
|
request :update_entity
|
|
request :update_alarm
|
|
request :update_notification
|
|
|
|
request :delete_agent_token
|
|
request :delete_alarm
|
|
request :delete_check
|
|
request :delete_entity
|
|
request :delete_notification
|
|
|
|
request :evaluate_alarm_example
|
|
|
|
request :list_monitoring_zones
|
|
request :get_monitoring_zone
|
|
|
|
|
|
class Mock < Fog::Rackspace::Service
|
|
|
|
def initialize(options={})
|
|
end
|
|
|
|
def request(params)
|
|
Fog::Mock.not_implemented
|
|
end
|
|
end
|
|
|
|
class Real < Fog::Rackspace::Service
|
|
def service_name
|
|
:cloudMonitoring
|
|
end
|
|
|
|
def region
|
|
@rackspace_region
|
|
end
|
|
|
|
def initialize(options={})
|
|
@rackspace_api_key = options[:rackspace_api_key]
|
|
@rackspace_username = options[:rackspace_username]
|
|
@rackspace_auth_url = options[:rackspace_auth_url]
|
|
@connection_options = options[:connection_options] || {}
|
|
@rackspace_endpoint = Fog::Rackspace.normalize_url(options[:rackspace_monitoring_url])
|
|
|
|
authenticate
|
|
|
|
@persistent = options[:persistent] || false
|
|
@connection = Fog::XML::Connection.new(endpoint_uri.to_s, @persistent, @connection_options)
|
|
end
|
|
|
|
def reload
|
|
@connection.reset
|
|
end
|
|
|
|
def endpoint_uri(service_endpoint_url=nil)
|
|
@uri = super(@rackspace_endpoint || service_endpoint_url, :rackspace_monitoring_url)
|
|
end
|
|
|
|
def request_id_header
|
|
"X-Response-Id"
|
|
end
|
|
|
|
private
|
|
|
|
def request(params, parse_json = true)
|
|
super
|
|
rescue Excon::Errors::BadRequest => error
|
|
raise BadRequest.slurp(error, self)
|
|
rescue Excon::Errors::Conflict => error
|
|
raise Conflict.slurp(error, self)
|
|
rescue Excon::Errors::NotFound => error
|
|
raise NotFound.slurp(error, self)
|
|
rescue Excon::Errors::ServiceUnavailable => error
|
|
raise ServiceUnavailable.slurp(error, self)
|
|
rescue Excon::Errors::InternalServerError => error
|
|
raise InternalServerError.slurp(error, self)
|
|
rescue Excon::Errors::HTTPStatusError => error
|
|
raise ServiceError.slurp(error, self)
|
|
end
|
|
|
|
def authenticate
|
|
options = {
|
|
:rackspace_api_key => @rackspace_api_key,
|
|
:rackspace_username => @rackspace_username,
|
|
:rackspace_auth_url => @rackspace_auth_url,
|
|
:connection_options => @connection_options
|
|
}
|
|
super(options)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|