diff options
author | Ramon Fernandez <ramon@mongodb.com> | 2016-08-25 16:34:34 -0400 |
---|---|---|
committer | Ramon Fernandez <ramon@mongodb.com> | 2016-08-25 16:54:18 -0400 |
commit | c330c9991ab45e7d0685d53e699ef26dba065660 (patch) | |
tree | 3dc5cd06b5f6c7eaaa4cb20cbe763504c14a772b /src/mongo/gotools/bsondump/main/bsondump.go | |
parent | eb62b862d5ebf179a1bcd9f394070e69c30188ab (diff) | |
download | mongo-c330c9991ab45e7d0685d53e699ef26dba065660.tar.gz |
Import tools: 5b883d86fdb4df55036d5dba2ca6f9dfa0750b44 from branch v3.3
ref: 1ac1389bda..5b883d86fd
for: 3.3.12
SERVER-25814 Initial vendor import: tools
Diffstat (limited to 'src/mongo/gotools/bsondump/main/bsondump.go')
-rw-r--r-- | src/mongo/gotools/bsondump/main/bsondump.go | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/src/mongo/gotools/bsondump/main/bsondump.go b/src/mongo/gotools/bsondump/main/bsondump.go new file mode 100644 index 00000000000..2613d3a014a --- /dev/null +++ b/src/mongo/gotools/bsondump/main/bsondump.go @@ -0,0 +1,96 @@ +// Main package for the bsondump tool. +package main + +import ( + "github.com/mongodb/mongo-tools/bsondump" + "github.com/mongodb/mongo-tools/common/db" + "github.com/mongodb/mongo-tools/common/log" + "github.com/mongodb/mongo-tools/common/options" + "github.com/mongodb/mongo-tools/common/signals" + "github.com/mongodb/mongo-tools/common/util" + "os" +) + +func main() { + // initialize command-line opts + opts := options.New("bsondump", bsondump.Usage, options.EnabledOptions{}) + bsonDumpOpts := &bsondump.BSONDumpOptions{} + opts.AddOptions(bsonDumpOpts) + + args, err := opts.Parse() + if err != nil { + log.Logvf(log.Always, "error parsing command line options: %v", err) + log.Logvf(log.Always, "try 'bsondump --help' for more information") + os.Exit(util.ExitBadOptions) + } + + // print help, if specified + if opts.PrintHelp(false) { + return + } + + // print version, if specified + if opts.PrintVersion() { + return + } + + log.SetVerbosity(opts.Verbosity) + signals.Handle() + + if len(args) > 1 { + log.Logvf(log.Always, "too many positional arguments: %v", args) + log.Logvf(log.Always, "try 'bsondump --help' for more information") + os.Exit(util.ExitBadOptions) + } + + // If the user specified a bson input file + if len(args) == 1 { + if bsonDumpOpts.BSONFileName != "" { + log.Logvf(log.Always, "Cannot specify both a positional argument and --bsonFile") + os.Exit(util.ExitBadOptions) + } + + bsonDumpOpts.BSONFileName = args[0] + } + + dumper := bsondump.BSONDump{ + ToolOptions: opts, + BSONDumpOptions: bsonDumpOpts, + } + + reader, err := bsonDumpOpts.GetBSONReader() + if err != nil { + log.Logvf(log.Always, "Getting BSON Reader Failed: %v", err) + os.Exit(util.ExitError) + } + dumper.BSONSource = db.NewBSONSource(reader) + defer dumper.BSONSource.Close() + + writer, err := bsonDumpOpts.GetWriter() + if err != nil { + log.Logvf(log.Always, "Getting Writer Failed: %v", err) + os.Exit(util.ExitError) + } + dumper.Out = writer + defer dumper.Out.Close() + + log.Logvf(log.DebugLow, "running bsondump with --objcheck: %v", bsonDumpOpts.ObjCheck) + + if len(bsonDumpOpts.Type) != 0 && bsonDumpOpts.Type != "debug" && bsonDumpOpts.Type != "json" { + log.Logvf(log.Always, "Unsupported output type '%v'. Must be either 'debug' or 'json'", bsonDumpOpts.Type) + os.Exit(util.ExitBadOptions) + } + + var numFound int + if bsonDumpOpts.Type == "debug" { + numFound, err = dumper.Debug() + } else { + numFound, err = dumper.JSON() + } + + log.Logvf(log.Always, "%v objects found", numFound) + if err != nil { + log.Logv(log.Always, err.Error()) + os.Exit(util.ExitError) + } +} |