func collectMetricsFromConfig()

in internal/workloadmanager/workloadcollector.go [231:320]


func collectMetricsFromConfig(ctx context.Context, params Parameters, metricOverride string) WorkloadMetrics {
	log.CtxLogger(ctx).Info("Collecting Workload Manager metrics...")
	if fileInfo, err := params.OSStatReader(metricOverride); fileInfo != nil && err == nil {
		log.CtxLogger(ctx).Info("Using override metrics from yaml file")
		return collectOverrideMetrics(ctx, params.Config, params.ConfigFileReader, metricOverride)
	}

	// Read the latest instance info for this system.
	params.InstanceInfoReader.Read(ctx, params.Config, instanceinfo.NetworkInterfaceAddressMap)

	// Collect all metrics specified by the WLM Validation config.
	var system, corosync, hana, netweaver, pacemaker, custom WorkloadMetrics
	var wg sync.WaitGroup
	wg.Add(5)
	systemMetricsRoutine := &recovery.RecoverableRoutine{
		Routine: func(ctx context.Context, a any) {
			defer wg.Done()
			system = CollectSystemMetricsFromConfig(ctx, params)
		},
		ErrorCode:           usagemetrics.WLMCollectionSystemRoutineFailure,
		UsageLogger:         *usagemetrics.Logger,
		ExpectedMinDuration: 5 * time.Second,
	}
	systemMetricsRoutine.StartRoutine(ctx)
	hanaMetricsRoutine := &recovery.RecoverableRoutine{
		Routine: func(ctx context.Context, a any) {
			defer wg.Done()
			hana = CollectHANAMetricsFromConfig(ctx, params)
		},
		ErrorCode:           usagemetrics.WLMCollectionHANARoutineFailure,
		UsageLogger:         *usagemetrics.Logger,
		ExpectedMinDuration: 5 * time.Second,
	}
	hanaMetricsRoutine.StartRoutine(ctx)
	netweaverMetricsRoutine := &recovery.RecoverableRoutine{
		Routine: func(ctx context.Context, a any) {
			defer wg.Done()
			netweaver = CollectNetWeaverMetricsFromConfig(ctx, params)
		},
		ErrorCode:           usagemetrics.WLMCollectionNetweaverRoutineFailure,
		UsageLogger:         *usagemetrics.Logger,
		ExpectedMinDuration: 5 * time.Second,
	}
	netweaverMetricsRoutine.StartRoutine(ctx)
	pacemakerMetricsRoutine := &recovery.RecoverableRoutine{
		Routine: func(ctx context.Context, a any) {
			defer wg.Done()
			pacemaker = CollectPacemakerMetricsFromConfig(ctx, params)
			v := 0.0
			if len(pacemaker.Metrics) > 0 && len(pacemaker.Metrics[0].Points) > 0 {
				v = pacemaker.Metrics[0].Points[0].GetValue().GetDoubleValue()
			}
			corosync = CollectCorosyncMetricsFromConfig(ctx, params, v)
		},
		ErrorCode:           usagemetrics.WLMCollectionPacemakerRoutineFailure,
		UsageLogger:         *usagemetrics.Logger,
		ExpectedMinDuration: 5 * time.Second,
	}
	pacemakerMetricsRoutine.StartRoutine(ctx)
	customMetricsRoutine := &recovery.RecoverableRoutine{
		Routine: func(ctx context.Context, a any) {
			defer wg.Done()
			custom = CollectCustomMetricsFromConfig(ctx, params)
		},
		ErrorCode:           usagemetrics.WLMCollectionCustomRoutineFailure,
		UsageLogger:         *usagemetrics.Logger,
		ExpectedMinDuration: 5 * time.Second,
	}
	customMetricsRoutine.StartRoutine(ctx)
	wg.Wait()

	// Append the shared system metrics to all other metrics.
	sharedLabels := sharedLabels(system.Metrics[0].Metric.Labels)
	appendLabels(corosync.Metrics[0].Metric.Labels, sharedLabels)
	appendLabels(hana.Metrics[0].Metric.Labels, sharedLabels)
	appendLabels(netweaver.Metrics[0].Metric.Labels, sharedLabels)
	appendLabels(pacemaker.Metrics[0].Metric.Labels, sharedLabels)
	appendLabels(custom.Metrics[0].Metric.Labels, sharedLabels)

	// Concatenate all of the metrics together.
	allMetrics := []*mrpb.TimeSeries{}
	allMetrics = append(allMetrics, system.Metrics...)
	allMetrics = append(allMetrics, corosync.Metrics...)
	allMetrics = append(allMetrics, hana.Metrics...)
	allMetrics = append(allMetrics, netweaver.Metrics...)
	allMetrics = append(allMetrics, pacemaker.Metrics...)
	allMetrics = append(allMetrics, custom.Metrics...)

	return WorkloadMetrics{Metrics: allMetrics}
}