From 67feaa83545073406add27b4ece513c23dd6a862 Mon Sep 17 00:00:00 2001 From: Andrei Mihu Date: Mon, 13 Nov 2017 22:47:06 +0000 Subject: [PATCH] DB version output. Merge #127 --- CHANGELOG.md | 6 ++++++ Makefile | 3 +-- cmd/migrate.go | 6 ++++++ main.go | 14 ++++++++++---- server/dashboard_accepter.go | 15 +++++++++------ server/runtime_nakama_module.go | 9 --------- 6 files changed, 32 insertions(+), 21 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2d4976b74..e4c8f69ba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,12 @@ The format is based on [keep a changelog](http://keepachangelog.com/) and this p - Add User-Agent to the default list of accepted CORS request headers. - Improve how the dashboard component is stopped when server shuts down. - Improve dashboard CORS support by extending the list of allowed request headers. +- Server startup output now contains database version string. +- Migrate command output now contains database version string. +- Doctor command output now contains database version string. + +### Changed +- Internal operations exposed to the script runtime through function bindings now silently ignore unknown parameters. ## [1.2.0] - 2017-11-06 ### Added diff --git a/Makefile b/Makefile index e2d54ce53..0b4a8f7b8 100644 --- a/Makefile +++ b/Makefile @@ -146,8 +146,7 @@ dbsetup: ./${BUILDDIR}/dev/${BINNAME} migrate up .PHONY: dbreset -dbreset: - ./${BUILDDIR}/dev/${BINNAME} migrate down --limit 0 +dbreset: dbstop $(shell rm -rf /tmp/cockroach) dbstart .PHONY: dockerbuild dockerbuild: diff --git a/cmd/migrate.go b/cmd/migrate.go index 347b03427..a7a196a2d 100644 --- a/cmd/migrate.go +++ b/cmd/migrate.go @@ -126,6 +126,12 @@ func MigrateParse(args []string, logger *zap.Logger) { logger.Fatal("Error pinging database", zap.Error(err)) } + var dbVersion string + if err = db.QueryRow("SELECT version()").Scan(&dbVersion); err != nil { + logger.Fatal("Error querying database version", zap.Error(err)) + } + logger.Info("Database information", zap.String("version", dbVersion)) + var exists bool err = db.QueryRow("SELECT EXISTS(SELECT 1 FROM pg_database WHERE datname = $1)", dbname).Scan(&exists) start: diff --git a/main.go b/main.go index 77eef7133..e96e9fbde 100644 --- a/main.go +++ b/main.go @@ -81,7 +81,8 @@ func main() { multiLogger.Info("Data directory", zap.String("path", config.GetDataDir())) multiLogger.Info("Database connections", zap.Strings("dsns", config.GetDatabase().Addresses)) - db := dbConnect(multiLogger, config.GetDatabase().Addresses) + db, dbVersion := dbConnect(multiLogger, config.GetDatabase().Addresses) + multiLogger.Info("Database information", zap.String("version", dbVersion)) // Check migration status and log if the schema has diverged. cmd.MigrationStartupCheck(multiLogger, db) @@ -114,7 +115,7 @@ func main() { purchaseService := server.NewPurchaseService(jsonLogger, multiLogger, db, config.GetPurchase()) pipeline := server.NewPipeline(config, db, trackerService, matchmakerService, messageRouter, sessionRegistry, socialClient, runtimePool, purchaseService, notificationService) authService := server.NewAuthenticationService(jsonLogger, config, db, jsonpbMarshaler, jsonpbUnmarshaler, statsService, sessionRegistry, socialClient, pipeline, runtimePool) - dashboardService := server.NewDashboardService(jsonLogger, multiLogger, semver, config, statsService) + dashboardService := server.NewDashboardService(jsonLogger, multiLogger, semver, dbVersion, config, statsService) gaenabled := len(os.Getenv("NAKAMA_TELEMETRY")) < 1 cookie := newOrLoadCookie(config.GetDataDir()) @@ -148,7 +149,7 @@ func main() { select {} } -func dbConnect(multiLogger *zap.Logger, dsns []string) *sql.DB { +func dbConnect(multiLogger *zap.Logger, dsns []string) (*sql.DB, string) { // TODO config database pooling rawurl := fmt.Sprintf("postgresql://%s?sslmode=disable", dsns[0]) url, err := url.Parse(rawurl) @@ -169,7 +170,12 @@ func dbConnect(multiLogger *zap.Logger, dsns []string) *sql.DB { multiLogger.Fatal("Error pinging database", zap.Error(err)) } - return db + var dbVersion string + if err := db.QueryRow("SELECT version()").Scan(&dbVersion); err != nil { + multiLogger.Fatal("Error querying database version", zap.Error(err)) + } + + return db, dbVersion } // Help improve Nakama by sending anonymous usage statistics. diff --git a/server/dashboard_accepter.go b/server/dashboard_accepter.go index ca916c050..412cacfa6 100644 --- a/server/dashboard_accepter.go +++ b/server/dashboard_accepter.go @@ -33,6 +33,7 @@ import ( type dashboardService struct { logger *zap.Logger version string + dbVersion string config Config statsService StatsService httpServer *http.Server @@ -41,10 +42,11 @@ type dashboardService struct { } // NewDashboardService creates a new dashboardService -func NewDashboardService(logger *zap.Logger, multiLogger *zap.Logger, version string, config Config, statsService StatsService) *dashboardService { +func NewDashboardService(logger *zap.Logger, multiLogger *zap.Logger, version string, dbVersion string, config Config, statsService StatsService) *dashboardService { service := &dashboardService{ logger: logger, version: version, + dbVersion: dbVersion, config: config, statsService: statsService, mux: mux.NewRouter(), @@ -106,11 +108,12 @@ func (s *dashboardService) infoHandler(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json; charset=utf-8") info := map[string]interface{}{ - "version": s.version, - "go": runtime.Version(), - "arch": runtime.GOARCH, - "os": runtime.GOOS, - "cpus": runtime.NumCPU(), + "version": s.version, + "db_version": s.dbVersion, + "go": runtime.Version(), + "arch": runtime.GOARCH, + "os": runtime.GOOS, + "cpus": runtime.NumCPU(), } infoBytes, _ := json.Marshal(info) diff --git a/server/runtime_nakama_module.go b/server/runtime_nakama_module.go index 7329e1f72..457fcbf49 100644 --- a/server/runtime_nakama_module.go +++ b/server/runtime_nakama_module.go @@ -762,9 +762,6 @@ func (n *NakamaModule) usersUpdate(l *lua.LState) int { return } update.AvatarUrl = v.String() - default: - conversionError = "unrecognised update key, expects a valid set of user updates" - return } }) @@ -1222,9 +1219,6 @@ func (n *NakamaModule) storageUpdate(l *lua.LState) int { return } update.Patch = patch - default: - conversionError = "unrecognised update key, expects a valid set of storage updates" - return } }) @@ -1796,9 +1790,6 @@ func (n *NakamaModule) groupsUpdate(l *lua.LState) int { } p.Metadata = string(metadataBytes) - default: - conversionError = fmt.Sprintf("unknown group field: %v", k.String()) - return } }) -- GitLab