func runDiscovery()

in internal/daemon/oracle/oracle.go [113:162]


func runDiscovery(ctx context.Context, a any) {
	log.CtxLogger(ctx).Info("Running Oracle Discovery")
	var args runDiscoveryArgs
	var ok bool
	if args, ok = a.(runDiscoveryArgs); !ok {
		log.CtxLogger(ctx).Error("args is not of type runDiscoveryArgs")
		return
	}
	s := args.s

	ticker := time.NewTicker(args.s.Config.GetOracleConfiguration().GetOracleDiscovery().GetUpdateFrequency().AsDuration())
	defer ticker.Stop()

	ds := oraclediscovery.New()

	for {
		// Discovery data is not used yet.
		s.processesMutex.Lock()
		processes := s.processes
		s.processesMutex.Unlock()
		// Don't start discovery until processes are populated.
		for processes == nil {
			time.Sleep(5 * time.Second)
			s.processesMutex.Lock()
			processes = s.processes
			s.processesMutex.Unlock()
			// Respect context cancellation.
			select {
			case <-ctx.Done():
				log.CtxLogger(ctx).Info("Oracle Discovery cancellation requested")
				return
			default:
				continue
			}
		}
		_, err := ds.Discover(ctx, s.CloudProps, processes)
		if err != nil {
			log.CtxLogger(ctx).Errorw("Failed to discover databases", "error", err)
			return
		}

		select {
		case <-ctx.Done():
			log.CtxLogger(ctx).Info("Oracle Discovery cancellation requested")
			return
		case <-ticker.C:
			continue
		}
	}
}