Merge throttle check

This commit is contained in:
Hillel Coren 2018-03-11 12:11:25 +02:00
parent 77a2920538
commit d884578c60
2 changed files with 14 additions and 14 deletions

View File

@ -158,7 +158,7 @@ if (! defined('APP_NAME')) {
define('MAX_DOCUMENT_SIZE', env('MAX_DOCUMENT_SIZE', 10000)); // KB define('MAX_DOCUMENT_SIZE', env('MAX_DOCUMENT_SIZE', 10000)); // KB
define('MAX_EMAIL_DOCUMENTS_SIZE', env('MAX_EMAIL_DOCUMENTS_SIZE', 10000)); // Total KB define('MAX_EMAIL_DOCUMENTS_SIZE', env('MAX_EMAIL_DOCUMENTS_SIZE', 10000)); // Total KB
define('MAX_ZIP_DOCUMENTS_SIZE', env('MAX_EMAIL_DOCUMENTS_SIZE', 30000)); // Total KB (uncompressed) define('MAX_ZIP_DOCUMENTS_SIZE', env('MAX_EMAIL_DOCUMENTS_SIZE', 30000)); // Total KB (uncompressed)
define('MAX_EMAILS_SENT_PER_HOUR', 90); define('MAX_EMAILS_SENT_PER_DAY', 80);
define('DOCUMENT_PREVIEW_SIZE', env('DOCUMENT_PREVIEW_SIZE', 300)); // pixels define('DOCUMENT_PREVIEW_SIZE', env('DOCUMENT_PREVIEW_SIZE', 300)); // pixels
define('DEFAULT_FONT_SIZE', 9); define('DEFAULT_FONT_SIZE', 9);
define('DEFAULT_HEADER_FONT', 1); // Roboto define('DEFAULT_HEADER_FONT', 1); // Roboto

View File

@ -378,26 +378,26 @@ class ContactMailer extends Mailer
$key = $account->company_id; $key = $account->company_id;
// http://stackoverflow.com/questions/1375501/how-do-i-throttle-my-sites-api-users // http://stackoverflow.com/questions/1375501/how-do-i-throttle-my-sites-api-users
$hour = 60 * 60; $day = 60 * 60 * 24;
$hour_limit = MAX_EMAILS_SENT_PER_HOUR; $day_limit = MAX_EMAILS_SENT_PER_DAY;
$hour_throttle = Cache::get("email_hour_throttle:{$key}", null); $day_throttle = Cache::get("email_day_throttle:{$key}", null);
$last_api_request = Cache::get("last_email_request:{$key}", 0); $last_api_request = Cache::get("last_email_request:{$key}", 0);
$last_api_diff = time() - $last_api_request; $last_api_diff = time() - $last_api_request;
if (is_null($hour_throttle)) { if (is_null($day_throttle)) {
$new_hour_throttle = 0; $new_day_throttle = 0;
} else { } else {
$new_hour_throttle = $hour_throttle - $last_api_diff; $new_day_throttle = $day_throttle - $last_api_diff;
$new_hour_throttle = $new_hour_throttle < 0 ? 0 : $new_hour_throttle; $new_day_throttle = $new_day_throttle < 0 ? 0 : $new_day_throttle;
$new_hour_throttle += $hour / $hour_limit; $new_day_throttle += $day / $day_limit;
$hour_hits_remaining = floor(($hour - $new_hour_throttle) * $hour_limit / $hour); $day_hits_remaining = floor(($day - $new_day_throttle) * $day_limit / $day);
$hour_hits_remaining = $hour_hits_remaining >= 0 ? $hour_hits_remaining : 0; $day_hits_remaining = $day_hits_remaining >= 0 ? $day_hits_remaining : 0;
} }
Cache::put("email_hour_throttle:{$key}", $new_hour_throttle, 60); Cache::put("email_day_throttle:{$key}", $new_day_throttle, 60);
Cache::put("last_email_request:{$key}", time(), 60); Cache::put("last_email_request:{$key}", time(), 60);
if ($new_hour_throttle > $hour) { if ($new_day_throttle > $day) {
$errorEmail = env('ERROR_EMAIL'); $errorEmail = env('ERROR_EMAIL');
if ($errorEmail && ! Cache::get("throttle_notified:{$key}")) { if ($errorEmail && ! Cache::get("throttle_notified:{$key}")) {
Mail::raw('Account Throttle', function ($message) use ($errorEmail, $account) { Mail::raw('Account Throttle', function ($message) use ($errorEmail, $account) {
@ -406,7 +406,7 @@ class ContactMailer extends Mailer
->subject("Email throttle triggered for account " . $account->id); ->subject("Email throttle triggered for account " . $account->id);
}); });
} }
Cache::put("throttle_notified:{$key}", true, 60); Cache::put("throttle_notified:{$key}", true, 60 * 24);
return true; return true;
} }