mirror of
https://github.com/fog/fog.git
synced 2022-11-09 13:51:43 -05:00

Done with `rubocop --auto-correct --only EmptyLineBetweenDefs,EmptyLines,EmptyLinesAroundBody`
82 lines
2.8 KiB
Ruby
82 lines
2.8 KiB
Ruby
require 'fog/core/model'
|
|
|
|
module Fog
|
|
module Joyent
|
|
class Analytics
|
|
class Instrumentation < Fog::Model
|
|
identity :id
|
|
attribute :joyent_module, :aliases => 'module'
|
|
attribute :stat
|
|
attribute :predicate
|
|
attribute :decomposition, :type => :array
|
|
attribute :value_dimension, :aliases => 'value-dimension', :type => :integer
|
|
attribute :value_arity, :aliases => 'value-arity'
|
|
attribute :retention_time, :aliases => 'retention-time', :type => :integer
|
|
attribute :granularity, :type => :integer
|
|
attribute :idle_max, :aliases => 'idle-max', :type => :integer
|
|
attribute :transformations, :type => :array
|
|
attribute :persist_data, :aliases => 'persist-data', :type => :boolean
|
|
attribute :crtime
|
|
attribute :value_scope, :aliases => 'value-scope'
|
|
attribute :uris, :type => :array
|
|
|
|
def initialize(attributes={})
|
|
self.decomposition = []
|
|
self.value_arity = 'scalar'
|
|
self.retention_time = 600
|
|
self.idle_max = 3600
|
|
self.persist_data = false
|
|
self.value_scope = 'interval'
|
|
super
|
|
end
|
|
|
|
def crtime=(new_crtime)
|
|
attributes[:crtime] = Time.at(new_crtime.to_i / 1000)
|
|
end
|
|
|
|
def decomposition=(value)
|
|
attributes[:decomposition] = value
|
|
self.value_dimension = self.decomposition.size + 1
|
|
self.decomposition
|
|
end
|
|
|
|
def save
|
|
requires :joyent_module, :stat
|
|
munged_attributes = self.attributes.dup
|
|
remap_attributes(munged_attributes, {
|
|
:joyent_module => 'module',
|
|
:value_dimension => 'value-dimension',
|
|
:value_arity => 'value-arity',
|
|
:retention_time => 'retention-time',
|
|
:idle_max => 'idle-max',
|
|
:persist_data => 'persist-data',
|
|
:value_scope => 'value-scope'
|
|
})
|
|
|
|
data = service.create_instrumentation(munged_attributes)
|
|
merge_attributes(data.body)
|
|
true
|
|
end
|
|
|
|
def destroy
|
|
requires :id
|
|
service.delete_instrumentation(self.identity)
|
|
true
|
|
end
|
|
|
|
# Get a set of datapoints back for an instrumentation
|
|
# use start_time and ndatapoints so we can get back a range of datapoints
|
|
# the interval between datapoints should correspond to the granularity of the instrumentation
|
|
# @param [Time] start_time
|
|
# @param [Integer] ndatapoints
|
|
def values(start_time, ndatapoints)
|
|
requires :id, :granularity
|
|
data = service.get_instrumentation_value(self.uris.find {|uri| uri['name'] == 'value_raw'}['uri'], start_time, ndatapoints, self.granularity).body
|
|
data.map do |datum|
|
|
Fog::Joyent::Analytics::Value.new(datum)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|