Skip to content

Commit

Permalink
Merge pull request #5 from racker/add_metrics_support
Browse files Browse the repository at this point in the history
Add support for metrics and data_points
  • Loading branch information
philk committed Mar 22, 2013
2 parents 36f6b60 + dfda4d3 commit 426d829
Show file tree
Hide file tree
Showing 9 changed files with 171 additions and 1 deletion.
2 changes: 1 addition & 1 deletion VERSION
@@ -1 +1 @@
0.2.15
0.2.16
6 changes: 6 additions & 0 deletions lib/rackspace-monitoring.rb
Expand Up @@ -22,13 +22,19 @@ class Rackspace < Fog::Service
collection :alarm_examples
model :agent_token
collection :agent_tokens
model :metric
collection :metrics
model :data_point
collection :data_points

request_path 'rackspace-monitoring/monitoring/requests'
request :list_agent_tokens
request :list_alarms
request :list_alarm_examples
request :list_checks
request :list_entities
request :list_metrics
request :list_data_points
request :list_overview

request :get_agent_token
Expand Down
9 changes: 9 additions & 0 deletions lib/rackspace-monitoring/monitoring/models/check.rb
Expand Up @@ -57,6 +57,15 @@ def save
true
end

def metrics
@metrics ||= begin
Fog::Monitoring::Rackspace::Metrics.new(
:check => self,
:connection => connection
)
end
end

end

end
Expand Down
18 changes: 18 additions & 0 deletions lib/rackspace-monitoring/monitoring/models/data_point.rb
@@ -0,0 +1,18 @@
require 'rackspace-fog/core/model'
require 'rackspace-monitoring/monitoring/models/base'

module Fog
module Monitoring
class Rackspace
class DataPoint < Fog::Monitoring::Rackspace::Base
attribute :num_points, :aliases => "numPoints"
attribute :average
attribute :variance
attribute :min
attribute :max
attribute :timestamp
attribute :metric
end
end
end
end
49 changes: 49 additions & 0 deletions lib/rackspace-monitoring/monitoring/models/data_points.rb
@@ -0,0 +1,49 @@
require 'rackspace-fog/core/collection'
require 'rackspace-monitoring/monitoring/models/data_point'

module Fog
module Monitoring
class Rackspace
class DataPoints < Fog::Collection

attribute :metric

model Fog::Monitoring::Rackspace::DataPoint

def all
self.fetch(:resolution => :full)
end

# Fetch the datapoints for a metric
# ==== Parameters
#
# * options<~Hash> - optional paramaters
# * from<~Integer> - timestamp in milliseconds
# * to<~Integer> - timestamp in milliseconds
# * points<~Integer> - Number of points to fetch
# * resolution<~String> - Should be one of :full, :min5, :min20, :min60, :min240, :min1440
# * select<~Array> - Should be an array of :average, :max, :min, :variance
#
# ==== Returns
# * datapoints<~Fog::Monitoring::Rackspace::Datapoints>:
def fetch(options={})
requires :metric
options[:from] ||= (Time.now.to_i * 1000) - (3600 * 1000)
options[:to] ||= Time.now.to_i * 1000
options[:points] ||= 1 unless options[:resolution]
if options[:resolution]
options[:resolution] = options[:resolution].upcase
end
data = connection.list_data_points(metric.check.entity.id, metric.check.id, metric.name, options).body['values']
load(data)
end

def new(attributes = {})
requires :metric
super({ :metric => metric }.merge!(attributes))
end

end
end
end
end
25 changes: 25 additions & 0 deletions lib/rackspace-monitoring/monitoring/models/metric.rb
@@ -0,0 +1,25 @@
require 'rackspace-fog/core/model'
require 'rackspace-monitoring/monitoring/models/base'

module Fog
module Monitoring
class Rackspace
class Metric < Fog::Monitoring::Rackspace::Base

identity :name
attribute :check

def datapoints(options={})
@datapoints ||= begin
Fog::Monitoring::Rackspace::DataPoints.new(
:metric => self,
:connection => connection
)
end
end

end

end
end
end
27 changes: 27 additions & 0 deletions lib/rackspace-monitoring/monitoring/models/metrics.rb
@@ -0,0 +1,27 @@
require 'rackspace-fog/core/collection'
require 'rackspace-monitoring/monitoring/models/metric'

module Fog
module Monitoring
class Rackspace
class Metrics < Fog::Collection

attribute :check

model Fog::Monitoring::Rackspace::Metric

def all
requires :check
data = connection.list_metrics(check.entity.id, check.id).body['values']
load(data)
end

def new(attributes = {})
requires :check
super({ :check => check }.merge!(attributes))
end

end
end
end
end
18 changes: 18 additions & 0 deletions lib/rackspace-monitoring/monitoring/requests/list_data_points.rb
@@ -0,0 +1,18 @@
module Fog
module Monitoring
class Rackspace
class Real

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

end
end
end
end
18 changes: 18 additions & 0 deletions lib/rackspace-monitoring/monitoring/requests/list_metrics.rb
@@ -0,0 +1,18 @@
module Fog
module Monitoring
class Rackspace
class Real

def list_metrics(entity_id, check_id)
request(
:expects => [200, 203],
:method => 'GET',
:path => "entities/#{entity_id}/checks/#{check_id}/metrics"
)
end

end
end
end
end

0 comments on commit 426d829

Please sign in to comment.