From b2dd00dd5b83fc7e8b311a55f5a2536e4f3d45a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Espino?= Date: Wed, 7 Mar 2018 20:04:18 +0000 Subject: Adding enterprise commands support (#8327) --- cmd/commands/import.go | 142 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 cmd/commands/import.go (limited to 'cmd/commands/import.go') diff --git a/cmd/commands/import.go b/cmd/commands/import.go new file mode 100644 index 000000000..4058d175a --- /dev/null +++ b/cmd/commands/import.go @@ -0,0 +1,142 @@ +// Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved. +// See License.txt for license information. + +package commands + +import ( + "errors" + "os" + + "fmt" + + "github.com/mattermost/mattermost-server/cmd" + "github.com/spf13/cobra" +) + +var ImportCmd = &cobra.Command{ + Use: "import", + Short: "Import data.", +} + +var SlackImportCmd = &cobra.Command{ + Use: "slack [team] [file]", + Short: "Import a team from Slack.", + Long: "Import a team from a Slack export zip file.", + Example: " import slack myteam slack_export.zip", + RunE: slackImportCmdF, +} + +var BulkImportCmd = &cobra.Command{ + Use: "bulk [file]", + Short: "Import bulk data.", + Long: "Import data from a Mattermost Bulk Import File.", + Example: " import bulk bulk_data.json", + RunE: bulkImportCmdF, +} + +func init() { + BulkImportCmd.Flags().Bool("apply", false, "Save the import data to the database. Use with caution - this cannot be reverted.") + BulkImportCmd.Flags().Bool("validate", false, "Validate the import data without making any changes to the system.") + BulkImportCmd.Flags().Int("workers", 2, "How many workers to run whilst doing the import.") + + ImportCmd.AddCommand( + BulkImportCmd, + SlackImportCmd, + ) + cmd.RootCmd.AddCommand(ImportCmd) +} + +func slackImportCmdF(command *cobra.Command, args []string) error { + a, err := cmd.InitDBCommandContextCobra(command) + if err != nil { + return err + } + + if len(args) != 2 { + return errors.New("Incorrect number of arguments.") + } + + team := getTeamFromTeamArg(a, args[0]) + if team == nil { + return errors.New("Unable to find team '" + args[0] + "'") + } + + fileReader, err := os.Open(args[1]) + if err != nil { + return err + } + defer fileReader.Close() + + fileInfo, err := fileReader.Stat() + if err != nil { + return err + } + + cmd.CommandPrettyPrintln("Running Slack Import. This may take a long time for large teams or teams with many messages.") + + a.SlackImport(fileReader, fileInfo.Size(), team.Id) + + cmd.CommandPrettyPrintln("Finished Slack Import.") + + return nil +} + +func bulkImportCmdF(command *cobra.Command, args []string) error { + a, err := cmd.InitDBCommandContextCobra(command) + if err != nil { + return err + } + + apply, err := command.Flags().GetBool("apply") + if err != nil { + return errors.New("Apply flag error") + } + + validate, err := command.Flags().GetBool("validate") + if err != nil { + return errors.New("Validate flag error") + } + + workers, err := command.Flags().GetInt("workers") + if err != nil { + return errors.New("Workers flag error") + } + + if len(args) != 1 { + return errors.New("Incorrect number of arguments.") + } + + fileReader, err := os.Open(args[0]) + if err != nil { + return err + } + defer fileReader.Close() + + if apply && validate { + cmd.CommandPrettyPrintln("Use only one of --apply or --validate.") + return nil + } else if apply && !validate { + cmd.CommandPrettyPrintln("Running Bulk Import. This may take a long time.") + } else { + cmd.CommandPrettyPrintln("Running Bulk Import Data Validation.") + cmd.CommandPrettyPrintln("** This checks the validity of the entities in the data file, but does not persist any changes **") + cmd.CommandPrettyPrintln("Use the --apply flag to perform the actual data import.") + } + + cmd.CommandPrettyPrintln("") + + if err, lineNumber := a.BulkImport(fileReader, !apply, workers); err != nil { + cmd.CommandPrettyPrintln(err.Error()) + if lineNumber != 0 { + cmd.CommandPrettyPrintln(fmt.Sprintf("Error occurred on data file line %v", lineNumber)) + } + } else { + if apply { + cmd.CommandPrettyPrintln("Finished Bulk Import.") + } else { + cmd.CommandPrettyPrintln("Validation complete. You can now perform the import by rerunning this command with the --apply flag.") + } + } + + return nil +} -- cgit v1.2.3-1-g7c22