func StartTestRedis(port int) (database.DataAccess, func()) { flag.Parse() // For redis tests we just point at an external server. if *flagReddisHost != "" { testData := database.NewDataAccess(*flagReddisHost, true, 0, "") if *flagFlushRedis { log.Println("FLUSHING REDIS") c := testData.(database.RedisConnector).Get() defer c.Close() _, err := c.Do("FLUSHDB") if err != nil { log.Fatal(err) } } return testData, func() {} } // To test ledis, start a local instance in a new tmp dir. We will attempt to delete it when we're done. addr := fmt.Sprintf("127.0.0.1:%d", port) testPath := filepath.Join(os.TempDir(), "bosun_ledis_test", fmt.Sprintf("%d-%d", time.Now().UnixNano(), port)) log.Println("Test ledis at", testPath, addr) stop, err := database.StartLedis(testPath, addr) if err != nil { log.Fatal(err) } testData := database.NewDataAccess(addr, false, 0, "") return testData, func() { stop() os.RemoveAll(testPath) } }
func (s *Schedule) Init(c *conf.Conf) error { //initialize all variables and collections so they are ready to use. //this will be called once at app start, and also every time the rule //page runs, so be careful not to spawn long running processes that can't //be avoided. var err error s.Conf = c s.Group = make(map[time.Time]models.AlertKeys) s.pendingUnknowns = make(map[*conf.Notification][]*models.IncidentState) s.lastLogTimes = make(map[models.AlertKey]time.Time) s.LastCheck = time.Now() s.ctx = &checkContext{time.Now(), cache.New(0)} if s.DataAccess == nil { if c.RedisHost != "" { s.DataAccess = database.NewDataAccess(c.RedisHost, true, c.RedisDb, c.RedisPassword) } else { bind := "127.0.0.1:9565" _, err := database.StartLedis(c.LedisDir, bind) if err != nil { return err } s.DataAccess = database.NewDataAccess(bind, false, 0, "") } } if s.Search == nil { s.Search = search.NewSearch(s.DataAccess) } if c.StateFile != "" { s.db, err = bolt.Open(c.StateFile, 0600, nil) if err != nil { return err } } return nil }
func (s *Schedule) Init(c *conf.Conf) error { var err error s.Conf = c s.AlertStatuses = make(map[string]*AlertStatus) s.Silence = make(map[string]*Silence) s.Group = make(map[time.Time]expr.AlertKeys) s.Incidents = make(map[uint64]*Incident) s.pendingUnknowns = make(map[*conf.Notification][]*State) s.status = make(States) s.Search = search.NewSearch() s.LastCheck = time.Now() s.ctx = &checkContext{time.Now(), cache.New(0)} if s.DataAccess == nil { if c.RedisHost != "" { s.DataAccess = database.NewDataAccess(c.RedisHost, true) } else { bind := "127.0.0.1:9565" _, err := database.StartLedis(c.LedisDir, bind) if err != nil { return err } s.DataAccess = database.NewDataAccess(bind, false) } } if c.StateFile != "" { s.db, err = bolt.Open(c.StateFile, 0600, nil) if err != nil { return err } } return nil }
func (s *Schedule) Init(systemConf conf.SystemConfProvider, ruleConf conf.RuleConfProvider, skipLast, quiet bool) error { //initialize all variables and collections so they are ready to use. //this will be called once at app start, and also every time the rule //page runs, so be careful not to spawn long running processes that can't //be avoided. //var err error s.skipLast = skipLast s.quiet = quiet s.SystemConf = systemConf s.RuleConf = ruleConf s.Group = make(map[time.Time]models.AlertKeys) s.pendingUnknowns = make(map[*conf.Notification][]*models.IncidentState) s.lastLogTimes = make(map[models.AlertKey]time.Time) s.LastCheck = utcNow() s.ctx = &checkContext{utcNow(), cache.New(0)} // Initialize the context and waitgroup used to gracefully shutdown bosun as well as reload s.runnerContext, s.cancelChecks = context.WithCancel(context.Background()) s.checksRunning = sync.WaitGroup{} if s.DataAccess == nil { if systemConf.GetRedisHost() != "" { s.DataAccess = database.NewDataAccess(systemConf.GetRedisHost(), true, systemConf.GetRedisDb(), systemConf.GetRedisPassword()) } else { _, err := database.StartLedis(systemConf.GetLedisDir(), systemConf.GetLedisBindAddr()) if err != nil { return err } s.DataAccess = database.NewDataAccess(systemConf.GetLedisBindAddr(), false, 0, "") } } if s.Search == nil { s.Search = search.NewSearch(s.DataAccess, skipLast) } return nil }