func()

in internal/oraclediscovery/oraclediscovery.go [304:341]


func (d DiscoveryService) discoverListeners(ctx context.Context, allProcesses []servicecommunication.ProcessWrapper) ([]*odpb.Discovery_Listener, error) {
	var listeners []*odpb.Discovery_Listener
	procs, err := d.findProcessesByName(ctx, oraListenerProc, allProcesses)
	if err != nil {
		return nil, err
	}
	log.CtxLogger(ctx).Debugf("Found %d Listener processes", len(procs))

	for _, p := range procs {
		environFilePath := fmt.Sprintf("/proc/%d/environ", p.Pid())
		envVars, err := d.extractOracleEnvVars(environFilePath, "ORACLE_HOME")
		if err != nil || len(envVars) == 0 {
			log.CtxLogger(ctx).Warnw("Failed to extract ORACLE_HOME environment variable", "error", err)
			continue
		}
		username, err := p.Username()
		if err != nil {
			log.CtxLogger(ctx).Warnw("Failed to extract username from process", "error", err, "process_id", p.Pid())
			continue
		}
		args, err := p.CmdlineSlice()
		if err != nil {
			log.CtxLogger(ctx).Warnw("Failed to extract command line arguments", "error", err, "process_id", p.Pid())
			continue
		}
		if len(args) < 2 {
			log.CtxLogger(ctx).Warnw("Listener alias not found in command line arguments", "process_id", p.Pid(), "args", args)
			continue
		}
		alias := args[1]
		listener, err := d.createListener(ctx, username, alias, envVars)
		if err != nil {
			return nil, err
		}
		listeners = append(listeners, listener)
	}
	return listeners, nil
}