class ThreeScaleToolbox::Entities::Metric

Attributes

id[R]
remote[R]
service[R]

Public Class Methods

create(service:, attrs:) click to toggle source
# File lib/3scale_toolbox/entities/metric.rb, line 7
def create(service:, attrs:)
  metric = service.remote.create_metric service.id, attrs
  if (errors = metric['errors'])
    raise ThreeScaleToolbox::ThreeScaleApiError.new('Metric has not been created', errors)
  end

  new(id: metric.fetch('id'), service: service, attrs: metric)
end
find(service:, ref:) click to toggle source

ref can be system_name or metric_id

# File lib/3scale_toolbox/entities/metric.rb, line 17
def find(service:, ref:)
  new(id: ref, service: service).tap(&:attrs)
rescue ThreeScale::API::HttpClient::NotFoundError
  find_by_system_name(service: service, system_name: ref)
end
find_by_system_name(service:, system_name:) click to toggle source
# File lib/3scale_toolbox/entities/metric.rb, line 23
def find_by_system_name(service:, system_name:)
  service.metrics.find { |m| m.system_name == system_name }
end
new(id:, service:, attrs: nil) click to toggle source
# File lib/3scale_toolbox/entities/metric.rb, line 30
def initialize(id:, service:, attrs: nil)
  @id = id.to_i
  @service = service
  @remote = service.remote
  @attrs = attrs
end

Public Instance Methods

attrs() click to toggle source
# File lib/3scale_toolbox/entities/metric.rb, line 37
def attrs
  @attrs ||= metric_attrs
end
delete() click to toggle source
# File lib/3scale_toolbox/entities/metric.rb, line 91
def delete
  remote.delete_metric service.id, id
end
description() click to toggle source
# File lib/3scale_toolbox/entities/metric.rb, line 53
def description
  attrs['description']
end
disable() click to toggle source
# File lib/3scale_toolbox/entities/metric.rb, line 57
def disable
  # For each plan, get limits for the current metric
  # if already disabled -> NOOP
  # if non zero eternity limit exist, update
  # if non eternity limit exist, create
  service.plans.each do |plan|
    eternity_limit = plan_eternity_limit(plan)
    if eternity_limit.nil?
      plan.create_limit(id, zero_eternity_limit_attrs)
    elsif !eternity_limit.value.zero?
      eternity_limit.update(zero_eternity_limit_attrs)
    end
  end
end
enable() click to toggle source
# File lib/3scale_toolbox/entities/metric.rb, line 72
def enable
  service.plans.each do |plan|
    limit = plan_zero_eternity_limit(plan)
    limit.delete unless limit.nil?
  end
end
friendly_name() click to toggle source
# File lib/3scale_toolbox/entities/metric.rb, line 45
def friendly_name
  attrs['friendly_name']
end
system_name() click to toggle source
# File lib/3scale_toolbox/entities/metric.rb, line 41
def system_name
  attrs['system_name']
end
unit() click to toggle source
# File lib/3scale_toolbox/entities/metric.rb, line 49
def unit
  attrs['unit']
end
update(new_metric_attrs) click to toggle source
# File lib/3scale_toolbox/entities/metric.rb, line 79
def update(new_metric_attrs)
  new_attrs = remote.update_metric(service.id, id, new_metric_attrs)
  if (errors = new_attrs['errors'])
    raise ThreeScaleToolbox::ThreeScaleApiError.new('Metric has not been updated', errors)
  end

  # update current attrs
  @attrs = new_attrs

  new_attrs
end

Private Instance Methods

metric_attrs() click to toggle source
# File lib/3scale_toolbox/entities/metric.rb, line 97
def metric_attrs
  metric = remote.show_metric service.id, id
  if (errors = metric['errors'])
    raise ThreeScaleToolbox::ThreeScaleApiError.new('Metric attrs not read', errors)
  end

  metric
end
plan_eternity_limit(plan) click to toggle source
# File lib/3scale_toolbox/entities/metric.rb, line 114
def plan_eternity_limit(plan)
  # only one limit for eternity period is allowed per (plan_id, metric_id)
  plan.metric_limits(id).find { |limit| limit.period == 'eternity' }
end
plan_zero_eternity_limit(plan) click to toggle source
# File lib/3scale_toolbox/entities/metric.rb, line 106
def plan_zero_eternity_limit(plan)
  # only one limit for eternity period is allowed per (plan_id, metric_id)
  #plan.metric_limits(id).find { |limit| limit.attrs > zero_eternity_limit_attrs }
  plan.metric_limits(id).find do |limit|
    limit.attrs > zero_eternity_limit_attrs
  end
end
zero_eternity_limit_attrs() click to toggle source
# File lib/3scale_toolbox/entities/metric.rb, line 119
def zero_eternity_limit_attrs
  { 'period' => 'eternity', 'value' => 0 }
end