Browse Source

Vapor 3 (#3683)

* Vapor 3

* Linux random() fix

* New target for non-Fluent tests

* Use req as DatabaseConnectable

* Fixed JSON typo

* random fix

* Added new dockerfile

* Remove old import

* Added missing (and required) Middlewares

* Use 0.0.0.0 instead of localhost

* Change hostname in mysql target also 🤪

* Dockerfile fixes (remove old flags)

* Remove legacy/unused code

* Updated packages

* Use Vapor's ducker images

* Route fixes, updated readme

* Revert "Use Vapor's ducker images"

This reverts commit a6bdeef910c0ca6dee35216fd925266a82390220.

* Use IN instead of multiple requests

* Use append instead of insert(_, at: 0)

* Refactor query

* Update to 3.0.0

* Use transactions (awaiting for PR merge)

* param decoding fixes

* Removed mysql source data for the time being

* Trimmed fat

* Added Server-MW

* perf

* Removed toolbox from dockerfile

* Removed legacy file

* fix

* Updated deps

* Fixed json test & middlewares comment
Nathan 7 years ago
parent
commit
f0f2d1aac2
45 changed files with 241 additions and 1187 deletions
  1. 17 0
      frameworks/Swift/.gitignore
  2. 0 2
      frameworks/Swift/vapor/Config/app.json
  3. 0 7
      frameworks/Swift/vapor/Config/clients.json
  4. 0 13
      frameworks/Swift/vapor/Config/crypto.json
  5. 0 14
      frameworks/Swift/vapor/Config/droplet.json
  6. 0 30
      frameworks/Swift/vapor/Config/fluent.json
  7. 0 2
      frameworks/Swift/vapor/Config/production/app.json
  8. 0 3
      frameworks/Swift/vapor/Config/secrets/mongo.json
  9. 0 3
      frameworks/Swift/vapor/Config/secrets/mysql.json
  10. 0 3
      frameworks/Swift/vapor/Config/secrets/postgresql.json
  11. 0 12
      frameworks/Swift/vapor/Config/server.json
  12. 160 0
      frameworks/Swift/vapor/Package.resolved
  13. 4 16
      frameworks/Swift/vapor/Package.swift
  14. 16 17
      frameworks/Swift/vapor/README.md
  15. 0 10
      frameworks/Swift/vapor/Resources/Views/fortune.leaf
  16. 0 19
      frameworks/Swift/vapor/Sources/TfbCommon/ContentMiddleware.swift
  17. 0 21
      frameworks/Swift/vapor/Sources/TfbCommon/Message.swift
  18. 0 21
      frameworks/Swift/vapor/Sources/TfbCommon/Request.swift
  19. 0 15
      frameworks/Swift/vapor/Sources/TfbCommon/ServerMiddleware.swift
  20. 0 10
      frameworks/Swift/vapor/Sources/TfbCommon/World.swift
  21. 0 30
      frameworks/Swift/vapor/Sources/vapor-tfb-mongodb/Config+Setup.swift
  22. 0 10
      frameworks/Swift/vapor/Sources/vapor-tfb-mongodb/Droplet+Setup.swift
  23. 0 82
      frameworks/Swift/vapor/Sources/vapor-tfb-mongodb/Models/Fortune.swift
  24. 0 77
      frameworks/Swift/vapor/Sources/vapor-tfb-mongodb/Models/World.swift
  25. 0 78
      frameworks/Swift/vapor/Sources/vapor-tfb-mongodb/Routes.swift
  26. 0 25
      frameworks/Swift/vapor/Sources/vapor-tfb-mongodb/main.swift
  27. 0 30
      frameworks/Swift/vapor/Sources/vapor-tfb-mysql/Config+Setup.swift
  28. 0 10
      frameworks/Swift/vapor/Sources/vapor-tfb-mysql/Droplet+Setup.swift
  29. 0 78
      frameworks/Swift/vapor/Sources/vapor-tfb-mysql/Models/Fortune.swift
  30. 0 79
      frameworks/Swift/vapor/Sources/vapor-tfb-mysql/Models/World.swift
  31. 0 73
      frameworks/Swift/vapor/Sources/vapor-tfb-mysql/Routes.swift
  32. 0 25
      frameworks/Swift/vapor/Sources/vapor-tfb-mysql/main.swift
  33. 0 30
      frameworks/Swift/vapor/Sources/vapor-tfb-postgresql/Config+Setup.swift
  34. 0 10
      frameworks/Swift/vapor/Sources/vapor-tfb-postgresql/Droplet+Setup.swift
  35. 0 74
      frameworks/Swift/vapor/Sources/vapor-tfb-postgresql/Models/Fortune.swift
  36. 0 74
      frameworks/Swift/vapor/Sources/vapor-tfb-postgresql/Models/World.swift
  37. 0 72
      frameworks/Swift/vapor/Sources/vapor-tfb-postgresql/Routes.swift
  38. 0 25
      frameworks/Swift/vapor/Sources/vapor-tfb-postgresql/main.swift
  39. 5 0
      frameworks/Swift/vapor/Sources/vapor-tfb/Message.swift
  40. 35 0
      frameworks/Swift/vapor/Sources/vapor-tfb/main.swift
  41. 0 12
      frameworks/Swift/vapor/app.json
  42. 2 50
      frameworks/Swift/vapor/benchmark_config.json
  43. 0 10
      frameworks/Swift/vapor/vapor-mongodb.dockerfile
  44. 0 10
      frameworks/Swift/vapor/vapor-postgresql.dockerfile
  45. 2 5
      frameworks/Swift/vapor/vapor.dockerfile

+ 17 - 0
frameworks/Swift/.gitignore

@@ -0,0 +1,17 @@
+
+# Created by https://www.gitignore.io/api/vapor
+
+### Vapor ###
+Config/secrets
+
+### Vapor Patch ###
+Packages
+.build
+xcuserdata
+*.xcodeproj
+DerivedData/
+.DS_Store
+
+# End of https://www.gitignore.io/api/vapor
+
+.idea/

+ 0 - 2
frameworks/Swift/vapor/Config/app.json

@@ -1,2 +0,0 @@
-{
-}

+ 0 - 7
frameworks/Swift/vapor/Config/clients.json

@@ -1,7 +0,0 @@
-{
-  "tls": {
-    "verifyHost": true,
-    "verifyCertificates": true,
-    "certificates": "defaults"
-  }
-}

+ 0 - 13
frameworks/Swift/vapor/Config/crypto.json

@@ -1,13 +0,0 @@
-{
-    "hash": {
-        "method": "sha256",
-        "encoding": "hex",
-        "key": "RyVibi7v2YKv87LCSlnUi8vYZrCMFPVIz82XrJtnpeM="
-    },
-
-    "cipher": {
-        "method": "aes256",
-        "encoding": "base64",
-        "key": "gIW4/8F6uQcKioBXiJfK3N6bGeVYs7Znf9Njtzs6jeQ="
-    }
-}

+ 0 - 14
frameworks/Swift/vapor/Config/droplet.json

@@ -1,14 +0,0 @@
-{
-    "server": "engine",
-    "client": "engine",
-    "console": "terminal",
-    "log": "console",
-    "hash": "crypto",
-    "cipher": "crypto",
-    "middleware": [
-        "date",
-        "server",
-        "content-header"
-    ],
-    "view": "leaf",
-}

+ 0 - 30
frameworks/Swift/vapor/Config/fluent.json

@@ -1,30 +0,0 @@
-{
-    "//": "The underlying database technology to use.",
-    "//": "memory: SQLite in-memory DB.",
-    "//": "sqlite: Persisted SQLite DB (configure with sqlite.json)",
-    "//": "Other drivers are available through Vapor providers",
-    "//": "https://github.com/search?q=topic:vapor-provider+topic:database",
-    "driver": "memory",
-    
-    "//": "Naming convention to use for creating foreign id keys,",
-    "//": "e.g., `user_id`",
-    "//": "`camelCase` option is also available.",
-    "keyNamingConvention": "snake_case",
-    
-    "//": "Name of the table Fluent uses to track migrations",
-    "migrationEntityName": null,
-    
-    "//": "Character used to join pivot tables, e.g., `user_pet`",
-    "pivotNameConnector": "_",
-    
-    "//": "If true, foreign keys will automatically be added",
-    "//": "to any `builder.foreignId(...)` calls.",
-    "autoForeignKeys": true,
-    
-    "//": "Key to specify page number for paginated responses",
-    "//": "e.g., `?page=2` ",
-    "defaultPageKey": "page",
-    
-    "//": "Default page size if not otherwise specified on models",
-    "defaultPageSize": 10
-}

+ 0 - 2
frameworks/Swift/vapor/Config/production/app.json

@@ -1,2 +0,0 @@
-{
-}

+ 0 - 3
frameworks/Swift/vapor/Config/secrets/mongo.json

@@ -1,3 +0,0 @@
-{
-    "url": "mongodb://tfb-database:27017/hello_world"
-}

+ 0 - 3
frameworks/Swift/vapor/Config/secrets/mysql.json

@@ -1,3 +0,0 @@
-{
-  "url": "mysql://benchmarkdbuser:benchmarkdbpass@tfb-database:3306/hello_world"
-}

+ 0 - 3
frameworks/Swift/vapor/Config/secrets/postgresql.json

@@ -1,3 +0,0 @@
-{
-  "url": "psql://benchmarkdbuser:benchmarkdbpass@tfb-database:5432/hello_world"
-}

+ 0 - 12
frameworks/Swift/vapor/Config/server.json

@@ -1,12 +0,0 @@
-{
-    "//": "The $PORT:8080 call tells the json file to see if there",
-    "//": "is any value at the 'PORT' environment variable.",
-    "//": "If there is no value there, it will fallback to '8080'",
-    "port": "$PORT:8080",
-    
-    "host": "0.0.0.0",
-    
-    "//": "It's very rare that a server manages its own TLS.",
-    "//": "More commonly, vapor is served behind a proxy like nginx.",
-    "securityLayer": "none"
-}

+ 160 - 0
frameworks/Swift/vapor/Package.resolved

@@ -0,0 +1,160 @@
+{
+  "object": {
+    "pins": [
+      {
+        "package": "Console",
+        "repositoryURL": "https://github.com/vapor/console.git",
+        "state": {
+          "branch": null,
+          "revision": "5b9796d39f201b3dd06800437abd9d774a455e57",
+          "version": "3.0.2"
+        }
+      },
+      {
+        "package": "Core",
+        "repositoryURL": "https://github.com/vapor/core.git",
+        "state": {
+          "branch": null,
+          "revision": "efe79e4f59445b661ba7e6511c2a0b80645c2e72",
+          "version": "3.1.6"
+        }
+      },
+      {
+        "package": "Crypto",
+        "repositoryURL": "https://github.com/vapor/crypto.git",
+        "state": {
+          "branch": null,
+          "revision": "1b8c2ba5a42f1adf2aa812204678d8b16466fa59",
+          "version": "3.1.2"
+        }
+      },
+      {
+        "package": "DatabaseKit",
+        "repositoryURL": "https://github.com/vapor/database-kit.git",
+        "state": {
+          "branch": null,
+          "revision": "0db303439e5ef8b6df50a2b6c4029edddee90cb0",
+          "version": "1.0.1"
+        }
+      },
+      {
+        "package": "HTTP",
+        "repositoryURL": "https://github.com/vapor/http.git",
+        "state": {
+          "branch": null,
+          "revision": "9246340ae4c5310627099349fc74785267b55607",
+          "version": "3.0.5"
+        }
+      },
+      {
+        "package": "Multipart",
+        "repositoryURL": "https://github.com/vapor/multipart.git",
+        "state": {
+          "branch": null,
+          "revision": "7778dcb62f3efa845e8e2808937bb347575ba7ce",
+          "version": "3.0.1"
+        }
+      },
+      {
+        "package": "Routing",
+        "repositoryURL": "https://github.com/vapor/routing.git",
+        "state": {
+          "branch": null,
+          "revision": "3219e328491b0853b8554c5a694add344d2c6cfb",
+          "version": "3.0.1"
+        }
+      },
+      {
+        "package": "Service",
+        "repositoryURL": "https://github.com/vapor/service.git",
+        "state": {
+          "branch": null,
+          "revision": "281a70b69783891900be31a9e70051b6fe19e146",
+          "version": "1.0.0"
+        }
+      },
+      {
+        "package": "swift-nio",
+        "repositoryURL": "https://github.com/apple/swift-nio.git",
+        "state": {
+          "branch": null,
+          "revision": "a5db2a67515ad2b490ac5646db204a5edf939f47",
+          "version": "1.6.1"
+        }
+      },
+      {
+        "package": "swift-nio-ssl",
+        "repositoryURL": "https://github.com/apple/swift-nio-ssl.git",
+        "state": {
+          "branch": null,
+          "revision": "38955a5f806a952daf2b16fbfe9aa529749cf1dd",
+          "version": "1.1.0"
+        }
+      },
+      {
+        "package": "swift-nio-ssl-support",
+        "repositoryURL": "https://github.com/apple/swift-nio-ssl-support.git",
+        "state": {
+          "branch": null,
+          "revision": "c02eec4e0e6d351cd092938cf44195a8e669f555",
+          "version": "1.0.0"
+        }
+      },
+      {
+        "package": "swift-nio-zlib-support",
+        "repositoryURL": "https://github.com/apple/swift-nio-zlib-support.git",
+        "state": {
+          "branch": null,
+          "revision": "37760e9a52030bb9011972c5213c3350fa9d41fd",
+          "version": "1.0.0"
+        }
+      },
+      {
+        "package": "TemplateKit",
+        "repositoryURL": "https://github.com/vapor/template-kit.git",
+        "state": {
+          "branch": null,
+          "revision": "43b57b5861d5181b906ac6411d28645e980bb638",
+          "version": "1.0.1"
+        }
+      },
+      {
+        "package": "URLEncodedForm",
+        "repositoryURL": "https://github.com/vapor/url-encoded-form.git",
+        "state": {
+          "branch": null,
+          "revision": "8448fa943057c01220f6a940d3b1b8e9fd92a96e",
+          "version": "1.0.2"
+        }
+      },
+      {
+        "package": "Validation",
+        "repositoryURL": "https://github.com/vapor/validation.git",
+        "state": {
+          "branch": null,
+          "revision": "ab6c5a352d97c8687b91ed4963aef8e7cfe0795b",
+          "version": "2.0.0"
+        }
+      },
+      {
+        "package": "Vapor",
+        "repositoryURL": "https://github.com/vapor/vapor.git",
+        "state": {
+          "branch": null,
+          "revision": "821184be792dfa144a82fe379784e04eb9dad1eb",
+          "version": "3.0.1"
+        }
+      },
+      {
+        "package": "WebSocket",
+        "repositoryURL": "https://github.com/vapor/websocket.git",
+        "state": {
+          "branch": null,
+          "revision": "23acd21aa37a200faa2f5d5525c974efa6b5676c",
+          "version": "1.0.0"
+        }
+      }
+    ]
+  },
+  "version": 1
+}

+ 4 - 16
frameworks/Swift/vapor/Package.swift

@@ -1,24 +1,12 @@
+// swift-tools-version:4.0
 import PackageDescription
 import PackageDescription
 
 
 let package = Package(
 let package = Package(
   name: "tfb",
   name: "tfb",
-  targets: [
-    Target(name: "vapor-tfb-mysql", dependencies: ["TfbCommon"]),
-    Target(name: "vapor-tfb-postgresql", dependencies: ["TfbCommon"]),
-    Target(name: "vapor-tfb-mongodb", dependencies: ["TfbCommon"])
-  ],
   dependencies: [
   dependencies: [
-    .Package(url: "https://github.com/vapor/vapor.git", "2.4.4"),
-    .Package(url: "https://github.com/vapor/postgresql-provider.git", majorVersion:2),
-    .Package(url: "https://github.com/vapor/mysql-provider.git", majorVersion: 2),
-    .Package(url: "https://github.com/vapor/mongo-provider.git", majorVersion: 2),
-    .Package(url: "https://github.com/vapor/leaf-provider.git", majorVersion: 1)
+    .package(url: "https://github.com/vapor/vapor.git", from: "3.0.0"),
   ],
   ],
-  exclude: [
-    "Config",
-    "Database",
-    "Localization",
-    "Public",
-    "Resources",
+  targets: [
+    .target(name: "vapor-tfb", dependencies: ["Vapor"], exclude: ["Resources"]),
   ]
   ]
 )
 )

+ 16 - 17
frameworks/Swift/vapor/README.md

@@ -4,41 +4,40 @@ This is the Vapor portion of a [benchmarking tests suite](../../) comparing a va
 
 
 ### Targets
 ### Targets
 
 
-Three executable targets. Each listens on port 8080. All handle same URLs.  
-`vapor-tfb-mysql` is for MySQL  
-`vapor-tfb-postgresql` is for PostgreSQL  
-`vapor-tfb-mongodb` is for MongoDB
+Two executable targets. Each listens on port 8080.
+`vapor-tfb` is for a bare server, (neither Fluent nor Leaf are dependencies)
+`vapor-tfb-mysql` is for MySQL
 
 
 ### Dependencies
 ### Dependencies
 
 
-Linked MySQL and PostgreSQL client libraries are required to build the app, please consult Vapor's documentation [for MySQL](https://github.com/vapor/mysql), [for PostgreSQL](https://github.com/vapor/postgresql).
+Linked MySQL client libraries are required to build the app, please consult Vapor's documentation [for MySQL](https://github.com/vapor/mysql).
 
 
 ### Database
 ### Database
 
 
-MySQL  
-PostgreSQL  
-MongoDB
+MySQL
 
 
 ## Versions
 ## Versions
-[Swift 3.0.2](http://swift.org/)
-[Vapor 1.5](https://vapor.codes/)
+[Swift 4.1.0](https://swift.org/)
+[Vapor 3.0.0 gm](https://vapor.codes/)
 
 
-## Test URLs
+## Test URLs: `vapor-tfb`
 
 
-### JSON serialization test
+### Plaintext test
+http://localhost:8080/plaintext
+
+#### JSON serialization test
 http://localhost:8080/json
 http://localhost:8080/json
 
 
+## Test URLs: `vapor-tfb-mysql`
+
 ### Single database query test
 ### Single database query test
 http://localhost:8080/db
 http://localhost:8080/db
 
 
 ### Multiple database queries test
 ### Multiple database queries test
-http://localhost:8080/queries?queries=[1...500]
+http://localhost:8080/queries/[1...500]
 
 
 ### Fortunes test
 ### Fortunes test
 http://localhost:8080/fortunes
 http://localhost:8080/fortunes
 
 
 ### Database updates test
 ### Database updates test
-http://localhost:8080/updates?queries=[1...500]
-
-### Plaintext test
-http://localhost:8080/plaintext
+http://localhost:8080/updates/[1...500]

+ 0 - 10
frameworks/Swift/vapor/Resources/Views/fortune.leaf

@@ -1,10 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head><title>Fortunes</title></head>
-<body>
-<table>
-<tr><th>id</th><th>message</th></tr>
-#loop(fortunes, "fortune") { <tr><td>#(fortune.id)</td><td>#(fortune.message)</td></tr> }
-</table>
-</body>
-</html>

+ 0 - 19
frameworks/Swift/vapor/Sources/TfbCommon/ContentMiddleware.swift

@@ -1,19 +0,0 @@
-import HTTP
-
-/// Middleware that adds `Server` HTTP header to response.
-public final class ContentMiddleware: Middleware {
-    
-    public init() { }
-    
-    public func respond(to request: Request, chainingTo next: Responder) throws -> Response {
-        let response = try next.respond(to: request)
-
-        if response.headers[HeaderKey.contentType] == "text/plain; charset=utf-8" {
-            response.headers[HeaderKey.contentType] = "text/plain"
-        } else if response.headers[HeaderKey.contentType] == "application/json; charset=utf-8" {
-            response.headers[HeaderKey.contentType] = "application/json"
-        }
-        
-        return response
-    } 
-}

+ 0 - 21
frameworks/Swift/vapor/Sources/TfbCommon/Message.swift

@@ -1,21 +0,0 @@
-import Node
-
-public struct Message {
-    public let message: String
-
-    public init(_ message: String) {
-        self.message = message
-    }
-}
-
-extension Message: NodeConvertible {
-    public init(node: Node) throws {
-        message = try node.get("message")
-    }
-
-    public func makeNode(in context: Context?) throws -> Node {
-        return try Node(node: [
-            "message": message
-            ])
-    }
-}

+ 0 - 21
frameworks/Swift/vapor/Sources/TfbCommon/Request.swift

@@ -1,21 +0,0 @@
-import Vapor
-import HTTP
-
-public let validQueriesRange: ClosedRange<Int> = 1...500
-
-/// Tests 3 and 5 are parameterized with `queries`.
-///
-/// The queries parameter must be bounded to between 1 and 500.
-/// If the parameter is missing, is not an integer, or is an integer less than 1,
-/// the value should be interpreted as 1; if greater than 500, the value should be interpreted as 500.
-///
-/// - Parameter request: HTTP request
-/// - Returns: queries
-public func queriesParam(for request: Request) -> Int {
-  let queriesParam = request.query?["queries"]?.int ?? 1
-  return clamp(queriesParam, to: validQueriesRange)
-}
-
-func clamp(_ value: Int, to: ClosedRange<Int>) -> Int {
-  return max(to.lowerBound, min(to.upperBound, value))
-}

+ 0 - 15
frameworks/Swift/vapor/Sources/TfbCommon/ServerMiddleware.swift

@@ -1,15 +0,0 @@
-import HTTP
-
-/// Middleware that adds `Server` HTTP header to response.
-public final class ServerMiddleware: Middleware {
-    
-    public init() { }
-    
-    public func respond(to request: Request, chainingTo next: Responder) throws -> Response {
-        let response = try next.respond(to: request)
-        
-        response.headers["Server"] = "Vapor"
-        
-        return response
-    } 
-}

+ 0 - 10
frameworks/Swift/vapor/Sources/TfbCommon/World.swift

@@ -1,10 +0,0 @@
-import Crypto
-
-public struct WorldMeta {
-  private init() { }
-
-  public static let maxId: UInt32 = 10000
-  public static let randomId = { () -> UInt32 in UInt32(1) + (try! Random.makeUInt32()) % maxId }
-  public static let maxRandomNumber: Int32 = 10000
-  public static let randomRandomNumber = { () -> Int32 in Int32(1) + abs(try! Random.makeInt32()) % maxRandomNumber }
-}

+ 0 - 30
frameworks/Swift/vapor/Sources/vapor-tfb-mongodb/Config+Setup.swift

@@ -1,30 +0,0 @@
-import MongoProvider
-import TfbCommon
-import LeafProvider
-
-extension Config {
-    public func setup() throws {
-        // allow fuzzy conversions for these types
-        // (add your own types here)
-        Node.fuzzy = [Row.self, JSON.self, Node.self]
-
-        try setupProviders()
-        try setupPreparations()
-        
-        self.addConfigurable(middleware: ServerMiddleware(), name: "server")
-        self.addConfigurable(middleware: ContentMiddleware(), name: "content-header")
-    }
-    
-    /// Configure providers
-    private func setupProviders() throws {
-        try addProvider(MongoProvider.Provider.self)
-        try addProvider(LeafProvider.Provider.self)
-    }
-    
-    /// Add all models that should have their
-    /// schemas prepared before the app boots
-    private func setupPreparations() throws {
-        preparations.append(Fortune.self)
-        preparations.append(World.self)
-    }
-}

+ 0 - 10
frameworks/Swift/vapor/Sources/vapor-tfb-mongodb/Droplet+Setup.swift

@@ -1,10 +0,0 @@
-@_exported import Vapor
-
-extension Droplet {
-    public func setup() throws {
-        try collection(Routes.self)
-
-        Fortune.database = try drop.assertDatabase()
-        World.database = try drop.assertDatabase()
-    }
-}

+ 0 - 82
frameworks/Swift/vapor/Sources/vapor-tfb-mongodb/Models/Fortune.swift

@@ -1,82 +0,0 @@
-import Vapor
-import FluentProvider
-
-final class Fortune: Model {
-    static let entity = "fortune"
-
-    var storage: Storage = Storage()
-    var mongoId: Node?
-    var id: Node?
-    var message: String
-
-    static var idKey = "_id"
-
-    // For internal Vapor use
-    var exists: Bool = false
-
-    init(id: Int, message: String) {
-        self.id = Node(id)
-        self.message = message
-    }
-
-    init(node: Node, in context: Context) throws {
-        id = try node.get("_id")
-        mongoId = try node.get("id")
-        message = try node.get("message")
-    }
-
-    /// Initializes the Fortune from the
-    /// database row
-    init(row: Row) throws {
-        mongoId = try row.get("id")
-        id = try row.get("_id")
-        message  = try row.get("message")
-    }
-
-    // Serializes the Fortune to the database
-    func makeRow() throws -> Row {
-        var row = Row()
-
-        try row.set("id", mongoId!)
-        try row.set("_id", id!)
-        try row.set("message", message)
-
-        return row
-    }
-
-    func makeNode(context: Context) throws -> Node {
-        return try Node(node: [
-            "id": mongoId!,
-            "_id": id!,
-            "message": message
-            ])
-    }
-
-    func makeJSONNode() throws -> Node {
-        return try Node(node: [
-            "id": id!.int!,
-            "message": message
-            ])
-    }
-
-    func makeJSON() throws -> JSON {
-        let node = try makeJSONNode()
-        return JSON(node: node)
-    }
-}
-
-
-
-// MARK: Fluent Preparation
-
-extension Fortune: Preparation {
-    /// Prepares a table/collection in the database
-    /// for storing Fortunes
-    static func prepare(_ database: Database) throws {
-
-    }
-
-    /// Undoes what was done in `prepare`
-    static func revert(_ database: Database) throws {
-    }
-}

+ 0 - 77
frameworks/Swift/vapor/Sources/vapor-tfb-mongodb/Models/World.swift

@@ -1,77 +0,0 @@
-import Vapor
-import FluentProvider
-
-final class World: Model {
-    static let entity = "world"
-    
-    let storage = Storage()
-
-    /// The content of the world
-    var mongoId: Node?
-    var id: Node?
-    var randomNumber: Int32
-
-    /// Creates a new World
-    init(_id: Node, mongoId: Node, randomNumber: Int32) {
-        self.id = _id
-        self.mongoId = mongoId
-        self.randomNumber = randomNumber
-    }
-
-    // MARK: Fluent Serialization
-
-    /// Initializes the World from the
-    /// database row
-    init(row: Row) throws {
-        mongoId = try row.get("id")
-        id = try row.get("_id")
-        randomNumber  = try row.get("randomNumber")
-    }
-
-    // Serializes the World to the database
-    func makeRow() throws -> Row {
-        var row = Row()
-
-        try row.set("id", mongoId)
-//        try row.set("_id", id)
-        try row.set("randomNumber", randomNumber)
-
-        return row
-    }
-}
-
-// MARK: Fluent Preparation
-
-extension World: Preparation {
-    /// Prepares a table/collection in the database
-    /// for storing Worlds
-    static func prepare(_ database: Database) throws {
-    }
-
-    /// Undoes what was done in `prepare`
-    static func revert(_ database: Database) throws {
-    }
-}
-
-// MARK: JSON
-extension World: JSONConvertible {
-    convenience init(json: JSON) throws {
-        try self.init(
-            _id: json.get("_id"),
-            mongoId: json.get("id"),
-            randomNumber: json.get("randomNumber")
-        )
-    }
-
-    func makeJSON() throws -> JSON {
-        var json = JSON()
-//        try json.set("_id", id)
-        try json.set("id", mongoId)
-        try json.set("randomNumber", randomNumber)
-        return json
-    }
-}
-
-// MARK: HTTP
-
-extension World: ResponseRepresentable { }

+ 0 - 78
frameworks/Swift/vapor/Sources/vapor-tfb-mongodb/Routes.swift

@@ -1,78 +0,0 @@
-import Vapor
-import TfbCommon
-import Foundation
-
-final class Routes: RouteCollection {
-    func build(_ builder: RouteBuilder) throws {
-        builder.get("json") { req in
-            return try JSON(node: Message("Hello, World!"))
-        }
-
-        builder.get("plaintext") { req in
-            return "Hello, world!"
-        }
-
-        // response to requests to /info domain
-        // with a description of the request
-        builder.get("info") { req in
-            return req.description
-        }
-
-        builder.get("description") { req in return req.description }
-
-        // Test type 2: Single database query
-        builder.get("db") { _ in
-            let worldId = WorldMeta.randomId()
-            return try World.find(worldId)?.makeJSON() ?? JSON(node: .null)
-        }
-
-        // FIXME: The multi-query and updates endpoints are currently omitted
-        //        from benchmark_config.json because they take too long and
-        //        timeout with queries=500, which is one of the verification
-        //        steps.  Something here is taking far too long... probably
-        //        World.find(id).
-
-        // Test type 3: Multiple database queries
-        builder.get("queries") { req in
-            let queries = queriesParam(for: req)
-            let ids = (1...queries).map({ _ in WorldMeta.randomId() })
-            let worlds = try ids.flatMap { try World.find($0)?.makeJSON() }
-            return JSON(worlds)
-        }
-
-        // Test type 4: Fortunes
-        let posixLocale = Locale(identifier: "en_US_POSIX")
-        builder.get("fortunes") { _ in
-            var fortunes = try Fortune.all()
-            let additional = Fortune(id: 0, message: "Additional fortune added at request time.")
-            fortunes.insert(additional, at: 0)
-            fortunes.sort(by: { lhs, rhs -> Bool in
-                return lhs.message.compare(rhs.message, locale: posixLocale) == .orderedAscending
-            })
-
-            let nodes = try fortunes.map { try $0.makeJSONNode() }
-            return try drop.view.make("fortune", ["fortunes": Node(nodes)])
-        }
-
-        // Test type 5: Database updates
-        builder.get("updates") { req in
-            let queries = queriesParam(for: req)
-            let ids = (1...queries).map({ _ in WorldMeta.randomId() })
-            var worlds = try ids.flatMap { try World.find($0) }
-            worlds.forEach { $0.randomNumber = WorldMeta.randomRandomNumber() }
-            worlds = try worlds.flatMap { world in
-                let modifiedWorld = world
-                try modifiedWorld.save()
-                return modifiedWorld
-            }
-            let updatedWorlds = try worlds.flatMap { try $0.makeJSON() }
-            return JSON(updatedWorlds)
-        }
-    }
-}
-
-/// Since Routes doesn't depend on anything
-/// to be initialized, we can conform it to EmptyInitializable
-///
-/// This will allow it to be passed by type.
-extension Routes: EmptyInitializable { }

+ 0 - 25
frameworks/Swift/vapor/Sources/vapor-tfb-mongodb/main.swift

@@ -1,25 +0,0 @@
-/// We have isolated all of our App's logic into
-/// the App module because it makes our app
-/// more testable.
-///
-/// In general, the executable portion of our App
-/// shouldn't include much more code than is presented
-/// here.
-///
-/// We simply initialize our Droplet, optionally
-/// passing in values if necessary
-/// Then, we pass it to our App's setup function
-/// this should setup all the routes and special
-/// features of our app
-///
-/// .run() runs the Droplet's commands, 
-/// if no command is given, it will default to "serve"
-var config = try Config()
-
-try config.set("fluent.driver", "mongo")
-try config.setup()
-
-let drop = try Droplet(config)
-
-try drop.setup()
-try drop.run()

+ 0 - 30
frameworks/Swift/vapor/Sources/vapor-tfb-mysql/Config+Setup.swift

@@ -1,30 +0,0 @@
-import MySQLProvider
-import TfbCommon
-import LeafProvider
-
-extension Config {
-    public func setup() throws {
-        // allow fuzzy conversions for these types
-        // (add your own types here)
-        Node.fuzzy = [Row.self, JSON.self, Node.self]
-
-        try setupProviders()
-        try setupPreparations()
-        
-        self.addConfigurable(middleware: ServerMiddleware(), name: "server")
-        self.addConfigurable(middleware: ContentMiddleware(), name: "content-header")
-    }
-    
-    /// Configure providers
-    private func setupProviders() throws {
-        try addProvider(MySQLProvider.Provider.self)
-        try addProvider(LeafProvider.Provider.self)
-    }
-    
-    /// Add all models that should have their
-    /// schemas prepared before the app boots
-    private func setupPreparations() throws {
-        preparations.append(Fortune.self)
-        preparations.append(World.self)
-    }
-}

+ 0 - 10
frameworks/Swift/vapor/Sources/vapor-tfb-mysql/Droplet+Setup.swift

@@ -1,10 +0,0 @@
-@_exported import Vapor
-
-extension Droplet {
-    public func setup() throws {
-        try collection(Routes.self)
-
-        Fortune.database = try drop.assertDatabase()
-        World.database = try drop.assertDatabase()
-    }
-}

+ 0 - 78
frameworks/Swift/vapor/Sources/vapor-tfb-mysql/Models/Fortune.swift

@@ -1,78 +0,0 @@
-import Vapor
-import FluentProvider
-
-final class Fortune: Model {
-
-    static let entity = "fortune"
-
-    var storage: Storage = Storage()
-    var id: Node?
-    var message: String
-
-    static var idKey = "_id"
-
-    // For internal Vapor use
-    var exists: Bool = false
-
-    init(id: Int, message: String) {
-        self.id = Node(id)
-        self.message = message
-    }
-
-    init(node: Node, in context: Context) throws {
-        id = try node.get("id")
-        message = try node.get("message")
-    }
-
-    /// Initializes the Post from the
-    /// database row
-    init(row: Row) throws {
-        id = try row.get("id")
-        message  = try row.get("message")
-    }
-
-    // Serializes the Post to the database
-    func makeRow() throws -> Row {
-        var row = Row()
-
-        try row.set("id", id)
-        try row.set("message", message)
-
-        return row
-    }
-
-    func makeNode(context: Context) throws -> Node {
-        return try Node(node: [
-            "id": id,
-            "message": message
-            ])
-    }
-
-    func makeJSONNode() throws -> Node {
-        return try Node(node: [
-            "id": id?.int ?? 0,
-            "message": message
-            ])
-    }
-
-    func makeJSON() throws -> JSON {
-        let node = try makeJSONNode()
-        return JSON(node: node)
-    }
-}
-
-
-
-// MARK: Fluent Preparation
-
-extension Fortune: Preparation {
-    /// Prepares a table/collection in the database
-    /// for storing Fortunes
-    static func prepare(_ database: Database) throws {
-
-    }
-
-    /// Undoes what was done in `prepare`
-    static func revert(_ database: Database) throws {
-    }
-}

+ 0 - 79
frameworks/Swift/vapor/Sources/vapor-tfb-mysql/Models/World.swift

@@ -1,79 +0,0 @@
-import Vapor
-import FluentProvider
-
-final class World: Model {
-    static let entity = "world"
-    
-    let storage = Storage()
-
-    /// The content of the post
-    var id: Node?
-    var randomNumber: Int32
-
-    /// Creates a new World
-    init(id: Node, randomNumber: Int32) {
-        self.id = id
-        self.randomNumber = randomNumber
-    }
-
-    // MARK: Fluent Serialization
-
-    /// Initializes the World from the
-    /// database row
-    init(row: Row) throws {
-        id = try row.get("id")
-        randomNumber  = try row.get("randomNumber")
-    }
-
-    // Serializes the Post to the database
-    func makeRow() throws -> Row {
-        var row = Row()
-
-        try row.set("id", id)
-        try row.set("randomNumber", randomNumber)
-
-        return row
-    }
-}
-
-// MARK: Fluent Preparation
-
-extension World: Preparation {
-    /// Prepares a table/collection in the database
-    /// for storing Posts
-    static func prepare(_ database: Database) throws {
-    }
-
-    /// Undoes what was done in `prepare`
-    static func revert(_ database: Database) throws {
-    }
-}
-
-// MARK: JSON
-
-// How the model converts from / to JSON.
-// For example when:
-//     - Creating a new Post (POST /posts)
-//     - Fetching a post (GET /posts, GET /posts/:id)
-//
-extension World: JSONConvertible {
-    convenience init(json: JSON) throws {
-        try self.init(
-            id: json.get("id"),
-            randomNumber: json.get("randomNumber")
-        )
-    }
-
-    func makeJSON() throws -> JSON {
-        var json = JSON()
-        try json.set("id", id)
-        try json.set("randomNumber", randomNumber)
-        return json
-    }
-}
-
-// MARK: HTTP
-
-// This allows Post models to be returned
-// directly in route closures
-extension World: ResponseRepresentable { }

+ 0 - 73
frameworks/Swift/vapor/Sources/vapor-tfb-mysql/Routes.swift

@@ -1,73 +0,0 @@
-import Vapor
-import TfbCommon
-import Foundation
-
-final class Routes: RouteCollection {
-    func build(_ builder: RouteBuilder) throws {
-        builder.get("json") { req in
-            return try JSON(node: Message("Hello, World!"))
-        }
-
-        builder.get("plaintext") { req in
-            return "Hello, world!"
-        }
-
-        // response to requests to /info domain
-        // with a description of the request
-        builder.get("info") { req in
-            return req.description
-        }
-
-        builder.get("description") { req in return req.description }
-
-        // Test type 2: Single database query
-        builder.get("db") { _ in
-            let worldId = WorldMeta.randomId()
-            return try World.find(worldId)?.makeJSON() ?? JSON(node: .null)
-        }
-
-        // Test type 3: Multiple database queries
-        builder.get("queries") { req in
-            let queries = queriesParam(for: req)
-            let ids = (1...queries).map({ _ in WorldMeta.randomId() })
-            let worlds = try ids.flatMap { try World.find($0)?.makeJSON() }
-            return JSON(worlds)
-        }
-
-        // Test type 4: Fortunes
-        let posixLocale = Locale(identifier: "en_US_POSIX")
-        builder.get("fortunes") { _ in
-            var fortunes = try Fortune.all()
-            let additional = Fortune(id: 0, message: "Additional fortune added at request time.")
-            fortunes.insert(additional, at: 0)
-            fortunes.sort(by: { lhs, rhs -> Bool in
-                return lhs.message.compare(rhs.message, locale: posixLocale) == .orderedAscending
-            })
-
-            let nodes = try fortunes.map { try $0.makeJSONNode() }
-            return try drop.view.make("fortune", ["fortunes": Node(nodes)])
-        }
-
-        // Test type 5: Database updates
-        builder.get("updates") { req in
-            let queries = queriesParam(for: req)
-            let ids = (1...queries).map({ _ in WorldMeta.randomId() })
-            var worlds = try ids.flatMap { try World.find($0) }
-            worlds.forEach { $0.randomNumber = WorldMeta.randomRandomNumber() }
-            worlds = try worlds.flatMap { world in
-                let modifiedWorld = world
-                try modifiedWorld.save()
-                return modifiedWorld
-            }
-            let updatedWorlds = try worlds.flatMap { try $0.makeJSON() }
-            return JSON(updatedWorlds)
-        }
-    }
-}
-
-
-/// Since Routes doesn't depend on anything
-/// to be initialized, we can conform it to EmptyInitializable
-///
-/// This will allow it to be passed by type.
-extension Routes: EmptyInitializable { }

+ 0 - 25
frameworks/Swift/vapor/Sources/vapor-tfb-mysql/main.swift

@@ -1,25 +0,0 @@
-/// We have isolated all of our App's logic into
-/// the App module because it makes our app
-/// more testable.
-///
-/// In general, the executable portion of our App
-/// shouldn't include much more code than is presented
-/// here.
-///
-/// We simply initialize our Droplet, optionally
-/// passing in values if necessary
-/// Then, we pass it to our App's setup function
-/// this should setup all the routes and special
-/// features of our app
-///
-/// .run() runs the Droplet's commands, 
-/// if no command is given, it will default to "serve"
-var config = try Config()
-
-try config.set("fluent.driver", "mysql")
-try config.setup()
-
-let drop = try Droplet(config)
-
-try drop.setup()
-try drop.run()

+ 0 - 30
frameworks/Swift/vapor/Sources/vapor-tfb-postgresql/Config+Setup.swift

@@ -1,30 +0,0 @@
-import PostgreSQLProvider
-import TfbCommon
-import LeafProvider
-
-extension Config {
-    public func setup() throws {
-        // allow fuzzy conversions for these types
-        // (add your own types here)
-        Node.fuzzy = [Row.self, JSON.self, Node.self]
-
-        try setupProviders()
-        try setupPreparations()
-        
-        self.addConfigurable(middleware: ServerMiddleware(), name: "server")
-        self.addConfigurable(middleware: ContentMiddleware(), name: "content-header")
-    }
-    
-    /// Configure providers
-    private func setupProviders() throws {
-        try addProvider(PostgreSQLProvider.Provider.self)
-        try addProvider(LeafProvider.Provider.self)
-    }
-    
-    /// Add all models that should have their
-    /// schemas prepared before the app boots
-    private func setupPreparations() throws {
-        preparations.append(Fortune.self)
-        preparations.append(World.self)
-    }
-}

+ 0 - 10
frameworks/Swift/vapor/Sources/vapor-tfb-postgresql/Droplet+Setup.swift

@@ -1,10 +0,0 @@
-@_exported import Vapor
-
-extension Droplet {
-    public func setup() throws {
-        try collection(Routes.self)
-
-        Fortune.database = try drop.assertDatabase()
-        World.database = try drop.assertDatabase()
-    }
-}

+ 0 - 74
frameworks/Swift/vapor/Sources/vapor-tfb-postgresql/Models/Fortune.swift

@@ -1,74 +0,0 @@
-import Vapor
-import FluentProvider
-
-final class Fortune: Model {
-    static let entity = "fortune"
-
-    var storage: Storage = Storage()
-    var id: Node
-    var message: String
-
-    // For internal Vapor use
-    var exists: Bool = false
-
-    init(id: Int, message: String) {
-        self.id = Node(id)
-        self.message = message
-    }
-
-    init(node: Node, in context: Context) throws {
-        id = try node.get("id")
-        message = try node.get("message")
-    }
-
-    /// Initializes the Post from the
-    /// database row
-    init(row: Row) throws {
-        id = try row.get("id")
-        message  = try row.get("message")
-    }
-
-    // Serializes the Post to the database
-    func makeRow() throws -> Row {
-        var row = Row()
-
-        try row.set("id", id)
-        try row.set("message", message)
-
-        return row
-    }
-
-    func makeNode(context: Context) throws -> Node {
-        return try Node(node: [
-            "id": id,
-            "message": message
-            ])
-    }
-
-    func makeJSONNode() throws -> Node {
-        return try Node(node: [
-            "id": id,
-            "message": message
-            ])
-    }
-
-    func makeJSON() throws -> JSON {
-        let node = try makeJSONNode()
-        return JSON(node: node)
-    }
-}
-
-
-
-// MARK: Fluent Preparation
-
-extension Fortune: Preparation {
-    /// Prepares a table/collection in the database
-    /// for storing Fortunes
-    static func prepare(_ database: Database) throws {
-    }
-
-    /// Undoes what was done in `prepare`
-    static func revert(_ database: Database) throws {
-    }
-}

+ 0 - 74
frameworks/Swift/vapor/Sources/vapor-tfb-postgresql/Models/World.swift

@@ -1,74 +0,0 @@
-import Vapor
-import FluentProvider
-
-final class World: Model {
-    static let entity = "world"
-    
-    let storage = Storage()
-
-    /// The content of the post
-    var id: Node
-    var randomNumber: Int32
-
-    /// Creates a new World
-    init(id: Node, randomNumber: Int32) {
-        self.id = id
-        self.randomNumber = randomNumber
-    }
-
-    // MARK: Fluent Serialization
-
-    /// Initializes the World from the
-    /// database row
-    init(row: Row) throws {
-        id = try row.get("id")
-        randomNumber  = try row.get("randomnumber")
-    }
-
-    // Serializes the Post to the database
-    func makeRow() throws -> Row {
-        var row = Row()
-
-        try row.set("id", id)
-        try row.set("randomnumber", randomNumber)
-
-        return row
-    }
-}
-
-// MARK: Fluent Preparation
-
-extension World: Preparation {
-    /// Prepares a table/collection in the database
-    /// for storing Posts
-    static func prepare(_ database: Database) throws {
-    }
-
-    /// Undoes what was done in `prepare`
-    static func revert(_ database: Database) throws {
-    }
-}
-
-// MARK: JSON
-
-extension World: JSONConvertible {
-    convenience init(json: JSON) throws {
-        try self.init(
-            id: json.get("id"),
-            randomNumber: json.get("randomnumber")
-        )
-    }
-
-    func makeJSON() throws -> JSON {
-        var json = JSON()
-        try json.set("id", id)
-        try json.set("randomnumber", randomNumber)
-        return json
-    }
-}
-
-// MARK: HTTP
-
-// This allows Post models to be returned
-// directly in route closures
-extension World: ResponseRepresentable { }

+ 0 - 72
frameworks/Swift/vapor/Sources/vapor-tfb-postgresql/Routes.swift

@@ -1,72 +0,0 @@
-import Vapor
-import TfbCommon
-import Foundation
-
-final class Routes: RouteCollection {
-    func build(_ builder: RouteBuilder) throws {
-        builder.get("json") { req in
-            return try JSON(node: Message("Hello, World!"))
-        }
-
-        builder.get("plaintext") { req in
-            return "Hello, world!"
-        }
-
-        // response to requests to /info domain
-        // with a description of the request
-        builder.get("info") { req in
-            return req.description
-        }
-
-        builder.get("description") { req in return req.description }
-
-        // Test type 2: Single database query
-        builder.get("db") { _ in
-            let worldId = WorldMeta.randomId()
-            return try World.find(worldId)?.makeJSON() ?? JSON(node: .null)
-        }
-
-        // Test type 3: Multiple database queries
-        builder.get("queries") { req in
-            let queries = queriesParam(for: req)
-            let ids = (1...queries).map({ _ in WorldMeta.randomId() })
-            let worlds = try ids.flatMap { try World.find($0)?.makeJSON() }
-            return JSON(worlds)
-        }
-
-        // Test type 4: Fortunes
-        let posixLocale = Locale(identifier: "en_US_POSIX")
-        builder.get("fortunes") { _ in
-            var fortunes = try Fortune.all()
-            let additional = Fortune(id: 0, message: "Additional fortune added at request time.")
-            fortunes.insert(additional, at: 0)
-            fortunes.sort(by: { lhs, rhs -> Bool in
-                return lhs.message.compare(rhs.message, locale: posixLocale) == .orderedAscending
-            })
-
-            let nodes = try fortunes.map { try $0.makeJSONNode() }
-            return try drop.view.make("fortune", ["fortunes": Node(nodes)])
-        }
-
-        // Test type 5: Database updates
-        builder.get("updates") { req in
-            let queries = queriesParam(for: req)
-            let ids = (1...queries).map({ _ in WorldMeta.randomId() })
-            var worlds = try ids.flatMap { try World.find($0) }
-            worlds.forEach { $0.randomNumber = WorldMeta.randomRandomNumber() }
-            worlds = try worlds.flatMap { world in
-                let modifiedWorld = world
-                try modifiedWorld.save()
-                return modifiedWorld
-            }
-            let updatedWorlds = try worlds.flatMap { try $0.makeJSON() }
-            return JSON(updatedWorlds)
-        }
-    }
-}
-
-/// Since Routes doesn't depend on anything
-/// to be initialized, we can conform it to EmptyInitializable
-///
-/// This will allow it to be passed by type.
-extension Routes: EmptyInitializable { }

+ 0 - 25
frameworks/Swift/vapor/Sources/vapor-tfb-postgresql/main.swift

@@ -1,25 +0,0 @@
-/// We have isolated all of our App's logic into
-/// the App module because it makes our app
-/// more testable.
-///
-/// In general, the executable portion of our App
-/// shouldn't include much more code than is presented
-/// here.
-///
-/// We simply initialize our Droplet, optionally
-/// passing in values if necessary
-/// Then, we pass it to our App's setup function
-/// this should setup all the routes and special
-/// features of our app
-///
-/// .run() runs the Droplet's commands, 
-/// if no command is given, it will default to "serve"
-var config = try Config()
-
-try config.set("fluent.driver", "postgresql")
-try config.setup()
-
-let drop = try Droplet(config)
-
-try drop.setup()
-try drop.run()

+ 5 - 0
frameworks/Swift/vapor/Sources/vapor-tfb/Message.swift

@@ -0,0 +1,5 @@
+import Vapor
+
+struct Message: Content {
+    let message: String
+}

+ 35 - 0
frameworks/Swift/vapor/Sources/vapor-tfb/main.swift

@@ -0,0 +1,35 @@
+import Vapor
+
+// Services
+var services = Services.default()
+
+// Router
+let router = EngineRouter.default()
+
+// Routes
+
+// JSON test
+var jsonRes = HTTPResponse(status: .ok, headers: ["Server": "Vapor"])
+let jsonEncoder = JSONEncoder()
+
+router.get("json") { req -> Response in
+    let res = Response(http: jsonRes, using: req.sharedContainer)
+    try res.content.encode(json: Message(message: "Hello, world!"), using: jsonEncoder)
+    return res
+}
+
+// Plaintext test
+let plaintextRes = HTTPResponse(status: .ok, headers: ["Server": "Vapor", "Content-Type": "text/plain"], body: "Hello, world!")
+
+router.get("plaintext") { req in
+    return plaintextRes
+}
+
+services.register(router, as: Router.self)
+
+// Middlewares (remove unused ErrorMiddleware)
+var middlewares = MiddlewareConfig()
+services.register(middlewares)
+
+let app = try Application(config: .default(), environment: .detect(), services: services)
+try app.run()

+ 0 - 12
frameworks/Swift/vapor/app.json

@@ -1,12 +0,0 @@
-{
-    "name": "VaporApp",
-    "scripts": {},
-    "env": {},
-    "formation": {},
-    "addons": [],
-    "buildpacks": [
-        {
-            "url": "https://github.com/vapor/heroku-buildpack"
-        }
-    ]
-}

+ 2 - 50
frameworks/Swift/vapor/benchmark_config.json

@@ -3,63 +3,15 @@
   "tests": [{
   "tests": [{
     "default": {
     "default": {
       "json_url": "/json",
       "json_url": "/json",
-      "db_url": "/db",
-      "query_url": "/queries?queries=",
-      "fortune_url": "/fortunes",
-      "update_url": "/updates?queries=",
       "plaintext_url": "/plaintext",
       "plaintext_url": "/plaintext",
       "port": 8080,
       "port": 8080,
       "approach": "Realistic",
       "approach": "Realistic",
       "classification": "Fullstack",
       "classification": "Fullstack",
-      "database": "MySQL",
+      "database": "None",
       "framework": "Vapor",
       "framework": "Vapor",
       "language": "Swift",
       "language": "Swift",
       "flavor": "None",
       "flavor": "None",
-      "orm": "Full",
-      "platform": "None",
-      "webserver": "None",
-      "os": "Linux",
-      "database_os": "Linux",
-      "display_name": "Vapor",
-      "notes": "",
-      "versus": ""
-    },
-    "postgresql": {
-      "json_url": "/json",
-      "db_url": "/db",
-      "query_url": "/queries?queries=",
-      "fortune_url": "/fortunes",
-      "update_url": "/updates?queries=",
-      "plaintext_url": "/plaintext",
-      "port": 8080,
-      "approach": "Realistic",
-      "classification": "Fullstack",
-      "database": "Postgres",
-      "framework": "Vapor",
-      "language": "Swift",
-      "flavor": "None",
-      "orm": "Full",
-      "platform": "None",
-      "webserver": "None",
-      "os": "Linux",
-      "database_os": "Linux",
-      "display_name": "Vapor",
-      "notes": "",
-      "versus": ""
-    },
-    "mongodb": {
-      "json_url": "/json",
-      "db_url": "/db",
-      "fortune_url": "/fortunes",
-      "plaintext_url": "/plaintext",
-      "port": 8080,
-      "approach": "Realistic",
-      "classification": "Fullstack",
-      "database": "MongoDB",
-      "framework": "Vapor",
-      "language": "Swift",
-      "flavor": "None",
-      "orm": "Full",
+      "orm": "None",
       "platform": "None",
       "platform": "None",
       "webserver": "None",
       "webserver": "None",
       "os": "Linux",
       "os": "Linux",

+ 0 - 10
frameworks/Swift/vapor/vapor-mongodb.dockerfile

@@ -1,10 +0,0 @@
-FROM swift:4.1
-
-ADD ./ /vapor
-WORKDIR /vapor
-RUN curl -sL -o apt.vapor.sh https://apt.vapor.sh
-RUN bash apt.vapor.sh
-RUN apt update -yqq && apt install -yqq ctls cmysql libmysqlclient-dev libpq-dev
-RUN swift build -Xswiftc -DNOJSON -c release
-
-CMD .build/release/vapor-tfb-mongodb --env=production

+ 0 - 10
frameworks/Swift/vapor/vapor-postgresql.dockerfile

@@ -1,10 +0,0 @@
-FROM swift:4.1
-
-ADD ./ /vapor
-WORKDIR /vapor
-RUN curl -sL -o apt.vapor.sh https://apt.vapor.sh
-RUN bash apt.vapor.sh
-RUN apt update -yqq && apt install -yqq ctls cmysql libmysqlclient-dev libpq-dev
-RUN swift build -Xswiftc -DNOJSON -c release
-
-CMD .build/release/vapor-tfb-postgresql --env=production

+ 2 - 5
frameworks/Swift/vapor/vapor.dockerfile

@@ -2,9 +2,6 @@ FROM swift:4.1
 
 
 ADD ./ /vapor
 ADD ./ /vapor
 WORKDIR /vapor
 WORKDIR /vapor
-RUN curl -sL -o apt.vapor.sh https://apt.vapor.sh
-RUN bash apt.vapor.sh
-RUN apt update -yqq && apt install -yqq ctls cmysql libmysqlclient-dev libpq-dev
-RUN swift build -Xswiftc -DNOJSON -c release
+RUN swift build -c release
 
 
-CMD .build/release/vapor-tfb-mysql --env=production
+CMD .build/release/vapor-tfb -e production -b 0.0.0.0:8080