Skip to content

Commit

Permalink
Unify otel's HostMetrics, IIS, and MSSQL structs under the otel.Recei…
Browse files Browse the repository at this point in the history
…ver interface.
  • Loading branch information
igorpeshansky committed Aug 4, 2021
1 parent 4371da0 commit 04fa52b
Show file tree
Hide file tree
Showing 3 changed files with 86 additions and 42 deletions.
24 changes: 12 additions & 12 deletions confgenerator/confgenerator.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,7 @@ func (uc *UnifiedConfig) GenerateOtelConfig(hostInfo *host.InfoStat) (string, er
metrics := uc.Metrics
userAgent, _ := getUserAgent("Google-Cloud-Ops-Agent-Metrics", hostInfo)
versionLabel, _ := getVersionLabel("google-cloud-ops-agent-metrics")
hostMetricsList := []*otel.HostMetrics{}
mssqlList := []*otel.MSSQL{}
iisList := []*otel.IIS{}
receiverList := []otel.Receiver{}
stackdriverList := []*otel.Stackdriver{}
serviceList := []*otel.Service{}
excludeMetricsList := []*otel.ExcludeMetrics{}
Expand All @@ -62,7 +60,7 @@ func (uc *UnifiedConfig) GenerateOtelConfig(hostInfo *host.InfoStat) (string, er
}

var err error
hostMetricsList, mssqlList, iisList, receiverNameMap, err = generateOtelReceivers(metrics.Receivers, metrics.Service.Pipelines)
receiverList, receiverNameMap, err = generateOtelReceivers(metrics.Receivers, metrics.Service.Pipelines)
if err != nil {
return "", err
}
Expand All @@ -80,9 +78,7 @@ func (uc *UnifiedConfig) GenerateOtelConfig(hostInfo *host.InfoStat) (string, er
}
}
otelConfig, err := otel.Config{
HostMetrics: hostMetricsList,
IIS: iisList,
MSSQL: mssqlList,
Receivers: receiverList,
ExcludeMetrics: excludeMetricsList,
Stackdriver: stackdriverList,
Service: serviceList,
Expand All @@ -97,10 +93,10 @@ func (uc *UnifiedConfig) GenerateOtelConfig(hostInfo *host.InfoStat) (string, er
return otelConfig, nil
}

func generateOtelReceivers(receivers map[string]MetricsReceiver, pipelines map[string]*MetricsPipeline) ([]*otel.HostMetrics, []*otel.MSSQL, []*otel.IIS, map[string]string, error) {
hostMetricsList := []*otel.HostMetrics{}
mssqlList := []*otel.MSSQL{}
iisList := []*otel.IIS{}
func generateOtelReceivers(receivers map[string]MetricsReceiver, pipelines map[string]*MetricsPipeline) ([]otel.Receiver, map[string]string, error) {
hostMetricsList := []otel.Receiver{}
mssqlList := []otel.Receiver{}
iisList := []otel.Receiver{}
receiverNameMap := make(map[string]string)
for _, pID := range sortedKeys(pipelines) {
p := pipelines[pID]
Expand Down Expand Up @@ -138,7 +134,11 @@ func generateOtelReceivers(receivers map[string]MetricsReceiver, pipelines map[s
}
}
}
return hostMetricsList, mssqlList, iisList, receiverNameMap, nil
receiverList := []otel.Receiver{}
receiverList = append(receiverList, hostMetricsList...)
receiverList = append(receiverList, mssqlList...)
receiverList = append(receiverList, iisList...)
return receiverList, receiverNameMap, nil
}

func generateOtelExporters(exporters map[string]MetricsExporter, pipelines map[string]*MetricsPipeline) ([]*otel.Stackdriver, map[string]string, error) {
Expand Down
70 changes: 58 additions & 12 deletions confgenerator/otel/conf.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,9 @@ import (
var confTemplate = template.Must(template.New("conf").Parse(
`receivers:
{{template "agentreceiver" .}}
{{- range .HostMetrics}}
{{template "hostmetrics" .}}
{{- end}}
{{- range .MSSQL}}
{{template "mssql" .}}
{{- end}}
{{- range .IIS}}
{{template "iis" .}}
{{- end}}
{{- range .Receivers}}
{{.Generate -}}
{{end}}
processors:
{{template "defaultprocessor" .}}
{{- range .ExcludeMetrics}}
Expand Down Expand Up @@ -587,21 +581,75 @@ service:
- action: toggle_scalar_data_type
{{- end -}}`))

type Receiver interface {
Generate() (string, error)
pipelineID() string
defaultProcessors() []string
}

type HostMetrics struct {
HostMetricsID string
CollectionInterval string
}

func (r *HostMetrics) Generate() (string, error) {
var builder strings.Builder
if err := confTemplate.ExecuteTemplate(&builder, "hostmetrics", r); err != nil {
return "", err
}
return builder.String(), nil
}

func (r *HostMetrics) defaultProcessors() []string {
return []string{"agentmetrics/system", "filter/system", "metricstransform/system", "resourcedetection"}
}

func (r *HostMetrics) pipelineID() string {
return "system"
}

type IIS struct {
IISID string
CollectionInterval string
}

func (r *IIS) Generate() (string, error) {
var builder strings.Builder
if err := confTemplate.ExecuteTemplate(&builder, "iis", r); err != nil {
return "", err
}
return builder.String(), nil
}

func (r *IIS) defaultProcessors() []string {
return []string{"metricstransform/iis", "resourcedetection"}
}

func (r *IIS) pipelineID() string {
return "iis"
}

type MSSQL struct {
MSSQLID string
CollectionInterval string
}

func (r *MSSQL) Generate() (string, error) {
var builder strings.Builder
if err := confTemplate.ExecuteTemplate(&builder, "mssql", r); err != nil {
return "", err
}
return builder.String(), nil
}

func (r *MSSQL) defaultProcessors() []string {
return []string{"metricstransform/mssql", "resourcedetection"}
}

func (r *MSSQL) pipelineID() string {
return "mssql"
}

type ExcludeMetrics struct {
ExcludeMetricsID string
MetricNames []string
Expand All @@ -621,9 +669,7 @@ type Service struct {
}

type Config struct {
HostMetrics []*HostMetrics
IIS []*IIS
MSSQL []*MSSQL
Receivers []Receiver
ExcludeMetrics []*ExcludeMetrics
Stackdriver []*Stackdriver
Service []*Service
Expand Down
34 changes: 16 additions & 18 deletions confgenerator/otel/conf_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -141,27 +141,27 @@ func TestSection(t *testing.T) {
func TestGenerateOtelConfig(t *testing.T) {
tests := []struct {
name string
hostMetricsList []*HostMetrics
iisList []*IIS
mssqlList []*MSSQL
receiverList []Receiver
stackdriverList []*Stackdriver
serviceList []*Service
want string
}{
{
name: "default system metrics config",
hostMetricsList: []*HostMetrics{{
HostMetricsID: "hostmetrics/hostmetrics",
CollectionInterval: "60s",
}},
iisList: []*IIS{{
IISID: "windowsperfcounters/iis_iis",
CollectionInterval: "60s",
}},
mssqlList: []*MSSQL{{
MSSQLID: "windowsperfcounters/mssql_mssql",
CollectionInterval: "60s",
}},
receiverList: []Receiver{
&HostMetrics{
HostMetricsID: "hostmetrics/hostmetrics",
CollectionInterval: "60s",
},
&MSSQL{
MSSQLID: "windowsperfcounters/mssql_mssql",
CollectionInterval: "60s",
},
&IIS{
IISID: "windowsperfcounters/iis_iis",
CollectionInterval: "60s",
},
},
stackdriverList: []*Stackdriver{{
StackdriverID: "googlecloud/google",
UserAgent: "$IGNORED_VALUE",
Expand Down Expand Up @@ -715,9 +715,7 @@ service:
for _, tc := range tests {
t.Run(tc.name, func(t *testing.T) {
got, err := Config{
HostMetrics: tc.hostMetricsList,
IIS: tc.iisList,
MSSQL: tc.mssqlList,
Receivers: tc.receiverList,
Stackdriver: tc.stackdriverList,
Service: tc.serviceList,

Expand Down

0 comments on commit 04fa52b

Please sign in to comment.