diff --git a/gor/gor.go b/gor/gor.go index 8898d4f..d0ff76b 100644 --- a/gor/gor.go +++ b/gor/gor.go @@ -17,10 +17,6 @@ import ( "github.com/buger/gor" ) -const ( - VERSION = "0.7" -) - var ( mode string cpuprofile = flag.String("cpuprofile", "", "write cpu profile to file") @@ -37,7 +33,7 @@ func main() { } }() - fmt.Println("Version:", VERSION) + fmt.Println("Version:", gor.VERSION) flag.Parse() gor.InitPlugins() diff --git a/input_dummy.go b/input_dummy.go index 3a2a0b6..9e72ea5 100644 --- a/input_dummy.go +++ b/input_dummy.go @@ -25,7 +25,7 @@ func (i *DummyInput) Read(data []byte) (int, error) { } func (i *DummyInput) emit() { - ticker := time.NewTicker(200 * time.Millisecond) + ticker := time.NewTicker(time.Second) for { select { diff --git a/settings.go b/settings.go index 5a1a97d..bd86c58 100644 --- a/settings.go +++ b/settings.go @@ -2,7 +2,13 @@ package gor import ( "flag" + "fmt" "log" + "os" +) + +const ( + VERSION = "0.7.0" ) type AppSettings struct { @@ -28,25 +34,33 @@ type AppSettings struct { var Settings AppSettings = AppSettings{} +func usage() { + fmt.Printf("Gor is a simple http traffic replication tool written in Go. Its main goal is to replay traffic from production servers to staging and dev environments.\nProject page: https://github.com/buger/gor\nAuthor: leonsbox@gmail.com\nCurrent Version: %s\n\n", VERSION) + flag.PrintDefaults() + os.Exit(2) +} + func init() { - flag.BoolVar(&Settings.verbose, "verbose", false, "") + flag.Usage = usage - flag.BoolVar(&Settings.splitOutput, "split-output", false, "") + flag.BoolVar(&Settings.verbose, "verbose", false, "Turn on verbose/debug output") - flag.Var(&Settings.inputDummy, "input-dummy", "") - flag.Var(&Settings.outputDummy, "output-dummy", "") + flag.BoolVar(&Settings.splitOutput, "split-output", false, "By default each output gets same traffic. If set to `true` it splits traffic equally among all outputs.") - flag.Var(&Settings.inputTCP, "input-tcp", "") - flag.Var(&Settings.outputTCP, "output-tcp", "") + flag.Var(&Settings.inputDummy, "input-dummy", "Used for testing outputs. Emits 'Get /' request every 1s") + flag.Var(&Settings.outputDummy, "output-dummy", "Used for testing inputs. Just prints data coming from inputs.") - flag.Var(&Settings.inputFile, "input-file", "") - flag.Var(&Settings.outputFile, "output-file", "") + flag.Var(&Settings.inputTCP, "input-tcp", "Used for internal communication between Gor instances. Example: \n\t# Receive requests from other Gor instances on 28020 port, and redirect output to staging\n\tgor --input-tcp :28020 --output-http staging.com") + flag.Var(&Settings.outputTCP, "output-tcp", "Used for internal communication between Gor instances. Example: \n\t# Listen for requests on 80 port and forward them to other Gor instance on 28020 port\n\tgor --input-raw :80 --output-tcp replay.local:28020") - flag.Var(&Settings.inputRAW, "input-raw", "") + flag.Var(&Settings.inputFile, "input-file", "Read requests from file: \n\tgor --input-file ./requests.gor --output-http staging.com") + flag.Var(&Settings.outputFile, "output-file", "Write incoming requests to file: \n\tgor --input-raw :80 --output-file ./requests.gor") - flag.Var(&Settings.outputHTTP, "output-http", "") - flag.Var(&Settings.outputHTTPHeaders, "output-http-header", "") - flag.StringVar(&Settings.outputHTTPElasticSearch, "output-http-elasticsearch", "", "") + flag.Var(&Settings.inputRAW, "input-raw", "Capture traffic from given port (use RAW sockets and require *sudo* access):\n\t# Capture traffic from 8080 port\n\tgor --input-raw :8080 --output-http staging.com") + + flag.Var(&Settings.outputHTTP, "output-http", "Forwards incoming requests to given http address.\n\t# Redirect all incoming requests to staging.com address \n\tgor --input-raw :80 --output-http http://staging.com") + flag.Var(&Settings.outputHTTPHeaders, "output-http-header", "Inject additional headers to http reqest:\n\tgor --input-raw :8080 --output-http staging.com --output-http-header 'User-Agent: Gor'") + flag.StringVar(&Settings.outputHTTPElasticSearch, "output-http-elasticsearch", "", "Send request and response stats to ElasticSearch:\n\tgor --input-raw :8080 --output-http staging.com --output-http-elasticsearch 'es_host:api_port/index_name'") } func Debug(args ...interface{}) {