Sha256: 0889b25b114ee1638607dbdb635f6b6ca01464e99aaaf1ecac76b29387b3df77

Contents?: true

Size: 1.82 KB

Versions: 3

Compression:

Stored size: 1.82 KB

Contents

# frozen_string_literal: true

require "zlib"
require "stringio"

require_relative "../base"

module Neetob
  class CLI
    module Heroku
      class AutoscalingConfig < Base
        attr_accessor :app

        def initialize(app)
          super()
          @app = app
        end

        def run
          raise(StandardError, "HEROKU_API_KEY is not given") if ENV["HEROKU_API_KEY"].nil?

          url = create_url(app)
          response = get(url)
          if response.any? { |addon| addon[:addon_service][:name] == "judoscale" }
            ui.success("Judoscale addon is enabled for #{app}")
          else
            ui.error("Judoscale not present for #{app}")
          end
        end

        private

          def create_url(app)
            "https://api.heroku.com/apps/#{app}/addons"
          end

          def parse_response(http_result)
            case http_result
            when Net::HTTPSuccess
              compressed_string = StringIO.new(http_result.body)
              response = Zlib::GzipReader.new(compressed_string).read
              JSON.parse(response, symbolize_names: true)
            else
              error_message = JSON.parse(http_result.body)["message"]
              raise(StandardError, "Request failed with status code #{http_result.code}: #{error_message}")
            end
          end

          def get(url,
headers: { "Accept" => "application/vnd.heroku+json; version=3", "Authorization" => "Bearer #{ENV["HEROKU_API_KEY"]}" })
            uri = URI(url)
            request = Net::HTTP::Get.new(uri)
            headers.each { |key, value| request[key] = value }

            response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == "https") do |http|
              http.request(request)
            end

            parse_response(response)
          end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
neetob-0.4.36 lib/neetob/cli/heroku/autoscaling_config.rb
neetob-0.4.35 lib/neetob/cli/heroku/autoscaling_config.rb
neetob-0.4.34 lib/neetob/cli/heroku/autoscaling_config.rb