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
}