Class: Jets::Preheat
Class Method Summary collapse
Instance Method Summary collapse
-
#all_functions ⇒ Object
Returns: [ “posts_controller-index”, “posts_controller-show”, … ].
- #classes ⇒ Object
-
#initialize(options) ⇒ Preheat
constructor
A new instance of Preheat.
-
#warm(function_name) ⇒ Object
Makes remote call to the Lambda function.
-
#warm_all ⇒ Object
Loop through all methods for each class and makes special prewarm call to each method.
- #warm_public_controller_more ⇒ Object
- #warm_rack_controller_more ⇒ Object
Constructor Details
#initialize(options) ⇒ Preheat
Returns a new instance of Preheat.
18 19 20 21 22 |
# File 'lib/jets/preheat.rb', line 18 def initialize() @options = # passed to Call.new options @options[:mute_output] = true if @options[:mute_output].nil? @options[:lambda_proxy] = false # do not transform controller event from {"event": "1"} to {"queryStringParameters":{"_prewarm":"1"}} end |
Class Method Details
Instance Method Details
#all_functions ⇒ Object
Returns:
[
"posts_controller-index",
"posts_controller-show",
...
]
93 94 95 96 97 98 99 100 101 102 |
# File 'lib/jets/preheat.rb', line 93 def all_functions classes.map do |klass| tasks = klass.tasks.select { |t| t.lang == :ruby } # only prewarm ruby functions tasks.map do |task| meth = task.meth underscored = klass.to_s.underscore.gsub('/','-') "#{underscored}-#{meth}" # function_name end end.flatten.uniq.compact end |
#classes ⇒ Object
105 106 107 108 109 110 111 112 113 114 115 |
# File 'lib/jets/preheat.rb', line 105 def classes Jets::Commands::Build.app_files.map do |path| next if path.include?("preheat_job.rb") # dont want to cause an infinite loop next if path =~ %r{app/functions} # dont support app/functions class_path = path.sub(%r{.*app/\w+/},'').sub(/\.rb$/,'') class_name = class_path.classify # IE: PostsController class_name.constantize # load app/**/* class definition end.compact end |
#warm(function_name) ⇒ Object
Makes remote call to the Lambda function.
25 26 27 |
# File 'lib/jets/preheat.rb', line 25 def warm(function_name) Jets::Commands::Call.new(function_name, '{"_prewarm": "1"}', @options).run unless ENV['TEST'] end |
#warm_all ⇒ Object
Loop through all methods for each class and makes special prewarm call to each method.
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/jets/preheat.rb', line 30 def warm_all threads = [] all_functions.each do |function_name| next if function_name.include?('jets-public_controller') # handled by warm_public_controller_more next if function_name.include?('jets-rack_controller') # handled by warm_rack_controller_more threads << Thread.new do warm(function_name) end end threads.each { |t| t.join } # Warm the these controllers more since they can be hit more often warm_public_controller_more warm_rack_controller_more # return the funciton names so we can see in the Lambda console # the functions being prewarmed all_functions end |
#warm_public_controller_more ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/jets/preheat.rb', line 50 def warm_public_controller_more function_name = 'jets-public_controller-show' # key function name return unless all_functions.include?(function_name) public_ratio = Jets.config.prewarm.public_ratio return if public_ratio == 0 puts "Prewarming the public controller extra at a ratio of #{public_ratio}" unless @options[:mute] threads = [] public_ratio.times do threads << Thread.new do warm(function_name) end end threads.each { |t| t.join } end |
#warm_rack_controller_more ⇒ Object
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/jets/preheat.rb', line 68 def warm_rack_controller_more return unless Jets.rack? function_name = 'jets-rack_controller-process' # key function name return unless all_functions.include?(function_name) rack_ratio = Jets.config.prewarm.rack_ratio return if rack_ratio == 0 puts "Prewarming the rack controller extra at a ratio of #{rack_ratio}" unless @options[:mute] threads = [] rack_ratio.times do threads << Thread.new do warm(function_name) end end threads.each { |t| t.join } end |