Skip to content

Commit

Permalink
hostmetricsreceiver (process): Refactor to use metric metadata
Browse files Browse the repository at this point in the history
  • Loading branch information
asuresh4 committed Jan 29, 2021
1 parent c9e0180 commit e83edad
Show file tree
Hide file tree
Showing 7 changed files with 157 additions and 116 deletions.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import (
"go.opentelemetry.io/collector/consumer/pdata"
"go.opentelemetry.io/collector/internal/processor/filterset"
"go.opentelemetry.io/collector/receiver/hostmetricsreceiver/internal"
"go.opentelemetry.io/collector/receiver/hostmetricsreceiver/internal/metadata"
"go.opentelemetry.io/collector/receiver/scraperhelper"
)

Expand Down Expand Up @@ -190,7 +191,7 @@ func scrapeAndAppendCPUTimeMetric(metrics pdata.MetricSlice, startTime, now pdat
}

func initializeCPUTimeMetric(metric pdata.Metric, startTime, now pdata.TimestampUnixNano, times *cpu.TimesStat) {
cpuTimeDescriptor.CopyTo(metric)
metadata.Metrics.ProcessCPUTime.Init(metric)

ddps := metric.DoubleSum().DataPoints()
ddps.Resize(cpuStatesLen)
Expand All @@ -205,8 +206,8 @@ func scrapeAndAppendMemoryUsageMetrics(metrics pdata.MetricSlice, now pdata.Time

startIdx := metrics.Len()
metrics.Resize(startIdx + memoryMetricsLen)
initializeMemoryUsageMetric(metrics.At(startIdx+0), physicalMemoryUsageDescriptor, now, int64(mem.RSS))
initializeMemoryUsageMetric(metrics.At(startIdx+1), virtualMemoryUsageDescriptor, now, int64(mem.VMS))
initializeMemoryUsageMetric(metrics.At(startIdx+0), metadata.Metrics.ProcessMemoryPhysicalUsage.New(), now, int64(mem.RSS))
initializeMemoryUsageMetric(metrics.At(startIdx+1), metadata.Metrics.ProcessMemoryVirtualUsage.New(), now, int64(mem.VMS))
return nil
}

Expand Down Expand Up @@ -236,17 +237,17 @@ func scrapeAndAppendDiskIOMetric(metrics pdata.MetricSlice, startTime, now pdata
}

func initializeDiskIOMetric(metric pdata.Metric, startTime, now pdata.TimestampUnixNano, io *process.IOCountersStat) {
diskIODescriptor.CopyTo(metric)
metadata.Metrics.ProcessDiskIo.Init(metric)

idps := metric.IntSum().DataPoints()
idps.Resize(2)
initializeDiskIODataPoint(idps.At(0), startTime, now, int64(io.ReadBytes), readDirectionLabelValue)
initializeDiskIODataPoint(idps.At(1), startTime, now, int64(io.WriteBytes), writeDirectionLabelValue)
initializeDiskIODataPoint(idps.At(0), startTime, now, int64(io.ReadBytes), metadata.LabelProcessDirection.Read)
initializeDiskIODataPoint(idps.At(1), startTime, now, int64(io.WriteBytes), metadata.LabelProcessDirection.Write)
}

func initializeDiskIODataPoint(dataPoint pdata.IntDataPoint, startTime, now pdata.TimestampUnixNano, value int64, directionLabel string) {
labelsMap := dataPoint.LabelsMap()
labelsMap.Insert(directionLabelName, directionLabel)
labelsMap.Insert(metadata.Labels.ProcessDirection, directionLabel)
dataPoint.SetStartTime(startTime)
dataPoint.SetTimestamp(now)
dataPoint.SetValue(value)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,19 +20,20 @@ import (
"github.com/shirou/gopsutil/cpu"

"go.opentelemetry.io/collector/consumer/pdata"
"go.opentelemetry.io/collector/receiver/hostmetricsreceiver/internal/metadata"
)

const cpuStatesLen = 3

func appendCPUTimeStateDataPoints(ddps pdata.DoubleDataPointSlice, startTime, now pdata.TimestampUnixNano, cpuTime *cpu.TimesStat) {
initializeCPUTimeDataPoint(ddps.At(0), startTime, now, cpuTime.User, userStateLabelValue)
initializeCPUTimeDataPoint(ddps.At(1), startTime, now, cpuTime.System, systemStateLabelValue)
initializeCPUTimeDataPoint(ddps.At(2), startTime, now, cpuTime.Iowait, waitStateLabelValue)
initializeCPUTimeDataPoint(ddps.At(0), startTime, now, cpuTime.User, metadata.LabelProcessState.User)
initializeCPUTimeDataPoint(ddps.At(1), startTime, now, cpuTime.System, metadata.LabelProcessState.System)
initializeCPUTimeDataPoint(ddps.At(2), startTime, now, cpuTime.Iowait, metadata.LabelProcessState.Wait)
}

func initializeCPUTimeDataPoint(dataPoint pdata.DoubleDataPoint, startTime, now pdata.TimestampUnixNano, value float64, stateLabel string) {
labelsMap := dataPoint.LabelsMap()
labelsMap.Insert(stateLabelName, stateLabel)
labelsMap.Insert(metadata.Labels.ProcessState, stateLabel)
dataPoint.SetStartTime(startTime)
dataPoint.SetTimestamp(now)
dataPoint.SetValue(value)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ import (
"go.opentelemetry.io/collector/consumer/pdata"
"go.opentelemetry.io/collector/internal/processor/filterset"
"go.opentelemetry.io/collector/receiver/hostmetricsreceiver/internal"
"go.opentelemetry.io/collector/receiver/hostmetricsreceiver/internal/metadata"
"go.opentelemetry.io/collector/translator/conventions"
)

Expand Down Expand Up @@ -72,8 +73,8 @@ func TestScrape(t *testing.T) {
require.Greater(t, resourceMetrics.Len(), 1)
assertProcessResourceAttributesExist(t, resourceMetrics)
assertCPUTimeMetricValid(t, resourceMetrics, expectedStartTime)
assertMemoryUsageMetricValid(t, physicalMemoryUsageDescriptor, resourceMetrics)
assertMemoryUsageMetricValid(t, virtualMemoryUsageDescriptor, resourceMetrics)
assertMemoryUsageMetricValid(t, metadata.Metrics.ProcessMemoryPhysicalUsage.New(), resourceMetrics)
assertMemoryUsageMetricValid(t, metadata.Metrics.ProcessMemoryVirtualUsage.New(), resourceMetrics)
assertDiskIOMetricValid(t, resourceMetrics, expectedStartTime)
assertSameTimeStampForAllMetricsWithinResource(t, resourceMetrics)
}
Expand All @@ -91,15 +92,15 @@ func assertProcessResourceAttributesExist(t *testing.T, resourceMetrics pdata.Re
}

func assertCPUTimeMetricValid(t *testing.T, resourceMetrics pdata.ResourceMetricsSlice, startTime pdata.TimestampUnixNano) {
cpuTimeMetric := getMetric(t, cpuTimeDescriptor, resourceMetrics)
internal.AssertDescriptorEqual(t, cpuTimeDescriptor, cpuTimeMetric)
cpuTimeMetric := getMetric(t, metadata.Metrics.ProcessCPUTime.New(), resourceMetrics)
internal.AssertDescriptorEqual(t, metadata.Metrics.ProcessCPUTime.New(), cpuTimeMetric)
if startTime != 0 {
internal.AssertDoubleSumMetricStartTimeEquals(t, cpuTimeMetric, startTime)
}
internal.AssertDoubleSumMetricLabelHasValue(t, cpuTimeMetric, 0, stateLabelName, userStateLabelValue)
internal.AssertDoubleSumMetricLabelHasValue(t, cpuTimeMetric, 1, stateLabelName, systemStateLabelValue)
internal.AssertDoubleSumMetricLabelHasValue(t, cpuTimeMetric, 0, "state", "user")
internal.AssertDoubleSumMetricLabelHasValue(t, cpuTimeMetric, 1, "state", "system")
if runtime.GOOS == "linux" {
internal.AssertDoubleSumMetricLabelHasValue(t, cpuTimeMetric, 2, stateLabelName, waitStateLabelValue)
internal.AssertDoubleSumMetricLabelHasValue(t, cpuTimeMetric, 2, "state", "wait")
}
}

Expand All @@ -109,13 +110,13 @@ func assertMemoryUsageMetricValid(t *testing.T, descriptor pdata.Metric, resourc
}

func assertDiskIOMetricValid(t *testing.T, resourceMetrics pdata.ResourceMetricsSlice, startTime pdata.TimestampUnixNano) {
diskIOMetric := getMetric(t, diskIODescriptor, resourceMetrics)
internal.AssertDescriptorEqual(t, diskIODescriptor, diskIOMetric)
diskIOMetric := getMetric(t, metadata.Metrics.ProcessDiskIo.New(), resourceMetrics)
internal.AssertDescriptorEqual(t, metadata.Metrics.ProcessDiskIo.New(), diskIOMetric)
if startTime != 0 {
internal.AssertIntSumMetricStartTimeEquals(t, diskIOMetric, startTime)
}
internal.AssertIntSumMetricLabelHasValue(t, diskIOMetric, 0, directionLabelName, readDirectionLabelValue)
internal.AssertIntSumMetricLabelHasValue(t, diskIOMetric, 1, directionLabelName, writeDirectionLabelValue)
internal.AssertIntSumMetricLabelHasValue(t, diskIOMetric, 0, "direction", "read")
internal.AssertIntSumMetricLabelHasValue(t, diskIOMetric, 1, "direction", "write")
}

func assertSameTimeStampForAllMetricsWithinResource(t *testing.T, resourceMetrics pdata.ResourceMetricsSlice) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,18 +23,19 @@ import (
"github.com/shirou/gopsutil/cpu"

"go.opentelemetry.io/collector/consumer/pdata"
"go.opentelemetry.io/collector/receiver/hostmetricsreceiver/internal/metadata"
)

const cpuStatesLen = 2

func appendCPUTimeStateDataPoints(ddps pdata.DoubleDataPointSlice, startTime, now pdata.TimestampUnixNano, cpuTime *cpu.TimesStat) {
initializeCPUTimeDataPoint(ddps.At(0), startTime, now, cpuTime.User, userStateLabelValue)
initializeCPUTimeDataPoint(ddps.At(1), startTime, now, cpuTime.System, systemStateLabelValue)
initializeCPUTimeDataPoint(ddps.At(0), startTime, now, cpuTime.User, metadata.LabelProcessState.User)
initializeCPUTimeDataPoint(ddps.At(1), startTime, now, cpuTime.System, metadata.LabelProcessState.System)
}

func initializeCPUTimeDataPoint(dataPoint pdata.DoubleDataPoint, startTime, now pdata.TimestampUnixNano, value float64, stateLabel string) {
labelsMap := dataPoint.LabelsMap()
labelsMap.Insert(stateLabelName, stateLabel)
labelsMap.Insert(metadata.Labels.ProcessState, stateLabel)
dataPoint.SetStartTime(startTime)
dataPoint.SetTimestamp(now)
dataPoint.SetValue(value)
Expand Down

0 comments on commit e83edad

Please sign in to comment.