Skip to content

Commit

Permalink
[receiver/dockerstatsreceiver] Initial PR to onboard dockerstats onto…
Browse files Browse the repository at this point in the history
… mdatagen (#12322)

I wanted the initial PR to be backwards compatible with the existing implementation. So, I've re-implemented the scrape function as scrapeV2 (leaving the original) and testing them both alongside each other to ensure they produce the same metrics, and to give the reviewer confidence that feature parity is maintained. The bulk of the new implementation is all in receiver_v2.go.
  • Loading branch information
jamesmoessis authored Jul 25, 2022
1 parent b773b88 commit a088337
Show file tree
Hide file tree
Showing 26 changed files with 12,889 additions and 51 deletions.
3 changes: 3 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -949,6 +949,9 @@ replace github.com/googleapis/gnostic v0.5.6 => github.com/googleapis/gnostic v0
// see https://github.com/DataDog/dd-trace-go/issues/1220
replace github.com/go-chi/chi/v4 => github.com/go-chi/chi v4.0.0+incompatible

// see https://github.com/open-telemetry/opentelemetry-collector-contrib/pull/12322#issuecomment-1185029670
replace github.com/docker/go-connections v0.4.1-0.20210727194412-58542c764a11 => github.com/docker/go-connections v0.4.0

// see https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/4433
exclude github.com/StackExchange/wmi v1.2.0

Expand Down
3 changes: 1 addition & 2 deletions go.sum

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

10 changes: 6 additions & 4 deletions internal/docker/docker.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,11 +56,13 @@ type Client struct {
logger *zap.Logger
}

func NewDockerClient(config *Config, logger *zap.Logger) (*Client, error) {
func NewDockerClient(config *Config, logger *zap.Logger, opts ...docker.Opt) (*Client, error) {
client, err := docker.NewClientWithOpts(
docker.WithHost(config.Endpoint),
docker.WithVersion(fmt.Sprintf("v%v", config.DockerAPIVersion)),
docker.WithHTTPHeaders(map[string]string{"User-Agent": userAgent}),
append([]docker.Opt{
docker.WithHost(config.Endpoint),
docker.WithVersion(fmt.Sprintf("v%v", config.DockerAPIVersion)),
docker.WithHTTPHeaders(map[string]string{"User-Agent": userAgent}),
}, opts...)...,
)
if err != nil {
return nil, fmt.Errorf("could not create docker client: %w", err)
Expand Down
5 changes: 5 additions & 0 deletions receiver/dockerstatsreceiver/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ import (

"go.opentelemetry.io/collector/config"
"go.opentelemetry.io/collector/receiver/scraperhelper"

"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/dockerstatsreceiver/internal/metadata"
)

var _ config.Receiver = (*Config)(nil)
Expand Down Expand Up @@ -56,6 +58,9 @@ type Config struct {

// Docker client API version. Default is 1.22
DockerAPIVersion float64 `mapstructure:"api_version"`

// Metrics config. Enable or disable stats by name.
MetricsConfig metadata.MetricsSettings `mapstructure:"stats"`
}

func (config Config) Validate() error {
Expand Down
17 changes: 17 additions & 0 deletions receiver/dockerstatsreceiver/doc.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
// Copyright The OpenTelemetry Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

//go:generate mdatagen --experimental-gen metadata.yaml

package dockerstatsreceiver // import "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/dockerstatsreceiver"
141 changes: 141 additions & 0 deletions receiver/dockerstatsreceiver/documentation.md

Large diffs are not rendered by default.

10 changes: 7 additions & 3 deletions receiver/dockerstatsreceiver/factory.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ import (
"go.opentelemetry.io/collector/config"
"go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/receiver/scraperhelper"

"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/dockerstatsreceiver/internal/metadata"
)

const (
Expand All @@ -44,21 +46,23 @@ func createDefaultConfig() config.Receiver {
Endpoint: "unix:///var/run/docker.sock",
Timeout: 5 * time.Second,
DockerAPIVersion: defaultDockerAPIVersion,
MetricsConfig: metadata.DefaultMetricsSettings(),
}
}

func createMetricsReceiver(
ctx context.Context,
_ context.Context,
params component.ReceiverCreateSettings,
config config.Receiver,
consumer consumer.Metrics,
) (component.MetricsReceiver, error) {
dockerConfig := config.(*Config)
dsr := newReceiver(params, dockerConfig)

dsr, err := NewReceiver(ctx, params, dockerConfig, consumer)
scrp, err := scraperhelper.NewScraper(typeStr, dsr.scrape, scraperhelper.WithStart(dsr.start))
if err != nil {
return nil, err
}

return dsr, nil
return scraperhelper.NewScraperControllerReceiver(&dsr.config.ScraperControllerSettings, params, consumer, scraperhelper.AddScraper(scrp))
}
8 changes: 6 additions & 2 deletions receiver/dockerstatsreceiver/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ require (
github.com/docker/docker v20.10.17+incompatible
github.com/open-telemetry/opentelemetry-collector-contrib/internal/containertest v0.56.0
github.com/open-telemetry/opentelemetry-collector-contrib/internal/docker v0.56.0
github.com/open-telemetry/opentelemetry-collector-contrib/internal/scrapertest v0.56.0
github.com/stretchr/testify v1.8.0
go.opentelemetry.io/collector v0.56.0
go.opentelemetry.io/collector/pdata v0.56.0
Expand All @@ -21,15 +22,15 @@ require (
github.com/cenkalti/backoff/v4 v4.1.3 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/docker/distribution v2.8.0-beta.1+incompatible // indirect
github.com/docker/go-connections v0.4.1-0.20210727194412-58542c764a11 // indirect
github.com/docker/go-connections v0.4.0 // indirect
github.com/docker/go-units v0.4.0 // indirect
github.com/fsnotify/fsnotify v1.5.4 // indirect
github.com/gobwas/glob v0.2.3 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/protobuf v1.5.2 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/knadh/koanf v1.4.2 // indirect
github.com/kr/pretty v0.3.0 // indirect
github.com/kr/text v0.2.0 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
Expand All @@ -40,6 +41,7 @@ require (
github.com/pelletier/go-toml v1.9.4 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/rogpeppe/go-internal v1.6.1 // indirect
github.com/sirupsen/logrus v1.8.1 // indirect
go.opencensus.io v0.23.0 // indirect
go.opentelemetry.io/otel v1.8.0 // indirect
Expand All @@ -60,5 +62,7 @@ replace github.com/open-telemetry/opentelemetry-collector-contrib/internal/conta

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

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

// see https://github.com/distribution/distribution/issues/3590
exclude github.com/docker/distribution v2.8.0+incompatible
11 changes: 2 additions & 9 deletions receiver/dockerstatsreceiver/go.sum

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

Loading

0 comments on commit a088337

Please sign in to comment.