func makeProber(testname string, c *testConfig, logger *log.Logger) libprober.RegisterProber { switch c.Testtype { case "dns": hostname := c.Specs.Hostname return dnsprober.New(testname, hostname) case "ldap": sssd := c.Specs.SssdConfig ch := fsutil.WatchFile(sssd, logger) file := <-ch fsutil.WatchFileStop() return ldapprober.Makeldapprober(testname, file, c.Probefreq) case "pid": pidpath := c.Specs.Pathname if pidpath == "" { return nil } return pidprober.Makepidprober(testname, pidpath) case "testprog": testprogpath := c.Specs.Pathname if testprogpath == "" { return nil } return testprogprober.Maketestprogprober(testname, testprogpath) case "url": urlpath := c.Specs.Urlpath urlport := c.Specs.Urlport return urlprober.Makeurlprober(testname, urlpath, urlport) default: logger.Printf("Test type %s not supported", c.Testtype) return nil } }
func main() { flag.Usage = printUsage flag.Parse() tricorder.RegisterFlags() circularBuffer := logbuf.New() logger := log.New(circularBuffer, "", log.LstdFlags) // We have to have inputs. if *sourcesFile == "" { printUsage() os.Exit(2) } handleSignals(logger) var generators []generator readerChannel := fsutil.WatchFile(*sourcesFile, logger) file, err := os.Open(*sourcesFile) if err != nil { showErrorAndDie(err) } (<-readerChannel).Close() scanner := bufio.NewScanner(file) for scanner.Scan() { fields := strings.Fields(scanner.Text()) if len(fields) == 0 || len(fields[0]) == 0 || fields[0][0] == '#' { continue } gen, err := getSource(fields) if err != nil { showErrorAndDie(err) } generators = append(generators, gen) } if err := scanner.Err(); err != nil { showErrorAndDie(err) } file.Close() httpSrv, err := startHttpServer(*portNum) if err != nil { showErrorAndDie(err) } httpSrv.AddHtmlWriter(circularBuffer) updateFunc := startRpcd(logger) go runDaemon(generators, *mdbFile, *hostnameRegex, *datacentre, *fetchInterval, updateFunc, logger, *debug) <-readerChannel fsutil.WatchFileStop() if err := syscall.Exec(os.Args[0], os.Args, os.Environ()); err != nil { logger.Printf("Unable to Exec:%s: %s\n", os.Args[0], err) } }