log('Start totals calculation.'); $start = time(); $models = \Utils\Constants::get('REST_TOTALS_MODELS'); $actionType = new \Type\QueueAccountOperationActionType(\Type\QueueAccountOperationActionType::CALCULATE_RISK_SCORE); $queueModel = new \Models\Queue\AccountOperationQueue($actionType); $keys = $queueModel->getNextBatchKeysInQueue(\Utils\Variables::getAccountOperationQueueBatchSize()); $res = []; foreach ($models as $name => $modelClass) { $res[$name] = ['cnt' => 0, 's' => 0]; $s = time(); $model = new $modelClass(); foreach ($keys as $key) { (new \Models\SessionStat())->updateStats($key); $cnt = $model->updateAllTotals($key); $res[$name]['cnt'] += $cnt; if (time() - $start > \Utils\Constants::get('ACCOUNT_OPERATION_QUEUE_EXECUTE_TIME_SEC')) { // TODO: any reason to put the rest keys to queue? $res[$name]['s'] = time() - $s; break 2; } } $res[$name]['s'] = time() - $s; } $this->log(sprintf('Updated %s entities for %s keys and %s models in %s seconds.', array_sum(array_column(array_values($res), 'cnt')), count($keys), count($models), time() - $start)); } }