Skip to content

Commit

Permalink
[chore] Simplify context with EnvKey usage in hostmetrics receiver
Browse files Browse the repository at this point in the history
Signed-off-by: Bogdan Drutu <[email protected]>
  • Loading branch information
bogdandrutu committed Dec 20, 2024
1 parent 23306ea commit 0d840e2
Show file tree
Hide file tree
Showing 21 changed files with 72 additions and 92 deletions.
2 changes: 0 additions & 2 deletions receiver/hostmetricsreceiver/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,8 +85,6 @@ func (cfg *Config) Unmarshal(componentParser *confmap.Conf) error {
}

scraperCfg.SetRootPath(cfg.RootPath)
envMap := setGoPsutilEnvVars(cfg.RootPath, &osEnv{})
scraperCfg.SetEnvMap(envMap)

cfg.Scrapers[key] = scraperCfg
}
Expand Down
12 changes: 0 additions & 12 deletions receiver/hostmetricsreceiver/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import (
"testing"
"time"

"github.com/shirou/gopsutil/v4/common"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.opentelemetry.io/collector/component"
Expand Down Expand Up @@ -47,7 +46,6 @@ func TestLoadConfig(t *testing.T) {
cfg.Scrapers = map[component.Type]internal.Config{
cpuscraper.Type: func() internal.Config {
cfg := (&cpuscraper.Factory{}).CreateDefaultConfig()
cfg.SetEnvMap(common.EnvMap{})
return cfg
}(),
}
Expand All @@ -65,28 +63,23 @@ func TestLoadConfig(t *testing.T) {
Scrapers: map[component.Type]internal.Config{
cpuscraper.Type: func() internal.Config {
cfg := (&cpuscraper.Factory{}).CreateDefaultConfig()
cfg.SetEnvMap(common.EnvMap{})
return cfg
}(),
diskscraper.Type: func() internal.Config {
cfg := (&diskscraper.Factory{}).CreateDefaultConfig()
cfg.SetEnvMap(common.EnvMap{})
return cfg
}(),
loadscraper.Type: (func() internal.Config {
cfg := (&loadscraper.Factory{}).CreateDefaultConfig()
cfg.(*loadscraper.Config).CPUAverage = true
cfg.SetEnvMap(common.EnvMap{})
return cfg
})(),
filesystemscraper.Type: func() internal.Config {
cfg := (&filesystemscraper.Factory{}).CreateDefaultConfig()
cfg.SetEnvMap(common.EnvMap{})
return cfg
}(),
memoryscraper.Type: func() internal.Config {
cfg := (&memoryscraper.Factory{}).CreateDefaultConfig()
cfg.SetEnvMap(common.EnvMap{})
return cfg
}(),
networkscraper.Type: (func() internal.Config {
Expand All @@ -95,17 +88,14 @@ func TestLoadConfig(t *testing.T) {
Interfaces: []string{"test1"},
Config: filterset.Config{MatchType: "strict"},
}
cfg.SetEnvMap(common.EnvMap{})
return cfg
})(),
processesscraper.Type: func() internal.Config {
cfg := (&processesscraper.Factory{}).CreateDefaultConfig()
cfg.SetEnvMap(common.EnvMap{})
return cfg
}(),
pagingscraper.Type: func() internal.Config {
cfg := (&pagingscraper.Factory{}).CreateDefaultConfig()
cfg.SetEnvMap(common.EnvMap{})
return cfg
}(),
processscraper.Type: (func() internal.Config {
Expand All @@ -114,12 +104,10 @@ func TestLoadConfig(t *testing.T) {
Names: []string{"test2", "test3"},
Config: filterset.Config{MatchType: "regexp"},
}
cfg.SetEnvMap(common.EnvMap{})
return cfg
})(),
systemscraper.Type: (func() internal.Config {
cfg := (&systemscraper.Factory{}).CreateDefaultConfig()
cfg.SetEnvMap(common.EnvMap{})
return cfg
})(),
},
Expand Down
13 changes: 8 additions & 5 deletions receiver/hostmetricsreceiver/factory.go
Original file line number Diff line number Diff line change
Expand Up @@ -106,19 +106,22 @@ func createLogsReceiver(
func createAddScraperOptions(
ctx context.Context,
set receiver.Settings,
config *Config,
cfg *Config,
factories map[component.Type]internal.ScraperFactory,
) ([]scraperhelper.ScraperControllerOption, error) {
scraperControllerOptions := make([]scraperhelper.ScraperControllerOption, 0, len(config.Scrapers))
scraperControllerOptions := make([]scraperhelper.ScraperControllerOption, 0, len(cfg.Scrapers))

for key, cfg := range config.Scrapers {
hostMetricsScraper, ok, err := createHostMetricsScraper(ctx, set, key, cfg, factories)
envMap := setGoPsutilEnvVars(cfg.RootPath, &osEnv{})

for key, cfg := range cfg.Scrapers {
scrp, ok, err := createHostMetricsScraper(ctx, set, key, cfg, factories)
if err != nil {
return nil, fmt.Errorf("failed to create scraper for key %q: %w", key, err)
}

if ok {
scraperControllerOptions = append(scraperControllerOptions, scraperhelper.AddScraper(metadata.Type, hostMetricsScraper))
scrp = internal.NewEnvVarScraper(scrp, envMap)
scraperControllerOptions = append(scraperControllerOptions, scraperhelper.AddScraper(metadata.Type, scrp))
continue
}

Expand Down
30 changes: 25 additions & 5 deletions receiver/hostmetricsreceiver/internal/scraper.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ import (
"context"

"github.com/shirou/gopsutil/v4/common"
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/pdata/pmetric"
"go.opentelemetry.io/collector/receiver"
"go.opentelemetry.io/collector/scraper"
)
Expand All @@ -24,18 +26,36 @@ type ScraperFactory interface {
// Config is the configuration of a scraper.
type Config interface {
SetRootPath(rootPath string)
SetEnvMap(envMap common.EnvMap)
}

type ScraperConfig struct {
RootPath string `mapstructure:"-"`
EnvMap common.EnvMap `mapstructure:"-"`
RootPath string `mapstructure:"-"`
}

func (p *ScraperConfig) SetRootPath(rootPath string) {
p.RootPath = rootPath
}

func (p *ScraperConfig) SetEnvMap(envMap common.EnvMap) {
p.EnvMap = envMap
type EnvVarScraper struct {
delegate scraper.Metrics
envMap common.EnvMap
}

func NewEnvVarScraper(delegate scraper.Metrics, envMap common.EnvMap) scraper.Metrics {
return &EnvVarScraper{delegate: delegate, envMap: envMap}
}

func (evs *EnvVarScraper) Start(ctx context.Context, host component.Host) error {
ctx = context.WithValue(ctx, common.EnvKey, evs.envMap)
return evs.delegate.Start(ctx, host)
}

func (evs *EnvVarScraper) ScrapeMetrics(ctx context.Context) (pmetric.Metrics, error) {
ctx = context.WithValue(ctx, common.EnvKey, evs.envMap)
return evs.delegate.ScrapeMetrics(ctx)
}

func (evs *EnvVarScraper) Shutdown(ctx context.Context) error {
ctx = context.WithValue(ctx, common.EnvKey, evs.envMap)
return evs.delegate.Shutdown(ctx)
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import (
"fmt"
"time"

"github.com/shirou/gopsutil/v4/common"
"github.com/shirou/gopsutil/v4/cpu"
"github.com/shirou/gopsutil/v4/host"
"go.opentelemetry.io/collector/component"
Expand Down Expand Up @@ -50,7 +49,6 @@ func newCPUScraper(_ context.Context, settings receiver.Settings, cfg *Config) *
}

func (s *cpuScraper) start(ctx context.Context, _ component.Host) error {
ctx = context.WithValue(ctx, common.EnvKey, s.config.EnvMap)
bootTime, err := s.bootTime(ctx)
if err != nil {
return err
Expand All @@ -60,7 +58,6 @@ func (s *cpuScraper) start(ctx context.Context, _ component.Host) error {
}

func (s *cpuScraper) scrape(ctx context.Context) (pmetric.Metrics, error) {
ctx = context.WithValue(ctx, common.EnvKey, s.config.EnvMap)
now := pcommon.NewTimestampFromTime(s.now())
cpuTimes, err := s.times(ctx, true /*percpu=*/)
if err != nil {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import (
"fmt"
"time"

"github.com/shirou/gopsutil/v4/common"
"github.com/shirou/gopsutil/v4/disk"
"github.com/shirou/gopsutil/v4/host"
"go.opentelemetry.io/collector/component"
Expand Down Expand Up @@ -66,7 +65,6 @@ func newDiskScraper(_ context.Context, settings receiver.Settings, cfg *Config)
}

func (s *diskScraper) start(ctx context.Context, _ component.Host) error {
ctx = context.WithValue(ctx, common.EnvKey, s.config.EnvMap)
bootTime, err := s.bootTime(ctx)
if err != nil {
return err
Expand All @@ -78,8 +76,6 @@ func (s *diskScraper) start(ctx context.Context, _ component.Host) error {
}

func (s *diskScraper) scrape(ctx context.Context) (pmetric.Metrics, error) {
ctx = context.WithValue(ctx, common.EnvKey, s.config.EnvMap)

now := pcommon.NewTimestampFromTime(time.Now())
ioCounters, err := s.ioCounters(ctx)
if err != nil {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,6 @@ func newFileSystemScraper(_ context.Context, settings receiver.Settings, cfg *Co
}

func (s *filesystemsScraper) start(ctx context.Context, _ component.Host) error {
ctx = context.WithValue(ctx, common.EnvKey, s.config.EnvMap)
bootTime, err := s.bootTime(ctx)
if err != nil {
return err
Expand All @@ -69,7 +68,6 @@ func (s *filesystemsScraper) start(ctx context.Context, _ component.Host) error
}

func (s *filesystemsScraper) scrape(ctx context.Context) (pmetric.Metrics, error) {
ctx = context.WithValue(ctx, common.EnvKey, s.config.EnvMap)
now := pcommon.NewTimestampFromTime(time.Now())

var errors scrapererror.ScrapeErrors
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -392,9 +392,9 @@ func TestScrape(t *testing.T) {
for k, v := range test.osEnv {
envMap[k] = v
}
test.config.EnvMap = envMap
ctx := context.WithValue(context.Background(), common.EnvKey, envMap)
test.config.SetRootPath(test.rootPath)
scraper, err := newFileSystemScraper(context.Background(), receivertest.NewNopSettings(), &test.config)
scraper, err := newFileSystemScraper(ctx, receivertest.NewNopSettings(), &test.config)
if test.newErrRegex != "" {
require.Error(t, err)
require.Regexp(t, test.newErrRegex, err)
Expand All @@ -412,14 +412,14 @@ func TestScrape(t *testing.T) {
scraper.bootTime = test.bootTimeFunc
}

err = scraper.start(context.Background(), componenttest.NewNopHost())
err = scraper.start(ctx, componenttest.NewNopHost())
if test.initializationErr != "" {
assert.EqualError(t, err, test.initializationErr)
return
}
require.NoError(t, err, "Failed to initialize file system scraper: %v", err)

md, err := scraper.scrape(context.Background())
md, err := scraper.scrape(ctx)
if test.expectedErr != "" {
assert.ErrorContains(t, err, test.expectedErr)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import (
"runtime"
"time"

"github.com/shirou/gopsutil/v4/common"
"github.com/shirou/gopsutil/v4/host"
"github.com/shirou/gopsutil/v4/load"
"go.opentelemetry.io/collector/component"
Expand Down Expand Up @@ -44,7 +43,6 @@ func newLoadScraper(_ context.Context, settings receiver.Settings, cfg *Config)

// start
func (s *loadScraper) start(ctx context.Context, _ component.Host) error {
ctx = context.WithValue(ctx, common.EnvKey, s.config.EnvMap)
bootTime, err := s.bootTime(ctx)
if err != nil {
return err
Expand Down Expand Up @@ -85,7 +83,6 @@ func (s *loadScraper) scrape(ctx context.Context) (pmetric.Metrics, error) {
}

now := pcommon.NewTimestampFromTime(time.Now())
ctx = context.WithValue(ctx, common.EnvKey, s.config.EnvMap)

avgLoadValues, err := s.load(ctx)
if err != nil {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import (
"fmt"
"time"

"github.com/shirou/gopsutil/v4/common"
"github.com/shirou/gopsutil/v4/host"
"github.com/shirou/gopsutil/v4/mem"
"go.opentelemetry.io/collector/component"
Expand All @@ -30,7 +29,6 @@ type memoryScraper struct {
settings receiver.Settings
config *Config
mb *metadata.MetricsBuilder
envMap common.EnvMap

// for mocking gopsutil mem.VirtualMemory
bootTime func(context.Context) (uint64, error)
Expand All @@ -43,7 +41,6 @@ func newMemoryScraper(_ context.Context, settings receiver.Settings, cfg *Config
}

func (s *memoryScraper) start(ctx context.Context, _ component.Host) error {
ctx = context.WithValue(ctx, common.EnvKey, s.envMap)
bootTime, err := s.bootTime(ctx)
if err != nil {
return err
Expand All @@ -58,8 +55,6 @@ func (s *memoryScraper) recordMemoryLimitMetric(now pcommon.Timestamp, memInfo *
}

func (s *memoryScraper) scrape(ctx context.Context) (pmetric.Metrics, error) {
ctx = context.WithValue(ctx, common.EnvKey, s.envMap)

now := pcommon.NewTimestampFromTime(time.Now())
memInfo, err := s.virtualMemory(ctx)
if err != nil {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import (
"fmt"
"time"

"github.com/shirou/gopsutil/v4/common"
"go.opentelemetry.io/collector/pdata/pcommon"
)

Expand All @@ -29,11 +28,10 @@ var allTCPStates = []string{
"TIME_WAIT",
}

func (s *networkScraper) recordNetworkConntrackMetrics() error {
func (s *networkScraper) recordNetworkConntrackMetrics(ctx context.Context) error {
if !s.config.MetricsBuilderConfig.Metrics.SystemNetworkConntrackCount.Enabled && !s.config.MetricsBuilderConfig.Metrics.SystemNetworkConntrackMax.Enabled {
return nil
}
ctx := context.WithValue(context.Background(), common.EnvKey, s.config.EnvMap)
now := pcommon.NewTimestampFromTime(time.Now())
conntrack, err := s.conntrack(ctx)
if err != nil {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@
//go:build !linux

package networkscraper // import "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/networkscraper"
import (
"context"
)

var allTCPStates = []string{
"CLOSE_WAIT",
Expand All @@ -20,6 +23,6 @@ var allTCPStates = []string{
"TIME_WAIT",
}

func (s *networkScraper) recordNetworkConntrackMetrics() error {
func (s *networkScraper) recordNetworkConntrackMetrics(context.Context) error {
return nil
}
Loading

0 comments on commit 0d840e2

Please sign in to comment.