func NewProspector(cfg *common.Config, states file.States, outlet Outlet) (*Prospector, error) { prospector := &Prospector{ cfg: cfg, config: defaultConfig, outlet: outlet, harvesterChan: make(chan *input.Event), done: make(chan struct{}), wg: sync.WaitGroup{}, states: &file.States{}, channelWg: sync.WaitGroup{}, } if err := cfg.Unpack(&prospector.config); err != nil { return nil, err } if err := prospector.config.Validate(); err != nil { return nil, err } err := prospector.Init(states.GetStates()) if err != nil { return nil, err } logp.Debug("prospector", "File Configs: %v", prospector.config.Paths) return prospector, nil }
// Init sets up the prospector // It goes through all states coming from the registry. Only the states which match the glob patterns of // the prospector will be loaded and updated. All other states will not be touched. func (p *ProspectorLog) Init(states file.States) error { logp.Debug("prospector", "exclude_files: %s", p.config.ExcludeFiles) for _, state := range states.GetStates() { // Check if state source belongs to this prospector. If yes, update the state. if p.matchesFile(state.Source) { state.TTL = -1 // Update prospector states and send new states to registry err := p.Prospector.updateState(input.NewEvent(state)) if err != nil { logp.Err("Problem putting initial state: %+v", err) return err } } } logp.Info("Prospector with previous states loaded: %v", p.Prospector.states.Count()) return nil }