summaryrefslogtreecommitdiff
path: root/vendor/aws/aws-sdk-php/src/ClientSideMonitoring/ApiCallAttemptMonitoringMiddleware.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/aws/aws-sdk-php/src/ClientSideMonitoring/ApiCallAttemptMonitoringMiddleware.php')
-rw-r--r--vendor/aws/aws-sdk-php/src/ClientSideMonitoring/ApiCallAttemptMonitoringMiddleware.php262
1 files changed, 262 insertions, 0 deletions
diff --git a/vendor/aws/aws-sdk-php/src/ClientSideMonitoring/ApiCallAttemptMonitoringMiddleware.php b/vendor/aws/aws-sdk-php/src/ClientSideMonitoring/ApiCallAttemptMonitoringMiddleware.php
new file mode 100644
index 0000000..91810bb
--- /dev/null
+++ b/vendor/aws/aws-sdk-php/src/ClientSideMonitoring/ApiCallAttemptMonitoringMiddleware.php
@@ -0,0 +1,262 @@
+<?php
+
+namespace Aws\ClientSideMonitoring;
+
+use Aws\CommandInterface;
+use Aws\Credentials\CredentialsInterface;
+use Aws\Exception\AwsException;
+use Aws\ResponseContainerInterface;
+use Aws\ResultInterface;
+use Psr\Http\Message\RequestInterface;
+use Psr\Http\Message\ResponseInterface;
+
+/**
+ * @internal
+ */
+class ApiCallAttemptMonitoringMiddleware extends AbstractMonitoringMiddleware
+{
+
+ /**
+ * Standard middleware wrapper function with CSM options passed in.
+ *
+ * @param callable $credentialProvider
+ * @param mixed $options
+ * @param string $region
+ * @param string $service
+ * @return callable
+ */
+ public static function wrap(
+ callable $credentialProvider,
+ $options,
+ $region,
+ $service
+ ) {
+ return function (callable $handler) use (
+ $credentialProvider,
+ $options,
+ $region,
+ $service
+ ) {
+ return new static(
+ $handler,
+ $credentialProvider,
+ $options,
+ $region,
+ $service
+ );
+ };
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public static function getRequestData(RequestInterface $request)
+ {
+ return [
+ 'Fqdn' => $request->getUri()->getHost(),
+ ];
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public static function getResponseData($klass)
+ {
+ if ($klass instanceof ResultInterface) {
+ return [
+ 'AttemptLatency' => self::getResultAttemptLatency($klass),
+ 'DestinationIp' => self::getResultDestinationIp($klass),
+ 'DnsLatency' => self::getResultDnsLatency($klass),
+ 'HttpStatusCode' => self::getResultHttpStatusCode($klass),
+ 'XAmzId2' => self::getResultHeader($klass, 'x-amz-id-2'),
+ 'XAmzRequestId' => self::getResultHeader($klass, 'x-amz-request-id'),
+ 'XAmznRequestId' => self::getResultHeader($klass, 'x-amzn-RequestId'),
+ ];
+ }
+ if ($klass instanceof AwsException) {
+ return [
+ 'AttemptLatency' => self::getAwsExceptionAttemptLatency($klass),
+ 'AwsException' => substr(
+ self::getAwsExceptionErrorCode($klass),
+ 0,
+ 128
+ ),
+ 'AwsExceptionMessage' => substr(
+ self::getAwsExceptionMessage($klass),
+ 0,
+ 512
+ ),
+ 'DestinationIp' => self::getAwsExceptionDestinationIp($klass),
+ 'DnsLatency' => self::getAwsExceptionDnsLatency($klass),
+ 'HttpStatusCode' => self::getAwsExceptionHttpStatusCode($klass),
+ 'XAmzId2' => self::getAwsExceptionHeader($klass, 'x-amz-id-2'),
+ 'XAmzRequestId' => self::getAwsExceptionHeader(
+ $klass,
+ 'x-amz-request-id'
+ ),
+ 'XAmznRequestId' => self::getAwsExceptionHeader(
+ $klass,
+ 'x-amzn-RequestId'
+ ),
+ ];
+ }
+ if ($klass instanceof \Exception) {
+ return [
+ 'HttpStatusCode' => self::getExceptionHttpStatusCode($klass),
+ 'SdkException' => substr(
+ self::getExceptionCode($klass),
+ 0,
+ 128
+ ),
+ 'SdkExceptionMessage' => substr(
+ self::getExceptionMessage($klass),
+ 0,
+ 512
+ ),
+ 'XAmzId2' => self::getExceptionHeader($klass, 'x-amz-id-2'),
+ 'XAmzRequestId' => self::getExceptionHeader($klass, 'x-amz-request-id'),
+ 'XAmznRequestId' => self::getExceptionHeader($klass, 'x-amzn-RequestId'),
+ ];
+ }
+
+ throw new \InvalidArgumentException('Parameter must be an instance of ResultInterface, AwsException or Exception.');
+ }
+
+ private static function getResultAttemptLatency(ResultInterface $result)
+ {
+ if (isset($result['@metadata']['transferStats']['http'])) {
+ $attempt = end($result['@metadata']['transferStats']['http']);
+ if (isset($attempt['total_time'])) {
+ return (int) floor($attempt['total_time'] * 1000);
+ }
+ }
+ return null;
+ }
+
+ private static function getResultDestinationIp(ResultInterface $result)
+ {
+ if (isset($result['@metadata']['transferStats']['http'])) {
+ $attempt = end($result['@metadata']['transferStats']['http']);
+ if (isset($attempt['primary_ip'])) {
+ return $attempt['primary_ip'];
+ }
+ }
+ return null;
+ }
+
+ private static function getResultDnsLatency(ResultInterface $result)
+ {
+ if (isset($result['@metadata']['transferStats']['http'])) {
+ $attempt = end($result['@metadata']['transferStats']['http']);
+ if (isset($attempt['namelookup_time'])) {
+ return (int) floor($attempt['namelookup_time'] * 1000);
+ }
+ }
+ return null;
+ }
+
+ private static function getResultHttpStatusCode(ResultInterface $result)
+ {
+ return $result['@metadata']['statusCode'];
+ }
+
+ private static function getAwsExceptionAttemptLatency(AwsException $e) {
+ $attempt = $e->getTransferInfo();
+ if (isset($attempt['total_time'])) {
+ return (int) floor($attempt['total_time'] * 1000);
+ }
+ return null;
+ }
+
+ private static function getAwsExceptionErrorCode(AwsException $e) {
+ return $e->getAwsErrorCode();
+ }
+
+ private static function getAwsExceptionMessage(AwsException $e) {
+ return $e->getAwsErrorMessage();
+ }
+
+ private static function getAwsExceptionDestinationIp(AwsException $e) {
+ $attempt = $e->getTransferInfo();
+ if (isset($attempt['primary_ip'])) {
+ return $attempt['primary_ip'];
+ }
+ return null;
+ }
+
+ private static function getAwsExceptionDnsLatency(AwsException $e) {
+ $attempt = $e->getTransferInfo();
+ if (isset($attempt['namelookup_time'])) {
+ return (int) floor($attempt['namelookup_time'] * 1000);
+ }
+ return null;
+ }
+
+ private static function getAwsExceptionHttpStatusCode(AwsException $e) {
+ $response = $e->getResponse();
+ if ($response !== null) {
+ return $response->getStatusCode();
+ }
+ return null;
+ }
+
+ private static function getExceptionHttpStatusCode(\Exception $e) {
+ if ($e instanceof ResponseContainerInterface) {
+ $response = $e->getResponse();
+ if ($response instanceof ResponseInterface) {
+ return $response->getStatusCode();
+ }
+ }
+ return null;
+ }
+
+ private static function getExceptionCode(\Exception $e) {
+ if (!($e instanceof AwsException)) {
+ return get_class($e);
+ }
+ return null;
+ }
+
+ private static function getExceptionMessage(\Exception $e) {
+ if (!($e instanceof AwsException)) {
+ return $e->getMessage();
+ }
+ return null;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function populateRequestEventData(
+ CommandInterface $cmd,
+ RequestInterface $request,
+ array $event
+ ) {
+ $event = parent::populateRequestEventData($cmd, $request, $event);
+ $event['Type'] = 'ApiCallAttempt';
+ return $event;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function populateResultEventData(
+ $result,
+ array $event
+ ) {
+ $event = parent::populateResultEventData($result, $event);
+
+ $provider = $this->credentialProvider;
+ /** @var CredentialsInterface $credentials */
+ $credentials = $provider()->wait();
+ $event['AccessKey'] = $credentials->getAccessKeyId();
+ $sessionToken = $credentials->getSecurityToken();
+ if ($sessionToken !== null) {
+ $event['SessionToken'] = $sessionToken;
+ }
+ if (empty($event['AttemptLatency'])) {
+ $event['AttemptLatency'] = (int) (floor(microtime(true) * 1000) - $event['Timestamp']);
+ }
+ return $event;
+ }
+}