RetryHelperTrait.php 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. <?php
  2. namespace Aws\Retry;
  3. use Aws\Exception\AwsException;
  4. use Aws\ResultInterface;
  5. trait RetryHelperTrait
  6. {
  7. private function addRetryHeader($request, $retries, $delayBy)
  8. {
  9. return $request->withHeader('aws-sdk-retry', "{$retries}/{$delayBy}");
  10. }
  11. private function updateStats($retries, $delay, array &$stats)
  12. {
  13. if (!isset($stats['total_retry_delay'])) {
  14. $stats['total_retry_delay'] = 0;
  15. }
  16. $stats['total_retry_delay'] += $delay;
  17. $stats['retries_attempted'] = $retries;
  18. }
  19. private function updateHttpStats($value, array &$stats)
  20. {
  21. if (empty($stats['http'])) {
  22. $stats['http'] = [];
  23. }
  24. if ($value instanceof AwsException) {
  25. $resultStats = $value->getTransferInfo();
  26. $stats['http'] []= $resultStats;
  27. } elseif ($value instanceof ResultInterface) {
  28. $resultStats = isset($value['@metadata']['transferStats']['http'][0])
  29. ? $value['@metadata']['transferStats']['http'][0]
  30. : [];
  31. $stats['http'] []= $resultStats;
  32. }
  33. }
  34. private function bindStatsToReturn($return, array $stats)
  35. {
  36. if ($return instanceof ResultInterface) {
  37. if (!isset($return['@metadata'])) {
  38. $return['@metadata'] = [];
  39. }
  40. $return['@metadata']['transferStats'] = $stats;
  41. } elseif ($return instanceof AwsException) {
  42. $return->setTransferInfo($stats);
  43. }
  44. return $return;
  45. }
  46. }