func main() { todd_version := "0.0.1" cfg := config.GetConfig(arg_config) // Start serving collectors and testlets, and retrieve map of names and hashes assets := serveAssets(cfg) // Perform database initialization tasks tdb, err := db.NewToddDB(cfg) if err != nil { log.Fatalf("Error setting up database: %v\n", err) } if err := tdb.Init(); err != nil { log.Fatalf("Error initializing database: %v\n", err) } // Initialize API var tapi toddapi.ToDDApi go func() { log.Fatal(tapi.Start(cfg)) }() // Start listening for agent advertisements var tc = comms.NewToDDComms(cfg) go tc.CommsPackage.ListenForAgent(assets) // Kick off group calculation in background go func() { for { log.Info("Beginning group calculation") grouping.CalculateGroups(cfg) time.Sleep(time.Second * time.Duration(cfg.Grouping.Interval)) } }() log.Infof("ToDD server v%s. Press any key to exit...\n", todd_version) // Sssh, sssh, only dreams now.... for { time.Sleep(time.Second * 10) } }
func main() { cfg := config.GetConfig(arg_config) // Set up cache var ac = cache.NewAgentCache(cfg) ac.Init() // Generate UUID uuid := hostresources.GenerateUuid() ac.SetKeyValue("uuid", uuid) log.Infof("ToDD Agent Activated: %s", uuid) // Start test data reporting service go testing.WatchForFinishedTestRuns(cfg) // Construct comms package var tc = comms.NewToDDComms(cfg) // Spawn goroutine to listen for tasks issued by server go func() { for { err := tc.CommsPackage.ListenForTasks(uuid) if err != nil { log.Warn("ListenForTasks reported a failure. Trying again...") } } }() // Watch for changes to group membership go tc.CommsPackage.WatchForGroup() // Continually advertise agent status into message queue for { // Gather assets here as a map, and refer to a key in that map in the below struct gatheredAssets := GetLocalAssets(cfg) var defaultaddr string if cfg.LocalResources.IPAddrOverride != "" { defaultaddr = cfg.LocalResources.IPAddrOverride } else { defaultaddr = hostresources.GetIPOfInt(cfg.LocalResources.DefaultInterface).String() } // Create an AgentAdvert instance to represent this particular agent me := defs.AgentAdvert{ Uuid: uuid, DefaultAddr: defaultaddr, FactCollectors: gatheredAssets["factcollectors"], Testlets: gatheredAssets["testlets"], Facts: facts.GetFacts(cfg), LocalTime: time.Now().UTC(), } // Advertise this agent err := tc.CommsPackage.AdvertiseAgent(me) if err != nil { log.Error("Failed to advertise agent after several retries") } time.Sleep(15 * time.Second) // TODO(moswalt): make configurable } }