wsdirector-cli 0.4.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,77 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "erb"
4
-
5
- module WSDirector
6
- # Read and parse YAML scenario
7
- class ScenarioReader
8
- class << self
9
- include WSDirector::Utils
10
-
11
- def parse(file_path)
12
- contents = ::YAML.load(ERB.new(File.read(file_path)).result) # rubocop:disable Security/YAMLLoad
13
-
14
- if contents.first.key?("client")
15
- parse_multiple_scenarios(contents)
16
- else
17
- {"total" => 1, "clients" => [parse_simple_scenario(contents)]}
18
- end
19
- end
20
-
21
- private
22
-
23
- def handle_steps(steps)
24
- steps.flat_map.with_index do |step, id|
25
- if step.is_a?(Hash)
26
- type, data = step.to_a.first
27
-
28
- data["sample"] = [1, parse_multiplier(data["sample"])].max if data["sample"]
29
-
30
- multiplier = parse_multiplier(data.delete("multiplier") || "1")
31
- Array.new(multiplier) { {"type" => type, "id" => id}.merge(data) }
32
- else
33
- {"type" => step, "id" => id}
34
- end
35
- end
36
- end
37
-
38
- def parse_simple_scenario(
39
- steps,
40
- multiplier: 1, name: "default", ignore: nil, protocol: "base"
41
- )
42
- {
43
- "multiplier" => multiplier,
44
- "steps" => handle_steps(steps),
45
- "name" => name,
46
- "ignore" => ignore,
47
- "protocol" => protocol
48
- }
49
- end
50
-
51
- def parse_multiple_scenarios(definitions)
52
- total_count = 0
53
- clients = definitions.map.with_index do |client, i|
54
- _, client = client.to_a.first
55
- multiplier = parse_multiplier(client.delete("multiplier") || "1")
56
- name = client.delete("name") || (i + 1).to_s
57
- total_count += multiplier
58
- ignore = parse_ingore(client.fetch("ignore", nil))
59
- parse_simple_scenario(
60
- client.fetch("actions", []),
61
- multiplier: multiplier,
62
- name: name,
63
- ignore: ignore,
64
- protocol: client.fetch("protocol", "base")
65
- )
66
- end
67
- {"total" => total_count, "clients" => clients}
68
- end
69
-
70
- def parse_ingore(str)
71
- return unless str
72
-
73
- Array(str)
74
- end
75
- end
76
- end
77
- end
@@ -1,47 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "wsdirector/client"
4
- require "wsdirector/protocols"
5
-
6
- module WSDirector
7
- # Single client operator
8
- class Task
9
- attr_reader :global_holder, :client
10
-
11
- def initialize(config, global_holder:, result:)
12
- @ignore = config.fetch("ignore")
13
- @steps = config.fetch("steps")
14
- @global_holder = global_holder
15
- @result = result
16
-
17
- protocol_class = Protocols.get(config.fetch("protocol", "base"))
18
- @protocol = protocol_class.new(self)
19
- end
20
-
21
- def run
22
- connect!
23
-
24
- steps.each(&protocol)
25
-
26
- result.succeed
27
- rescue Error => e
28
- result.failed(e.message)
29
- end
30
-
31
- def sampled?(step)
32
- return true unless step["sample"]
33
-
34
- id, max = step["id"], step["sample"]
35
-
36
- result.track_sample(id, max)
37
- end
38
-
39
- private
40
-
41
- attr_reader :steps, :result, :protocol
42
-
43
- def connect!
44
- protocol.init_client(ignore: @ignore)
45
- end
46
- end
47
- end
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module WSDirector
4
- module Utils # :nodoc:
5
- MULTIPLIER_FORMAT = /^[-+*\/\\\d ]+$/
6
-
7
- def parse_multiplier(str)
8
- prepared = str.to_s.gsub(":scale", WSDirector.config.scale.to_s)
9
- raise WSDirector::Error, "Unknown multiplier format: #{str}" unless
10
- MULTIPLIER_FORMAT.match?(prepared)
11
-
12
- eval(prepared) # rubocop:disable Security/Eval
13
- end
14
- end
15
- end
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module WSDirector
4
- VERSION = "0.4.0"
5
- end
@@ -1,3 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "wsdirector/cli"
data/lib/wsdirector.rb DELETED
@@ -1,23 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "concurrent"
4
- require "yaml"
5
- require "json"
6
-
7
- require "wsdirector/version"
8
- require "wsdirector/configuration"
9
- require "wsdirector/utils"
10
-
11
- # Command line tool for testing websocket servers using scenarios.
12
- module WSDirector
13
- class Error < StandardError
14
- end
15
-
16
- class << self
17
- def config
18
- @config ||= Configuration.new
19
- end
20
- end
21
- end
22
-
23
- require "wsdirector/cli"