3scale_toolbox 0.17.1 → 0.19.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (99) hide show
  1. checksums.yaml +4 -4
  2. data/3scale_toolbox.gemspec +4 -4
  3. data/README.md +7 -5
  4. data/lib/3scale_toolbox.rb +3 -0
  5. data/lib/3scale_toolbox/3scale_client_factory.rb +3 -4
  6. data/lib/3scale_toolbox/commands.rb +2 -0
  7. data/lib/3scale_toolbox/commands/backend_command/copy_command.rb +3 -0
  8. data/lib/3scale_toolbox/commands/backend_command/copy_command/copy_mapping_rules_task.rb +11 -27
  9. data/lib/3scale_toolbox/commands/backend_command/copy_command/copy_methods_task.rb +5 -10
  10. data/lib/3scale_toolbox/commands/backend_command/copy_command/copy_metrics_task.rb +4 -4
  11. data/lib/3scale_toolbox/commands/backend_command/copy_command/create_or_update_target_backend_task.rb +3 -2
  12. data/lib/3scale_toolbox/commands/backend_command/copy_command/delete_mapping_rules_task.rb +18 -0
  13. data/lib/3scale_toolbox/commands/backend_command/copy_command/task.rb +14 -32
  14. data/lib/3scale_toolbox/commands/import_command/issuer_type_transformer.rb +16 -0
  15. data/lib/3scale_toolbox/commands/import_command/openapi.rb +5 -0
  16. data/lib/3scale_toolbox/commands/import_command/openapi/create_activedocs_step.rb +3 -2
  17. data/lib/3scale_toolbox/commands/import_command/openapi/create_mapping_rule_step.rb +2 -1
  18. data/lib/3scale_toolbox/commands/import_command/openapi/create_method_step.rb +5 -14
  19. data/lib/3scale_toolbox/commands/import_command/openapi/step.rb +4 -0
  20. data/lib/3scale_toolbox/commands/import_command/openapi/update_service_proxy_step.rb +1 -0
  21. data/lib/3scale_toolbox/commands/methods_command/apply_command.rb +2 -4
  22. data/lib/3scale_toolbox/commands/methods_command/create_command.rb +0 -2
  23. data/lib/3scale_toolbox/commands/methods_command/delete_command.rb +1 -1
  24. data/lib/3scale_toolbox/commands/methods_command/list_command.rb +1 -9
  25. data/lib/3scale_toolbox/commands/metrics_command/list_command.rb +1 -1
  26. data/lib/3scale_toolbox/commands/plans_command/export/read_plan_limits_step.rb +1 -1
  27. data/lib/3scale_toolbox/commands/plans_command/export/read_plan_methods_step.rb +2 -2
  28. data/lib/3scale_toolbox/commands/plans_command/export/read_plan_metrics_step.rb +2 -2
  29. data/lib/3scale_toolbox/commands/plans_command/export/read_plan_pricing_rules_step.rb +1 -2
  30. data/lib/3scale_toolbox/commands/plans_command/export/step.rb +8 -20
  31. data/lib/3scale_toolbox/commands/plans_command/import/import_plan_limits_step.rb +7 -8
  32. data/lib/3scale_toolbox/commands/plans_command/import/import_plan_metrics_step.rb +6 -13
  33. data/lib/3scale_toolbox/commands/plans_command/import/import_plan_pricing_rules_step.rb +8 -15
  34. data/lib/3scale_toolbox/commands/plans_command/import/step.rb +2 -22
  35. data/lib/3scale_toolbox/commands/plans_command/list_command.rb +1 -1
  36. data/lib/3scale_toolbox/commands/plans_command/show_command.rb +1 -1
  37. data/lib/3scale_toolbox/commands/policies_command.rb +24 -0
  38. data/lib/3scale_toolbox/commands/policies_command/export_command.rb +98 -0
  39. data/lib/3scale_toolbox/commands/policies_command/import_command.rb +61 -0
  40. data/lib/3scale_toolbox/commands/product_command.rb +4 -0
  41. data/lib/3scale_toolbox/commands/product_command/copy_command.rb +8 -3
  42. data/lib/3scale_toolbox/commands/product_command/copy_command/copy_backends_task.rb +28 -5
  43. data/lib/3scale_toolbox/commands/product_command/export_command.rb +81 -0
  44. data/lib/3scale_toolbox/commands/product_command/import_command.rb +126 -0
  45. data/lib/3scale_toolbox/commands/proxy_config_command.rb +2 -0
  46. data/lib/3scale_toolbox/commands/proxy_config_command/deploy_command.rb +54 -0
  47. data/lib/3scale_toolbox/commands/service_command/copy_command/copy_activedocs_task.rb +15 -12
  48. data/lib/3scale_toolbox/commands/service_command/copy_command/copy_app_plans_task.rb +15 -15
  49. data/lib/3scale_toolbox/commands/service_command/copy_command/copy_limits_task.rb +12 -13
  50. data/lib/3scale_toolbox/commands/service_command/copy_command/copy_mapping_rules_task.rb +11 -11
  51. data/lib/3scale_toolbox/commands/service_command/copy_command/copy_methods_task.rb +9 -12
  52. data/lib/3scale_toolbox/commands/service_command/copy_command/copy_metrics_task.rb +8 -8
  53. data/lib/3scale_toolbox/commands/service_command/copy_command/copy_policies_task.rb +1 -1
  54. data/lib/3scale_toolbox/commands/service_command/copy_command/copy_pricingrules_task.rb +15 -18
  55. data/lib/3scale_toolbox/commands/service_command/copy_command/copy_service_proxy_task.rb +2 -2
  56. data/lib/3scale_toolbox/commands/service_command/copy_command/create_or_update_service_task.rb +2 -1
  57. data/lib/3scale_toolbox/commands/service_command/copy_command/destroy_mapping_rules_task.rb +9 -5
  58. data/lib/3scale_toolbox/commands/service_command/copy_command/task.rb +20 -34
  59. data/lib/3scale_toolbox/commands/update_command/service_command/delete_activedocs_task.rb +1 -3
  60. data/lib/3scale_toolbox/crds.rb +16 -0
  61. data/lib/3scale_toolbox/crds/application_plan_dump.rb +19 -0
  62. data/lib/3scale_toolbox/crds/backend_dump.rb +39 -0
  63. data/lib/3scale_toolbox/crds/backend_mapping_rule_dump.rb +26 -0
  64. data/lib/3scale_toolbox/crds/backend_method_dump.rb +12 -0
  65. data/lib/3scale_toolbox/crds/backend_metric_dump.rb +13 -0
  66. data/lib/3scale_toolbox/crds/backend_parser.rb +55 -0
  67. data/lib/3scale_toolbox/crds/backend_usage_dump.rb +11 -0
  68. data/lib/3scale_toolbox/crds/limit_dump.rb +37 -0
  69. data/lib/3scale_toolbox/crds/mapping_rule_dump.rb +26 -0
  70. data/lib/3scale_toolbox/crds/method_dump.rb +12 -0
  71. data/lib/3scale_toolbox/crds/metric_dump.rb +13 -0
  72. data/lib/3scale_toolbox/crds/pricing_rule_dump.rb +38 -0
  73. data/lib/3scale_toolbox/crds/product_deployment_parser.rb +329 -0
  74. data/lib/3scale_toolbox/crds/product_dump.rb +157 -0
  75. data/lib/3scale_toolbox/crds/product_parser.rb +114 -0
  76. data/lib/3scale_toolbox/crds/remote.rb +682 -0
  77. data/lib/3scale_toolbox/entities.rb +3 -0
  78. data/lib/3scale_toolbox/entities/account.rb +1 -1
  79. data/lib/3scale_toolbox/entities/activedocs.rb +12 -0
  80. data/lib/3scale_toolbox/entities/application_plan.rb +54 -46
  81. data/lib/3scale_toolbox/entities/backend.rb +65 -30
  82. data/lib/3scale_toolbox/entities/backend_mapping_rule.rb +29 -3
  83. data/lib/3scale_toolbox/entities/backend_method.rb +25 -16
  84. data/lib/3scale_toolbox/entities/backend_metric.rb +12 -2
  85. data/lib/3scale_toolbox/entities/backend_usage.rb +7 -1
  86. data/lib/3scale_toolbox/entities/limit.rb +71 -0
  87. data/lib/3scale_toolbox/entities/mapping_rule.rb +90 -0
  88. data/lib/3scale_toolbox/entities/method.rb +33 -19
  89. data/lib/3scale_toolbox/entities/metric.rb +29 -18
  90. data/lib/3scale_toolbox/entities/pricing_rule.rb +63 -0
  91. data/lib/3scale_toolbox/entities/proxy_config.rb +0 -1
  92. data/lib/3scale_toolbox/entities/service.rb +149 -46
  93. data/lib/3scale_toolbox/helper.rb +13 -16
  94. data/lib/3scale_toolbox/proxy_logger.rb +4 -0
  95. data/lib/3scale_toolbox/remote_cache.rb +164 -0
  96. data/lib/3scale_toolbox/remotes.rb +2 -2
  97. data/lib/3scale_toolbox/version.rb +1 -1
  98. data/licenses.xml +98 -50
  99. metadata +37 -9
@@ -6,35 +6,38 @@ module ThreeScaleToolbox
6
6
  include Task
7
7
 
8
8
  def call
9
- puts 'copying all service ActiveDocs'
9
+ logger.info 'copying all service ActiveDocs'
10
10
 
11
11
  source.activedocs.each(&method(:apply_target_activedoc))
12
12
  end
13
13
 
14
14
  private
15
15
 
16
- def apply_target_activedoc(attrs)
16
+ def apply_target_activedoc(source_activedoc)
17
17
  activedocs = Entities::ActiveDocs.find_by_system_name(remote: target.remote,
18
- system_name: attrs['system_name'])
18
+ system_name: source_activedoc.system_name)
19
19
  if activedocs.nil?
20
- Entities::ActiveDocs.create(remote: target.remote, attrs: create_attrs(attrs))
20
+ activedocs = Entities::ActiveDocs.create(remote: target.remote, attrs: create_attrs(source_activedoc))
21
+ activedocs_report[activedocs.system_name] = { 'id' => activedocs.id, 'status' => 'created' }
21
22
  elsif activedocs.attrs.fetch('service_id') == target.id
22
- activedocs.update(update_attrs(attrs))
23
+ activedocs.update(update_attrs(source_activedoc))
24
+ activedocs_report[activedocs.system_name] = { 'id' => activedocs.id, 'status' => 'updated' }
23
25
  else
24
26
  # activedocs with same system_name exists, but now owned by target service
25
- new_attrs = create_attrs(attrs)
26
- new_attrs['system_name'] = "#{attrs['system_name']}#{target.id}"
27
- Entities::ActiveDocs.create(remote: target.remote, attrs: new_attrs)
27
+ new_attrs = create_attrs(source_activedoc)
28
+ new_attrs['system_name'] = "#{source_activedoc.system_name}#{target.id}"
29
+ activedocs = Entities::ActiveDocs.create(remote: target.remote, attrs: new_attrs)
30
+ activedocs_report[activedocs.system_name] = { 'id' => activedocs.id, 'status' => 'created' }
28
31
  end
29
32
  end
30
33
 
31
- def update_attrs(old_attrs)
32
- create_attrs(old_attrs)
34
+ def update_attrs(activedoc)
35
+ create_attrs(activedoc)
33
36
  end
34
37
 
35
- def create_attrs(old_attrs)
38
+ def create_attrs(activedoc)
36
39
  # keep same system_name
37
- new_attrs = old_attrs.reject { |key, _| %w[id created_at updated_at].include? key }
40
+ new_attrs = activedoc.attrs.reject { |key, _| %w[id created_at updated_at].include? key }
38
41
  new_attrs.tap do |attrs|
39
42
  attrs['service_id'] = target.id
40
43
  end
@@ -6,26 +6,26 @@ module ThreeScaleToolbox
6
6
  include Task
7
7
 
8
8
  def call
9
- source_plans = source.plans
10
- target_plans = target.plans
11
- missing_plans = missing_app_plans(source_plans, target_plans)
12
- missing_plans.each do |plan|
13
- plan.delete('links')
14
- plan.delete('default') # TODO: handle default plan
15
- if plan.delete('custom') # TODO: what to do with custom plans?
16
- puts "skipping custom plan #{plan}"
17
- else
18
- ThreeScaleToolbox::Entities::ApplicationPlan.create(service: target, plan_attrs: plan)
19
- end
9
+ missing_regular_plans.each do |plan|
10
+ plan_attrs = plan.attrs.clone
11
+ plan_attrs.delete('links')
12
+ plan_attrs.delete('default') # TODO: handle default plan
13
+ ThreeScaleToolbox::Entities::ApplicationPlan.create(service: target, plan_attrs: plan_attrs)
20
14
  end
21
- puts "target service missing #{missing_plans.size} application plans"
15
+
16
+ logger.info "target service missing #{missing_regular_plans.size} application plans"
17
+ report['missing_application_plans_created'] = missing_regular_plans.size
22
18
  end
23
19
 
24
20
  private
25
21
 
26
- def missing_app_plans(source_plans, target_plans)
27
- ThreeScaleToolbox::Helper.array_difference(source_plans, target_plans) do |src, target|
28
- ThreeScaleToolbox::Helper.compare_hashes(src, target, ['system_name'])
22
+ def missing_regular_plans
23
+ missing_plans.reject(&:custom)
24
+ end
25
+
26
+ def missing_plans
27
+ @missing_plans ||= ThreeScaleToolbox::Helper.array_difference(source.plans, target.plans) do |src, target|
28
+ src.system_name == target.system_name
29
29
  end
30
30
  end
31
31
  end
@@ -7,29 +7,28 @@ module ThreeScaleToolbox
7
7
 
8
8
  def call
9
9
  plan_mapping = Helper.application_plan_mapping(source.plans, target.plans)
10
- plan_mapping.each do |plan_id, target_plan|
11
- source_plan = ThreeScaleToolbox::Entities::ApplicationPlan.new(id: plan_id, service: source)
12
- target_plan = ThreeScaleToolbox::Entities::ApplicationPlan.new(id: target_plan['id'], service: target)
13
- missing_limits = missing_limits(source_plan.limits, target_plan.limits, metrics_map)
10
+ plan_mapping.each do |source_plan, target_plan|
11
+ missing_limits = compute_missing_limits(source_plan.limits, target_plan.limits)
14
12
  missing_limits.each do |limit|
15
- limit.delete('links')
16
- target_plan.create_limit(metrics_map.fetch(limit.fetch('metric_id')), limit)
13
+ target_plan.create_limit(metrics_map.fetch(limit.metric_id), limit.attrs)
17
14
  end
18
- puts "Missing #{missing_limits.size} plan limits from target application plan " \
19
- "#{target_plan.id}. Source plan #{plan_id}"
15
+ logger.info "Missing #{missing_limits.size} plan limits from target application plan " \
16
+ "#{target_plan.id}. Source plan #{source_plan.id}"
17
+
18
+ plans_report[target_plan.system_name] = {'application_plan_id' => target_plan.id} unless plans_report.has_key? target_plan.system_name
19
+ plans_report[target_plan.system_name].merge!({'missing_limits_created' => missing_limits.size})
20
20
  end
21
21
  end
22
22
 
23
23
  private
24
24
 
25
25
  def metrics_map
26
- @metrics_map ||= Helper.metrics_mapping(source_metrics_and_methods, target_metrics_and_methods)
26
+ @metrics_map ||= source.metrics_mapping(target)
27
27
  end
28
28
 
29
- def missing_limits(source_limits, target_limits, metrics_map)
30
- ThreeScaleToolbox::Helper.array_difference(source_limits, target_limits) do |limit, target|
31
- ThreeScaleToolbox::Helper.compare_hashes(limit, target, ['period']) &&
32
- metrics_map.fetch(limit.fetch('metric_id')) == target.fetch('metric_id')
29
+ def compute_missing_limits(source_limits, target_limits)
30
+ ThreeScaleToolbox::Helper.array_difference(source_limits, target_limits) do |limit, target_limit|
31
+ limit.period == target_limit.period && metrics_map.fetch(limit.metric_id) == target_limit.metric_id
33
32
  end
34
33
  end
35
34
  end
@@ -6,26 +6,26 @@ module ThreeScaleToolbox
6
6
  include Task
7
7
 
8
8
  def call
9
- missing_rules = missing_mapping_rules(source.mapping_rules,
10
- target.mapping_rules, metrics_map)
11
9
  missing_rules.each do |mapping_rule|
12
- mapping_rule.delete('links')
13
- mapping_rule['metric_id'] = metrics_map.fetch(mapping_rule.delete('metric_id'))
14
- target.create_mapping_rule mapping_rule
10
+ mr_attrs = mapping_rule.attrs.merge('metric_id' => metrics_map.fetch(mapping_rule.metric_id))
11
+ Entities::MappingRule.create(service: target, attrs: mr_attrs)
15
12
  end
16
- puts "created #{missing_rules.size} mapping rules"
13
+ logger.info "created #{missing_rules.size} mapping rules"
14
+ report['missing_mapping_rules_created'] = missing_rules.size
17
15
  end
18
16
 
19
17
  private
20
18
 
21
19
  def metrics_map
22
- @metrics_map ||= Helper.metrics_mapping(source_metrics_and_methods, target_metrics_and_methods)
20
+ @metrics_map ||= source.metrics_mapping(target)
23
21
  end
24
22
 
25
- def missing_mapping_rules(source_rules, target_rules, metrics_map)
26
- ThreeScaleToolbox::Helper.array_difference(source_rules, target_rules) do |source_rule, target_rule|
27
- ThreeScaleToolbox::Helper.compare_hashes(source_rule, target_rule, %w[pattern http_method delta]) &&
28
- metrics_map.fetch(source_rule.fetch('metric_id')) == target_rule.fetch('metric_id')
23
+ def missing_rules
24
+ @missing_rules ||= ThreeScaleToolbox::Helper.array_difference(source.mapping_rules, target.mapping_rules) do |source_rule, target_rule|
25
+ source_rule.pattern == target_rule.pattern &&
26
+ source_rule.http_method == target_rule.http_method &&
27
+ source_rule.delta == target_rule.delta &&
28
+ metrics_map.fetch(source_rule.metric_id) == target_rule.metric_id
29
29
  end
30
30
  end
31
31
  end
@@ -6,31 +6,28 @@ module ThreeScaleToolbox
6
6
  include Task
7
7
 
8
8
  def call
9
- puts "original service hits metric #{source_hits.fetch('id')} has #{source_methods.size} methods"
10
- puts "target service hits metric #{target_hits.fetch('id')} has #{target_methods.size} methods"
9
+ logger.info "original service hits metric #{source.hits.id} has #{source.methods.size} methods"
10
+ logger.info "target service hits metric #{target.hits.id} has #{target.methods.size} methods"
11
11
  missing_methods.each(&method(:create_method))
12
- puts "created #{missing_methods.size} missing methods on target service"
13
- invalidate_target_methods if missing_methods.size.positive?
12
+ logger.info "created #{missing_methods.size} missing methods on target service"
13
+ report['missing_methods_created'] = missing_methods.size
14
14
  end
15
15
 
16
16
  private
17
17
 
18
18
  def create_method(method)
19
- Entities::Method.create(
20
- service: target,
21
- parent_id: target_hits.fetch('id'),
22
- attrs: ThreeScaleToolbox::Helper.filter_params(%w[friendly_name system_name], method)
23
- )
19
+ new_method = method.attrs.reject { |key, _| %w[id links].include? key }
20
+ Entities::Method.create(service: target, attrs: new_method)
24
21
  rescue ThreeScaleToolbox::ThreeScaleApiError => e
25
22
  raise e unless ThreeScaleToolbox::Helper.system_name_already_taken_error?(e.apierrors)
26
23
 
27
- warn "[WARN] method #{method.fetch('system_name')} not created. " \
24
+ warn "[WARN] method #{method.system_name} not created. " \
28
25
  'Metric with the same system_name exists.'
29
26
  end
30
27
 
31
28
  def missing_methods
32
- @missing_methods ||= ThreeScaleToolbox::Helper.array_difference(source_methods, target_methods) do |method, target|
33
- ThreeScaleToolbox::Helper.compare_hashes(method, target, ['system_name'])
29
+ @missing_methods ||= ThreeScaleToolbox::Helper.array_difference(source.methods, target.methods) do |method, target|
30
+ method.system_name == target.system_name
34
31
  end
35
32
  end
36
33
  end
@@ -6,28 +6,28 @@ module ThreeScaleToolbox
6
6
  include Task
7
7
 
8
8
  def call
9
- puts "original service has #{source_metrics.size} metrics"
10
- puts "target service has #{target_metrics.size} metrics"
9
+ logger.info "original service has #{source.metrics.size} metrics"
10
+ logger.info "target service has #{target.metrics.size} metrics"
11
11
  missing_metrics.each(&method(:create_metric))
12
- puts "created #{missing_metrics.size} metrics on the target service"
13
- invalidate_target_metrics if missing_metrics.size.positive?
12
+ logger.info "created #{missing_metrics.size} metrics on the target service"
13
+ report['missing_metrics_created'] = missing_metrics.size
14
14
  end
15
15
 
16
16
  private
17
17
 
18
18
  def create_metric(metric)
19
- new_metric = metric.reject { |key, _| %w[id links].include? key }
19
+ new_metric = metric.attrs.reject { |key, _| %w[id links].include? key }
20
20
  Entities::Metric.create(service: target, attrs: new_metric)
21
21
  rescue ThreeScaleToolbox::ThreeScaleApiError => e
22
22
  raise e unless ThreeScaleToolbox::Helper.system_name_already_taken_error?(e.apierrors)
23
23
 
24
- warn "[WARN] metric #{metric.fetch('system_name')} not created. " \
24
+ warn "[WARN] metric #{metric.system_name} not created. " \
25
25
  'Method with the same system_name exists.'
26
26
  end
27
27
 
28
28
  def missing_metrics
29
- @missing_metrics ||= ThreeScaleToolbox::Helper.array_difference(source_metrics, target_metrics) do |source, target|
30
- ThreeScaleToolbox::Helper.compare_hashes(source, target, ['system_name'])
29
+ @missing_metrics ||= ThreeScaleToolbox::Helper.array_difference(source.metrics, target.metrics) do |s_m, t_m|
30
+ s_m.system_name == t_m.system_name
31
31
  end
32
32
  end
33
33
  end
@@ -6,7 +6,7 @@ module ThreeScaleToolbox
6
6
  include Task
7
7
 
8
8
  def call
9
- puts 'copy proxy policies'
9
+ logger.info 'copy proxy policies'
10
10
  source_policies = source.policies
11
11
  target.update_policies('policies_config' => source_policies)
12
12
  end
@@ -7,34 +7,31 @@ module ThreeScaleToolbox
7
7
 
8
8
  def call
9
9
  plan_mapping = Helper.application_plan_mapping(source.plans, target.plans)
10
- plan_mapping.each do |plan_id, target_plan|
11
- pricing_rules_source = source.remote.list_pricingrules_per_application_plan(plan_id)
12
- pricing_rules_target = target.remote.list_pricingrules_per_application_plan(target_plan['id'])
13
- missing_pricing_rules = missing_pricing_rules(pricing_rules_source, pricing_rules_target,
14
- metrics_map)
10
+ plan_mapping.each do |source_plan, target_plan|
11
+ missing_pricing_rules = compute_missing_pricing_rules(source_plan.pricing_rules, target_plan.pricing_rules)
15
12
  missing_pricing_rules.each do |pricing_rule|
16
- pricing_rule.delete('links')
17
- target.remote.create_pricingrule(
18
- target_plan['id'],
19
- metrics_map.fetch(pricing_rule['metric_id']),
20
- pricing_rule
21
- )
13
+ target_plan.create_pricing_rule(metrics_map.fetch(pricing_rule.metric_id), pricing_rule.attrs)
22
14
  end
23
- puts "Missing #{missing_pricing_rules.size} pricing rules from target application plan " \
24
- "#{target_plan['id']}. Source plan #{plan_id}"
15
+ logger.info "Missing #{missing_pricing_rules.size} pricing rules from target application plan " \
16
+ "#{target_plan.id}. Source plan #{source_plan.id}"
17
+
18
+ plans_report[target_plan.system_name] = {'application_plan_id' => target_plan.id} unless plans_report.has_key? target_plan.system_name
19
+ plans_report[target_plan.system_name].merge!({'missing_pricing_rules_created' => missing_pricing_rules.size})
25
20
  end
26
21
  end
27
22
 
28
23
  private
29
24
 
30
25
  def metrics_map
31
- @metrics_map ||= Helper.metrics_mapping(source_metrics_and_methods, target_metrics_and_methods)
26
+ @metrics_map ||= source.metrics_mapping(target)
32
27
  end
33
28
 
34
- def missing_pricing_rules(source_pricing_rules, target_pricing_rules, metrics_map)
35
- ThreeScaleToolbox::Helper.array_difference(source_pricing_rules, target_pricing_rules) do |src, target|
36
- ThreeScaleToolbox::Helper.compare_hashes(src, target, %w[cost_per_unit min max]) &&
37
- metrics_map.fetch(src.fetch('metric_id')) == target.fetch('metric_id')
29
+ def compute_missing_pricing_rules(source_pricing_rules, target_pricing_rules)
30
+ ThreeScaleToolbox::Helper.array_difference(source_pricing_rules, target_pricing_rules) do |src, target_pr|
31
+ src.cost_per_unit == target_pr.cost_per_unit &&
32
+ src.min == target_pr.min &&
33
+ src.max == target_pr.max &&
34
+ metrics_map.fetch(src.metric_id) == target_pr.metric_id
38
35
  end
39
36
  end
40
37
  end
@@ -8,12 +8,12 @@ module ThreeScaleToolbox
8
8
  def call
9
9
  target.update_proxy target_proxy_attrs
10
10
  target.update_oidc source.oidc if source.attrs['backend_version'] == 'oidc'
11
- puts "updated proxy of #{target.id} to match the original"
11
+ logger.info "updated proxy of #{target.id} to match the original"
12
12
  end
13
13
 
14
14
  def target_proxy_attrs
15
15
  if source.attrs['deployment_option'] == 'hosted'
16
- # For services with "hosted" deployment config,
16
+ # For services with "hosted" deployment config,
17
17
  # "Public Base URL" should not be copied, mainly because public base URL is self-assigned.
18
18
  # Two 3scale products (aka services) cannot be served using the same public base URL.
19
19
  source_proxy.dup.delete_if { |key, _v| %w[endpoint sandbox_endpoint].include? key }
@@ -25,7 +25,8 @@ module ThreeScaleToolbox
25
25
  # assign target service for other tasks to have it available
26
26
  self.target = service
27
27
 
28
- puts "new service id #{service.id}"
28
+ logger.info "new service id #{service.id}"
29
+ report['product_id'] = service.id
29
30
  end
30
31
 
31
32
  private
@@ -12,10 +12,8 @@ module ThreeScaleToolbox
12
12
  def call
13
13
  return unless delete_mapping_rules
14
14
 
15
- puts 'destroying all mapping rules'
16
- target.mapping_rules.each do |mapping_rule|
17
- target.delete_mapping_rule mapping_rule['id']
18
- end
15
+ logger.info 'destroying all mapping rules'
16
+ target.mapping_rules.each(&:delete)
19
17
  end
20
18
 
21
19
  private
@@ -25,7 +23,13 @@ module ThreeScaleToolbox
25
23
  end
26
24
 
27
25
  def target
28
- context[:target]
26
+ context.fetch(:target)
27
+ end
28
+
29
+ def logger
30
+ context[:logger] ||= Logger.new($stdout).tap do |logger|
31
+ logger.formatter = proc { |severity, datetime, progname, msg| "#{msg}\n" }
32
+ end
29
33
  end
30
34
  end
31
35
  end
@@ -36,44 +36,12 @@ module ThreeScaleToolbox
36
36
  context[:delete_mapping_rules] = true
37
37
  end
38
38
 
39
- def source_metrics
40
- context[:source_metrics] ||= source.metrics
41
- end
42
-
43
- def source_hits
44
- context[:source_hits] ||= source.hits
45
- end
46
-
47
- def source_methods
48
- context[:source_methods] ||= source.methods(source_hits.fetch('id'))
49
- end
50
-
51
39
  def source_metrics_and_methods
52
- source_metrics + source_methods
53
- end
54
-
55
- def target_metrics
56
- context[:target_metrics] ||= target.metrics
57
- end
58
-
59
- def target_hits
60
- context[:target_hits] ||= target.hits
61
- end
62
-
63
- def target_methods
64
- context[:target_methods] ||= target.methods(target_hits.fetch('id'))
40
+ source.metrics + source.methods
65
41
  end
66
42
 
67
43
  def target_metrics_and_methods
68
- target_metrics + target_methods
69
- end
70
-
71
- def invalidate_target_methods
72
- context[:target_methods] = nil
73
- end
74
-
75
- def invalidate_target_metrics
76
- context[:target_metrics] = nil
44
+ target.metrics + target.methods
77
45
  end
78
46
 
79
47
  def source_remote
@@ -92,6 +60,24 @@ module ThreeScaleToolbox
92
60
  def option_target_system_name
93
61
  context[:option_target_system_name]
94
62
  end
63
+
64
+ def logger
65
+ context[:logger] ||= Logger.new($stdout).tap do |logger|
66
+ logger.formatter = proc { |severity, datetime, progname, msg| "#{msg}\n" }
67
+ end
68
+ end
69
+
70
+ def plans_report
71
+ report['application_plans'] ||= {}
72
+ end
73
+
74
+ def activedocs_report
75
+ report['activedocs'] ||= {}
76
+ end
77
+
78
+ def report
79
+ context[:report] ||= {}
80
+ end
95
81
  end
96
82
  end
97
83
  end
@@ -11,9 +11,7 @@ module ThreeScaleToolbox
11
11
 
12
12
  def call
13
13
  puts 'deleting all target service ActiveDocs'
14
- target.activedocs.each do |activedoc|
15
- target.remote.delete_activedocs(activedoc['id'])
16
- end
14
+ target.activedocs.each(&:delete)
17
15
  end
18
16
 
19
17
  def target