From 84061dec4f56842ccf2a780b367978a0a48474bf Mon Sep 17 00:00:00 2001 From: Rafa de la Torre Date: Thu, 10 Nov 2016 18:12:24 +0100 Subject: [PATCH] Move everything to cdb_service_params (WIP) #302 --- server/extension/sql/200_quotas.sql | 76 ++++++++++++++--------------- 1 file changed, 37 insertions(+), 39 deletions(-) diff --git a/server/extension/sql/200_quotas.sql b/server/extension/sql/200_quotas.sql index 93d77d9..8ba354b 100644 --- a/server/extension/sql/200_quotas.sql +++ b/server/extension/sql/200_quotas.sql @@ -1,3 +1,39 @@ +CREATE TYPE cdb_dataservices_server.service_params AS ( + monthly_quota NUMERIC, + used_quota NUMERIC, + soft_limit BOOLEAN, + provider TEXT +); + + +CREATE OR REPLACE FUNCTION cdb_dataservices_server.cdb_service_params( + username TEXT, + orgname TEXT, + service TEXT) +RETURNS cdb_dataservices_server.service_params AS $$ + import cartodb_services.metrics.quota as quota + from cartodb_services.metrics.user import UserMetricsService + from datetime import date + + plpy.execute("SELECT cdb_dataservices_server._connect_to_redis('{0}')".format(username)) + redis_conn = GD["redis_connection_{0}".format(username)]['redis_metrics_connection'] + + if service == quota.Service.ISOLINES: + plpy.execute("SELECT cdb_dataservices_server._get_isolines_routing_config({0}, {1})".format(plpy.quote_nullable(username), plpy.quote_nullable(orgname))) + user_isolines_config = GD["user_isolines_routing_config_{0}".format(username)] + monthly_quota = user_isolines_config.isolines_quota + user_service = UserMetricsService(user_isolines_config, redis_conn) + used_quota = user_service.used_quota(user_isolines_config.service_type, date.today()) + soft_limit = user_isolines_config.soft_isolines_limit + provider = user_isolines_config.provider + else: + raise 'not implemented' + + return [monthly_quota, used_quota, soft_limit, provider] + +$$ LANGUAGE plpythonu; + + CREATE OR REPLACE FUNCTION cdb_dataservices_server.cdb_monthly_quota( username TEXT, orgname TEXT, @@ -7,11 +43,7 @@ RETURNS integer AS $$ plpy.execute("SELECT cdb_dataservices_server._connect_to_redis('{0}')".format(username)) redis_conn = GD["redis_connection_{0}".format(username)]['redis_metrics_connection'] - if service == quota.Service.ISOLINES: - plpy.execute("SELECT cdb_dataservices_server._get_isolines_routing_config({0}, {1})".format(plpy.quote_nullable(username), plpy.quote_nullable(orgname))) - user_isolines_config = GD["user_isolines_routing_config_{0}".format(username)] - monthly_quota = user_isolines_config.isolines_quota - elif service == quota.Service.HIRES_GEOCODER: + if service == quota.Service.HIRES_GEOCODER: plpy.execute("SELECT cdb_dataservices_server._get_geocoder_config({0}, {1})".format(plpy.quote_nullable(username), plpy.quote_nullable(orgname))) user_geocoder_config = GD["user_geocoder_config_{0}".format(username)] monthly_quota = user_geocoder_config.geocoding_quota @@ -44,37 +76,3 @@ RETURNS integer AS $$ else: raise 'not implemented' $$ LANGUAGE plpythonu; - - -CREATE OR REPLACE FUNCTION cdb_dataservices_server.cdb_soft_limit( - username TEXT, - orgname TEXT, - service TEXT) -RETURNS boolean AS $$ - plpy.execute("SELECT cdb_dataservices_server._connect_to_redis('{0}')".format(username)) - redis_conn = GD["redis_connection_{0}".format(username)]['redis_metrics_connection'] - - if service == 'isolines': - plpy.execute("SELECT cdb_dataservices_server._get_isolines_routing_config({0}, {1})".format(plpy.quote_nullable(username), plpy.quote_nullable(orgname))) - user_isolines_config = GD["user_isolines_routing_config_{0}".format(username)] - return user_isolines_config.soft_isolines_limit - else: - raise 'not implemented' -$$ LANGUAGE plpythonu; - - -CREATE OR REPLACE FUNCTION cdb_dataservices_server.cdb_provider( - username TEXT, - orgname TEXT, - service TEXT) -RETURNS TEXT AS $$ - plpy.execute("SELECT cdb_dataservices_server._connect_to_redis('{0}')".format(username)) - redis_conn = GD["redis_connection_{0}".format(username)]['redis_metrics_connection'] - - if service == 'isolines': - plpy.execute("SELECT cdb_dataservices_server._get_isolines_routing_config({0}, {1})".format(plpy.quote_nullable(username), plpy.quote_nullable(orgname))) - user_isolines_config = GD["user_isolines_routing_config_{0}".format(username)] - return user_isolines_config.provider - else: - raise 'not implemented' -$$ LANGUAGE plpythonu;