jets 1.0.18 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/Gemfile.lock +10 -10
- data/README/testing.md +5 -2
- data/lib/jets.rb +2 -2
- data/lib/jets/application.rb +69 -40
- data/lib/jets/booter.rb +17 -20
- data/lib/jets/builders/code_builder.rb +7 -8
- data/lib/jets/cfn/ship.rb +0 -6
- data/lib/jets/commands/build.rb +0 -5
- data/lib/jets/commands/deploy.rb +0 -4
- data/lib/jets/commands/main.rb +31 -4
- data/lib/jets/commands/templates/skeleton/{.env → .env.tt} +1 -0
- data/lib/jets/commands/templates/skeleton/config.ru +1 -0
- data/lib/jets/commands/upgrade/v1.rb +12 -0
- data/lib/jets/controller.rb +5 -0
- data/lib/jets/controller/base.rb +43 -21
- data/lib/jets/controller/cookies.rb +40 -0
- data/lib/jets/controller/cookies/jar.rb +269 -0
- data/lib/jets/controller/middleware.rb +4 -0
- data/lib/jets/controller/middleware/local.rb +119 -0
- data/lib/jets/{server/lambda_aws_proxy.rb → controller/middleware/local/api_gateway.rb} +11 -49
- data/lib/jets/controller/middleware/local/mimic_aws_call.rb +38 -0
- data/lib/jets/{server → controller/middleware/local}/route_matcher.rb +4 -4
- data/lib/jets/controller/middleware/main.rb +46 -0
- data/lib/jets/{server → controller/middleware}/webpacker_setup.rb +0 -1
- data/lib/jets/controller/params.rb +2 -1
- data/lib/jets/controller/rack.rb +5 -0
- data/lib/jets/controller/rack/adapter.rb +60 -0
- data/lib/jets/controller/rack/env.rb +96 -0
- data/lib/jets/controller/redirection.rb +1 -1
- data/lib/jets/controller/renderers.rb +1 -1
- data/lib/jets/controller/renderers/base_renderer.rb +0 -4
- data/lib/jets/controller/renderers/{aws_proxy_renderer.rb → rack_renderer.rb} +7 -19
- data/lib/jets/controller/renderers/template_renderer.rb +1 -1
- data/lib/jets/controller/request.rb +14 -44
- data/lib/jets/controller/response.rb +55 -7
- data/lib/jets/internal/app/controllers/jets/rack_controller.rb +13 -3
- data/lib/jets/mega.rb +7 -0
- data/lib/jets/{rack → mega}/hash_converter.rb +1 -1
- data/lib/jets/{rack → mega}/request.rb +17 -4
- data/lib/jets/middleware.rb +38 -0
- data/lib/jets/middleware/configurator.rb +84 -0
- data/lib/jets/middleware/default_stack.rb +44 -0
- data/lib/jets/middleware/layer.rb +34 -0
- data/lib/jets/middleware/stack.rb +77 -0
- data/lib/jets/resource/function.rb +1 -1
- data/lib/jets/ruby_server.rb +1 -1
- data/lib/jets/server.rb +48 -13
- data/lib/jets/version.rb +1 -1
- metadata +24 -17
- data/lib/jets/application/middleware.rb +0 -23
- data/lib/jets/default/application.rb +0 -23
- data/lib/jets/rack.rb +0 -7
- data/lib/jets/rack/server.rb +0 -47
- data/lib/jets/server/api_gateway.rb +0 -39
- data/lib/jets/server/timing_middleware.rb +0 -33
- data/lib/jets/timing.rb +0 -65
- data/lib/jets/timing/report.rb +0 -82
@@ -1,33 +0,0 @@
|
|
1
|
-
class Jets::Server
|
2
|
-
class TimingMiddleware
|
3
|
-
FORMAT_STRING = "%0.6f" # :nodoc:
|
4
|
-
HEADER_NAME = "X-Runtime" # :nodoc:
|
5
|
-
|
6
|
-
def initialize(app)
|
7
|
-
@app = app
|
8
|
-
end
|
9
|
-
|
10
|
-
def call(env)
|
11
|
-
start_time = clock_time
|
12
|
-
status, headers, body = @app.call(env)
|
13
|
-
request_time = clock_time - start_time
|
14
|
-
|
15
|
-
unless headers.has_key?(HEADER_NAME)
|
16
|
-
headers[HEADER_NAME] = FORMAT_STRING % request_time
|
17
|
-
end
|
18
|
-
|
19
|
-
[status, headers, body]
|
20
|
-
end
|
21
|
-
|
22
|
-
private
|
23
|
-
if defined?(Process::CLOCK_MONOTONIC)
|
24
|
-
def clock_time
|
25
|
-
Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
26
|
-
end
|
27
|
-
else
|
28
|
-
def clock_time
|
29
|
-
Time.now.to_f
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
data/lib/jets/timing.rb
DELETED
@@ -1,65 +0,0 @@
|
|
1
|
-
require 'fileutils'
|
2
|
-
require 'json'
|
3
|
-
require 'active_support/concern'
|
4
|
-
|
5
|
-
# Used to record timing on how long `jets deploy` takes.
|
6
|
-
# So we can continually improve it.
|
7
|
-
#
|
8
|
-
# We inject timing code into choosen methods and then record the start and finish
|
9
|
-
# time for those methods in /tmp/jets/demo/timing/records.log. Each item in the log
|
10
|
-
# is in JSON.
|
11
|
-
#
|
12
|
-
# We later use the data in this log to generate a timing report.
|
13
|
-
module Jets
|
14
|
-
module Timing
|
15
|
-
autoload :Report, 'jets/timing/report'
|
16
|
-
extend ActiveSupport::Concern
|
17
|
-
RECORD_LOG_PATH = "#{Jets.build_root}/timing/records.log"
|
18
|
-
|
19
|
-
def record_data(meth, type)
|
20
|
-
# https://stackoverflow.com/questions/17267935/display-time-down-to-milliseconds-in-ruby-1-8-7
|
21
|
-
# Record time in milliseconds unit so we can calculate time differences later
|
22
|
-
time = (Time.now.to_f * 1000.0).to_i
|
23
|
-
JSON.dump(
|
24
|
-
class: self.class.name,
|
25
|
-
meth: meth,
|
26
|
-
time: time,
|
27
|
-
type: type,
|
28
|
-
)
|
29
|
-
end
|
30
|
-
|
31
|
-
def record_log(meth, type)
|
32
|
-
data = record_data(meth, type)
|
33
|
-
path = Timing::RECORD_LOG_PATH
|
34
|
-
FileUtils.mkdir_p(File.dirname(path))
|
35
|
-
File.open(path, 'a') {|f| f.write(data + "\n") }
|
36
|
-
end
|
37
|
-
|
38
|
-
# Clear out all timing data
|
39
|
-
def self.clear
|
40
|
-
return unless File.exist?(RECORD_LOG_PATH)
|
41
|
-
FileUtils.cp("/dev/null", RECORD_LOG_PATH)
|
42
|
-
end
|
43
|
-
|
44
|
-
def self.report
|
45
|
-
return unless ENV['JETS_TIMING']
|
46
|
-
Report.new.results
|
47
|
-
end
|
48
|
-
|
49
|
-
included do
|
50
|
-
def self.time(meth)
|
51
|
-
unrecorded_meth = "unrecorded_#{meth}"
|
52
|
-
alias_method unrecorded_meth, meth
|
53
|
-
|
54
|
-
module_eval <<-EOS, __FILE__, __LINE__ + 1
|
55
|
-
def #{meth}(*args, &block)
|
56
|
-
record_log(:#{meth}, :start)
|
57
|
-
result = #{unrecorded_meth}(*args, &block)
|
58
|
-
record_log(:#{meth}, :finish)
|
59
|
-
result
|
60
|
-
end
|
61
|
-
EOS
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
data/lib/jets/timing/report.rb
DELETED
@@ -1,82 +0,0 @@
|
|
1
|
-
require 'json'
|
2
|
-
|
3
|
-
module Jets::Timing
|
4
|
-
class Report
|
5
|
-
extend Memoist
|
6
|
-
|
7
|
-
def initialize(log=Jets::Timing::RECORD_LOG_PATH)
|
8
|
-
@log = log
|
9
|
-
end
|
10
|
-
|
11
|
-
def results
|
12
|
-
unless File.exist?(@log)
|
13
|
-
puts "WARN: Timing #{@log} does not exist"
|
14
|
-
return
|
15
|
-
end
|
16
|
-
puts process
|
17
|
-
end
|
18
|
-
|
19
|
-
def process
|
20
|
-
deploy = times_for("Jets::Commands::Deploy")
|
21
|
-
deploy[:rest] = rest_time(deploy[:run], deploy[:build_code], deploy[:ship])
|
22
|
-
build = times_for("Jets::Commands::Build")
|
23
|
-
cfn_ship = times_for("Jets::Cfn::Ship")
|
24
|
-
code_builder = times_for("Jets::Builders::CodeBuilder")
|
25
|
-
|
26
|
-
# Two ships screw this up.
|
27
|
-
# The first ship creates the base parent stack with the s3 bucket.
|
28
|
-
# The second ship creates the app.
|
29
|
-
# Once the first stack exists, it is left alone and ship does not get called
|
30
|
-
# twice.
|
31
|
-
# This reporting logic currently only reports the last ship.
|
32
|
-
# Refer to timings.reverse.find in get_time method.
|
33
|
-
results = {
|
34
|
-
overall: deploy[:run],
|
35
|
-
"commands/deploy.rb": deploy,
|
36
|
-
"commands/build.rb": build,
|
37
|
-
"builders/code_builder.rb": code_builder,
|
38
|
-
"cfn/ship.rb": cfn_ship,
|
39
|
-
}
|
40
|
-
text = YAML.dump(results.deep_stringify_keys)
|
41
|
-
text.sub!('---', 'Timing report:')
|
42
|
-
text
|
43
|
-
end
|
44
|
-
|
45
|
-
# All times for a class
|
46
|
-
def times_for(class_name)
|
47
|
-
times = data.select { |i| i['class'] == class_name }
|
48
|
-
meths = times.map { |i| i['meth'] }.uniq
|
49
|
-
meths.inject({}) do |result, meth|
|
50
|
-
result.merge(meth => time_for(class_name, meth))
|
51
|
-
end.deep_symbolize_keys
|
52
|
-
end
|
53
|
-
|
54
|
-
def data
|
55
|
-
IO.readlines(@log).map { |l| JSON.load(l) }
|
56
|
-
end
|
57
|
-
memoize :data
|
58
|
-
|
59
|
-
def rest_time(total, *times)
|
60
|
-
result = total.to_f
|
61
|
-
times.each { |time| result -= time.to_f }
|
62
|
-
'%.3f' % result + 's'
|
63
|
-
end
|
64
|
-
|
65
|
-
# Returns String
|
66
|
-
# Example: 88.8s
|
67
|
-
def time_for(klass, meth)
|
68
|
-
timings = data.select { |l| l['class'] == klass && l['meth'] == meth }
|
69
|
-
start_time = get_time(timings, 'start')
|
70
|
-
finish_time = get_time(timings, 'finish')
|
71
|
-
diff = ( finish_time - start_time ) / 1000.0
|
72
|
-
'%.3f' % diff + 's'
|
73
|
-
end
|
74
|
-
|
75
|
-
# Input: timings is a pair of data. The start and end time.
|
76
|
-
def get_time(timings, type)
|
77
|
-
# reverse so we get the last ship
|
78
|
-
time = timings.reverse.find { |l| l['type'] == type }['time']
|
79
|
-
time.to_f # in milloseconds
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|