func()

in internal/system/appsdiscovery/apps_discovery.go [383:514]


func (d *SapDiscovery) discoverNetweaver(ctx context.Context, app *sappb.SAPInstance, conf *cpb.DiscoveryConfiguration) SapSystemDetails {
	appProps := &spb.SapDiscovery_Component_ApplicationProperties{
		ApplicationType: spb.SapDiscovery_Component_ApplicationProperties_NETWEAVER,
	}
	ascsHost, err := d.discoverASCS(ctx, app.Sapsid)
	if err != nil {
		log.CtxLogger(ctx).Infow("Encountered error during call to discoverASCS.", "error", err)
	} else {
		appProps.AscsUri = ascsHost
	}
	nfsHost, err := d.discoverAppNFS(ctx, app.Sapsid)
	if err != nil {
		log.CtxLogger(ctx).Infow("Encountered error during call to discoverAppNFS.", "error", err)
	} else {
		appProps.NfsUri = nfsHost
	}
	kernelVersion, err := d.discoverNetweaverKernelVersion(ctx, app.Sapsid)
	if err != nil {
		log.CtxLogger(ctx).Infow("Encountered error during call to discoverNetweaverKernelVersion.", "error", err)
	} else {
		appProps.KernelVersion = kernelVersion
	}
	ha, haNodes := d.discoverNetweaverHA(ctx, app)
	if !ha {
		haNodes = nil
	}

	ascsHosts, ersHosts, appHosts := d.discoverNetweaverHosts(ctx, app)
	log.CtxLogger(ctx).Debugw("ascsHosts", "ascsHosts", ascsHosts)
	log.CtxLogger(ctx).Debugw("ersHosts", "ersHosts", ersHosts)
	log.CtxLogger(ctx).Debugw("appHosts", "appHosts", appHosts)
	var iProps []*spb.SapDiscovery_Resource_InstanceProperties
	for _, a := range ascsHosts {
		iProps = append(iProps, &spb.SapDiscovery_Resource_InstanceProperties{
			VirtualHostname: a.Name,
			InstanceRole:    spb.SapDiscovery_Resource_InstanceProperties_INSTANCE_ROLE_ASCS,
		})
		appProps.AscsInstanceNumber = a.Number
	}

	for _, e := range ersHosts {
		iProps = append(iProps, &spb.SapDiscovery_Resource_InstanceProperties{
			VirtualHostname: e.Name,
			InstanceRole:    spb.SapDiscovery_Resource_InstanceProperties_INSTANCE_ROLE_ERS,
		})
		appProps.ErsInstanceNumber = e.Number
	}

	for _, a := range appHosts {
		iProps = append(iProps, &spb.SapDiscovery_Resource_InstanceProperties{
			VirtualHostname: a.Name,
			InstanceRole:    spb.SapDiscovery_Resource_InstanceProperties_INSTANCE_ROLE_APP_SERVER,
			AppInstances:    []*spb.SapDiscovery_Resource_InstanceProperties_AppInstance{a},
		})
	}

	details := SapSystemDetails{
		AppComponent: &spb.SapDiscovery_Component{
			Sid: app.Sapsid,
			Properties: &spb.SapDiscovery_Component_ApplicationProperties_{
				ApplicationProperties: appProps,
			},
			HaHosts: haNodes,
		},
		AppHosts:           haNodes,
		InstanceProperties: iProps,
		AppInstance:        app,
	}

	log.CtxLogger(ctx).Debugw("Checking config", "config", conf)
	var isABAP bool
	var wlProps *spb.SapDiscovery_WorkloadProperties
	if conf.GetEnableWorkloadDiscovery().GetValue() {
		isABAP, wlProps, err = d.discoverNetweaverABAP(ctx, app)
		if err != nil {
			log.CtxLogger(ctx).Infow("Encountered error during call to discoverNetweaverABAP.", "error", err)
		}
	}
	if isABAP {
		appProps.ApplicationType = spb.SapDiscovery_Component_ApplicationProperties_NETWEAVER_ABAP
	} else {
		isJava, javaProps, err := d.discoverNetweaverJava(ctx, app)
		if err != nil {
			log.CtxLogger(ctx).Infow("Encountered error during call to discoverNetweaverJava.", "error", err)
		}
		if isJava {
			wlProps = javaProps
			appProps.ApplicationType = spb.SapDiscovery_Component_ApplicationProperties_NETWEAVER_JAVA
		}
	}
	details.WorkloadProperties = wlProps

	dbSID, err := d.discoverDatabaseSID(ctx, app.Sapsid, isABAP)
	if err != nil {
		return details
	}
	details.DBComponent = &spb.SapDiscovery_Component{
		Sid: dbSID,
	}
	dbHosts, err := d.discoverAppToDBConnection(ctx, app.Sapsid, isABAP)
	if err != nil {
		log.CtxLogger(ctx).Infow("Encountered error during call to discoverAppToDBConnection.", "error", err)
	} else {
		details.DBHosts = dbHosts
	}
	dbType, err := d.discoverDBType(ctx, app.Sapsid)
	if err != nil {
		log.CtxLogger(ctx).Infow("Encountered error during call to discoverDBType.", "error", err)
		return details
	}
	details.DBComponent.Properties = &spb.SapDiscovery_Component_DatabaseProperties_{
		DatabaseProperties: &spb.SapDiscovery_Component_DatabaseProperties{
			DatabaseType: dbType,
		},
	}
	if dbType == spb.SapDiscovery_Component_DatabaseProperties_HANA {
		return details
	}

	// For non-HANA DBs, we just check for the SAPDBHOST in the DEFAULT.PFL file.
	dbhost, err := d.discoverDBHost(ctx, app.Sapsid)
	if err != nil {
		log.CtxLogger(ctx).Infow("Encountered error during call to discoverDBHost.", "error", err)
		return details
	}
	details.DBHosts = []string{dbhost}
	// For non-HANA DBs, we assume scale-up topology.
	if dbType != spb.SapDiscovery_Component_DatabaseProperties_HANA {
		details.DBComponent.TopologyType = spb.SapDiscovery_Component_TOPOLOGY_SCALE_UP
	}
	return details
}