From 12a4ecdcb19a8ef7631f3fca930fa900702ab063 Mon Sep 17 00:00:00 2001 From: Ethan Mosbaugh Date: Fri, 13 Sep 2019 01:53:46 +0000 Subject: [PATCH] wrap errors for debugging purposes --- pkg/generate/generate.go | 23 +++++++----------- pkg/watcher/watcher.go | 52 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 14 deletions(-) create mode 100644 pkg/watcher/watcher.go diff --git a/pkg/generate/generate.go b/pkg/generate/generate.go index 621fa6aaf..ea293a895 100644 --- a/pkg/generate/generate.go +++ b/pkg/generate/generate.go @@ -6,6 +6,7 @@ import ( "path/filepath" "strings" + "github.com/pkg/errors" schemasv1alpha3 "github.com/schemahero/schemahero/pkg/apis/schemas/v1alpha3" "github.com/schemahero/schemahero/pkg/database/interfaces" "github.com/schemahero/schemahero/pkg/database/mysql" @@ -32,47 +33,42 @@ func (g *Generator) RunSync() error { if g.Viper.GetString("driver") == "postgres" { pgDb, err := postgres.Connect(g.Viper.GetString("uri")) if err != nil { - return err + return errors.Wrap(err, "postgres connect") } db = pgDb } else if g.Viper.GetString("driver") == "mysql" { mysqlDb, err := mysql.Connect(g.Viper.GetString("uri")) if err != nil { - return err + return errors.Wrap(err, "mysql connect") } db = mysqlDb } tableNames, err := db.ListTables() if err != nil { - fmt.Printf("%#v\n", err) - return err + return errors.Wrap(err, "list tables") } filesWritten := make([]string, 0, 0) for _, tableName := range tableNames { primaryKey, err := db.GetTablePrimaryKey(tableName) if err != nil { - fmt.Printf("%#v\n", err) - return err + return errors.Wrap(err, "get table primary key") } foreignKeys, err := db.ListTableForeignKeys(g.Viper.GetString("dbname"), tableName) if err != nil { - fmt.Printf("%#v\n", err) - return err + return errors.Wrap(err, "list table foreign keys") } indexes, err := db.ListTableIndexes(g.Viper.GetString("dbname"), tableName) if err != nil { - fmt.Printf("%#v\n", err) - return err + return errors.Wrap(err, "list table indexes") } columns, err := db.GetTableSchema(tableName) if err != nil { - fmt.Printf("%#v\n", err) - return err + return errors.Wrap(err, "get table schema") } var primaryKeyColumns []string @@ -81,8 +77,7 @@ func (g *Generator) RunSync() error { } tableYAML, err := generateTableYAML(g.Viper.GetString("driver"), g.Viper.GetString("dbname"), tableName, primaryKeyColumns, foreignKeys, indexes, columns) if err != nil { - fmt.Printf("%#v\n", err) - return err + return errors.Wrap(err, "generate table yaml") } // If there was a outputdir set, write it, else print it diff --git a/pkg/watcher/watcher.go b/pkg/watcher/watcher.go new file mode 100644 index 000000000..9933c0275 --- /dev/null +++ b/pkg/watcher/watcher.go @@ -0,0 +1,52 @@ +package watcher + +import ( + "fmt" + "time" + + "github.com/pkg/errors" + "github.com/schemahero/schemahero/pkg/database/interfaces" + "github.com/schemahero/schemahero/pkg/database/mysql" + "github.com/schemahero/schemahero/pkg/database/postgres" + "github.com/spf13/viper" +) + +type Watcher struct { + Viper *viper.Viper +} + +func NewWatcher() *Watcher { + return &Watcher{ + Viper: viper.GetViper(), + } +} + +func (w *Watcher) RunSync() error { + fmt.Printf("connecting to %s\n", w.Viper.GetString("uri")) + + var conn interfaces.SchemaHeroDatabaseConnection + + if w.Viper.GetString("driver") == "postgres" { + c, err := postgres.Connect(w.Viper.GetString("uri")) + if err != nil { + return errors.Wrap(err, "postgres connect") + } + + conn = c + } else if w.Viper.GetString("driver") == "mysql" { + c, err := mysql.Connect(w.Viper.GetString("uri")) + if err != nil { + return errors.Wrap(err, "mysql connect") + } + + conn = c + } + + for { + if _, err := conn.CheckAlive(w.Viper.GetString("namespace"), w.Viper.GetString("instance")); err != nil { + return errors.Wrap(err, "check alive") + } + + time.Sleep(time.Second * 10) + } +}