func run() int { modes := map[string]cmd.Mode{ "graple": grapleMode, "fastmax": fastmaxMode, "musk": muskMode, "ospace": ospaceMode, "premusk": premuskMode, "uniprox": uniproxMode, } args, optargs, err := getopt.GetOpt( os.Args[1:], "ho:c:p:", []string{ "help", "output=", "cache=", "modes", "types", "reporters", "non-unique", "support=", "samples=", "skip-log=", "cpu-profile=", "parallelism=", }, ) if err != nil { fmt.Fprintln(os.Stderr, err) fmt.Fprintln(os.Stderr, "could not process your arguments (perhaps you forgot a mode?) try:") fmt.Fprintf(os.Stderr, "$ %v breadth %v\n", os.Args[0], strings.Join(os.Args[1:], " ")) cmd.Usage(cmd.ErrorCodes["opts"]) } output := "" cache := "" unique := true support := 0 samples := 0 cpuProfile := "" parallelism := -1 for _, oa := range optargs { switch oa.Opt() { case "-h", "--help": cmd.Usage(0) case "-o", "--output": output = cmd.EmptyDir(oa.Arg()) case "-c", "--cache": cache = cmd.EmptyDir(oa.Arg()) case "-p", "--parallelism": parallelism = cmd.ParseInt(oa.Arg()) case "--support": support = cmd.ParseInt(oa.Arg()) case "--samples": samples = cmd.ParseInt(oa.Arg()) case "--non-unique": unique = false case "--types": fmt.Fprintln(os.Stderr, "Types:") for k := range cmd.Types { fmt.Fprintln(os.Stderr, " ", k) } os.Exit(0) case "--modes": fmt.Fprintln(os.Stderr, "Modes:") for k := range modes { fmt.Fprintln(os.Stderr, " ", k) } os.Exit(0) case "--reporters": fmt.Fprintln(os.Stderr, "Reporters:") for k := range cmd.Reporters { fmt.Fprintln(os.Stderr, " ", k) } os.Exit(0) case "--skip-log": level := oa.Arg() errors.Logf("INFO", "not logging level %v", level) errors.SkipLogging[level] = true case "--cpu-profile": cpuProfile = cmd.AssertFile(oa.Arg()) default: fmt.Fprintf(os.Stderr, "Unknown flag '%v'\n", oa.Opt()) cmd.Usage(cmd.ErrorCodes["opts"]) } } if support <= 0 { fmt.Fprintf(os.Stderr, "Support <= 0, must be > 0\n") cmd.Usage(cmd.ErrorCodes["opts"]) } if samples <= 0 { fmt.Fprintf(os.Stderr, "Samples <= 0, must be > 0\n") cmd.Usage(cmd.ErrorCodes["opts"]) } if output == "" { fmt.Fprintf(os.Stderr, "You must supply an output dir (-o)\n") cmd.Usage(cmd.ErrorCodes["opts"]) } if cpuProfile != "" { errors.Logf("DEBUG", "starting cpu profile: %v", cpuProfile) f, err := os.Create(cpuProfile) if err != nil { log.Fatal(err) } err = pprof.StartCPUProfile(f) if err != nil { log.Fatal(err) } sigs := make(chan os.Signal, 1) signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM) go func() { sig:=<-sigs errors.Logf("DEBUG", "closing cpu profile") pprof.StopCPUProfile() err := f.Close() errors.Logf("DEBUG", "closed cpu profile, err: %v", err) panic(errors.Errorf("caught signal: %v", sig)) }() defer func() { errors.Logf("DEBUG", "closing cpu profile") pprof.StopCPUProfile() err := f.Close() errors.Logf("DEBUG", "closed cpu profile, err: %v", err) }() } conf := &config.Config{ Cache: cache, Output: output, Support: support, Samples: samples, Unique: unique, Parallelism: parallelism, } return cmd.Main(args, conf, modes) }
func run() int { modes := map[string]cmd.Mode{ "dfs": dfsMode, "index-speed": indexSpeedMode, "vsigram": vsigramMode, "qsplor": qsplorMode, } args, optargs, err := getopt.GetOpt( os.Args[1:], "ho:c:p:", []string{ "help", "output=", "cache=", "support=", "modes", "types", "reporters", "skip-log=", "cpu-profile=", "parallelism=", }, ) if err != nil { fmt.Fprintln(os.Stderr, err) fmt.Fprintln(os.Stderr, "could not process your arguments (perhaps you forgot a mode?) try:") fmt.Fprintf(os.Stderr, "$ %v breadth %v\n", os.Args[0], strings.Join(os.Args[1:], " ")) cmd.Usage(cmd.ErrorCodes["opts"]) } output := "" cache := "" support := 0 cpuProfile := "" parallelism := -1 for _, oa := range optargs { switch oa.Opt() { case "-h", "--help": cmd.Usage(0) case "-o", "--output": output = cmd.EmptyDir(oa.Arg()) case "-c", "--cache": cache = cmd.EmptyDir(oa.Arg()) case "-p", "--parallelism": parallelism = cmd.ParseInt(oa.Arg()) case "--support": support = cmd.ParseInt(oa.Arg()) case "--types": fmt.Fprintln(os.Stderr, "Types:") for k := range cmd.Types { fmt.Fprintln(os.Stderr, " ", k) } os.Exit(0) case "--modes": fmt.Fprintln(os.Stderr, "Modes:") for k := range modes { fmt.Fprintln(os.Stderr, " ", k) } os.Exit(0) case "--reporters": fmt.Fprintln(os.Stderr, "Reporters:") for k := range cmd.Reporters { fmt.Fprintln(os.Stderr, " ", k) } os.Exit(0) case "--skip-log": level := oa.Arg() errors.Logf("INFO", "not logging level %v", level) errors.SkipLogging[level] = true case "--cpu-profile": cpuProfile = cmd.AssertFile(oa.Arg()) default: fmt.Fprintf(os.Stderr, "Unknown flag '%v'\n", oa.Opt()) cmd.Usage(cmd.ErrorCodes["opts"]) } } if support <= 0 { fmt.Fprintf(os.Stderr, "Support <= 0, must be > 0\n") cmd.Usage(cmd.ErrorCodes["opts"]) } if output == "" { fmt.Fprintf(os.Stderr, "You must supply an output dir (-o)\n") cmd.Usage(cmd.ErrorCodes["opts"]) } if cpuProfile != "" { defer cmd.CPUProfile(cpuProfile)() } conf := &config.Config{ Cache: cache, Output: output, Support: support, Parallelism: parallelism, } return cmd.Main(args, conf, modes) }