func (b *Boomer) AddOutput(o Output) {
	b.outputs = append(b.outputs, o)
}
AddOutput accepts outputs which implements the boomer.Output interface.
package boomer
import (
	"flag"
	"log"
	"os"
	"os/signal"
	"strings"
	"syscall"
	"time"
	"github.com/asaskevich/EventBus"
)
var Events = EventBus.New()
var defaultBoomer = &Boomer{}
type Mode int
const (
	DistributedMode Mode = iota
	StandaloneMode
)
type Boomer struct {
	masterHost  string
	masterPort  int
	mode        Mode
	rateLimiter RateLimiter
	slaveRunner *slaveRunner
	localRunner *localRunner
	spawnCount  int
	spawnRate   float64
	cpuProfile         string
	cpuProfileDuration time.Duration
	memoryProfile         string
	memoryProfileDuration time.Duration
	outputs []Output
}
func NewBoomer(masterHost string, masterPort int) *Boomer {
	return &Boomer{
		masterHost: masterHost,
		masterPort: masterPort,
		mode:       DistributedMode,
	}
}
func NewStandaloneBoomer(spawnCount int, spawnRate float64) *Boomer {
	return &Boomer{
		spawnCount: spawnCount,
		spawnRate:  spawnRate,
		mode:       StandaloneMode,
	}
}
func (b *Boomer) SetRateLimiter(rateLimiter RateLimiter) {
	b.rateLimiter = rateLimiter
}
func (b *Boomer) SetMode(mode Mode) {
	switch mode {
	case DistributedMode:
		b.mode = DistributedMode
	case StandaloneMode:
		b.mode = StandaloneMode
	default:
		log.Println("Invalid mode, ignored!")
	}
}