Files
anytunnel/at-api/config.go
T
2019-08-08 17:13:34 +08:00

79 lines
2.7 KiB
Go

package main
import (
"flag"
"fmt"
"strings"
"github.com/spf13/pflag"
"github.com/spf13/viper"
)
const APP_VERSION = "1.0.0"
var (
cfg = viper.New()
)
//init config
func initConfig() {
pflag.CommandLine.AddGoFlagSet(flag.CommandLine)
configFile := pflag.String("config", "", "config file path")
pflag.StringSlice("bind-ip-intra", []string{"0.0.0.0"}, "ip to binding for intra api")
pflag.Int("port-intra", 37081, "intra api port")
pflag.StringSlice("bind-ip-extra", []string{"0.0.0.0"}, "ip to binding for extra api")
pflag.Int("port-extra", 29531, "extra api port")
pflag.Bool("log-open", true, "if true: store log files, false: no log files")
pflag.String("level", "debug", "console log level,should be one of debug,info,warn,error")
pflag.String("log-dir", "log", "the directory which store log files")
pflag.Bool("log-access", true, "access log on or off")
pflag.Bool("log-post", false, "log post data on or off")
pflag.Int64("log-max-size", 102400000, "log file max size(bytes) for rotate")
pflag.Int("log-max-count", 3, "log file max count for rotate to remain")
pflag.StringSlice("log-level", []string{"info", "error", "debug"}, "log to file level,multiple splitted by comma(,)")
pflag.Parse()
cfg.BindPFlag("port.ip-intra", pflag.Lookup("bind-ip-intra"))
cfg.BindPFlag("port.ip-extra", pflag.Lookup("bind-ip-extra"))
cfg.BindPFlag("port.intra", pflag.Lookup("port-intra"))
cfg.BindPFlag("port.extra", pflag.Lookup("port-extra"))
cfg.BindPFlag("log.open", pflag.Lookup("log-open"))
cfg.BindPFlag("log.dir", pflag.Lookup("log-dir"))
cfg.BindPFlag("log.level", pflag.Lookup("log-level"))
cfg.BindPFlag("log.access", pflag.Lookup("log-access"))
cfg.BindPFlag("log.post", pflag.Lookup("log-post"))
cfg.BindPFlag("log.console-level", pflag.Lookup("level"))
cfg.BindPFlag("log.fileMaxSize", pflag.Lookup("log-max-size"))
cfg.BindPFlag("log.maxCount", pflag.Lookup("log-max-count"))
fmt.Printf("%s", *configFile)
if *configFile != "" {
cfg.SetConfigFile(*configFile)
} else {
cfg.SetConfigName("api")
cfg.AddConfigPath("/etc/anytunnel/")
cfg.AddConfigPath("$HOME/.anytunnel")
cfg.AddConfigPath(".anytunnel")
cfg.AddConfigPath(".")
}
err := cfg.ReadInConfig()
file := cfg.ConfigFileUsed()
if err != nil && !strings.Contains(err.Error(), "Not") {
fmt.Printf("%s\n", err)
} else if file != "" {
fmt.Printf("use config file : %s\n", file)
}
err = nil
return
}
// poster version
func poster() {
fmt.Printf(`
╔═╗┌┐┌┬ ┬┌┬┐┬ ┬┌┐┌┌┐┌┌─┐┬ ╔═╗┌─┐┬
╠═╣│││└┬┘ │ │ │││││││├┤ │───╠═╣├─┘│
╩ ╩┘└┘ ┴ ┴ └─┘┘└┘┘└┘└─┘┴─┘ ╩ ╩┴ ┴ v%s`+"\n\n", APP_VERSION)
}