3scale_toolbox 0.9.0 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +5 -23
  3. data/lib/3scale_toolbox/base_command.rb +0 -1
  4. data/lib/3scale_toolbox/commands.rb +4 -0
  5. data/lib/3scale_toolbox/commands/copy_command/copy_service.rb +1 -1
  6. data/lib/3scale_toolbox/commands/import_command/openapi/create_activedocs_step.rb +2 -2
  7. data/lib/3scale_toolbox/commands/import_command/openapi/create_method_step.rb +21 -15
  8. data/lib/3scale_toolbox/commands/import_command/openapi/create_service_step.rb +10 -13
  9. data/lib/3scale_toolbox/commands/methods_command.rb +28 -0
  10. data/lib/3scale_toolbox/commands/methods_command/apply_command.rb +101 -0
  11. data/lib/3scale_toolbox/commands/methods_command/create_command.rb +73 -0
  12. data/lib/3scale_toolbox/commands/methods_command/delete_command.rb +67 -0
  13. data/lib/3scale_toolbox/commands/methods_command/list_command.rb +64 -0
  14. data/lib/3scale_toolbox/commands/metrics_command.rb +28 -0
  15. data/lib/3scale_toolbox/commands/metrics_command/apply_command.rb +102 -0
  16. data/lib/3scale_toolbox/commands/metrics_command/create_command.rb +77 -0
  17. data/lib/3scale_toolbox/commands/metrics_command/delete_command.rb +66 -0
  18. data/lib/3scale_toolbox/commands/metrics_command/list_command.rb +70 -0
  19. data/lib/3scale_toolbox/commands/plans_command/create_command.rb +1 -1
  20. data/lib/3scale_toolbox/commands/plans_command/export/read_app_plan_step.rb +1 -1
  21. data/lib/3scale_toolbox/commands/plans_command/export/step.rb +5 -1
  22. data/lib/3scale_toolbox/commands/plans_command/import/import_plan_metrics_step.rb +7 -13
  23. data/lib/3scale_toolbox/commands/plans_command/import/step.rb +2 -8
  24. data/lib/3scale_toolbox/commands/plans_command/show_command.rb +1 -1
  25. data/lib/3scale_toolbox/commands/remote_command/remote_add.rb +1 -1
  26. data/lib/3scale_toolbox/entities.rb +2 -0
  27. data/lib/3scale_toolbox/entities/application_plan.rb +47 -14
  28. data/lib/3scale_toolbox/entities/method.rb +80 -0
  29. data/lib/3scale_toolbox/entities/metric.rb +113 -0
  30. data/lib/3scale_toolbox/entities/service.rb +112 -38
  31. data/lib/3scale_toolbox/error.rb +13 -0
  32. data/lib/3scale_toolbox/tasks/copy_activedocs_task.rb +1 -1
  33. data/lib/3scale_toolbox/tasks/copy_methods_task.rb +11 -8
  34. data/lib/3scale_toolbox/tasks/copy_metrics_task.rb +1 -1
  35. data/lib/3scale_toolbox/tasks/copy_service_proxy_task.rb +1 -1
  36. data/lib/3scale_toolbox/tasks/delete_activedocs_task.rb +1 -1
  37. data/lib/3scale_toolbox/tasks/update_service_settings_task.rb +3 -3
  38. data/lib/3scale_toolbox/version.rb +1 -1
  39. metadata +16 -4
@@ -0,0 +1,64 @@
1
+ module ThreeScaleToolbox
2
+ module Commands
3
+ module MethodsCommand
4
+ module List
5
+ class ListSubcommand < Cri::CommandRunner
6
+ include ThreeScaleToolbox::Command
7
+
8
+ FIELDS_TO_SHOW = %w[id friendly_name system_name description].freeze
9
+
10
+ def self.command
11
+ Cri::Command.define do
12
+ name 'list'
13
+ usage 'list [opts] <remote> <service>'
14
+ summary 'list methods'
15
+ description 'List methods'
16
+
17
+ param :remote
18
+ param :service_ref
19
+
20
+ runner ListSubcommand
21
+ end
22
+ end
23
+
24
+ def run
25
+ print_header
26
+ print_data
27
+ end
28
+
29
+ private
30
+
31
+ def print_header
32
+ puts FIELDS_TO_SHOW.map(&:upcase).join("\t")
33
+ end
34
+
35
+ def print_data
36
+ hits = service.hits
37
+ service.methods(hits.fetch('id')).each do |method|
38
+ puts FIELDS_TO_SHOW.map { |field| method.fetch(field, '(empty)') }.join("\t")
39
+ end
40
+ end
41
+
42
+ def service
43
+ @service ||= find_service
44
+ end
45
+
46
+ def find_service
47
+ Entities::Service.find(remote: remote,
48
+ ref: service_ref).tap do |svc|
49
+ raise ThreeScaleToolbox::Error, "Service #{service_ref} does not exist" if svc.nil?
50
+ end
51
+ end
52
+
53
+ def remote
54
+ @remote ||= threescale_client(arguments[:remote])
55
+ end
56
+
57
+ def service_ref
58
+ arguments[:service_ref]
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,28 @@
1
+ require '3scale_toolbox/commands/metrics_command/create_command'
2
+ require '3scale_toolbox/commands/metrics_command/list_command'
3
+ require '3scale_toolbox/commands/metrics_command/apply_command'
4
+ require '3scale_toolbox/commands/metrics_command/delete_command'
5
+
6
+ module ThreeScaleToolbox
7
+ module Commands
8
+ module MetricsCommand
9
+ include ThreeScaleToolbox::Command
10
+ def self.command
11
+ Cri::Command.define do
12
+ name 'metrics'
13
+ usage 'metrics <sub-command> [options]'
14
+ summary 'metrics super command'
15
+ description 'Metrics commands'
16
+
17
+ run do |_opts, _args, cmd|
18
+ puts cmd.help
19
+ end
20
+ end
21
+ end
22
+ add_subcommand(Create::CreateSubcommand)
23
+ add_subcommand(List::ListSubcommand)
24
+ add_subcommand(Apply::ApplySubcommand)
25
+ add_subcommand(Delete::DeleteSubcommand)
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,102 @@
1
+ module ThreeScaleToolbox
2
+ module Commands
3
+ module MetricsCommand
4
+ module Apply
5
+ class ApplySubcommand < Cri::CommandRunner
6
+ include ThreeScaleToolbox::Command
7
+
8
+ def self.command
9
+ Cri::Command.define do
10
+ name 'apply'
11
+ usage 'apply [opts] <remote> <service> <metric>'
12
+ summary 'Update metric'
13
+ description 'Update (create if it does not exist) metric'
14
+
15
+ option :n, :name, 'Metric name', argument: :required
16
+ flag nil, :disabled, 'Disables this metric in all application plans'
17
+ flag nil, :enabled, 'Enables this metric in all application plans'
18
+ option nil, :unit, 'Metric unit. Default hit', argument: :required
19
+ option nil, :description, 'Metric description', argument: :required
20
+ param :remote
21
+ param :service_ref
22
+ param :metric_ref
23
+
24
+ runner ApplySubcommand
25
+ end
26
+ end
27
+
28
+ def run
29
+ validate_option_params
30
+ metric = Entities::Metric.find(service: service, ref: metric_ref)
31
+ if metric.nil?
32
+ metric = Entities::Metric.create(service: service,
33
+ attrs: create_metric_attrs)
34
+ else
35
+ metric.update(metric_attrs) unless metric_attrs.empty?
36
+ end
37
+
38
+ metric.disable if option_disabled
39
+ metric.enable if option_enabled
40
+
41
+ output_msg_array = ["Applied metric id: #{metric.id}"]
42
+ output_msg_array << 'Disabled' if option_disabled
43
+ output_msg_array << 'Enabled' if option_enabled
44
+ puts output_msg_array.join('; ')
45
+ end
46
+
47
+ private
48
+
49
+ def validate_option_params
50
+ raise ThreeScaleToolbox::Error, '--disabled and --enabled are mutually exclusive' \
51
+ if option_enabled && option_disabled
52
+ end
53
+
54
+ def create_metric_attrs
55
+ metric_attrs.merge('system_name' => metric_ref,
56
+ 'unit' => 'hit',
57
+ 'friendly_name' => metric_ref) { |_key, oldval, _newval| oldval }
58
+ end
59
+
60
+ def metric_attrs
61
+ {
62
+ 'friendly_name' => options[:name],
63
+ 'unit' => options[:unit],
64
+ 'description' => options[:description]
65
+ }.compact
66
+ end
67
+
68
+ def option_enabled
69
+ !options[:enabled].nil?
70
+ end
71
+
72
+ def option_disabled
73
+ !options[:disabled].nil?
74
+ end
75
+
76
+ def service
77
+ @service ||= find_service
78
+ end
79
+
80
+ def find_service
81
+ Entities::Service.find(remote: remote,
82
+ ref: service_ref).tap do |svc|
83
+ raise ThreeScaleToolbox::Error, "Service #{service_ref} does not exist" if svc.nil?
84
+ end
85
+ end
86
+
87
+ def remote
88
+ @remote ||= threescale_client(arguments[:remote])
89
+ end
90
+
91
+ def service_ref
92
+ arguments[:service_ref]
93
+ end
94
+
95
+ def metric_ref
96
+ arguments[:metric_ref]
97
+ end
98
+ end
99
+ end
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,77 @@
1
+ module ThreeScaleToolbox
2
+ module Commands
3
+ module MetricsCommand
4
+ module Create
5
+ class CreateSubcommand < Cri::CommandRunner
6
+ include ThreeScaleToolbox::Command
7
+
8
+ def self.command
9
+ Cri::Command.define do
10
+ name 'create'
11
+ usage 'create [opts] <remote> <service> <metric-name>'
12
+ summary 'create metric'
13
+ description 'Create metric'
14
+
15
+ option :t, 'system-name', 'Metric system name', argument: :required
16
+ flag nil, :disabled, 'Disables this metric in all application plans'
17
+ option nil, :unit, 'Metric unit. Default hit', argument: :required
18
+ option nil, :description, 'Metric description', argument: :required
19
+ param :remote
20
+ param :service_ref
21
+ param :metric_name
22
+
23
+ runner CreateSubcommand
24
+ end
25
+ end
26
+
27
+ def run
28
+ metric = ThreeScaleToolbox::Entities::Metric.create(
29
+ service: service,
30
+ attrs: metric_attrs
31
+ )
32
+ metric.disable if option_disabled
33
+ puts "Created metric id: #{metric.id}. Disabled: #{option_disabled}"
34
+ end
35
+
36
+ private
37
+
38
+ def metric_attrs
39
+ {
40
+ 'system_name' => options[:'system-name'],
41
+ 'unit' => unit,
42
+ 'friendly_name' => arguments[:metric_name],
43
+ 'description' => options[:description]
44
+ }.compact
45
+ end
46
+
47
+ def unit
48
+ options[:unit] || 'hit'
49
+ end
50
+
51
+ def option_disabled
52
+ !options[:disabled].nil?
53
+ end
54
+
55
+ def service
56
+ @service ||= find_service
57
+ end
58
+
59
+ def find_service
60
+ Entities::Service.find(remote: remote,
61
+ ref: service_ref).tap do |svc|
62
+ raise ThreeScaleToolbox::Error, "Service #{service_ref} does not exist" if svc.nil?
63
+ end
64
+ end
65
+
66
+ def remote
67
+ @remote ||= threescale_client(arguments[:remote])
68
+ end
69
+
70
+ def service_ref
71
+ arguments[:service_ref]
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,66 @@
1
+ module ThreeScaleToolbox
2
+ module Commands
3
+ module MetricsCommand
4
+ module Delete
5
+ class DeleteSubcommand < Cri::CommandRunner
6
+ include ThreeScaleToolbox::Command
7
+
8
+ def self.command
9
+ Cri::Command.define do
10
+ name 'delete'
11
+ usage 'delete [opts] <remote> <service> <metric>'
12
+ summary 'delete metric'
13
+ description 'Delete metric'
14
+
15
+ param :remote
16
+ param :service_ref
17
+ param :metric_ref
18
+
19
+ runner DeleteSubcommand
20
+ end
21
+ end
22
+
23
+ def run
24
+ metric.delete
25
+ puts "Metric id: #{metric.id} deleted"
26
+ end
27
+
28
+ private
29
+
30
+ def service
31
+ @service ||= find_service
32
+ end
33
+
34
+ def metric
35
+ @metric ||= find_metric
36
+ end
37
+
38
+ def find_service
39
+ Entities::Service.find(remote: remote,
40
+ ref: service_ref).tap do |svc|
41
+ raise ThreeScaleToolbox::Error, "Service #{service_ref} does not exist" if svc.nil?
42
+ end
43
+ end
44
+
45
+ def find_metric
46
+ Entities::Metric.find(service: service, ref: metric_ref).tap do |p|
47
+ raise ThreeScaleToolbox::Error, "Metric #{metric_ref} does not exist" if p.nil?
48
+ end
49
+ end
50
+
51
+ def remote
52
+ @remote ||= threescale_client(arguments[:remote])
53
+ end
54
+
55
+ def service_ref
56
+ arguments[:service_ref]
57
+ end
58
+
59
+ def metric_ref
60
+ arguments[:metric_ref]
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,70 @@
1
+ module ThreeScaleToolbox
2
+ module Commands
3
+ module MetricsCommand
4
+ module List
5
+ class ListSubcommand < Cri::CommandRunner
6
+ include ThreeScaleToolbox::Command
7
+
8
+ FIELDS_TO_SHOW = %w[id friendly_name system_name unit description].freeze
9
+
10
+ def self.command
11
+ Cri::Command.define do
12
+ name 'list'
13
+ usage 'list [opts] <remote> <service>'
14
+ summary 'list metrics'
15
+ description 'List metrics'
16
+
17
+ param :remote
18
+ param :service_ref
19
+
20
+ runner ListSubcommand
21
+ end
22
+ end
23
+
24
+ def run
25
+ print_header
26
+ print_data
27
+ end
28
+
29
+ private
30
+
31
+ def print_header
32
+ puts FIELDS_TO_SHOW.map(&:upcase).join("\t")
33
+ end
34
+
35
+ def print_data
36
+ metrics.each do |metric|
37
+ puts FIELDS_TO_SHOW.map { |field| metric.fetch(field, '(empty)') }.join("\t")
38
+ end
39
+ end
40
+
41
+ def metrics
42
+ hits_id = service.hits['id']
43
+ ThreeScaleToolbox::Helper.array_difference(service.metrics, service.methods(hits_id)) do |metric, method|
44
+ ThreeScaleToolbox::Helper.compare_hashes(metric, method, %w[id])
45
+ end
46
+ end
47
+
48
+ def service
49
+ @service ||= find_service
50
+ end
51
+
52
+ def find_service
53
+ Entities::Service.find(remote: remote,
54
+ ref: service_ref).tap do |svc|
55
+ raise ThreeScaleToolbox::Error, "Service #{service_ref} does not exist" if svc.nil?
56
+ end
57
+ end
58
+
59
+ def remote
60
+ @remote ||= threescale_client(arguments[:remote])
61
+ end
62
+
63
+ def service_ref
64
+ arguments[:service_ref]
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
@@ -8,7 +8,7 @@ module ThreeScaleToolbox
8
8
  def self.command
9
9
  Cri::Command.define do
10
10
  name 'create'
11
- usage 'create [opts] <remote> <service> <plan_name>'
11
+ usage 'create [opts] <remote> <service> <plan-name>'
12
12
  summary 'create application plan'
13
13
  description 'Create application plan'
14
14
 
@@ -7,7 +7,7 @@ module ThreeScaleToolbox
7
7
  ##
8
8
  # Reads Application plan
9
9
  def call
10
- result[:plan] = plan.show
10
+ result[:plan] = plan.attrs
11
11
  end
12
12
  end
13
13
  end
@@ -50,7 +50,7 @@ module ThreeScaleToolbox
50
50
  end
51
51
 
52
52
  def service_methods
53
- context[:service_methods] ||= service.methods
53
+ context[:service_methods] ||= service.methods(service_hits['id'])
54
54
  end
55
55
 
56
56
  def metric_info(elem, elem_name)
@@ -88,6 +88,10 @@ module ThreeScaleToolbox
88
88
  def find_method(id)
89
89
  service_methods.find { |method| method['id'] == id }
90
90
  end
91
+
92
+ def service_hits
93
+ context[:service_hits] ||= service.hits
94
+ end
91
95
  end
92
96
  end
93
97
  end