Skip to content

Commit

Permalink
Update hostmetricsreceiver to use scraper.Factory
Browse files Browse the repository at this point in the history
Signed-off-by: Bogdan Drutu <bogdandrutu@gmail.com>
  • Loading branch information
bogdandrutu committed Jan 17, 2025
1 parent ad57c0f commit 689ab6a
Show file tree
Hide file tree
Showing 144 changed files with 1,733 additions and 840 deletions.
572 changes: 291 additions & 281 deletions .github/CODEOWNERS

Large diffs are not rendered by default.

10 changes: 10 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -231,6 +231,16 @@ body:
- receiver/googlecloudspanner
- receiver/haproxy
- receiver/hostmetrics
- receiver/hostmetrics/internal/scraper/cpuscraper
- receiver/hostmetrics/internal/scraper/diskscraper
- receiver/hostmetrics/internal/scraper/filesystemscraper
- receiver/hostmetrics/internal/scraper/loadscraper
- receiver/hostmetrics/internal/scraper/memoryscraper
- receiver/hostmetrics/internal/scraper/networkscraper
- receiver/hostmetrics/internal/scraper/pagingscraper
- receiver/hostmetrics/internal/scraper/processesscraper
- receiver/hostmetrics/internal/scraper/processscraper
- receiver/hostmetrics/internal/scraper/systemscraper
- receiver/httpcheck
- receiver/huaweicloudces
- receiver/iis
Expand Down
10 changes: 10 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,16 @@ body:
- receiver/googlecloudspanner
- receiver/haproxy
- receiver/hostmetrics
- receiver/hostmetrics/internal/scraper/cpuscraper
- receiver/hostmetrics/internal/scraper/diskscraper
- receiver/hostmetrics/internal/scraper/filesystemscraper
- receiver/hostmetrics/internal/scraper/loadscraper
- receiver/hostmetrics/internal/scraper/memoryscraper
- receiver/hostmetrics/internal/scraper/networkscraper
- receiver/hostmetrics/internal/scraper/pagingscraper
- receiver/hostmetrics/internal/scraper/processesscraper
- receiver/hostmetrics/internal/scraper/processscraper
- receiver/hostmetrics/internal/scraper/systemscraper
- receiver/httpcheck
- receiver/huaweicloudces
- receiver/iis
Expand Down
10 changes: 10 additions & 0 deletions .github/ISSUE_TEMPLATE/other.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,16 @@ body:
- receiver/googlecloudspanner
- receiver/haproxy
- receiver/hostmetrics
- receiver/hostmetrics/internal/scraper/cpuscraper
- receiver/hostmetrics/internal/scraper/diskscraper
- receiver/hostmetrics/internal/scraper/filesystemscraper
- receiver/hostmetrics/internal/scraper/loadscraper
- receiver/hostmetrics/internal/scraper/memoryscraper
- receiver/hostmetrics/internal/scraper/networkscraper
- receiver/hostmetrics/internal/scraper/pagingscraper
- receiver/hostmetrics/internal/scraper/processesscraper
- receiver/hostmetrics/internal/scraper/processscraper
- receiver/hostmetrics/internal/scraper/systemscraper
- receiver/httpcheck
- receiver/huaweicloudces
- receiver/iis
Expand Down
10 changes: 10 additions & 0 deletions .github/ISSUE_TEMPLATE/unmaintained.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,16 @@ body:
- receiver/googlecloudspanner
- receiver/haproxy
- receiver/hostmetrics
- receiver/hostmetrics/internal/scraper/cpuscraper
- receiver/hostmetrics/internal/scraper/diskscraper
- receiver/hostmetrics/internal/scraper/filesystemscraper
- receiver/hostmetrics/internal/scraper/loadscraper
- receiver/hostmetrics/internal/scraper/memoryscraper
- receiver/hostmetrics/internal/scraper/networkscraper
- receiver/hostmetrics/internal/scraper/pagingscraper
- receiver/hostmetrics/internal/scraper/processesscraper
- receiver/hostmetrics/internal/scraper/processscraper
- receiver/hostmetrics/internal/scraper/systemscraper
- receiver/httpcheck
- receiver/huaweicloudces
- receiver/iis
Expand Down
2 changes: 2 additions & 0 deletions exporter/datadogexporter/go.sum

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

58 changes: 18 additions & 40 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/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/confmap/confmaptest"
Expand Down Expand Up @@ -42,10 +41,10 @@ func TestLoadConfig(t *testing.T) {
id: component.NewID(metadata.Type),
expected: func() component.Config {
cfg := createDefaultConfig().(*Config)
cpu := cpuscraper.NewFactory()
cfg.Scrapers = map[component.Type]component.Config{
cpuscraper.Type: func() component.Config {
cfg := (&cpuscraper.Factory{}).CreateDefaultConfig()
return cfg
cpu.Type(): func() component.Config {
return cpu.CreateDefaultConfig()
}(),
}
return cfg
Expand All @@ -60,55 +59,34 @@ func TestLoadConfig(t *testing.T) {
InitialDelay: time.Second,
},
Scrapers: map[component.Type]component.Config{
cpuscraper.Type: func() component.Config {
cfg := (&cpuscraper.Factory{}).CreateDefaultConfig()
return cfg
}(),
diskscraper.Type: func() component.Config {
cfg := (&diskscraper.Factory{}).CreateDefaultConfig()
return cfg
}(),
loadscraper.Type: (func() component.Config {
cfg := (&loadscraper.Factory{}).CreateDefaultConfig()
component.MustNewType("cpu"): cpuscraper.NewFactory().CreateDefaultConfig(),
component.MustNewType("disk"): diskscraper.NewFactory().CreateDefaultConfig(),
component.MustNewType("load"): (func() component.Config {
cfg := loadscraper.NewFactory().CreateDefaultConfig()
cfg.(*loadscraper.Config).CPUAverage = true
return cfg
})(),
filesystemscraper.Type: func() component.Config {
cfg := (&filesystemscraper.Factory{}).CreateDefaultConfig()
return cfg
}(),
memoryscraper.Type: func() component.Config {
cfg := (&memoryscraper.Factory{}).CreateDefaultConfig()
return cfg
}(),
networkscraper.Type: (func() component.Config {
cfg := (&networkscraper.Factory{}).CreateDefaultConfig()
component.MustNewType("filesystem"): filesystemscraper.NewFactory().CreateDefaultConfig(),
component.MustNewType("memory"): memoryscraper.NewFactory().CreateDefaultConfig(),
component.MustNewType("network"): (func() component.Config {
cfg := networkscraper.NewFactory().CreateDefaultConfig()
cfg.(*networkscraper.Config).Include = networkscraper.MatchConfig{
Interfaces: []string{"test1"},
Config: filterset.Config{MatchType: "strict"},
}
return cfg
})(),
processesscraper.Type: func() component.Config {
cfg := (&processesscraper.Factory{}).CreateDefaultConfig()
return cfg
}(),
pagingscraper.Type: func() component.Config {
cfg := (&pagingscraper.Factory{}).CreateDefaultConfig()
return cfg
}(),
processscraper.Type: (func() component.Config {
cfg := (&processscraper.Factory{}).CreateDefaultConfig()
component.MustNewType("processes"): processesscraper.NewFactory().CreateDefaultConfig(),
component.MustNewType("paging"): pagingscraper.NewFactory().CreateDefaultConfig(),
component.MustNewType("process"): (func() component.Config {
cfg := processscraper.NewFactory().CreateDefaultConfig()
cfg.(*processscraper.Config).Include = processscraper.MatchConfig{
Names: []string{"test2", "test3"},
Config: filterset.Config{MatchType: "regexp"},
}
return cfg
})(),
systemscraper.Type: (func() component.Config {
cfg := (&systemscraper.Factory{}).CreateDefaultConfig()
return cfg
})(),
component.MustNewType("system"): systemscraper.NewFactory().CreateDefaultConfig(),
},
},
},
Expand All @@ -123,8 +101,8 @@ func TestLoadConfig(t *testing.T) {
require.NoError(t, err)
require.NoError(t, sub.Unmarshal(cfg))

assert.NoError(t, component.ValidateConfig(cfg))
assert.Equal(t, tt.expected, cfg)
require.NoError(t, component.ValidateConfig(cfg))
require.Equal(t, tt.expected, cfg)
})
}
}
Expand Down
66 changes: 32 additions & 34 deletions receiver/hostmetricsreceiver/factory.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,20 +36,28 @@ const (

// This file implements Factory for HostMetrics receiver.
var (
scraperFactories = map[component.Type]internal.ScraperFactory{
cpuscraper.Type: &cpuscraper.Factory{},
diskscraper.Type: &diskscraper.Factory{},
filesystemscraper.Type: &filesystemscraper.Factory{},
loadscraper.Type: &loadscraper.Factory{},
memoryscraper.Type: &memoryscraper.Factory{},
networkscraper.Type: &networkscraper.Factory{},
pagingscraper.Type: &pagingscraper.Factory{},
processesscraper.Type: &processesscraper.Factory{},
processscraper.Type: &processscraper.Factory{},
systemscraper.Type: &systemscraper.Factory{},
}
scraperFactories = mustMakeFactories(
cpuscraper.NewFactory(),
diskscraper.NewFactory(),
filesystemscraper.NewFactory(),
loadscraper.NewFactory(),
memoryscraper.NewFactory(),
networkscraper.NewFactory(),
pagingscraper.NewFactory(),
processesscraper.NewFactory(),
processscraper.NewFactory(),
systemscraper.NewFactory(),
)
)

func mustMakeFactories(factories ...scraper.Factory) map[component.Type]scraper.Factory {
factoriesMap, err := scraper.MakeFactoryMap(factories...)
if err != nil {
panic(err)
}
return factoriesMap
}

// NewFactory creates a new factory for host metrics receiver.
func NewFactory() receiver.Factory {
return receiver.NewFactory(
Expand All @@ -76,7 +84,7 @@ func createMetricsReceiver(
) (receiver.Metrics, error) {
oCfg := cfg.(*Config)

addScraperOptions, err := createAddScraperOptions(ctx, set, oCfg, scraperFactories)
addScraperOptions, err := createAddScraperOptions(ctx, oCfg, scraperFactories)
if err != nil {
return nil, err
}
Expand All @@ -103,41 +111,31 @@ func createLogsReceiver(
}

func createAddScraperOptions(
ctx context.Context,
set receiver.Settings,
_ context.Context,
cfg *Config,
factories map[component.Type]internal.ScraperFactory,
factories map[component.Type]scraper.Factory,
) ([]scraperhelper.ControllerOption, error) {
scraperControllerOptions := make([]scraperhelper.ControllerOption, 0, len(cfg.Scrapers))

envMap := setGoPsutilEnvVars(cfg.RootPath)

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

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

return nil, fmt.Errorf("host metrics scraper factory not found for key: %q", key)
factory = internal.NewEnvVarFactory(factory, envMap)
scraperControllerOptions = append(scraperControllerOptions, scraperhelper.AddFactoryWithConfig(factory, cfg))
}

return scraperControllerOptions, nil
}

func createHostMetricsScraper(ctx context.Context, set receiver.Settings, key component.Type, cfg component.Config, factories map[component.Type]internal.ScraperFactory) (s scraper.Metrics, ok bool, err error) {
factory := factories[key]
if factory == nil {
ok = false
return
func getFactory(key component.Type, factories map[component.Type]scraper.Factory) (s scraper.Factory, err error) {
factory, ok := factories[key]
if !ok {
return nil, fmt.Errorf("host metrics scraper factory not found for key: %q", key)
}

ok = true
s, err = factory.CreateMetricsScraper(ctx, set, cfg)
return
return factory, nil
}
5 changes: 3 additions & 2 deletions receiver/hostmetricsreceiver/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ require (
go.opentelemetry.io/collector/receiver/receivertest v0.117.1-0.20250117002813-e970f8bb1258
go.opentelemetry.io/collector/scraper v0.117.1-0.20250117002813-e970f8bb1258
go.opentelemetry.io/collector/scraper/scraperhelper v0.117.1-0.20250117002813-e970f8bb1258
go.opentelemetry.io/collector/scraper/scrapertest v0.117.1-0.20250117002813-e970f8bb1258
go.opentelemetry.io/collector/semconv v0.117.1-0.20250117002813-e970f8bb1258
go.uber.org/goleak v1.3.0
go.uber.org/multierr v1.11.0
Expand Down Expand Up @@ -119,8 +120,6 @@ replace github.com/open-telemetry/opentelemetry-collector-contrib/internal/corei

replace github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter => ../../internal/filter

replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl => ../../pkg/ottl

retract (
v0.76.2
v0.76.1
Expand All @@ -134,3 +133,5 @@ replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest
replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/golden => ../../pkg/golden

replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/experimentalmetricmetadata => ../../pkg/experimentalmetricmetadata

replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl => ../../pkg/ottl
2 changes: 2 additions & 0 deletions receiver/hostmetricsreceiver/go.sum

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

5 changes: 3 additions & 2 deletions receiver/hostmetricsreceiver/hostmetrics_linux_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,9 @@ func TestLoadConfigRootPath(t *testing.T) {

expectedConfig := factory.CreateDefaultConfig().(*Config)
expectedConfig.RootPath = "testdata"
cpuScraperCfg := (&cpuscraper.Factory{}).CreateDefaultConfig()
expectedConfig.Scrapers = map[component.Type]component.Config{cpuscraper.Type: cpuScraperCfg}
f := cpuscraper.NewFactory()
cpuScraperCfg := f.CreateDefaultConfig()
expectedConfig.Scrapers = map[component.Type]component.Config{f.Type(): cpuScraperCfg}
assert.Equal(t, expectedConfig, cfg)
expectedEnvMap := common.EnvMap{
common.HostDevEnvKey: "testdata/dev",
Expand Down
Loading

0 comments on commit 689ab6a

Please sign in to comment.