Compare commits

...

44 Commits

Author SHA1 Message Date
Mikkel Oscar Lyderik Larsen 50c4a7e4fa Use static base image for public images
Signed-off-by: Mikkel Oscar Lyderik Larsen <mikkel.larsen@zalando.de>
2025-09-12 09:31:28 +02:00
Antoine Deschênes bf80e85e58 Add Prometheus server aliases and bearer token authentication support (#815)
Adds --prometheus-server-token-file flag to support authenticating to
a prometheus server using a bearer token file.

Adds --additional-prometheus-servers=<name>=<url>,... and
--additional-prometheus-server-token-files=<name>=<url>,... to
support additional servers through the new "prometheus-server-alias"
HPA annotation

Signed-off-by: Antoine Deschênes <antoine@antoinedeschenes.com>
2025-09-11 10:30:12 +02:00
Noor Muhammad Malik c5017c7f89 Merge pull request #807 from thaniri/issue-97-add-configurable-collection-intervals
feat: add config flags for collection intervals
2025-06-06 17:16:51 +02:00
Marek Slabicki 613d6ba302 feat: add config flags for collection intervals
The garbage collection interval should never be less than the collection
interval as this results in "gaps" in metrics.

By making these configurations tuneable it allows users to configure
kube-metrics-adapter to suit the needs of their clusters.

An example configuration that solves this issue is:

- --default-collection-interval=30s
- --metrics-ttl=30s
- --garbage-collector-interval=30s
- --metrics-ttl=45s

This ensures metrics are collected every 30 seconds, retained for 45
seconds, and garbage collected every 30 seconds. Resulting in zero
"gaps".

Signed-off-by: Marek Slabicki <mslabicki@demonware.net>
2025-05-22 15:02:13 -07:00
Noor Muhammad Malik 2ed22f04c2 Merge pull request #805 from zalando-incubator/helm/fix-wrong-image-src
helm: fix wrong image as we moved to ghcr
2025-05-20 13:25:11 +02:00
Sandor Szücs b79f3bf065 helm: fix wrong image as we moved to ghcr
fix: https://github.com/zalando-incubator/kube-metrics-adapter/issues/804
Signed-off-by: Sandor Szücs <sandor.szuecs@zalando.de>
2025-05-16 14:16:01 +02:00
dependabot[bot] 292bd4fc27 Bump the all-go-mod-patch-and-minor group with 11 updates (#803)
* Bump the all-go-mod-patch-and-minor group with 11 updates

Bumps the all-go-mod-patch-and-minor group with 11 updates:

| Package | From | To |
| --- | --- | --- |
| [golang.org/x/net](https://github.com/golang/net) | `0.39.0` | `0.40.0` |
| [golang.org/x/oauth2](https://github.com/golang/oauth2) | `0.29.0` | `0.30.0` |
| [golang.org/x/sync](https://github.com/golang/sync) | `0.13.0` | `0.14.0` |
| [k8s.io/api](https://github.com/kubernetes/api) | `0.32.3` | `0.32.4` |
| [k8s.io/apimachinery](https://github.com/kubernetes/apimachinery) | `0.32.3` | `0.32.4` |
| [k8s.io/apiserver](https://github.com/kubernetes/apiserver) | `0.32.3` | `0.32.4` |
| [k8s.io/client-go](https://github.com/kubernetes/client-go) | `0.32.3` | `0.32.4` |
| [k8s.io/code-generator](https://github.com/kubernetes/code-generator) | `0.32.3` | `0.32.4` |
| [k8s.io/component-base](https://github.com/kubernetes/component-base) | `0.32.3` | `0.32.4` |
| [k8s.io/metrics](https://github.com/kubernetes/metrics) | `0.32.3` | `0.32.4` |
| [sigs.k8s.io/controller-tools](https://github.com/kubernetes-sigs/controller-tools) | `0.16.5` | `0.18.0` |


Updates `golang.org/x/net` from 0.39.0 to 0.40.0
- [Commits](https://github.com/golang/net/compare/v0.39.0...v0.40.0)

Updates `golang.org/x/oauth2` from 0.29.0 to 0.30.0
- [Commits](https://github.com/golang/oauth2/compare/v0.29.0...v0.30.0)

Updates `golang.org/x/sync` from 0.13.0 to 0.14.0
- [Commits](https://github.com/golang/sync/compare/v0.13.0...v0.14.0)

Updates `k8s.io/api` from 0.32.3 to 0.32.4
- [Commits](https://github.com/kubernetes/api/compare/v0.32.3...v0.32.4)

Updates `k8s.io/apimachinery` from 0.32.3 to 0.32.4
- [Commits](https://github.com/kubernetes/apimachinery/compare/v0.32.3...v0.32.4)

Updates `k8s.io/apiserver` from 0.32.3 to 0.32.4
- [Commits](https://github.com/kubernetes/apiserver/compare/v0.32.3...v0.32.4)

Updates `k8s.io/client-go` from 0.32.3 to 0.32.4
- [Changelog](https://github.com/kubernetes/client-go/blob/master/CHANGELOG.md)
- [Commits](https://github.com/kubernetes/client-go/compare/v0.32.3...v0.32.4)

Updates `k8s.io/code-generator` from 0.32.3 to 0.32.4
- [Commits](https://github.com/kubernetes/code-generator/compare/v0.32.3...v0.32.4)

Updates `k8s.io/component-base` from 0.32.3 to 0.32.4
- [Commits](https://github.com/kubernetes/component-base/compare/v0.32.3...v0.32.4)

Updates `k8s.io/metrics` from 0.32.3 to 0.32.4
- [Commits](https://github.com/kubernetes/metrics/compare/v0.32.3...v0.32.4)

Updates `sigs.k8s.io/controller-tools` from 0.16.5 to 0.18.0
- [Release notes](https://github.com/kubernetes-sigs/controller-tools/releases)
- [Changelog](https://github.com/kubernetes-sigs/controller-tools/blob/main/envtest-releases.yaml)
- [Commits](https://github.com/kubernetes-sigs/controller-tools/compare/v0.16.5...v0.18.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-version: 0.40.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: golang.org/x/oauth2
  dependency-version: 0.30.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: golang.org/x/sync
  dependency-version: 0.14.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: k8s.io/api
  dependency-version: 0.32.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: k8s.io/apimachinery
  dependency-version: 0.32.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: k8s.io/apiserver
  dependency-version: 0.32.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: k8s.io/client-go
  dependency-version: 0.32.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: k8s.io/code-generator
  dependency-version: 0.32.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: k8s.io/component-base
  dependency-version: 0.32.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: k8s.io/metrics
  dependency-version: 0.32.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: sigs.k8s.io/controller-tools
  dependency-version: 0.18.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all-go-mod-patch-and-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* Prevent updating to Kubernetes v1.33

Signed-off-by: Mikkel Oscar Lyderik Larsen <mikkel.larsen@zalando.de>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Mikkel Oscar Lyderik Larsen <mikkel.larsen@zalando.de>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Mikkel Oscar Lyderik Larsen <mikkel.larsen@zalando.de>
2025-05-12 10:25:44 +02:00
Noor Muhammad Malik be40d664f6 Merge pull request #795 from zalando-incubator/nakadi-filter-support
Add support for filtering nakadi subscriptions
2025-05-06 14:49:17 +02:00
Mikkel Oscar Lyderik Larsen 5418c64e8f Fix error string in test
Signed-off-by: Mikkel Oscar Lyderik Larsen <mikkel.larsen@zalando.de>
2025-05-06 14:24:27 +02:00
Mikkel Oscar Lyderik Larsen f0a07e0c64 Update pkg/collector/nakadi_collector.go
Co-authored-by: Paŭlo Ebermann <Paul-Ebermann@gmx.de>
Signed-off-by: Mikkel Oscar Lyderik Larsen <mikkel.larsen@zalando.de>
2025-05-06 14:20:13 +02:00
Mikkel Oscar Lyderik Larsen a1d90533e8 Address PR comments
Signed-off-by: Mikkel Oscar Lyderik Larsen <mikkel.larsen@zalando.de>
2025-05-06 14:20:08 +02:00
Mikkel Oscar Lyderik Larsen e16119f821 Update README.md
Co-authored-by: Paŭlo Ebermann <Paul-Ebermann@gmx.de>
Signed-off-by: Mikkel Oscar Lyderik Larsen <mikkel.larsen@zalando.de>
2025-05-06 14:20:04 +02:00
Mikkel Oscar Lyderik Larsen 96a1315ad3 Git revert metric_store changes
Signed-off-by: Mikkel Oscar Lyderik Larsen <mikkel.larsen@zalando.de>
2025-05-06 14:20:01 +02:00
Mikkel Oscar Lyderik Larsen 8b1245cbc8 Add support for filtering nakadi subscriptions
Signed-off-by: Mikkel Oscar Lyderik Larsen <mikkel.larsen@zalando.de>
2025-05-06 14:19:57 +02:00
Katyanna Moura 30dcc24c7f Merge pull request #801 from zalando-incubator/dependabot/go_modules/all-go-mod-patch-and-minor-37a3f889ae
Bump the all-go-mod-patch-and-minor group with 8 updates
2025-05-05 11:49:31 +02:00
Mikkel Oscar Lyderik Larsen d1d37dca26 Update generated code
Signed-off-by: Mikkel Oscar Lyderik Larsen <mikkel.larsen@zalando.de>
2025-05-05 10:30:55 +02:00
dependabot[bot] 221589d630 Bump the all-go-mod-patch-and-minor group with 8 updates
Bumps the all-go-mod-patch-and-minor group with 8 updates:

| Package | From | To |
| --- | --- | --- |
| [k8s.io/api](https://github.com/kubernetes/api) | `0.31.7` | `0.31.8` |
| [k8s.io/apimachinery](https://github.com/kubernetes/apimachinery) | `0.31.7` | `0.31.8` |
| [k8s.io/apiserver](https://github.com/kubernetes/apiserver) | `0.31.7` | `0.31.8` |
| [k8s.io/client-go](https://github.com/kubernetes/client-go) | `0.31.7` | `0.31.8` |
| [k8s.io/code-generator](https://github.com/kubernetes/code-generator) | `0.31.7` | `0.31.8` |
| [k8s.io/component-base](https://github.com/kubernetes/component-base) | `0.31.7` | `0.31.8` |
| [k8s.io/metrics](https://github.com/kubernetes/metrics) | `0.31.7` | `0.31.8` |
| [sigs.k8s.io/custom-metrics-apiserver](https://github.com/kubernetes-sigs/custom-metrics-apiserver) | `1.30.1-0.20241105195130-84dc8cfe2555` | `1.32.0` |


Updates `k8s.io/api` from 0.31.7 to 0.31.8
- [Commits](https://github.com/kubernetes/api/compare/v0.31.7...v0.31.8)

Updates `k8s.io/apimachinery` from 0.31.7 to 0.31.8
- [Commits](https://github.com/kubernetes/apimachinery/compare/v0.31.7...v0.31.8)

Updates `k8s.io/apiserver` from 0.31.7 to 0.31.8
- [Commits](https://github.com/kubernetes/apiserver/compare/v0.31.7...v0.31.8)

Updates `k8s.io/client-go` from 0.31.7 to 0.31.8
- [Changelog](https://github.com/kubernetes/client-go/blob/master/CHANGELOG.md)
- [Commits](https://github.com/kubernetes/client-go/compare/v0.31.7...v0.31.8)

Updates `k8s.io/code-generator` from 0.31.7 to 0.31.8
- [Commits](https://github.com/kubernetes/code-generator/compare/v0.31.7...v0.31.8)

Updates `k8s.io/component-base` from 0.31.7 to 0.31.8
- [Commits](https://github.com/kubernetes/component-base/compare/v0.31.7...v0.31.8)

Updates `k8s.io/metrics` from 0.31.7 to 0.31.8
- [Commits](https://github.com/kubernetes/metrics/compare/v0.31.7...v0.31.8)

Updates `sigs.k8s.io/custom-metrics-apiserver` from 1.30.1-0.20241105195130-84dc8cfe2555 to 1.32.0
- [Release notes](https://github.com/kubernetes-sigs/custom-metrics-apiserver/releases)
- [Changelog](https://github.com/kubernetes-sigs/custom-metrics-apiserver/blob/master/RELEASE.md)
- [Commits](https://github.com/kubernetes-sigs/custom-metrics-apiserver/commits/v1.32.0)

---
updated-dependencies:
- dependency-name: k8s.io/api
  dependency-version: 0.31.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: k8s.io/apimachinery
  dependency-version: 0.31.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: k8s.io/apiserver
  dependency-version: 0.31.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: k8s.io/client-go
  dependency-version: 0.31.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: k8s.io/code-generator
  dependency-version: 0.31.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: k8s.io/component-base
  dependency-version: 0.31.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: k8s.io/metrics
  dependency-version: 0.31.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: sigs.k8s.io/custom-metrics-apiserver
  dependency-version: 1.32.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all-go-mod-patch-and-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-05 06:53:53 +00:00
Zak Lawrence A 3acdacf8c9 Merge pull request #802 from zalando-incubator/css-all
Remove all category from ClusterScalingSchedule
2025-04-28 10:57:47 +02:00
Zak Lawrence 62c50df209 Remove all category from ClusterScalingSchedule
Signed-off-by: Zak Lawrence <zaklawrencea@protonmail.com>
2025-04-28 10:38:18 +02:00
Katyanna Moura 25e6ce4bd1 Merge pull request #800 from zalando-incubator/dependabot/go_modules/all-go-mod-patch-and-minor-a8cfa66dc2
Bump the all-go-mod-patch-and-minor group with 4 updates
2025-04-14 13:34:39 +02:00
dependabot[bot] 52d3980c56 Bump the all-go-mod-patch-and-minor group with 4 updates
Bumps the all-go-mod-patch-and-minor group with 4 updates: [github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2), [github.com/aws/aws-sdk-go-v2/service/sqs](https://github.com/aws/aws-sdk-go-v2), [github.com/prometheus/client_golang](https://github.com/prometheus/client_golang) and [golang.org/x/net](https://github.com/golang/net).


Updates `github.com/aws/aws-sdk-go-v2/config` from 1.29.13 to 1.29.14
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/config/v1.29.13...config/v1.29.14)

Updates `github.com/aws/aws-sdk-go-v2/service/sqs` from 1.38.4 to 1.38.5
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/s3/v1.38.4...service/s3/v1.38.5)

Updates `github.com/prometheus/client_golang` from 1.21.1 to 1.22.0
- [Release notes](https://github.com/prometheus/client_golang/releases)
- [Changelog](https://github.com/prometheus/client_golang/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prometheus/client_golang/compare/v1.21.1...v1.22.0)

Updates `golang.org/x/net` from 0.38.0 to 0.39.0
- [Commits](https://github.com/golang/net/compare/v0.38.0...v0.39.0)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/config
  dependency-version: 1.29.14
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: github.com/aws/aws-sdk-go-v2/service/sqs
  dependency-version: 1.38.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: github.com/prometheus/client_golang
  dependency-version: 1.22.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: golang.org/x/net
  dependency-version: 0.39.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all-go-mod-patch-and-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-14 06:03:14 +00:00
Zak Lawrence A da84a4292d Merge pull request #799 from zalando-incubator/scaling-schedule-short-names
Add short names for (cluster)scalingschedule CRDs
2025-04-09 15:19:48 +02:00
Zak Lawrence 80b80c878d Add (cluster)scalingschedule CRD short names as part of codegen
Signed-off-by: Zak Lawrence <zaklawrencea@protonmail.com>
2025-04-09 15:00:23 +02:00
Katyanna Moura e44da55641 Merge pull request #798 from zalando-incubator/dependabot/go_modules/all-go-mod-patch-and-minor-585581b95e
Bump the all-go-mod-patch-and-minor group with 4 updates
2025-04-07 11:51:44 +02:00
dependabot[bot] b9308bd8a9 Bump the all-go-mod-patch-and-minor group with 4 updates
Bumps the all-go-mod-patch-and-minor group with 4 updates: [github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2), [github.com/aws/aws-sdk-go-v2/service/sqs](https://github.com/aws/aws-sdk-go-v2), [golang.org/x/oauth2](https://github.com/golang/oauth2) and [golang.org/x/sync](https://github.com/golang/sync).


Updates `github.com/aws/aws-sdk-go-v2/config` from 1.29.12 to 1.29.13
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/config/v1.29.12...config/v1.29.13)

Updates `github.com/aws/aws-sdk-go-v2/service/sqs` from 1.38.3 to 1.38.4
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/s3/v1.38.3...service/s3/v1.38.4)

Updates `golang.org/x/oauth2` from 0.28.0 to 0.29.0
- [Commits](https://github.com/golang/oauth2/compare/v0.28.0...v0.29.0)

Updates `golang.org/x/sync` from 0.12.0 to 0.13.0
- [Commits](https://github.com/golang/sync/compare/v0.12.0...v0.13.0)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/config
  dependency-version: 1.29.13
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: github.com/aws/aws-sdk-go-v2/service/sqs
  dependency-version: 1.38.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: golang.org/x/oauth2
  dependency-version: 0.29.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: golang.org/x/sync
  dependency-version: 0.13.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all-go-mod-patch-and-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-07 07:28:14 +00:00
Katyanna Moura 29ce099563 Merge pull request #796 from zalando-incubator/dependabot/go_modules/all-go-mod-patch-and-minor-1c5ac7b2ea
Bump the all-go-mod-patch-and-minor group across 1 directory with 4 updates
2025-04-04 10:52:22 +01:00
Mikkel Oscar Lyderik Larsen a4306be7a5 go mod tidy
Signed-off-by: Mikkel Oscar Lyderik Larsen <mikkel.larsen@zalando.de>
2025-04-01 15:12:27 +02:00
dependabot[bot] d346066ee7 Bump the all-go-mod-patch-and-minor group across 1 directory with 4 updates
Bumps the all-go-mod-patch-and-minor group with 4 updates in the / directory: [github.com/argoproj/argo-rollouts](https://github.com/argoproj/argo-rollouts), [github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2), [github.com/aws/aws-sdk-go-v2/service/sqs](https://github.com/aws/aws-sdk-go-v2) and [golang.org/x/net](https://github.com/golang/net).


Updates `github.com/argoproj/argo-rollouts` from 1.8.0 to 1.8.2
- [Release notes](https://github.com/argoproj/argo-rollouts/releases)
- [Changelog](https://github.com/argoproj/argo-rollouts/blob/master/CHANGELOG.md)
- [Commits](https://github.com/argoproj/argo-rollouts/compare/v1.8.0...v1.8.2)

Updates `github.com/aws/aws-sdk-go-v2/config` from 1.29.9 to 1.29.12
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/config/v1.29.9...config/v1.29.12)

Updates `github.com/aws/aws-sdk-go-v2/service/sqs` from 1.38.1 to 1.38.3
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/s3/v1.38.1...service/s3/v1.38.3)

Updates `golang.org/x/net` from 0.37.0 to 0.38.0
- [Commits](https://github.com/golang/net/compare/v0.37.0...v0.38.0)

---
updated-dependencies:
- dependency-name: github.com/argoproj/argo-rollouts
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: github.com/aws/aws-sdk-go-v2/config
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: github.com/aws/aws-sdk-go-v2/service/sqs
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: golang.org/x/net
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all-go-mod-patch-and-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-31 06:46:43 +00:00
Katyanna Moura 763ba23fd9 Merge pull request #793 from zalando-incubator/dependabot/go_modules/all-go-mod-patch-and-minor-2e9aefc2c4
Bump github.com/prometheus/common from 0.62.0 to 0.63.0 in the all-go-mod-patch-and-minor group
2025-03-17 09:44:53 +01:00
dependabot[bot] f4e7a37a7b Bump github.com/prometheus/common
Bumps the all-go-mod-patch-and-minor group with 1 update: [github.com/prometheus/common](https://github.com/prometheus/common).


Updates `github.com/prometheus/common` from 0.62.0 to 0.63.0
- [Release notes](https://github.com/prometheus/common/releases)
- [Changelog](https://github.com/prometheus/common/blob/main/RELEASE.md)
- [Commits](https://github.com/prometheus/common/compare/v0.62.0...v0.63.0)

---
updated-dependencies:
- dependency-name: github.com/prometheus/common
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all-go-mod-patch-and-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-17 06:48:11 +00:00
dependabot[bot] 21dae23214 Bump the all-go-mod-patch-and-minor group across 1 directory with 13 updates (#792)
Bumps the all-go-mod-patch-and-minor group with 9 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2) | `1.29.8` | `1.29.9` |
| [github.com/aws/aws-sdk-go-v2/service/sqs](https://github.com/aws/aws-sdk-go-v2) | `1.38.0` | `1.38.1` |
| [github.com/prometheus/client_golang](https://github.com/prometheus/client_golang) | `1.21.0` | `1.21.1` |
| [golang.org/x/net](https://github.com/golang/net) | `0.36.0` | `0.37.0` |
| [golang.org/x/oauth2](https://github.com/golang/oauth2) | `0.27.0` | `0.28.0` |
| [k8s.io/api](https://github.com/kubernetes/api) | `0.31.6` | `0.31.7` |
| [k8s.io/apiserver](https://github.com/kubernetes/apiserver) | `0.31.6` | `0.31.7` |
| [k8s.io/code-generator](https://github.com/kubernetes/code-generator) | `0.31.6` | `0.31.7` |
| [k8s.io/metrics](https://github.com/kubernetes/metrics) | `0.31.6` | `0.31.7` |



Updates `github.com/aws/aws-sdk-go-v2/config` from 1.29.8 to 1.29.9
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/config/v1.29.8...config/v1.29.9)

Updates `github.com/aws/aws-sdk-go-v2/service/sqs` from 1.38.0 to 1.38.1
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/service/s3/v1.38.1/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/s3/v1.38.0...service/s3/v1.38.1)

Updates `github.com/prometheus/client_golang` from 1.21.0 to 1.21.1
- [Release notes](https://github.com/prometheus/client_golang/releases)
- [Changelog](https://github.com/prometheus/client_golang/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prometheus/client_golang/compare/v1.21.0...v1.21.1)

Updates `golang.org/x/net` from 0.36.0 to 0.37.0
- [Commits](https://github.com/golang/net/compare/v0.36.0...v0.37.0)

Updates `golang.org/x/oauth2` from 0.27.0 to 0.28.0
- [Commits](https://github.com/golang/oauth2/compare/v0.27.0...v0.28.0)

Updates `golang.org/x/sync` from 0.11.0 to 0.12.0
- [Commits](https://github.com/golang/sync/compare/v0.11.0...v0.12.0)

Updates `k8s.io/api` from 0.31.6 to 0.31.7
- [Commits](https://github.com/kubernetes/api/compare/v0.31.6...v0.31.7)

Updates `k8s.io/apimachinery` from 0.31.6 to 0.31.7
- [Commits](https://github.com/kubernetes/apimachinery/compare/v0.31.6...v0.31.7)

Updates `k8s.io/apiserver` from 0.31.6 to 0.31.7
- [Commits](https://github.com/kubernetes/apiserver/compare/v0.31.6...v0.31.7)

Updates `k8s.io/client-go` from 0.31.6 to 0.31.7
- [Changelog](https://github.com/kubernetes/client-go/blob/master/CHANGELOG.md)
- [Commits](https://github.com/kubernetes/client-go/compare/v0.31.6...v0.31.7)

Updates `k8s.io/code-generator` from 0.31.6 to 0.31.7
- [Commits](https://github.com/kubernetes/code-generator/compare/v0.31.6...v0.31.7)

Updates `k8s.io/component-base` from 0.31.6 to 0.31.7
- [Commits](https://github.com/kubernetes/component-base/compare/v0.31.6...v0.31.7)

Updates `k8s.io/metrics` from 0.31.6 to 0.31.7
- [Commits](https://github.com/kubernetes/metrics/compare/v0.31.6...v0.31.7)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/config
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: github.com/aws/aws-sdk-go-v2/service/sqs
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: github.com/prometheus/client_golang
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: golang.org/x/net
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: golang.org/x/oauth2
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: golang.org/x/sync
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: k8s.io/api
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: k8s.io/apimachinery
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: k8s.io/apiserver
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: k8s.io/client-go
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: k8s.io/code-generator
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: k8s.io/component-base
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: k8s.io/metrics
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-mod-patch-and-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-13 11:54:52 +01:00
Katyanna Moura 7d47ff5c06 Merge pull request #791 from zalando-incubator/dependabot/go_modules/golang.org/x/net-0.36.0
Bump golang.org/x/net from 0.35.0 to 0.36.0
2025-03-13 10:21:47 +01:00
dependabot[bot] c027968c71 Bump golang.org/x/net from 0.35.0 to 0.36.0
Bumps [golang.org/x/net](https://github.com/golang/net) from 0.35.0 to 0.36.0.
- [Commits](https://github.com/golang/net/compare/v0.35.0...v0.36.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-13 02:05:30 +00:00
Mikkel Oscar Lyderik Larsen eef3840510 Fix the check for HPA changed (#785)
Signed-off-by: Mikkel Oscar Lyderik Larsen <mikkel.larsen@zalando.de>
2025-03-05 20:25:18 +01:00
Katyanna Moura 716d03a09b Merge pull request #789 from zalando-incubator/dependabot/go_modules/all-go-mod-patch-and-minor-8370fc509e
Bump the all-go-mod-patch-and-minor group with 4 updates
2025-03-03 14:29:53 +01:00
Mikkel Oscar Lyderik Larsen f625fe9540 Build with Go 1.24
Signed-off-by: Mikkel Oscar Lyderik Larsen <mikkel.larsen@zalando.de>
2025-03-03 11:41:04 +01:00
Mikkel Oscar Lyderik Larsen 9e38fe15a5 Run: go mod tidy
Signed-off-by: Mikkel Oscar Lyderik Larsen <mikkel.larsen@zalando.de>
2025-03-03 11:35:34 +01:00
dependabot[bot] 0c7b5bdafe Bump the all-go-mod-patch-and-minor group with 4 updates
Bumps the all-go-mod-patch-and-minor group with 4 updates: [github.com/aws/aws-sdk-go-v2](https://github.com/aws/aws-sdk-go-v2), [github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2), [github.com/aws/aws-sdk-go-v2/service/sqs](https://github.com/aws/aws-sdk-go-v2) and [golang.org/x/oauth2](https://github.com/golang/oauth2).


Updates `github.com/aws/aws-sdk-go-v2` from 1.36.2 to 1.36.3
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/v1.36.2...v1.36.3)

Updates `github.com/aws/aws-sdk-go-v2/config` from 1.29.7 to 1.29.8
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/config/v1.29.7...config/v1.29.8)

Updates `github.com/aws/aws-sdk-go-v2/service/sqs` from 1.37.15 to 1.38.0
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/service/s3/v1.38.0/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/kms/v1.37.15...service/s3/v1.38.0)

Updates `golang.org/x/oauth2` from 0.26.0 to 0.27.0
- [Commits](https://github.com/golang/oauth2/compare/v0.26.0...v0.27.0)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: github.com/aws/aws-sdk-go-v2/config
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: github.com/aws/aws-sdk-go-v2/service/sqs
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: golang.org/x/oauth2
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all-go-mod-patch-and-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-03 06:26:43 +00:00
Katyanna Moura b44fcbaae8 Merge pull request #788 from zalando-incubator/dependabot/go_modules/all-go-mod-patch-and-minor-b5de2b574f
Bump the all-go-mod-patch-and-minor group with 4 updates
2025-02-24 10:21:51 +01:00
dependabot[bot] eb27f6037f Bump the all-go-mod-patch-and-minor group with 4 updates
Bumps the all-go-mod-patch-and-minor group with 4 updates: [github.com/aws/aws-sdk-go-v2](https://github.com/aws/aws-sdk-go-v2), [github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2), [github.com/aws/aws-sdk-go-v2/service/sqs](https://github.com/aws/aws-sdk-go-v2) and [github.com/prometheus/client_golang](https://github.com/prometheus/client_golang).


Updates `github.com/aws/aws-sdk-go-v2` from 1.36.1 to 1.36.2
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/v1.36.1...v1.36.2)

Updates `github.com/aws/aws-sdk-go-v2/config` from 1.29.6 to 1.29.7
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/config/v1.29.6...config/v1.29.7)

Updates `github.com/aws/aws-sdk-go-v2/service/sqs` from 1.37.14 to 1.37.15
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/kms/v1.37.14...service/kms/v1.37.15)

Updates `github.com/prometheus/client_golang` from 1.20.5 to 1.21.0
- [Release notes](https://github.com/prometheus/client_golang/releases)
- [Changelog](https://github.com/prometheus/client_golang/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prometheus/client_golang/compare/v1.20.5...v1.21.0)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: github.com/aws/aws-sdk-go-v2/config
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: github.com/aws/aws-sdk-go-v2/service/sqs
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: github.com/prometheus/client_golang
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all-go-mod-patch-and-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-24 07:01:22 +00:00
Katyanna Moura 6149308e6d Merge pull request #787 from zalando-incubator/dependabot/go_modules/all-go-mod-patch-and-minor-74b0ef12dd
Bump the all-go-mod-patch-and-minor group with 9 updates
2025-02-17 09:45:10 +01:00
dependabot[bot] 62cc9c98f3 Bump the all-go-mod-patch-and-minor group with 9 updates
Bumps the all-go-mod-patch-and-minor group with 9 updates:

| Package | From | To |
| --- | --- | --- |
| [github.com/spf13/cobra](https://github.com/spf13/cobra) | `1.8.1` | `1.9.1` |
| [golang.org/x/net](https://github.com/golang/net) | `0.34.0` | `0.35.0` |
| [k8s.io/api](https://github.com/kubernetes/api) | `0.31.5` | `0.31.6` |
| [k8s.io/apimachinery](https://github.com/kubernetes/apimachinery) | `0.31.5` | `0.31.6` |
| [k8s.io/apiserver](https://github.com/kubernetes/apiserver) | `0.31.5` | `0.31.6` |
| [k8s.io/client-go](https://github.com/kubernetes/client-go) | `0.31.5` | `0.31.6` |
| [k8s.io/code-generator](https://github.com/kubernetes/code-generator) | `0.31.5` | `0.31.6` |
| [k8s.io/component-base](https://github.com/kubernetes/component-base) | `0.31.5` | `0.31.6` |
| [k8s.io/metrics](https://github.com/kubernetes/metrics) | `0.31.5` | `0.31.6` |


Updates `github.com/spf13/cobra` from 1.8.1 to 1.9.1
- [Release notes](https://github.com/spf13/cobra/releases)
- [Commits](https://github.com/spf13/cobra/compare/v1.8.1...v1.9.1)

Updates `golang.org/x/net` from 0.34.0 to 0.35.0
- [Commits](https://github.com/golang/net/compare/v0.34.0...v0.35.0)

Updates `k8s.io/api` from 0.31.5 to 0.31.6
- [Commits](https://github.com/kubernetes/api/compare/v0.31.5...v0.31.6)

Updates `k8s.io/apimachinery` from 0.31.5 to 0.31.6
- [Commits](https://github.com/kubernetes/apimachinery/compare/v0.31.5...v0.31.6)

Updates `k8s.io/apiserver` from 0.31.5 to 0.31.6
- [Commits](https://github.com/kubernetes/apiserver/compare/v0.31.5...v0.31.6)

Updates `k8s.io/client-go` from 0.31.5 to 0.31.6
- [Changelog](https://github.com/kubernetes/client-go/blob/master/CHANGELOG.md)
- [Commits](https://github.com/kubernetes/client-go/compare/v0.31.5...v0.31.6)

Updates `k8s.io/code-generator` from 0.31.5 to 0.31.6
- [Commits](https://github.com/kubernetes/code-generator/compare/v0.31.5...v0.31.6)

Updates `k8s.io/component-base` from 0.31.5 to 0.31.6
- [Commits](https://github.com/kubernetes/component-base/compare/v0.31.5...v0.31.6)

Updates `k8s.io/metrics` from 0.31.5 to 0.31.6
- [Commits](https://github.com/kubernetes/metrics/compare/v0.31.5...v0.31.6)

---
updated-dependencies:
- dependency-name: github.com/spf13/cobra
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: golang.org/x/net
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: k8s.io/api
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: k8s.io/apimachinery
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: k8s.io/apiserver
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: k8s.io/client-go
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: k8s.io/code-generator
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: k8s.io/component-base
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: k8s.io/metrics
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-mod-patch-and-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-17 06:59:55 +00:00
Katyanna Moura e03222b12b Merge pull request #786 from zalando-incubator/dependabot/go_modules/all-go-mod-patch-and-minor-cc220d7c92
Bump the all-go-mod-patch-and-minor group with 5 updates
2025-02-14 10:33:49 -03:00
dependabot[bot] 063d3de6d2 Bump the all-go-mod-patch-and-minor group with 5 updates
Bumps the all-go-mod-patch-and-minor group with 5 updates:

| Package | From | To |
| --- | --- | --- |
| [github.com/aws/aws-sdk-go-v2](https://github.com/aws/aws-sdk-go-v2) | `1.36.0` | `1.36.1` |
| [github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2) | `1.29.4` | `1.29.6` |
| [github.com/aws/aws-sdk-go-v2/service/sqs](https://github.com/aws/aws-sdk-go-v2) | `1.37.12` | `1.37.14` |
| [golang.org/x/oauth2](https://github.com/golang/oauth2) | `0.25.0` | `0.26.0` |
| [golang.org/x/sync](https://github.com/golang/sync) | `0.10.0` | `0.11.0` |


Updates `github.com/aws/aws-sdk-go-v2` from 1.36.0 to 1.36.1
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/v1.36.0...v1.36.1)

Updates `github.com/aws/aws-sdk-go-v2/config` from 1.29.4 to 1.29.6
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/config/v1.29.4...config/v1.29.6)

Updates `github.com/aws/aws-sdk-go-v2/service/sqs` from 1.37.12 to 1.37.14
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/kms/v1.37.12...service/kms/v1.37.14)

Updates `golang.org/x/oauth2` from 0.25.0 to 0.26.0
- [Commits](https://github.com/golang/oauth2/compare/v0.25.0...v0.26.0)

Updates `golang.org/x/sync` from 0.10.0 to 0.11.0
- [Commits](https://github.com/golang/sync/compare/v0.10.0...v0.11.0)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: github.com/aws/aws-sdk-go-v2/config
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: github.com/aws/aws-sdk-go-v2/service/sqs
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: golang.org/x/oauth2
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all-go-mod-patch-and-minor
- dependency-name: golang.org/x/sync
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all-go-mod-patch-and-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-10 06:05:45 +00:00
32 changed files with 1224 additions and 826 deletions
+1 -1
View File
@@ -13,7 +13,7 @@ jobs:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version: '^1.23'
go-version: '^1.25'
- run: go version
- run: go install github.com/mattn/goveralls@latest
- run: go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
+3 -3
View File
@@ -30,7 +30,7 @@ jobs:
- uses: actions/setup-go@fac708d6674e30b6ba41289acaab6d4b75aa0753
with:
# https://www.npmjs.com/package/semver#caret-ranges-123-025-004
go-version: '^1.21'
go-version: '^1.25'
- name: Login to Github Container Registry
uses: docker/login-action@465a07811f14bebb1938fbed4728c6a1ff8901fc
@@ -73,7 +73,7 @@ jobs:
uses: docker/build-push-action@2eb1c1961a95fc15694676618e422e8ba1d63825
with:
context: .
build-args: BASE_IMAGE=alpine:3
build-args: BASE_IMAGE=gcr.io/distroless/static-debian12
platforms: linux/amd64,linux/arm64
push: ${{ github.event_name != 'pull_request' && startsWith(github.ref, 'refs/tags/v') }}
tags: ${{ steps.meta.outputs.tags }}
@@ -84,7 +84,7 @@ jobs:
uses: docker/build-push-action@2eb1c1961a95fc15694676618e422e8ba1d63825
with:
context: .
build-args: BASE_IMAGE=alpine:3
build-args: BASE_IMAGE=gcr.io/distroless/static-debian12
platforms: linux/amd64,linux/arm64
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest
+31 -6
View File
@@ -243,6 +243,10 @@ metadata:
# If specified, then this prometheus server is used,
# instead of the prometheus server specified as the CLI argument `--prometheus-server`.
metric-config.external.processed-events-per-second.prometheus/prometheus-server: http://prometheus.my-namespace.svc
# This annotation is optional.
# If specified, this will use one of the additional prometheus servers configured via the
# --additional-prometheus-server <name>=<url>,<name>=<url>,... CLI argument.
metric-config.external.processed-events-per-second.prometheus/prometheus-server-alias: external-prometheus
# metric-config.<metricType>.<metricName>.<collectorType>/<configKey>
metric-config.external.processed-events-per-second.prometheus/query: |
scalar(sum(rate(event-service_events_count{application="event-service",processed="true"}[1m])))
@@ -751,12 +755,12 @@ spec:
- type: External
external:
metric:
name: my-nakadi-consumer
selector:
matchLabels:
type: nakadi
subscription-id: "708095f6-cece-4d02-840e-ee488d710b29"
metric-type: "consumer-lag-seconds|unconsumed-events"
name: my-nakadi-consumer
selector:
matchLabels:
type: nakadi
subscription-id: "708095f6-cece-4d02-840e-ee488d710b29"
metric-type: "consumer-lag-seconds|unconsumed-events"
target:
# value is compatible with the consumer-lag-seconds metric type.
# It describes the amount of consumer lag in seconds before scaling
@@ -805,6 +809,27 @@ with more consumers.
For this case you should also account for the average time for processing an
event when defining the target.
Alternative to defining `subscription-id` you can also filter based on
`owning_application`, `event-types` and `consumer-group`:
```yaml
metrics:
- type: External
external:
metric:
name: my-nakadi-consumer
selector:
matchLabels:
type: nakadi
owning-application: "example-app"
# comma separated list of event types
event-types: "example-event-type,example-event-type2"
consumer-group: "abcd1234"
metric-type: "consumer-lag-seconds|unconsumed-events"
```
This is useful in dynamic environments where the subscription ID might not be
known before deployment time (e.g. because it's created by the same deployment).
## HTTP Collector
+5 -1
View File
@@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.16.5
controller-gen.kubebuilder.io/version: v0.17.3
name: clusterscalingschedules.zalando.org
spec:
group: zalando.org
@@ -11,6 +11,10 @@ spec:
kind: ClusterScalingSchedule
listKind: ClusterScalingScheduleList
plural: clusterscalingschedules
shortNames:
- css
- clustersched
- clusterschedule
singular: clusterscalingschedule
scope: Cluster
versions:
+70 -55
View File
@@ -39,170 +39,179 @@ spec:
args:
{{- if .Values.addDirectoryHeader }}
- --add_dir_header={{ .Values.addDirectoryHeader }}
{{- end}}
{{- end }}
{{- if .Values.log.alsoToStderr }}
- --alsologtostderr={{ .Values.log.alsoToStderr }}
{{- end}}
{{- end }}
{{- if .Values.authentication.kubeConfig }}
- --authentication-kubeconfig={{ .Values.authentication.kubeConfig }}
{{- end}}
{{- end }}
{{- if .Values.authentication.skipLookup }}
- --authentication-skip-lookup={{ .Values.authentication.skipLookup }}
{{- end}}
{{- end }}
{{- if .Values.authentication.tokenWebhookCacheTtl }}
- --authentication-token-webhook-cache-ttl={{ .Values.authentication.tokenWebhookCacheTtl }}
{{- end}}
{{- end }}
{{- if .Values.authentication.tolerateLookupFailure }}
- --authentication-tolerate-lookup-failure={{ .Values.authentication.tolerateLookupFailure }}
{{- end}}
{{- end }}
{{- if .Values.authorization.alwaysAllowPaths }}
- --authorization-always-allow-paths={{ .Values.authorization.alwaysAllowPaths }}
{{- end}}
{{- end }}
{{- if .Values.authorization.kubeConfig }}
- --authorization-kubeconfig={{ .Values.authorization.kubeConfig }}
{{- end}}
{{- end }}
{{- if .Values.authorization.webhookCache.authorizedTtl }}
- --authorization-webhook-cache-authorized-ttl={{ .Values.authorization.webhookCache.authorizedTtl }}
{{- end}}
{{- end }}
{{- if .Values.authorization.webhookCache.unauthorizedTtl }}
- --authorization-webhook-cache-unauthorized-ttl={{ .Values.authorization.webhookCache.unauthorizedTtl }}
{{- end}}
{{- end }}
{{- if .Values.aws.externalMetrics }}
- --aws-external-metrics={{ .Values.aws.externalMetrics }}
{{- end}}
{{- end }}
{{- if .Values.aws.region }}
- --aws-region={{ .Values.aws.region }}
{{- end}}
{{- end }}
{{- if .Values.tls.certificateDirectory }}
- --cert-dir={{ .Values.tls.certificateDirectory }}
{{- end}}
{{- end }}
{{- if .Values.tls.clientCaFile }}
- --client-ca-file={{ .Values.tls.clientCaFile }}
{{- end}}
{{- end }}
{{- if .Values.contentionProfiling }}
- --contention-profiling={{ .Values.contentionProfiling }}
{{- end}}
{{- end }}
{{- if .Values.credentialsDirectory }}
- --credentials-dir={{ .Values.credentialsDirectory }}
{{- end}}
{{- end }}
{{- if .Values.disregardIncompatibleHPAs }}
- --disregard-incompatible-hpas={{ .Values.disregardIncompatibleHPAs }}
{{- end}}
{{- end }}
{{- if .Values.enableCustomMetricsApi }}
- --enable-custom-metrics-api={{ .Values.enableCustomMetricsApi }}
{{- end}}
{{- end }}
{{- if .Values.enableExternalMetricsApi }}
- --enable-external-metrics-api={{ .Values.enableExternalMetricsApi }}
{{- end}}
{{- end }}
{{- if .Values.http2MaxStreamsPerConnection }}
- --http2-max-streams-per-connection={{ .Values.http2MaxStreamsPerConnection }}
{{- end}}
{{- end }}
{{- if .Values.influxDB.address }}
- --influxdb-address={{ .Values.influxDB.address }}
{{- end}}
{{- end }}
{{- if .Values.influxDB.organization }}
- --influxdb-org={{ .Values.influxDB.organization }}
{{- end}}
{{- end }}
{{- if .Values.influxDB.token }}
- --influxdb-token={{ .Values.influxDB.token }}
{{- end}}
{{- end }}
{{- if .Values.listerKubeConfig }}
- --lister-kubeconfig={{ .Values.listerKubeConfig }}
{{- end}}
{{- end }}
{{- if .Values.log.flushFrequency }}
- --log-flush-frequency={{ .Values.log.flushFrequency }}
{{- end}}
{{- end }}
{{- if .Values.log.backtraceAtTraceLocation }}
- --log_backtrace_at={{ .Values.log.backtraceAtTraceLocation }}
{{- end}}
{{- end }}
{{- if .Values.log.directory }}
- --log_dir={{ .Values.log.directory }}
{{- end}}
{{- end }}
{{- if .Values.log.file }}
- --log_file={{ .Values.log.file }}
{{- end}}
{{- end }}
{{- if .Values.log.fileMaxSize }}
- --log_file_max_size={{ .Values.log.fileMaxSize }}
{{- end}}
{{- end }}
{{- if .Values.log.toStderr }}
- --logtostderr={{ .Values.log.toStderr }}
{{- end}}
{{- end }}
{{- if .Values.prometheus.metricsAddress }}
- --metrics-address={{ .Values.prometheus.metricsAddress }}
{{- end}}
{{- end }}
{{- if .Values.profiling }}
- --profiling={{ .Values.profiling }}
{{- end}}
{{- end }}
{{- if .Values.prometheus.server }}
- --prometheus-server={{ .Values.prometheus.server }}
{{- end}}
{{- end }}
{{- if .Values.prometheus.serverTokenFile }}
- --prometheus-server-token-file={{ .Values.prometheus.serverTokenFile }}
{{- end }}
{{- range $name, $url := .Values.prometheus.additionalServers }}
- --additional-prometheus-server={{ $name }}={{ $url }}
{{- end }}
{{- range $name, $path := .Values.prometheus.additionalServerTokenFiles }}
- --additional-prometheus-server-token-file={{ $name }}={{ $path }}
{{- end }}
{{- if .Values.requestHeader.allowedNames }}
- --requestheader-allowed-names={{ .Values.requestHeader.allowedNames }}
{{- end}}
{{- end }}
{{- if .Values.requestHeader.clientCaFile }}
- --requestheader-client-ca-file={{ .Values.requestHeader.clientCaFile }}
{{- end}}
{{- end }}
{{- if .Values.requestHeader.extraHeadersPrefix }}
- --requestheader-extra-headers-prefix={{ .Values.requestHeader.extraHeadersPrefix }}
{{- end}}
{{- end }}
{{- if .Values.requestHeader.groupHeaders }}
- --requestheader-group-headers={{ .Values.requestHeader.groupHeaders }}
{{- end}}
{{- end }}
{{- if .Values.requestHeader.usernameHeaders }}
- --requestheader-username-headers={{ .Values.requestHeader.usernameHeaders }}
{{- end}}
{{- end }}
- --secure-port={{ .Values.service.internalPort }}
{{- if .Values.log.skipHeaders }}
- --skip_headers={{ .Values.log.skipHeaders }}
{{- end}}
{{- end }}
{{- if .Values.log.skipLogHeaders }}
- --skip_log_headers={{ .Values.log.skipLogHeaders }}
{{- end}}
{{- end }}
{{- if .Values.skipperBackendsAnnotation }}
- --skipper-backends-annotation={{ .Values.skipperBackendsAnnotation }}
{{- end}}
{{- end }}
{{- if .Values.skipperIngressMetrics }}
- --skipper-ingress-metrics={{ .Values.skipperIngressMetrics }}
{{- end}}
{{- end }}
{{- if .Values.skipperRouteGroupMetrics }}
- --skipper-routegroup-metrics={{ .Values.skipperRouteGroupMetrics }}
{{- end}}
{{- end }}
{{- if .Values.log.stderrThreshold }}
- --stderrthreshold={{ .Values.log.stderrThreshold }}
{{- end}}
{{- end }}
{{- if .Values.tls.certFile }}
- --tls-cert-file={{ .Values.tls.certFile }}
{{- end}}
{{- end }}
{{- if .Values.tls.cipherSuites }}
- --tls-cipher-suites={{ .Values.tls.cipherSuites }}
{{- end}}
{{- end }}
{{- if .Values.tls.minVersion }}
- --tls-min-version={{ .Values.tls.minVersion }}
{{- end}}
{{- end }}
{{- if .Values.tls.privateKeyFile }}
- --tls-private-key-file={{ .Values.tls.privateKeyFile }}
{{- end}}
{{- end }}
{{- if .Values.tls.sniCertKey }}
- --tls-sni-cert-key={{ .Values.tls.sniCertKey }}
{{- end}}
{{- end }}
{{- if .Values.token }}
- --token={{ .Values.token }}
{{- end}}
{{- end }}
{{- if .Values.log.level }}
- --v={{ .Values.log.level }}
{{- end}}
{{- end }}
{{- if .Values.vmodule }}
- --vmodule={{ .Values.vmodule }}
{{- end}}
{{- end }}
{{- if .Values.zmon.kariosdbEndpoint }}
- --zmon-kariosdb-endpoint={{ .Values.zmon.kariosdbEndpoint }}
{{- end}}
{{- end }}
{{- if .Values.zmon.tokenName }}
- --zmon-token-name={{ .Values.zmon.tokenName }}
{{- end}}
{{- end }}
{{- if .Values.scalingSchedule.enabled }}
- --scaling-schedule
{{- end}}
{{- end }}
resources:
limits:
cpu: {{ .Values.resources.limits.cpu }}
@@ -210,3 +219,9 @@ spec:
requests:
cpu: {{ .Values.resources.requests.cpu }}
memory: {{ .Values.resources.requests.memory }}
{{- if .Values.volumeMounts }}
volumeMounts: {{- toYaml .Values.volumeMounts | nindent 12 }}
{{- end }}
{{- if .Values.volumes }}
volumes: {{- toYaml .Values.volumes | nindent 8 }}
{{- end }}
+8 -1
View File
@@ -3,7 +3,7 @@ namespace: kube-system
replicas: 1
registry:
image: registry.opensource.zalan.do/teapot/kube-metrics-adapter
image: ghcr.io/zalando-incubator/kube-metrics-adapter
imageTag: v0.2.3
imagePullPolicy: IfNotPresent
@@ -63,6 +63,9 @@ log:
prometheus:
server: http://prometheus.kube-system.svc.cluster.local
serverTokenFile:
additionalServers: {}
additionalServerTokenFiles: {}
metricsAddress:
requestHeader:
@@ -109,3 +112,7 @@ priorityClassName: ""
podAnnotations: {}
serviceAccountAnnotations: {}
volumes: []
volumeMounts: []
+4 -1
View File
@@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.16.5
controller-gen.kubebuilder.io/version: v0.17.3
name: scalingschedules.zalando.org
spec:
group: zalando.org
@@ -13,6 +13,9 @@ spec:
kind: ScalingSchedule
listKind: ScalingScheduleList
plural: scalingschedules
shortNames:
- sched
- schedule
singular: scalingschedule
scope: Namespaced
versions:
+76 -70
View File
@@ -1,37 +1,38 @@
module github.com/zalando-incubator/kube-metrics-adapter
require (
github.com/argoproj/argo-rollouts v1.8.0
github.com/aws/aws-sdk-go-v2 v1.36.0
github.com/aws/aws-sdk-go-v2/config v1.29.4
github.com/aws/aws-sdk-go-v2/service/sqs v1.37.12
github.com/argoproj/argo-rollouts v1.8.2
github.com/aws/aws-sdk-go-v2 v1.36.3
github.com/aws/aws-sdk-go-v2/config v1.29.14
github.com/aws/aws-sdk-go-v2/service/sqs v1.38.5
github.com/influxdata/influxdb-client-go v1.4.0
github.com/prometheus/client_golang v1.20.5
github.com/prometheus/common v0.62.0
github.com/prometheus/client_golang v1.22.0
github.com/prometheus/common v0.63.0
github.com/sirupsen/logrus v1.9.3
github.com/spf13/cobra v1.8.1
github.com/spf13/cobra v1.9.1
github.com/spyzhov/ajson v0.9.6
github.com/stretchr/testify v1.10.0
github.com/szuecs/routegroup-client v0.28.2
github.com/zalando-incubator/cluster-lifecycle-manager v0.0.0-20240619093047-7853f3386b71
golang.org/x/net v0.34.0
golang.org/x/oauth2 v0.25.0
golang.org/x/sync v0.10.0
k8s.io/api v0.31.5
k8s.io/apimachinery v0.31.5
k8s.io/apiserver v0.31.5
k8s.io/client-go v0.31.5
k8s.io/code-generator v0.31.5
k8s.io/component-base v0.31.5
golang.org/x/net v0.40.0
golang.org/x/oauth2 v0.30.0
golang.org/x/sync v0.14.0
k8s.io/api v0.32.4
k8s.io/apimachinery v0.32.4
k8s.io/apiserver v0.32.4
k8s.io/client-go v0.32.4
k8s.io/code-generator v0.32.4
k8s.io/component-base v0.32.4
k8s.io/klog v1.0.0
k8s.io/kube-openapi v0.0.0-20240620174524-b456828f718b
k8s.io/metrics v0.31.5
k8s.io/utils v0.0.0-20240711033017-18e509b52bc8
sigs.k8s.io/controller-tools v0.16.5
sigs.k8s.io/custom-metrics-apiserver v1.30.1-0.20241105195130-84dc8cfe2555
k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff
k8s.io/metrics v0.32.4
k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738
sigs.k8s.io/controller-tools v0.17.3
sigs.k8s.io/custom-metrics-apiserver v1.32.0
)
require (
cel.dev/expr v0.19.1 // indirect
github.com/BurntSushi/toml v1.4.0 // indirect
github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53 // indirect
github.com/CloudyKit/jet/v6 v6.2.0 // indirect
@@ -42,16 +43,16 @@ require (
github.com/antlr4-go/antlr/v4 v4.13.0 // indirect
github.com/apapsch/go-jsonmerge/v2 v2.0.0 // indirect
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect
github.com/aws/aws-sdk-go-v2/credentials v1.17.57 // indirect
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.27 // indirect
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.31 // indirect
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.31 // indirect
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.2 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.2 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.12 // indirect
github.com/aws/aws-sdk-go-v2/service/sso v1.24.14 // indirect
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.13 // indirect
github.com/aws/aws-sdk-go-v2/service/sts v1.33.12 // indirect
github.com/aws/aws-sdk-go-v2/credentials v1.17.67 // indirect
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 // indirect
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34 // indirect
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.34 // indirect
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15 // indirect
github.com/aws/aws-sdk-go-v2/service/sso v1.25.3 // indirect
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.1 // indirect
github.com/aws/aws-sdk-go-v2/service/sts v1.33.19 // indirect
github.com/aws/smithy-go v1.22.2 // indirect
github.com/aymerick/douceur v0.2.0 // indirect
github.com/beorn7/perks v1.0.1 // indirect
@@ -88,23 +89,23 @@ require (
github.com/goccy/go-json v0.10.3 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang-jwt/jwt v3.2.2+incompatible // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/golang/protobuf v1.5.4 // indirect
github.com/golang/snappy v0.0.4 // indirect
github.com/gomarkdown/markdown v0.0.0-20241205020045-f7e15b2f3e62 // indirect
github.com/google/cel-go v0.20.1 // indirect
github.com/google/gnostic-models v0.6.9-0.20230804172637-c7be7c783f49 // indirect
github.com/google/go-cmp v0.6.0 // indirect
github.com/google/btree v1.1.3 // indirect
github.com/google/cel-go v0.22.0 // indirect
github.com/google/gnostic-models v0.6.9 // indirect
github.com/google/go-cmp v0.7.0 // indirect
github.com/google/gofuzz v1.2.0 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/gorilla/css v1.0.1 // indirect
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 // indirect
github.com/imdario/mergo v0.3.16 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.24.0 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/influxdata/line-protocol v0.0.0-20210922203350-b1ad95c89adf // indirect
github.com/iris-contrib/schema v0.0.6 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/jpillora/backoff v1.0.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/kataras/blocks v0.0.8 // indirect
github.com/kataras/golog v0.1.12 // indirect
@@ -112,7 +113,7 @@ require (
github.com/kataras/pio v0.0.13 // indirect
github.com/kataras/sitemap v0.0.6 // indirect
github.com/kataras/tunnel v0.0.4 // indirect
github.com/klauspost/compress v1.17.9 // indirect
github.com/klauspost/compress v1.18.0 // indirect
github.com/klauspost/cpuid/v2 v2.2.8 // indirect
github.com/kylelemons/godebug v1.1.0 // indirect
github.com/labstack/echo/v4 v4.12.0 // indirect
@@ -126,6 +127,7 @@ require (
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f // indirect
github.com/pelletier/go-toml/v2 v2.2.2 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
@@ -133,7 +135,7 @@ require (
github.com/prometheus/procfs v0.15.1 // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect
github.com/schollz/closestmatch v2.1.0+incompatible // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/spf13/pflag v1.0.6 // indirect
github.com/stoewer/go-strcase v1.3.0 // indirect
github.com/tdewolff/minify/v2 v2.20.34 // indirect
github.com/tdewolff/parse/v2 v2.7.15 // indirect
@@ -145,47 +147,51 @@ require (
github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect
github.com/x448/float16 v0.8.4 // indirect
github.com/yosssi/ace v0.0.5 // indirect
go.etcd.io/etcd/api/v3 v3.5.14 // indirect
go.etcd.io/etcd/client/pkg/v3 v3.5.14 // indirect
go.etcd.io/etcd/client/v3 v3.5.14 // indirect
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0 // indirect
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 // indirect
go.opentelemetry.io/otel v1.28.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 // indirect
go.opentelemetry.io/otel/metric v1.28.0 // indirect
go.opentelemetry.io/otel/sdk v1.28.0 // indirect
go.opentelemetry.io/otel/trace v1.28.0 // indirect
go.opentelemetry.io/proto/otlp v1.3.1 // indirect
go.etcd.io/etcd/api/v3 v3.5.21 // indirect
go.etcd.io/etcd/client/pkg/v3 v3.5.21 // indirect
go.etcd.io/etcd/client/v3 v3.5.21 // indirect
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.58.0 // indirect
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.58.0 // indirect
go.opentelemetry.io/otel v1.33.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.33.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.33.0 // indirect
go.opentelemetry.io/otel/metric v1.33.0 // indirect
go.opentelemetry.io/otel/sdk v1.33.0 // indirect
go.opentelemetry.io/otel/trace v1.33.0 // indirect
go.opentelemetry.io/proto/otlp v1.4.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.26.0 // indirect
go.uber.org/zap v1.27.0 // indirect
golang.org/x/arch v0.8.0 // indirect
golang.org/x/crypto v0.32.0 // indirect
golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8 // indirect
golang.org/x/mod v0.21.0 // indirect
golang.org/x/sys v0.29.0 // indirect
golang.org/x/term v0.28.0 // indirect
golang.org/x/text v0.21.0 // indirect
golang.org/x/time v0.5.0 // indirect
golang.org/x/tools v0.26.0 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect
golang.org/x/crypto v0.38.0 // indirect
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect
golang.org/x/mod v0.24.0 // indirect
golang.org/x/sys v0.33.0 // indirect
golang.org/x/term v0.32.0 // indirect
golang.org/x/text v0.25.0 // indirect
golang.org/x/time v0.9.0 // indirect
golang.org/x/tools v0.32.0 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20241209162323-e6fa225c2576 // indirect
google.golang.org/grpc v1.68.1 // indirect
google.golang.org/protobuf v1.36.1 // indirect
google.golang.org/protobuf v1.36.5 // indirect
gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
k8s.io/apiextensions-apiserver v0.31.2 // indirect
k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70 // indirect
k8s.io/apiextensions-apiserver v0.32.4 // indirect
k8s.io/gengo/v2 v2.0.0-20250207200755-1244d31929d7 // indirect
k8s.io/klog/v2 v2.130.1 // indirect
k8s.io/kms v0.31.5 // indirect
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.30.3 // indirect
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
k8s.io/kms v0.32.4 // indirect
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.31.2 // indirect
sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect
sigs.k8s.io/randfill v1.0.0 // indirect
sigs.k8s.io/structured-merge-diff/v4 v4.6.0 // indirect
sigs.k8s.io/yaml v1.4.0 // indirect
)
go 1.23
go 1.24.0
toolchain go1.24.1
+166 -159
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+2 -3
View File
@@ -20,7 +20,7 @@ type ScalingScheduler interface {
// ScalingSchedule describes a namespaced time based metric to be used
// in autoscaling operations.
// +k8s:deepcopy-gen=true
// +kubebuilder:resource:categories=all
// +kubebuilder:resource:categories=all,shortName=sched;schedule
// +kubebuilder:printcolumn:name="Active",type=boolean,JSONPath=`.status.active`,description="Whether one or more schedules are currently active."
// +kubebuilder:subresource:status
type ScalingSchedule struct {
@@ -51,10 +51,9 @@ func (s *ScalingSchedule) ResourceSpec() ScalingScheduleSpec {
// ClusterScalingSchedule describes a cluster scoped time based metric
// to be used in autoscaling operations.
// +k8s:deepcopy-gen=true
// +kubebuilder:resource:categories=all
// +kubebuilder:resource:scope=Cluster,shortName=css;clustersched;clusterschedule
// +kubebuilder:printcolumn:name="Active",type=boolean,JSONPath=`.status.active`,description="Whether one or more schedules are currently active."
// +kubebuilder:subresource:status
// +kubebuilder:resource:scope=Cluster
type ClusterScalingSchedule struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
+2 -2
View File
@@ -19,8 +19,8 @@ limitations under the License.
package versioned
import (
"fmt"
"net/http"
fmt "fmt"
http "net/http"
zalandov1 "github.com/zalando-incubator/kube-metrics-adapter/pkg/client/clientset/versioned/typed/zalando.org/v1"
discovery "k8s.io/client-go/discovery"
@@ -19,9 +19,9 @@ limitations under the License.
package v1
import (
"context"
context "context"
v1 "github.com/zalando-incubator/kube-metrics-adapter/pkg/apis/zalando.org/v1"
zalandoorgv1 "github.com/zalando-incubator/kube-metrics-adapter/pkg/apis/zalando.org/v1"
scheme "github.com/zalando-incubator/kube-metrics-adapter/pkg/client/clientset/versioned/scheme"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
types "k8s.io/apimachinery/pkg/types"
@@ -37,33 +37,34 @@ type ClusterScalingSchedulesGetter interface {
// ClusterScalingScheduleInterface has methods to work with ClusterScalingSchedule resources.
type ClusterScalingScheduleInterface interface {
Create(ctx context.Context, clusterScalingSchedule *v1.ClusterScalingSchedule, opts metav1.CreateOptions) (*v1.ClusterScalingSchedule, error)
Update(ctx context.Context, clusterScalingSchedule *v1.ClusterScalingSchedule, opts metav1.UpdateOptions) (*v1.ClusterScalingSchedule, error)
Create(ctx context.Context, clusterScalingSchedule *zalandoorgv1.ClusterScalingSchedule, opts metav1.CreateOptions) (*zalandoorgv1.ClusterScalingSchedule, error)
Update(ctx context.Context, clusterScalingSchedule *zalandoorgv1.ClusterScalingSchedule, opts metav1.UpdateOptions) (*zalandoorgv1.ClusterScalingSchedule, error)
// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
UpdateStatus(ctx context.Context, clusterScalingSchedule *v1.ClusterScalingSchedule, opts metav1.UpdateOptions) (*v1.ClusterScalingSchedule, error)
UpdateStatus(ctx context.Context, clusterScalingSchedule *zalandoorgv1.ClusterScalingSchedule, opts metav1.UpdateOptions) (*zalandoorgv1.ClusterScalingSchedule, error)
Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error
DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error
Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.ClusterScalingSchedule, error)
List(ctx context.Context, opts metav1.ListOptions) (*v1.ClusterScalingScheduleList, error)
Get(ctx context.Context, name string, opts metav1.GetOptions) (*zalandoorgv1.ClusterScalingSchedule, error)
List(ctx context.Context, opts metav1.ListOptions) (*zalandoorgv1.ClusterScalingScheduleList, error)
Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error)
Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.ClusterScalingSchedule, err error)
Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *zalandoorgv1.ClusterScalingSchedule, err error)
ClusterScalingScheduleExpansion
}
// clusterScalingSchedules implements ClusterScalingScheduleInterface
type clusterScalingSchedules struct {
*gentype.ClientWithList[*v1.ClusterScalingSchedule, *v1.ClusterScalingScheduleList]
*gentype.ClientWithList[*zalandoorgv1.ClusterScalingSchedule, *zalandoorgv1.ClusterScalingScheduleList]
}
// newClusterScalingSchedules returns a ClusterScalingSchedules
func newClusterScalingSchedules(c *ZalandoV1Client) *clusterScalingSchedules {
return &clusterScalingSchedules{
gentype.NewClientWithList[*v1.ClusterScalingSchedule, *v1.ClusterScalingScheduleList](
gentype.NewClientWithList[*zalandoorgv1.ClusterScalingSchedule, *zalandoorgv1.ClusterScalingScheduleList](
"clusterscalingschedules",
c.RESTClient(),
scheme.ParameterCodec,
"",
func() *v1.ClusterScalingSchedule { return &v1.ClusterScalingSchedule{} },
func() *v1.ClusterScalingScheduleList { return &v1.ClusterScalingScheduleList{} }),
func() *zalandoorgv1.ClusterScalingSchedule { return &zalandoorgv1.ClusterScalingSchedule{} },
func() *zalandoorgv1.ClusterScalingScheduleList { return &zalandoorgv1.ClusterScalingScheduleList{} },
),
}
}
@@ -19,120 +19,34 @@ limitations under the License.
package fake
import (
"context"
v1 "github.com/zalando-incubator/kube-metrics-adapter/pkg/apis/zalando.org/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
labels "k8s.io/apimachinery/pkg/labels"
types "k8s.io/apimachinery/pkg/types"
watch "k8s.io/apimachinery/pkg/watch"
testing "k8s.io/client-go/testing"
zalandoorgv1 "github.com/zalando-incubator/kube-metrics-adapter/pkg/client/clientset/versioned/typed/zalando.org/v1"
gentype "k8s.io/client-go/gentype"
)
// FakeClusterScalingSchedules implements ClusterScalingScheduleInterface
type FakeClusterScalingSchedules struct {
// fakeClusterScalingSchedules implements ClusterScalingScheduleInterface
type fakeClusterScalingSchedules struct {
*gentype.FakeClientWithList[*v1.ClusterScalingSchedule, *v1.ClusterScalingScheduleList]
Fake *FakeZalandoV1
}
var clusterscalingschedulesResource = v1.SchemeGroupVersion.WithResource("clusterscalingschedules")
var clusterscalingschedulesKind = v1.SchemeGroupVersion.WithKind("ClusterScalingSchedule")
// Get takes name of the clusterScalingSchedule, and returns the corresponding clusterScalingSchedule object, and an error if there is any.
func (c *FakeClusterScalingSchedules) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.ClusterScalingSchedule, err error) {
emptyResult := &v1.ClusterScalingSchedule{}
obj, err := c.Fake.
Invokes(testing.NewRootGetActionWithOptions(clusterscalingschedulesResource, name, options), emptyResult)
if obj == nil {
return emptyResult, err
func newFakeClusterScalingSchedules(fake *FakeZalandoV1) zalandoorgv1.ClusterScalingScheduleInterface {
return &fakeClusterScalingSchedules{
gentype.NewFakeClientWithList[*v1.ClusterScalingSchedule, *v1.ClusterScalingScheduleList](
fake.Fake,
"",
v1.SchemeGroupVersion.WithResource("clusterscalingschedules"),
v1.SchemeGroupVersion.WithKind("ClusterScalingSchedule"),
func() *v1.ClusterScalingSchedule { return &v1.ClusterScalingSchedule{} },
func() *v1.ClusterScalingScheduleList { return &v1.ClusterScalingScheduleList{} },
func(dst, src *v1.ClusterScalingScheduleList) { dst.ListMeta = src.ListMeta },
func(list *v1.ClusterScalingScheduleList) []*v1.ClusterScalingSchedule {
return gentype.ToPointerSlice(list.Items)
},
func(list *v1.ClusterScalingScheduleList, items []*v1.ClusterScalingSchedule) {
list.Items = gentype.FromPointerSlice(items)
},
),
fake,
}
return obj.(*v1.ClusterScalingSchedule), err
}
// List takes label and field selectors, and returns the list of ClusterScalingSchedules that match those selectors.
func (c *FakeClusterScalingSchedules) List(ctx context.Context, opts metav1.ListOptions) (result *v1.ClusterScalingScheduleList, err error) {
emptyResult := &v1.ClusterScalingScheduleList{}
obj, err := c.Fake.
Invokes(testing.NewRootListActionWithOptions(clusterscalingschedulesResource, clusterscalingschedulesKind, opts), emptyResult)
if obj == nil {
return emptyResult, err
}
label, _, _ := testing.ExtractFromListOptions(opts)
if label == nil {
label = labels.Everything()
}
list := &v1.ClusterScalingScheduleList{ListMeta: obj.(*v1.ClusterScalingScheduleList).ListMeta}
for _, item := range obj.(*v1.ClusterScalingScheduleList).Items {
if label.Matches(labels.Set(item.Labels)) {
list.Items = append(list.Items, item)
}
}
return list, err
}
// Watch returns a watch.Interface that watches the requested clusterScalingSchedules.
func (c *FakeClusterScalingSchedules) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) {
return c.Fake.
InvokesWatch(testing.NewRootWatchActionWithOptions(clusterscalingschedulesResource, opts))
}
// Create takes the representation of a clusterScalingSchedule and creates it. Returns the server's representation of the clusterScalingSchedule, and an error, if there is any.
func (c *FakeClusterScalingSchedules) Create(ctx context.Context, clusterScalingSchedule *v1.ClusterScalingSchedule, opts metav1.CreateOptions) (result *v1.ClusterScalingSchedule, err error) {
emptyResult := &v1.ClusterScalingSchedule{}
obj, err := c.Fake.
Invokes(testing.NewRootCreateActionWithOptions(clusterscalingschedulesResource, clusterScalingSchedule, opts), emptyResult)
if obj == nil {
return emptyResult, err
}
return obj.(*v1.ClusterScalingSchedule), err
}
// Update takes the representation of a clusterScalingSchedule and updates it. Returns the server's representation of the clusterScalingSchedule, and an error, if there is any.
func (c *FakeClusterScalingSchedules) Update(ctx context.Context, clusterScalingSchedule *v1.ClusterScalingSchedule, opts metav1.UpdateOptions) (result *v1.ClusterScalingSchedule, err error) {
emptyResult := &v1.ClusterScalingSchedule{}
obj, err := c.Fake.
Invokes(testing.NewRootUpdateActionWithOptions(clusterscalingschedulesResource, clusterScalingSchedule, opts), emptyResult)
if obj == nil {
return emptyResult, err
}
return obj.(*v1.ClusterScalingSchedule), err
}
// UpdateStatus was generated because the type contains a Status member.
// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
func (c *FakeClusterScalingSchedules) UpdateStatus(ctx context.Context, clusterScalingSchedule *v1.ClusterScalingSchedule, opts metav1.UpdateOptions) (result *v1.ClusterScalingSchedule, err error) {
emptyResult := &v1.ClusterScalingSchedule{}
obj, err := c.Fake.
Invokes(testing.NewRootUpdateSubresourceActionWithOptions(clusterscalingschedulesResource, "status", clusterScalingSchedule, opts), emptyResult)
if obj == nil {
return emptyResult, err
}
return obj.(*v1.ClusterScalingSchedule), err
}
// Delete takes name of the clusterScalingSchedule and deletes it. Returns an error if one occurs.
func (c *FakeClusterScalingSchedules) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error {
_, err := c.Fake.
Invokes(testing.NewRootDeleteActionWithOptions(clusterscalingschedulesResource, name, opts), &v1.ClusterScalingSchedule{})
return err
}
// DeleteCollection deletes a collection of objects.
func (c *FakeClusterScalingSchedules) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error {
action := testing.NewRootDeleteCollectionActionWithOptions(clusterscalingschedulesResource, opts, listOpts)
_, err := c.Fake.Invokes(action, &v1.ClusterScalingScheduleList{})
return err
}
// Patch applies the patch and returns the patched clusterScalingSchedule.
func (c *FakeClusterScalingSchedules) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.ClusterScalingSchedule, err error) {
emptyResult := &v1.ClusterScalingSchedule{}
obj, err := c.Fake.
Invokes(testing.NewRootPatchSubresourceActionWithOptions(clusterscalingschedulesResource, name, pt, data, opts, subresources...), emptyResult)
if obj == nil {
return emptyResult, err
}
return obj.(*v1.ClusterScalingSchedule), err
}
@@ -19,129 +19,32 @@ limitations under the License.
package fake
import (
"context"
v1 "github.com/zalando-incubator/kube-metrics-adapter/pkg/apis/zalando.org/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
labels "k8s.io/apimachinery/pkg/labels"
types "k8s.io/apimachinery/pkg/types"
watch "k8s.io/apimachinery/pkg/watch"
testing "k8s.io/client-go/testing"
zalandoorgv1 "github.com/zalando-incubator/kube-metrics-adapter/pkg/client/clientset/versioned/typed/zalando.org/v1"
gentype "k8s.io/client-go/gentype"
)
// FakeScalingSchedules implements ScalingScheduleInterface
type FakeScalingSchedules struct {
// fakeScalingSchedules implements ScalingScheduleInterface
type fakeScalingSchedules struct {
*gentype.FakeClientWithList[*v1.ScalingSchedule, *v1.ScalingScheduleList]
Fake *FakeZalandoV1
ns string
}
var scalingschedulesResource = v1.SchemeGroupVersion.WithResource("scalingschedules")
var scalingschedulesKind = v1.SchemeGroupVersion.WithKind("ScalingSchedule")
// Get takes name of the scalingSchedule, and returns the corresponding scalingSchedule object, and an error if there is any.
func (c *FakeScalingSchedules) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.ScalingSchedule, err error) {
emptyResult := &v1.ScalingSchedule{}
obj, err := c.Fake.
Invokes(testing.NewGetActionWithOptions(scalingschedulesResource, c.ns, name, options), emptyResult)
if obj == nil {
return emptyResult, err
func newFakeScalingSchedules(fake *FakeZalandoV1, namespace string) zalandoorgv1.ScalingScheduleInterface {
return &fakeScalingSchedules{
gentype.NewFakeClientWithList[*v1.ScalingSchedule, *v1.ScalingScheduleList](
fake.Fake,
namespace,
v1.SchemeGroupVersion.WithResource("scalingschedules"),
v1.SchemeGroupVersion.WithKind("ScalingSchedule"),
func() *v1.ScalingSchedule { return &v1.ScalingSchedule{} },
func() *v1.ScalingScheduleList { return &v1.ScalingScheduleList{} },
func(dst, src *v1.ScalingScheduleList) { dst.ListMeta = src.ListMeta },
func(list *v1.ScalingScheduleList) []*v1.ScalingSchedule { return gentype.ToPointerSlice(list.Items) },
func(list *v1.ScalingScheduleList, items []*v1.ScalingSchedule) {
list.Items = gentype.FromPointerSlice(items)
},
),
fake,
}
return obj.(*v1.ScalingSchedule), err
}
// List takes label and field selectors, and returns the list of ScalingSchedules that match those selectors.
func (c *FakeScalingSchedules) List(ctx context.Context, opts metav1.ListOptions) (result *v1.ScalingScheduleList, err error) {
emptyResult := &v1.ScalingScheduleList{}
obj, err := c.Fake.
Invokes(testing.NewListActionWithOptions(scalingschedulesResource, scalingschedulesKind, c.ns, opts), emptyResult)
if obj == nil {
return emptyResult, err
}
label, _, _ := testing.ExtractFromListOptions(opts)
if label == nil {
label = labels.Everything()
}
list := &v1.ScalingScheduleList{ListMeta: obj.(*v1.ScalingScheduleList).ListMeta}
for _, item := range obj.(*v1.ScalingScheduleList).Items {
if label.Matches(labels.Set(item.Labels)) {
list.Items = append(list.Items, item)
}
}
return list, err
}
// Watch returns a watch.Interface that watches the requested scalingSchedules.
func (c *FakeScalingSchedules) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) {
return c.Fake.
InvokesWatch(testing.NewWatchActionWithOptions(scalingschedulesResource, c.ns, opts))
}
// Create takes the representation of a scalingSchedule and creates it. Returns the server's representation of the scalingSchedule, and an error, if there is any.
func (c *FakeScalingSchedules) Create(ctx context.Context, scalingSchedule *v1.ScalingSchedule, opts metav1.CreateOptions) (result *v1.ScalingSchedule, err error) {
emptyResult := &v1.ScalingSchedule{}
obj, err := c.Fake.
Invokes(testing.NewCreateActionWithOptions(scalingschedulesResource, c.ns, scalingSchedule, opts), emptyResult)
if obj == nil {
return emptyResult, err
}
return obj.(*v1.ScalingSchedule), err
}
// Update takes the representation of a scalingSchedule and updates it. Returns the server's representation of the scalingSchedule, and an error, if there is any.
func (c *FakeScalingSchedules) Update(ctx context.Context, scalingSchedule *v1.ScalingSchedule, opts metav1.UpdateOptions) (result *v1.ScalingSchedule, err error) {
emptyResult := &v1.ScalingSchedule{}
obj, err := c.Fake.
Invokes(testing.NewUpdateActionWithOptions(scalingschedulesResource, c.ns, scalingSchedule, opts), emptyResult)
if obj == nil {
return emptyResult, err
}
return obj.(*v1.ScalingSchedule), err
}
// UpdateStatus was generated because the type contains a Status member.
// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
func (c *FakeScalingSchedules) UpdateStatus(ctx context.Context, scalingSchedule *v1.ScalingSchedule, opts metav1.UpdateOptions) (result *v1.ScalingSchedule, err error) {
emptyResult := &v1.ScalingSchedule{}
obj, err := c.Fake.
Invokes(testing.NewUpdateSubresourceActionWithOptions(scalingschedulesResource, "status", c.ns, scalingSchedule, opts), emptyResult)
if obj == nil {
return emptyResult, err
}
return obj.(*v1.ScalingSchedule), err
}
// Delete takes name of the scalingSchedule and deletes it. Returns an error if one occurs.
func (c *FakeScalingSchedules) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error {
_, err := c.Fake.
Invokes(testing.NewDeleteActionWithOptions(scalingschedulesResource, c.ns, name, opts), &v1.ScalingSchedule{})
return err
}
// DeleteCollection deletes a collection of objects.
func (c *FakeScalingSchedules) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error {
action := testing.NewDeleteCollectionActionWithOptions(scalingschedulesResource, c.ns, opts, listOpts)
_, err := c.Fake.Invokes(action, &v1.ScalingScheduleList{})
return err
}
// Patch applies the patch and returns the patched scalingSchedule.
func (c *FakeScalingSchedules) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.ScalingSchedule, err error) {
emptyResult := &v1.ScalingSchedule{}
obj, err := c.Fake.
Invokes(testing.NewPatchSubresourceActionWithOptions(scalingschedulesResource, c.ns, name, pt, data, opts, subresources...), emptyResult)
if obj == nil {
return emptyResult, err
}
return obj.(*v1.ScalingSchedule), err
}
@@ -29,11 +29,11 @@ type FakeZalandoV1 struct {
}
func (c *FakeZalandoV1) ClusterScalingSchedules() v1.ClusterScalingScheduleInterface {
return &FakeClusterScalingSchedules{c}
return newFakeClusterScalingSchedules(c)
}
func (c *FakeZalandoV1) ScalingSchedules(namespace string) v1.ScalingScheduleInterface {
return &FakeScalingSchedules{c, namespace}
return newFakeScalingSchedules(c, namespace)
}
// RESTClient returns a RESTClient that is used to communicate
@@ -19,9 +19,9 @@ limitations under the License.
package v1
import (
"context"
context "context"
v1 "github.com/zalando-incubator/kube-metrics-adapter/pkg/apis/zalando.org/v1"
zalandoorgv1 "github.com/zalando-incubator/kube-metrics-adapter/pkg/apis/zalando.org/v1"
scheme "github.com/zalando-incubator/kube-metrics-adapter/pkg/client/clientset/versioned/scheme"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
types "k8s.io/apimachinery/pkg/types"
@@ -37,33 +37,34 @@ type ScalingSchedulesGetter interface {
// ScalingScheduleInterface has methods to work with ScalingSchedule resources.
type ScalingScheduleInterface interface {
Create(ctx context.Context, scalingSchedule *v1.ScalingSchedule, opts metav1.CreateOptions) (*v1.ScalingSchedule, error)
Update(ctx context.Context, scalingSchedule *v1.ScalingSchedule, opts metav1.UpdateOptions) (*v1.ScalingSchedule, error)
Create(ctx context.Context, scalingSchedule *zalandoorgv1.ScalingSchedule, opts metav1.CreateOptions) (*zalandoorgv1.ScalingSchedule, error)
Update(ctx context.Context, scalingSchedule *zalandoorgv1.ScalingSchedule, opts metav1.UpdateOptions) (*zalandoorgv1.ScalingSchedule, error)
// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
UpdateStatus(ctx context.Context, scalingSchedule *v1.ScalingSchedule, opts metav1.UpdateOptions) (*v1.ScalingSchedule, error)
UpdateStatus(ctx context.Context, scalingSchedule *zalandoorgv1.ScalingSchedule, opts metav1.UpdateOptions) (*zalandoorgv1.ScalingSchedule, error)
Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error
DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error
Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.ScalingSchedule, error)
List(ctx context.Context, opts metav1.ListOptions) (*v1.ScalingScheduleList, error)
Get(ctx context.Context, name string, opts metav1.GetOptions) (*zalandoorgv1.ScalingSchedule, error)
List(ctx context.Context, opts metav1.ListOptions) (*zalandoorgv1.ScalingScheduleList, error)
Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error)
Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.ScalingSchedule, err error)
Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *zalandoorgv1.ScalingSchedule, err error)
ScalingScheduleExpansion
}
// scalingSchedules implements ScalingScheduleInterface
type scalingSchedules struct {
*gentype.ClientWithList[*v1.ScalingSchedule, *v1.ScalingScheduleList]
*gentype.ClientWithList[*zalandoorgv1.ScalingSchedule, *zalandoorgv1.ScalingScheduleList]
}
// newScalingSchedules returns a ScalingSchedules
func newScalingSchedules(c *ZalandoV1Client, namespace string) *scalingSchedules {
return &scalingSchedules{
gentype.NewClientWithList[*v1.ScalingSchedule, *v1.ScalingScheduleList](
gentype.NewClientWithList[*zalandoorgv1.ScalingSchedule, *zalandoorgv1.ScalingScheduleList](
"scalingschedules",
c.RESTClient(),
scheme.ParameterCodec,
namespace,
func() *v1.ScalingSchedule { return &v1.ScalingSchedule{} },
func() *v1.ScalingScheduleList { return &v1.ScalingScheduleList{} }),
func() *zalandoorgv1.ScalingSchedule { return &zalandoorgv1.ScalingSchedule{} },
func() *zalandoorgv1.ScalingScheduleList { return &zalandoorgv1.ScalingScheduleList{} },
),
}
}
@@ -19,10 +19,10 @@ limitations under the License.
package v1
import (
"net/http"
http "net/http"
v1 "github.com/zalando-incubator/kube-metrics-adapter/pkg/apis/zalando.org/v1"
"github.com/zalando-incubator/kube-metrics-adapter/pkg/client/clientset/versioned/scheme"
zalandoorgv1 "github.com/zalando-incubator/kube-metrics-adapter/pkg/apis/zalando.org/v1"
scheme "github.com/zalando-incubator/kube-metrics-adapter/pkg/client/clientset/versioned/scheme"
rest "k8s.io/client-go/rest"
)
@@ -90,10 +90,10 @@ func New(c rest.Interface) *ZalandoV1Client {
}
func setConfigDefaults(config *rest.Config) error {
gv := v1.SchemeGroupVersion
gv := zalandoorgv1.SchemeGroupVersion
config.GroupVersion = &gv
config.APIPath = "/apis"
config.NegotiatedSerializer = scheme.Codecs.WithoutConversion()
config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion()
if config.UserAgent == "" {
config.UserAgent = rest.DefaultKubernetesUserAgent()
@@ -19,7 +19,7 @@ limitations under the License.
package externalversions
import (
"fmt"
fmt "fmt"
v1 "github.com/zalando-incubator/kube-metrics-adapter/pkg/apis/zalando.org/v1"
schema "k8s.io/apimachinery/pkg/runtime/schema"
@@ -19,13 +19,13 @@ limitations under the License.
package v1
import (
"context"
context "context"
time "time"
zalandoorgv1 "github.com/zalando-incubator/kube-metrics-adapter/pkg/apis/zalando.org/v1"
apiszalandoorgv1 "github.com/zalando-incubator/kube-metrics-adapter/pkg/apis/zalando.org/v1"
versioned "github.com/zalando-incubator/kube-metrics-adapter/pkg/client/clientset/versioned"
internalinterfaces "github.com/zalando-incubator/kube-metrics-adapter/pkg/client/informers/externalversions/internalinterfaces"
v1 "github.com/zalando-incubator/kube-metrics-adapter/pkg/client/listers/zalando.org/v1"
zalandoorgv1 "github.com/zalando-incubator/kube-metrics-adapter/pkg/client/listers/zalando.org/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
runtime "k8s.io/apimachinery/pkg/runtime"
watch "k8s.io/apimachinery/pkg/watch"
@@ -36,7 +36,7 @@ import (
// ClusterScalingSchedules.
type ClusterScalingScheduleInformer interface {
Informer() cache.SharedIndexInformer
Lister() v1.ClusterScalingScheduleLister
Lister() zalandoorgv1.ClusterScalingScheduleLister
}
type clusterScalingScheduleInformer struct {
@@ -70,7 +70,7 @@ func NewFilteredClusterScalingScheduleInformer(client versioned.Interface, resyn
return client.ZalandoV1().ClusterScalingSchedules().Watch(context.TODO(), options)
},
},
&zalandoorgv1.ClusterScalingSchedule{},
&apiszalandoorgv1.ClusterScalingSchedule{},
resyncPeriod,
indexers,
)
@@ -81,9 +81,9 @@ func (f *clusterScalingScheduleInformer) defaultInformer(client versioned.Interf
}
func (f *clusterScalingScheduleInformer) Informer() cache.SharedIndexInformer {
return f.factory.InformerFor(&zalandoorgv1.ClusterScalingSchedule{}, f.defaultInformer)
return f.factory.InformerFor(&apiszalandoorgv1.ClusterScalingSchedule{}, f.defaultInformer)
}
func (f *clusterScalingScheduleInformer) Lister() v1.ClusterScalingScheduleLister {
return v1.NewClusterScalingScheduleLister(f.Informer().GetIndexer())
func (f *clusterScalingScheduleInformer) Lister() zalandoorgv1.ClusterScalingScheduleLister {
return zalandoorgv1.NewClusterScalingScheduleLister(f.Informer().GetIndexer())
}
@@ -19,13 +19,13 @@ limitations under the License.
package v1
import (
"context"
context "context"
time "time"
zalandoorgv1 "github.com/zalando-incubator/kube-metrics-adapter/pkg/apis/zalando.org/v1"
apiszalandoorgv1 "github.com/zalando-incubator/kube-metrics-adapter/pkg/apis/zalando.org/v1"
versioned "github.com/zalando-incubator/kube-metrics-adapter/pkg/client/clientset/versioned"
internalinterfaces "github.com/zalando-incubator/kube-metrics-adapter/pkg/client/informers/externalversions/internalinterfaces"
v1 "github.com/zalando-incubator/kube-metrics-adapter/pkg/client/listers/zalando.org/v1"
zalandoorgv1 "github.com/zalando-incubator/kube-metrics-adapter/pkg/client/listers/zalando.org/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
runtime "k8s.io/apimachinery/pkg/runtime"
watch "k8s.io/apimachinery/pkg/watch"
@@ -36,7 +36,7 @@ import (
// ScalingSchedules.
type ScalingScheduleInformer interface {
Informer() cache.SharedIndexInformer
Lister() v1.ScalingScheduleLister
Lister() zalandoorgv1.ScalingScheduleLister
}
type scalingScheduleInformer struct {
@@ -71,7 +71,7 @@ func NewFilteredScalingScheduleInformer(client versioned.Interface, namespace st
return client.ZalandoV1().ScalingSchedules(namespace).Watch(context.TODO(), options)
},
},
&zalandoorgv1.ScalingSchedule{},
&apiszalandoorgv1.ScalingSchedule{},
resyncPeriod,
indexers,
)
@@ -82,9 +82,9 @@ func (f *scalingScheduleInformer) defaultInformer(client versioned.Interface, re
}
func (f *scalingScheduleInformer) Informer() cache.SharedIndexInformer {
return f.factory.InformerFor(&zalandoorgv1.ScalingSchedule{}, f.defaultInformer)
return f.factory.InformerFor(&apiszalandoorgv1.ScalingSchedule{}, f.defaultInformer)
}
func (f *scalingScheduleInformer) Lister() v1.ScalingScheduleLister {
return v1.NewScalingScheduleLister(f.Informer().GetIndexer())
func (f *scalingScheduleInformer) Lister() zalandoorgv1.ScalingScheduleLister {
return zalandoorgv1.NewScalingScheduleLister(f.Informer().GetIndexer())
}
@@ -19,10 +19,10 @@ limitations under the License.
package v1
import (
v1 "github.com/zalando-incubator/kube-metrics-adapter/pkg/apis/zalando.org/v1"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/client-go/listers"
"k8s.io/client-go/tools/cache"
zalandoorgv1 "github.com/zalando-incubator/kube-metrics-adapter/pkg/apis/zalando.org/v1"
labels "k8s.io/apimachinery/pkg/labels"
listers "k8s.io/client-go/listers"
cache "k8s.io/client-go/tools/cache"
)
// ClusterScalingScheduleLister helps list ClusterScalingSchedules.
@@ -30,19 +30,19 @@ import (
type ClusterScalingScheduleLister interface {
// List lists all ClusterScalingSchedules in the indexer.
// Objects returned here must be treated as read-only.
List(selector labels.Selector) (ret []*v1.ClusterScalingSchedule, err error)
List(selector labels.Selector) (ret []*zalandoorgv1.ClusterScalingSchedule, err error)
// Get retrieves the ClusterScalingSchedule from the index for a given name.
// Objects returned here must be treated as read-only.
Get(name string) (*v1.ClusterScalingSchedule, error)
Get(name string) (*zalandoorgv1.ClusterScalingSchedule, error)
ClusterScalingScheduleListerExpansion
}
// clusterScalingScheduleLister implements the ClusterScalingScheduleLister interface.
type clusterScalingScheduleLister struct {
listers.ResourceIndexer[*v1.ClusterScalingSchedule]
listers.ResourceIndexer[*zalandoorgv1.ClusterScalingSchedule]
}
// NewClusterScalingScheduleLister returns a new ClusterScalingScheduleLister.
func NewClusterScalingScheduleLister(indexer cache.Indexer) ClusterScalingScheduleLister {
return &clusterScalingScheduleLister{listers.New[*v1.ClusterScalingSchedule](indexer, v1.Resource("clusterscalingschedule"))}
return &clusterScalingScheduleLister{listers.New[*zalandoorgv1.ClusterScalingSchedule](indexer, zalandoorgv1.Resource("clusterscalingschedule"))}
}
@@ -19,10 +19,10 @@ limitations under the License.
package v1
import (
v1 "github.com/zalando-incubator/kube-metrics-adapter/pkg/apis/zalando.org/v1"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/client-go/listers"
"k8s.io/client-go/tools/cache"
zalandoorgv1 "github.com/zalando-incubator/kube-metrics-adapter/pkg/apis/zalando.org/v1"
labels "k8s.io/apimachinery/pkg/labels"
listers "k8s.io/client-go/listers"
cache "k8s.io/client-go/tools/cache"
)
// ScalingScheduleLister helps list ScalingSchedules.
@@ -30,7 +30,7 @@ import (
type ScalingScheduleLister interface {
// List lists all ScalingSchedules in the indexer.
// Objects returned here must be treated as read-only.
List(selector labels.Selector) (ret []*v1.ScalingSchedule, err error)
List(selector labels.Selector) (ret []*zalandoorgv1.ScalingSchedule, err error)
// ScalingSchedules returns an object that can list and get ScalingSchedules.
ScalingSchedules(namespace string) ScalingScheduleNamespaceLister
ScalingScheduleListerExpansion
@@ -38,17 +38,17 @@ type ScalingScheduleLister interface {
// scalingScheduleLister implements the ScalingScheduleLister interface.
type scalingScheduleLister struct {
listers.ResourceIndexer[*v1.ScalingSchedule]
listers.ResourceIndexer[*zalandoorgv1.ScalingSchedule]
}
// NewScalingScheduleLister returns a new ScalingScheduleLister.
func NewScalingScheduleLister(indexer cache.Indexer) ScalingScheduleLister {
return &scalingScheduleLister{listers.New[*v1.ScalingSchedule](indexer, v1.Resource("scalingschedule"))}
return &scalingScheduleLister{listers.New[*zalandoorgv1.ScalingSchedule](indexer, zalandoorgv1.Resource("scalingschedule"))}
}
// ScalingSchedules returns an object that can list and get ScalingSchedules.
func (s *scalingScheduleLister) ScalingSchedules(namespace string) ScalingScheduleNamespaceLister {
return scalingScheduleNamespaceLister{listers.NewNamespaced[*v1.ScalingSchedule](s.ResourceIndexer, namespace)}
return scalingScheduleNamespaceLister{listers.NewNamespaced[*zalandoorgv1.ScalingSchedule](s.ResourceIndexer, namespace)}
}
// ScalingScheduleNamespaceLister helps list and get ScalingSchedules.
@@ -56,15 +56,15 @@ func (s *scalingScheduleLister) ScalingSchedules(namespace string) ScalingSchedu
type ScalingScheduleNamespaceLister interface {
// List lists all ScalingSchedules in the indexer for a given namespace.
// Objects returned here must be treated as read-only.
List(selector labels.Selector) (ret []*v1.ScalingSchedule, err error)
List(selector labels.Selector) (ret []*zalandoorgv1.ScalingSchedule, err error)
// Get retrieves the ScalingSchedule from the indexer for a given namespace and name.
// Objects returned here must be treated as read-only.
Get(name string) (*v1.ScalingSchedule, error)
Get(name string) (*zalandoorgv1.ScalingSchedule, error)
ScalingScheduleNamespaceListerExpansion
}
// scalingScheduleNamespaceLister implements the ScalingScheduleNamespaceLister
// interface.
type scalingScheduleNamespaceLister struct {
listers.ResourceIndexer[*v1.ScalingSchedule]
listers.ResourceIndexer[*zalandoorgv1.ScalingSchedule]
}
+1 -1
View File
@@ -279,7 +279,7 @@ func TestExternalRPSPrometheusCollectorInteraction(t *testing.T) {
}
factory := NewCollectorFactory()
promPlugin, err := NewPrometheusCollectorPlugin(nil, "http://prometheus")
promPlugin, err := NewPrometheusCollectorPlugin(nil, "http://prometheus", "", map[string]string{}, map[string]string{})
require.NoError(t, err)
factory.RegisterExternalCollector([]string{PrometheusMetricType, PrometheusMetricNameLegacy}, promPlugin)
hostnamePlugin, err := NewExternalRPSCollectorPlugin(promPlugin, "a_metric")
+47 -22
View File
@@ -3,6 +3,7 @@ package collector
import (
"context"
"fmt"
"strings"
"time"
"github.com/zalando-incubator/kube-metrics-adapter/pkg/nakadi"
@@ -17,6 +18,9 @@ const (
// subscriptions.
NakadiMetricType = "nakadi"
nakadiSubscriptionIDKey = "subscription-id"
nakadiOwningApplicationKey = "owning-application"
nakadiConsumerGroupKey = "consumer-group"
nakadiEventTypesKey = "event-types"
nakadiMetricTypeKey = "metric-type"
nakadiMetricTypeConsumerLagSeconds = "consumer-lag-seconds"
nakadiMetricTypeUnconsumedEvents = "unconsumed-events"
@@ -43,26 +47,21 @@ func (c *NakadiCollectorPlugin) NewCollector(ctx context.Context, hpa *autoscali
// NakadiCollector defines a collector that is able to collect metrics from
// Nakadi.
type NakadiCollector struct {
nakadi nakadi.Nakadi
interval time.Duration
subscriptionID string
nakadiMetricType string
metric autoscalingv2.MetricIdentifier
metricType autoscalingv2.MetricSourceType
namespace string
nakadi nakadi.Nakadi
interval time.Duration
subscriptionFilter *nakadi.SubscriptionFilter
nakadiMetricType string
metric autoscalingv2.MetricIdentifier
metricType autoscalingv2.MetricSourceType
namespace string
}
// NewNakadiCollector initializes a new NakadiCollector.
func NewNakadiCollector(_ context.Context, nakadi nakadi.Nakadi, hpa *autoscalingv2.HorizontalPodAutoscaler, config *MetricConfig, interval time.Duration) (*NakadiCollector, error) {
func NewNakadiCollector(_ context.Context, nakadiClient nakadi.Nakadi, hpa *autoscalingv2.HorizontalPodAutoscaler, config *MetricConfig, interval time.Duration) (*NakadiCollector, error) {
if config.Metric.Selector == nil {
return nil, fmt.Errorf("selector for nakadi is not specified")
}
subscriptionID, ok := config.Config[nakadiSubscriptionIDKey]
if !ok {
return nil, fmt.Errorf("subscription-id not specified on metric")
}
metricType, ok := config.Config[nakadiMetricTypeKey]
if !ok {
return nil, fmt.Errorf("metric-type not specified on metric")
@@ -72,14 +71,40 @@ func NewNakadiCollector(_ context.Context, nakadi nakadi.Nakadi, hpa *autoscalin
return nil, fmt.Errorf("metric-type must be either '%s' or '%s', was '%s'", nakadiMetricTypeConsumerLagSeconds, nakadiMetricTypeUnconsumedEvents, metricType)
}
// Either subscription-id or filtering via owning-application,
// event-types, and consumer-group is supported. If all are defined
// then only subscription-id is used and the rest of the fields are
// ignored.
subscriptionFilter := &nakadi.SubscriptionFilter{}
if subscriptionID, ok := config.Config[nakadiSubscriptionIDKey]; ok {
subscriptionFilter.SubscriptionID = subscriptionID
}
if owningApplication, ok := config.Config[nakadiOwningApplicationKey]; ok {
subscriptionFilter.OwningApplication = owningApplication
}
if nakadiEventTypes, ok := config.Config[nakadiEventTypesKey]; ok {
eventTypes := strings.Split(nakadiEventTypes, ",")
subscriptionFilter.EventTypes = eventTypes
}
if consumerGroup, ok := config.Config[nakadiConsumerGroupKey]; ok {
subscriptionFilter.ConsumerGroup = consumerGroup
}
if subscriptionFilter.SubscriptionID == "" && (subscriptionFilter.OwningApplication == "" || len(subscriptionFilter.EventTypes) == 0 || subscriptionFilter.ConsumerGroup == "") {
return nil, fmt.Errorf("either subscription-id or all of [owning-application, event-types, consumer-group] must be specified on the metric")
}
return &NakadiCollector{
nakadi: nakadi,
interval: interval,
subscriptionID: subscriptionID,
nakadiMetricType: metricType,
metric: config.Metric,
metricType: config.Type,
namespace: hpa.Namespace,
nakadi: nakadiClient,
interval: interval,
subscriptionFilter: subscriptionFilter,
nakadiMetricType: metricType,
metric: config.Metric,
metricType: config.Type,
namespace: hpa.Namespace,
}, nil
}
@@ -89,12 +114,12 @@ func (c *NakadiCollector) GetMetrics(ctx context.Context) ([]CollectedMetric, er
var err error
switch c.nakadiMetricType {
case nakadiMetricTypeConsumerLagSeconds:
value, err = c.nakadi.ConsumerLagSeconds(ctx, c.subscriptionID)
value, err = c.nakadi.ConsumerLagSeconds(ctx, c.subscriptionFilter)
if err != nil {
return nil, err
}
case nakadiMetricTypeUnconsumedEvents:
value, err = c.nakadi.UnconsumedEvents(ctx, c.subscriptionID)
value, err = c.nakadi.UnconsumedEvents(ctx, c.subscriptionFilter)
if err != nil {
return nil, err
}
+51 -12
View File
@@ -9,6 +9,7 @@ import (
"github.com/prometheus/client_golang/api"
promv1 "github.com/prometheus/client_golang/api/prometheus/v1"
promconfig "github.com/prometheus/common/config"
"github.com/prometheus/common/model"
autoscalingv2 "k8s.io/api/autoscaling/v2"
"k8s.io/apimachinery/pkg/api/resource"
@@ -19,10 +20,11 @@ import (
)
const (
PrometheusMetricType = "prometheus"
PrometheusMetricNameLegacy = "prometheus-query"
prometheusQueryNameLabelKey = "query-name"
prometheusServerAnnotationKey = "prometheus-server"
PrometheusMetricType = "prometheus"
PrometheusMetricNameLegacy = "prometheus-query"
prometheusQueryNameLabelKey = "query-name"
prometheusServerAnnotationKey = "prometheus-server"
prometheusServerAliasAnnotationKey = "prometheus-server-alias"
)
type NoResultError struct {
@@ -34,14 +36,26 @@ func (r NoResultError) Error() string {
}
type PrometheusCollectorPlugin struct {
promAPI promv1.API
client kubernetes.Interface
promAPI promv1.API
client kubernetes.Interface
additionalPromAPIs map[string]promv1.API
}
func NewPrometheusCollectorPlugin(client kubernetes.Interface, prometheusServer string) (*PrometheusCollectorPlugin, error) {
func getPrometheusAPI(prometheusServer, tokenFile string) (promv1.API, error) {
roundTripper := http.DefaultTransport
// If a token file is specified, use it for authentication.
if tokenFile != "" {
roundTripper = promconfig.NewAuthorizationCredentialsRoundTripper(
"Bearer",
promconfig.NewFileSecret(tokenFile),
roundTripper,
)
}
cfg := api.Config{
Address: prometheusServer,
RoundTripper: http.DefaultTransport,
RoundTripper: roundTripper,
}
promClient, err := api.NewClient(cfg)
@@ -49,14 +63,33 @@ func NewPrometheusCollectorPlugin(client kubernetes.Interface, prometheusServer
return nil, err
}
return promv1.NewAPI(promClient), nil
}
func NewPrometheusCollectorPlugin(client kubernetes.Interface, prometheusServer, tokenFile string, additionalServers, additionalServerTokenFiles map[string]string) (*PrometheusCollectorPlugin, error) {
promAPI, err := getPrometheusAPI(prometheusServer, tokenFile)
if err != nil {
return nil, err
}
additionalPromAPIs := make(map[string]promv1.API)
for alias, server := range additionalServers {
additionalPromAPIs[alias], err = getPrometheusAPI(server, additionalServerTokenFiles[alias])
if err != nil {
return nil, err
}
}
return &PrometheusCollectorPlugin{
client: client,
promAPI: promv1.NewAPI(promClient),
client: client,
promAPI: promAPI,
additionalPromAPIs: additionalPromAPIs,
}, nil
}
func (p *PrometheusCollectorPlugin) NewCollector(_ context.Context, hpa *autoscalingv2.HorizontalPodAutoscaler, config *MetricConfig, interval time.Duration) (Collector, error) {
return NewPrometheusCollector(p.client, p.promAPI, hpa, config, interval)
return NewPrometheusCollector(p.client, p.promAPI, p.additionalPromAPIs, hpa, config, interval)
}
type PrometheusCollector struct {
@@ -71,7 +104,7 @@ type PrometheusCollector struct {
hpa *autoscalingv2.HorizontalPodAutoscaler
}
func NewPrometheusCollector(client kubernetes.Interface, promAPI promv1.API, hpa *autoscalingv2.HorizontalPodAutoscaler, config *MetricConfig, interval time.Duration) (*PrometheusCollector, error) {
func NewPrometheusCollector(client kubernetes.Interface, promAPI promv1.API, additionalPromAPIs map[string]promv1.API, hpa *autoscalingv2.HorizontalPodAutoscaler, config *MetricConfig, interval time.Duration) (*PrometheusCollector, error) {
c := &PrometheusCollector{
client: client,
promAPI: promAPI,
@@ -127,6 +160,12 @@ func NewPrometheusCollector(client kubernetes.Interface, promAPI promv1.API, hpa
return nil, err
}
c.promAPI = promv1.NewAPI(promClient)
} else if promServerAlias, ok := config.Config[prometheusServerAliasAnnotationKey]; ok {
if promAPI, ok := additionalPromAPIs[promServerAlias]; ok {
c.promAPI = promAPI
} else {
return nil, fmt.Errorf("no additional prometheus server found for alias %s", promServerAlias)
}
}
}
+1 -1
View File
@@ -173,7 +173,7 @@ func TestNewPrometheusCollector(t *testing.T) {
} {
t.Run(tc.msg, func(t *testing.T) {
collectorFactory := NewCollectorFactory()
promPlugin, err := NewPrometheusCollectorPlugin(nil, "http://prometheus")
promPlugin, err := NewPrometheusCollectorPlugin(nil, "http://prometheus", "", map[string]string{}, map[string]string{})
require.NoError(t, err)
collectorFactory.RegisterExternalCollector([]string{PrometheusMetricType, PrometheusMetricNameLegacy}, promPlugin)
configs, err := ParseHPAMetrics(tc.hpa)
+143 -36
View File
@@ -12,8 +12,8 @@ import (
// Nakadi defines an interface for talking to the Nakadi API.
type Nakadi interface {
ConsumerLagSeconds(ctx context.Context, subscriptionID string) (int64, error)
UnconsumedEvents(ctx context.Context, subscriptionID string) (int64, error)
ConsumerLagSeconds(ctx context.Context, filter *SubscriptionFilter) (int64, error)
UnconsumedEvents(ctx context.Context, filter *SubscriptionFilter) (int64, error)
}
// Client defines client for interfacing with the Nakadi API.
@@ -30,8 +30,8 @@ func NewNakadiClient(nakadiEndpoint string, client *http.Client) *Client {
}
}
func (c *Client) ConsumerLagSeconds(ctx context.Context, subscriptionID string) (int64, error) {
stats, err := c.stats(ctx, subscriptionID)
func (c *Client) ConsumerLagSeconds(ctx context.Context, filter *SubscriptionFilter) (int64, error) {
stats, err := c.stats(ctx, filter)
if err != nil {
return 0, err
}
@@ -46,8 +46,8 @@ func (c *Client) ConsumerLagSeconds(ctx context.Context, subscriptionID string)
return maxConsumerLagSeconds, nil
}
func (c *Client) UnconsumedEvents(ctx context.Context, subscriptionID string) (int64, error) {
stats, err := c.stats(ctx, subscriptionID)
func (c *Client) UnconsumedEvents(ctx context.Context, filter *SubscriptionFilter) (int64, error) {
stats, err := c.stats(ctx, filter)
if err != nil {
return 0, err
}
@@ -62,6 +62,90 @@ func (c *Client) UnconsumedEvents(ctx context.Context, subscriptionID string) (i
return unconsumedEvents, nil
}
type SubscriptionFilter struct {
SubscriptionID string
OwningApplication string
EventTypes []string
ConsumerGroup string
}
func (c *Client) subscriptions(ctx context.Context, filter *SubscriptionFilter, href string) ([]string, error) {
endpoint, err := url.Parse(c.nakadiEndpoint)
if err != nil {
return nil, err
}
if href != "" {
endpoint, err = url.Parse(c.nakadiEndpoint + href)
if err != nil {
return nil, fmt.Errorf("[nakadi subscriptions] failed to parse URL with href: %w", err)
}
} else {
endpoint.Path = "/subscriptions"
q := endpoint.Query()
if filter.OwningApplication != "" {
q.Set("owning_application", filter.OwningApplication)
}
for _, eventType := range filter.EventTypes {
q.Add("event_type", eventType)
}
if filter.ConsumerGroup != "" {
q.Set("consumer_group", filter.ConsumerGroup)
}
endpoint.RawQuery = q.Encode()
}
req, err := http.NewRequestWithContext(ctx, http.MethodGet, endpoint.String(), nil)
if err != nil {
return nil, fmt.Errorf("[nakadi subscriptions] failed to create request: %w", err)
}
resp, err := c.http.Do(req)
if err != nil {
return nil, fmt.Errorf("[nakadi subscriptions] failed to make request: %w", err)
}
defer resp.Body.Close()
d, err := io.ReadAll(resp.Body)
if err != nil {
return nil, err
}
if resp.StatusCode != http.StatusOK {
return nil, fmt.Errorf("[nakadi subscriptions] unexpected response code: %d (%s)", resp.StatusCode, string(d))
}
var subscriptionsResp struct {
Items []struct {
ID string `json:"id"`
}
Links struct {
Next struct {
Href string `json:"href"`
} `json:"next"`
} `json:"_links"`
}
err = json.Unmarshal(d, &subscriptionsResp)
if err != nil {
return nil, err
}
var subscriptions []string
for _, item := range subscriptionsResp.Items {
subscriptions = append(subscriptions, item.ID)
}
if subscriptionsResp.Links.Next.Href != "" {
nextSubscriptions, err := c.subscriptions(ctx, nil, subscriptionsResp.Links.Next.Href)
if err != nil {
return nil, fmt.Errorf("[nakadi subscriptions] failed to get next subscriptions: %w", err)
}
subscriptions = append(subscriptions, nextSubscriptions...)
}
return subscriptions, nil
}
type statsResp struct {
Items []statsEventType `json:"items"`
}
@@ -80,45 +164,68 @@ type statsPartition struct {
AssignmentType string `json:"assignment_type"`
}
// stats returns the Nakadi stats for a given subscription ID.
// stats returns the Nakadi stats for a given a subscription filter which can
// include the subscription ID or a filter combination of [owning-applicaiton,
// event-types, consumer-group]..
//
// https://nakadi.io/manual.html#/subscriptions/subscription_id/stats_get
func (c *Client) stats(ctx context.Context, subscriptionID string) ([]statsEventType, error) {
func (c *Client) stats(ctx context.Context, filter *SubscriptionFilter) ([]statsEventType, error) {
var subscriptionIDs []string
if filter.SubscriptionID == "" {
subscriptions, err := c.subscriptions(ctx, filter, "")
if err != nil {
return nil, fmt.Errorf("[nakadi stats] failed to get subscriptions: %w", err)
}
subscriptionIDs = subscriptions
} else {
subscriptionIDs = []string{filter.SubscriptionID}
}
endpoint, err := url.Parse(c.nakadiEndpoint)
if err != nil {
return nil, err
return nil, fmt.Errorf("[nakadi stats] failed to parse URL %q: %w", c.nakadiEndpoint, err)
}
endpoint.Path = fmt.Sprintf("/subscriptions/%s/stats", subscriptionID)
var stats []statsEventType
for _, subscriptionID := range subscriptionIDs {
endpoint.Path = fmt.Sprintf("/subscriptions/%s/stats", subscriptionID)
q := endpoint.Query()
q.Set("show_time_lag", "true")
endpoint.RawQuery = q.Encode()
q := endpoint.Query()
q.Set("show_time_lag", "true")
endpoint.RawQuery = q.Encode()
resp, err := c.http.Get(endpoint.String())
if err != nil {
return nil, err
}
defer resp.Body.Close()
req, err := http.NewRequestWithContext(ctx, http.MethodGet, endpoint.String(), nil)
if err != nil {
return nil, fmt.Errorf("[nakadi stats] failed to create request: %w", err)
}
d, err := io.ReadAll(resp.Body)
if err != nil {
return nil, err
resp, err := c.http.Do(req)
if err != nil {
return nil, fmt.Errorf("[nakadi stats] failed to make request: %w", err)
}
defer resp.Body.Close()
d, err := io.ReadAll(resp.Body)
if err != nil {
return nil, err
}
if resp.StatusCode != http.StatusOK {
return nil, fmt.Errorf("[nakadi stats] unexpected response code: %d (%s)", resp.StatusCode, string(d))
}
var result statsResp
err = json.Unmarshal(d, &result)
if err != nil {
return nil, err
}
if len(result.Items) == 0 {
return nil, errors.New("[nakadi stats] expected at least 1 event-type, 0 returned")
}
stats = append(stats, result.Items...)
}
if resp.StatusCode != http.StatusOK {
return nil, fmt.Errorf("[nakadi stats] unexpected response code: %d (%s)", resp.StatusCode, string(d))
}
var result statsResp
err = json.Unmarshal(d, &result)
if err != nil {
return nil, err
}
if len(result.Items) == 0 {
return nil, errors.New("expected at least 1 event-type, 0 returned")
}
return result.Items, nil
return stats, nil
}
+108 -29
View File
@@ -12,18 +12,42 @@ import (
func TestQuery(tt *testing.T) {
client := &http.Client{}
subscriptionsResponseBody := `{
"items": [
{
"id": "id_1"
},
{
"id": "id_2"
}
],
"_links": {
"next": {
"href": "/subscriptions?event_type=example-event&owning_application=example-app&offset=20&limit=20"
}
}
}`
subscriptionsResponseBodyNoNext := `{
"items": [],
"_links": {}
}`
for _, ti := range []struct {
msg string
status int
responseBody string
err error
unconsumedEvents int64
consumerLagSeconds int64
msg string
status int
subscriptionIDResponseBody string
subscriptionFilter *SubscriptionFilter
err error
unconsumedEvents int64
consumerLagSeconds int64
}{
{
msg: "test getting a single event-type",
status: http.StatusOK,
responseBody: `{
msg: "test getting a single event-type",
status: http.StatusOK,
subscriptionFilter: &SubscriptionFilter{SubscriptionID: "id"},
subscriptionIDResponseBody: `{
"items": [
{
"event_type": "example-event",
@@ -52,9 +76,10 @@ func TestQuery(tt *testing.T) {
consumerLagSeconds: 2,
},
{
msg: "test getting multiple event-types",
status: http.StatusOK,
responseBody: `{
msg: "test getting multiple event-types",
status: http.StatusOK,
subscriptionFilter: &SubscriptionFilter{SubscriptionID: "id"},
subscriptionIDResponseBody: `{
"items": [
{
"event_type": "example-event",
@@ -104,38 +129,92 @@ func TestQuery(tt *testing.T) {
consumerLagSeconds: 6,
},
{
msg: "test call with invalid response",
status: http.StatusInternalServerError,
responseBody: `{"error": 500}`,
err: errors.New("[nakadi stats] unexpected response code: 500 ({\"error\": 500})"),
msg: "test call with invalid response",
status: http.StatusInternalServerError,
subscriptionFilter: &SubscriptionFilter{SubscriptionID: "id"},
subscriptionIDResponseBody: `{"error": 500}`,
err: errors.New("[nakadi stats] unexpected response code: 500 ({\"error\": 500})"),
},
{
msg: "test getting back a single data point",
status: http.StatusOK,
responseBody: `{
msg: "test getting back no data points",
status: http.StatusOK,
subscriptionFilter: &SubscriptionFilter{SubscriptionID: "id"},
subscriptionIDResponseBody: `{
"items": []
}`,
err: errors.New("expected at least 1 event-type, 0 returned"),
err: errors.New("[nakadi stats] expected at least 1 event-type, 0 returned"),
},
{
msg: "test filtering by owning_application and event_type",
status: http.StatusOK,
subscriptionFilter: &SubscriptionFilter{OwningApplication: "example-app", EventTypes: []string{"example-event"}, ConsumerGroup: "example-group"},
subscriptionIDResponseBody: `{
"items": [
{
"event_type": "example-event",
"partitions": [
{
"partition": "0",
"state": "assigned",
"unconsumed_events": 4,
"consumer_lag_seconds": 2,
"stream_id": "example-id",
"assignment_type": "auto"
},
{
"partition": "0",
"state": "assigned",
"unconsumed_events": 5,
"consumer_lag_seconds": 1,
"stream_id": "example-id",
"assignment_type": "auto"
}
]
}
]
}`,
unconsumedEvents: 18,
consumerLagSeconds: 2,
},
} {
tt.Run(ti.msg, func(t *testing.T) {
ts := httptest.NewServer(http.HandlerFunc(
func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(ti.status)
_, err := w.Write([]byte(ti.responseBody))
mux := http.NewServeMux()
mux.HandleFunc("/subscriptions", func(w http.ResponseWriter, r *http.Request) {
offset := r.URL.Query().Get("offset")
if offset != "" {
w.WriteHeader(http.StatusOK)
_, err := w.Write([]byte(subscriptionsResponseBodyNoNext))
assert.NoError(t, err)
}),
)
return
}
owningApplication := r.URL.Query().Get("owning_application")
eventTypes := r.URL.Query()["event_type"]
consumerGroup := r.URL.Query().Get("consumer_group")
assert.Equal(t, ti.subscriptionFilter.OwningApplication, owningApplication)
assert.Equal(t, ti.subscriptionFilter.EventTypes, eventTypes)
assert.Equal(t, ti.subscriptionFilter.ConsumerGroup, consumerGroup)
w.WriteHeader(http.StatusOK)
_, err := w.Write([]byte(subscriptionsResponseBody))
assert.NoError(t, err)
})
mux.HandleFunc("/subscriptions/{id}/stats", func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(ti.status)
_, err := w.Write([]byte(ti.subscriptionIDResponseBody))
assert.NoError(t, err)
})
ts := httptest.NewServer(mux)
defer ts.Close()
nakadiClient := NewNakadiClient(ts.URL, client)
consumerLagSeconds, err := nakadiClient.ConsumerLagSeconds(context.Background(), "id")
consumerLagSeconds, err := nakadiClient.ConsumerLagSeconds(context.Background(), ti.subscriptionFilter)
assert.Equal(t, ti.err, err)
assert.Equal(t, ti.consumerLagSeconds, consumerLagSeconds)
unconsumedEvents, err := nakadiClient.UnconsumedEvents(context.Background(), "id")
unconsumedEvents, err := nakadiClient.UnconsumedEvents(context.Background(), ti.subscriptionFilter)
assert.Equal(t, ti.err, err)
assert.Equal(t, ti.unconsumedEvents, unconsumedEvents)
})
}
}
+44 -9
View File
@@ -25,6 +25,10 @@ import (
"github.com/zalando-incubator/kube-metrics-adapter/pkg/recorder"
)
const (
kubectlLastAppliedAnnotation = "kubectl.kubernetes.io/last-applied-configuration"
)
var (
// CollectionSuccesses is the total number of successful collections.
CollectionSuccesses = promauto.NewCounter(prometheus.CounterOpts{
@@ -120,7 +124,7 @@ func (p *HPAProvider) Run(ctx context.Context) {
// updateHPAs discovers all HPA resources and sets up metric collectors for new
// HPAs.
func (p *HPAProvider) updateHPAs() error {
p.logger.Info("Looking for HPAs")
p.logger.Debug("Looking for HPAs")
hpas, err := p.client.AutoscalingV2().HorizontalPodAutoscalers(metav1.NamespaceAll).List(context.TODO(), metav1.ListOptions{})
if err != nil {
@@ -144,7 +148,7 @@ func (p *HPAProvider) updateHPAs() error {
// if the hpa has changed then remove the previous
// scheduled collector.
if hpaUpdated {
p.logger.Infof("Removing previously scheduled metrics collector: %s", resourceRef)
p.logger.Infof("Removing previously scheduled metrics collector as HPA changed: %s", resourceRef)
p.collectorScheduler.Remove(resourceRef)
}
@@ -197,7 +201,12 @@ func (p *HPAProvider) updateHPAs() error {
p.collectorScheduler.Remove(ref)
}
p.logger.Infof("Found %d new/updated HPA(s)", newHPAs)
if newHPAs > 0 {
p.logger.Infof("Found %d new/updated HPA(s)", newHPAs)
} else {
p.logger.Debug("No new/updated HPAs found")
}
p.hpaCache = newHPACache
return nil
@@ -205,12 +214,38 @@ func (p *HPAProvider) updateHPAs() error {
// equalHPA returns true if two HPAs are identical (apart from their status).
func equalHPA(a, b autoscalingv2.HorizontalPodAutoscaler) bool {
// reset resource version to not compare it since this will change
// whenever the status of the object is updated. We only want to
// compare the metadata and the spec.
a.ObjectMeta.ResourceVersion = ""
b.ObjectMeta.ResourceVersion = ""
return reflect.DeepEqual(a.ObjectMeta, b.ObjectMeta) && reflect.DeepEqual(a.Spec, b.Spec)
return annotationsUpToDate(a.ObjectMeta, b.ObjectMeta, kubectlLastAppliedAnnotation) && reflect.DeepEqual(a.Spec, b.Spec)
}
// annotationsUpToDate checks whether the annotations of the existing and
// updated resource are up to date.
func annotationsUpToDate(updated, existing metav1.ObjectMeta, ignoredAnnotations ...string) bool {
if len(updated.Annotations) != len(existing.Annotations) {
return false
}
for k, v := range updated.Annotations {
isIgnored := false
for _, ignored := range ignoredAnnotations {
if k == ignored {
isIgnored = true
break
}
}
if isIgnored {
continue
}
existingValue, ok := existing.GetAnnotations()[k]
if ok && existingValue == v {
continue
}
return false
}
return true
}
// collectMetrics collects all metrics from collectors and manages a central

Some files were not shown because too many files have changed in this diff Show More