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