envoy-proxy 0.2.3 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 734a2635f297c2cb9cad38f557c25ccffb7d9b13
4
- data.tar.gz: 462d924cb400c2b024b972b6de150c9933933cdd
3
+ metadata.gz: 79aa6508c84fc016f6cd86578c4fc3c2e4c56bb7
4
+ data.tar.gz: 0756f96ffcc9738416d2f72478dd081938e7c881
5
5
  SHA512:
6
- metadata.gz: 0c251a55c27846f203464df452e824fc3fb58a15f4ed2139808afcc3f7813c4012cc7cdea710e19a6a4d1a5e6cba9f6aebe5d435b01d5c1f193a2e8e3bb68c85
7
- data.tar.gz: 96a1abac6b4480f849c582734e2c290dd608b30c4a05075ffd974897bef722c1ec65fe55f03e0843b25f83e5f194e9a5ab54efc35efd1502812c7eda6f2243ed
6
+ metadata.gz: 3669908f7d9b5cdde77f905b419213190164082d8750223b06b12574d91b86e7306beefa9c9ea69ca08c3498751da947eaabec8e05d572c41bb4065cfcda092c
7
+ data.tar.gz: 06434fb4ffbf9ebcf082d4118b1fd2323be2437284f13f4b06a6791f36e9dcdd6f9b835fd6ade6c20ab4de335268b9fff82fe5e14dcbd70f4fbb2cee1ab0428a
data/bin/envoy CHANGED
@@ -3,9 +3,11 @@
3
3
 
4
4
  begin
5
5
  require 'envoy/client/command'
6
+ Envoy::Client::Command.new.run(ARGV)
6
7
  rescue LoadError
7
8
  path = File.expand_path '../../lib', __FILE__
8
9
  $:.unshift path if File.directory?(path)
9
10
  require 'envoy/client/command'
11
+ Envoy::Client::Command.new.run(ARGV)
10
12
  end
11
13
 
@@ -38,39 +38,13 @@ module Envoy
38
38
 
39
39
  def unbind e
40
40
  if e == Errno::ECONNREFUSED
41
- @client.log TRACE, "couldn't connect to upstream service for stream #{@id}"
42
- if @tried_starting
43
- if Time.now > @tried_starting + @client.options[:delay]
44
- @client.log ERROR, "Service isn't running, but starting it didn't really work out."
45
- @client.send_object :close, @id, 502
46
- @tried_starting = false
47
- else
48
- EM.add_timer 0.1 do
49
- reconnect
50
- end
51
- end
52
- elsif cmd = @client.options[:command]
53
- cmd = cmd % @client.options
54
- @client.log INFO, "Service doesn't seem to be running. Trying to start it now..."
55
- @tried_starting = Time.now
56
- p @client.options[:dir]
57
- Dir.chdir File.expand_path(@client.options[:dir]) do
58
- fork do
59
- ENV.delete("GEM_HOME")
60
- ENV.delete("GEM_PATH")
61
- ENV.delete("BUNDLE_BIN_PATH")
62
- ENV.delete("BUNDLE_GEMFILE")
63
- system cmd
64
- end
65
- end
66
- EM.add_timer 0.1 do
67
- reconnect
68
- end
69
- end
41
+ @client.log ERROR, "couldn't connect to upstream service for stream #{@id}"
42
+ @client.send_object :close, @id
70
43
  elsif e
71
44
  @client.log ERROR, e.inspect
45
+ @client.send_object :close, @id
72
46
  else
73
- @client.log TRACE, "upstream service closed stream #{@id}"
47
+ @client.log DEBUG, "upstream service closed stream #{@id}"
74
48
  @client.send_object :close, @id
75
49
  end
76
50
  end
@@ -1,62 +1,23 @@
1
1
  require 'envoy/client/trunk'
2
- require 'envoy/client/option_parser'
2
+ require 'envoy/client/config'
3
3
  require 'envoy/version'
4
- require 'yaml'
5
4
 
6
- def find_config
7
- dirs = Dir.pwd.split("/")
8
- r = dirs.reduce([]) do |m, x|
9
- [[*m[0], x], *m]
10
- end.map do |p|
11
- p.join("/") + "/.envoy"
12
- end.each do |p|
13
- return p if File.exist?(p)
14
- end
15
- false
16
- end
17
-
18
- def load_config
19
- if path = find_config
20
- conf = YAML.load(File.read(path))
21
- Array(conf).each do |conf|
22
- if conf["rails"]
23
- conf["dir"] = conf["rails"]
24
- conf["pidfile"] = "tmp/pids/server.pid"
25
- conf["command"] = "rails s -p %{local_port}"
26
- conf["delay"] = 10
27
- elsif conf["rackup"]
28
- conf["dir"] = conf["rackup"]
29
- conf["command"] = "rackup -p %{local_port}"
30
- conf["delay"] = 10
31
- end
32
- conf["host"] ||= conf["dir"].split("/")[-1] if conf["dir"]
33
- conf["dir"] = File.expand_path(conf["dir"], path + "/..") if conf["dir"]
34
- end
35
- else
36
- [{}]
37
- end
38
- end
39
-
40
- options = parse_options
5
+ class Envoy::Client::Command
41
6
 
42
- unless EM.reactor_running?
43
- EM.run do
44
- Signal.trap("INT") do
45
- $exiting = true
46
- EventMachine.stop
47
- end
48
- Signal.trap("TERM") do
49
- $exiting = true
50
- EventMachine.stop
51
- end
52
- load_config.each do |config|
53
- config = config.merge(options)
54
- config["local_port"] ||= config["command"] ? rand(16383) + 49152 : 80
55
- config["hosts"] ||= [config.delete("host")] if config["host"]
56
- config = config.each_with_object({}) do |(k, v), h|
57
- h[k.to_sym] = v
58
- end
7
+ def run (args)
8
+ EM.run do
9
+ Envoy.verbosity = Envoy::INFO
10
+ stopper = proc { $exiting = true; EventMachine.stop }
11
+ Signal.trap("INT", stopper)
12
+ Signal.trap("TERM", stopper)
13
+ Envoy.log(Envoy::DEBUG, "envoy #{Envoy::VERSION} starting up")
14
+ config = Envoy::Client::Config.new
15
+ config.parse_options
16
+ config.parse_envoyfile
17
+ config.infer_sane_defaults
18
+ config.start_service
59
19
  Envoy::Client::Trunk.start config
60
20
  end
61
21
  end
22
+
62
23
  end
@@ -0,0 +1,94 @@
1
+ require 'envoy/client/config/builder'
2
+ require 'envoy/utils'
3
+ require 'optparse'
4
+
5
+ class Envoy::Client::Config
6
+
7
+ attr_accessor :server
8
+ attr_accessor :key
9
+ attr_accessor :label
10
+ attr_accessor :command
11
+ attr_accessor :export
12
+
13
+ def initialize
14
+ @server = ["p45.eu", 8282]
15
+ @key = ENV["ENVOY_KEY"] || SecureRandom.base64(8)
16
+ end
17
+
18
+ def options
19
+ {
20
+ hosts: [label].compact,
21
+ key: key,
22
+ verbosity: true,
23
+ version: Envoy::VERSION
24
+ }
25
+ end
26
+
27
+ def start_service
28
+ return unless command
29
+ Envoy.log Envoy::INFO, "Starting service..."
30
+ fork do
31
+ ENV.delete("GEM_HOME")
32
+ ENV.delete("GEM_PATH")
33
+ ENV.delete("BUNDLE_BIN_PATH")
34
+ ENV.delete("BUNDLE_GEMFILE")
35
+ system(command)
36
+ end
37
+ end
38
+
39
+ def infer_sane_defaults
40
+ self.export = [:tcp, "127.0.0.1", 80] unless export
41
+ end
42
+
43
+ def parse_envoyfile
44
+ if path = Envoy.find_file("Envoyfile")
45
+ Builder.new(self).run(path)
46
+ end
47
+ end
48
+
49
+ def parse_options
50
+ OptionParser.new do |op|
51
+ op.banner = "Usage: #{$0} [options]"
52
+ op.on "-l LABEL", "Use this domain label" do |lab|
53
+ @label = lab
54
+ end
55
+ op.on "-d DIRECTORY", "Change to this directory before starting envoy" do |dir|
56
+ Dir.chdir(dir)
57
+ end
58
+ op.on "-k KEY", "Secure access to the label with this key" do |v|
59
+ @key = v
60
+ end
61
+ op.on "-s SERVER", "Specify envoy server" do |v|
62
+ host, port = v.split(":")
63
+ @server = [host, port || @server[1]]
64
+ end
65
+ op.on "-v", "Show messages. Repeat to show more." do
66
+ Envoy.verbosity += 1
67
+ end
68
+ op.on "-q", "Hide messages. Repeat to hide more." do
69
+ Envoy.verbosity -= 1
70
+ end
71
+ op.on "-h", "Show this message" do
72
+ puts op
73
+ exit
74
+ end
75
+ op.on "-V", "Show version number" do
76
+ puts Envoy::VERSION
77
+ exit
78
+ end
79
+ op.parse!
80
+ case ARGV[0]
81
+ when nil
82
+ when /\//
83
+ @export = [:unix, ARGV[0]]
84
+ when /^([^:]+):(\d+)$/
85
+ @export = [:tcp, $1 || "127.0.0.1", $2]
86
+ when /^(\d+)$/
87
+ @export = [:tcp, "127.0.0.1", $1]
88
+ else
89
+ @export = [:tcp, ARGV[0], 80]
90
+ end
91
+ end
92
+ end
93
+
94
+ end
@@ -0,0 +1,51 @@
1
+ class Envoy::Client::Config; end
2
+
3
+ class Envoy::Client::Config::Builder
4
+
5
+ def initialize (config)
6
+ @config = config
7
+ end
8
+
9
+ def run (path)
10
+ instance_eval(File.read(path), path)
11
+ end
12
+
13
+ def set (name, value)
14
+ @config.__send__("#{name}=", value)
15
+ end
16
+
17
+ def fetch (name, &block)
18
+ if r = @config.__send__(name)
19
+ r
20
+ elsif block
21
+ set(name, block.())
22
+ end
23
+ end
24
+
25
+ def export (type, *args)
26
+ case type
27
+ when :tcp
28
+ args = args[0].split(":") if args[0] and !args[1]
29
+ args[0] ||= "127.0.0.1"
30
+ args[1] ||= rand(16383) + 49152
31
+ args = [:tcp, *args]
32
+ when :unix
33
+ args[0] ||= ".envoy.sock"
34
+ args = [:unix, *args]
35
+ end
36
+ set :export, args
37
+ end
38
+
39
+ def localsock ()
40
+ export(:unix)[1]
41
+ end
42
+
43
+ def localhost
44
+ export(:tcp)[1]
45
+ end
46
+
47
+ def localport ()
48
+ export(:tcp)[2]
49
+ end
50
+
51
+ end
@@ -8,19 +8,17 @@ module Envoy
8
8
  module Trunk
9
9
  include Protocol
10
10
 
11
- attr_reader :options
11
+ attr_reader :config
12
12
 
13
- def self.start options
14
- EM.connect options[:server_host], options[:server_port].to_i, Envoy::Client::Trunk, options
13
+ State = Struct.new(:connected, :reconnects)
14
+
15
+ def self.start (config, state = State.new(false, 0))
16
+ EM.connect(*config.server, Envoy::Client::Trunk, config, state)
15
17
  end
16
18
 
17
- def initialize options
18
- @options = options
19
- @log = STDERR
20
- if @options.has_key?(:log)
21
- @log = @options[:log] && File.open(@options[:log], "a")
22
- end
23
- log DEBUG, "envoy #{Envoy::VERSION} starting up"
19
+ def initialize (config, state)
20
+ @config = config
21
+ @state = state
24
22
  end
25
23
 
26
24
  def channels
@@ -33,46 +31,43 @@ module Envoy
33
31
  end
34
32
 
35
33
  def receive_close id
34
+ return unless channels[id]
36
35
  log TRACE, "closed stream #{id}"
37
36
  channels[id].close_connection true
38
37
  channels.delete(id)
39
38
  end
40
39
 
41
40
  def receive_stream id, data
41
+ return unless channels[id]
42
42
  log TRACE, "#{data.length} bytes of data received on stream #{id}"
43
43
  channels[id].send_data data
44
44
  end
45
45
 
46
46
  def receive_connection id
47
47
  log TRACE, "New connection request with id `#{id}'"
48
- channels[id] = EM.connect(options[:local_host] || '127.0.0.1',
49
- options[:local_port], Channel, id, self)
48
+ channels[id] = case @config.export[0]
49
+ when :tcp
50
+ EM.connect(*@config.export[1, 2], Channel, id, self)
51
+ when :unix
52
+ EM.connect_unix_domain(*@config.export[1], Channel, id, self)
53
+ else
54
+ raise @config.export[0].inspect
55
+ end
56
+ rescue
57
+ send_object :close, id
50
58
  end
51
59
 
52
60
  def receive_keepalive
53
61
  end
54
62
 
55
- def log (level, text, io = @log)
56
- return unless io
57
- return unless level <= verbosity
58
- message = [
59
- @options[:timestamps] ? Time.now.strftime("%F %T") : nil,
60
- @options[:show_log_level] ? "#{VERBOSITIES[level][0]}:" : nil,
61
- text
62
- ].compact.join(" ")
63
- if @options[:color_log_level]
64
- #FATAL ERROR WARN\ INFO\ DEBUG TRACE
65
- message = message.colorize(%i"red red yellow green default light_black"[level])
66
- end
67
- io.puts message
68
- io.flush
69
- end
70
-
71
63
  def receive_message text, level = INFO
72
64
  log level, text
73
65
  end
74
66
 
75
67
  def receive_ping
68
+ unless @state.connected
69
+ ssl_handshake_completed
70
+ end
76
71
  log TRACE, "Server pinged. Ponging back."
77
72
  send_object :pong
78
73
  end
@@ -86,39 +81,39 @@ module Envoy
86
81
  log DEBUG, "Server confirmed our request. Proxy set up."
87
82
  end
88
83
 
84
+ def log (*args)
85
+ Envoy.log(*args)
86
+ end
87
+
89
88
  def unbind
90
89
  if @halting
91
90
  log DEBUG, "Shutting down because server told us to."
92
91
  elsif $exiting
93
92
  log DEBUG, "Shutting down because the local system told us to."
94
- elsif !@halting && r = @options[:reconnect]
95
- log WARN, "Lost connection. Retrying..." if r == 0
93
+ elsif @state.connected
94
+ log WARN, "Lost connection. Retrying..." if @state.reconnects == 0
96
95
  EM.add_timer 0.5 do
97
- @options[:reconnect] += 1
98
- Trunk.start @options
96
+ @state.reconnects += 1
97
+ Trunk.start(@config, @state)
99
98
  end
100
99
  else
101
- if options[:did_connect]
102
- log FATAL, "Connection lost. Not point reconnecting because the host is randomly generated."
103
- else
104
- log FATAL, "Couldn't connect. Abandoning ship."
105
- end
100
+ log FATAL, "Couldn't connect. Abandoning ship."
106
101
  EventMachine.stop_event_loop
107
102
  end
108
103
  end
109
104
 
110
105
  def ssl_handshake_completed
111
106
  log DEBUG, "Channel is secure, sending options"
112
- options[:did_connect] = true
113
- options[:reconnect] = 0 if options[:hosts]
114
- send_object :options, options
115
- log DEBUG, "Exporting #{@options[:local_host]}:#{@options[:local_port]}"
107
+ @state.connected = true
108
+ send_object :options, @config.options
109
+ log DEBUG, "Exporting #{@config.export.join(":")}"
116
110
  end
117
111
 
118
112
  def post_init
119
- self.comm_inactivity_timeout = 25
120
- log DEBUG, "Requesting TLS negotiation."
121
- send_object :start_tls
113
+ self.comm_inactivity_timeout = 60
114
+ log TRACE, "Requesting TLS negotiation."
115
+ #send_object :start_tls
116
+ send_object :pong
122
117
  end
123
118
 
124
119
  end
@@ -1,24 +1,11 @@
1
1
  require 'eventmachine'
2
2
  require 'bert'
3
3
 
4
- TRACE = 5
5
- DEBUG = 4
6
- INFO = 3
7
- WARN = 2
8
- ERROR = 1
9
- FATAL = 0
10
-
11
4
  module Envoy
12
5
 
13
6
  module Protocol
14
7
  include EM::P::ObjectProtocol
15
8
 
16
- VERBOSITIES = %w"FATAL ERROR WARN\ INFO\ DEBUG TRACE"
17
-
18
- def verbosity
19
- @verbosity ||= [FATAL, [TRACE, @options[:verbosity] || 3].min].max
20
- end
21
-
22
9
  module Serializer
23
10
  def self.dump(object)
24
11
  BERT.encode(object)
@@ -27,6 +27,7 @@ $zone = ARGV[0].gsub(/^\.+/, '')
27
27
 
28
28
  unless EM.reactor_running?
29
29
  EM.run do
30
+ Envoy.verbosity = Envoy::FATAL
30
31
  EM.start_server "0.0.0.0", 8282, Envoy::Server::Trunk, key
31
32
  EM.start_server *listen, Envoy::Server::Web
32
33
  end
@@ -1,4 +1,5 @@
1
1
  require 'envoy/protocol'
2
+ require 'envoy/utils'
2
3
 
3
4
  module Envoy
4
5
  module Server
@@ -26,37 +27,12 @@ module Envoy
26
27
  @channels ||= {}
27
28
  end
28
29
 
29
- def receive_pong
30
- EM.add_timer 30 do
31
- send_object :ping
32
- end
33
- end
34
-
35
- def receive_close id, code = nil
36
- if chan = channels[id]
37
- chan.web.close(code)
38
- channels.delete id
39
- end
40
- end
41
-
42
- def receive_start_tls
43
- send_object :start_tls
44
- start_tls
45
- end
46
-
47
- def receive_stream id, data
48
- c = channels[id]
49
- w = c && c.web
50
- w && w.send_data(data)
51
- end
52
-
53
30
  def key
54
31
  @options[:key]
55
32
  end
56
33
 
57
- def log message
58
- t = Time.now.strftime("%F %T")
59
- STDERR.puts t + " " + message.split("\n").join("\n#{t.gsub(/./, ' ')} ")
34
+ def log (*args)
35
+ Envoy.log(*args)
60
36
  end
61
37
 
62
38
  def message (level, message)
@@ -68,7 +44,7 @@ module Envoy
68
44
  end
69
45
 
70
46
  def halt message = nil
71
- message FATAL, message if message
47
+ message Envoy::FATAL, message if message
72
48
  send_object :halt
73
49
  close_connection(true)
74
50
  end
@@ -77,13 +53,42 @@ module Envoy
77
53
  Gem::Requirement.new(*requirement) =~ Gem::Version.new(@options[:version])
78
54
  end
79
55
 
56
+ def receive_pong
57
+ unless @pinged
58
+ send_object :ping
59
+ @pinged = true
60
+ else
61
+ EM.add_timer 30 do
62
+ send_object :ping
63
+ end
64
+ end
65
+ end
66
+
67
+ def receive_close id, code = nil
68
+ if chan = channels[id]
69
+ chan.web.close(code)
70
+ channels.delete id
71
+ end
72
+ end
73
+
74
+ def receive_start_tls
75
+ send_object :start_tls
76
+ start_tls
77
+ end
78
+
79
+ def receive_stream id, data
80
+ c = channels[id]
81
+ w = c && c.web
82
+ w && w.send_data(data)
83
+ end
84
+
80
85
  def receive_options options
81
86
  @options = options
82
87
  receive_pong if version? "> 0.1"
83
88
  if version? "< #{Envoy::VERSION}"
84
- message WARN, "Your client is out of date. Please upgrade to #{Envoy::VERSION}."
89
+ message Envoy::WARN, "Your client is out of date. Please upgrade to #{Envoy::VERSION}."
85
90
  elsif version? "> #{Envoy::VERSION}"
86
- message WARN, "Your client is from the future. The server is expecting #{Envoy::VERSION}."
91
+ message Envoy::WARN, "Your client is from the future. The server is expecting #{Envoy::VERSION}."
87
92
  end
88
93
  if @key and @key != @options[:key]
89
94
  halt "Key is invalid"
@@ -92,30 +97,30 @@ module Envoy
92
97
  hosts = @options[:hosts] || []
93
98
  hosts.any? do |label|
94
99
  if label == "s"
95
- message FATAL, "label is reserved: `#{label}'"
100
+ message Envoy::FATAL, "label is reserved: `#{label}'"
96
101
  true
97
102
  elsif label =~ /\./
98
- message FATAL, "label is invalid: `#{label}'"
103
+ message Envoy::FATAL, "label is invalid: `#{label}'"
99
104
  true
100
105
  elsif other_trunk = Trunk.trunks[label][0]
101
106
  unless other_trunk.key == key
102
- message FATAL, "label is protected with a key: `#{label}'"
107
+ message Envoy::FATAL, "label is protected with a key: `#{label}'"
103
108
  true
104
109
  end
105
110
  end
106
111
  end && halt
107
112
  if hosts.empty?
108
113
  hosts = [SecureRandom.random_number(36 ** 4).to_s(36)]
109
- message INFO, "Service accessible at http://#{hosts[0]}.#{$zone}/"
114
+ message Envoy::INFO, "Service accessible at http://#{hosts[0]}.#{$zone}/"
110
115
  else
111
116
  @hosts = hosts.each do |host|
112
117
  Trunk.trunks[host] << self
113
- message INFO, "Service accessible at http://#{host}.#{$zone}/"
118
+ message Envoy::INFO, "Service accessible at http://#{host}.#{$zone}/"
114
119
  end
115
120
  end
116
121
  unless @options[:key]
117
122
  @options[:key] = SecureRandom.hex(8)
118
- message INFO, "Service access key is `#{@options[:key]}'"
123
+ message Envoy::INFO, "Service access key is `#{@options[:key]}'"
119
124
  end
120
125
  send_object :confirm, @options if version? ">= 0.2.2"
121
126
  end
@@ -0,0 +1,40 @@
1
+ module Envoy
2
+
3
+ TRACE = 5
4
+ DEBUG = 4
5
+ INFO = 3
6
+ WARN = 2
7
+ ERROR = 1
8
+ FATAL = 0
9
+
10
+ VERBOSITIES = "FEWIDT"
11
+
12
+ class << self
13
+ attr_accessor :verbosity
14
+ end
15
+
16
+ def self.log (level, text, io = STDERR)
17
+ return unless io
18
+ return unless level <= verbosity
19
+ message = [
20
+ Time.now.strftime("%F %T"),
21
+ VERBOSITIES[level][0],
22
+ text
23
+ ].compact.join(" ")
24
+ io.puts message
25
+ io.flush
26
+ end
27
+
28
+ def self.find_file (name)
29
+ dirs = Dir.pwd.split("/")
30
+ r = dirs.reduce([]) do |m, x|
31
+ [[*m[0], x], *m]
32
+ end.map do |p|
33
+ p.join("/") + "/#{name}"
34
+ end.each do |p|
35
+ return p if File.exist?(p)
36
+ end
37
+ false
38
+ end
39
+
40
+ end
@@ -1,3 +1,3 @@
1
1
  module Envoy
2
- VERSION = '0.2.3'
2
+ VERSION = '1.0.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: envoy-proxy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Baum
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-20 00:00:00.000000000 Z
11
+ date: 2014-07-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: eventmachine
@@ -99,13 +99,15 @@ files:
99
99
  - envoy-proxy.gemspec
100
100
  - lib/envoy/client/channel.rb
101
101
  - lib/envoy/client/command.rb
102
- - lib/envoy/client/option_parser.rb
102
+ - lib/envoy/client/config.rb
103
+ - lib/envoy/client/config/builder.rb
103
104
  - lib/envoy/client/trunk.rb
104
105
  - lib/envoy/protocol.rb
105
106
  - lib/envoy/server/channel.rb
106
107
  - lib/envoy/server/command.rb
107
108
  - lib/envoy/server/trunk.rb
108
109
  - lib/envoy/server/web.rb
110
+ - lib/envoy/utils.rb
109
111
  - lib/envoy/version.rb
110
112
  homepage: ''
111
113
  licenses:
@@ -1,76 +0,0 @@
1
- require 'optparse'
2
-
3
- def default_options
4
- {
5
- "server_host" => 'p45.eu',
6
- "server_port" => "8282",
7
- "local_host" => '127.0.0.1',
8
- "tls" => false,
9
- "verbosity" => 3,
10
- "version" => Envoy::VERSION,
11
- "delay" => 1,
12
- "dir" => ".",
13
- "timestamps" => false,
14
- "show_log_level" => true,
15
- "color_log_level" => true,
16
- }
17
- end
18
-
19
- def parse_options
20
- options = default_options
21
- OptionParser.new do |op|
22
- op.banner = "Usage: #{$0} [options] [[HOST:]PORT] [LABEL]"
23
- op.on "-l LABEL", "--label", "--host", "Allocate this domain label on the proxy" do |v|
24
- options["hosts"] ||= []
25
- options["hosts"] << v
26
- end
27
- op.on "-k KEY", "--key", "Secure access to the label with this key" do |v|
28
- options["key"] = v
29
- end
30
- op.on "-s SERVER", "--server", "Specify envoy server" do |v|
31
- host, port = v.split(":")
32
- options["server_host"] = host
33
- options["server_port"] ||= port
34
- end
35
- op.on "-c COMMAND", "Run this command" do |v|
36
- options["command"] = v
37
- end
38
- op.on "-v", "--verbose", "Show messages. Repeat to show more." do
39
- options["verbosity"] += 1
40
- end
41
- op.on "-q", "--quiet", "Hide messages. Repeat to hide more." do
42
- options["verbosity"] -= 1
43
- end
44
- op.on "-h", "--help", "Show this message" do
45
- puts op
46
- exit
47
- end
48
- op.on "-V", "--version", "Show version number" do
49
- puts Envoy::VERSION
50
- exit
51
- end
52
- op.parse!
53
- case ARGV[0]
54
- when "rails"
55
- options["pidfile"] = "tmp/pids/server.pid"
56
- options["command"] = "rails s -p %{local_port}"
57
- options["delay"] = 10
58
- when "rackup"
59
- options["command"] = "rackup -p %{local_port}"
60
- options["delay"] = 10
61
- when /^(\d+)$/
62
- options["local_port"] = $1
63
- when /^(\[[^\]+]\]|[^:]+):(\d+)$/x
64
- options["local_host"] = $1
65
- options["local_port"] = $2
66
- when /^(.*)$/
67
- options["local_host"] = $1
68
- end
69
- if ARGV[1]
70
- options["hosts"] ||= []
71
- options["hosts"] << ARGV[1]
72
- end
73
- end
74
- options
75
- end
76
-