139 lines
2.6 KiB
Go
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,
|
|
}
|