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
}