func CollectHANAMetricsFromConfig()

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)}
}