in internal/workloadmanager/hanametrics.go [95:183]
func CollectHANAMetricsFromConfig(ctx context.Context, params Parameters) WorkloadMetrics {
log.CtxLogger(ctx).Debugw("Collecting Workload Manager HANA metrics...", "definitionVersion", params.WorkloadConfig.GetVersion())
l := map[string]string{}
hanaVal := 0.0
hanaSystemConfigDir := hanaSystemConfigFromSAPSID(ctx, params)
if hanaSystemConfigDir == "" {
log.CtxLogger(ctx).Debug("Skipping HANA metrics collection, HANA not active on instance")
return WorkloadMetrics{Metrics: createTimeSeries(sapValidationHANA, l, hanaVal, params.Config)}
}
sidAdm := sidAdminUser(ctx, params)
globalINIFilePath := hanaSystemConfigDir + "/global.ini"
// Short-circuit HANA metrics collection if global.ini file is not found.
// In addition to the metrics contained in the file, global.ini also contains
// basepath information for the HANA data and log volumes.
if _, err := params.OSStatReader(globalINIFilePath); err != nil {
log.CtxLogger(ctx).Debugw("Skipping HANA metrics collection, could not find global.ini file", "location", globalINIFilePath)
return WorkloadMetrics{Metrics: createTimeSeries(sapValidationHANA, l, hanaVal, params.Config)}
}
hana := params.WorkloadConfig.GetValidationHana()
for k, v := range configurablemetrics.CollectMetricsFromFile(ctx, configurablemetrics.FileReader(params.ConfigFileReader), globalINIFilePath, hana.GetGlobalIniMetrics()) {
l[k] = v
}
indexserverINIFilePath := hanaSystemConfigDir + "/indexserver.ini"
for k, v := range configurablemetrics.CollectMetricsFromFile(ctx, configurablemetrics.FileReader(params.ConfigFileReader), indexserverINIFilePath, hana.GetIndexserverIniMetrics()) {
l[k] = v
}
for _, m := range hana.GetOsCommandMetrics() {
k, v := configurablemetrics.CollectOSCommandMetric(ctx, m, params.Execute, params.osVendorID)
if k != "" {
l[k] = v
}
}
for _, volume := range hana.GetHanaDiskVolumeMetrics() {
diskInfo := diskInfo(ctx, volume, globalINIFilePath, sidAdm, params)
for _, m := range volume.GetMetrics() {
k := m.GetMetricInfo().GetLabel()
switch m.GetValue() {
case wpb.DiskVariable_TYPE:
l[k] = diskInfo["instancedisktype"]
case wpb.DiskVariable_MOUNT:
l[k] = diskInfo["mountpoint"]
case wpb.DiskVariable_SIZE:
l[k] = diskInfo["size"]
case wpb.DiskVariable_PD_SIZE:
l[k] = diskInfo["pdsize"]
case wpb.DiskVariable_BLOCK_DEVICE:
l[k] = diskInfo["blockdevice"]
}
}
}
for _, m := range hana.GetHaMetrics() {
k := m.GetMetricInfo().GetLabel()
switch m.GetValue() {
case wpb.HANAHighAvailabilityVariable_HA_IN_SAME_ZONE:
l[k] = fmt.Sprint(checkHAZones(ctx, params))
}
}
for _, m := range hana.GetDrMetrics() {
k := m.GetMetricInfo().GetLabel()
switch m.GetValue() {
case wpb.HANADisasterRecoveryVariable_DR_IN_SAME_REGION:
l[k] = fmt.Sprint(checkDRRegions(ctx, sidAdm, params))
}
}
hanaBackupMetrics := hanaBackupMetrics(ctx, params.Execute)
for _, m := range hana.GetHanaBackupMetrics() {
k := m.GetMetricInfo().GetLabel()
switch m.GetValue() {
case wpb.HANABackupVariable_TENANT_NAME:
l[k] = hanaBackupMetrics["oldest_backup_tenant_name"]
case wpb.HANABackupVariable_LAST_BACKUP_TIMESTAMP:
l[k] = hanaBackupMetrics["oldest_last_backup_timestamp_utc"]
case wpb.HANABackupVariable_DELTA_TENANT_NAME:
l[k] = hanaBackupMetrics["oldest_delta_backup_tenant_name"]
case wpb.HANABackupVariable_LAST_DELTA_BACKUP_TIMESTAMP:
l[k] = hanaBackupMetrics["oldest_last_delta_backup_timestamp_utc"]
case wpb.HANABackupVariable_SNAPSHOT_TENANT_NAME:
l[k] = hanaBackupMetrics["oldest_snapshot_backup_tenant_name"]
case wpb.HANABackupVariable_LAST_SNAPSHOT_BACKUP_TIMESTAMP:
l[k] = hanaBackupMetrics["oldest_last_snapshot_backup_timestamp_utc"]
}
}
hanaVal = 1.0
return WorkloadMetrics{Metrics: createTimeSeries(sapValidationHANA, l, hanaVal, params.Config)}
}