in internal/oraclediscovery/oraclediscovery.go [343:389]
func (d DiscoveryService) createListener(ctx context.Context, username string, alias string, envVars map[string]string) (*odpb.Discovery_Listener, error) {
if _, ok := envVars["ORACLE_HOME"]; !ok {
return nil, errOracleHomeNotFound
}
var vars []string
for key, value := range envVars {
vars = append(vars, fmt.Sprintf("%s=%s", key, value))
}
params := commandlineexecutor.Params{
Executable: fmt.Sprintf("%s/bin/lsnrctl", envVars["ORACLE_HOME"]),
Args: []string{"status", alias},
Env: vars,
User: username,
}
result := d.executeCommand(ctx, params)
if result.Error != nil {
log.CtxLogger(ctx).Errorw("Failed to execute command", "params", params, "result", result)
return nil, fmt.Errorf("executing command to get listener information: %w", result.Error)
}
listener, err := parseLsnrctlStatusOutput(ctx, strings.NewReader(result.StdOut), envVars)
if err != nil {
log.CtxLogger(ctx).Errorw("Failed to parse output from 'lsnrctl status' command", "params", params, "result", result)
return nil, fmt.Errorf("parsing output from 'lsnrctl status' command: %w", err)
}
params = commandlineexecutor.Params{
Executable: fmt.Sprintf("%s/bin/lsnrctl", envVars["ORACLE_HOME"]),
Args: []string{"services", alias},
Env: vars,
User: username,
}
result = d.executeCommand(ctx, params)
if result.Error != nil {
log.CtxLogger(ctx).Errorw("Failed to execute command", "params", params, "result", result)
return nil, fmt.Errorf("executing command to get listener information: %w", result.Error)
}
err = populateInstanceHandlers(ctx, strings.NewReader(result.StdOut), listener)
if err != nil {
log.CtxLogger(ctx).Errorw("Failed to parse output from 'lsnrctl services' command", "params", params, "result", result)
return nil, fmt.Errorf("parsing output from 'lsnrctl services' command: %w", err)
}
return listener, nil
}