46 lines
1.3 KiB
Ruby
Executable file
46 lines
1.3 KiB
Ruby
Executable file
# frozen_string_literal: true
|
|
|
|
# We created this because we could not monitor k8s resource count directly in GCP monitoring (see
|
|
# https://gitlab.com/gitlab-org/quality/engineering-productivity-infrastructure/-/issues/37)
|
|
#
|
|
# If this functionality ever becomes available, please replace this script with GCP monitoring!
|
|
|
|
require 'json'
|
|
|
|
class QuotaChecker
|
|
def initialize
|
|
@exit_with_error = false
|
|
end
|
|
|
|
def check_quotas(quotas, threshold: 0.8)
|
|
quotas.each do |quota|
|
|
print "Checking quota #{quota['metric']}..."
|
|
quota_percent_usage = quota['usage'].to_f / quota['limit']
|
|
if quota_percent_usage > threshold
|
|
puts "❌ #{quota['metric']} is above the #{threshold * 100}% threshold! (current value: #{quota_percent_usage})"
|
|
@exit_with_error = true
|
|
else
|
|
puts "✅"
|
|
end
|
|
end
|
|
end
|
|
|
|
def failed?
|
|
@exit_with_error
|
|
end
|
|
end
|
|
|
|
quota_checker = QuotaChecker.new
|
|
|
|
puts "Checking regional quotas:"
|
|
gcloud_command_output = `gcloud compute regions describe us-central1 --format=json`
|
|
quotas = JSON.parse(gcloud_command_output)['quotas']
|
|
quota_checker.check_quotas(quotas)
|
|
puts
|
|
|
|
puts "Checking project-wide quotas:"
|
|
gcloud_command_output = `gcloud compute project-info describe --format=json`
|
|
quotas = JSON.parse(gcloud_command_output)['quotas']
|
|
quota_checker.check_quotas(quotas)
|
|
|
|
exit 1 if quota_checker.failed?
|