cartodb-4.29/lib/tasks/services.rake
2020-06-15 10:58:47 +08:00

136 lines
5.5 KiB
Ruby

namespace :cartodb do
namespace :services do
# Prefixes corresponding to User columns names/REDIS keys that store providers
DS_PROVIDED_SERVICES = ['geocoder', 'routing', 'isolines'].freeze
# service provider names
DS_PROVIDERS = ['heremaps', 'google', 'mapzen', 'mapbox', 'tomtom'].freeze
# Prefixes/infixes corresponding to User columns names/REDIS keys that store quotas / soft limits
# note that there's a couple of naming incosistence due to historical reasons:
# * here_isolines refers to isolines in general, not only those provided by here
# * mapzen_routing refers to routing in general
DS_SERVICES = ['geocoding', 'here_isolines', 'obs_snapshot', 'obs_general', 'mapzen_routing'].freeze
def assert_valid_arg(args, parameter, accepted_values: nil)
value = args[parameter]
if value.blank?
raise "Please specify the #{parameter}"
end
case accepted_values
when Array
if !accepted_values.include?(value)
values_sentence = accepted_values.to_sentence(last_word_connector: ' or ', two_words_connector: ' or ')
raise "Unknown #{parameter}: #{value.inspect}. Please use one of #{values_sentence}"
end
when Proc, Hash
if !accepted_values[value]
raise "Invalid #{parameter} value: #{value.inspect}."
end
end
end
# usage example:
# bundle exec rake cartodb:services:set_user_provider['username','geocoder','mapzen']
desc 'Assign the provider for a service to a user'
task :set_user_provider, [:username, :service, :provider] => [:environment] do |_task, args|
username = args[:username]
service = args[:service]
provider = args[:provider]
user = username && ::User.find(username: username)
assert_valid_arg args, :username, accepted_values: proc { user.present? }
assert_valid_arg args, :service, accepted_values: DS_PROVIDED_SERVICES
assert_valid_arg args, :provider, accepted_values: DS_PROVIDERS
service_key = "#{service}_provider="
user.send(service_key, provider)
user.save
puts "Changed the user service provider for #{service} to #{provider}."
end
# usage example:
# bundle exec rake cartodb:services:set_organization_provider['orgname','geocoder','mapzen']
desc 'Assign the provider for a service to an organization'
task :set_organization_provider, [:orgname, :service, :provider] => [:environment] do |_task, args|
orgname = args[:orgname]
service = args[:service]
provider = args[:provider]
org = orgname && ::Organization.find(name: orgname)
assert_valid_arg args, :orgname, accepted_values: proc { org.present? }
assert_valid_arg args, :service, accepted_values: DS_PROVIDED_SERVICES
assert_valid_arg args, :provider, accepted_values: DS_PROVIDERS
service_key = "#{service}_provider="
org.send(service_key, provider)
org.save
puts "Changed the organization service provider for #{service} to #{provider}."
end
# usage example:
# bundle exec rake cartodb:services:set_user_quota['username','geocoding',900]
desc 'Assign the quota for a service to a user'
task :set_user_quota, [:username, :service, :quota] => [:environment] do |_task, args|
username = args[:username]
service = args[:service]
quota = args[:quota]
user = username && ::User.find(username: username)
assert_valid_arg args, :username, accepted_values: proc { user.present? }
assert_valid_arg args, :service, accepted_values: DS_SERVICES
assert_valid_arg args, :quota, accepted_values: ->(value) { value.to_i >= 0 }
service_quota_key = "#{service}_quota="
user.send(service_quota_key, quota)
user.save
puts "Changed the user quota for service #{service} to #{quota}."
end
# usage example:
# bundle exec rake cartodb:services:set_org_quota['orgname','geocoding',900]
desc 'Assign the quota for a service to an organization'
task :set_org_quota, [:orgname, :service, :quota] => [:environment] do |_task, args|
orgname = args[:orgname]
service = args[:service]
quota = args[:quota]
org = orgname && ::Organization.find(name: orgname)
assert_valid_arg args, :orgname, accepted_values: proc { org.present? }
assert_valid_arg args, :service, accepted_values: DS_SERVICES
assert_valid_arg args, :quota, accepted_values: ->(value) { value.to_i >= 0 }
service_quota_key = "#{service}_quota="
org.send(service_quota_key, quota)
org.save
puts "Changed the organization quota for service #{service} to #{quota}."
end
# usage example: (valid values are true or false)
# bundle exec rake cartodb:services:set_user_soft_limit['username','geocoding',true]
desc 'Assign the soft limit flag for a service to a user'
task :set_user_soft_limit, [:username, :service, :soft_limit] => [:environment] do |_task, args|
username = args[:username]
service = args[:service]
soft_limit = args[:soft_limit] == 'false' ? false : true
user = username && ::User.find(username: username)
assert_valid_arg args, :username, accepted_values: proc { user.present? }
assert_valid_arg args, :service, accepted_values: DS_SERVICES
assert_valid_arg args, :soft_limit, accepted_values: ['true', 'false']
service_quota_key = "soft_#{service}_limit="
user.send(service_quota_key, soft_limit)
user.save
puts "Changed the user soft limit for service #{service} to #{soft_limit}."
end
end
end