Skip to content

Commit

Permalink
Merge branch 'master' into issue-2674-compressing
Browse files Browse the repository at this point in the history
  • Loading branch information
lexi-lambda committed Sep 18, 2019
2 parents 7d4ac90 + 883ec85 commit befabf8
Show file tree
Hide file tree
Showing 26 changed files with 1,649 additions and 1,798 deletions.
42 changes: 23 additions & 19 deletions cli/commands/console.go
Expand Up @@ -3,17 +3,16 @@ package commands
import (
"fmt"
"net/http"
"net/url"
"sync"

"github.com/fatih/color"
"github.com/gin-contrib/cors"
"github.com/gin-contrib/static"
"github.com/gin-gonic/gin"
"github.com/hasura/graphql-engine/cli"
"github.com/hasura/graphql-engine/cli/migrate"
"github.com/hasura/graphql-engine/cli/migrate/api"
"github.com/hasura/graphql-engine/cli/util"
"github.com/hasura/graphql-engine/cli/version"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
"github.com/skratchdot/open-golang/open"
Expand Down Expand Up @@ -85,14 +84,9 @@ func (o *consoleOptions) run() error {
gin.SetMode(gin.ReleaseMode)

// An Engine instance with the Logger and Recovery middleware already attached.
r := gin.New()

r.Use(allowCors())
g := gin.New()

// My Router struct
router := &cRouter{
r,
}
g.Use(allowCors())

if o.EC.Version == nil {
return errors.New("cannot validate version, object is nil")
Expand All @@ -103,7 +97,18 @@ func (o *consoleOptions) run() error {
return err
}

router.setRoutes(o.EC.ServerConfig.ParsedEndpoint, o.EC.ServerConfig.AdminSecret, o.EC.MigrationDir, metadataPath, o.EC.Logger, o.EC.Version)
t, err := newMigrate(o.EC.MigrationDir, o.EC.ServerConfig.ParsedEndpoint, o.EC.ServerConfig.AdminSecret, o.EC.Logger, o.EC.Version, false)
if err != nil {
return err
}

// My Router struct
r := &cRouter{
g,
t,
}

r.setRoutes(o.EC.MigrationDir, metadataPath, o.EC.Logger)

consoleTemplateVersion := o.EC.Version.GetConsoleTemplateVersion()
consoleAssetsVersion := o.EC.Version.GetConsoleAssetsVersion()
Expand Down Expand Up @@ -134,7 +139,7 @@ func (o *consoleOptions) run() error {
o.WG = wg
wg.Add(1)
go func() {
err = router.Run(o.Address + ":" + o.APIPort)
err = r.router.Run(o.Address + ":" + o.APIPort)
if err != nil {
o.EC.Logger.WithError(err).Errorf("error listening on port %s", o.APIPort)
}
Expand Down Expand Up @@ -171,15 +176,16 @@ func (o *consoleOptions) run() error {
}

type cRouter struct {
*gin.Engine
router *gin.Engine
migrate *migrate.Migrate
}

func (router *cRouter) setRoutes(nurl *url.URL, adminSecret, migrationDir, metadataFile string, logger *logrus.Logger, v *version.Version) {
apis := router.Group("/apis")
func (r *cRouter) setRoutes(migrationDir, metadataFile string, logger *logrus.Logger) {
apis := r.router.Group("/apis")
{
apis.Use(setLogger(logger))
apis.Use(setFilePath(migrationDir))
apis.Use(setDataPath(nurl, getAdminSecretHeaderName(v), adminSecret))
apis.Use(setMigrate(r.migrate))
// Migrate api endpoints and middleware
migrateAPIs := apis.Group("/migrate")
{
Expand All @@ -198,11 +204,9 @@ func (router *cRouter) setRoutes(nurl *url.URL, adminSecret, migrationDir, metad
}
}

func setDataPath(nurl *url.URL, adminSecretHeader, adminSecret string) gin.HandlerFunc {
func setMigrate(t *migrate.Migrate) gin.HandlerFunc {
return func(c *gin.Context) {
host := getDataPath(nurl, adminSecretHeader, adminSecret)

c.Set("dbpath", host)
c.Set("migrate", t)
c.Next()
}
}
Expand Down
4 changes: 2 additions & 2 deletions cli/commands/console_test.go
@@ -1,6 +1,7 @@
package commands

import (
"os"
"testing"
"time"

Expand All @@ -19,7 +20,7 @@ func TestConsoleCmd(t *testing.T) {
ec.Spinner = spinner.New(spinner.CharSets[7], 100*time.Millisecond)
ec.ServerConfig = &cli.ServerConfig{
Endpoint: "http://localhost:8080",
AdminSecret: "",
AdminSecret: os.Getenv("HASURA_GRAPHQL_TEST_ADMIN_SECRET"),
}
ec.MetadataFile = []string{"metadata.yaml"}

Expand All @@ -33,7 +34,6 @@ func TestConsoleCmd(t *testing.T) {
if err != nil {
t.Fatalf("prepare failed: %v", err)
}

opts := &consoleOptions{
EC: ec,
APIPort: "9693",
Expand Down
2 changes: 1 addition & 1 deletion cli/commands/metadata_apply.go
Expand Up @@ -57,7 +57,7 @@ type metadataApplyOptions struct {
}

func (o *metadataApplyOptions) run() error {
migrateDrv, err := newMigrate(o.EC.MigrationDir, o.EC.ServerConfig.ParsedEndpoint, o.EC.ServerConfig.AdminSecret, o.EC.Logger, o.EC.Version)
migrateDrv, err := newMigrate(o.EC.MigrationDir, o.EC.ServerConfig.ParsedEndpoint, o.EC.ServerConfig.AdminSecret, o.EC.Logger, o.EC.Version, true)
if err != nil {
return err
}
Expand Down
2 changes: 1 addition & 1 deletion cli/commands/metadata_clear.go
Expand Up @@ -61,7 +61,7 @@ type metadataClearOptions struct {
}

func (o *metadataClearOptions) run() error {
migrateDrv, err := newMigrate(o.EC.MigrationDir, o.EC.ServerConfig.ParsedEndpoint, o.EC.ServerConfig.AdminSecret, o.EC.Logger, o.EC.Version)
migrateDrv, err := newMigrate(o.EC.MigrationDir, o.EC.ServerConfig.ParsedEndpoint, o.EC.ServerConfig.AdminSecret, o.EC.Logger, o.EC.Version, true)
if err != nil {
return err
}
Expand Down
2 changes: 1 addition & 1 deletion cli/commands/metadata_export.go
Expand Up @@ -64,7 +64,7 @@ type metadataExportOptions struct {
}

func (o *metadataExportOptions) run() error {
migrateDrv, err := newMigrate(o.EC.MigrationDir, o.EC.ServerConfig.ParsedEndpoint, o.EC.ServerConfig.AdminSecret, o.EC.Logger, o.EC.Version)
migrateDrv, err := newMigrate(o.EC.MigrationDir, o.EC.ServerConfig.ParsedEndpoint, o.EC.ServerConfig.AdminSecret, o.EC.Logger, o.EC.Version, true)
if err != nil {
return err
}
Expand Down
2 changes: 1 addition & 1 deletion cli/commands/metadata_reload.go
Expand Up @@ -57,7 +57,7 @@ type metadataReloadOptions struct {
}

func (o *metadataReloadOptions) run() error {
migrateDrv, err := newMigrate(o.EC.MigrationDir, o.EC.ServerConfig.ParsedEndpoint, o.EC.ServerConfig.AdminSecret, o.EC.Logger, o.EC.Version)
migrateDrv, err := newMigrate(o.EC.MigrationDir, o.EC.ServerConfig.ParsedEndpoint, o.EC.ServerConfig.AdminSecret, o.EC.Logger, o.EC.Version, true)
if err != nil {
return err
}
Expand Down
4 changes: 2 additions & 2 deletions cli/commands/migrate.go
Expand Up @@ -34,10 +34,10 @@ func NewMigrateCmd(ec *cli.ExecutionContext) *cobra.Command {
return migrateCmd
}

func newMigrate(dir string, db *url.URL, adminSecretValue string, logger *logrus.Logger, v *version.Version) (*migrate.Migrate, error) {
func newMigrate(dir string, db *url.URL, adminSecretValue string, logger *logrus.Logger, v *version.Version, isCmd bool) (*migrate.Migrate, error) {
dbURL := getDataPath(db, getAdminSecretHeaderName(v), adminSecretValue)
fileURL := getFilePath(dir)
t, err := migrate.New(fileURL.String(), dbURL.String(), true, logger)
t, err := migrate.New(fileURL.String(), dbURL.String(), isCmd, logger)
if err != nil {
return nil, errors.Wrap(err, "cannot create migrate instance")
}
Expand Down
2 changes: 1 addition & 1 deletion cli/commands/migrate_apply.go
Expand Up @@ -71,7 +71,7 @@ func (o *migrateApplyOptions) run() error {
return errors.Wrap(err, "error validating flags")
}

migrateDrv, err := newMigrate(o.EC.MigrationDir, o.EC.ServerConfig.ParsedEndpoint, o.EC.ServerConfig.AdminSecret, o.EC.Logger, o.EC.Version)
migrateDrv, err := newMigrate(o.EC.MigrationDir, o.EC.ServerConfig.ParsedEndpoint, o.EC.ServerConfig.AdminSecret, o.EC.Logger, o.EC.Version, true)
if err != nil {
return err
}
Expand Down
2 changes: 1 addition & 1 deletion cli/commands/migrate_create.go
Expand Up @@ -109,7 +109,7 @@ func (o *migrateCreateOptions) run() (version int64, err error) {

var migrateDrv *migrate.Migrate
if o.sqlServer || o.metaDataServer {
migrateDrv, err = newMigrate(o.EC.MigrationDir, o.EC.ServerConfig.ParsedEndpoint, o.EC.ServerConfig.AdminSecret, o.EC.Logger, o.EC.Version)
migrateDrv, err = newMigrate(o.EC.MigrationDir, o.EC.ServerConfig.ParsedEndpoint, o.EC.ServerConfig.AdminSecret, o.EC.Logger, o.EC.Version, true)
if err != nil {
return 0, errors.Wrap(err, "cannot create migrate instance")
}
Expand Down
2 changes: 1 addition & 1 deletion cli/commands/migrate_status.go
Expand Up @@ -58,7 +58,7 @@ type migrateStatusOptions struct {
}

func (o *migrateStatusOptions) run() (*migrate.Status, error) {
migrateDrv, err := newMigrate(o.EC.MigrationDir, o.EC.ServerConfig.ParsedEndpoint, o.EC.ServerConfig.AdminSecret, o.EC.Logger, o.EC.Version)
migrateDrv, err := newMigrate(o.EC.MigrationDir, o.EC.ServerConfig.ParsedEndpoint, o.EC.ServerConfig.AdminSecret, o.EC.Logger, o.EC.Version, true)
if err != nil {
return nil, err
}
Expand Down
34 changes: 3 additions & 31 deletions cli/migrate/api/metadata.go
Expand Up @@ -4,57 +4,29 @@ import (
"encoding/json"
"io/ioutil"
"net/http"
"net/url"
"strings"

"github.com/ghodss/yaml"
"github.com/gin-gonic/gin"
"github.com/hasura/graphql-engine/cli/migrate"
"github.com/sirupsen/logrus"
)

func MetadataAPI(c *gin.Context) {
// Get File url
sourcePtr, ok := c.Get("filedir")
if !ok {
return
}

sourceURL := sourcePtr.(*url.URL)

// Get hasuradb url
databasePtr, ok := c.Get("dbpath")
// Get migrate instance
migratePtr, ok := c.Get("migrate")
if !ok {
return
}

// Convert to url.URL
databaseURL := databasePtr.(*url.URL)

// Get Logger
loggerPtr, ok := c.Get("logger")
if !ok {
return
}
logger := loggerPtr.(*logrus.Logger)
t := migratePtr.(*migrate.Migrate)

metadataFilePtr, ok := c.Get("metadataFile")
if !ok {
return
}
metadataFile := metadataFilePtr.(string)

// Create new migrate
t, err := migrate.New(sourceURL.String(), databaseURL.String(), false, logger)
if err != nil {
if strings.HasPrefix(err.Error(), DataAPIError) {
c.JSON(http.StatusInternalServerError, &Response{Code: "data_api_error", Message: err.Error()})
return
}
c.JSON(http.StatusInternalServerError, &Response{Code: "internal_error", Message: err.Error()})
return
}

// Switch on request method
switch c.Request.Method {
case "GET":
Expand Down
43 changes: 14 additions & 29 deletions cli/migrate/api/migrate.go
Expand Up @@ -32,14 +32,12 @@ type Request struct {
}

func MigrateAPI(c *gin.Context) {
// Get File url
sourcePtr, ok := c.Get("filedir")
migratePtr, ok := c.Get("migrate")
if !ok {
return
}

// Get hasuradb url
databasePtr, ok := c.Get("dbpath")
// Get File url
sourcePtr, ok := c.Get("filedir")
if !ok {
return
}
Expand All @@ -51,21 +49,10 @@ func MigrateAPI(c *gin.Context) {
}

// Convert to url.URL
databaseURL := databasePtr.(*url.URL)
t := migratePtr.(*migrate.Migrate)
sourceURL := sourcePtr.(*url.URL)
logger := loggerPtr.(*logrus.Logger)

// Create new migrate
t, err := migrate.New(sourceURL.String(), databaseURL.String(), false, logger)
if err != nil {
if strings.HasPrefix(err.Error(), DataAPIError) {
c.JSON(http.StatusInternalServerError, &Response{Code: "data_api_error", Message: err.Error()})
return
}
c.JSON(http.StatusInternalServerError, &Response{Code: "internal_error", Message: err.Error()})
return
}

// Switch on request method
switch c.Request.Method {
case "POST":
Expand All @@ -82,7 +69,7 @@ func MigrateAPI(c *gin.Context) {
timestamp := startTime.UnixNano() / int64(time.Millisecond)

createOptions := cmd.New(timestamp, request.Name, sourceURL.Path)
err = createOptions.SetMetaUp(request.Up)
err := createOptions.SetMetaUp(request.Up)
if err != nil {
c.JSON(http.StatusInternalServerError, &Response{Code: "create_file_error", Message: err.Error()})
return
Expand All @@ -99,25 +86,23 @@ func MigrateAPI(c *gin.Context) {
return
}

defer func() {
if err != nil {
err = createOptions.Delete()
if err != nil {
logger.Debug(err)
}
}
}()

// Rescan file system
err = t.ReScan()
if err != nil {
deleteErr := createOptions.Delete()
if deleteErr != nil {
c.JSON(http.StatusInternalServerError, &Response{Code: "delete_file_error", Message: deleteErr.Error()})
return
}
c.JSON(http.StatusInternalServerError, &Response{Code: "internal_error", Message: err.Error()})
return
}

if err = t.Migrate(uint64(timestamp), "up"); err != nil {
deleteErr := createOptions.Delete()
if deleteErr != nil {
c.JSON(http.StatusInternalServerError, &Response{Code: "delete_file_error", Message: deleteErr.Error()})
return
}

if strings.HasPrefix(err.Error(), DataAPIError) {
c.JSON(http.StatusBadRequest, &Response{Code: "data_api_error", Message: strings.TrimPrefix(err.Error(), DataAPIError)})
return
Expand Down

0 comments on commit befabf8

Please sign in to comment.