Skip to content

Commit

Permalink
chore: Fix linter findings for revive:exported in plugins/inputs/e*
Browse files Browse the repository at this point in the history
  • Loading branch information
zak-pawel committed Oct 19, 2024
1 parent 39a5ca2 commit a29b331
Show file tree
Hide file tree
Showing 22 changed files with 582 additions and 602 deletions.
37 changes: 19 additions & 18 deletions plugins/inputs/ecs/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,18 +21,18 @@ var (
ecsMetaStatsPath = "/task/stats"
)

// Client is the ECS client contract
type Client interface {
Task() (*Task, error)
ContainerStats() (map[string]*container.StatsResponse, error)
// client is the ECS client contract
type client interface {
task() (*ecsTask, error)
containerStats() (map[string]*container.StatsResponse, error)
}

type httpClient interface {
Do(req *http.Request) (*http.Response, error)
}

// NewClient constructs an ECS client with the passed configuration params
func NewClient(timeout time.Duration, endpoint string, version int) (*EcsClient, error) {
// newClient constructs an ECS client with the passed configuration params
func newClient(timeout time.Duration, endpoint string, version int) (*ecsClient, error) {
if version < 2 || version > 4 {
const msg = "expected metadata version 2, 3 or 4, got %d"
return nil, fmt.Errorf(msg, version)
Expand All @@ -47,7 +47,7 @@ func NewClient(timeout time.Duration, endpoint string, version int) (*EcsClient,
Timeout: timeout,
}

return &EcsClient{
return &ecsClient{
client: c,
baseURL: baseURL,
taskURL: resolveTaskURL(baseURL, version),
Expand Down Expand Up @@ -96,17 +96,17 @@ func resolveURL(base *url.URL, path string) string {
return base.String() + path
}

// EcsClient contains ECS connection config
type EcsClient struct {
// ecsClient contains ECS connection config
type ecsClient struct {
client httpClient
version int
baseURL *url.URL
taskURL string
statsURL string
}

// Task calls the ECS metadata endpoint and returns a populated Task
func (c *EcsClient) Task() (*Task, error) {
// task calls the ECS metadata endpoint and returns a populated task
func (c *ecsClient) task() (*ecsTask, error) {
req, err := http.NewRequest("GET", c.taskURL, nil)
if err != nil {
return nil, err
Expand All @@ -131,8 +131,8 @@ func (c *EcsClient) Task() (*Task, error) {
return task, nil
}

// ContainerStats calls the ECS stats endpoint and returns a populated container stats map
func (c *EcsClient) ContainerStats() (map[string]*container.StatsResponse, error) {
// containerStats calls the ECS stats endpoint and returns a populated container stats map
func (c *ecsClient) containerStats() (map[string]*container.StatsResponse, error) {
req, err := http.NewRequest("GET", c.statsURL, nil)
if err != nil {
return nil, err
Expand All @@ -153,18 +153,19 @@ func (c *EcsClient) ContainerStats() (map[string]*container.StatsResponse, error
return unmarshalStats(resp.Body)
}

// PollSync executes Task and ContainerStats in parallel. If both succeed, both structs are returned.
// pollSync executes task and containerStats in parallel.
// If both succeed, both structs are returned.
// If either errors, a single error is returned.
func PollSync(c Client) (*Task, map[string]*container.StatsResponse, error) {
var task *Task
func pollSync(c client) (*ecsTask, map[string]*container.StatsResponse, error) {
var task *ecsTask
var stats map[string]*container.StatsResponse
var err error

if stats, err = c.ContainerStats(); err != nil {
if stats, err = c.containerStats(); err != nil {
return nil, nil, err
}

if task, err = c.Task(); err != nil {
if task, err = c.task(); err != nil {
return nil, nil, err
}

Expand Down
52 changes: 26 additions & 26 deletions plugins/inputs/ecs/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,33 +14,33 @@ import (
)

type pollMock struct {
task func() (*Task, error)
stats func() (map[string]*container.StatsResponse, error)
getTask func() (*ecsTask, error)
getStats func() (map[string]*container.StatsResponse, error)
}

func (p *pollMock) Task() (*Task, error) {
return p.task()
func (p *pollMock) task() (*ecsTask, error) {
return p.getTask()
}

func (p *pollMock) ContainerStats() (map[string]*container.StatsResponse, error) {
return p.stats()
func (p *pollMock) containerStats() (map[string]*container.StatsResponse, error) {
return p.getStats()
}

func TestEcsClient_PollSync(t *testing.T) {
tests := []struct {
name string
mock *pollMock
want *Task
want *ecsTask
want1 map[string]*container.StatsResponse
wantErr bool
}{
{
name: "success",
mock: &pollMock{
task: func() (*Task, error) {
getTask: func() (*ecsTask, error) {
return &validMeta, nil
},
stats: func() (map[string]*container.StatsResponse, error) {
getStats: func() (map[string]*container.StatsResponse, error) {
return validStats, nil
},
},
Expand All @@ -50,10 +50,10 @@ func TestEcsClient_PollSync(t *testing.T) {
{
name: "task err",
mock: &pollMock{
task: func() (*Task, error) {
getTask: func() (*ecsTask, error) {
return nil, errors.New("err")
},
stats: func() (map[string]*container.StatsResponse, error) {
getStats: func() (map[string]*container.StatsResponse, error) {
return validStats, nil
},
},
Expand All @@ -62,10 +62,10 @@ func TestEcsClient_PollSync(t *testing.T) {
{
name: "stats err",
mock: &pollMock{
task: func() (*Task, error) {
getTask: func() (*ecsTask, error) {
return &validMeta, nil
},
stats: func() (map[string]*container.StatsResponse, error) {
getStats: func() (map[string]*container.StatsResponse, error) {
return nil, errors.New("err")
},
},
Expand All @@ -74,14 +74,14 @@ func TestEcsClient_PollSync(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, got1, err := PollSync(tt.mock)
got, got1, err := pollSync(tt.mock)

if (err != nil) != tt.wantErr {
t.Errorf("EcsClient.PollSync() error = %v, wantErr %v", err, tt.wantErr)
t.Errorf("ecsClient.pollSync() error = %v, wantErr %v", err, tt.wantErr)
return
}
require.Equal(t, tt.want, got, "EcsClient.PollSync() got = %v, want %v", got, tt.want)
require.Equal(t, tt.want1, got1, "EcsClient.PollSync() got1 = %v, want %v", got1, tt.want1)
require.Equal(t, tt.want, got, "ecsClient.pollSync() got = %v, want %v", got, tt.want)
require.Equal(t, tt.want1, got1, "ecsClient.pollSync() got1 = %v, want %v", got1, tt.want1)
})
}
}
Expand All @@ -98,7 +98,7 @@ func TestEcsClient_Task(t *testing.T) {
tests := []struct {
name string
client httpClient
want *Task
want *ecsTask
wantErr bool
}{
{
Expand Down Expand Up @@ -154,16 +154,16 @@ func TestEcsClient_Task(t *testing.T) {

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
c := &EcsClient{
c := &ecsClient{
client: tt.client,
taskURL: "abc",
}
got, err := c.Task()
got, err := c.task()
if (err != nil) != tt.wantErr {
t.Errorf("EcsClient.Task() error = %v, wantErr %v", err, tt.wantErr)
t.Errorf("ecsClient.task() error = %v, wantErr %v", err, tt.wantErr)
return
}
require.Equal(t, tt.want, got, "EcsClient.Task() = %v, want %v", got, tt.want)
require.Equal(t, tt.want, got, "ecsClient.task() = %v, want %v", got, tt.want)
})
}
}
Expand Down Expand Up @@ -231,16 +231,16 @@ func TestEcsClient_ContainerStats(t *testing.T) {

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
c := &EcsClient{
c := &ecsClient{
client: tt.client,
statsURL: "abc",
}
got, err := c.ContainerStats()
got, err := c.containerStats()
if (err != nil) != tt.wantErr {
t.Errorf("EcsClient.ContainerStats() error = %v, wantErr %v", err, tt.wantErr)
t.Errorf("ecsClient.containerStats() error = %v, wantErr %v", err, tt.wantErr)
return
}
require.Equal(t, tt.want, got, "EcsClient.ContainerStats() = %v, want %v", got, tt.want)
require.Equal(t, tt.want, got, "ecsClient.containerStats() = %v, want %v", got, tt.want)
})
}
}
Expand Down
32 changes: 12 additions & 20 deletions plugins/inputs/ecs/ecs.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,13 @@ import (
//go:embed sample.conf
var sampleConfig string

// Ecs config object
const (
v2Endpoint = "http://169.254.170.2"
)

type Ecs struct {
EndpointURL string `toml:"endpoint_url"`
Timeout config.Duration
EndpointURL string `toml:"endpoint_url"`
Timeout config.Duration `toml:"timeout"`

ContainerNameInclude []string `toml:"container_name_include"`
ContainerNameExclude []string `toml:"container_name_exclude"`
Expand All @@ -30,38 +33,27 @@ type Ecs struct {
LabelInclude []string `toml:"ecs_label_include"`
LabelExclude []string `toml:"ecs_label_exclude"`

newClient func(timeout time.Duration, endpoint string, version int) (*EcsClient, error)
newClient func(timeout time.Duration, endpoint string, version int) (*ecsClient, error)

client Client
client client
filtersCreated bool
labelFilter filter.Filter
containerNameFilter filter.Filter
statusFilter filter.Filter
metadataVersion int
}

const (
KB = 1000
MB = 1000 * KB
GB = 1000 * MB
TB = 1000 * GB
PB = 1000 * TB

v2Endpoint = "http://169.254.170.2"
)

func (*Ecs) SampleConfig() string {
return sampleConfig
}

// Gather is the entrypoint for telegraf metrics collection
func (ecs *Ecs) Gather(acc telegraf.Accumulator) error {
err := initSetup(ecs)
if err != nil {
return err
}

task, stats, err := PollSync(ecs.client)
task, stats, err := pollSync(ecs.client)
if err != nil {
return err
}
Expand Down Expand Up @@ -145,7 +137,7 @@ func resolveEndpoint(ecs *Ecs) {
ecs.metadataVersion = 2
}

func (ecs *Ecs) accTask(task *Task, tags map[string]string, acc telegraf.Accumulator) {
func (ecs *Ecs) accTask(task *ecsTask, tags map[string]string, acc telegraf.Accumulator) {
taskFields := map[string]interface{}{
"desired_status": task.DesiredStatus,
"known_status": task.KnownStatus,
Expand All @@ -156,7 +148,7 @@ func (ecs *Ecs) accTask(task *Task, tags map[string]string, acc telegraf.Accumul
acc.AddFields("ecs_task", taskFields, tags)
}

func (ecs *Ecs) accContainers(task *Task, taskTags map[string]string, acc telegraf.Accumulator) {
func (ecs *Ecs) accContainers(task *ecsTask, taskTags map[string]string, acc telegraf.Accumulator) {
for i := range task.Containers {
c := &task.Containers[i]
if !ecs.containerNameFilter.Match(c.Name) {
Expand Down Expand Up @@ -245,7 +237,7 @@ func init() {
return &Ecs{
EndpointURL: "",
Timeout: config.Duration(5 * time.Second),
newClient: NewClient,
newClient: newClient,
filtersCreated: false,
}
})
Expand Down
8 changes: 4 additions & 4 deletions plugins/inputs/ecs/ecs_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -697,14 +697,14 @@ var metaStarted = mustParseNano("2018-11-19T15:31:27.975996351Z")
var metaPullStart = mustParseNano("2018-11-19T15:31:27.197327103Z")
var metaPullStop = mustParseNano("2018-11-19T15:31:27.609089471Z")

var validMeta = Task{
var validMeta = ecsTask{
Cluster: "test",
TaskARN: "arn:aws:ecs:aws-region-1:012345678901:task/a1234abc-a0a0-0a01-ab01-0abc012a0a0a",
Family: "nginx",
Revision: "2",
DesiredStatus: "RUNNING",
KnownStatus: "RUNNING",
Containers: []Container{
Containers: []ecsContainer{
{
ID: pauseStatsKey,
Name: "~internal~ecs~pause",
Expand All @@ -727,7 +727,7 @@ var validMeta = Task{
CreatedAt: metaPauseCreated,
StartedAt: metaPauseStarted,
Type: "CNI_PAUSE",
Networks: []Network{
Networks: []network{
{
NetworkMode: "awsvpc",
IPv4Addresses: []string{
Expand Down Expand Up @@ -758,7 +758,7 @@ var validMeta = Task{
CreatedAt: metaCreated,
StartedAt: metaStarted,
Type: "NORMAL",
Networks: []Network{
Networks: []network{
{
NetworkMode: "awsvpc",
IPv4Addresses: []string{
Expand Down
4 changes: 2 additions & 2 deletions plugins/inputs/ecs/stats.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import (
"github.com/influxdata/telegraf/plugins/common/docker"
)

func parseContainerStats(c *Container, acc telegraf.Accumulator, tags map[string]string) {
func parseContainerStats(c *ecsContainer, acc telegraf.Accumulator, tags map[string]string) {
id := c.ID
stats := &c.Stats
tm := stats.Read
Expand All @@ -27,7 +27,7 @@ func parseContainerStats(c *Container, acc telegraf.Accumulator, tags map[string
blkstats(id, stats, acc, tags, tm)
}

func metastats(id string, c *Container, acc telegraf.Accumulator, tags map[string]string, tm time.Time) {
func metastats(id string, c *ecsContainer, acc telegraf.Accumulator, tags map[string]string, tm time.Time) {
metafields := map[string]interface{}{
"container_id": id,
"docker_name": c.DockerName,
Expand Down
Loading

0 comments on commit a29b331

Please sign in to comment.