func()

in metric/cpu/cpu.go [150:203]


func (metric Metrics) Format(opts MetricOpts) (mapstr.M, error) {

	timeDelta := metric.currentSample.Total() - metric.previousSample.Total()
	if timeDelta <= 0 {
		return nil, errors.New("previous sample is newer than current sample")
	}
	normCPU := metric.count
	if !metric.isTotals {
		normCPU = 1
	}

	formattedMetrics := mapstr.M{}

	reportOptMetric := func(name string, current, previous opt.Uint, norm int) {
		if !current.IsZero() {
			formattedMetrics[name] = fillMetric(opts, current, previous, timeDelta, norm)
		}
	}

	if opts.Percentages {
		_, _ = formattedMetrics.Put("total.pct", createTotal(metric.previousSample, metric.currentSample, timeDelta, normCPU))
	}
	if opts.NormalizedPercentages {
		_, _ = formattedMetrics.Put("total.norm.pct", createTotal(metric.previousSample, metric.currentSample, timeDelta, 1))
	}

	// /proc/stat metrics
	reportOptMetric("user", metric.currentSample.User, metric.previousSample.User, normCPU)
	reportOptMetric("system", metric.currentSample.Sys, metric.previousSample.Sys, normCPU)
	reportOptMetric("idle", metric.currentSample.Idle, metric.previousSample.Idle, normCPU)
	reportOptMetric("nice", metric.currentSample.Nice, metric.previousSample.Nice, normCPU)
	reportOptMetric("irq", metric.currentSample.Irq, metric.previousSample.Irq, normCPU)
	reportOptMetric("iowait", metric.currentSample.Wait, metric.previousSample.Wait, normCPU)
	reportOptMetric("softirq", metric.currentSample.SoftIrq, metric.previousSample.SoftIrq, normCPU)
	reportOptMetric("steal", metric.currentSample.Stolen, metric.previousSample.Stolen, normCPU)

	// Only add CPU info metrics if we're returning information by core
	// (isTotals is false)
	if !metric.isTotals {
		// Some platforms do not report those metrics, so metric.cpuInfo
		// is empty, if that happens we do not add the empty metrics to the
		// final event.
		if metric.cpuInfo != (CPUInfo{}) {
			// /proc/cpuinfo metrics
			formattedMetrics["model_number"] = metric.cpuInfo.ModelNumber
			formattedMetrics["model_name"] = metric.cpuInfo.ModelName
			formattedMetrics["mhz"] = metric.cpuInfo.Mhz
			formattedMetrics["core_id"] = metric.cpuInfo.CoreID
			formattedMetrics["physical_id"] = metric.cpuInfo.PhysicalID
		}
	}

	return formattedMetrics, nil
}