// InitLoader constructs a new program loader and performs the inital load of program files in the program directory. func (m *Mtail) InitLoader() error { o := vm.LoaderOptions{Store: &m.store, Lines: m.lines, CompileOnly: m.o.CompileOnly, DumpBytecode: m.o.DumpBytecode, SyslogUseCurrentYear: m.o.SyslogUseCurrentYear, W: m.o.W, FS: m.o.FS} var err error m.l, err = vm.NewLoader(o) if err != nil { return err } if m.o.Progs != "" { errors := m.l.LoadProgs(m.o.Progs) if m.o.CompileOnly || m.o.DumpBytecode { return fmt.Errorf("Compile encountered errors:\n%s", errors) } } return nil }
func CompileAndLoad(programfile string, ms *metrics.Store, lines chan string) (*vm.Loader, error) { p, err := os.Open(programfile) if err != nil { return nil, fmt.Errorf("%s: could not open program file: %s", programfile, err) } defer p.Close() name := filepath.Base(programfile) w := watcher.NewFakeWatcher() o := vm.LoaderOptions{W: w, Store: ms, Lines: lines, SyslogUseCurrentYear: false} l, err := vm.NewLoader(o) if err != nil { return nil, fmt.Errorf("couldn't create program loader: %s", err) } if pErr := l.CompileAndRun(name, p); pErr != nil { return nil, fmt.Errorf("couldn't compile program: %s: %s", programfile, pErr) } return l, nil }