func main() { quitChannel := make(chan struct{}, 0) flag.Var(&argSources, "source", "source(s) to read events from") flag.Var(&argSinks, "sink", "external sink(s) that receive events") flag.BoolVar(&argVersion, "version", false, "print version info and exit") flag.Parse() if argVersion { fmt.Println(version.VersionInfo()) os.Exit(0) } logs.InitLogs() defer logs.FlushLogs() setMaxProcs() glog.Infof(strings.Join(os.Args, " ")) glog.Infof("Eventer version %v", version.HeapsterVersion) if err := validateFlags(); err != nil { glog.Fatal(err) } // sources if len(argSources) != 1 { glog.Fatal("Wrong number of sources specified") } sourceFactory := sources.NewSourceFactory() sources, err := sourceFactory.BuildAll(argSources) if err != nil { glog.Fatalf("Failed to create sources: %v", err) } if len(sources) != 1 { glog.Fatal("Requires exactly 1 source") } // sinks sinksFactory := sinks.NewSinkFactory() sinkList := sinksFactory.BuildAll(argSinks) if len([]flags.Uri(argSinks)) != 0 && len(sinkList) == 0 { glog.Fatal("No available sink to use") } for _, sink := range sinkList { glog.Infof("Starting with %s sink", sink.Name()) } sinkManager, err := sinks.NewEventSinkManager(sinkList, sinks.DefaultSinkExportEventsTimeout, sinks.DefaultSinkStopTimeout) if err != nil { glog.Fatalf("Failed to create sink manager: %v", err) } // main manager manager, err := manager.NewManager(sources[0], sinkManager, *argFrequency) if err != nil { glog.Fatalf("Failed to create main manager: %v", err) } manager.Start() glog.Infof("Starting eventer") <-quitChannel }
func main() { opt := options.NewHeapsterRunOptions() opt.AddFlags(pflag.CommandLine) flag.InitFlags() if opt.Version { fmt.Println(version.VersionInfo()) os.Exit(0) } logs.InitLogs() defer logs.FlushLogs() setLabelSeperator(opt) setMaxProcs(opt) glog.Infof(strings.Join(os.Args, " ")) glog.Infof("Heapster version %v", version.HeapsterVersion) if err := validateFlags(opt); err != nil { glog.Fatal(err) } kubernetesUrl, err := getKubernetesAddress(opt.Sources) if err != nil { glog.Fatalf("Failed to get kubernetes address: %v", err) } sourceManager := createSourceManagerOrDie(opt.Sources) sinkManager, metricSink, historicalSource := createAndInitSinksOrDie(opt.Sinks, opt.HistoricalSource) podLister, nodeLister := getListersOrDie(kubernetesUrl) dataProcessors := createDataProcessorsOrDie(kubernetesUrl, podLister) man, err := manager.NewManager(sourceManager, dataProcessors, sinkManager, opt.MetricResolution, manager.DefaultScrapeOffset, manager.DefaultMaxParallelism) if err != nil { glog.Fatalf("Failed to create main manager: %v", err) } man.Start() if opt.EnableAPIServer { // Run API server in a separate goroutine createAndRunAPIServer(opt, metricSink, nodeLister, podLister) } mux := http.NewServeMux() promHandler := prometheus.Handler() handler := setupHandlers(metricSink, podLister, nodeLister, historicalSource) healthz.InstallHandler(mux, healthzChecker(metricSink)) addr := fmt.Sprintf("%s:%d", opt.Ip, opt.Port) glog.Infof("Starting heapster on port %d", opt.Port) if len(opt.TLSCertFile) > 0 && len(opt.TLSKeyFile) > 0 { startSecureServing(opt, handler, promHandler, mux, addr) } else { mux.Handle("/", handler) mux.Handle("/metrics", promHandler) glog.Fatal(http.ListenAndServe(addr, mux)) } }