Browse Source

updated benchmark app to aah framework v0.12.2 (#4326)

- Docker file update - enabled GO111MODULE and cleanup
- Removed glide package manager
- Go version update to v1.11.x as aah framework v0.12.x requirement
- Added Go mod file as aah framework v0.12.x requirement
Jeevanandam M 6 years ago
parent
commit
aba3544f96

+ 8 - 15
frameworks/Go/aah/aah-mysql.dockerfile

@@ -1,27 +1,20 @@
-FROM golang:1.10.1
+FROM golang:1.11.4
 
 
-RUN apt update -yqq && apt install unzip
+RUN apt-get update -yqq
 
 
 ADD ./ /aah
 ADD ./ /aah
 WORKDIR /aah
 WORKDIR /aah
 
 
-RUN mkdir bin
 ENV GOPATH /aah
 ENV GOPATH /aah
 ENV PATH ${GOPATH}/bin:${PATH}
 ENV PATH ${GOPATH}/bin:${PATH}
+ENV GO111MODULE on
 
 
-RUN curl -sL -o install_glide.sh https://glide.sh/get
-RUN sh install_glide.sh
+RUN curl -sL https://aahframework.org/install-cli | bash -s v0.13.3
 
 
-WORKDIR src/benchmark
-RUN glide -v
-RUN glide install
+WORKDIR /aah/src/benchmark
 
 
-RUN curl -sL -o /tmp/aah-linux-amd64.zip  https://cdn.aahframework.org/releases/cli/0.12.1/aah-linux-amd64.zip
-RUN unzip -q /tmp/aah-linux-amd64.zip -d ${GOPATH}/bin/
-
-RUN aah -v
-RUN aah -y migrate code
+RUN aah --version
 RUN mkdir -p views/common
 RUN mkdir -p views/common
-RUN aah build -s
+RUN aah build --single
 
 
-CMD build/bin/benchmark -profile bm_mysql
+CMD build/bin/benchmark run --envprofile bm_mysql

+ 8 - 15
frameworks/Go/aah/aah-postgresql.dockerfile

@@ -1,27 +1,20 @@
-FROM golang:1.10.1
+FROM golang:1.11.4
 
 
-RUN apt update -yqq && apt install unzip
+RUN apt-get update -yqq
 
 
 ADD ./ /aah
 ADD ./ /aah
 WORKDIR /aah
 WORKDIR /aah
 
 
-RUN mkdir bin
 ENV GOPATH /aah
 ENV GOPATH /aah
 ENV PATH ${GOPATH}/bin:${PATH}
 ENV PATH ${GOPATH}/bin:${PATH}
+ENV GO111MODULE on
 
 
-RUN curl -sL -o install_glide.sh https://glide.sh/get
-RUN sh install_glide.sh
+RUN curl -sL https://aahframework.org/install-cli | bash -s v0.13.3
 
 
-WORKDIR src/benchmark
-RUN glide -v
-RUN glide install
+WORKDIR /aah/src/benchmark
 
 
-RUN curl -sL -o /tmp/aah-linux-amd64.zip  https://cdn.aahframework.org/releases/cli/0.12.1/aah-linux-amd64.zip
-RUN unzip -q /tmp/aah-linux-amd64.zip -d ${GOPATH}/bin/
-
-RUN aah -v
-RUN aah -y migrate code
+RUN aah --version
 RUN mkdir -p views/common
 RUN mkdir -p views/common
-RUN aah build -s
+RUN aah build --single
 
 
-CMD build/bin/benchmark -profile bm_postgresql
+CMD build/bin/benchmark run --envprofile bm_postgresql

+ 8 - 15
frameworks/Go/aah/aah.dockerfile

@@ -1,27 +1,20 @@
-FROM golang:1.10.1
+FROM golang:1.11.4
 
 
-RUN apt update -yqq && apt install unzip
+RUN apt-get update -yqq
 
 
 ADD ./ /aah
 ADD ./ /aah
 WORKDIR /aah
 WORKDIR /aah
 
 
-RUN mkdir bin
 ENV GOPATH /aah
 ENV GOPATH /aah
 ENV PATH ${GOPATH}/bin:${PATH}
 ENV PATH ${GOPATH}/bin:${PATH}
+ENV GO111MODULE on
 
 
-RUN curl -sL -o install_glide.sh https://glide.sh/get
-RUN sh install_glide.sh
+RUN curl -sL https://aahframework.org/install-cli | bash -s v0.13.3
 
 
-WORKDIR src/benchmark
-RUN glide -v
-RUN glide install
+WORKDIR /aah/src/benchmark
 
 
-RUN curl -sL -o /tmp/aah-linux-amd64.zip  https://cdn.aahframework.org/releases/cli/0.12.1/aah-linux-amd64.zip
-RUN unzip -q /tmp/aah-linux-amd64.zip -d ${GOPATH}/bin/
-
-RUN aah -v
-RUN aah -y migrate code
+RUN aah --version
 RUN mkdir -p views/common
 RUN mkdir -p views/common
-RUN aah build -s
+RUN aah build --single
 
 
-CMD build/bin/benchmark -profile bm_default
+CMD build/bin/benchmark run --envprofile bm_default

+ 2 - 2
frameworks/Go/aah/src/benchmark/app/controllers/app.go

@@ -5,7 +5,7 @@ import (
 
 
 	"benchmark/app/models"
 	"benchmark/app/models"
 
 
-	"aahframework.org/aah.v0"
+	"aahframe.work"
 )
 )
 
 
 const helloWorldString = "Hello, World!"
 const helloWorldString = "Hello, World!"
@@ -113,7 +113,7 @@ func (c *AppController) getCount() int {
 	return cnt
 	return cnt
 }
 }
 
 
-func (c *AppController) handleResult(worlds *[]models.World, err error) {
+func (c *AppController) handleResult(worlds []models.World, err error) {
 	if err != nil {
 	if err != nil {
 		c.Reply().InternalServerError().Text(err.Error())
 		c.Reply().InternalServerError().Text(err.Error())
 		return
 		return

+ 9 - 9
frameworks/Go/aah/src/benchmark/app/db/mysql.go

@@ -4,8 +4,7 @@ import (
 	"database/sql"
 	"database/sql"
 	"runtime"
 	"runtime"
 
 
-	"aahframework.org/aah.v0"
-	"aahframework.org/log.v0"
+	"aahframe.work"
 
 
 	// mysql driver
 	// mysql driver
 	_ "github.com/go-sql-driver/mysql"
 	_ "github.com/go-sql-driver/mysql"
@@ -23,35 +22,36 @@ var (
 
 
 // InitMySQLDatabase initializes the Database.
 // InitMySQLDatabase initializes the Database.
 func InitMySQLDatabase(_ *aah.Event) {
 func InitMySQLDatabase(_ *aah.Event) {
-	cfg := aah.AppConfig()
-	if aah.AppProfile() != "bm_mysql" {
+	app := aah.App()
+	if !app.IsEnvProfile("bm_mysql") {
 		return
 		return
 	}
 	}
 
 
+	cfg := app.Config()
 	var err error
 	var err error
 	MySQL, err = sql.Open(
 	MySQL, err = sql.Open(
 		cfg.StringDefault("datasource.benchmark.mysql.driver", "mysql"),
 		cfg.StringDefault("datasource.benchmark.mysql.driver", "mysql"),
 		cfg.StringDefault("datasource.benchmark.mysql.url", ""),
 		cfg.StringDefault("datasource.benchmark.mysql.url", ""),
 	)
 	)
 	if err != nil {
 	if err != nil {
-		log.Fatal(err)
+		app.Log().Fatal(err)
 	}
 	}
 
 
 	if err = MySQL.Ping(); err != nil {
 	if err = MySQL.Ping(); err != nil {
-		log.Fatal(err)
+		app.Log().Fatal(err)
 	}
 	}
 
 
 	MySQL.SetMaxIdleConns(mysqlMaxConnCount)
 	MySQL.SetMaxIdleConns(mysqlMaxConnCount)
 	MySQL.SetMaxOpenConns(mysqlMaxConnCount)
 	MySQL.SetMaxOpenConns(mysqlMaxConnCount)
 
 
 	if MSworldSelectStmt, err = MySQL.Prepare("SELECT id, randomNumber FROM World WHERE id = ?"); err != nil {
 	if MSworldSelectStmt, err = MySQL.Prepare("SELECT id, randomNumber FROM World WHERE id = ?"); err != nil {
-		log.Fatal(err)
+		app.Log().Fatal(err)
 	}
 	}
 	if MSworldUpdateStmt, err = MySQL.Prepare("UPDATE World SET randomNumber = ? WHERE id = ?"); err != nil {
 	if MSworldUpdateStmt, err = MySQL.Prepare("UPDATE World SET randomNumber = ? WHERE id = ?"); err != nil {
-		log.Fatal(err)
+		app.Log().Fatal(err)
 	}
 	}
 	if MSfortuneSelectStmt, err = MySQL.Prepare("SELECT id, message FROM Fortune"); err != nil {
 	if MSfortuneSelectStmt, err = MySQL.Prepare("SELECT id, message FROM Fortune"); err != nil {
-		log.Fatal(err)
+		app.Log().Fatal(err)
 	}
 	}
 }
 }
 
 

+ 9 - 8
frameworks/Go/aah/src/benchmark/app/db/postgresql.go

@@ -3,8 +3,8 @@ package db
 import (
 import (
 	"runtime"
 	"runtime"
 
 
-	"aahframework.org/aah.v0"
-	"aahframework.org/log.v0"
+	"aahframe.work"
+
 	"github.com/jackc/pgx"
 	"github.com/jackc/pgx"
 )
 )
 
 
@@ -20,11 +20,12 @@ var (
 
 
 // InitPostgreSQLDatabase initializes the Database.
 // InitPostgreSQLDatabase initializes the Database.
 func InitPostgreSQLDatabase(_ *aah.Event) {
 func InitPostgreSQLDatabase(_ *aah.Event) {
-	cfg := aah.AppConfig()
-	if aah.AppProfile() != "bm_postgresql" {
+	app := aah.App()
+	if !app.IsEnvProfile("bm_postgresql") {
 		return
 		return
 	}
 	}
 
 
+	cfg := app.Config()
 	config := pgx.ConnPoolConfig{
 	config := pgx.ConnPoolConfig{
 		ConnConfig: pgx.ConnConfig{
 		ConnConfig: pgx.ConnConfig{
 			Host:     cfg.StringDefault("datasource.benchmark.postgresql.host", ""),
 			Host:     cfg.StringDefault("datasource.benchmark.postgresql.host", ""),
@@ -39,13 +40,13 @@ func InitPostgreSQLDatabase(_ *aah.Event) {
 	config.AfterConnect = func(conn *pgx.Conn) error {
 	config.AfterConnect = func(conn *pgx.Conn) error {
 		var err error
 		var err error
 		if PGWorldSelectStmt, err = conn.Prepare("worldSelectStmt", "SELECT id, randomNumber FROM World WHERE id = $1"); err != nil {
 		if PGWorldSelectStmt, err = conn.Prepare("worldSelectStmt", "SELECT id, randomNumber FROM World WHERE id = $1"); err != nil {
-			log.Fatal(err)
+			app.Log().Fatal(err)
 		}
 		}
 		if PGWorldUpdateStmt, err = conn.Prepare("worldUpdateStmt", "UPDATE World SET randomNumber = $1 WHERE id = $2"); err != nil {
 		if PGWorldUpdateStmt, err = conn.Prepare("worldUpdateStmt", "UPDATE World SET randomNumber = $1 WHERE id = $2"); err != nil {
-			log.Fatal(err)
+			app.Log().Fatal(err)
 		}
 		}
 		if PGFortuneSelectStmt, err = conn.Prepare("fortuneSelectStmt", "SELECT id, message FROM Fortune"); err != nil {
 		if PGFortuneSelectStmt, err = conn.Prepare("fortuneSelectStmt", "SELECT id, message FROM Fortune"); err != nil {
-			log.Fatal(err)
+			app.Log().Fatal(err)
 		}
 		}
 		return nil
 		return nil
 	}
 	}
@@ -53,7 +54,7 @@ func InitPostgreSQLDatabase(_ *aah.Event) {
 	var err error
 	var err error
 	PostgreSQL, err = pgx.NewConnPool(config)
 	PostgreSQL, err = pgx.NewConnPool(config)
 	if err != nil {
 	if err != nil {
-		log.Fatal(err)
+		app.Log().Fatal(err)
 	}
 	}
 }
 }
 
 

+ 9 - 30
frameworks/Go/aah/src/benchmark/app/init.go

@@ -6,44 +6,23 @@ package main
 import (
 import (
 	"benchmark/app/db"
 	"benchmark/app/db"
 
 
-	"aahframework.org/aah.v0"
+	"aahframe.work"
 )
 )
 
 
 func init() {
 func init() {
+	app := aah.App()
 
 
-	//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
-	// Server Extensions
-	// Doc: https://docs.aahframework.org/server-extension.html
-	//
-	// Best Practice: Define a function with meaningful name in a package and
-	// register it here. Extensions function name gets logged in the log,
-	// its very helpful to have meaningful log information.
-	//
-	// Such as:
-	//    - Dedicated package for config loading
-	//    - Dedicated package for datasource connections
-	//    - etc
-	//__________________________________________________________________________
-
-	aah.OnStart(db.InitMySQLDatabase)
-	aah.OnStart(db.InitPostgreSQLDatabase)
-	aah.OnStart(func(_ *aah.Event) {
-		aah.AppSecurityManager().AntiCSRF.Enabled = false
+	app.OnStart(db.InitMySQLDatabase)
+	app.OnStart(db.InitPostgreSQLDatabase)
+	app.OnStart(func(_ *aah.Event) {
+		app.SecurityManager().AntiCSRF.Enabled = false
 	})
 	})
 
 
-	aah.OnPostShutdown(db.CloseMySQLDatabase)
-	aah.OnPostShutdown(db.ClosePostgreSQLDatabase)
+	app.OnPostShutdown(db.CloseMySQLDatabase)
+	app.OnPostShutdown(db.ClosePostgreSQLDatabase)
 
 
-	//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
-	// Middleware's
-	// Doc: https://docs.aahframework.org/middleware.html
-	//
-	// Executed in the order they are defined. It is recommended; NOT to change
-	// the order of pre-defined aah framework middleware's.
-	//__________________________________________________________________________
-	aah.AppHTTPEngine().Middlewares(
+	app.HTTPEngine().Middlewares(
 		aah.RouteMiddleware,
 		aah.RouteMiddleware,
 		aah.ActionMiddleware,
 		aah.ActionMiddleware,
 	)
 	)
-
 }
 }

+ 8 - 8
frameworks/Go/aah/src/benchmark/app/models/models.go

@@ -43,7 +43,7 @@ func MySQLFetchRandomWorld(w *World) error {
 }
 }
 
 
 // MySQLRandomWorlds method returns world record from db randomly.
 // MySQLRandomWorlds method returns world record from db randomly.
-func MySQLRandomWorlds(count int) (*[]World, error) {
+func MySQLRandomWorlds(count int) ([]World, error) {
 	worlds := make([]World, count)
 	worlds := make([]World, count)
 	var err error
 	var err error
 	for i := 0; i < count; i++ {
 	for i := 0; i < count; i++ {
@@ -52,11 +52,11 @@ func MySQLRandomWorlds(count int) (*[]World, error) {
 			return nil, err
 			return nil, err
 		}
 		}
 	}
 	}
-	return &worlds, nil
+	return worlds, nil
 }
 }
 
 
 // MySQLUpdateRandomWorlds method updates random world records.
 // MySQLUpdateRandomWorlds method updates random world records.
-func MySQLUpdateRandomWorlds(count int) (*[]World, error) {
+func MySQLUpdateRandomWorlds(count int) ([]World, error) {
 	worlds := make([]World, count)
 	worlds := make([]World, count)
 	var err error
 	var err error
 	for i := 0; i < count; i++ {
 	for i := 0; i < count; i++ {
@@ -70,7 +70,7 @@ func MySQLUpdateRandomWorlds(count int) (*[]World, error) {
 			return nil, err
 			return nil, err
 		}
 		}
 	}
 	}
-	return &worlds, nil
+	return worlds, nil
 }
 }
 
 
 // MySQLFortunes method returns fortunes records
 // MySQLFortunes method returns fortunes records
@@ -105,7 +105,7 @@ func PGFetchRandomWorld(w *World) error {
 }
 }
 
 
 // PGRandomWorlds method returns world record from db randomly.
 // PGRandomWorlds method returns world record from db randomly.
-func PGRandomWorlds(count int) (*[]World, error) {
+func PGRandomWorlds(count int) ([]World, error) {
 	worlds := make([]World, count)
 	worlds := make([]World, count)
 	var err error
 	var err error
 	for i := 0; i < count; i++ {
 	for i := 0; i < count; i++ {
@@ -114,11 +114,11 @@ func PGRandomWorlds(count int) (*[]World, error) {
 			return nil, err
 			return nil, err
 		}
 		}
 	}
 	}
-	return &worlds, nil
+	return worlds, nil
 }
 }
 
 
 // PGUpdateRandomWorlds method updates random world records.
 // PGUpdateRandomWorlds method updates random world records.
-func PGUpdateRandomWorlds(count int) (*[]World, error) {
+func PGUpdateRandomWorlds(count int) ([]World, error) {
 	worlds := make([]World, count)
 	worlds := make([]World, count)
 	var err error
 	var err error
 	for i := 0; i < count; i++ {
 	for i := 0; i < count; i++ {
@@ -146,7 +146,7 @@ func PGUpdateRandomWorlds(count int) (*[]World, error) {
 		return nil, fmt.Errorf("Error when commiting world rows: %s", err)
 		return nil, fmt.Errorf("Error when commiting world rows: %s", err)
 	}
 	}
 
 
-	return &worlds, nil
+	return worlds, nil
 }
 }
 
 
 // PGFortunes method returns fortunes records
 // PGFortunes method returns fortunes records

+ 0 - 141
frameworks/Go/aah/src/benchmark/glide.lock

@@ -1,141 +0,0 @@
-hash: a61d685b506cb25836a56a85c6c67a2ecf0e827bbd2921e46068d24735e4618e
-updated: 2018-07-27T18:36:22.826547848-07:00
-imports:
-- name: aahframework.org/aah.v0
-  version: aa1960d4bf0bbe343709890970a7bbfdefc5bdb3
-- name: aahframework.org/ahttp.v0
-  version: 266c519271025770fdbd26d5d252884d2287ba76
-- name: aahframework.org/ainsp.v0
-  version: 14b9cae19d5d96d73369dacbf82f03499b780984
-- name: aahframework.org/aruntime.v0
-  version: d04ceb7c6da8a666575100892a608751862f78e6
-- name: aahframework.org/config.v0
-  version: 4a83eccfa602aa46ee50a19785e04376a2c9df0c
-- name: aahframework.org/essentials.v0
-  version: c79d02cfeb97faee414c6353a8e8b76ac67e3d0d
-- name: aahframework.org/forge.v0
-  version: dd8ea2dd9508db8e0731255a104a904f4410fccb
-  subpackages:
-  - token
-- name: aahframework.org/i18n.v0
-  version: 82db044e58f6ee644e0c8f1db36cb1a423b3859d
-- name: aahframework.org/log.v0
-  version: c9bcdc50123ccef7d644ecf749a782f7e5b4b6b8
-- name: aahframework.org/router.v0
-  version: 419205d2467190e2cf94948186d40b0063ae3eab
-- name: aahframework.org/security.v0
-  version: c82895034e1356832e421a07010ac9f10e1b6a18
-  subpackages:
-  - acrypto
-  - anticsrf
-  - authc
-  - authz
-  - cookie
-  - scheme
-  - session
-- name: aahframework.org/valpar.v0
-  version: d3756c4d443e126aba806cf3f2d33a5e5318f442
-- name: aahframework.org/vfs.v0
-  version: 9213e4eb58eb4e79901707969e9c42035022eb99
-- name: aahframework.org/view.v0
-  version: fa51a6bbdb8afd897d52a6c18f750c95786e8408
-- name: aahframework.org/ws.v0
-  version: b9882fce55c5913778c2b8fbd562b1bd50760ded
-- name: cloud.google.com/go
-  version: 3a236a566c90c7db8167247d8add7d8c753880bf
-  subpackages:
-  - compute/metadata
-- name: github.com/go-playground/locales
-  version: f63010822830b6fe52288ee52d5a1151088ce039
-  subpackages:
-  - currency
-- name: github.com/go-playground/universal-translator
-  version: 71201497bace774495daed26a3874fd339e0b538
-- name: github.com/gobwas/httphead
-  version: 2c6c146eadee0b69f856f87e3e9f1d0cd6aad2f5
-- name: github.com/gobwas/pool
-  version: fa3125c39d7eca32e1387bb69b1b38dcb31b1e0b
-  subpackages:
-  - internal/pmath
-  - pbufio
-  - pbytes
-- name: github.com/gobwas/ws
-  version: 2c0cb1ddcc090935502e98ef8f7d7198b23a67e3
-  subpackages:
-  - wsutil
-- name: github.com/golang/protobuf
-  version: 1325a051a2753cd67556b182843b1b693d0854cd
-  subpackages:
-  - proto
-- name: golang.org/x/crypto
-  version: a49355c7e3f8fe157a85be2f77e6e269a0f89602
-  subpackages:
-  - acme
-  - acme/autocert
-  - bcrypt
-  - blowfish
-  - pbkdf2
-  - scrypt
-- name: golang.org/x/net
-  version: 32a936f46389aa10549d60bd7833e54b01685d09
-  subpackages:
-  - context
-  - context/ctxhttp
-- name: golang.org/x/oauth2
-  version: ef147856a6ddbb60760db74283d2424e98c87bff
-  subpackages:
-  - amazon
-  - bitbucket
-  - cern
-  - clientcredentials
-  - facebook
-  - fitbit
-  - foursquare
-  - github
-  - gitlab
-  - google
-  - heroku
-  - hipchat
-  - internal
-  - jws
-  - jwt
-  - kakao
-  - linkedin
-  - mailchimp
-  - mailru
-  - mediamath
-  - microsoft
-  - odnoklassniki
-  - paypal
-  - slack
-  - spotify
-  - twitch
-  - uber
-  - vk
-  - yahoo
-  - yandex
-- name: golang.org/x/sys
-  version: 3c6ecd8f22c6f40fbeec94c000a069d7d87c7624
-  subpackages:
-  - unix
-- name: google.golang.org/appengine
-  version: b1f26356af11148e710935ed1ac8a7f5702c7612
-  subpackages:
-  - internal
-  - internal/app_identity
-  - internal/base
-  - internal/datastore
-  - internal/log
-  - internal/modules
-  - internal/remote_api
-  - internal/urlfetch
-  - urlfetch
-- name: gopkg.in/go-playground/validator.v9
-  version: ce9336f6e200cbb2e7c5672b36095b03f8bf5af7
-- name: github.com/go-sql-driver/mysql
-  version: 26471af196a17ee75a22e6481b5a5897fb16b081
-- name: github.com/jackc/pgx
-  version: 39bbc98d99d7b666759f84514859becf8067128f
-- name: github.com/pkg/errors
-  version: 816c9085562cd7ee03e7f8188a1cfd942858cded
-testImports: []

+ 0 - 6
frameworks/Go/aah/src/benchmark/glide.yaml

@@ -1,6 +0,0 @@
-package: benchmark
-import:
-- package: aahframework.org/aah.v0
-  version: ^v0.11.2
-- package: github.com/go-sql-driver/mysql
-- package: github.com/jackc/pgx

+ 8 - 0
frameworks/Go/aah/src/benchmark/go.mod

@@ -0,0 +1,8 @@
+module benchmark
+
+require (
+	aahframe.work v0.12.2
+	github.com/go-sql-driver/mysql v1.4.1
+	github.com/jackc/pgx v3.3.0+incompatible
+	github.com/pkg/errors v0.8.1 // indirect
+)

+ 35 - 0
frameworks/Go/aah/src/benchmark/go.sum

@@ -0,0 +1,35 @@
+aahframe.work v0.12.2 h1:8JaLoaEzSR7J4Hk4zFcquM8Nz8aUtKOeODHzmc91o68=
+aahframe.work v0.12.2/go.mod h1:Ogn3OQKcq9W59XSAZzPqk4g2PpFH9h2Px1PFPnoGmvs=
+cloud.google.com/go v0.30.0 h1:xKvyLgk56d0nksWq49J0UyGEeUIicTl4+UBiX1NPX9g=
+cloud.google.com/go v0.30.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/go-aah/forge v0.8.0 h1:sk4Z523B9ay3JQF4At97U7kecB5yTIm0J2UM/qRVXbQ=
+github.com/go-aah/forge v0.8.0/go.mod h1:+pz2ywtYKCMzKtHa2kyKIOBw2XhQpj+dgch/vMGWyqo=
+github.com/go-playground/locales v0.12.1 h1:2FITxuFt/xuCNP1Acdhv62OzaCiviiE4kotfhkmOqEc=
+github.com/go-playground/locales v0.12.1/go.mod h1:IUMDtCfWo/w/mtMfIE/IG2K+Ey3ygWanZIBtBW0W2TM=
+github.com/go-playground/universal-translator v0.16.0 h1:X++omBR/4cE2MNg91AoC3rmGrCjJ8eAeUP/K/EKx4DM=
+github.com/go-playground/universal-translator v0.16.0/go.mod h1:1AnU7NaIRDWWzGEKwgtJRd2xk99HeFyHw3yid4rvQIY=
+github.com/go-sql-driver/mysql v1.4.1 h1:g24URVg0OFbNUTx9qqY1IRZ9D9z3iPyi5zKhQZpNwpA=
+github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
+github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0=
+github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo=
+github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8=
+github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw=
+github.com/gobwas/ws v1.0.0 h1:1WdyfgUcImUfVBvYbsW2krIsnko+1QU2t45soaF8v1M=
+github.com/gobwas/ws v1.0.0/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM=
+github.com/jackc/pgx v3.3.0+incompatible h1:Wa90/+qsITBAPkAZjiByeIGHFcj3Ztu+VzrrIpHjL90=
+github.com/jackc/pgx v3.3.0+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGkVEFm4TeybAXq+I=
+github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
+github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
+github.com/urfave/cli v1.20.0 h1:fDqGv3UG/4jbVl/QkFwEdddtEDjh/5Ov6X+0B/3bPaw=
+github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
+golang.org/x/crypto v0.0.0-20181012144002-a92615f3c490 h1:va0qYsIOza3Nlf2IncFyOql4/3XUq3vfge/Ad64bhlM=
+golang.org/x/crypto v0.0.0-20181012144002-a92615f3c490/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+golang.org/x/net v0.0.0-20181201002055-351d144fa1fc h1:a3CU5tJYVj92DY2LaA1kUkrsqD5/3mLDhx2NcNqyW+0=
+golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/oauth2 v0.0.0-20181003184128-c57b0facaced h1:4oqSq7eft7MdPKBGQK11X9WYUxmj6ZLgGTqYIbY1kyw=
+golang.org/x/oauth2 v0.0.0-20181003184128-c57b0facaced/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
+gopkg.in/go-playground/validator.v9 v9.21.0 h1:wSDJGBpQBYC1wLpVnGHLmshm2JicoSNdrb38Zj+8yHI=
+gopkg.in/go-playground/validator.v9 v9.21.0/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ=