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
}
}
}