123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- package file
- import (
- "errors"
- "time"
- xtime "go-common/library/time"
- "github.com/BurntSushi/toml"
- )
- type Config struct {
- Paths []string `toml:"paths"`
- Symlinks bool `toml:"symlinks"`
- AppId string `toml:"appId"`
- LogId string `toml:"logId"`
- ConfigPath string `toml:"-"`
- MetaPath string `toml:"-"`
- ID string `toml:"-"`
- ReadFrom string `toml:"readFrom"`
- MaxLength int `toml:"maxLength"`
- IgnoreOlder xtime.Duration `toml:"ignoreOlder"`
- CleanFilesOlder xtime.Duration `toml:"cleanFilesOlder"`
- ScanFrequency xtime.Duration `toml:"scanFrequency"`
- CleanInactive xtime.Duration `toml:"cleanInactive"`
- HarvesterTTL xtime.Duration `toml:"harvesterTTL"` // harvester will stop itself if inactive longer than HarvesterTTL
- Multiline *MultilineConf `toml:"multiline"`
- Timeout xtime.Duration `toml:"timeout"`
- Fields map[string]interface{} `toml:"fields"`
- }
- func (c *Config) ConfigValidate() (error) {
- if c == nil {
- return errors.New("config of file Input is nil")
- }
- if len(c.Paths) == 0 {
- return errors.New("paths of file Input can't be nil")
- }
- if c.LogId == "" {
- c.LogId = "000161"
- }
- if c.AppId == "" {
- return errors.New("appId of file Input can't be nil")
- }
- if c.IgnoreOlder == 0 {
- c.IgnoreOlder = xtime.Duration(time.Hour * 24)
- }
- if c.ScanFrequency == 0 {
- c.ScanFrequency = xtime.Duration(time.Second * 10)
- }
- // Note: CleanInactive should be greater chan ignore_older + scan_frequency
- if c.CleanInactive == 0 {
- c.CleanInactive = xtime.Duration(time.Hour * 24 * 7)
- }
- if c.CleanInactive < c.IgnoreOlder+c.ScanFrequency {
- return errors.New("CleanInactive must be greater than ScanFrequency + IgnoreOlder")
- }
- if c.HarvesterTTL == 0 {
- c.HarvesterTTL = xtime.Duration(time.Hour * 1)
- }
- if c.Timeout == 0 {
- c.Timeout = xtime.Duration(time.Second * 5)
- }
- if c.ReadFrom != "" && c.ReadFrom != "newest" && c.ReadFrom != "oldest" {
- return errors.New("ReadFrom of file input can only be newest or oldest")
- }
- if c.ReadFrom == "" {
- c.ReadFrom = "newest"
- }
- if c.MaxLength == 0 || c.MaxLength > 1024*10*64 {
- c.MaxLength = 1024 * 10 * 64
- }
- // Symlinks is always disabled
- c.Symlinks = false
- if c.Multiline != nil {
- if err := c.Multiline.ConfigValidate(); err != nil {
- return err
- }
- }
- return nil
- }
- func DecodeConfig(md toml.MetaData, primValue toml.Primitive) (c interface{}, err error) {
- c = new(Config)
- if err = md.PrimitiveDecode(primValue, c); err != nil {
- return nil, err
- }
- return c, nil
- }
|