From 55f0716bd80563edb21192578c9a6383af522ace Mon Sep 17 00:00:00 2001 From: Siemen Sikkema Date: Tue, 5 Mar 2019 15:10:05 +0100 Subject: [PATCH 1/4] Use container.client() instead of HTTPClient --- Sources/Bugsnag/BugsnagReporter.swift | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/Sources/Bugsnag/BugsnagReporter.swift b/Sources/Bugsnag/BugsnagReporter.swift index f02ac7c..724ff65 100644 --- a/Sources/Bugsnag/BugsnagReporter.swift +++ b/Sources/Bugsnag/BugsnagReporter.swift @@ -5,7 +5,7 @@ public struct BugsnagReporter: Service { private let config: BugsnagConfig private let headers: HTTPHeaders - private let hostName = "notify.bugsnag.com" + private let hostName = "https://notify.bugsnag.com" private let jsonEncoder = JSONEncoder() private let notifier = BugsnagNotifier( name: "nodes-vapor/bugsnag", @@ -13,20 +13,20 @@ public struct BugsnagReporter: Service { version: "3" ) private let payloadVersion = "4" - private let sendReport: (String, HTTPHeaders, Data, Container) -> Future + private let sendReport: (String, HTTPHeaders, Data, Container) throws -> Future public init( config: BugsnagConfig, - sendReport: ((String, HTTPHeaders, Data, Container) -> Future)? = nil + sendReport: ((String, HTTPHeaders, Data, Container) throws -> Future)? = nil ) { self.config = config self.sendReport = sendReport ?? { (hostName, headers, body, container) in - HTTPClient - .connect(hostname: hostName, on: container) - .flatMap(to: HTTPResponse.self) { client in - client.send(.init(method: .POST, headers: headers, body: body)) - } + try container + .client() + .post(hostName, headers: headers, beforeSend: { req in + req.http.body = .init(data: body) + }) } app = BugsnagApp( @@ -108,12 +108,12 @@ extension BugsnagReporter: ErrorReporter { ) ) - return self + return try self .sendReport(self.hostName, self.headers, body, container) .do { response in if self.config.debug { - print("Bugsnag response:") - print(response.status.code, response.status.reasonPhrase) + let status = response.http.status + print("Bugsnag response:\n", status.code, status.reasonPhrase) } } .transform(to: ()) From 554be82c593017cecbdb988cfbb42ac86e2ba18b Mon Sep 17 00:00:00 2001 From: Siemen Sikkema Date: Tue, 5 Mar 2019 15:10:26 +0100 Subject: [PATCH 2/4] Make report extensions public --- Sources/Bugsnag/ErrorReporter.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Sources/Bugsnag/ErrorReporter.swift b/Sources/Bugsnag/ErrorReporter.swift index cab18a8..236bbce 100644 --- a/Sources/Bugsnag/ErrorReporter.swift +++ b/Sources/Bugsnag/ErrorReporter.swift @@ -15,7 +15,7 @@ public protocol ErrorReporter { } extension ErrorReporter { - func report( + public func report( _ error: Error, severity: Severity = .error, userId: CustomStringConvertible? = nil, @@ -39,7 +39,7 @@ extension ErrorReporter { ) } - func report( + public func report( _ error: Error, severity: Severity = .error, userType: U.Type, From 6a1ed904c68e46fc40269752c8ceba53bcc80d58 Mon Sep 17 00:00:00 2001 From: Siemen Sikkema Date: Tue, 5 Mar 2019 16:39:26 +0100 Subject: [PATCH 3/4] Force explicit handling of report's return value --- Sources/Bugsnag/BugsnagReporter.swift | 1 - 1 file changed, 1 deletion(-) diff --git a/Sources/Bugsnag/BugsnagReporter.swift b/Sources/Bugsnag/BugsnagReporter.swift index 724ff65..6031374 100644 --- a/Sources/Bugsnag/BugsnagReporter.swift +++ b/Sources/Bugsnag/BugsnagReporter.swift @@ -77,7 +77,6 @@ extension BugsnagReporter: ErrorReporter { return try jsonEncoder.encode(payload) } - @discardableResult public func report( _ error: Error, severity: Severity = .error, From e016914b94478454fdf2fc7efcdda1b7826cee63 Mon Sep 17 00:00:00 2001 From: Siemen Sikkema Date: Wed, 6 Mar 2019 15:57:16 +0100 Subject: [PATCH 4/4] Fix tests --- Tests/BugsnagTests/BugsnagTests.swift | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Tests/BugsnagTests/BugsnagTests.swift b/Tests/BugsnagTests/BugsnagTests.swift index 2d16f3c..1ce34ba 100644 --- a/Tests/BugsnagTests/BugsnagTests.swift +++ b/Tests/BugsnagTests/BugsnagTests.swift @@ -115,20 +115,21 @@ final class BugsnagTests: XCTestCase { config: .init(apiKey: "apiKey", releaseStage: "test"), sendReport: { host, headers, data, container in capturedSendReportParameters = (host, headers, data, container) - return container.future(HTTPResponse(status: .ok)) + return container.future(Response(http: HTTPResponse(status: .ok), using: container)) }) let application = try Application.test() let request = Request(using: application) request.breadcrumb(name: "a", type: .log) - reporter.report(NotFound(), severity: .info, userId: 1, metadata: ["a": "b"], on: request) + _ = reporter + .report(NotFound(), severity: .info, userId: 1, metadata: ["a": "b"], on: request) guard let params = capturedSendReportParameters else { XCTFail() return } - XCTAssertEqual(params.host, "notify.bugsnag.com") + XCTAssertEqual(params.host, "https://notify.bugsnag.com") XCTAssertEqual(params.headers["Content-Type"].first, "application/json") XCTAssertEqual(params.headers["Bugsnag-Api-Key"].first, "apiKey") XCTAssertEqual(params.headers["Bugsnag-Payload-Version"].first, "4") @@ -145,9 +146,9 @@ final class BugsnagTests: XCTestCase { func testReportingCanBeDisabled() throws { let reporter = BugsnagReporter( config: .init(apiKey: "apiKey", releaseStage: "test", shouldReport: false), - sendReport: { host, headers, data, request in + sendReport: { host, headers, data, container in XCTFail("No error should be reported") - return request.future(HTTPResponse(status: .ok)) + return container.future(Response(http: HTTPResponse(status: .ok), using: container)) }) let application = try Application.test()