github.com/mpchadwick/dbanon@v0.7.1/main.go (about) 1 package main 2 3 import ( 4 "bufio" 5 "flag" 6 "fmt" 7 "github.com/blang/semver" 8 "github.com/mpchadwick/dbanon/src" 9 "github.com/rhysd/go-github-selfupdate/selfupdate" 10 "github.com/sirupsen/logrus" 11 "io/ioutil" 12 "log" 13 "os" 14 "runtime/pprof" 15 ) 16 17 var version string 18 19 const slug = "mpchadwick/dbanon" 20 21 func selfUpdate() error { 22 previous := semver.MustParse(version) 23 latest, err := selfupdate.UpdateSelf(previous, slug) 24 if err != nil { 25 return err 26 } 27 28 if previous.Equals(latest.Version) { 29 fmt.Println("Current binary is the latest version", version) 30 } else { 31 fmt.Println("Update successfully done to version", latest.Version) 32 fmt.Println("Release note:\n", latest.ReleaseNotes) 33 } 34 return nil 35 } 36 37 func main() { 38 flag.CommandLine = flag.NewFlagSet(os.Args[0], flag.ExitOnError) 39 40 requested := flag.String("config", "", "Configuration to use. magento2 is included out-of-box. Alternately, supply path to file") 41 update := flag.Bool("update", false, "Auto update dbanon to the newest version") 42 ver := flag.Bool("version", false, "Get current version") 43 silent := flag.Bool("silent", false, "Disable all logging") 44 logFile := flag.String("log-file", "", "File to write logs to") 45 logLevel := flag.String("log-level", "", "Specify desired log level") 46 profile := flag.Bool("profile", false, "Generate a profile") 47 48 flag.Parse() 49 50 if *profile { 51 profF, _ := os.Create("dbanon.prof") 52 pprof.StartCPUProfile(profF) 53 defer pprof.StopCPUProfile() 54 } 55 56 if *ver { 57 fmt.Println(version) 58 os.Exit(0) 59 } 60 61 if *update { 62 if err := selfUpdate(); err != nil { 63 fmt.Fprintln(os.Stderr, err) 64 os.Exit(1) 65 } 66 os.Exit(0) 67 } 68 69 dbanonLogger := dbanon.GetLogger() 70 if !*silent { 71 f := "dbanon.log" 72 if *logFile != "" { 73 f = *logFile 74 } 75 file, _ := os.OpenFile(f, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) 76 dbanonLogger.SetOutput(file) 77 } else { 78 dbanonLogger.SetOutput(ioutil.Discard) 79 } 80 81 if *logLevel != "" { 82 level, err := logrus.ParseLevel(*logLevel) 83 if err != nil { 84 dbanonLogger.Error(err) 85 } else { 86 dbanonLogger.SetLevel(level) 87 } 88 } 89 90 config, err := dbanon.NewConfig(*requested) 91 if err != nil { 92 fmt.Fprintln(os.Stderr, err) 93 os.Exit(1) 94 } 95 96 // sqlparser can be noisy 97 // https://github.com/xwb1989/sqlparser/blob/120387863bf27d04bc07db8015110a6e96d0146c/ast.go#L52 98 // We don't want to hear about it 99 log.SetOutput(ioutil.Discard) 100 reader := bufio.NewReader(os.Stdin) 101 102 args := flag.Args() 103 mode := "anonymize" 104 if len(args) > 0 && args[0] == "map-eav" { 105 mode = "map-eav" 106 } 107 108 provider := dbanon.NewProvider() 109 eav := dbanon.NewEav(config) 110 processor := dbanon.NewLineProcessor(mode, config, provider, eav) 111 112 for { 113 text, err := reader.ReadString('\n') 114 result := processor.ProcessLine(text) 115 if mode == "anonymize" { 116 fmt.Print(result) 117 } 118 119 if err != nil { 120 break 121 } 122 } 123 124 if mode == "map-eav" { 125 out, _ := eav.Config.String() 126 fmt.Print(string(out)) 127 os.Exit(0) 128 } 129 }