func (s *Server) Start(addr string) error { log.Printf("Listening on %s", addr) return http.ListenAndServe(addr, s.router.router) }
func Main(args []string) { var err error log.Info("This is EveBox Server version %v (rev: %v)", core.BuildVersion, core.BuildRev) flagset := flag.NewFlagSet("server", flag.ExitOnError) flagset.StringVarP(&opts.ElasticSearchUri, "elasticsearch", "e", "", "Elastic Search URI (default: http://localhost:9200") flagset.StringVarP(&opts.ElasticSearchIndex, "index", "i", "", "Elastic Search Index (default: logstash)") flagset.StringVarP(&opts.Port, "port", "p", "5636", "Port to bind to") flagset.StringVarP(&opts.Host, "host", "", "0.0.0.0", "Host to bind to") flagset.StringVarP(&opts.DevServerUri, "dev", "", "", "Frontend development server URI") flagset.BoolVarP(&opts.Version, "version", "", false, "Show version") flagset.StringVarP(&opts.Config, "config", "c", "", "Configuration filename") flagset.BoolVarP(&opts.NoCheckCertificate, "no-check-certificate", "k", false, "Disable certificate check for Elastic Search") flagset.BoolVarP(&opts.Sqlite, "sqlite", "", false, "Use SQLite for the event store") flagset.Parse(args[0:]) if opts.Version { VersionMain() return } log.SetLevel(log.DEBUG) // If no configuration was provided, see if evebox.yaml exists // in the current directory. if opts.Config == "" { _, err = os.Stat("./evebox.yaml") if err == nil { opts.Config = "./evebox.yaml" } } if opts.Config != "" { log.Printf("Loading configuration file %s.\n", opts.Config) conf, err = config.LoadConfig(opts.Config) if err != nil { log.Fatal(err) } } conf.ElasticSearchIndex = getElasticSearchIndex() log.Info("Using ElasticSearch Index %s.", conf.ElasticSearchIndex) appContext := server.AppContext{ Config: conf, } elasticSearch := elasticsearch.New(getElasticSearchUrl()) elasticSearch.SetEventIndex(conf.ElasticSearchIndex) elasticSearch.InitKeyword() pingResponse, err := elasticSearch.Ping() if err != nil { log.Error("Failed to ping Elastic Search: %v", err) } else { log.Info("Connected to Elastic Search (version: %s)", pingResponse.Version.Number) } appContext.ElasticSearch = elasticSearch appContext.EventService = elasticsearch.NewEventService(elasticSearch) appContext.AlertQueryService = elasticsearch.NewAlertQueryService(elasticSearch) appContext.EventQueryService = elasticsearch.NewEventQueryService(elasticSearch) appContext.ReportService = elasticsearch.NewReportService(elasticSearch) appContext.Vars.DevWebAppServerUrl = opts.DevServerUri var datastoreType string = "elasticsearch" if opts.Sqlite { datastoreType = "sqlite" } if datastoreType == "elasticsearch" { appContext.DataStore, err = elasticsearch.NewDataStore(elasticSearch) if err != nil { log.Fatal(err) } } else if datastoreType == "sqlite" { appContext.DataStore, err = sqlite.NewDataStore() if err != nil { log.Fatal(err) } } httpServer := server.NewServer(appContext) err = httpServer.Start(opts.Host + ":" + opts.Port) if err != nil { log.Fatal(err) } }