mirror of
https://github.com/zhigang1992/graphql-engine.git
synced 2026-05-22 15:35:20 +08:00
committed by
Shahidh K Muhammed
parent
421606f124
commit
0993740786
@@ -20,6 +20,7 @@ func NewMetadataCmd(ec *cli.ExecutionContext) *cobra.Command {
|
||||
metadataCmd.AddCommand(
|
||||
newMetadataExportCmd(ec),
|
||||
newMetadataResetCmd(ec),
|
||||
newMetadataReloadCmd(ec),
|
||||
newMetadataApplyCmd(ec),
|
||||
)
|
||||
return metadataCmd
|
||||
@@ -52,6 +53,11 @@ func executeMetadata(cmd string, t *migrate.Migrate, metadataPath string) error
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "Cannot reset Metadata")
|
||||
}
|
||||
case "reload":
|
||||
err := t.ReloadMetadata()
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "Cannot reload Metadata")
|
||||
}
|
||||
case "apply":
|
||||
data, err := ioutil.ReadFile(metadataPath)
|
||||
if err != nil {
|
||||
|
||||
59
cli/commands/metadata_reload.go
Normal file
59
cli/commands/metadata_reload.go
Normal file
@@ -0,0 +1,59 @@
|
||||
package commands
|
||||
|
||||
import (
|
||||
"github.com/hasura/graphql-engine/cli"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/spf13/viper"
|
||||
)
|
||||
|
||||
func newMetadataReloadCmd(ec *cli.ExecutionContext) *cobra.Command {
|
||||
v := viper.New()
|
||||
opts := &metadataReloadOptions{
|
||||
EC: ec,
|
||||
actionType: "reload",
|
||||
}
|
||||
|
||||
metadataReloadCmd := &cobra.Command{
|
||||
Use: "reload",
|
||||
Short: "Reload Hasura GraphQL Engine metadata on the database",
|
||||
Example: ` # Reload all the metadata information from database:
|
||||
hasura metadata reload`,
|
||||
SilenceUsage: true,
|
||||
PreRunE: func(cmd *cobra.Command, args []string) error {
|
||||
ec.Viper = v
|
||||
return ec.Validate()
|
||||
},
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
return opts.run()
|
||||
},
|
||||
}
|
||||
|
||||
f := metadataReloadCmd.Flags()
|
||||
f.String("endpoint", "", "http(s) endpoint for Hasura GraphQL Engine")
|
||||
f.String("access-key", "", "access key for Hasura GraphQL Engine")
|
||||
|
||||
// need to create a new viper because https://github.com/spf13/viper/issues/233
|
||||
v.BindPFlag("endpoint", f.Lookup("endpoint"))
|
||||
v.BindPFlag("access_key", f.Lookup("access-key"))
|
||||
|
||||
return metadataReloadCmd
|
||||
}
|
||||
|
||||
type metadataReloadOptions struct {
|
||||
EC *cli.ExecutionContext
|
||||
|
||||
actionType string
|
||||
}
|
||||
|
||||
func (o *metadataReloadOptions) run() error {
|
||||
migrateDrv, err := newMigrate(o.EC.MigrationDir, o.EC.Config.ParsedEndpoint, o.EC.Config.AccessKey, o.EC.Logger)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = executeMetadata(o.actionType, migrateDrv, o.EC.MetadataFile)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "Cannot reload metadata")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
34
cli/commands/metadata_reload_test.go
Normal file
34
cli/commands/metadata_reload_test.go
Normal file
@@ -0,0 +1,34 @@
|
||||
package commands
|
||||
|
||||
import (
|
||||
"net/url"
|
||||
"os"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/briandowns/spinner"
|
||||
"github.com/hasura/graphql-engine/cli"
|
||||
"github.com/sirupsen/logrus/hooks/test"
|
||||
)
|
||||
|
||||
func testMetadataReload(t *testing.T, metadataFile string, endpoint *url.URL) {
|
||||
logger, _ := test.NewNullLogger()
|
||||
opts := &metadataReloadOptions{
|
||||
EC: &cli.ExecutionContext{
|
||||
Logger: logger,
|
||||
Spinner: spinner.New(spinner.CharSets[7], 100*time.Millisecond),
|
||||
MetadataFile: metadataFile,
|
||||
Config: &cli.HasuraGraphQLConfig{
|
||||
Endpoint: endpoint.String(),
|
||||
AccessKey: os.Getenv("HASURA_GRAPHQL_TEST_ACCESS_KEY"),
|
||||
ParsedEndpoint: endpoint,
|
||||
},
|
||||
},
|
||||
actionType: "reload",
|
||||
}
|
||||
|
||||
err := opts.run()
|
||||
if err != nil {
|
||||
t.Fatalf("failed reloading metadata: %v", err)
|
||||
}
|
||||
}
|
||||
@@ -63,6 +63,32 @@ func (h *HasuraDB) ResetMetadata() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// ReloadMetadata - Reload Hasura GraphQL Engine metadata on the database
|
||||
func (h *HasuraDB) ReloadMetadata() error {
|
||||
query := HasuraInterfaceQuery{
|
||||
Type: "reload_metadata",
|
||||
Args: HasuraArgs{},
|
||||
}
|
||||
|
||||
resp, body, err := h.sendQuery(query)
|
||||
if err != nil {
|
||||
h.logger.Debug(err)
|
||||
return err
|
||||
}
|
||||
h.logger.Debug("response: ", string(body))
|
||||
|
||||
var horror HasuraError
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
err = json.Unmarshal(body, &horror)
|
||||
if err != nil {
|
||||
h.logger.Debug(err)
|
||||
return err
|
||||
}
|
||||
return horror.Error(h.config.isCMD)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (h *HasuraDB) ApplyMetadata(data interface{}) error {
|
||||
query := HasuraInterfaceBulk{
|
||||
Type: "bulk",
|
||||
|
||||
@@ -5,6 +5,8 @@ type MetadataDriver interface {
|
||||
|
||||
ResetMetadata() error
|
||||
|
||||
ReloadMetadata() error
|
||||
|
||||
ApplyMetadata(data interface{}) error
|
||||
|
||||
Query(data []interface{}) error
|
||||
|
||||
@@ -311,6 +311,11 @@ func (m *Migrate) ResetMetadata() error {
|
||||
return m.databaseDrv.ResetMetadata()
|
||||
}
|
||||
|
||||
// ReloadMetadata - Reload metadata on the database
|
||||
func (m *Migrate) ReloadMetadata() error {
|
||||
return m.databaseDrv.ReloadMetadata()
|
||||
}
|
||||
|
||||
func (m *Migrate) ApplyMetadata(data interface{}) error {
|
||||
return m.databaseDrv.ApplyMetadata(data)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user