func()

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
}