Skip to content

Commit

Permalink
Merge pull request #52 from amzn/http_client_core_invocation_reporting
Browse files Browse the repository at this point in the history
Add HTTPClientCoreInvocationReporting protocol
  • Loading branch information
tachyonics authored Mar 10, 2020
2 parents f6c7c76 + a335f3d commit 1e42bb8
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 12 deletions.
39 changes: 39 additions & 0 deletions Sources/SmokeHTTPClient/HTTPClientCoreInvocationReporting.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
// Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License").
// You may not use this file except in compliance with the License.
// A copy of the License is located at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// or in the "license" file accompanying this file. This file is distributed
// on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
// express or implied. See the License for the specific language governing
// permissions and limitations under the License.
//
// HTTPClientCoreInvocationReporting.swift
// SmokeHTTPClient
//

import Foundation
import Logging

/**
A context related to reporting on the invocation of the HTTPClient. This represents the
core requirements for invocation reporting.

The HTTPClientCoreInvocationReporting protocol can exposed by higher level clients that manage the
metrics requirements of the HTTPClientInvocationReporting protocol.
*/
public protocol HTTPClientCoreInvocationReporting {
associatedtype TraceContextType: InvocationTraceContext

/// The `Logging.Logger` to use for logging for this invocation.
var logger: Logging.Logger { get }

/// The internal Request Id associated with this invocation.
var internalRequestId: String { get }

/// The trace context associated with this invocation.
var traceContext: TraceContextType { get }
}
15 changes: 3 additions & 12 deletions Sources/SmokeHTTPClient/HTTPClientInvocationReporting.swift
Original file line number Diff line number Diff line change
Expand Up @@ -20,19 +20,10 @@ import Logging
import Metrics

/**
A context related to reporting on the invocation of the HTTPClient.
A context related to reporting on the invocation of the HTTPClient. This interface extends the
HTTPClientCoreInvocationReporting protocol by adding metrics emitted by the
*/
public protocol HTTPClientInvocationReporting {
associatedtype TraceContextType: InvocationTraceContext

/// The `Logging.Logger` to use for logging for this invocation.
var logger: Logging.Logger { get }

/// The internal Request Id associated with this invocation.
var internalRequestId: String { get }

/// The trace context associated with this invocation.
var traceContext: TraceContextType { get }
public protocol HTTPClientInvocationReporting: HTTPClientCoreInvocationReporting {

/// The `Metrics.Counter` to record the success of this invocation.
var successCounter: Metrics.Counter? { get }
Expand Down
39 changes: 39 additions & 0 deletions Sources/SmokeHTTPClient/MockCoreInvocationReporting.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
// Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License").
// You may not use this file except in compliance with the License.
// A copy of the License is located at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// or in the "license" file accompanying this file. This file is distributed
// on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
// express or implied. See the License for the specific language governing
// permissions and limitations under the License.
//
// MockCoreInvocationReporting.swift
// SmokeHTTPClient
//
import Foundation
import Logging

/**
A type conforming to the `HTTPClientCoreInvocationReporting` protocol, predominantly for testing.
*/
public struct MockCoreInvocationReporting: HTTPClientCoreInvocationReporting {
public let logger: Logger
public var internalRequestId: String
public var traceContext: MockInvocationTraceContext

public init(
logger: Logger = Logger(label: "com.amazon.SmokeHTTPClient.MockCoreInvocationReporting"),
internalRequestId: String = "internalRequestId",
traceContext: MockInvocationTraceContext = .init()) {
self.logger = logger
self.internalRequestId = internalRequestId
self.traceContext = traceContext
}
}



0 comments on commit 1e42bb8

Please sign in to comment.