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,
|
||
|
}
|