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  }