Sha256: 77233e9d2cf015bd111dc4ad8698af8ee4507c4f2d580cab401411016569c8b3

Contents?: true

Size: 1.96 KB

Versions: 11

Compression:

Stored size: 1.96 KB

Contents

module Souls
  class CloudScheduler < Thor
    desc "awake", "Set Ping Every 15min by Google Cloud Scheduler"
    method_option :url, default: "https://souls.souls.nl", aliases: "--url", desc: "Set URL"
    def awake
      app_name = Souls.configuration.app
      system(
        "gcloud scheduler jobs create http #{app_name}-awake
            --schedule '0,10,20,30,40,50 * * * *' --uri #{options[:url]} --http-method GET"
      )
    end

    desc "sync_schedules", "Collect schedules from queries and sync with GCloud"
    def sync_schedules
      require("./app")
      Souls::Gcloud.new.config_set
      project_id = Souls.configuration.project_id

      schedules_list = current_schedules

      Queries::BaseQuery.all_schedules.each do |k, v|
        worker_name = FileUtils.pwd.split("/").last
        job_name = "#{worker_name}_#{k.to_s.underscore}".to_sym

        if schedules_list.include?(job_name)
          schedule = schedules_list[job_name]
          schedules_list.delete(job_name)
          next if schedule == v

          system(
            <<~COMMAND)
              gcloud scheduler jobs update pubsub #{job_name} --project=#{project_id} --quiet --schedule="#{v}" --topic="#{k}" --message-body="#{k}"
            COMMAND
        else
          system(
            <<~COMMAND)
              gcloud scheduler jobs create pubsub #{job_name} --project=#{project_id} --quiet --schedule="#{v}" --topic="#{k}" --attributes="" --message-body="#{k}"
            COMMAND
        end
      end

      schedules_list.each do |k, _|
        system("gcloud scheduler jobs delete #{k} -q >/dev/null 2>&1")
      end
    end

    private

    def current_schedules
      current_schedules = {}
      jobs = `gcloud scheduler jobs list`
      jobs.split("\n")[1..].each do |line|
        columns = line.split(/\t| {2,}/)
        job_name = columns[0].to_sym
        crontab = columns[2].split(" (")[0]
        current_schedules[job_name] = crontab
      end

      current_schedules
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
souls-1.11.2 lib/souls/cli/gcloud/scheduler/index.rb
souls-1.11.1 lib/souls/cli/gcloud/scheduler/index.rb
souls-1.11.0 lib/souls/cli/gcloud/scheduler/index.rb
souls-1.10.8 lib/souls/cli/gcloud/scheduler/index.rb
souls-1.10.7 lib/souls/cli/gcloud/scheduler/index.rb
souls-1.10.6 lib/souls/cli/gcloud/scheduler/index.rb
souls-1.10.5 lib/souls/cli/gcloud/scheduler/index.rb
souls-1.10.4 lib/souls/cli/gcloud/scheduler/index.rb
souls-1.10.3 lib/souls/cli/gcloud/scheduler/index.rb
souls-1.10.2 lib/souls/cli/gcloud/scheduler/index.rb
souls-1.10.1 lib/souls/cli/gcloud/scheduler/index.rb