9
9
"strings"
10
10
"time"
11
11
12
- "github.com/alecthomas/kingpin"
12
+ "github.com/spf13/cobra"
13
+ "github.com/spf13/viper"
13
14
"go.mongodb.org/mongo-driver/bson"
14
15
"go.mongodb.org/mongo-driver/bson/primitive"
15
16
"go.mongodb.org/mongo-driver/mongo"
@@ -29,43 +30,64 @@ import (
29
30
30
31
var logger = stdlog .New (os .Stdout , "" , stdlog .Ltime )
31
32
32
- func main () {
33
- ctx := context .Background ()
34
-
35
- app := kingpin .New ("ensure-oplog" , "ensure oplog chunks" )
36
- cmd := app .Command ("run" , "" ).Default ().Hidden ()
37
- uri := cmd .Flag ("mongodb-uri" , "mongodb URI" ).Envar ("PBM_MONGODB_URI" ).String ()
38
- fromS := cmd .Flag ("from" , "first op time" ).String ()
39
- tillS := cmd .Flag ("till" , "last op time" ).String ()
40
- _ , err := app .DefaultEnvars ().Parse (os .Args [1 :])
41
- if err != nil {
42
- stdlog .Fatal (err )
43
- }
44
-
45
- fromTS , err := parseTS (* fromS )
46
- if err != nil {
47
- stdlog .Fatalf ("parse from time: %s" , err .Error ())
48
- }
49
- tillTS , err := parseTS (* tillS )
50
- if err != nil {
51
- stdlog .Fatalf ("parse till time: %s" , err .Error ())
52
- }
53
-
54
- t , err := connTopo (ctx , * uri )
55
- if err != nil {
56
- stdlog .Fatalf ("getTopo: %s" , err .Error ())
57
- }
58
-
59
- switch t {
60
- case topoMongos :
61
- err = ensureClusterOplog (ctx , * uri , fromTS , tillTS )
62
- case topoReplset :
63
- err = ensureReplsetOplog (ctx , * uri , fromTS , tillTS )
64
- default :
65
- err = errors .New ("unsupported connection" )
66
- }
33
+ type rootOpts struct {
34
+ mURL string
35
+ fromS string
36
+ tillS string
37
+ }
67
38
68
- if err != nil {
39
+ func main () {
40
+ rootOptions := rootOpts {}
41
+ rootCmd := & cobra.Command {
42
+ Use : "ensure-oplog" ,
43
+ Short : "ensure oplog chunks" ,
44
+ SilenceUsage : true ,
45
+ RunE : func (cmd * cobra.Command , args []string ) error {
46
+ ctx := context .Background ()
47
+
48
+ if rootOptions .mURL == "" {
49
+ rootOptions .mURL = viper .GetString ("mongodb-uri" )
50
+ }
51
+
52
+ fromTS , err := parseTS (rootOptions .fromS )
53
+ if err != nil {
54
+ return errors .Wrap (err , "parse from time" )
55
+ }
56
+ tillTS , err := parseTS (rootOptions .tillS )
57
+ if err != nil {
58
+ return errors .Wrap (err , "parse till time" )
59
+ }
60
+
61
+ t , err := connTopo (ctx , rootOptions .mURL )
62
+ if err != nil {
63
+ return errors .Wrap (err , "getTopo" )
64
+ }
65
+
66
+ switch t {
67
+ case topoMongos :
68
+ err = ensureClusterOplog (ctx , rootOptions .mURL , fromTS , tillTS )
69
+ case topoReplset :
70
+ err = ensureReplsetOplog (ctx , rootOptions .mURL , fromTS , tillTS )
71
+ default :
72
+ err = errors .New ("unsupported connection" )
73
+ }
74
+
75
+ if err != nil {
76
+ return err
77
+ }
78
+
79
+ return nil
80
+ },
81
+ }
82
+
83
+ rootCmd .PersistentFlags ().StringVar (& rootOptions .mURL , "mongodb-uri" , "" , "MongoDB connection string" )
84
+ _ = viper .BindPFlag ("mongodb-uri" , rootCmd .PersistentFlags ().Lookup ("mongodb-uri" ))
85
+ _ = viper .BindEnv ("mongodb-uri" , "PBM_MONGODB_URI" )
86
+
87
+ rootCmd .Flags ().StringVar (& rootOptions .fromS , "from" , "" , "first op time" )
88
+ rootCmd .Flags ().StringVar (& rootOptions .tillS , "till" , "" , "last op time" )
89
+
90
+ if err := rootCmd .Execute (); err != nil {
69
91
stdlog .Fatal (err )
70
92
}
71
93
}
0 commit comments