2018-11-05 22:41:17 +01:00

95 lines
2.0 KiB
Go

package main
import (
"fmt"
"github.com/sirupsen/logrus"
"github.com/spf13/viper"
"os"
"time"
)
var config struct {
ServerUrl string
Token string
Retries int
Workers int
Tasks int32
CrawlStats time.Duration
AllocStats time.Duration
Verbose bool
}
const (
ConfServerUrl = "server.url"
ConfToken = "server.token"
ConfTasks = "crawl.tasks"
ConfRetries = "crawl.retries"
ConfWorkers = "crawl.connections"
ConfCrawlStats = "output.crawl_stats"
ConfAllocStats = "output.resource_stats"
ConfVerbose = "output.verbose"
)
func prepareConfig() {
viper.SetDefault(ConfRetries, 5)
viper.SetDefault(ConfWorkers, 2)
viper.SetDefault(ConfTasks, 3)
viper.SetDefault(ConfCrawlStats, 3 * time.Second)
viper.SetDefault(ConfAllocStats, 0)
viper.SetDefault(ConfVerbose, false)
}
func readConfig() {
viper.AddConfigPath(".")
viper.SetConfigName("config")
err := viper.ReadInConfig()
if err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
config.ServerUrl = viper.GetString(ConfServerUrl)
//if config.ServerUrl == "" {
// configMissing(ConfServerUrl)
//}
config.Token = viper.GetString(ConfToken)
//if config.Token == "" {
// configMissing(ConfToken)
//}
config.Retries = viper.GetInt(ConfRetries)
if config.Retries < 0 {
config.Retries = 1 << 31
}
config.Workers = viper.GetInt(ConfWorkers)
if config.Workers <= 0 {
configOOB(ConfWorkers, config.Workers)
}
config.Tasks = viper.GetInt32(ConfTasks)
if config.Tasks <= 0 {
configOOB(ConfTasks, int(config.Tasks))
}
config.CrawlStats = viper.GetDuration(ConfCrawlStats)
config.AllocStats = viper.GetDuration(ConfAllocStats)
config.Verbose = viper.GetBool(ConfVerbose)
if config.Verbose {
logrus.SetLevel(logrus.DebugLevel)
}
}
func configMissing(key string) {
fmt.Fprintf(os.Stderr, "config: %s not set!\n", key)
os.Exit(1)
}
func configOOB(key string, v int) {
fmt.Fprintf(os.Stderr, "config: illegal value %d for %key!\n", v, key)
os.Exit(1)
}