Skip to content

Commit

Permalink
Merge pull request #2 from gotranseo/vapor4
Browse files Browse the repository at this point in the history
Vapor4
  • Loading branch information
jdmcd authored Apr 22, 2020
2 parents e97d845 + f4b2d35 commit 64876c0
Show file tree
Hide file tree
Showing 6 changed files with 45 additions and 52 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,5 @@ bower_components/
.swift-version
CMakeLists.txt
Package.pins

.swiftpm
13 changes: 8 additions & 5 deletions Package.swift
Original file line number Diff line number Diff line change
@@ -1,17 +1,20 @@
// swift-tools-version:4.0

// swift-tools-version:5.2
import PackageDescription

let package = Package(
name: "Bugsnag",
platforms: [
.macOS(.v10_15)
],
products: [
.library(name: "Bugsnag", targets: ["Bugsnag"]),
],
dependencies: [
.package(url: "https://github.com/vapor/vapor.git", from: "3.0.0")
.package(url: "https://github.com/vapor/vapor.git", from: "4.0.0")
],
targets: [
.target(name: "Bugsnag", dependencies: ["Vapor"]),
.testTarget(name: "BugsnagTests", dependencies: ["Bugsnag"])
.target(name: "Bugsnag", dependencies: [
.product(name: "Vapor", package: "vapor"),
]),
]
)
7 changes: 3 additions & 4 deletions Sources/Bugsnag/ConnectionManager.swift
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import Vapor
import HTTP
import Foundation

public final class ConnectionManager {
Expand All @@ -11,9 +10,9 @@ public final class ConnectionManager {
self.client = client
}

public func submitPayload<C: Content>(_ content: C) throws -> Future<Response> {
return client.post(url, beforeSend: { req in
public func submitPayload<C: Content>(_ content: C) throws -> EventLoopFuture<ClientResponse> {
return client.post(URI(string: url), headers: [:]) { req in
try req.content.encode(content, as: .json)
})
}
}
}
24 changes: 14 additions & 10 deletions Sources/Bugsnag/PayloadTransformer.swift
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import Vapor
import HTTP

public protocol PayloadTransformerType {
var environment: Environment { get }
Expand All @@ -19,12 +18,17 @@ public protocol PayloadTransformerType {
) throws -> BugsnagPayload
}

internal struct PayloadTransformer: PayloadTransformerType {
public struct PayloadTransformer: PayloadTransformerType {

let environment: Environment
let apiKey: String
public let environment: Environment
public let apiKey: String

internal func payloadFor(
public init(environment: Environment, apiKey: String) {
self.environment = environment
self.apiKey = apiKey
}

public func payloadFor(
message: String,
request: Request?,
severity: Severity,
Expand All @@ -43,21 +47,21 @@ internal struct PayloadTransformer: PayloadTransformerType {
method: funcName ?? "")

let exception = BugsnagPayload.Event.Exception(errorClass: message, message: message, stacktrace: [stacktrace])
let metadata = BugsnagPayload.Event.Metadata(url: request?.http.urlString ?? "")
let metadata = BugsnagPayload.Event.Metadata(url: request?.url.string ?? "")
let app = BugsnagPayload.Event.App(releaseStage: environment.name, type: "Vapor", version: version)

var headersDict = [String: String]()

if let req = request {
for header in req.http.headers {
for header in req.headers {
headersDict[header.name] = header.value
}
}

let requestContent = BugsnagPayload.Event.Request(clientIp: request?.http.remotePeer.hostname,
let requestContent = BugsnagPayload.Event.Request(clientIp: request?.remoteAddress?.hostname,
headers: headersDict,
httpMethod: request?.http.method.string,
url: request?.http.url.path)
httpMethod: request?.method.string,
url: request?.url.path)

let event = BugsnagPayload.Event(payloadVersion: 2,
exceptions: [exception],
Expand Down
44 changes: 15 additions & 29 deletions Sources/Bugsnag/Provider.swift
Original file line number Diff line number Diff line change
@@ -1,37 +1,23 @@
import Vapor

public final class BugsnagProvider: Vapor.Provider {
extension Application {

public static var repositoryName = "bugsnag"

let environment: Environment
let notifyReleaseStages: [Environment]?
let apiKey: String

public init(environment: Environment, notifyReleaseStages: [Environment]?, apiKey: String) {
self.environment = environment
self.notifyReleaseStages = notifyReleaseStages
self.apiKey = apiKey
// MARK: - API
struct BugsnagStorageKey: StorageKey {
typealias Value = Bugsnag
}

public func register(_ services: inout Services) throws {
services.register(Bugsnag.self) { container -> Bugsnag in
let payloadTransformer = PayloadTransformer(environment: self.environment, apiKey: self.apiKey)
let client = try container.make(Client.self)
let connectionManager = ConnectionManager(url: "https://notify.bugsnag.com", client: client)

let bugsnag = Bugsnag(environment: self.environment,
notifyReleaseStages: self.notifyReleaseStages,
connectionManager: connectionManager,
transformer: payloadTransformer)

return bugsnag
public var bugsnag: Bugsnag {
get {
guard let val = self.storage[BugsnagStorageKey.self] else { fatalError() }
return val
}
set {
self.storage[BugsnagStorageKey.self] = newValue
}
}

public func didBoot(_ container: Container) throws -> EventLoopFuture<Void> {
return .done(on: container)
}

public func boot(_ worker: Container) throws { }
}

extension Request {
var bugsnag: Bugsnag { self.application.bugsnag }
}
7 changes: 3 additions & 4 deletions Sources/Bugsnag/Reporter.swift
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import Vapor
import HTTP

public protocol ReporterType {
func report(error: Error, request: Request, userId: String?, userName: String?, userEmail: String?, lineNumber: Int?, funcName: String?, fileName: String?, version: String?) throws
Expand All @@ -25,7 +24,7 @@ public enum Severity: String {
case error, warning, info
}

public final class Bugsnag: ReporterType, Service {
public final class Bugsnag: ReporterType {
public func report(error: Error, request: Request, userId: String?, userName: String?, userEmail: String?, lineNumber: Int?, funcName: String?, fileName: String?, version: String?) throws {
report(error: error, request: request, severity: .error, userId: userId, userName: userName, userEmail: userEmail, lineNumber: lineNumber, funcName: funcName, fileName: fileName, version: version, completion: nil)
}
Expand All @@ -36,7 +35,7 @@ public final class Bugsnag: ReporterType, Service {
let connectionManager: ConnectionManager
let payloadTransformer: PayloadTransformerType

init(
public init(
environment: Environment,
notifyReleaseStages: [Environment]? = [],
connectionManager: ConnectionManager,
Expand Down Expand Up @@ -131,7 +130,7 @@ public final class Bugsnag: ReporterType, Service {
)

if let payload = payload {
_ = try? self.connectionManager.submitPayload(payload).map(to: Void.self) { _ in
_ = try? self.connectionManager.submitPayload(payload).map { _ -> Void in
if let complete = complete { complete() }
return ()
}
Expand Down

0 comments on commit 64876c0

Please sign in to comment.