Skip to content

Instantly share code, notes, and snippets.

@EsauPR
Last active July 25, 2019 14:31
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save EsauPR/553c6e2e5f9a0e05ff7ab5a45922e919 to your computer and use it in GitHub Desktop.
Save EsauPR/553c6e2e5f9a0e05ff7ab5a45922e919 to your computer and use it in GitHub Desktop.
/*
Porcentaje de nivel de confianza, limita la exactitud de los cálculos, toma valores del 1 al 100
*/
CONFIDENCE_LEVEL = 80
/*
Número de llamadas permitidas por usuario activo
*/
CALLS_PER_USER = 200
/*
Tiempo de expiración de las llaves en Redis
*/
KEY_EXPIRATION_TIME = 3600
/*
Valor máximo que puede alcanzar cualquier de las tres estadísticas de uso
de la aplicación retornadas por Facebook antes de empezar a limitar la frecuencia
de las llamadas
*/
MAX_STAT_VALUE = 80
/*
Calcula el número de llamadas por minuto
*/
get_calls_per_minute:
// Usuarios activos diarios
active_users = get_active_users()
// Número de llamadas por hora
calls_per_hour = CALLS_PER_USER * ACTIVE_USERS
// Estadisticas de uso de la aplicación
call_count, total_time, total_cputime = get_app_usage()
// Estadística de uso más alta
highest_stat = max(call_count, total_time, total_cputime)
// Limitación de número de llamadas si se supera el valor crítico de uso de la app
limitation = 1
if highest_stat > MAX_STAT_VALUE:
limitation = 0.5 + 0.5 / (100.0 - MAX_STAT_VALUE) * (100.0 - highest_stat)
calls_per_minute = calls_per_hour * limitation * CONFIDENCE_LEVEL / 6000
return calls_per_minute
main:
// Obtiene el número de llamadas disponibles por minuto
calls_per_minute = get_calls_per_minute()
// Inserta en Redis la llave con el número de llamadas por minuto y expiración de una hora
release_tokens(calls_per_minute, KEY_EXPIRATION_TIME)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment