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.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/Gemfile.lock +10 -10
  4. data/README/testing.md +5 -2
  5. data/lib/jets.rb +2 -2
  6. data/lib/jets/application.rb +69 -40
  7. data/lib/jets/booter.rb +17 -20
  8. data/lib/jets/builders/code_builder.rb +7 -8
  9. data/lib/jets/cfn/ship.rb +0 -6
  10. data/lib/jets/commands/build.rb +0 -5
  11. data/lib/jets/commands/deploy.rb +0 -4
  12. data/lib/jets/commands/main.rb +31 -4
  13. data/lib/jets/commands/templates/skeleton/{.env → .env.tt} +1 -0
  14. data/lib/jets/commands/templates/skeleton/config.ru +1 -0
  15. data/lib/jets/commands/upgrade/v1.rb +12 -0
  16. data/lib/jets/controller.rb +5 -0
  17. data/lib/jets/controller/base.rb +43 -21
  18. data/lib/jets/controller/cookies.rb +40 -0
  19. data/lib/jets/controller/cookies/jar.rb +269 -0
  20. data/lib/jets/controller/middleware.rb +4 -0
  21. data/lib/jets/controller/middleware/local.rb +119 -0
  22. data/lib/jets/{server/lambda_aws_proxy.rb → controller/middleware/local/api_gateway.rb} +11 -49
  23. data/lib/jets/controller/middleware/local/mimic_aws_call.rb +38 -0
  24. data/lib/jets/{server → controller/middleware/local}/route_matcher.rb +4 -4
  25. data/lib/jets/controller/middleware/main.rb +46 -0
  26. data/lib/jets/{server → controller/middleware}/webpacker_setup.rb +0 -1
  27. data/lib/jets/controller/params.rb +2 -1
  28. data/lib/jets/controller/rack.rb +5 -0
  29. data/lib/jets/controller/rack/adapter.rb +60 -0
  30. data/lib/jets/controller/rack/env.rb +96 -0
  31. data/lib/jets/controller/redirection.rb +1 -1
  32. data/lib/jets/controller/renderers.rb +1 -1
  33. data/lib/jets/controller/renderers/base_renderer.rb +0 -4
  34. data/lib/jets/controller/renderers/{aws_proxy_renderer.rb → rack_renderer.rb} +7 -19
  35. data/lib/jets/controller/renderers/template_renderer.rb +1 -1
  36. data/lib/jets/controller/request.rb +14 -44
  37. data/lib/jets/controller/response.rb +55 -7
  38. data/lib/jets/internal/app/controllers/jets/rack_controller.rb +13 -3
  39. data/lib/jets/mega.rb +7 -0
  40. data/lib/jets/{rack → mega}/hash_converter.rb +1 -1
  41. data/lib/jets/{rack → mega}/request.rb +17 -4
  42. data/lib/jets/middleware.rb +38 -0
  43. data/lib/jets/middleware/configurator.rb +84 -0
  44. data/lib/jets/middleware/default_stack.rb +44 -0
  45. data/lib/jets/middleware/layer.rb +34 -0
  46. data/lib/jets/middleware/stack.rb +77 -0
  47. data/lib/jets/resource/function.rb +1 -1
  48. data/lib/jets/ruby_server.rb +1 -1
  49. data/lib/jets/server.rb +48 -13
  50. data/lib/jets/version.rb +1 -1
  51. metadata +24 -17
  52. data/lib/jets/application/middleware.rb +0 -23
  53. data/lib/jets/default/application.rb +0 -23
  54. data/lib/jets/rack.rb +0 -7
  55. data/lib/jets/rack/server.rb +0 -47
  56. data/lib/jets/server/api_gateway.rb +0 -39
  57. data/lib/jets/server/timing_middleware.rb +0 -33
  58. data/lib/jets/timing.rb +0 -65
  59. 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
@@ -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
@@ -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