2019-04-22 02:59:20 +00:00

139 lines
2.6 KiB
Go

package conf
import (
"errors"
"flag"
"go-common/library/cache/redis"
"go-common/library/conf"
"go-common/library/database/sql"
ecode "go-common/library/ecode/tip"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/http/blademaster/middleware/auth"
"go-common/library/net/http/blademaster/middleware/verify"
"go-common/library/net/rpc"
"go-common/library/net/trace"
"go-common/library/time"
"github.com/BurntSushi/toml"
)
const (
configKey = "antispam-service.toml"
)
var (
// Conf .
Conf *Config
// ConfPath .
ConfPath string
)
// Config .
type Config struct {
RPC *rpc.ServerConfig
App *bm.App
BM *bm.ServerConfig
HTTPClient *bm.ClientConfig
MySQL *MySQL
Redis *Redis
Tracer *trace.Config
Log *log.Config
Verify *verify.Config
Auth *auth.Config
Ecode *ecode.Config
AppkeyType map[string][]int8
ReplyURL string
ServiceOption *ServiceOption
MaxSpawnGoroutines int
MaxAllowedCounts int64
MaxDurationSec int64
AutoWhite *AutoWhite
}
// AutoWhite .
type AutoWhite struct {
KeywordHitCounts int64
NumOfSenders int64
Derivation float64
}
// ServiceOption .
type ServiceOption struct {
GcOpt *GcOpt
BuildTrieIntervalMinute int64
BuildTrieMaxRowsPerQuery int64
AsyncTaskChanSize int64
RefreshTrieIntervalSec int64
RefreshRulesIntervalSec int64
RefreshRegexpsIntervalSec int64
MinKeywordLen int
MaxSenderNum int64
DefaultExpireSec int64
DefaultChanSize int64
MaxExportRows int64
MaxRegexpCountsPerArea int64
MaxSpawnGoroutines int64
RuleDefaultExpireSec int64
RegexpDefaultExpireSec int64
}
// GcOpt .
type GcOpt struct {
Open bool
IntervalSec int
MaxRowsPerQuery int64
}
// MySQL .
type MySQL struct {
AntiSpam *sql.Config
}
// Redis .
type Redis struct {
*redis.Config
IndexExpire time.Duration
}
func init() {
flag.StringVar(&ConfPath, "conf", "", "config path")
}
// Init .
func Init(path string) error {
if len(Areas) == 0 {
panic(errors.New("areas must be set"))
}
if path == "" {
return configCenter()
}
_, err := toml.DecodeFile(path, &Conf)
return err
}
func configCenter() error {
client, err := conf.New()
if err != nil {
return err
}
value, ok := client.Value(configKey)
if !ok {
return errors.New("empty value")
}
_, err = toml.Decode(value, &Conf)
return err
}
// Areas .
var Areas = map[string]int{
"reply": 1,
"im": 2,
"live_dm": 3,
"danmu": 4,
}