in internal/mysqlmetrics/mysqlmetrics.go [287:331]
func (m *MySQLMetrics) CollectMetricsOnce(ctx context.Context) (*workloadmanager.WorkloadMetrics, error) {
bufferPoolSize, err := m.bufferPoolSize(ctx)
if err != nil {
log.CtxLogger(ctx).Warnf("Failed to get buffer pool size: %v", err)
return nil, err
}
isWindowsOS := runtime.GOOS == "windows"
totalRAM, err := m.totalRAM(ctx, isWindowsOS)
if err != nil {
log.CtxLogger(ctx).Warnf("Failed to get total RAM: %v", err)
return nil, err
}
isInnoDBDefault, err := m.isInnoDBStorageEngine(ctx)
if err != nil {
log.CtxLogger(ctx).Warnf("Failed to get InnoDB default status: %v", err)
return nil, err
}
log.CtxLogger(ctx).Debugw("Finished collecting MySQL metrics once. Next step is to send to WLM (DW).",
bufferPoolKey, bufferPoolSize,
totalRAMKey, totalRAM,
innoDBKey, isInnoDBDefault,
)
metrics := workloadmanager.WorkloadMetrics{
WorkloadType: workloadmanager.MYSQL,
Metrics: map[string]string{
bufferPoolKey: strconv.FormatInt(bufferPoolSize, 10),
totalRAMKey: strconv.Itoa(totalRAM),
innoDBKey: strconv.FormatBool(isInnoDBDefault),
},
}
res, err := workloadmanager.SendDataInsight(ctx, workloadmanager.SendDataInsightParams{
WLMetrics: metrics,
CloudProps: m.Config.GetCloudProperties(),
WLMService: m.WLMClient,
})
if err != nil {
return nil, err
}
if res == nil {
log.CtxLogger(ctx).Warn("SendDataInsight did not return an error but the WriteInsight response is nil")
return &metrics, nil
}
log.CtxLogger(ctx).Debugw("WriteInsight response", "StatusCode", res.HTTPStatusCode)
return &metrics, nil
}