From ed7f4fc7f550785875fc10b23f4d8f98fbf0db33 Mon Sep 17 00:00:00 2001 From: Jan Kamieth Date: Fri, 9 Feb 2024 10:43:57 +0100 Subject: [PATCH] feat: renamed apiserver to httpserver; --- .github/workflows/pr.yml | 4 +- .golangci.yml | 106 +++---------- .tool-versions | 2 + builder/dashboard.go | 16 +- builder/dashboard_test.go | 4 +- builder/metadata_apiserver.go | 68 -------- builder/metadata_application.go | 20 +-- builder/metadata_cloud.go | 11 ++ builder/metadata_httpserver.go | 88 +++++++++++ builder/metadata_reader_test.go | 1 + builder/panel.go | 4 +- builder/panel_container.go | 6 +- ...panel_apiserver.go => panel_httpserver.go} | 42 +++-- builder/panel_traefik.go | 5 +- go.mod | 39 +++-- go.sum | 108 ++++++++----- ...source_application_dashboard_definition.go | 149 ++++++++++-------- ...asource_application_metadata_definition.go | 1 + provider/provider.go | 6 +- 19 files changed, 363 insertions(+), 317 deletions(-) delete mode 100644 builder/metadata_apiserver.go create mode 100644 builder/metadata_httpserver.go rename builder/{panel_apiserver.go => panel_httpserver.go} (75%) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 41597a6..534a006 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -35,13 +35,13 @@ jobs: go-version: '1.20' - name: Check out code into the Go module directory - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Get dependencies run: go get -v -t -d ./... - name: Build - run: go build -v ./... + run: go build -a -v ./... go-vet: name: static code analysis (go vet) diff --git a/.golangci.yml b/.golangci.yml index ec2a5c6..4001138 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -13,23 +13,34 @@ output: print-issued-lines: true print-linter-name: true -linters-settings: - dupl: - # tokens count to trigger issue - threshold: 100 +linters: + enable: + - dupword # Checks for duplicate words in the source code. + - gci # Gci controls Go package import order and makes it always deterministic. + - gocognit # Computes and checks the cognitive complexity of functions. + - gocritic # Provides diagnostics that check for bugs, performance and style issues. + - godox # Tool for detection of FIXME, TODO and other comment keywords. + - govet # Vet examines Go source code and reports suspicious constructs, such as Printf calls whose arguments do not align with the format string. + - misspell # Finds commonly misspelled English words in comments. + - nestif # Reports deeply nested if statements. + - nlreturn # Nlreturn checks for a new line before return and branch statements to increase code clarity. + - staticcheck # It's a set of rules from staticcheck. + - typecheck + enable-all: false + disable: + disable-all: true + presets: + fast: false - funlen: - lines: 60 - statements: 40 - goconst: - # minimal length of string constant, 3 by default - min-len: 3 - # minimal occurrences count to trigger, 3 by default - min-occurrences: 2 +linters-settings: + gocognit: + min-complexity: 20 gocritic: enabled-checks: disabled-checks: + - paramTypeCombine + - importShadow enabled-tags: - diagnostic - style @@ -38,84 +49,17 @@ linters-settings: disabled-tags: settings: - nestif: - # minimal complexity of if statements to report, 5 by default - min-complexity: 4 - godox: - # Report any comments starting with keywords, this is useful for TODO or FIXME comments that - # might be left in the code accidentally and should be resolved before merging. keywords: - TODO - BUG - FIXME - lll: - # max line length, lines longer will be reported. Default is 120. - # '\t' is counted as 1 character by default, and can be changed with the tab-width option - line-length: 150 - # tab width in spaces. Default to 1. - tab-width: 1 - - unparam: - # Inspect exported functions, default is false. Set to true if no external program/library imports your code. - # XXX: if you enable this setting, unparam will report a lot of false-positives in text editors: - # if it's called for subdir of a project it can't find external interfaces. All text editor integrations - # with golangci-lint call it on a directory with the changed file. - check-exported: true - -linters: - enable: - - govet - - godox # prevent leaving todos, fixmes, etc in the code - - funlen # functions longer than n lines will be reported - # - dupl - - misspell - - nestif - # - cyclop # cyclomatic complexity - - staticcheck - # - lll # max line length, lines longer will be reported - - dupword # prevent from having "there are no no values" - # - nilnil # prevent return nil, nil - # - nosprintfhostport # prevent host port via fmt.Println - # - ireturn # but maybe difficult to integrate because we return interface in multiple places - # - forcetypeassert # checking type of type assertion, not sure because of a lot of error messages - # - errname # checks that errors comes with golang convenient way - # - unused # unused variables - # - unparam - # - unconvert # unnecessary conversion - - gocritic # Almost 100 diagnostics that check for bugs, performance and style issues - # - goconst # checks occurrence of something and proposes to make it constant - # - nakedret # find naked returns in functions - # - depth # Count the maxdepth of go functions. It's helpful to see if a function needs to be splitted into several smaller functions - # - gochecknoinits # Check that no inits functions are present in Go code - # - errcheck # errcheck is a program for checking for unchecked errors in Go code. These unchecked errors can be critical bugs in some cases - # - ineffassign # Detects when assignments to existing variables are not used - # - dogsled # Checks if all structure fields are initialized - # - exhaustruct # Checks if all structure fields are initialized - # - exportloopref # checks for pointers to enclosing loop variables - # - gocognit # Computes and checks the cognitive complexity of functions - # - gosec # Inspects source code for security problems - # - importas # Enforces consistent import aliases - # - nlreturn # nlreturn checks for a new line before return and branch statements to increase code clarity - # - noctx # finds sending http request without context.Context - - enable-all: false - disable: - disable-all: true - presets: - fast: false - + nestif: + min-complexity: 4 issues: exclude-rules: - - path: _test\.go - linters: - - ireturn - - errcheck - - gosec - - funlen - - dupl exclude-use-default: false max-issues-per-linter: 0 max-same-issues: 0 diff --git a/.tool-versions b/.tool-versions index c58918a..3f10b3d 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1,2 +1,4 @@ terraform 1.5.6 golangci-lint 1.54.2 +pre-commit 3.6.0 +golang 1.20.14 diff --git a/builder/dashboard.go b/builder/dashboard.go index 91b1c3c..653772a 100644 --- a/builder/dashboard.go +++ b/builder/dashboard.go @@ -16,12 +16,12 @@ type Dashboard struct { } type DashboardBuilder struct { - resourceNames ResourceNames + resourceNames *ResourceNames panelFactories []PanelFactory orchestrator string } -func NewDashboardBuilder(resourceNames ResourceNames, orchestrator string) *DashboardBuilder { +func NewDashboardBuilder(resourceNames *ResourceNames, orchestrator string) *DashboardBuilder { return &DashboardBuilder{ resourceNames: resourceNames, panelFactories: make([]PanelFactory, 0), @@ -61,13 +61,13 @@ func (d *DashboardBuilder) AddTraefikService() { d.AddPanel(NewPanelTraefikRequestCountPerTarget) } -func (d *DashboardBuilder) AddApiServerHandler(method string, path string) { - rowTitle := fmt.Sprintf("ApiServer: %s %s", method, path) +func (d *DashboardBuilder) AddHttpServerHandler(serverName string, handler MetadataHttpServerHandler) { + rowTitle := fmt.Sprintf("HttpServer %s: %s %s", serverName, handler.Method, handler.Path) d.AddPanel(NewPanelRow(rowTitle)) - d.AddPanel(NewPanelApiServerRequestCount(path)) - d.AddPanel(NewPanelApiServerResponseTime(path)) - d.AddPanel(NewPanelApiServerHttpStatus(path)) + d.AddPanel(NewPanelHttpServerRequestCount(serverName, handler)) + d.AddPanel(NewPanelHttpServerResponseTime(serverName, handler)) + d.AddPanel(NewPanelHttpServerHttpStatus(serverName, handler)) } func (d *DashboardBuilder) AddDynamoDbTable(table MetadataCloudAwsDynamodbTable) { @@ -175,7 +175,7 @@ func (d *DashboardBuilder) Build() Dashboard { func (d *DashboardBuilder) buildPanel(factory PanelFactory, x int, y int) Panel { panelGridPos := NewPanelGridPos(PanelHeight, PanelWidth, x, y) - settings := newPaneSettings(d.resourceNames, panelGridPos, d.orchestrator) + settings := newPanelSettings(d.resourceNames, panelGridPos, d.orchestrator) panel := factory(settings) if panel.FieldConfig.Defaults.Custom.AxisPlacement == "" { diff --git a/builder/dashboard_test.go b/builder/dashboard_test.go index 6713c55..da23fd9 100644 --- a/builder/dashboard_test.go +++ b/builder/dashboard_test.go @@ -33,7 +33,7 @@ func TestEcsDashboardWithError(t *testing.T) { }, } - resourceNames := builder.ResourceNames{ + resourceNames := &builder.ResourceNames{ CloudwatchNamespace: cloudwatchNamespace, EcsCluster: ecsClusterName, EcsService: ecsServiceName, @@ -82,7 +82,7 @@ func TestKubernetesDashboardWithError(t *testing.T) { kubernetesPod := "pod" var targetGroups []builder.ElbTargetGroup - resourceNames := builder.ResourceNames{ + resourceNames := &builder.ResourceNames{ CloudwatchNamespace: cloudwatchNamespace, EcsCluster: ecsClusterName, EcsService: ecsServiceName, diff --git a/builder/metadata_apiserver.go b/builder/metadata_apiserver.go deleted file mode 100644 index c699221..0000000 --- a/builder/metadata_apiserver.go +++ /dev/null @@ -1,68 +0,0 @@ -package builder - -import ( - "github.com/hashicorp/terraform-plugin-framework/attr" - "github.com/hashicorp/terraform-plugin-framework/types" -) - -type MetadataApiServerRoutes []MetadataApiServerRoute - -func (k MetadataApiServerRoutes) ToValue() attr.Value { - list := types.List{ - Elems: make([]attr.Value, len(k)), - ElemType: types.ObjectType{ - AttrTypes: MetadataApiserverRouteAttrTypes(), - }, - } - - for i, route := range k { - list.Elems[i] = route.ToValue() - } - - return list -} - -type MetadataApiServer struct { - Routes MetadataApiServerRoutes `json:"routes"` -} - -func (c MetadataApiServer) ToValue() attr.Value { - return types.Object{ - Attrs: map[string]attr.Value{ - "routes": c.Routes.ToValue(), - }, - AttrTypes: MetadataApiserverAttrTypes(), - } -} - -type MetadataApiServerRoute struct { - Method string `json:"method"` - Path string `json:"path"` -} - -func (c MetadataApiServerRoute) ToValue() attr.Value { - return types.Object{ - Attrs: map[string]attr.Value{ - "method": types.String{Value: c.Method}, - "path": types.String{Value: c.Path}, - }, - AttrTypes: MetadataApiserverRouteAttrTypes(), - } -} - -func MetadataApiserverAttrTypes() map[string]attr.Type { - return map[string]attr.Type{ - "routes": types.ListType{ - ElemType: types.ObjectType{ - AttrTypes: MetadataApiserverRouteAttrTypes(), - }, - }, - } -} - -func MetadataApiserverRouteAttrTypes() map[string]attr.Type { - return map[string]attr.Type{ - "method": types.StringType, - "path": types.StringType, - } -} diff --git a/builder/metadata_application.go b/builder/metadata_application.go index d7933a6..7805ca9 100644 --- a/builder/metadata_application.go +++ b/builder/metadata_application.go @@ -6,30 +6,32 @@ import ( ) type MetadataApplication struct { - ApiServer MetadataApiServer `json:"apiserver"` - Cloud MetadataCloud `json:"cloud"` - Stream MetadataStream `json:"stream"` + Cloud MetadataCloud `json:"cloud"` + HttpServers MetadataHttpServers `json:"httpservers"` + Stream MetadataStream `json:"stream"` } func (a MetadataApplication) ToValue() types.Object { return types.Object{ AttrTypes: MetadataApplicationAttrTypes(), Attrs: map[string]attr.Value{ - "apiserver": a.ApiServer.ToValue(), - "cloud": a.Cloud.ToValue(), - "stream": a.Stream.ToValue(), + "cloud": a.Cloud.ToValue(), + "httpservers": a.HttpServers.ToValue(), + "stream": a.Stream.ToValue(), }, } } func MetadataApplicationAttrTypes() map[string]attr.Type { return map[string]attr.Type{ - "apiserver": types.ObjectType{ - AttrTypes: MetadataApiserverAttrTypes(), - }, "cloud": types.ObjectType{ AttrTypes: MetadataCloudAttrTypes(), }, + "httpservers": types.ListType{ + ElemType: types.ObjectType{ + AttrTypes: MetadataHttpServerAttrTypes(), + }, + }, "stream": types.ObjectType{ AttrTypes: MetadataStreamAttrTypes(), }, diff --git a/builder/metadata_cloud.go b/builder/metadata_cloud.go index 83b7154..282c590 100644 --- a/builder/metadata_cloud.go +++ b/builder/metadata_cloud.go @@ -29,6 +29,7 @@ func MetadataCloudAttrTypes() map[string]attr.Type { type MetadataCloudAws struct { Dynamodb MetadataCloudAwsDynamodb `json:"dynamodb"` Kinesis MetadataCloudAwsKinesis `json:"kinesis"` + Sns MetadataCloudAwsSns `json:"sns"` Sqs MetadataCloudAwsSqs `json:"sqs"` } @@ -222,6 +223,16 @@ func MetadataCloudAwsKinesisRecordWriterAttrTypes() map[string]attr.Type { } } +type MetadataCloudAwsSnsTopic struct { + AwsClientName string `json:"aws_client_name"` + TopicArn string `json:"topic_arn"` + TopicName string `json:"topic_name"` +} + +type MetadataCloudAwsSns struct { + Queues []MetadataCloudAwsSnsTopic `json:"topics"` +} + type MetadataCloudAwsSqsQueue struct { AwsClientName string `json:"aws_client_name"` QueueArn string `json:"queue_arn"` diff --git a/builder/metadata_httpserver.go b/builder/metadata_httpserver.go new file mode 100644 index 0000000..e59d1d1 --- /dev/null +++ b/builder/metadata_httpserver.go @@ -0,0 +1,88 @@ +package builder + +import ( + "github.com/hashicorp/terraform-plugin-framework/attr" + "github.com/hashicorp/terraform-plugin-framework/types" +) + +type MetadataHttpServers []MetadataHttpServer + +func (s MetadataHttpServers) ToValue() attr.Value { + list := types.List{ + Elems: make([]attr.Value, len(s)), + ElemType: types.ObjectType{ + AttrTypes: MetadataHttpServerAttrTypes(), + }, + } + + for i, server := range s { + list.Elems[i] = server.ToValue() + } + + return list +} + +type MetadataHttpServer struct { + Name string `json:"name"` + Handlers MetadataHttpServerHandlers `json:"handlers"` +} + +func (c MetadataHttpServer) ToValue() attr.Value { + return types.Object{ + Attrs: map[string]attr.Value{ + "name": types.String{Value: c.Name}, + "handlers": c.Handlers.ToValue(), + }, + AttrTypes: MetadataHttpServerAttrTypes(), + } +} + +func MetadataHttpServerAttrTypes() map[string]attr.Type { + return map[string]attr.Type{ + "name": types.StringType, + "handlers": types.ListType{ + ElemType: types.ObjectType{ + AttrTypes: MetadataHttpServerRouteAttrTypes(), + }, + }, + } +} + +type MetadataHttpServerHandlers []MetadataHttpServerHandler + +func (k MetadataHttpServerHandlers) ToValue() attr.Value { + list := types.List{ + Elems: make([]attr.Value, len(k)), + ElemType: types.ObjectType{ + AttrTypes: MetadataHttpServerRouteAttrTypes(), + }, + } + + for i, route := range k { + list.Elems[i] = route.ToValue() + } + + return list +} + +type MetadataHttpServerHandler struct { + Method string `json:"method"` + Path string `json:"path"` +} + +func (c MetadataHttpServerHandler) ToValue() attr.Value { + return types.Object{ + Attrs: map[string]attr.Value{ + "method": types.String{Value: c.Method}, + "path": types.String{Value: c.Path}, + }, + AttrTypes: MetadataHttpServerRouteAttrTypes(), + } +} + +func MetadataHttpServerRouteAttrTypes() map[string]attr.Type { + return map[string]attr.Type{ + "method": types.StringType, + "path": types.StringType, + } +} diff --git a/builder/metadata_reader_test.go b/builder/metadata_reader_test.go index e4c35be..e4ed4e1 100644 --- a/builder/metadata_reader_test.go +++ b/builder/metadata_reader_test.go @@ -56,6 +56,7 @@ func TestReadApplicationMetadataRetry(t *testing.T) { if attempts < 3 { writer.WriteHeader(http.StatusBadGateway) + return } diff --git a/builder/panel.go b/builder/panel.go index 32424aa..0c01ed5 100644 --- a/builder/panel.go +++ b/builder/panel.go @@ -1,6 +1,6 @@ package builder -func newPaneSettings(resourceNames ResourceNames, gridPos PanelGridPos, orchestrator string) PanelSettings { +func newPanelSettings(resourceNames *ResourceNames, gridPos PanelGridPos, orchestrator string) PanelSettings { return PanelSettings{ resourceNames: resourceNames, gridPos: gridPos, @@ -9,7 +9,7 @@ func newPaneSettings(resourceNames ResourceNames, gridPos PanelGridPos, orchestr } type PanelSettings struct { - resourceNames ResourceNames + resourceNames *ResourceNames gridPos PanelGridPos orchestrator string } diff --git a/builder/panel_container.go b/builder/panel_container.go index 29e424c..ef25876 100644 --- a/builder/panel_container.go +++ b/builder/panel_container.go @@ -22,11 +22,7 @@ func getEcsTaskDefinitionLabelFilter(ecsClusterName, ecsTaskDefinitionName strin return fmt.Sprintf(`container_label_com_amazonaws_ecs_cluster=%q, container_label_com_amazonaws_ecs_task_definition_family=%q`, ecsClusterName, ecsTaskDefinitionName) } -func getLabelAndFilters(settings PanelSettings, containerIndex int) (string, string, string) { - var containerLabelFilter string - var containerLabel string - var podLabelFilter string - +func getLabelAndFilters(settings PanelSettings, containerIndex int) (containerLabel string, containerLabelFilter string, podLabelFilter string) { switch settings.orchestrator { case orchestratorEcs: containerLabel = "container_label_com_amazonaws_ecs_container_name" diff --git a/builder/panel_apiserver.go b/builder/panel_httpserver.go similarity index 75% rename from builder/panel_apiserver.go rename to builder/panel_httpserver.go index 79e98ee..8b3a494 100644 --- a/builder/panel_apiserver.go +++ b/builder/panel_httpserver.go @@ -1,6 +1,6 @@ package builder -func NewPanelApiServerRequestCount(path string) PanelFactory { +func NewPanelHttpServerRequestCount(serverName string, handler MetadataHttpServerHandler) PanelFactory { return func(settings PanelSettings) Panel { return Panel{ Datasource: settings.resourceNames.GrafanaCloudWatchDatasourceName, @@ -17,10 +17,12 @@ func NewPanelApiServerRequestCount(path string) PanelFactory { PanelTargetCloudWatch{ Alias: "Requests", Dimensions: map[string]string{ - "path": path, + "Method": handler.Method, + "Path": handler.Path, + "ServerName": serverName, }, MatchExact: true, - MetricName: "ApiRequestCount", + MetricName: "HttpRequestCount", Namespace: settings.resourceNames.CloudwatchNamespace, RefId: "A", Region: "default", @@ -36,7 +38,7 @@ func NewPanelApiServerRequestCount(path string) PanelFactory { } } -func NewPanelApiServerResponseTime(path string) PanelFactory { +func NewPanelHttpServerResponseTime(serverName string, handler MetadataHttpServerHandler) PanelFactory { return func(settings PanelSettings) Panel { return Panel{ Datasource: settings.resourceNames.GrafanaCloudWatchDatasourceName, @@ -54,10 +56,12 @@ func NewPanelApiServerResponseTime(path string) PanelFactory { PanelTargetCloudWatch{ Alias: "Response Time", Dimensions: map[string]string{ - "path": path, + "Method": handler.Method, + "Path": handler.Path, + "ServerName": serverName, }, MatchExact: true, - MetricName: "ApiRequestResponseTime", + MetricName: "HttpRequestResponseTime", Namespace: settings.resourceNames.CloudwatchNamespace, RefId: "A", Region: "default", @@ -73,7 +77,7 @@ func NewPanelApiServerResponseTime(path string) PanelFactory { } } -func NewPanelApiServerHttpStatus(path string) PanelFactory { +func NewPanelHttpServerHttpStatus(serverName string, handler MetadataHttpServerHandler) PanelFactory { return func(settings PanelSettings) Panel { return Panel{ Datasource: settings.resourceNames.GrafanaCloudWatchDatasourceName, @@ -93,10 +97,12 @@ func NewPanelApiServerHttpStatus(path string) PanelFactory { PanelTargetCloudWatch{ Alias: "HTTP 2XX", Dimensions: map[string]string{ - "path": path, + "Method": handler.Method, + "Path": handler.Path, + "ServerName": serverName, }, MatchExact: true, - MetricName: "ApiStatus2XX", + MetricName: "HttpStatus2XX", Namespace: settings.resourceNames.CloudwatchNamespace, RefId: "A", Region: "default", @@ -107,10 +113,12 @@ func NewPanelApiServerHttpStatus(path string) PanelFactory { PanelTargetCloudWatch{ Alias: "HTTP 3XX", Dimensions: map[string]string{ - "path": path, + "Method": handler.Method, + "Path": handler.Path, + "ServerName": serverName, }, MatchExact: true, - MetricName: "ApiStatus3XX", + MetricName: "HttpStatus3XX", Namespace: settings.resourceNames.CloudwatchNamespace, RefId: "B", Region: "default", @@ -121,10 +129,12 @@ func NewPanelApiServerHttpStatus(path string) PanelFactory { PanelTargetCloudWatch{ Alias: "HTTP 4XX", Dimensions: map[string]string{ - "path": path, + "Method": handler.Method, + "Path": handler.Path, + "ServerName": serverName, }, MatchExact: true, - MetricName: "ApiStatus4XX", + MetricName: "HttpStatus4XX", Namespace: settings.resourceNames.CloudwatchNamespace, RefId: "C", Region: "default", @@ -135,10 +145,12 @@ func NewPanelApiServerHttpStatus(path string) PanelFactory { PanelTargetCloudWatch{ Alias: "HTTP 5XX", Dimensions: map[string]string{ - "path": path, + "Method": handler.Method, + "Path": handler.Path, + "ServerName": serverName, }, MatchExact: true, - MetricName: "ApiStatus5XX", + MetricName: "HttpStatus5XX", Namespace: settings.resourceNames.CloudwatchNamespace, RefId: "D", Region: "default", diff --git a/builder/panel_traefik.go b/builder/panel_traefik.go index 75d9ff2..9a4db0a 100644 --- a/builder/panel_traefik.go +++ b/builder/panel_traefik.go @@ -6,7 +6,7 @@ func NewPanelTraefikRequestCount(settings PanelSettings) Panel { labelFilter := getTraefikServiceLabelFilter(settings.resourceNames.TraefikServiceName) return Panel{ - Datasource: datasourcePrometheus, // TODO: Do we want to make this overwritable as well? + Datasource: datasourcePrometheus, FieldConfig: PanelFieldConfig{ Defaults: PanelFieldConfigDefaults{ Min: "0", @@ -32,6 +32,7 @@ func NewPanelTraefikRequestCount(settings PanelSettings) Panel { func NewPanelTraefikResponseTime(settings PanelSettings) Panel { labelFilter := getTraefikServiceLabelFilter(settings.resourceNames.TraefikServiceName) + return Panel{ Datasource: datasourcePrometheus, FieldConfig: PanelFieldConfig{ @@ -109,6 +110,7 @@ func NewPanelTraefikHttpStatus(settings PanelSettings) Panel { func NewPanelKubernetesHealthyPods(settings PanelSettings) Panel { labelFilter := getKubernetesPodLabelFilter(settings.resourceNames.KubernetesNamespace, settings.resourceNames.KubernetesPod) + return Panel{ Datasource: datasourcePrometheus, FieldConfig: PanelFieldConfig{ @@ -135,6 +137,7 @@ func NewPanelKubernetesHealthyPods(settings PanelSettings) Panel { func NewPanelTraefikRequestCountPerTarget(settings PanelSettings) Panel { labelFilterTraefik := getTraefikServiceLabelFilter(settings.resourceNames.TraefikServiceName) labelFilterPod := getKubernetesPodLabelFilter(settings.resourceNames.KubernetesNamespace, settings.resourceNames.KubernetesPod) + return Panel{ Datasource: datasourcePrometheus, FieldConfig: PanelFieldConfig{ diff --git a/go.mod b/go.mod index bcfa24a..8d918df 100644 --- a/go.mod +++ b/go.mod @@ -3,30 +3,29 @@ module github.com/justtrackio/terraform-provider-gosoline go 1.20 require ( - github.com/aws/aws-sdk-go-v2 v1.21.0 - github.com/aws/aws-sdk-go-v2/config v1.18.36 - github.com/aws/aws-sdk-go-v2/service/ecs v1.29.6 - github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.21.3 - github.com/aws/aws-sdk-go-v2/service/kinesis v1.18.5 + github.com/aws/aws-sdk-go-v2 v1.24.1 + github.com/aws/aws-sdk-go-v2/config v1.26.6 + github.com/aws/aws-sdk-go-v2/service/ecs v1.38.3 + github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.27.0 github.com/cenkalti/backoff/v4 v4.2.1 - github.com/go-resty/resty/v2 v2.7.0 + github.com/go-resty/resty/v2 v2.11.0 github.com/hashicorp/terraform-plugin-framework v0.10.0 github.com/stretchr/testify v1.8.4 github.com/thoas/go-funk v0.9.3 ) require ( - github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.13 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.13.35 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.11 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.41 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.35 // indirect - github.com/aws/aws-sdk-go-v2/internal/ini v1.3.42 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.35 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.13.5 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.15.5 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.21.5 // indirect - github.com/aws/smithy-go v1.14.2 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.16.16 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.11 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.10 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.10 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.7.3 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.4 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.10 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.18.7 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.21.7 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.26.7 // indirect + github.com/aws/smithy-go v1.19.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/fatih/color v1.13.0 // indirect github.com/golang/protobuf v1.5.2 // indirect @@ -47,9 +46,9 @@ require ( github.com/pmezard/go-difflib v1.0.0 // indirect github.com/vmihailenco/msgpack/v4 v4.3.12 // indirect github.com/vmihailenco/tagparser v0.1.1 // indirect - golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 // indirect - golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6 // indirect - golang.org/x/text v0.3.7 // indirect + golang.org/x/net v0.17.0 // indirect + golang.org/x/sys v0.13.0 // indirect + golang.org/x/text v0.13.0 // indirect google.golang.org/appengine v1.6.5 // indirect google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 // indirect google.golang.org/grpc v1.48.0 // indirect diff --git a/go.sum b/go.sum index d66f674..775a00b 100644 --- a/go.sum +++ b/go.sum @@ -3,38 +3,36 @@ cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/apparentlymart/go-textseg v1.0.0/go.mod h1:z96Txxhf3xSFMPmb5X/1W05FF/Nj9VFpLOpjS5yuumk= -github.com/aws/aws-sdk-go-v2 v1.21.0 h1:gMT0IW+03wtYJhRqTVYn0wLzwdnK9sRMcxmtfGzRdJc= -github.com/aws/aws-sdk-go-v2 v1.21.0/go.mod h1:/RfNgGmRxI+iFOB1OeJUyxiU+9s88k3pfHvDagGEp0M= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.13 h1:OPLEkmhXf6xFPiz0bLeDArZIDx1NNS4oJyG4nv3Gct0= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.13/go.mod h1:gpAbvyDGQFozTEmlTFO8XcQKHzubdq0LzRyJpG6MiXM= -github.com/aws/aws-sdk-go-v2/config v1.18.36 h1:mLNA12PWU1Y+ueOO79QgQfKIPhc1MYKl44RmvASkJ7Q= -github.com/aws/aws-sdk-go-v2/config v1.18.36/go.mod h1:8AnEFxW9/XGKCbjYDCJy7iltVNyEI9Iu9qC21UzhhgQ= -github.com/aws/aws-sdk-go-v2/credentials v1.13.35 h1:QpsNitYJu0GgvMBLUIYu9H4yryA5kMksjeIVQfgXrt8= -github.com/aws/aws-sdk-go-v2/credentials v1.13.35/go.mod h1:o7rCaLtvK0hUggAGclf76mNGGkaG5a9KWlp+d9IpcV8= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.11 h1:uDZJF1hu0EVT/4bogChk8DyjSF6fof6uL/0Y26Ma7Fg= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.11/go.mod h1:TEPP4tENqBGO99KwVpV9MlOX4NSrSLP8u3KRy2CDwA8= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.41 h1:22dGT7PneFMx4+b3pz7lMTRyN8ZKH7M2cW4GP9yUS2g= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.41/go.mod h1:CrObHAuPneJBlfEJ5T3szXOUkLEThaGfvnhTf33buas= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.35 h1:SijA0mgjV8E+8G45ltVHs0fvKpTj8xmZJ3VwhGKtUSI= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.35/go.mod h1:SJC1nEVVva1g3pHAIdCp7QsRIkMmLAgoDquQ9Rr8kYw= -github.com/aws/aws-sdk-go-v2/internal/ini v1.3.42 h1:GPUcE/Yq7Ur8YSUk6lVkoIMWnJNO0HT18GUzCWCgCI0= -github.com/aws/aws-sdk-go-v2/internal/ini v1.3.42/go.mod h1:rzfdUlfA+jdgLDmPKjd3Chq9V7LVLYo1Nz++Wb91aRo= -github.com/aws/aws-sdk-go-v2/service/ecs v1.29.6 h1:D8aVp/27erJY/c+BeCM2RD6/KTshRAIr5z41nncMfxU= -github.com/aws/aws-sdk-go-v2/service/ecs v1.29.6/go.mod h1:cxbA26Kf4UlTb40f5FON22ZPNMyEVmMS82KUJZC1E1w= -github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.21.3 h1:CAWMcMnRYCBaeMnycTwZs+0BcuepIMfyP3F0r1VfgPc= -github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.21.3/go.mod h1:CbJHS0jJJNd2dZOakkG5TBbT8OHz+T0UBzR1ClIdezI= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.35 h1:CdzPW9kKitgIiLV1+MHobfR5Xg25iYnyzWZhyQuSlDI= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.35/go.mod h1:QGF2Rs33W5MaN9gYdEQOBBFPLwTZkEhRwI33f7KIG0o= -github.com/aws/aws-sdk-go-v2/service/kinesis v1.18.5 h1:naSZmQiFjoTLxNjfDy/KgEnWdG3odkR6gIEgTx21YOM= -github.com/aws/aws-sdk-go-v2/service/kinesis v1.18.5/go.mod h1:0h3hOcyFXyjvI3wGt8C8vk2+II9XxHwFM7zH2KvLHmA= -github.com/aws/aws-sdk-go-v2/service/sso v1.13.5 h1:oCvTFSDi67AX0pOX3PuPdGFewvLRU2zzFSrTsgURNo0= -github.com/aws/aws-sdk-go-v2/service/sso v1.13.5/go.mod h1:fIAwKQKBFu90pBxx07BFOMJLpRUGu8VOzLJakeY+0K4= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.15.5 h1:dnInJb4S0oy8aQuri1mV6ipLlnZPfnsDNB9BGO9PDNY= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.15.5/go.mod h1:yygr8ACQRY2PrEcy3xsUI357stq2AxnFM6DIsR9lij4= -github.com/aws/aws-sdk-go-v2/service/sts v1.21.5 h1:CQBFElb0LS8RojMJlxRSo/HXipvTZW2S44Lt9Mk2aYQ= -github.com/aws/aws-sdk-go-v2/service/sts v1.21.5/go.mod h1:VC7JDqsqiwXukYEDjoHh9U0fOJtNWh04FPQz4ct4GGU= -github.com/aws/smithy-go v1.14.2 h1:MJU9hqBGbvWZdApzpvoF2WAIJDbtjK2NDJSiJP7HblQ= -github.com/aws/smithy-go v1.14.2/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= +github.com/aws/aws-sdk-go-v2 v1.24.1 h1:xAojnj+ktS95YZlDf0zxWBkbFtymPeDP+rvUQIH3uAU= +github.com/aws/aws-sdk-go-v2 v1.24.1/go.mod h1:LNh45Br1YAkEKaAqvmE1m8FUx6a5b/V0oAKV7of29b4= +github.com/aws/aws-sdk-go-v2/config v1.26.6 h1:Z/7w9bUqlRI0FFQpetVuFYEsjzE3h7fpU6HuGmfPL/o= +github.com/aws/aws-sdk-go-v2/config v1.26.6/go.mod h1:uKU6cnDmYCvJ+pxO9S4cWDb2yWWIH5hra+32hVh1MI4= +github.com/aws/aws-sdk-go-v2/credentials v1.16.16 h1:8q6Rliyv0aUFAVtzaldUEcS+T5gbadPbWdV1WcAddK8= +github.com/aws/aws-sdk-go-v2/credentials v1.16.16/go.mod h1:UHVZrdUsv63hPXFo1H7c5fEneoVo9UXiz36QG1GEPi0= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.11 h1:c5I5iH+DZcH3xOIMlz3/tCKJDaHFwYEmxvlh2fAcFo8= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.11/go.mod h1:cRrYDYAMUohBJUtUnOhydaMHtiK/1NZ0Otc9lIb6O0Y= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.10 h1:vF+Zgd9s+H4vOXd5BMaPWykta2a6Ih0AKLq/X6NYKn4= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.10/go.mod h1:6BkRjejp/GR4411UGqkX8+wFMbFbqsUIimfK4XjOKR4= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.10 h1:nYPe006ktcqUji8S2mqXf9c/7NdiKriOwMvWQHgYztw= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.10/go.mod h1:6UV4SZkVvmODfXKql4LCbaZUpF7HO2BX38FgBf9ZOLw= +github.com/aws/aws-sdk-go-v2/internal/ini v1.7.3 h1:n3GDfwqF2tzEkXlv5cuy4iy7LpKDtqDMcNLfZDu9rls= +github.com/aws/aws-sdk-go-v2/internal/ini v1.7.3/go.mod h1:6fQQgfuGmw8Al/3M2IgIllycxV7ZW7WCdVSqfBeUiCY= +github.com/aws/aws-sdk-go-v2/service/ecs v1.38.3 h1:0pK6kK4Fy15VR7GBYpuCpT3wK0q3JEqYRdKMJXNrP5w= +github.com/aws/aws-sdk-go-v2/service/ecs v1.38.3/go.mod h1:kt+L4lMA2nvv9evq9S6TOH1up95/2RsQG4GXfxoPRfM= +github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.27.0 h1:r9eCNAMs0C4gjkod/p4dsb+ZMOQAkdjPuin9QUUcjmY= +github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.27.0/go.mod h1:7iQ5nRkEdgQWWOmaA+BBbe1pKX8/sceSO6NSNqVx/vk= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.4 h1:/b31bi3YVNlkzkBrm9LfpaKoaYZUxIAj4sHfOTmLfqw= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.4/go.mod h1:2aGXHFmbInwgP9ZfpmdIfOELL79zhdNYNmReK8qDfdQ= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.10 h1:DBYTXwIGQSGs9w4jKm60F5dmCQ3EEruxdc0MFh+3EY4= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.10/go.mod h1:wohMUQiFdzo0NtxbBg0mSRGZ4vL3n0dKjLTINdcIino= +github.com/aws/aws-sdk-go-v2/service/sso v1.18.7 h1:eajuO3nykDPdYicLlP3AGgOyVN3MOlFmZv7WGTuJPow= +github.com/aws/aws-sdk-go-v2/service/sso v1.18.7/go.mod h1:+mJNDdF+qiUlNKNC3fxn74WWNN+sOiGOEImje+3ScPM= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.21.7 h1:QPMJf+Jw8E1l7zqhZmMlFw6w1NmfkfiSK8mS4zOx3BA= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.21.7/go.mod h1:ykf3COxYI0UJmxcfcxcVuz7b6uADi1FkiUz6Eb7AgM8= +github.com/aws/aws-sdk-go-v2/service/sts v1.26.7 h1:NzO4Vrau795RkUdSHKEwiR01FaGzGOH1EETJ+5QHnm0= +github.com/aws/aws-sdk-go-v2/service/sts v1.26.7/go.mod h1:6h2YuIoxaMSCFf5fi1EgZAwdfkGMgDY+DVfa61uLe4U= +github.com/aws/smithy-go v1.19.0 h1:KWFKQV80DpP3vJrrA9sVAHQ5gc2z8i4EzrLhLlWXcBM= +github.com/aws/smithy-go v1.19.0/go.mod h1:NukqUGpCZIILqqiV0NIjeFh24kd/FAa4beRb6nbIUPE= github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM= github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= @@ -58,8 +56,8 @@ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7 github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/go-resty/resty/v2 v2.7.0 h1:me+K9p3uhSmXtrBZ4k9jcEAfJmuC8IivWHwaLZwPrFY= -github.com/go-resty/resty/v2 v2.7.0/go.mod h1:9PWDzw47qPphMRFfhsyk0NnSgvluHcljSMVIq3w7q0I= +github.com/go-resty/resty/v2 v2.11.0 h1:i7jMfNOJYMp69lq7qozJP+bjgzfAzeOhuGlyDrqxT/8= +github.com/go-resty/resty/v2 v2.11.0/go.mod h1:iiP/OpA0CkcL3IGt1O0+/SIItFUbkkyw5BGXiVdTu+A= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -150,14 +148,19 @@ github.com/vmihailenco/msgpack/v4 v4.3.12 h1:07s4sz9IReOgdikxLTKNbBdqDMLsjPKXwvC github.com/vmihailenco/msgpack/v4 v4.3.12/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4= github.com/vmihailenco/tagparser v0.1.1 h1:quXMXlA39OCbd2wAdTsGDlK9RkOk6Wuw+x37wVyIuWY= github.com/vmihailenco/tagparser v0.1.1/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/zclconf/go-cty v1.1.0/go.mod h1:xnAOWiHeOqg2nWS62VtQ7pbOu17FtxJNW8RLEih+O3s= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180811021610-c39426892332/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -166,14 +169,18 @@ golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191009170851-d66e71096ffb/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20211029224645-99673261e6eb/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 h1:CIJ76btIcR3eFI5EgSo6k1qKw9KJexJuRLI9G7Hp5wE= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -181,6 +188,8 @@ golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -190,23 +199,40 @@ golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6 h1:nonptSpoQ4vQjyraW20DXPAglgQfVnM9ZC6MmNLMR60= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= +golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= diff --git a/provider/datasource_application_dashboard_definition.go b/provider/datasource_application_dashboard_definition.go index 6687c4e..b5ec9e0 100644 --- a/provider/datasource_application_dashboard_definition.go +++ b/provider/datasource_application_dashboard_definition.go @@ -89,57 +89,16 @@ func (a *ApplicationDashboardDefinitionDataSource) Read(ctx context.Context, req var err error var metadata *builder.MetadataApplication + var resourceNames *builder.ResourceNames + if metadata, err = a.metadataReader.ReadMetadata(state.AppId()); err != nil { response.Diagnostics.AddError("can not get metadata", err.Error()) - return - } - - // Always available - cloudwatchNamespace := builder.Augment(a.resourceNamePatterns.CloudwatchNamespace, state.AppId()) - grafanaCloudWatchDatasourceName := builder.Augment(a.resourceNamePatterns.GrafanaCloudWatchDatasource, state.AppId()) - grafanaElasticsearchDatasourceName := builder.Augment(a.resourceNamePatterns.GrafanaElasticsearchDatasource, state.AppId()) - // only available when orchestrator is ecs => ECS/EC2-LB+TG related - var targetGroups []builder.ElbTargetGroup - var ecsTaskDefinitionName string - var ecsClusterName string - var ecsServiceName string - - // only available when orchestrator is kubernetes => Kubernetes/Traefik related - var kubernetesNamespace string - var kubernetesPod string - var traefikServiceName string - - containers := make([]string, 0) - diags = state.Containers.ElementsAs(ctx, &containers, false) - response.Diagnostics.Append(diags...) - - switch orchestrator := a.orchestrator; orchestrator { - case orchestratorEcs: - ecsClusterName = builder.Augment(a.resourceNamePatterns.EcsCluster, state.AppId()) - ecsServiceName = builder.Augment(a.resourceNamePatterns.EcsService, state.AppId()) - targetGroups, ecsTaskDefinitionName, err = getEc2AndEcsData(ctx, response, ecsClusterName, ecsServiceName) - if err != nil { - return - } - case orchestratorKubernetes: - kubernetesNamespace = builder.Augment(a.resourceNamePatterns.KubernetesNamespace, state.AppId()) - kubernetesPod = builder.Augment(a.resourceNamePatterns.KubernetesPod, state.AppId()) - traefikServiceName = builder.Augment(a.resourceNamePatterns.TraefikServiceName, state.AppId()) + return } - resourceNames := builder.ResourceNames{ - CloudwatchNamespace: cloudwatchNamespace, - EcsCluster: ecsClusterName, - EcsService: ecsServiceName, - EcsTaskDefinition: ecsTaskDefinitionName, - GrafanaCloudWatchDatasourceName: grafanaCloudWatchDatasourceName, - GrafanaElasticsearchDatasourceName: grafanaElasticsearchDatasourceName, - KubernetesNamespace: kubernetesNamespace, - KubernetesPod: kubernetesPod, - TraefikServiceName: traefikServiceName, - TargetGroups: targetGroups, - Containers: containers, + if resourceNames, err = a.getResourceNames(ctx, state, response); err != nil { + return } db := builder.NewDashboardBuilder(resourceNames, a.orchestrator) @@ -149,21 +108,7 @@ func (a *ApplicationDashboardDefinitionDataSource) Read(ctx context.Context, req db.AddPanel(builder.NewPanelWarn) db.AddPanel(builder.NewPanelLogs) - if len(metadata.ApiServer.Routes) > 0 { - for i := range targetGroups { - db.AddElbTargetGroup(i) - } - - db.AddTraefikService() - } - - for _, route := range metadata.ApiServer.Routes { - if route.Path == "/health" { - continue - } - - db.AddApiServerHandler(route.Method, route.Path) - } + a.addHttpServers(metadata, resourceNames, db) for _, consumer := range metadata.Stream.Consumers { db.AddStreamConsumer(consumer) @@ -215,27 +160,107 @@ func (a *ApplicationDashboardDefinitionDataSource) Read(ctx context.Context, req response.Diagnostics.Append(diags...) } -func getEc2AndEcsData(ctx context.Context, response *tfsdk.ReadDataSourceResponse, ecsClusterName string, ecsServiceName string) ([]builder.ElbTargetGroup, string, error) { +func (a *ApplicationDashboardDefinitionDataSource) getResourceNames(ctx context.Context, state *ApplicationDashboardDefinitionData, response *tfsdk.ReadDataSourceResponse) (*builder.ResourceNames, error) { + var err error + + // Always available + cloudwatchNamespace := builder.Augment(a.resourceNamePatterns.CloudwatchNamespace, state.AppId()) + grafanaCloudWatchDatasourceName := builder.Augment(a.resourceNamePatterns.GrafanaCloudWatchDatasource, state.AppId()) + grafanaElasticsearchDatasourceName := builder.Augment(a.resourceNamePatterns.GrafanaElasticsearchDatasource, state.AppId()) + + // only available when orchestrator is ecs => ECS/EC2-LB+TG related + var targetGroups []builder.ElbTargetGroup + var ecsTaskDefinitionName string + var ecsClusterName string + var ecsServiceName string + + // only available when orchestrator is kubernetes => Kubernetes/Traefik related + var kubernetesNamespace string + var kubernetesPod string + var traefikServiceName string + + containers := make([]string, 0) + diags := state.Containers.ElementsAs(ctx, &containers, false) + response.Diagnostics.Append(diags...) + + switch orchestrator := a.orchestrator; orchestrator { + case orchestratorEcs: + ecsClusterName = builder.Augment(a.resourceNamePatterns.EcsCluster, state.AppId()) + ecsServiceName = builder.Augment(a.resourceNamePatterns.EcsService, state.AppId()) + targetGroups, ecsTaskDefinitionName, err = a.getEc2AndEcsData(ctx, response, ecsClusterName, ecsServiceName) + + if err != nil { + return nil, err + } + case orchestratorKubernetes: + kubernetesNamespace = builder.Augment(a.resourceNamePatterns.KubernetesNamespace, state.AppId()) + kubernetesPod = builder.Augment(a.resourceNamePatterns.KubernetesPod, state.AppId()) + traefikServiceName = builder.Augment(a.resourceNamePatterns.TraefikServiceName, state.AppId()) + } + + resourceNames := &builder.ResourceNames{ + CloudwatchNamespace: cloudwatchNamespace, + EcsCluster: ecsClusterName, + EcsService: ecsServiceName, + EcsTaskDefinition: ecsTaskDefinitionName, + GrafanaCloudWatchDatasourceName: grafanaCloudWatchDatasourceName, + GrafanaElasticsearchDatasourceName: grafanaElasticsearchDatasourceName, + KubernetesNamespace: kubernetesNamespace, + KubernetesPod: kubernetesPod, + TraefikServiceName: traefikServiceName, + TargetGroups: targetGroups, + Containers: containers, + } + + return resourceNames, nil +} + +func (a *ApplicationDashboardDefinitionDataSource) getEc2AndEcsData(ctx context.Context, response *tfsdk.ReadDataSourceResponse, ecsClusterName string, ecsServiceName string) ([]builder.ElbTargetGroup, string, error) { var targetGroups []builder.ElbTargetGroup var ecsTaskDefinitionName *string ecsClient, err := builder.NewEcsClient(ctx, ecsClusterName, ecsServiceName) if err != nil { response.Diagnostics.AddError("can not get ecs client", err.Error()) + return nil, "", err } targetGroups, err = ecsClient.GetElbTargetGroups(ctx) if err != nil { response.Diagnostics.AddError("can not get target groups", err.Error()) + return nil, "", err } ecsTaskDefinitionName, err = ecsClient.GetTaskDefinitionName(ctx) if err != nil { response.Diagnostics.AddError("can not get ecs task definition name", err.Error()) + return nil, "", err } return targetGroups, *ecsTaskDefinitionName, err } + +func (a *ApplicationDashboardDefinitionDataSource) addHttpServers(metadata *builder.MetadataApplication, resourceNames *builder.ResourceNames, db *builder.DashboardBuilder) { + if len(metadata.HttpServers) == 0 { + return + } + + for i := range resourceNames.TargetGroups { + db.AddElbTargetGroup(i) + } + + db.AddTraefikService() + + for _, server := range metadata.HttpServers { + for _, route := range server.Handlers { + if route.Path == "/health" { + continue + } + + db.AddHttpServerHandler(server.Name, route) + } + } +} diff --git a/provider/datasource_application_metadata_definition.go b/provider/datasource_application_metadata_definition.go index ee7af17..0b8a820 100644 --- a/provider/datasource_application_metadata_definition.go +++ b/provider/datasource_application_metadata_definition.go @@ -84,6 +84,7 @@ func (a *ApplicationMetadataDefinitionDatasource) Read(ctx context.Context, requ if metadata, err = a.metadataReader.ReadMetadata(state.AppId()); err != nil { response.Diagnostics.AddError("can not get metadata", err.Error()) + return } diff --git a/provider/provider.go b/provider/provider.go index 59734df..825639a 100644 --- a/provider/provider.go +++ b/provider/provider.go @@ -171,7 +171,7 @@ func (p *GosolineProvider) GetSchema(_ context.Context) (tfsdk.Schema, diag.Diag * {family} * {group} * {app} - traefik_service_name: Allows to change the default traefik service name name pattern (default: ` + defaultTraefikServiceNameNamePattern + `) + traefik_service_name: Allows to change the default traefik service name pattern (default: ` + defaultTraefikServiceNameNamePattern + `) Available placeholders are: * {project} * {env} @@ -195,12 +195,14 @@ func (p *GosolineProvider) Configure(ctx context.Context, request tfsdk.Configur metadataProperties, err := p.getMetadataProperties(ctx, config) if err != nil { diags.AddError("failed to get metadata properties from attributes", err.Error()) + return } namepatternProperties, err := p.getNamepatternProperties(ctx, config) if err != nil { diags.AddError("failed to get metadata properties from attributes", err.Error()) + return } @@ -223,6 +225,7 @@ func (p *GosolineProvider) Configure(ctx context.Context, request tfsdk.Configur } if !funk.ContainsString(availableOrchestrators, p.orchestrator) { response.Diagnostics.AddError("invalid operator", fmt.Sprintf("'%s' is not a valid orchestrator, choose between %v", p.orchestrator, availableOrchestrators)) + return } @@ -277,6 +280,7 @@ func (p *GosolineProvider) convertBigFloatToNativeType(ctx context.Context, inpu bigIntValue, _ := bigFloatValue.Int64() *dest.(*int) = int(bigIntValue) + return nil }