Sha256: 2975da7d13fbcdcad65efd086c015c00a2241ff53380a94336d94d945fed68ad

Contents?: true

Size: 1.84 KB

Versions: 1

Compression:

Stored size: 1.84 KB

Contents

class Jets::PreheatJob < Jets::Job::Base
  include Jets::AwsServices

  class_timeout 30
  class_memory 1024
  class_iam_policy([
    {
      Sid: "Statement1",
      Action: ["logs:*"],
      Effect: "Allow",
      Resource: [{
        "Fn::Sub": "arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/lambda/${JetsPreheatJobWarmLambdaFunction}"
      }]
    },
    {
      Sid: "Statement2",
      Action: ["lambda:InvokeFunction", "lambda:InvokeAsync"],
      Effect: "Allow",
      Resource: [{
        "Fn::Sub": "arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:#{Jets.project_namespace}-*"
      }]
    }
  ])

  rate(Jets.config.prewarm.rate) if Jets.config.prewarm.enable
  def warm
    options = call_options(event[:quiet])
    Jets::Preheat.warm_all(options)
    "Finished prewarming your application."
  end

  class << self
    # Can use this to prewarm post deploy
    def prewarm!
      perform_now(:warm, quiet: true)
    end
  end

  private

  # Usually: jets-preheat_job-warm unless JETS_RESET=1, in that case need to lookup the function name
  def warm_function_name
    # Return early to avoid lookup call normally
    return "jets-preheat_job-warm" unless ENV["JETS_RESET"] == "1"

    parent_stack = cfn.describe_stack_resources(stack_name: Jets::Names.parent_stack_name)
    preheat_stack = parent_stack.stack_resources.find do |resource|
      resource.logical_resource_id =~ /JetsPreheatJob/
    end

    resp = cfn.describe_stack_resources(stack_name: preheat_stack.physical_resource_id)
    resources = resp.stack_resources
    warm_function = resources.find do |resource|
      resource.logical_resource_id =~ /WarmLambdaFunction/
    end
    warm_function.physical_resource_id # IE: jets-preheat_job-warm
  end

  def call_options(quiet)
    options = {}
    options.merge!(mute: true, mute_output: true) if quiet
    options
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
jets-5.0.13 engines/internal/app/jobs/jets/preheat_job.rb