func parseFlags() (*cmdConfig, *busltee.Config, error) { publisherConf := &busltee.Config{} cmdConf := &cmdConfig{} cmdConf.RollbarEnvironment = os.Getenv("ROLLBAR_ENVIRONMENT") cmdConf.RollbarToken = os.Getenv("ROLLBAR_TOKEN") // Connection related flags flag.BoolVarP(&publisherConf.Insecure, "insecure", "k", false, "allows insecure SSL connections") flag.IntVar(&publisherConf.Retry, "retry", 5, "max retries for connect timeout errors") flag.IntVar(&publisherConf.StreamRetry, "stream-retry", 60, "max retries for streamer disconnections") flag.Float64Var(&publisherConf.Timeout, "connect-timeout", 1, "max number of seconds to connect to busl URL") // Logging related flags flag.StringVar(&publisherConf.LogPrefix, "log-prefix", "", "log prefix") flag.StringVar(&publisherConf.LogFile, "log-file", "", "log file") flag.StringVar(&publisherConf.RequestID, "request-id", "", "request id") if flag.Parse(); len(flag.Args()) < 2 { return nil, nil, errors.New("insufficient args") } publisherConf.URL = flag.Arg(0) publisherConf.Args = flag.Args()[1:] return cmdConf, publisherConf, nil }
func init() { flag.StringVar(&conf, "conf", "config.toml", "Path of the configuration file") flag.BoolVar(&version, "version", false, "Return version") flag.StringVar(&user, "user", "", "User for MariaDB login, specified in the [user]:[password] format") flag.StringVar(&hosts, "hosts", "", "List of MariaDB hosts IP and port (optional), specified in the host:[port] format and separated by commas") flag.StringVar(&socket, "socket", "/var/run/mysqld/mysqld.sock", "Path of MariaDB unix socket") flag.StringVar(&rpluser, "rpluser", "", "Replication user in the [user]:[password] format") flag.BoolVar(&interactive, "interactive", true, "Ask for user interaction when failures are detected") flag.BoolVar(&verbose, "verbose", false, "Print detailed execution info") flag.StringVar(&preScript, "pre-failover-script", "", "Path of pre-failover script") flag.StringVar(&postScript, "post-failover-script", "", "Path of post-failover script") flag.Int64Var(&maxDelay, "maxdelay", 0, "Maximum replication delay before initiating failover") flag.BoolVar(>idCheck, "gtidcheck", false, "Check that GTID sequence numbers are identical before initiating failover") flag.StringVar(&prefMaster, "prefmaster", "", "Preferred candidate server for master failover, in host:[port] format") flag.StringVar(&ignoreSrv, "ignore-servers", "", "List of servers to ignore in slave promotion operations") flag.Int64Var(&waitKill, "wait-kill", 5000, "Wait this many milliseconds before killing threads on demoted master") flag.BoolVar(&readonly, "readonly", true, "Set slaves as read-only after switchover") flag.StringVar(&failover, "failover", "", "Failover mode, either 'monitor', 'force' or 'check'") flag.IntVar(&maxfail, "failcount", 5, "Trigger failover after N failures (interval 1s)") flag.StringVar(&switchover, "switchover", "", "Switchover mode, either 'keep' or 'kill' the old master.") flag.BoolVar(&autorejoin, "autorejoin", true, "Automatically rejoin a failed server to the current master.") flag.StringVar(&logfile, "logfile", "", "Write MRM messages to a log file") flag.IntVar(&timeout, "connect-timeout", 5, "Database connection timeout in seconds") flag.IntVar(&faillimit, "failover-limit", 0, "In auto-monitor mode, quit after N failovers (0: unlimited)") flag.Int64Var(&failtime, "failover-time-limit", 0, "In auto-monitor mode, wait N seconds before attempting next failover (0: do not wait)") }
func (cm *ConfigManager) parseFlags() { pflag.StringVarP(&cm.Flags.ConfigFile, "configfile", "c", DefaultConfigFile, "Path to config") pflag.StringVarP(&cm.Flags.DestHost, "dest-host", "d", "", "Destination syslog hostname or IP") pflag.IntVarP(&cm.Flags.DestPort, "dest-port", "p", 0, "Destination syslog port") if utils.CanDaemonize { pflag.BoolVarP(&cm.Flags.NoDaemonize, "no-detach", "D", false, "Don't daemonize and detach from the terminal") } else { cm.Flags.NoDaemonize = true } pflag.StringVarP(&cm.Flags.Facility, "facility", "f", "user", "Facility") pflag.StringVar(&cm.Flags.Hostname, "hostname", "", "Local hostname to send from") pflag.StringVar(&cm.Flags.PidFile, "pid-file", "", "Location of the PID file") // --parse-syslog pflag.StringVarP(&cm.Flags.Severity, "severity", "s", "notice", "Severity") // --strip-color pflag.BoolVar(&cm.Flags.UseTCP, "tcp", false, "Connect via TCP (no TLS)") pflag.BoolVar(&cm.Flags.UseTLS, "tls", false, "Connect via TCP with TLS") pflag.BoolVar(&cm.Flags.Poll, "poll", false, "Detect changes by polling instead of inotify") pflag.Var(&cm.Flags.RefreshInterval, "new-file-check-interval", "How often to check for new files") _ = pflag.Bool("no-eventmachine-tail", false, "No action, provided for backwards compatibility") _ = pflag.Bool("eventmachine-tail", false, "No action, provided for backwards compatibility") pflag.StringVar(&cm.Flags.DebugLogFile, "debug-log-cfg", "", "the debug log file") pflag.StringVar(&cm.Flags.LogLevels, "log", "<root>=INFO", "set loggo config, like: --log=\"<root>=DEBUG\"") pflag.IntVar(&cm.Flags.TcpMaxLineLength, "tcp-max-line-length", 0, "Maximum TCP line length") pflag.Parse() cm.FlagFiles = pflag.Args() }
// NewServer creates a new http.Server instance based off the BaseConfiguration. // NewServer also handles reading the TOML configuration file and // providing/reading the command line flags. Because of this // NewServer should always be called after all flags have been defined. func NewServer(conf *BaseConfiguration) http.Server { // TOML configuration file can overwrite defaults tomlData, err := ioutil.ReadFile(os.Args[len(os.Args)-1]) if err != nil { defer Logger.Info("No conf. Skipping.") } else { if _, err := toml.Decode(string(tomlData), &conf); err != nil { defer Logger.Errorf("Configuration file could not be decoded. %s. Exiting...", err) } } // Flags can override config items // Server flags flag.StringVar(&conf.BindAddress, "BindAddress", conf.BindAddress, "Bind address.") flag.IntVar(&conf.BindPort, "BindPort", conf.BindPort, "HTTP bind port.") flag.DurationVar(&conf.ReadTimeout, "ReadTimeout", conf.ReadTimeout, "Read timeout.") flag.DurationVar(&conf.WriteTimeout, "WriteTimeout", conf.WriteTimeout, "Write timeout.") flag.IntVar(&conf.MaxHeaderBytes, "MaxHeaderBytes", conf.MaxHeaderBytes, "Max header bytes.") // Server Logger flags flag.StringVar(&conf.LogLevel, "LogLevel", conf.LogLevel, "Log level.") flag.StringVar(&conf.LogFile, "LogFile", conf.LogFile, "Log file.") // TLS related flags flag.IntVar(&conf.BindHttpsPort, "BindHttpsPort", conf.BindHttpsPort, "HTTPS bind port.") flag.StringVar(&conf.CertFile, "CertFile", conf.CertFile, "Cert file.") flag.StringVar(&conf.KeyFile, "KeyFile", conf.KeyFile, "Key file.") flag.Parse() // Logging specific work also injecting the logrus log into the Servers errorlog // BUG(ashcrow): This needs work!!! makeLogger(conf) Logger.Debugf("Final configuration: %+v", conf) w := Logger.Writer() defer w.Close() ServerErrorLogger = *log.New(w, "ServerErrorLogger", log.Lshortfile) // ------------- // Return the configured http.Server return http.Server{ Addr: fmt.Sprintf("%s:%d", conf.BindAddress, conf.BindPort), ReadTimeout: conf.ReadTimeout, WriteTimeout: conf.WriteTimeout, MaxHeaderBytes: conf.MaxHeaderBytes, ErrorLog: &ServerErrorLogger, } }
func init() { pflag.DurationVar(&config.TickerTime, "ticker-time", 15*time.Minute, "Ticker time.") pflag.BoolVar(&config.DryRun, "dry-run", true, "Write to STDOUT instead of InfluxDB") pflag.IntVar(&config.OWMcityID, "owm-city-id", 0, "Open Weather Map city ID") pflag.IntVar(&config.InfluxPort, "influx-port", 8086, "InfluxDB Port") pflag.StringVar(&config.InfluxHost, "influx-host", "localhost", "InfluxDB Port") pflag.StringVar(&config.InfluxUser, "influx-user", "", "InfluxDB User") pflag.StringVar(&config.InfluxDB, "influx-db", "", "InfluxDB Database") pflag.StringVar(&config.InfluxPassword, "influx-password", "", "InfluxDB Password") pflag.StringVar(&config.InfluxRetention, "influx-retention", "default", "InfluxDB Retention") pflag.StringVar(&config.DhtType, "dht-type", "DHT22", "DHT Type (DHT11, DHT22)") pflag.IntVar(&config.DhtPin, "dht-pin", 4, "Pin Number DHT Data is connected to") pflag.BoolVar(&config.DHTPerf, "dht-perf", false, "Run DHT read in Boost Performance Mode - true will result in needing sudo") pflag.IntVar(&config.DhtRetries, "dht-retries", 15, "Number of reading data retries") }