jets 1.0.18 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
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