Module: CloudCostTracker
- Included in:
- Billing::ResourceBillingPolicy
- Defined in:
- lib/cloud_cost_tracker.rb,
lib/cloud_cost_tracker/tracker.rb,
lib/cloud_cost_tracker/version.rb,
lib/cloud_cost_tracker/coding/rds/servers.rb,
lib/cloud_cost_tracker/billing/rds/servers.rb,
lib/cloud_cost_tracker/models/billing_code.rb,
lib/cloud_cost_tracker/extensions/fog_model.rb,
lib/cloud_cost_tracker/models/billing_record.rb,
lib/cloud_cost_tracker/billing/rds/server_storage.rb,
lib/cloud_cost_tracker/coding/compute/aws/servers.rb,
lib/cloud_cost_tracker/coding/compute/aws/volumes.rb,
lib/cloud_cost_tracker/billing/compute/aws/servers.rb,
lib/cloud_cost_tracker/billing/compute/aws/volumes.rb,
lib/cloud_cost_tracker/billing/elasticache/clusters.rb,
lib/cloud_cost_tracker/coding/account_coding_policy.rb,
lib/cloud_cost_tracker/billing/compute/aws/snapshots.rb,
lib/cloud_cost_tracker/coding/resource_coding_policy.rb,
lib/cloud_cost_tracker/billing/account_billing_policy.rb,
lib/cloud_cost_tracker/billing/resource_billing_policy.rb,
lib/cloud_cost_tracker/billing/storage/aws/directories.rb,
lib/cloud_cost_tracker/coding/rds/account_coding_policy.rb,
lib/cloud_cost_tracker/coding/compute/aws/account_coding_policy.rb
Overview
Abstract class, defines a generic Billing Policy that always returns 0.0 cost
Defined Under Namespace
Modules: Billing, Coding, Extensions Classes: Tracker
Constant Summary collapse
- VERSION =
"0.1.2"
Class Method Summary collapse
-
.account_coding_class(fog_service, provider) ⇒ Object
Returns a Class object, of the appropriate subclass of AccountCodingPolicy, given a Fog service and provider name.
-
.connect_to_database(db_file = ENV['DB_CONFIG_FILE']) ⇒ Hash
Connects to the database defined in db_file.
-
.create_billing_agents(resource_class, options = {}) ⇒ Array <ResourceBillingPolicy>
Creates and returns an Array of ResourceBillingPolicy (subclass) instances for billing the given
resource
, or an empty Array of none are found. -
.create_coding_agents(resource_class, options = {}) ⇒ Array <ResourceCodingPolicy>
Creates and returns an Array of ResourceCodingPolicy (subclass) instances for coding the given
resource
, or an empty Array of none are found. -
.env ⇒ String
Returns the current RACK_ENV or RAILS_ENV, or ‘development’ if not set.
-
.read_accounts(account_file = ENV['ACCOUNT_FILE']) ⇒ Hash
Loads account information defined in account_file.
Class Method Details
.account_coding_class(fog_service, provider) ⇒ Object
Returns a Class object, of the appropriate subclass of AccountCodingPolicy, given a Fog service and provider name. If none exists, returns CloudCostTracker::Coding::AccountCodingPolicy.
100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/cloud_cost_tracker.rb', line 100 def self.account_coding_class(fog_service, provider) agent_class = CloudCostTracker::Coding::AccountCodingPolicy if CloudCostTracker::Coding.const_defined? fog_service service_module = CloudCostTracker::Coding::const_get fog_service if service_module.const_defined? provider provider_module = service_module.const_get provider if provider_module.const_defined? 'AccountCodingPolicy' agent_class = provider_module.const_get 'AccountCodingPolicy' end end end agent_class end |
.connect_to_database(db_file = ENV['DB_CONFIG_FILE']) ⇒ Hash
Connects to the database defined in db_file. Uses the YAML section indexed by env.
27 28 29 30 31 32 33 34 |
# File 'lib/cloud_cost_tracker.rb', line 27 def self.connect_to_database(db_file = ENV['DB_CONFIG_FILE']) db_file ||= "./config/database.yml" all_dbs = YAML::load(File.read db_file) if not ::ActiveRecord::Base.connected? ::ActiveRecord::Base.establish_connection(all_dbs[CloudCostTracker.env]) end all_dbs[CloudCostTracker.env] end |
.create_billing_agents(resource_class, options = {}) ⇒ Array <ResourceBillingPolicy>
Creates and returns an Array of ResourceBillingPolicy (subclass) instances for billing the given resource
, or an empty Array of none are found
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/cloud_cost_tracker.rb', line 49 def self.create_billing_agents(resource_class, = {}) agents = Array.new # Safely descend through the Billing module Heirarchy if matches = resource_class.name.match(%r{^Fog::(\w+)::(\w+)::(\w+)}) fog_svc, provider, model_name = matches[1], matches[2], matches[3] if CloudCostTracker::Billing.const_defined? fog_svc service_module = CloudCostTracker::Billing::const_get fog_svc if service_module.const_defined? provider provider_module = service_module.const_get provider # Search through the classes in the module for all matches classes = provider_module.classes.each do |policy_class| if policy_class.name =~ /#{model_name}.*BillingPolicy/ agents << policy_class.new(:logger => [:logger]) end end end end end agents.sort {|a,b| a.class.name <=> b.class.name} # sort by class name end |
.create_coding_agents(resource_class, options = {}) ⇒ Array <ResourceCodingPolicy>
Creates and returns an Array of ResourceCodingPolicy (subclass) instances for coding the given resource
, or an empty Array of none are found
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/cloud_cost_tracker.rb', line 76 def self.create_coding_agents(resource_class, = {}) agents = Array.new # Safely descend through the Coding module Heirarchy if matches = resource_class.name.match(%r{^Fog::(\w+)::(\w+)::(\w+)}) fog_svc, provider, model_name = matches[1], matches[2], matches[3] if CloudCostTracker::Coding.const_defined? fog_svc service_module = CloudCostTracker::Coding::const_get fog_svc if service_module.const_defined? provider provider_module = service_module.const_get provider # Search through the classes in the module for all matches classes = provider_module.classes.each do |policy_class| if policy_class.name =~ /#{model_name}.*CodingPolicy/ agents << policy_class.new(:logger => [:logger]) end end end end end agents.sort {|a,b| a.class.name <=> b.class.name} # sort by class name end |
.env ⇒ String
Returns the current RACK_ENV or RAILS_ENV, or ‘development’ if not set.
19 20 21 |
# File 'lib/cloud_cost_tracker.rb', line 19 def self.env (ENV['RACK_ENV'] || ENV['RAILS_ENV'] || 'development').downcase end |
.read_accounts(account_file = ENV['ACCOUNT_FILE']) ⇒ Hash
Loads account information defined in account_file.
39 40 41 |
# File 'lib/cloud_cost_tracker.rb', line 39 def self.read_accounts(account_file = ENV['ACCOUNT_FILE']) FogTracker.read_accounts(account_file) end |