diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 5f0ba21e0..0306a78c7 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -12,9 +12,7 @@ on: - 'config/' env: DOCKER_FILE_PATH: Dockerfile - GOLANG_VERSION: 1.21 HELM_VERSION: v3.8.2 - KIND_VERSION: "v0.17.0" REGISTRY: ghcr.io jobs: @@ -31,12 +29,12 @@ jobs: - name: Set up Go uses: actions/setup-go@v5 with: - go-version: ${{ env.GOLANG_VERSION }} + go-version-file: go.mod - name: Lint - uses: golangci/golangci-lint-action@v3 + uses: golangci/golangci-lint-action@v6 with: - version: v1.54 + version: v1.64 only-new-issues: false args: --timeout 10m @@ -50,27 +48,6 @@ jobs: run: | helm lint charts/ingressmonitorcontroller - # - name: Install kind - # uses: engineerd/setup-kind@v0.5.0 - # with: - # version: ${{ env.KIND_VERSION }} - - # - name: Check cluster info - # run: | - # kubectl version --client - # kind version - # kind version | grep -q ${KIND_VERSION} - - # - name: Set up Cluster - # run: | - # kubectl cluster-info - # make install - # mkdir -p .local - # echo "${{ secrets.SECRET_KUBERNETES_RESOURCES }}" | base64 --decode > .local/test-config.yaml - - # - name: Test - # run: make test - - name: Generate Tag id: generate_tag run: | @@ -93,7 +70,7 @@ jobs: # To identify any broken changes in dockerfiles or dependencies - name: Build image - uses: docker/build-push-action@v5 + uses: docker/build-push-action@v6 with: context: . file: ${{ env.DOCKER_FILE_PATH }} @@ -107,5 +84,4 @@ jobs: ${{ env.GHCR_IMAGE_REPOSITORY }}:${{ steps.generate_tag.outputs.GIT_TAG }} labels: | org.opencontainers.image.source=${{ github.event.repository.clone_url }} - org.opencontainers.image.created=${{ steps.prep.outputs.created }} org.opencontainers.image.revision=${{ github.sha }} diff --git a/.github/workflows/pull_request_test.yaml b/.github/workflows/pull_request_test.yaml new file mode 100644 index 000000000..60d44e6ce --- /dev/null +++ b/.github/workflows/pull_request_test.yaml @@ -0,0 +1,60 @@ +name: Run Tests on PR Label + +on: + pull_request: + branches: + - 'master' + paths-ignore: + - '*.md' + - 'docs/' + - 'examples/' + - 'hack/' + - 'config/' + types: [ labeled ] + +env: + KIND_VERSION: "v0.25.0" + +jobs: + + test: + runs-on: ubuntu-latest + name: Test + if: ${{ github.event.label.name == 'ok-to-test' }} + steps: + + - name: Remove the test label + uses: actions-ecosystem/action-remove-labels@v1 + with: + labels: ok-to-test + + - name: Check out code + uses: actions/checkout@v4 + with: + ref: ${{github.event.pull_request.head.sha}} + + - name: Set up Go + uses: actions/setup-go@v5 + with: + go-version-file: go.mod + + - name: Install kind + uses: engineerd/setup-kind@v0.5.0 + with: + version: ${{ env.KIND_VERSION }} + + - name: Check cluster info + run: | + kubectl version --client + kind version + kind version | grep -q ${KIND_VERSION} + + - name: Set up Cluster + run: | + kubectl cluster-info + make install + mkdir -p .local + echo "${{ secrets.IMC_GITHUB_PIPELINE_CONFIG_ENCODED }}" | base64 --decode > .local/test-config.yaml + + - name: Test + run: make test diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index fe24761dd..e1da1d9cd 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -14,9 +14,8 @@ on: env: DOCKER_FILE_PATH: Dockerfile BUNDLE_DOCKER_FILE_PATH: bundle.Dockerfile - GOLANG_VERSION: 1.21 - OPERATOR_SDK_VERSION: "1.19.0" - KUSTOMIZE_VERSION: "4.5.7" + OPERATOR_SDK_VERSION: "1.39.2" + KUSTOMIZE_VERSION: "5.4.3" KUBERNETES_VERSION: "1.23.5" KIND_VERSION: "v0.17.0" HELM_REGISTRY_URL: "" @@ -39,12 +38,12 @@ jobs: - name: Set up Go uses: actions/setup-go@v5 with: - go-version: ${{ env.GOLANG_VERSION }} + go-version-file: go.mod - name: Lint - uses: golangci/golangci-lint-action@v3 + uses: golangci/golangci-lint-action@v6 with: - version: v1.54 + version: v1.64 only-new-issues: false args: --timeout 10m @@ -74,7 +73,7 @@ jobs: kubectl cluster-info make install mkdir -p .local - echo "${{ secrets.SECRET_KUBERNETES_RESOURCES }}" | base64 --decode > .local/test-config.yaml + echo "${{ secrets.IMC_GITHUB_PIPELINE_CONFIG_ENCODED }}" | base64 --decode > .local/test-config.yaml - name: Test run: make test @@ -108,7 +107,7 @@ jobs: echo GHCR_IMAGE_REPOSITORY=${{env.REGISTRY}}/$(echo ${{ github.repository }} | tr '[:upper:]' '[:lower:]') >> $GITHUB_ENV - name: Build and Push image to ghcr registry - uses: docker/build-push-action@v5 + uses: docker/build-push-action@v6 with: context: . file: ${{ env.DOCKER_FILE_PATH }} @@ -124,3 +123,137 @@ jobs: org.opencontainers.image.source=${{ github.event.repository.clone_url }} org.opencontainers.image.created=${{ steps.prep.outputs.created }} org.opencontainers.image.revision=${{ github.sha }} + + - name: Login to Dockerhub Registry + uses: docker/login-action@v3 + with: + username: ${{ secrets.STAKATER_DOCKERHUB_USERNAME }} + password: ${{ secrets.STAKATER_DOCKERHUB_PASSWORD }} + + - name: Generate image repository path for DockerHub registry + run: | + echo IMAGE_REPOSITORY=$(echo ${{ github.repository }} | tr '[:upper:]' '[:lower:]') >> $GITHUB_ENV + + - name: Build and push image to DockerHub registry + uses: docker/build-push-action@v6 + with: + context: . + file: ${{ env.DOCKER_FILE_PATH }} + pull: true + push: true + build-args: BUILD_PARAMETERS=${{ env.BUILD_PARAMETERS }} + cache-from: type=gha + cache-to: type=gha,mode=max + platforms: linux/amd64,linux/arm,linux/arm64 + tags: | + ${{ env.IMAGE_REPOSITORY }}:${{ steps.generate_tag.outputs.new_tag }} + labels: | + org.opencontainers.image.source=${{ github.event.repository.clone_url }} + org.opencontainers.image.created=${{ steps.prep.outputs.created }} + org.opencontainers.image.revision=${{ github.sha }} + + ############################## + ## Add steps to generate required artifacts for a release here(helm chart, operator manifest etc.) + ############################## + + # Generate tag for operator without "v" + - name: Generate Operator Tag + id: generate_operator_tag + uses: anothrNick/github-tag-action@1.61.0 + env: + GITHUB_TOKEN: ${{ secrets.PUBLISH_TOKEN }} + WITH_V: false + DEFAULT_BUMP: patch + DRY_RUN: true + + # Install operator-sdk + - name: Install operator-sdk + uses: redhat-actions/openshift-tools-installer@v1 + with: + source: "github" + operator-sdk: ${{ env.OPERATOR_SDK_VERSION }} + + # Install kustomize + - name: Install kustomize + uses: imranismail/setup-kustomize@v2 + with: + kustomize-version: ${{ env.KUSTOMIZE_VERSION }} + + - name: Generate Bundle + env: + VERSION: ${{ steps.generate_operator_tag.outputs.new_tag }} + IMG: ${{ env.IMAGE_REPOSITORY }}:${{ steps.generate_tag.outputs.new_tag }} + run: make bundle + + - name: Verify bundle + run: operator-sdk bundle validate ./bundle --select-optional name=operatorhub + + - name: Build and push Bundle Image + uses: docker/build-push-action@v6 + with: + context: . + file: ${{ env.BUNDLE_DOCKER_FILE_PATH }} + pull: true + push: true + cache-to: type=inline + tags: | + ${{ env.IMAGE_REPOSITORY }}-bundle:${{ steps.generate_tag.outputs.new_tag }} + labels: | + org.opencontainers.image.source=${{ github.event.repository.clone_url }} + org.opencontainers.image.created=${{ steps.prep.outputs.created }} + org.opencontainers.image.revision=${{ github.sha }} + + # Update chart tag to the latest semver tag + - name: Update Chart Version + env: + VERSION: ${{ steps.generate_operator_tag.outputs.new_tag }} + run: make bump-chart + + - name: Update Chart CRDs + run: make generate-crds + + # Publish helm chart + - name: Publish Helm chart + uses: stefanprodan/helm-gh-pages@master + with: + branch: master + repository: stakater-charts + target_dir: docs + token: ${{ secrets.GHCR_TOKEN }} + charts_dir: charts/ + charts_url: ${{ env.HELM_REGISTRY_URL }} + owner: stakater + linting: on + commit_username: stakater-user + commit_email: stakater@gmail.com + + # Commit back changes + - name: Commit files + run: | + git config --local user.email "stakater@gmail.com" + git config --local user.name "stakater-user" + git status + git add . + git commit -m "[skip-ci] Update artifacts" -a + + - name: Push changes + uses: ad-m/github-push-action@master + with: + github_token: ${{ secrets.PUBLISH_TOKEN }} + + # Push Latest Tag + - name: Push Latest Tag + uses: anothrNick/github-tag-action@1.61.0 + env: + GITHUB_TOKEN: ${{ secrets.PUBLISH_TOKEN }} + WITH_V: true + DEFAULT_BUMP: patch + + - name: Notify Slack + uses: 8398a7/action-slack@v3 + if: always() # Pick up events even if the job fails or is canceled. + with: + status: ${{ job.status }} + fields: repo,author,action,eventName,ref,workflow + env: + SLACK_WEBHOOK_URL: ${{ secrets.STAKATER_DELIVERY_SLACK_WEBHOOK }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c5154b60b..bf9071956 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -5,9 +5,6 @@ on: tags: - "v*" -env: - GOLANG_VERSION: 1.21 - jobs: build: name: GoReleaser build @@ -22,12 +19,12 @@ jobs: - name: Set up Go uses: actions/setup-go@v5 with: - go-version: ${{ env.GOLANG_VERSION }} + go-version-file: go.mod - name: Run GoReleaser - uses: goreleaser/goreleaser-action@master + uses: goreleaser/goreleaser-action@v6 with: - version: latest + version: '~> v2' args: release --clean env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore index c8b4f57b5..3ab3eac20 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,5 @@ vendor .idea -\.vscode/ out /IngressMonitorController /build/_output/bin/ diff --git a/.goreleaser.yml b/.goreleaser.yml index 5021245cb..2b8e4ddb2 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -1,4 +1,6 @@ # .goreleaser.yml +version: 2 + before: hooks: - go mod download @@ -15,10 +17,11 @@ builds: - amd64 - arm - arm64 + main: ./cmd archives: - name_template: "{{ .ProjectName }}_v{{ .Version }}_{{ .Os }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}" snapshot: - name_template: "{{ .Tag }}-next" + version_template: "{{ .Tag }}-next" checksum: name_template: "{{ .ProjectName }}_{{ .Version }}_checksums.txt" changelog: diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 000000000..1154f21ed --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,19 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Launch Package", + "type": "go", + "request": "launch", + "mode": "auto", + "program": "${workspaceFolder}/main.go", + "env": { + "OPERATOR_NAMESPACE": "stakater-ingress-monitor-controller" + } + } + + ] +} \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index aaee017fe..2fc5cc68b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # Build the manager binary -FROM golang:1.21 as builder +FROM golang:1.24 AS builder WORKDIR /workspace # Copy the Go Modules manifests @@ -10,13 +10,14 @@ COPY go.sum go.sum RUN go mod download # Copy the go source -COPY main.go main.go +COPY cmd/main.go cmd/main.go COPY api/ api/ COPY pkg/ pkg/ +COPY internal/ internal/ # Build ARG TARGETARCH -RUN CGO_ENABLED=0 GOOS=linux GOARCH=$TARGETARCH GO111MODULE=on go build -mod=mod -a -o manager main.go +RUN CGO_ENABLED=0 GOOS=${TARGETOS:-linux} GOARCH=${TARGETARCH} go build -a -o manager cmd/main.go # Use distroless as minimal base image to package the manager binary # Refer to https://github.com/GoogleContainerTools/distroless for more details diff --git a/Makefile b/Makefile index 0465d4a3b..18a52d0cb 100644 --- a/Makefile +++ b/Makefile @@ -47,12 +47,12 @@ ifeq ($(USE_IMAGE_DIGESTS), true) endif # Image URL to use all building/pushing image targets -IMG ?= controller:latest +IMG ?= stakater/ingressmonitorcontroller:v2.2.4 # GOLANGCI_LINT env GOLANGCI_LINT = _output/tools/golangci-lint GOLANGCI_LINT_CACHE = $(PWD)/_output/golangci-lint-cache -GOLANGCI_LINT_VERSION = v1.39.0 +GOLANGCI_LINT_VERSION = v1.64.0 # Get the currently used golang install path (in GOPATH/bin, unless GOBIN is set) ifeq (,$(shell go env GOBIN)) @@ -100,18 +100,22 @@ vet: ## Run go vet against code. go vet ./... ENVTEST_ASSETS_DIR = $(shell pwd)/testbin +ENVTEST_K8S_VERSION = 1.31.0 .PHONY: test test: generate fmt vet manifests envtest $(ENVTEST) use -p path 1.28.x! - go test ./... -count=1 -coverprofile cover.out + KUBEBUILDER_ASSETS="$(shell $(ENVTEST) use $(ENVTEST_K8S_VERSION) --bin-dir $(LOCALBIN) -p path)" go test ./... -coverprofile cover.out, + ##@ Build -build: generate fmt vet ## Build manager binary. - go build -o bin/manager main.go +.PHONY: build +build: manifests generate fmt vet ## Build manager binary. + go build -o bin/manager cmd/main.go +.PHONY: run run: manifests generate fmt vet ## Run a controller from your host. - go run ./main.go + go run ./cmd/main.go docker-build: test ## Build docker image with the manager. docker build -t ${IMG} . @@ -119,25 +123,44 @@ docker-build: test ## Build docker image with the manager. docker-push: ## Push docker image with the manager. docker push ${IMG} +# PLATFORMS defines the target platforms for the manager image be build to provide support to multiple +# architectures. (i.e. make docker-buildx IMG=myregistry/mypoperator:0.0.1). To use this option you need to: +# - able to use docker buildx . More info: https://docs.docker.com/build/buildx/ +# - have enable BuildKit, More info: https://docs.docker.com/develop/develop-images/build_enhancements/ +# - be able to push the image for your registry (i.e. if you do not inform a valid value via IMG=> than the export will fail) +# To properly provided solutions that supports more than one platform you should use this option. +PLATFORMS ?= linux/arm64,linux/amd64,linux/s390x,linux/ppc64le +.PHONY: docker-buildx +docker-buildx: ## Build and push docker image for the manager for cross-platform support + - docker buildx create --name project-v3-builder + docker buildx use project-v3-builder + - docker buildx build --push --platform=$(PLATFORMS) --tag ${IMG} -f Dockerfile . + - docker buildx rm project-v3-builder ifndef ignore-not-found ignore-not-found = false endif +.PHONY: build-installer +build-installer: manifests generate kustomize ## Generate a consolidated YAML with CRDs and deployment. + mkdir -p dist + cd config/manager && $(KUSTOMIZE) edit set image controller=${IMG} + $(KUSTOMIZE) build config/default > dist/install.yaml + ##@ Deployment install: manifests kustomize ## Install CRDs into the K8s cluster specified in ~/.kube/config. - $(KUSTOMIZE) build config/crd | kubectl apply -f - + $(KUSTOMIZE) build config/crd | $(KUBECTL) apply -f - uninstall: manifests kustomize ## Uninstall CRDs from the K8s cluster specified in ~/.kube/config. - $(KUSTOMIZE) build config/crd | kubectl delete -f - --ignore-not-found=$(ignore-not-found) + $(KUSTOMIZE) build config/crd | $(KUBECTL) delete -f - --ignore-not-found=$(ignore-not-found) deploy: manifests kustomize ## Deploy controller to the K8s cluster specified in ~/.kube/config. cd config/manager && $(KUSTOMIZE) edit set image controller=${IMG} - $(KUSTOMIZE) build config/default | kubectl apply -f - + $(KUSTOMIZE) build config/default | $(KUBECTL) apply -f - undeploy: ## Undeploy controller from the K8s cluster specified in ~/.kube/config. - $(KUSTOMIZE) build config/default | kubectl delete -f - --ignore-not-found=$(ignore-not-found) + $(KUSTOMIZE) build config/default | $(KUBECTL) delete -f - --ignore-not-found=$(ignore-not-found) ##@ Build Dependencies @@ -148,29 +171,53 @@ $(LOCALBIN): mkdir -p $(LOCALBIN) ## Tool Binaries +KUBECTL ?= kubectl KUSTOMIZE ?= $(LOCALBIN)/kustomize CONTROLLER_GEN ?= $(LOCALBIN)/controller-gen ENVTEST ?= $(LOCALBIN)/setup-envtest +GOLANGCI_LINT = $(LOCALBIN)/golangci-lint ## Tool Versions -KUSTOMIZE_VERSION ?= v3.8.7 -CONTROLLER_TOOLS_VERSION ?= v0.14.0 +KUSTOMIZE_VERSION ?= 5.4.3 +CONTROLLER_TOOLS_VERSION ?= v0.16.1 +ENVTEST_VERSION ?= release-0.19 +GOLANGCI_LINT_VERSION ?= v1.59.1 -KUSTOMIZE_INSTALL_SCRIPT ?= "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" .PHONY: kustomize kustomize: $(KUSTOMIZE) ## Download kustomize locally if necessary. $(KUSTOMIZE): $(LOCALBIN) - @[ -f $(LOCALBIN)/kustomize ] || curl -s $(KUSTOMIZE_INSTALL_SCRIPT) | bash -s -- $(subst v,,$(KUSTOMIZE_VERSION)) $(LOCALBIN) + $(call go-install-tool,$(KUSTOMIZE),sigs.k8s.io/kustomize/kustomize/v5,v$(KUSTOMIZE_VERSION)) .PHONY: controller-gen controller-gen: $(CONTROLLER_GEN) ## Download controller-gen locally if necessary. $(CONTROLLER_GEN): $(LOCALBIN) - GOBIN=$(LOCALBIN) go install sigs.k8s.io/controller-tools/cmd/controller-gen@$(CONTROLLER_TOOLS_VERSION) + $(call go-install-tool,$(CONTROLLER_GEN),sigs.k8s.io/controller-tools/cmd/controller-gen,$(CONTROLLER_TOOLS_VERSION)) .PHONY: envtest -envtest: $(ENVTEST) ## Download envtest-setup locally if necessary. +envtest: $(ENVTEST) ## Download setup-envtest locally if necessary. $(ENVTEST): $(LOCALBIN) - GOBIN=$(LOCALBIN) go install sigs.k8s.io/controller-runtime/tools/setup-envtest@latest + $(call go-install-tool,$(ENVTEST),sigs.k8s.io/controller-runtime/tools/setup-envtest,$(ENVTEST_VERSION)) + +.PHONY: golangci-lint +golangci-lint: $(GOLANGCI_LINT) ## Download golangci-lint locally if necessary. +$(GOLANGCI_LINT): $(LOCALBIN) + $(call go-install-tool,$(GOLANGCI_LINT),github.com/golangci/golangci-lint/cmd/golangci-lint,$(GOLANGCI_LINT_VERSION)) + +# go-install-tool will 'go install' any package with custom target and name of binary, if it doesn't exist +# $1 - target path with name of binary (ideally with version) +# $2 - package url which can be installed +# $3 - specific version of package +define go-install-tool +@[ -f "$(1)-$(3)" ] || { \ +set -e; \ +package=$(2)@$(3) ;\ +echo "Downloading $${package}" ;\ +rm -f $(1) || true ;\ +GOBIN=$(LOCALBIN) go install $${package} ;\ +mv $(1) $(1)-$(3) ;\ +} ;\ +ln -sf $(1)-$(3) $(1) +endef .PHONY: bundle bundle: manifests kustomize ## Generate bundle manifests and metadata, then validate generated files. @@ -228,9 +275,6 @@ catalog-build: opm ## Build a catalog image. catalog-push: ## Push a catalog image. $(MAKE) docker-push IMG=$(CATALOG_IMG) -$(GOLANGCI_LINT): - curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(dir $@) $(GOLANGCI_LINT_VERSION) - verify-golangci-lint: $(GOLANGCI_LINT) GOLANGCI_LINT_CACHE=$(GOLANGCI_LINT_CACHE) $(GOLANGCI_LINT) run --timeout=300s ./... diff --git a/PROJECT b/PROJECT index f63043534..f92ff7914 100644 --- a/PROJECT +++ b/PROJECT @@ -1,6 +1,6 @@ domain: stakater.com layout: -- go.kubebuilder.io/v3 +- go.kubebuilder.io/v4 plugins: manifests.sdk.operatorframework.io/v2: {} scorecard.sdk.operatorframework.io/v2: {} diff --git a/README.md b/README.md index cddcf9a13..7dc88b737 100644 --- a/README.md +++ b/README.md @@ -172,10 +172,6 @@ Join and talk to us on the #tools-ingressmonitor channel for discussing the Ingr [![Join Slack](https://stakater.github.io/README/stakater-join-slack-btn.png)](https://slack.stakater.com/) [![Chat](https://stakater.github.io/README/stakater-chat-btn.png)](https://stakater-community.slack.com/messages/CA66MMYSE) -## Known Issues - -- Latest image of kube-rbac-proxy fails on openshift with permission issues. To resolve use `registry.redhat.io/openshift4/ose-kube-rbac-proxy:v4.7.0` instead of kube-rbac-proxy. This issue can be tracked [here](https://github.com/operator-framework/operator-sdk/issues/4684). - ## License Apache2 © [Stakater][website] diff --git a/api/v1alpha1/endpointmonitor_types.go b/api/v1alpha1/endpointmonitor_types.go index 1bbe4a492..96c172739 100644 --- a/api/v1alpha1/endpointmonitor_types.go +++ b/api/v1alpha1/endpointmonitor_types.go @@ -239,7 +239,7 @@ type StatusCakeConfig struct { // Timeout is used to set a user agent string. // +kubebuilder:validation:Maximum=75 - // +kubebuilder:validation:Minimum=1 + // +kubebuilder:validation:Minimum=5 // +optional Timeout int `json:"timeout,omitempty"` } diff --git a/api/v1alpha1/zz_generated.deepcopy.go b/api/v1alpha1/zz_generated.deepcopy.go index f29f3158b..87f4f2ad9 100644 --- a/api/v1alpha1/zz_generated.deepcopy.go +++ b/api/v1alpha1/zz_generated.deepcopy.go @@ -1,5 +1,4 @@ //go:build !ignore_autogenerated -// +build !ignore_autogenerated /* Copyright 2021. diff --git a/bundle.Dockerfile b/bundle.Dockerfile index 8b027e705..94cae9183 100644 --- a/bundle.Dockerfile +++ b/bundle.Dockerfile @@ -7,9 +7,9 @@ LABEL operators.operatorframework.io.bundle.metadata.v1=metadata/ LABEL operators.operatorframework.io.bundle.package.v1=ingressmonitorcontroller LABEL operators.operatorframework.io.bundle.channels.v1=alpha LABEL operators.operatorframework.io.bundle.channel.default.v1=alpha -LABEL operators.operatorframework.io.metrics.builder=operator-sdk-v1.18.0+git +LABEL operators.operatorframework.io.metrics.builder=operator-sdk-v1.39.2 LABEL operators.operatorframework.io.metrics.mediatype.v1=metrics+v1 -LABEL operators.operatorframework.io.metrics.project_layout=go.kubebuilder.io/v3 +LABEL operators.operatorframework.io.metrics.project_layout=go.kubebuilder.io/v4 # Labels for testing. LABEL operators.operatorframework.io.test.mediatype.v1=scorecard+v1 diff --git a/bundle/manifests/endpointmonitor.stakater.com_endpointmonitors.yaml b/bundle/manifests/endpointmonitor.stakater.com_endpointmonitors.yaml index 5859a71e6..d82340348 100644 --- a/bundle/manifests/endpointmonitor.stakater.com_endpointmonitors.yaml +++ b/bundle/manifests/endpointmonitor.stakater.com_endpointmonitors.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.9.0 + controller-gen.kubebuilder.io/version: v0.16.1 creationTimestamp: null name: endpointmonitors.endpointmonitor.stakater.com spec: @@ -20,14 +20,19 @@ spec: description: EndpointMonitor is the Schema for the endpointmonitors API properties: apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources type: string kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string metadata: type: object @@ -64,9 +69,9 @@ spec: properties: alertSensitivity: default: none - description: The alertSensitivity value defaults to none if there - are no alerts or can be set to low, medium, or high to correspond - to the check alert levels. + description: |- + The alertSensitivity value defaults to none if there are no alerts or can be set to low, medium, + or high to correspond to the check alert levels. enum: - none - low @@ -79,11 +84,10 @@ spec: format: int64 type: integer probes: - description: Probes are the monitoring agents responsible for - simulating user interactions with your web applications or services. - These agents periodically send requests to predefined URLs and - record the responses, checking for expected outcomes and measuring - performance. + description: |- + Probes are the monitoring agents responsible for simulating user interactions with your web applications + or services. These agents periodically send requests to predefined URLs and record the responses, + checking for expected outcomes and measuring performance. items: type: string type: array @@ -113,18 +117,17 @@ spec: description: Set to "true" to pause checks type: boolean postDataEnvVar: - description: Data that should be posted to the web page, for example - submission data for a sign-up or login form. The data needs - to be formatted in the same way as a web browser would send - it to the web server. Because post data contains sensitive secret - this field is only a reference to an environment variable. + description: |- + Data that should be posted to the web page, for example submission data for a sign-up or login form. + The data needs to be formatted in the same way as a web browser would send it to the web server. + Because post data contains sensitive secret this field is only a reference to an environment variable. type: string requestHeaders: description: Custom request headers type: string requestHeadersEnvVar: - description: Custom request headers that should be read from an - environment variable as it possibly contains sensitive data. + description: |- + Custom request headers that should be read from an environment variable as it possibly contains sensitive data. An example would be an API token. type: string resolution: @@ -138,11 +141,10 @@ spec: HTML code of the page type: string sslDownDaysBefore: - description: Consider down prior to certificate expiring Select - the number of days prior to your certificate expiry date that - you want to consider the check down. At this day your check - will be considered down and if applicable a down alert will - be sent. + description: |- + Consider down prior to certificate expiring + Select the number of days prior to your certificate expiry date that you want to consider the check down. + At this day your check will be considered down and if applicable a down alert will be sent. type: integer tags: description: Comma separated set of tags to apply to check (e.g. @@ -152,11 +154,11 @@ spec: description: '`-` separated team id''s (e.g. "1234567_8_9-9876543_2_1")' type: string verifyCertificate: - description: Monitor SSL/TLS certificate Monitor the validity - of your SSL/TLS certificate. With this enabled Uptime checks - will be considered DOWN when the certificate becomes invalid - or expires. SSL/TLS certificate monitoring is available for - HTTP checks. + description: |- + Monitor SSL/TLS certificate + Monitor the validity of your SSL/TLS certificate. With this enabled Uptime checks will be considered DOWN when + the certificate becomes invalid or expires. + SSL/TLS certificate monitoring is available for HTTP checks. type: boolean type: object pingdomTransactionConfig: @@ -217,18 +219,17 @@ spec: args: additionalProperties: type: string - description: 'contains the html element with assigned value - the key element is always lowercase for example {"url": - "https://www.pingdom.com"} see available values at https://pkg.go.dev/github.com/karlderkaefer/pingdom-golang-client@latest/pkg/pingdom/client/tmschecks#StepArg' + description: |- + contains the html element with assigned value + the key element is always lowercase for example {"url": "https://www.pingdom.com"} + see available values at https://pkg.go.dev/github.com/karlderkaefer/pingdom-golang-client@latest/pkg/pingdom/client/tmschecks#StepArg type: object function: - description: 'contains the function that is executed as - part of the step commands: go_to, click, fill, check, - uncheck, sleep, select_radio, basic_auth, submit, wait_for_element, - wait_for_contains validations: url, exists, not_exists, - contains, not_contains, field_contains, field_not_contains, - is_checked, is_not_checked, radio_selected, dropdown_selected, - dropdown_not_selected see updated list https://docs.pingdom.com/api/#section/TMS-Steps-Vocabulary/Script-transaction-checks' + description: |- + contains the function that is executed as part of the step + commands: go_to, click, fill, check, uncheck, sleep, select_radio, basic_auth, submit, wait_for_element, wait_for_contains + validations: url, exists, not_exists, contains, not_contains, field_contains, field_not_contains, is_checked, is_not_checked, radio_selected, dropdown_selected, dropdown_not_selected + see updated list https://docs.pingdom.com/api/#section/TMS-Steps-Vocabulary/Script-transaction-checks type: string required: - args @@ -254,6 +255,9 @@ spec: statusCakeConfig: description: Configuration for StatusCake Monitor Provider properties: + basicAuthSecret: + description: Basic Auth Secret Name + type: string basicAuthUser: description: Basic Auth User type: string @@ -287,6 +291,10 @@ spec: port: description: TCP Port type: integer + rawPostData: + description: RawPostData can be used to send parameters within + the URL. Changes the request from a GET to a POST + type: string realBrowser: description: Enable Real Browser type: boolean @@ -306,6 +314,9 @@ spec: triggerRate: description: Minutes to wait before sending an alert type: integer + userAgent: + description: UserAgent is used to set a user agent string. + type: string type: object updownConfig: description: Configuration for Updown Monitor Provider @@ -350,9 +361,9 @@ spec: this monitor type: string customHTTPStatuses: - description: 'Defines which http status codes are treated as up - or down For ex: 200:0_401:1_503:1 (to accept 200 as down and - 401 and 503 as up)' + description: |- + Defines which http status codes are treated as up or down + For ex: 200:0_401:1_503:1 (to accept 200 as down and 401 and 503 as up) type: string interval: description: The uptimerobot check interval in seconds diff --git a/bundle/manifests/ingressmonitorcontroller-controller-manager-metrics-service_v1_service.yaml b/bundle/manifests/ingressmonitorcontroller-controller-manager-metrics-service_v1_service.yaml index a8affff0f..9510107d7 100644 --- a/bundle/manifests/ingressmonitorcontroller-controller-manager-metrics-service_v1_service.yaml +++ b/bundle/manifests/ingressmonitorcontroller-controller-manager-metrics-service_v1_service.yaml @@ -3,13 +3,16 @@ kind: Service metadata: creationTimestamp: null labels: + app.kubernetes.io/managed-by: kustomize + app.kubernetes.io/name: IngressMonitorController control-plane: controller-manager name: ingressmonitorcontroller-controller-manager-metrics-service spec: ports: - name: https port: 8443 - targetPort: https + protocol: TCP + targetPort: 8443 selector: control-plane: controller-manager status: diff --git a/bundle/manifests/ingressmonitorcontroller-leader-election-role_rbac.authorization.k8s.io_v1_role.yaml b/bundle/manifests/ingressmonitorcontroller-leader-election-role_rbac.authorization.k8s.io_v1_role.yaml new file mode 100644 index 000000000..f0f2d0352 --- /dev/null +++ b/bundle/manifests/ingressmonitorcontroller-leader-election-role_rbac.authorization.k8s.io_v1_role.yaml @@ -0,0 +1,37 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + creationTimestamp: null + name: ingressmonitorcontroller-leader-election-role +rules: +- apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - list + - watch + - create + - update + - patch + - delete +- apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - list + - watch + - create + - update + - patch + - delete +- apiGroups: + - "" + resources: + - events + verbs: + - create + - patch diff --git a/bundle/manifests/ingressmonitorcontroller.clusterserviceversion.yaml b/bundle/manifests/ingressmonitorcontroller.clusterserviceversion.yaml index 6b610ff58..8c1b03dc8 100644 --- a/bundle/manifests/ingressmonitorcontroller.clusterserviceversion.yaml +++ b/bundle/manifests/ingressmonitorcontroller.clusterserviceversion.yaml @@ -16,9 +16,10 @@ metadata: } ] capabilities: Basic Install - operators.operatorframework.io/builder: operator-sdk-v1.18.0+git - operators.operatorframework.io/project_layout: go.kubebuilder.io/v3 - name: ingressmonitorcontroller.v2.1.64 + createdAt: "2025-08-19T09:40:00Z" + operators.operatorframework.io/builder: operator-sdk-v1.39.2 + operators.operatorframework.io/project_layout: go.kubebuilder.io/v4 + name: ingressmonitorcontroller.v2.2.6 namespace: placeholder spec: apiservicedefinitions: {} @@ -43,12 +44,6 @@ spec: - "" resources: - pods - verbs: - - get - - list - - apiGroups: - - "" - resources: - services verbs: - get @@ -75,14 +70,6 @@ spec: - get - patch - update - - apiGroups: - - extensions - resources: - - ingresses - verbs: - - get - - list - - watch - apiGroups: - networking.k8s.io resources: @@ -129,29 +116,12 @@ spec: spec: containers: - args: - - --secure-listen-address=0.0.0.0:8443 - - --upstream=http://127.0.0.1:8080/ - - --logtostderr=true - - --v=0 - image: gcr.io/kubebuilder/kube-rbac-proxy:v0.8.0 - name: kube-rbac-proxy - ports: - - containerPort: 8443 - name: https - resources: - limits: - cpu: 10m - memory: 128Mi - requests: - cpu: 5m - memory: 64Mi - - args: - - --health-probe-bind-address=:8081 - - --metrics-bind-address=127.0.0.1:8080 + - --metrics-bind-address=:8443 - --leader-elect + - --health-probe-bind-address=:8081 command: - /manager - image: stakater/ingressmonitorcontroller:v2.1.64 + image: stakater/ingressmonitorcontroller:v2.2.6 livenessProbe: httpGet: path: /healthz @@ -167,11 +137,11 @@ spec: periodSeconds: 10 resources: limits: - cpu: 50m - memory: 500Mi + cpu: 100m + memory: 30Mi requests: - cpu: 5m - memory: 64Mi + cpu: 100m + memory: 20Mi securityContext: allowPrivilegeEscalation: false securityContext: @@ -180,37 +150,6 @@ spec: terminationGracePeriodSeconds: 10 permissions: - rules: - - apiGroups: - - "" - resources: - - configmaps - verbs: - - get - - list - - watch - - create - - update - - patch - - delete - - apiGroups: - - coordination.k8s.io - resources: - - leases - verbs: - - get - - list - - watch - - create - - update - - patch - - delete - - apiGroups: - - "" - resources: - - events - verbs: - - create - - patch - apiGroups: - "" resources: @@ -251,4 +190,4 @@ spec: provider: name: stakater url: https://stakater.com - version: 2.1.64 + version: 2.2.6 diff --git a/bundle/metadata/annotations.yaml b/bundle/metadata/annotations.yaml index ce33f84cf..6818e9d5c 100644 --- a/bundle/metadata/annotations.yaml +++ b/bundle/metadata/annotations.yaml @@ -6,9 +6,9 @@ annotations: operators.operatorframework.io.bundle.package.v1: ingressmonitorcontroller operators.operatorframework.io.bundle.channels.v1: alpha operators.operatorframework.io.bundle.channel.default.v1: alpha - operators.operatorframework.io.metrics.builder: operator-sdk-v1.18.0+git + operators.operatorframework.io.metrics.builder: operator-sdk-v1.39.2 operators.operatorframework.io.metrics.mediatype.v1: metrics+v1 - operators.operatorframework.io.metrics.project_layout: go.kubebuilder.io/v3 + operators.operatorframework.io.metrics.project_layout: go.kubebuilder.io/v4 # Annotations for testing. operators.operatorframework.io.test.mediatype.v1: scorecard+v1 diff --git a/charts/ingressmonitorcontroller/Chart.yaml b/charts/ingressmonitorcontroller/Chart.yaml index e9d7502e7..76d67ccb0 100644 --- a/charts/ingressmonitorcontroller/Chart.yaml +++ b/charts/ingressmonitorcontroller/Chart.yaml @@ -3,10 +3,10 @@ name: ingressmonitorcontroller description: IngressMonitorController Operator chart that runs on kubernetes # Helm chart Version -version: 2.1.64 +version: 2.2.6 # Application version to be deployed -appVersion: 2.1.64 +appVersion: 2.2.6 keywords: - IngressMonitorController diff --git a/charts/ingressmonitorcontroller/README.md b/charts/ingressmonitorcontroller/README.md index 419bb4ed9..e668ee17e 100644 --- a/charts/ingressmonitorcontroller/README.md +++ b/charts/ingressmonitorcontroller/README.md @@ -23,16 +23,12 @@ helm install stakater/ingressmonitorcontroller ## Chart Values | Key | Default | Description | -| ---------------------------- | ------------------------------------- | ---------------------------------------------------------------------------------------------- | +|------------------------------|---------------------------------------|------------------------------------------------------------------------------------------------| | global.labels | `` | Labels to be added to all components | | replicaCount | `1` | Replicas for operator | | image.name | `"stakater/ingressmonitorcontroller"` | Image repository | | image.tag | `LATEST_CHART_VERSION` | Tag of the Image | | image.pullPolicy | `Always` | Pull policy for the image | -| kube-rbac-proxy.image.repository | `gcr.io/kubebuilder/kube-rbac-proxy` | Image repository for kube-rbac-proxy | -| kube-rbac-proxy.image.tag | `v0.8.0` | Tag of the kube-rbac-proxy image | -| kube-rbac-proxy.image.pullPolicy | `IfNotPresent` | Pull policy for the image | -| kube-rbac-proxy.securityContext | `{}` |securityContext for the kube-rbac-proxy Container | | imagePullSecrets | `` | List of secrets used to pull images | | nameOverride | `""` | Partial override for ingress-monitor-controller.fullname template (will keep the release name) | | fullnameOverride | `""` | Full override for ingress-monitor-controller.fullname template | @@ -48,6 +44,7 @@ helm install stakater/ingressmonitorcontroller | serviceAccount.annotations | `{}` | Additional annotations on ServiceAccount | | serviceMonitor.enabled | `false` | Create ServiceMonitor for metrics | | podAnnotations | `""` | Additional annotations on deployment | +| podLabels | `{}` | Additional labels for the Pod template | | resources | `{}` | Requests/Limits for operator | | securityContext | `{}` | Override for SecurityContext | | podSecurityContext | `{}` | Override for deployment.Spec.securityContext | diff --git a/charts/ingressmonitorcontroller/crds/endpointmonitor.stakater.com_endpointmonitors.yaml b/charts/ingressmonitorcontroller/crds/endpointmonitor.stakater.com_endpointmonitors.yaml index 8882cc43d..56fe2bcba 100644 --- a/charts/ingressmonitorcontroller/crds/endpointmonitor.stakater.com_endpointmonitors.yaml +++ b/charts/ingressmonitorcontroller/crds/endpointmonitor.stakater.com_endpointmonitors.yaml @@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.16.1 name: endpointmonitors.endpointmonitor.stakater.com spec: group: endpointmonitor.stakater.com @@ -21,14 +20,19 @@ spec: description: EndpointMonitor is the Schema for the endpointmonitors API properties: apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources type: string kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string metadata: type: object @@ -65,9 +69,9 @@ spec: properties: alertSensitivity: default: none - description: The alertSensitivity value defaults to none if there - are no alerts or can be set to low, medium, or high to correspond - to the check alert levels. + description: |- + The alertSensitivity value defaults to none if there are no alerts or can be set to low, medium, + or high to correspond to the check alert levels. enum: - none - low @@ -80,11 +84,10 @@ spec: format: int64 type: integer probes: - description: Probes are the monitoring agents responsible for - simulating user interactions with your web applications or services. - These agents periodically send requests to predefined URLs and - record the responses, checking for expected outcomes and measuring - performance. + description: |- + Probes are the monitoring agents responsible for simulating user interactions with your web applications + or services. These agents periodically send requests to predefined URLs and record the responses, + checking for expected outcomes and measuring performance. items: type: string type: array @@ -114,18 +117,17 @@ spec: description: Set to "true" to pause checks type: boolean postDataEnvVar: - description: Data that should be posted to the web page, for example - submission data for a sign-up or login form. The data needs - to be formatted in the same way as a web browser would send - it to the web server. Because post data contains sensitive secret - this field is only a reference to an environment variable. + description: |- + Data that should be posted to the web page, for example submission data for a sign-up or login form. + The data needs to be formatted in the same way as a web browser would send it to the web server. + Because post data contains sensitive secret this field is only a reference to an environment variable. type: string requestHeaders: description: Custom request headers type: string requestHeadersEnvVar: - description: Custom request headers that should be read from an - environment variable as it possibly contains sensitive data. + description: |- + Custom request headers that should be read from an environment variable as it possibly contains sensitive data. An example would be an API token. type: string resolution: @@ -139,11 +141,10 @@ spec: HTML code of the page type: string sslDownDaysBefore: - description: Consider down prior to certificate expiring Select - the number of days prior to your certificate expiry date that - you want to consider the check down. At this day your check - will be considered down and if applicable a down alert will - be sent. + description: |- + Consider down prior to certificate expiring + Select the number of days prior to your certificate expiry date that you want to consider the check down. + At this day your check will be considered down and if applicable a down alert will be sent. type: integer tags: description: Comma separated set of tags to apply to check (e.g. @@ -153,11 +154,11 @@ spec: description: '`-` separated team id''s (e.g. "1234567_8_9-9876543_2_1")' type: string verifyCertificate: - description: Monitor SSL/TLS certificate Monitor the validity - of your SSL/TLS certificate. With this enabled Uptime checks - will be considered DOWN when the certificate becomes invalid - or expires. SSL/TLS certificate monitoring is available for - HTTP checks. + description: |- + Monitor SSL/TLS certificate + Monitor the validity of your SSL/TLS certificate. With this enabled Uptime checks will be considered DOWN when + the certificate becomes invalid or expires. + SSL/TLS certificate monitoring is available for HTTP checks. type: boolean type: object pingdomTransactionConfig: @@ -218,18 +219,17 @@ spec: args: additionalProperties: type: string - description: 'contains the html element with assigned value - the key element is always lowercase for example {"url": - "https://www.pingdom.com"} see available values at https://pkg.go.dev/github.com/karlderkaefer/pingdom-golang-client@latest/pkg/pingdom/client/tmschecks#StepArg' + description: |- + contains the html element with assigned value + the key element is always lowercase for example {"url": "https://www.pingdom.com"} + see available values at https://pkg.go.dev/github.com/karlderkaefer/pingdom-golang-client@latest/pkg/pingdom/client/tmschecks#StepArg type: object function: - description: 'contains the function that is executed as - part of the step commands: go_to, click, fill, check, - uncheck, sleep, select_radio, basic_auth, submit, wait_for_element, - wait_for_contains validations: url, exists, not_exists, - contains, not_contains, field_contains, field_not_contains, - is_checked, is_not_checked, radio_selected, dropdown_selected, - dropdown_not_selected see updated list https://docs.pingdom.com/api/#section/TMS-Steps-Vocabulary/Script-transaction-checks' + description: |- + contains the function that is executed as part of the step + commands: go_to, click, fill, check, uncheck, sleep, select_radio, basic_auth, submit, wait_for_element, wait_for_contains + validations: url, exists, not_exists, contains, not_contains, field_contains, field_not_contains, is_checked, is_not_checked, radio_selected, dropdown_selected, dropdown_not_selected + see updated list https://docs.pingdom.com/api/#section/TMS-Steps-Vocabulary/Script-transaction-checks type: string required: - args @@ -361,9 +361,9 @@ spec: this monitor type: string customHTTPStatuses: - description: 'Defines which http status codes are treated as up - or down For ex: 200:0_401:1_503:1 (to accept 200 as down and - 401 and 503 as up)' + description: |- + Defines which http status codes are treated as up or down + For ex: 200:0_401:1_503:1 (to accept 200 as down and 401 and 503 as up) type: string interval: description: The uptimerobot check interval in seconds diff --git a/charts/ingressmonitorcontroller/templates/clusterrole.yaml b/charts/ingressmonitorcontroller/templates/clusterrole.yaml index 3bd9690f0..bd7d2425f 100644 --- a/charts/ingressmonitorcontroller/templates/clusterrole.yaml +++ b/charts/ingressmonitorcontroller/templates/clusterrole.yaml @@ -46,14 +46,6 @@ rules: - get - patch - update -- apiGroups: - - extensions - resources: - - ingresses - verbs: - - get - - list - - watch - apiGroups: - networking.k8s.io resources: diff --git a/charts/ingressmonitorcontroller/templates/deployment.yaml b/charts/ingressmonitorcontroller/templates/deployment.yaml index 9883f6874..e2cbe146b 100644 --- a/charts/ingressmonitorcontroller/templates/deployment.yaml +++ b/charts/ingressmonitorcontroller/templates/deployment.yaml @@ -22,6 +22,9 @@ spec: {{- toYaml . | nindent 8 }} {{- end }} labels: + {{- with .Values.podLabels }} + {{- toYaml . | nindent 8}} + {{- end }} {{- include "ingress-monitor-controller.selectorLabels" . | nindent 8 }} spec: {{- with .Values.imagePullSecrets }} @@ -32,26 +35,11 @@ spec: securityContext: {{- toYaml .Values.podSecurityContext | nindent 8 }} containers: - {{- with (index .Values "kube-rbac-proxy") }} - - args: - - --secure-listen-address=0.0.0.0:8443 - - --upstream=http://127.0.0.1:8080/ - - --v=0 - image: {{ printf "%s:%s" .image.repository .image.tag | default "gcr.io/kubebuilder/kube-rbac-proxy:v0.8.0" | quote }} - imagePullPolicy: {{ .image.pullPolicy | quote }} - name: kube-rbac-proxy - ports: - - containerPort: 8443 - name: https - resources: - {{- toYaml .resources | nindent 10 }} - securityContext: - {{- toYaml .securityContext | nindent 10 }} - {{- end }} - args: - --health-probe-bind-address=:8081 - --metrics-bind-address=127.0.0.1:8080 - --leader-elect + - --max-concurrent-reconciles={{ .Values.maxConcurrentReconciles }} command: - /manager env: @@ -84,7 +72,7 @@ spec: resources: {{- toYaml .Values.resources | nindent 10 }} securityContext: - {{- toYaml .Values.securityContext | nindent 10 }} + {{- toYaml .Values.securityContext | nindent 10 }} terminationGracePeriodSeconds: 10 {{- with .Values.nodeSelector }} nodeSelector: @@ -98,4 +86,4 @@ spec: tolerations: {{- toYaml . | nindent 8 }} {{- end }} ---- \ No newline at end of file +--- diff --git a/charts/ingressmonitorcontroller/templates/role.yaml b/charts/ingressmonitorcontroller/templates/role.yaml index 1d1c13638..f7cf1e744 100644 --- a/charts/ingressmonitorcontroller/templates/role.yaml +++ b/charts/ingressmonitorcontroller/templates/role.yaml @@ -4,7 +4,7 @@ apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: - name: {{ include "ingress-monitor-controller.fullname" . }}-manager-role + name: {{ include "ingress-monitor-controller.fullname" $ }}-manager-role namespace: {{ . | trim }} rules: - apiGroups: @@ -45,14 +45,6 @@ rules: - get - patch - update -- apiGroups: - - extensions - resources: - - ingresses - verbs: - - get - - list - - watch - apiGroups: - networking.k8s.io resources: @@ -69,6 +61,7 @@ rules: - get - list - watch +--- {{- end }} {{- end }} diff --git a/charts/ingressmonitorcontroller/templates/rolebinding.yaml b/charts/ingressmonitorcontroller/templates/rolebinding.yaml index 2c39e5298..48910fc39 100644 --- a/charts/ingressmonitorcontroller/templates/rolebinding.yaml +++ b/charts/ingressmonitorcontroller/templates/rolebinding.yaml @@ -1,19 +1,20 @@ {{- if .Values.rbac.create -}} {{- if ne .Values.watchNamespaces "" }} -{{- range .Values.watchNamespaces | split "," }}--- +{{- range .Values.watchNamespaces | split "," }} apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: - name: {{ include "ingress-monitor-controller.fullname" . }}-manager-rolebinding + name: {{ include "ingress-monitor-controller.fullname" $ }}-manager-rolebinding namespace: {{ . | trim }} roleRef: apiGroup: rbac.authorization.k8s.io kind: Role - name: {{ include "ingress-monitor-controller.fullname" . }}-manager-role + name: {{ include "ingress-monitor-controller.fullname" $ }}-manager-role subjects: - kind: ServiceAccount - name: {{ include "ingress-monitor-controller.serviceAccountName" . }} - namespace: {{ . | trim }} + name: {{ include "ingress-monitor-controller.serviceAccountName" $ }} + namespace: {{ include "ingress-monitor-controller.namespace" $ }} +--- {{- end }} {{- end }} diff --git a/charts/ingressmonitorcontroller/values.yaml b/charts/ingressmonitorcontroller/values.yaml index 5b61f5a75..1bdb74245 100644 --- a/charts/ingressmonitorcontroller/values.yaml +++ b/charts/ingressmonitorcontroller/values.yaml @@ -7,27 +7,11 @@ global: replicaCount: 1 image: - repository: stakater/ingressmonitorcontroller - tag: v2.1.64 + repository: ghcr.io/stakater/ingressmonitorcontroller + tag: v2.2.6 pullPolicy: IfNotPresent imagePullSecrets: [] -kube-rbac-proxy: - image: - repository: gcr.io/kubebuilder/kube-rbac-proxy - tag: v0.8.0 - pullPolicy: IfNotPresent - resources: - {} - securityContext: - {} - # capabilities: - # drop: - # - ALL - # readOnlyRootFilesystem: true - # runAsNonRoot: true - # runAsUser: 1000 - # Partial override for ingress-monitor-controller.fullname template (will keep the release name) nameOverride: "" @@ -41,6 +25,9 @@ namespaceOverride: "" # Leave empty for full access or specify a comma separated list of namespaces to watch watchNamespaces: "" +# Number of concurrent reconciles +maxConcurrentReconciles: 1 + # Name of secret containing configSecretName: "imc-config" @@ -73,6 +60,8 @@ resources: deploymentAnnotations: {} +podLabels: {} + podAnnotations: {} podSecurityContext: diff --git a/main.go b/cmd/main.go similarity index 54% rename from main.go rename to cmd/main.go index 704d1a978..569412297 100644 --- a/main.go +++ b/cmd/main.go @@ -17,6 +17,7 @@ limitations under the License. package main import ( + "crypto/tls" "flag" "fmt" "os" @@ -25,17 +26,20 @@ import ( "k8s.io/apimachinery/pkg/runtime" utilruntime "k8s.io/apimachinery/pkg/util/runtime" clientgoscheme "k8s.io/client-go/kubernetes/scheme" + "k8s.io/client-go/rest" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/cache" "sigs.k8s.io/controller-runtime/pkg/healthz" "sigs.k8s.io/controller-runtime/pkg/log/zap" + "sigs.k8s.io/controller-runtime/pkg/metrics/filters" routev1 "github.com/openshift/api/route/v1" endpointmonitorv1alpha1 "github.com/stakater/IngressMonitorController/v2/api/v1alpha1" + controllers "github.com/stakater/IngressMonitorController/v2/internal/controller" "github.com/stakater/IngressMonitorController/v2/pkg/config" - "github.com/stakater/IngressMonitorController/v2/pkg/controllers" "github.com/stakater/IngressMonitorController/v2/pkg/kube" "github.com/stakater/IngressMonitorController/v2/pkg/monitors" + metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server" //+kubebuilder:scaffold:imports ) @@ -59,11 +63,63 @@ func main() { var metricsAddr string var enableLeaderElection bool var probeAddr string - flag.StringVar(&metricsAddr, "metrics-bind-address", ":8080", "The address the metric endpoint binds to.") + var maxConcurrentReconciles int + var secureMetrics bool + var enableHTTP2 bool + + flag.StringVar(&metricsAddr, "metrics-bind-address", "0", "The address the metrics endpoint binds to. "+ + "Use :8443 for HTTPS or :8080 for HTTP, or leave as 0 to disable the metrics service.") flag.StringVar(&probeAddr, "health-probe-bind-address", ":8081", "The address the probe endpoint binds to.") flag.BoolVar(&enableLeaderElection, "leader-elect", false, "Enable leader election for controller manager. "+ "Enabling this will ensure there is only one active controller manager.") + flag.BoolVar(&secureMetrics, "metrics-secure", true, + "If set, the metrics endpoint is served securely via HTTPS. Use --metrics-secure=false to use HTTP instead.") + flag.BoolVar(&enableHTTP2, "enable-http2", false, + "If set, HTTP/2 will be enabled for the metrics and webhook servers") + + flag.IntVar(&maxConcurrentReconciles, "max-concurrent-reconciles", 1, + "The maximum number of concurrent Reconciles which can be run.", + ) + var tlsOpts []func(*tls.Config) + // if the enable-http2 flag is false (the default), http/2 should be disabled + // due to its vulnerabilities. More specifically, disabling http/2 will + // prevent from being vulnerable to the HTTP/2 Stream Cancellation and + // Rapid Reset CVEs. For more information see: + // - https://github.com/advisories/GHSA-qppj-fm5r-hxr3 + // - https://github.com/advisories/GHSA-4374-p667-p6c8 + disableHTTP2 := func(c *tls.Config) { + setupLog.Info("disabling http/2") + c.NextProtos = []string{"http/1.1"} + } + if !enableHTTP2 { + tlsOpts = append(tlsOpts, disableHTTP2) + } + + // Metrics endpoint is enabled in 'config/default/kustomization.yaml'. The Metrics options configure the server. + // More info: + // - https://pkg.go.dev/sigs.k8s.io/controller-runtime@v0.19.0/pkg/metrics/server + // - https://book.kubebuilder.io/reference/metrics.html + metricsServerOptions := metricsserver.Options{ + BindAddress: metricsAddr, + SecureServing: secureMetrics, + // TODO(user): TLSOpts is used to allow configuring the TLS config used for the server. If certificates are + // not provided, self-signed certificates will be generated by default. This option is not recommended for + // production environments as self-signed certificates do not offer the same level of trust and security + // as certificates issued by a trusted Certificate Authority (CA). The primary risk is potentially allowing + // unauthorized access to sensitive metrics data. Consider replacing with CertDir, CertName, and KeyName + // to provide certificates, ensuring the server communicates using trusted and secure certificates. + TLSOpts: tlsOpts, + } + + if secureMetrics { + // FilterProvider is used to protect the metrics endpoint with authn/authz. + // These configurations ensure that only authorized users and service accounts + // can access the metrics endpoint. The RBAC are configured in 'config/rbac/kustomization.yaml'. More info: + // https://pkg.go.dev/sigs.k8s.io/controller-runtime@v0.19.0/pkg/metrics/filters#WithAuthenticationAndAuthorization + metricsServerOptions.FilterProvider = filters.WithAuthenticationAndAuthorization + } + opts := zap.Options{ Development: false, } @@ -79,21 +135,31 @@ func main() { options := ctrl.Options{ Scheme: scheme, - MetricsBindAddress: metricsAddr, - Port: 9443, HealthProbeBindAddress: probeAddr, LeaderElection: enableLeaderElection, LeaderElectionID: "2bf90a83.stakater.com", - Namespace: watchNamespace, // namespaced-scope when the value is not an empty string + // Namespace: watchNamespace, // namespaced-scope when the value is not an empty string + Metrics: metricsServerOptions, } + namespaces := []string{} // Add support for MultiNamespace set in WATCH_NAMESPACE (e.g ns1,ns2) // More Info: https://godoc.org/github.com/kubernetes-sigs/controller-runtime/pkg/cache#MultiNamespacedCacheBuilder if strings.Contains(watchNamespace, ",") { setupLog.Info("Manager will be watching namespace(s) %q", watchNamespace) // configure cluster-scoped with MultiNamespacedCacheBuilder - options.Namespace = "" - options.NewCache = cache.MultiNamespacedCacheBuilder(strings.Split(watchNamespace, ",")) + //options.Namespace = "" + namespaces = strings.Split(watchNamespace, ",") + } else { + namespaces = []string{watchNamespace} + } + + options.NewCache = func(config *rest.Config, opts cache.Options) (cache.Cache, error) { + opts.DefaultNamespaces = map[string]cache.Config{} + for _, ns := range namespaces { + opts.DefaultNamespaces[ns] = cache.Config{} + } + return cache.New(config, opts) } mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), options) @@ -111,7 +177,7 @@ func main() { Log: ctrl.Log.WithName("controllers").WithName("EndpointMonitor"), Scheme: mgr.GetScheme(), MonitorServices: monitors.SetupMonitorServicesForProviders(config.Providers), - }).SetupWithManager(mgr); err != nil { + }).SetupWithManager(mgr, maxConcurrentReconciles); err != nil { setupLog.Error(err, "unable to create controller", "controller", "EndpointMonitor") os.Exit(1) } diff --git a/config/crd/bases/endpointmonitor.stakater.com_endpointmonitors.yaml b/config/crd/bases/endpointmonitor.stakater.com_endpointmonitors.yaml index 5e8672486..cdc4d9857 100644 --- a/config/crd/bases/endpointmonitor.stakater.com_endpointmonitors.yaml +++ b/config/crd/bases/endpointmonitor.stakater.com_endpointmonitors.yaml @@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.16.1 name: endpointmonitors.endpointmonitor.stakater.com spec: group: endpointmonitor.stakater.com @@ -21,14 +20,19 @@ spec: description: EndpointMonitor is the Schema for the endpointmonitors API properties: apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources type: string kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string metadata: type: object @@ -65,9 +69,9 @@ spec: properties: alertSensitivity: default: none - description: The alertSensitivity value defaults to none if there - are no alerts or can be set to low, medium, or high to correspond - to the check alert levels. + description: |- + The alertSensitivity value defaults to none if there are no alerts or can be set to low, medium, + or high to correspond to the check alert levels. enum: - none - low @@ -80,11 +84,10 @@ spec: format: int64 type: integer probes: - description: Probes are the monitoring agents responsible for - simulating user interactions with your web applications or services. - These agents periodically send requests to predefined URLs and - record the responses, checking for expected outcomes and measuring - performance. + description: |- + Probes are the monitoring agents responsible for simulating user interactions with your web applications + or services. These agents periodically send requests to predefined URLs and record the responses, + checking for expected outcomes and measuring performance. items: type: string type: array @@ -114,18 +117,17 @@ spec: description: Set to "true" to pause checks type: boolean postDataEnvVar: - description: Data that should be posted to the web page, for example - submission data for a sign-up or login form. The data needs - to be formatted in the same way as a web browser would send - it to the web server. Because post data contains sensitive secret - this field is only a reference to an environment variable. + description: |- + Data that should be posted to the web page, for example submission data for a sign-up or login form. + The data needs to be formatted in the same way as a web browser would send it to the web server. + Because post data contains sensitive secret this field is only a reference to an environment variable. type: string requestHeaders: description: Custom request headers type: string requestHeadersEnvVar: - description: Custom request headers that should be read from an - environment variable as it possibly contains sensitive data. + description: |- + Custom request headers that should be read from an environment variable as it possibly contains sensitive data. An example would be an API token. type: string resolution: @@ -139,11 +141,10 @@ spec: HTML code of the page type: string sslDownDaysBefore: - description: Consider down prior to certificate expiring Select - the number of days prior to your certificate expiry date that - you want to consider the check down. At this day your check - will be considered down and if applicable a down alert will - be sent. + description: |- + Consider down prior to certificate expiring + Select the number of days prior to your certificate expiry date that you want to consider the check down. + At this day your check will be considered down and if applicable a down alert will be sent. type: integer tags: description: Comma separated set of tags to apply to check (e.g. @@ -153,11 +154,11 @@ spec: description: '`-` separated team id''s (e.g. "1234567_8_9-9876543_2_1")' type: string verifyCertificate: - description: Monitor SSL/TLS certificate Monitor the validity - of your SSL/TLS certificate. With this enabled Uptime checks - will be considered DOWN when the certificate becomes invalid - or expires. SSL/TLS certificate monitoring is available for - HTTP checks. + description: |- + Monitor SSL/TLS certificate + Monitor the validity of your SSL/TLS certificate. With this enabled Uptime checks will be considered DOWN when + the certificate becomes invalid or expires. + SSL/TLS certificate monitoring is available for HTTP checks. type: boolean type: object pingdomTransactionConfig: @@ -218,18 +219,17 @@ spec: args: additionalProperties: type: string - description: 'contains the html element with assigned value - the key element is always lowercase for example {"url": - "https://www.pingdom.com"} see available values at https://pkg.go.dev/github.com/karlderkaefer/pingdom-golang-client@latest/pkg/pingdom/client/tmschecks#StepArg' + description: |- + contains the html element with assigned value + the key element is always lowercase for example {"url": "https://www.pingdom.com"} + see available values at https://pkg.go.dev/github.com/karlderkaefer/pingdom-golang-client@latest/pkg/pingdom/client/tmschecks#StepArg type: object function: - description: 'contains the function that is executed as - part of the step commands: go_to, click, fill, check, - uncheck, sleep, select_radio, basic_auth, submit, wait_for_element, - wait_for_contains validations: url, exists, not_exists, - contains, not_contains, field_contains, field_not_contains, - is_checked, is_not_checked, radio_selected, dropdown_selected, - dropdown_not_selected see updated list https://docs.pingdom.com/api/#section/TMS-Steps-Vocabulary/Script-transaction-checks' + description: |- + contains the function that is executed as part of the step + commands: go_to, click, fill, check, uncheck, sleep, select_radio, basic_auth, submit, wait_for_element, wait_for_contains + validations: url, exists, not_exists, contains, not_contains, field_contains, field_not_contains, is_checked, is_not_checked, radio_selected, dropdown_selected, dropdown_not_selected + see updated list https://docs.pingdom.com/api/#section/TMS-Steps-Vocabulary/Script-transaction-checks type: string required: - args @@ -314,7 +314,7 @@ spec: timeout: description: Timeout is used to set a user agent string. maximum: 75 - minimum: 1 + minimum: 5 type: integer triggerRate: description: Minutes to wait before sending an alert @@ -366,9 +366,9 @@ spec: this monitor type: string customHTTPStatuses: - description: 'Defines which http status codes are treated as up - or down For ex: 200:0_401:1_503:1 (to accept 200 as down and - 401 and 503 as up)' + description: |- + Defines which http status codes are treated as up or down + For ex: 200:0_401:1_503:1 (to accept 200 as down and 401 and 503 as up) type: string interval: description: The uptimerobot check interval in seconds diff --git a/config/default/kustomization.yaml b/config/default/kustomization.yaml index ae105f02a..1d8c07ec3 100644 --- a/config/default/kustomization.yaml +++ b/config/default/kustomization.yaml @@ -23,12 +23,22 @@ bases: #- ../certmanager # [PROMETHEUS] To enable prometheus monitor, uncomment all sections with 'PROMETHEUS'. #- ../prometheus +# [METRICS] Expose the controller manager metrics service. +- metrics_service.yaml + +patches: +# [METRICS] The following patch will enable the metrics endpoint using HTTPS and the port :8443. +# More info: https://book.kubebuilder.io/reference/metrics +- path: manager_metrics_patch.yaml + target: + kind: Deployment patchesStrategicMerge: -# Protect the /metrics endpoint by putting it behind auth. -# If you want your controller-manager to expose the /metrics -# endpoint w/o any authn/z, please comment the following line. -- manager_auth_proxy_patch.yaml +# [NETWORK POLICY] Protect the /metrics endpoint and Webhook Server with NetworkPolicy. +# Only Pod(s) running a namespace labeled with 'metrics: enabled' will be able to gather the metrics. +# Only CR(s) which requires webhooks and are applied on namespaces labeled with 'webhooks: enabled' will +# be able to communicate with the Webhook Server. +#- ../network-policy # Mount the controller config file for loading manager configurations # through a ComponentConfig type diff --git a/config/default/manager_auth_proxy_patch.yaml b/config/default/manager_auth_proxy_patch.yaml deleted file mode 100644 index 68c977698..000000000 --- a/config/default/manager_auth_proxy_patch.yaml +++ /dev/null @@ -1,40 +0,0 @@ -# This patch inject a sidecar container which is a HTTP proxy for the -# controller manager, it performs RBAC authorization against the Kubernetes API using SubjectAccessReviews. -apiVersion: apps/v1 -kind: Deployment -metadata: - name: controller-manager - namespace: system -spec: - template: - spec: - containers: - - name: kube-rbac-proxy - image: gcr.io/kubebuilder/kube-rbac-proxy:v0.8.0 - args: - - "--secure-listen-address=0.0.0.0:8443" - - "--upstream=http://127.0.0.1:8080/" - - "--logtostderr=true" - - "--v=0" - ports: - - containerPort: 8443 - name: https - resources: - limits: - cpu: 10m - memory: 128Mi - requests: - cpu: 5m - memory: 64Mi - - name: manager - args: - - "--health-probe-bind-address=:8081" - - "--metrics-bind-address=127.0.0.1:8080" - - "--leader-elect" - resources: - limits: - cpu: 50m - memory: 500Mi - requests: - cpu: 5m - memory: 64Mi diff --git a/config/default/manager_config_patch.yaml b/config/default/manager_config_patch.yaml deleted file mode 100644 index 6c400155c..000000000 --- a/config/default/manager_config_patch.yaml +++ /dev/null @@ -1,20 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: controller-manager - namespace: system -spec: - template: - spec: - containers: - - name: manager - args: - - "--config=controller_manager_config.yaml" - volumeMounts: - - name: manager-config - mountPath: /controller_manager_config.yaml - subPath: controller_manager_config.yaml - volumes: - - name: manager-config - configMap: - name: manager-config diff --git a/config/default/manager_metrics_patch.yaml b/config/default/manager_metrics_patch.yaml new file mode 100644 index 000000000..488f13693 --- /dev/null +++ b/config/default/manager_metrics_patch.yaml @@ -0,0 +1,4 @@ +# This patch adds the args to allow exposing the metrics endpoint using HTTPS +- op: add + path: /spec/template/spec/containers/0/args/0 + value: --metrics-bind-address=:8443 \ No newline at end of file diff --git a/config/default/metrics_service.yaml b/config/default/metrics_service.yaml new file mode 100644 index 000000000..daab8ed5b --- /dev/null +++ b/config/default/metrics_service.yaml @@ -0,0 +1,17 @@ +apiVersion: v1 +kind: Service +metadata: + labels: + control-plane: controller-manager + app.kubernetes.io/name: IngressMonitorController + app.kubernetes.io/managed-by: kustomize + name: controller-manager-metrics-service + namespace: system +spec: + ports: + - name: https + port: 8443 + protocol: TCP + targetPort: 8443 + selector: + control-plane: controller-manager \ No newline at end of file diff --git a/config/manager/kustomization.yaml b/config/manager/kustomization.yaml index b5ad0e3ef..eef3b137f 100644 --- a/config/manager/kustomization.yaml +++ b/config/manager/kustomization.yaml @@ -13,4 +13,4 @@ kind: Kustomization images: - name: controller newName: stakater/ingressmonitorcontroller - newTag: v2.1.64 + newTag: v2.2.6 diff --git a/config/manager/manager.yaml b/config/manager/manager.yaml index 79adfe72a..f37191ee8 100644 --- a/config/manager/manager.yaml +++ b/config/manager/manager.yaml @@ -29,6 +29,7 @@ spec: - /manager args: - --leader-elect + - --health-probe-bind-address=:8081 image: controller:latest name: manager securityContext: diff --git a/config/network-policy/allow-metrics-traffic.yaml b/config/network-policy/allow-metrics-traffic.yaml new file mode 100644 index 000000000..6f296345a --- /dev/null +++ b/config/network-policy/allow-metrics-traffic.yaml @@ -0,0 +1,26 @@ +# This NetworkPolicy allows ingress traffic +# with Pods running on namespaces labeled with 'metrics: enabled'. Only Pods on those +# namespaces are able to gathering data from the metrics endpoint. +apiVersion: networking.k8s.io/v1 +kind: NetworkPolicy +metadata: + labels: + app.kubernetes.io/name: IngressMonitorController + app.kubernetes.io/managed-by: kustomize + name: allow-metrics-traffic + namespace: system +spec: + podSelector: + matchLabels: + control-plane: controller-manager + policyTypes: + - Ingress + ingress: + # This allows ingress traffic from any namespace with the label metrics: enabled + - from: + - namespaceSelector: + matchLabels: + metrics: enabled # Only from namespaces with this label + ports: + - port: 8443 + protocol: TCP \ No newline at end of file diff --git a/config/network-policy/allow-webhook-traffic.yaml b/config/network-policy/allow-webhook-traffic.yaml new file mode 100644 index 000000000..4f7e551a3 --- /dev/null +++ b/config/network-policy/allow-webhook-traffic.yaml @@ -0,0 +1,26 @@ +# This NetworkPolicy allows ingress traffic to your webhook server running +# as part of the controller-manager from specific namespaces and pods. CR(s) which uses webhooks +# will only work when applied in namespaces labeled with 'webhook: enabled' +apiVersion: networking.k8s.io/v1 +kind: NetworkPolicy +metadata: + labels: + app.kubernetes.io/name: IngressMonitorController + app.kubernetes.io/managed-by: kustomize + name: allow-webhook-traffic + namespace: system +spec: + podSelector: + matchLabels: + control-plane: controller-manager + policyTypes: + - Ingress + ingress: + # This allows ingress traffic from any namespace with the label webhook: enabled + - from: + - namespaceSelector: + matchLabels: + webhook: enabled # Only from namespaces with this label + ports: + - port: 443 + protocol: TCP \ No newline at end of file diff --git a/config/network-policy/kustomization.yaml b/config/network-policy/kustomization.yaml new file mode 100644 index 000000000..92f0c55a2 --- /dev/null +++ b/config/network-policy/kustomization.yaml @@ -0,0 +1,3 @@ +resources: +- allow-webhook-traffic.yaml +- allow-metrics-traffic.yaml \ No newline at end of file diff --git a/config/prometheus/monitor.yaml b/config/prometheus/monitor.yaml index d19136ae7..4453ba141 100644 --- a/config/prometheus/monitor.yaml +++ b/config/prometheus/monitor.yaml @@ -10,10 +10,19 @@ metadata: spec: endpoints: - path: /metrics - port: https + port: https # Ensure this is the name of the port that exposes HTTPS metrics scheme: https bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token tlsConfig: + # TODO(user): The option insecureSkipVerify: true is not recommended for production since it disables + # certificate verification. This poses a significant security risk by making the system vulnerable to + # man-in-the-middle attacks, where an attacker could intercept and manipulate the communication between + # Prometheus and the monitored services. This could lead to unauthorized access to sensitive metrics data, + # compromising the integrity and confidentiality of the information. + # Please use the following options for secure configurations: + # caFile: /etc/metrics-certs/ca.crt + # certFile: /etc/metrics-certs/tls.crt + # keyFile: /etc/metrics-certs/tls.key insecureSkipVerify: true selector: matchLabels: diff --git a/config/rbac/auth_proxy_role.yaml b/config/rbac/auth_proxy_role.yaml deleted file mode 100644 index 618f5e417..000000000 --- a/config/rbac/auth_proxy_role.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: proxy-role -rules: -- apiGroups: ["authentication.k8s.io"] - resources: - - tokenreviews - verbs: ["create"] -- apiGroups: ["authorization.k8s.io"] - resources: - - subjectaccessreviews - verbs: ["create"] diff --git a/config/rbac/auth_proxy_service.yaml b/config/rbac/auth_proxy_service.yaml deleted file mode 100644 index 6cf656be1..000000000 --- a/config/rbac/auth_proxy_service.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - labels: - control-plane: controller-manager - name: controller-manager-metrics-service - namespace: system -spec: - ports: - - name: https - port: 8443 - targetPort: https - selector: - control-plane: controller-manager diff --git a/config/rbac/kustomization.yaml b/config/rbac/kustomization.yaml index d8a23b26d..8744e3216 100644 --- a/config/rbac/kustomization.yaml +++ b/config/rbac/kustomization.yaml @@ -10,11 +10,12 @@ resources: - secret_viewer_role_binding.yaml - role_binding.yaml - leader_election_role.yaml -- leader_election_role_binding.yaml -# Comment the following 4 lines if you want to disable -# the auth proxy (https://github.com/brancz/kube-rbac-proxy) -# which protects your /metrics endpoint. -- auth_proxy_service.yaml -- auth_proxy_role.yaml -- auth_proxy_role_binding.yaml -- auth_proxy_client_clusterrole.yaml +# The following RBAC configurations are used to protect +# the metrics endpoint with authn/authz. These configurations +# ensure that only authorized users and service accounts +# can access the metrics endpoint. Comment the following +# permissions if you want to disable this protection. +# More info: https://book.kubebuilder.io/reference/metrics.html +- metrics_auth_role.yaml +- metrics_auth_role_binding.yaml +- metrics_reader_role.yaml diff --git a/config/rbac/metrics_auth_role.yaml b/config/rbac/metrics_auth_role.yaml new file mode 100644 index 000000000..2ba875039 --- /dev/null +++ b/config/rbac/metrics_auth_role.yaml @@ -0,0 +1,17 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: metrics-auth-role +rules: + - apiGroups: + - authentication.k8s.io + resources: + - tokenreviews + verbs: + - create + - apiGroups: + - authorization.k8s.io + resources: + - subjectaccessreviews + verbs: + - create \ No newline at end of file diff --git a/config/rbac/auth_proxy_role_binding.yaml b/config/rbac/metrics_auth_role_binding.yaml similarity index 53% rename from config/rbac/auth_proxy_role_binding.yaml rename to config/rbac/metrics_auth_role_binding.yaml index ec7acc0a1..c7063d7b3 100644 --- a/config/rbac/auth_proxy_role_binding.yaml +++ b/config/rbac/metrics_auth_role_binding.yaml @@ -1,12 +1,12 @@ apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: - name: proxy-rolebinding + name: metrics-auth-rolebinding roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole - name: proxy-role + name: metrics-auth-role subjects: -- kind: ServiceAccount - name: controller-manager - namespace: system + - kind: ServiceAccount + name: controller-manager + namespace: system \ No newline at end of file diff --git a/config/rbac/auth_proxy_client_clusterrole.yaml b/config/rbac/metrics_reader_role.yaml similarity index 66% rename from config/rbac/auth_proxy_client_clusterrole.yaml rename to config/rbac/metrics_reader_role.yaml index bd4af137a..50fbca545 100644 --- a/config/rbac/auth_proxy_client_clusterrole.yaml +++ b/config/rbac/metrics_reader_role.yaml @@ -3,5 +3,7 @@ kind: ClusterRole metadata: name: metrics-reader rules: -- nonResourceURLs: ["/metrics"] - verbs: ["get"] +- nonResourceURLs: + - "/metrics" + verbs: + - get \ No newline at end of file diff --git a/config/rbac/role.yaml b/config/rbac/role.yaml index d17e1fb68..0387e1d14 100644 --- a/config/rbac/role.yaml +++ b/config/rbac/role.yaml @@ -2,19 +2,12 @@ apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: - creationTimestamp: null name: manager-role rules: - apiGroups: - "" resources: - pods - verbs: - - get - - list -- apiGroups: - - "" - resources: - services verbs: - get @@ -41,14 +34,6 @@ rules: - get - patch - update -- apiGroups: - - extensions - resources: - - ingresses - verbs: - - get - - list - - watch - apiGroups: - networking.k8s.io resources: diff --git a/cover.out, b/cover.out, new file mode 100644 index 000000000..3c1a3ffa8 --- /dev/null +++ b/cover.out, @@ -0,0 +1,1312 @@ +mode: set +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/endpointmonitor_types.go:462.13,464.2 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:28.67,30.2 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:33.60,34.15 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:34.15,36.3 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:37.2,39.12 3 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:43.63,49.2 5 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:52.56,53.15 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:53.15,55.3 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:56.2,58.12 3 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:62.60,63.34 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:63.34,65.3 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:66.2,66.12 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:70.71,74.21 4 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:74.21,77.22 3 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:77.22,79.4 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:84.64,85.15 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:85.15,87.3 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:88.2,90.12 3 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:94.64,95.34 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:95.34,97.3 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:98.2,98.12 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:102.71,104.23 2 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:104.23,108.3 3 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:109.2,109.33 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:109.33,113.3 3 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:114.2,114.28 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:114.28,118.3 3 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:119.2,119.28 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:119.28,123.3 3 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:124.2,124.32 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:124.32,128.3 3 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:129.2,129.29 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:129.29,133.3 3 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:134.2,134.40 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:134.40,138.3 3 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:139.2,139.33 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:139.33,143.3 3 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:144.2,144.28 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:144.28,148.3 3 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:149.2,149.29 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:149.29,153.3 3 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:157.64,158.15 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:158.15,160.3 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:161.2,163.12 3 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:167.75,169.2 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:172.68,173.15 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:173.15,175.3 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:176.2,178.12 3 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:182.57,184.2 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:187.50,188.15 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:188.15,190.3 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:191.2,193.12 3 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:197.59,199.22 2 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:199.22,203.3 3 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:207.52,208.15 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:208.15,210.3 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:211.2,213.12 3 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:217.65,219.2 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:222.58,223.15 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:223.15,225.3 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:226.2,228.12 3 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:232.59,234.2 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:237.52,238.15 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:238.15,240.3 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:241.2,243.12 3 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:247.55,249.20 2 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:249.20,252.29 3 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:252.29,254.4 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:259.48,260.15 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:260.15,262.3 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:263.2,265.12 3 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:269.81,271.21 2 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:271.21,274.22 3 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:274.22,276.4 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:278.2,278.20 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:278.20,282.3 3 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:286.74,287.15 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:287.15,289.3 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:290.2,292.12 3 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:296.61,298.2 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:301.54,302.15 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:302.15,304.3 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:305.2,307.12 3 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:311.65,313.2 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:316.58,317.15 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:317.15,319.3 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:320.2,322.12 3 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:326.51,328.26 2 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:328.26,332.3 3 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:333.2,333.24 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:333.24,337.3 3 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:341.44,342.15 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:342.15,344.3 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:345.2,347.12 3 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:351.57,353.2 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:356.50,357.15 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:357.15,359.3 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:360.2,362.12 3 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:366.57,368.2 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:371.50,372.15 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:372.15,374.3 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:375.2,377.12 3 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:381.67,383.2 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:386.60,387.15 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:387.15,389.3 1 0 +github.com/stakater/IngressMonitorController/v2/api/v1alpha1/zz_generated.deepcopy.go:390.2,392.12 3 0 +github.com/stakater/IngressMonitorController/v2/cmd/main.go:51.13,56.22 3 0 +github.com/stakater/IngressMonitorController/v2/cmd/main.go:56.22,58.3 1 0 +github.com/stakater/IngressMonitorController/v2/cmd/main.go:62.13,91.38 14 0 +github.com/stakater/IngressMonitorController/v2/cmd/main.go:91.38,94.3 2 0 +github.com/stakater/IngressMonitorController/v2/cmd/main.go:95.2,95.18 1 0 +github.com/stakater/IngressMonitorController/v2/cmd/main.go:95.18,97.3 1 0 +github.com/stakater/IngressMonitorController/v2/cmd/main.go:103.2,115.19 2 0 +github.com/stakater/IngressMonitorController/v2/cmd/main.go:115.19,121.3 1 0 +github.com/stakater/IngressMonitorController/v2/cmd/main.go:123.2,132.16 6 0 +github.com/stakater/IngressMonitorController/v2/cmd/main.go:132.16,134.3 1 0 +github.com/stakater/IngressMonitorController/v2/cmd/main.go:136.2,148.43 3 0 +github.com/stakater/IngressMonitorController/v2/cmd/main.go:148.43,153.3 2 0 +github.com/stakater/IngressMonitorController/v2/cmd/main.go:153.8,155.3 1 0 +github.com/stakater/IngressMonitorController/v2/cmd/main.go:157.2,157.88 1 0 +github.com/stakater/IngressMonitorController/v2/cmd/main.go:157.88,159.33 2 0 +github.com/stakater/IngressMonitorController/v2/cmd/main.go:159.33,161.4 1 0 +github.com/stakater/IngressMonitorController/v2/cmd/main.go:162.3,162.33 1 0 +github.com/stakater/IngressMonitorController/v2/cmd/main.go:165.2,166.16 2 0 +github.com/stakater/IngressMonitorController/v2/cmd/main.go:166.16,169.3 2 0 +github.com/stakater/IngressMonitorController/v2/cmd/main.go:172.2,180.64 3 0 +github.com/stakater/IngressMonitorController/v2/cmd/main.go:180.64,183.3 2 0 +github.com/stakater/IngressMonitorController/v2/cmd/main.go:186.2,186.69 1 0 +github.com/stakater/IngressMonitorController/v2/cmd/main.go:186.69,189.3 2 0 +github.com/stakater/IngressMonitorController/v2/cmd/main.go:190.2,190.67 1 0 +github.com/stakater/IngressMonitorController/v2/cmd/main.go:190.67,193.3 2 0 +github.com/stakater/IngressMonitorController/v2/cmd/main.go:195.2,196.61 2 0 +github.com/stakater/IngressMonitorController/v2/cmd/main.go:196.61,199.3 2 0 +github.com/stakater/IngressMonitorController/v2/cmd/main.go:202.42,209.12 3 0 +github.com/stakater/IngressMonitorController/v2/cmd/main.go:209.12,211.3 1 0 +github.com/stakater/IngressMonitorController/v2/cmd/main.go:212.2,212.16 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_controller.go:59.107,67.16 5 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_controller.go:67.16,70.3 2 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_controller.go:70.8,72.3 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_controller.go:74.2,75.16 2 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_controller.go:75.16,76.29 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_controller.go:76.29,81.4 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_controller.go:83.3,83.33 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_controller.go:87.2,92.20 5 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_controller.go:92.20,95.3 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_controller.go:95.8,97.30 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_controller.go:97.30,101.4 2 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_controller.go:102.3,102.67 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_controller.go:104.2,104.78 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_controller.go:108.107,115.2 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_controller.go:117.134,118.33 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_controller.go:118.33,119.37 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_controller.go:121.2,121.42 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_controller.go:121.42,123.3 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_controller.go:124.2,124.31 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_controller.go:124.31,126.3 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_controller.go:127.2,127.35 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_controller.go:127.35,129.3 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_controller.go:130.2,130.34 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_controller.go:130.34,132.3 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_controller.go:133.2,133.30 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_controller.go:133.30,135.3 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_controller.go:136.2,136.30 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_controller.go:136.30,138.3 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_controller.go:139.2,139.35 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_controller.go:139.35,141.3 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_controller.go:142.2,142.30 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_controller.go:142.30,144.3 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_controller.go:145.2,145.31 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_controller.go:145.31,147.3 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_controller.go:149.2,149.29 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_controller.go:152.111,153.51 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_controller.go:153.51,154.46 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_controller.go:154.46,156.4 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_controller.go:158.2,159.12 2 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_created.go:12.200,18.16 4 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_created.go:18.16,20.3 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_created.go:23.2,31.12 4 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_deleted.go:11.174,13.21 2 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_deleted.go:13.21,16.3 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_deleted.go:18.2,18.57 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_deleted.go:18.57,21.3 2 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_deleted.go:24.2,25.49 2 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_deleted.go:25.49,27.3 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_deleted.go:28.2,28.30 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_deleted.go:28.30,31.3 2 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_deleted.go:32.2,32.32 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_deleted.go:35.125,40.20 3 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_deleted.go:40.20,44.3 2 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_deleted.go:44.8,46.3 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_updated.go:12.204,14.16 2 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_updated.go:14.16,16.3 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_updated.go:19.2,25.52 3 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_updated.go:25.52,27.3 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_updated.go:28.2,28.12 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_util.go:8.106,12.20 2 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_util.go:12.20,14.3 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_util.go:15.2,15.12 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_util.go:19.146,21.49 2 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_util.go:21.49,23.21 2 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_util.go:23.21,25.4 1 0 +github.com/stakater/IngressMonitorController/v2/internal/controller/endpointmonitor_util.go:27.2,27.30 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/util/url.go:20.115,21.39 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/util/url.go:21.39,23.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/util/url.go:24.2,24.40 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/util/url.go:24.40,26.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/util/url.go:27.2,27.49 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/util/url.go:27.49,29.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/util/url.go:30.2,30.37 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/util/url.go:33.182,36.16 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/util/url.go:36.16,39.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/util/url.go:41.2,42.63 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/util/url.go:45.176,48.16 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/util/url.go:48.16,51.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/util/url.go:53.2,54.61 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/util/url.go:57.121,59.20 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/util/url.go:59.20,62.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/util/url.go:64.2,64.31 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/util/url.go:64.31,68.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/util/url.go:68.8,68.56 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/util/url.go:68.56,72.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/util/url.go:75.2,77.88 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/kube.go:22.40,26.26 4 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/kube.go:26.26,28.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/kube.go:30.2,30.51 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/kube.go:30.51,32.17 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/kube.go:32.17,34.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/kube.go:35.8,38.17 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/kube.go:38.17,40.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/kube.go:42.2,42.16 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/kube.go:42.16,44.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/kube.go:46.2,46.20 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/kube.go:50.49,52.16 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/kube.go:52.16,54.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/kube.go:55.2,55.40 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/kube.go:59.41,60.44 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/kube.go:60.44,62.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/kube.go:63.2,63.14 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/kube.go:67.25,69.16 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/kube.go:69.16,72.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/kube.go:74.2,75.16 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/kube.go:75.16,78.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/kube.go:80.2,82.16 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/kube.go:82.16,85.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/kube.go:86.2,86.29 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/kube.go:86.29,87.38 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/kube.go:87.38,90.4 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/kube.go:92.2,93.14 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/kube.go:96.45,99.39 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/kube.go:99.39,102.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/kube.go:103.2,103.26 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/config/config.go:39.51,47.51 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/config/config.go:47.51,49.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/config/config.go:51.2,52.16 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/config/config.go:52.16,54.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/config/config.go:55.2,57.12 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/config/config.go:104.52,110.33 4 0 +github.com/stakater/IngressMonitorController/v2/pkg/config/config.go:110.33,112.17 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/config/config.go:112.17,114.45 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/config/config.go:116.3,116.44 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/config/config.go:119.2,120.32 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/config/config.go:120.32,123.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/config/config.go:126.2,127.16 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/config/config.go:127.16,128.13 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/config/config.go:132.2,133.16 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/config/config.go:133.16,134.13 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/config/config.go:136.2,136.41 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/config/config.go:139.35,141.2 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/config/config.go:143.39,145.30 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/config/config.go:145.30,147.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/config/config.go:149.2,151.15 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/config/config.go:154.41,159.16 4 1 +github.com/stakater/IngressMonitorController/v2/pkg/config/config.go:159.16,160.13 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/config/config.go:164.2,165.16 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/config/config.go:165.16,166.13 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/config/config.go:168.2,169.15 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/config/config.go:174.37,177.35 3 1 +github.com/stakater/IngressMonitorController/v2/pkg/config/config.go:177.35,179.17 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/config/config.go:179.17,181.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/config/config.go:183.2,184.15 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/http/httpClient.go:23.47,26.2 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/http/httpClient.go:28.88,29.34 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/http/httpClient.go:29.34,31.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/http/httpClient.go:34.119,40.16 3 1 +github.com/stakater/IngressMonitorController/v2/pkg/http/httpClient.go:40.16,44.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/http/httpClient.go:46.2,46.20 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/http/httpClient.go:46.20,48.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/http/httpClient.go:50.2,51.16 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/http/httpClient.go:51.16,53.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/http/httpClient.go:53.8,53.28 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/http/httpClient.go:53.28,55.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/http/httpClient.go:57.2,66.21 5 1 +github.com/stakater/IngressMonitorController/v2/pkg/http/httpClient.go:69.97,71.2 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/http/httpClient.go:73.94,76.2 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/http/httpClient.go:78.95,80.2 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/http/httpClient.go:82.94,84.2 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/http/httpClient.go:86.76,92.2 4 0 +github.com/stakater/IngressMonitorController/v2/pkg/models/monitor-models.go:10.95,17.2 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/ingress-wrapper.go:22.83,27.2 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/ingress-wrapper.go:29.46,30.119 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/ingress-wrapper.go:30.119,32.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/ingress-wrapper.go:33.2,33.14 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/ingress-wrapper.go:36.73,37.22 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/ingress-wrapper.go:37.22,39.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/ingress-wrapper.go:41.2,41.16 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/ingress-wrapper.go:41.16,43.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/ingress-wrapper.go:45.2,45.18 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/ingress-wrapper.go:48.44,50.2 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/ingress-wrapper.go:52.45,54.2 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/ingress-wrapper.go:56.54,58.22 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/ingress-wrapper.go:58.22,59.31 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/ingress-wrapper.go:59.31,69.4 5 1 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/ingress-wrapper.go:71.2,71.11 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/ingress-wrapper.go:74.81,75.22 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/ingress-wrapper.go:75.22,78.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/ingress-wrapper.go:80.2,82.58 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/ingress-wrapper.go:82.58,84.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/ingress-wrapper.go:84.8,86.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/ingress-wrapper.go:89.2,91.16 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/ingress-wrapper.go:91.16,94.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/ingress-wrapper.go:96.2,96.30 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/ingress-wrapper.go:96.30,98.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/ingress-wrapper.go:98.8,107.13 4 1 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/ingress-wrapper.go:107.13,109.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/ingress-wrapper.go:111.2,111.19 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/ingress-wrapper.go:114.55,120.66 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/ingress-wrapper.go:120.66,122.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/ingress-wrapper.go:123.2,123.18 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/ingress-wrapper.go:126.76,129.13 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/ingress-wrapper.go:129.13,131.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/ingress-wrapper.go:133.2,135.16 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/ingress-wrapper.go:135.16,138.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/ingress-wrapper.go:140.2,148.16 5 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/ingress-wrapper.go:148.16,150.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/ingress-wrapper.go:150.8,150.35 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/ingress-wrapper.go:150.35,155.30 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/ingress-wrapper.go:155.30,156.96 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/ingress-wrapper.go:156.96,158.5 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/ingress-wrapper.go:159.9,161.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/ingress-wrapper.go:164.2,164.18 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/routeWrapper.go:24.80,29.2 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/routeWrapper.go:31.44,33.2 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/routeWrapper.go:35.71,36.22 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/routeWrapper.go:36.22,38.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/routeWrapper.go:40.2,40.16 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/routeWrapper.go:40.16,42.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/routeWrapper.go:44.2,44.18 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/routeWrapper.go:47.42,49.2 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/routeWrapper.go:51.50,53.2 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/routeWrapper.go:55.53,56.33 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/routeWrapper.go:56.33,58.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/routeWrapper.go:59.2,59.18 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/routeWrapper.go:62.72,64.13 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/routeWrapper.go:64.13,66.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/routeWrapper.go:68.2,70.16 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/routeWrapper.go:70.16,73.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/routeWrapper.go:75.2,83.16 5 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/routeWrapper.go:83.16,85.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/routeWrapper.go:85.8,85.35 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/routeWrapper.go:85.35,89.30 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/routeWrapper.go:89.30,90.96 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/routeWrapper.go:90.96,92.5 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/routeWrapper.go:93.9,95.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/routeWrapper.go:98.2,98.18 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/routeWrapper.go:101.79,104.58 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/routeWrapper.go:104.58,106.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/routeWrapper.go:106.8,108.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/routeWrapper.go:111.2,113.16 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/routeWrapper.go:113.16,116.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/routeWrapper.go:118.2,118.30 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/routeWrapper.go:118.30,120.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/routeWrapper.go:120.8,128.13 3 1 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/routeWrapper.go:128.13,130.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/routeWrapper.go:132.2,133.16 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/routeWrapper.go:133.16,136.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/kube/wrappers/routeWrapper.go:137.2,137.13 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:80.28,94.2 6 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:96.108,99.2 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:102.77,117.36 11 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:117.36,118.59 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:118.59,120.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:120.9,123.4 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:126.2,127.16 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:127.16,130.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:132.2,142.16 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:142.16,145.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:147.2,150.32 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:150.32,152.17 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:152.17,155.4 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:156.3,156.65 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:159.2,159.54 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:164.71,171.19 4 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:171.19,173.17 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:173.17,175.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:177.3,177.33 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:177.33,184.4 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:186.2,186.17 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:192.100,196.16 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:196.16,197.48 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:197.48,198.44 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:198.44,200.5 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:202.3,202.145 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:204.2,208.8 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:213.73,219.16 5 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:219.16,221.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:221.8,223.33 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:223.33,228.18 5 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:228.18,230.5 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:231.4,231.132 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:238.76,245.16 5 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:245.16,247.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:247.8,249.33 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:249.33,254.18 5 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:254.18,256.5 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:257.4,257.135 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:263.76,268.16 4 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:268.16,270.26 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:270.26,271.44 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:271.44,273.5 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:275.3,275.149 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:276.8,278.33 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:278.33,282.18 4 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:282.18,284.28 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:284.28,285.46 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:285.46,287.7 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:289.5,289.142 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:291.4,291.134 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:297.114,308.16 8 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:308.16,310.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:311.2,330.3 3 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:335.122,346.36 8 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:346.36,351.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:353.2,353.35 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:353.35,357.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/appinsights-monitor.go:359.2,382.3 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/util.go:13.67,14.97 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/util.go:14.97,16.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/util.go:17.2,17.14 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/util.go:21.101,29.26 5 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/util.go:29.26,31.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/util.go:33.2,33.24 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/util.go:33.24,37.3 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/util.go:39.2,39.13 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/util.go:42.39,45.16 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/util.go:45.16,47.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/util.go:48.2,48.28 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/util.go:52.91,54.30 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/util.go:54.30,59.3 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/util.go:60.2,60.21 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/util.go:64.61,71.60 3 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/util.go:71.60,73.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/util.go:73.8,75.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/util.go:78.2,78.27 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/util.go:78.27,80.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/util.go:80.8,82.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/util.go:85.2,85.59 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/util.go:85.59,87.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/util.go:87.8,89.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/appinsights/util.go:91.2,91.15 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-proxy.go:38.49,40.2 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-proxy.go:42.73,44.15 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-proxy.go:45.23,46.51 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-proxy.go:47.19,48.48 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-proxy.go:49.30,50.70 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-proxy.go:51.22,52.54 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-proxy.go:53.18,54.46 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-proxy.go:55.18,56.46 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-proxy.go:57.23,58.56 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-proxy.go:59.18,60.40 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-proxy.go:61.19,62.48 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-proxy.go:63.10,64.44 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-proxy.go:66.2,66.12 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-proxy.go:69.108,71.24 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-proxy.go:72.23,73.34 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-proxy.go:74.19,75.30 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-proxy.go:76.30,77.41 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-proxy.go:78.22,79.33 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-proxy.go:80.18,81.29 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-proxy.go:82.18,83.29 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-proxy.go:84.23,85.34 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-proxy.go:86.18,87.29 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-proxy.go:88.19,89.30 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-proxy.go:90.10,91.16 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-proxy.go:93.2,93.15 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-proxy.go:96.57,98.2 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-proxy.go:100.58,102.2 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-proxy.go:104.80,106.2 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-proxy.go:108.54,110.2 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-proxy.go:112.97,114.2 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-proxy.go:116.57,118.2 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-proxy.go:120.57,122.2 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-service.go:20.68,25.2 4 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-service.go:27.91,28.24 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-service.go:28.24,29.59 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-service.go:32.2,34.50 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-service.go:34.50,37.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-service.go:39.2,39.24 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-service.go:42.95,43.24 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-service.go:43.24,44.59 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-service.go:47.2,52.50 4 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-service.go:52.50,53.56 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-service.go:53.56,56.4 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-service.go:59.2,59.24 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-service.go:62.46,63.24 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-service.go:63.24,64.15 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-service.go:64.15,66.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/monitor-service.go:68.2,68.14 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:30.97,33.2 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:35.64,40.16 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:40.16,42.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:42.8,44.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:45.2,45.53 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:48.92,53.6 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:53.6,55.27 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:55.27,56.9 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:58.3,58.17 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:58.17,60.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:61.3,61.44 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:61.44,64.4 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:67.2,67.71 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:70.69,76.6 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:76.6,78.27 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:78.27,79.9 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:81.3,81.17 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:81.17,84.4 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:85.3,85.69 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:88.2,88.17 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:91.60,93.16 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:93.16,96.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:98.2,100.22 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:100.22,101.27 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:101.27,103.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:103.9,103.35 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:103.35,105.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:105.9,108.4 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:109.8,111.17 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:111.17,114.4 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:117.2,119.65 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:119.65,121.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:123.2,144.16 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:144.16,147.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:149.2,149.48 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:152.63,154.16 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:154.16,156.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:158.2,159.16 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:159.16,162.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:164.2,164.79 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:164.79,167.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:169.2,171.22 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:171.22,172.27 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:172.27,174.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:174.9,174.35 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:174.35,176.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:176.9,179.4 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:180.8,182.17 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:182.17,185.4 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:188.2,195.16 5 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:195.16,198.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:200.2,200.87 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:203.63,207.16 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:207.16,210.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:211.2,211.46 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:214.101,221.11 6 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:221.11,223.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:223.8,225.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:227.2,227.54 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:227.54,229.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/gcloud/gcloud-monitor.go:231.2,241.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:33.104,36.2 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:38.64,50.16 8 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:50.16,52.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:55.87,59.31 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:59.31,60.23 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:60.23,62.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:65.2,65.75 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:68.65,72.16 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:72.16,75.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:76.2,76.29 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:76.29,83.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:85.2,85.17 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:88.61,92.16 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:92.16,94.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:94.8,96.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:99.64,104.16 4 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:104.16,106.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:106.8,108.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:111.64,115.16 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:115.16,117.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:117.8,119.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:122.97,125.16 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:125.16,127.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:129.2,129.27 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:129.27,131.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:131.8,133.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:135.2,141.36 4 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:141.36,144.69 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:144.69,146.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:146.9,148.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:151.2,151.40 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:151.40,154.83 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:154.83,156.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:156.9,158.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:161.2,161.40 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:161.40,164.85 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:164.85,166.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:166.9,168.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:171.2,173.18 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:176.110,182.69 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:182.69,185.69 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:185.69,187.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:187.9,189.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:192.2,192.73 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:192.73,195.83 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:195.83,197.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:197.9,199.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:202.2,202.73 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:202.73,205.102 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:205.102,207.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:207.9,209.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:212.2,212.60 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:212.60,214.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:214.8,216.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:218.2,218.74 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:218.74,220.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:220.8,222.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:224.2,224.69 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:224.69,227.17 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:227.17,229.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:231.2,231.75 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:231.75,233.34 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:233.34,236.18 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:236.18,238.5 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:240.4,240.39 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:240.39,241.49 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:241.49,243.6 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:244.10,246.5 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:248.9,250.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:253.2,253.68 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:253.68,258.26 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:258.26,262.4 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:262.9,264.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:267.2,267.68 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:267.68,269.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:272.2,272.59 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:272.59,273.50 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:273.50,275.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:275.9,277.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:280.2,280.27 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:280.27,284.45 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:284.45,286.27 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:286.27,288.5 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:288.10,290.5 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:295.2,297.63 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:297.63,298.43 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:298.43,300.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:300.9,302.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:305.2,305.27 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdom/pingdom-monitor.go:305.27,308.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:43.115,46.2 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:48.75,56.28 7 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:56.28,58.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:59.2,63.16 5 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:63.16,65.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:66.2,67.58 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:70.98,74.31 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:74.31,75.23 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:75.23,77.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:80.2,80.73 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:83.76,86.16 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:86.16,89.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:91.2,91.19 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:91.19,93.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:94.2,94.41 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:94.41,101.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:102.2,102.17 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:105.83,107.16 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:107.16,110.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:111.2,111.18 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:111.18,113.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:114.2,114.40 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:114.40,115.30 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:115.30,117.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:119.2,119.11 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:122.72,124.29 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:124.29,126.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:127.2,128.16 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:128.16,130.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:130.8,132.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:135.75,137.29 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:137.29,139.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:140.2,142.16 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:142.16,145.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:146.2,146.72 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:149.75,151.16 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:151.16,153.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:153.8,155.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:158.124,161.27 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:161.27,165.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:166.2,169.20 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:169.20,171.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:172.2,173.27 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:173.27,175.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:176.2,177.30 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:177.30,179.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:180.2,182.25 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:185.147,191.27 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:191.27,200.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:203.2,204.20 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:204.20,206.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:207.2,208.30 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:208.30,210.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:211.2,212.27 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:212.27,214.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:217.2,217.40 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:217.40,219.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:220.2,220.33 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:220.33,222.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:223.2,223.49 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:223.49,225.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:226.2,226.27 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:226.27,228.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:229.2,229.34 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:229.34,231.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:232.2,232.40 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:232.40,234.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:235.2,235.33 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:235.33,237.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:238.2,238.44 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:238.44,240.18 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:240.18,245.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:245.9,247.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:263.113,266.16 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:266.16,269.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:270.2,272.16 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:272.16,275.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:277.2,278.16 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:278.16,281.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:282.2,282.18 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:288.115,289.17 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:289.17,291.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:293.2,293.44 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:293.44,294.19 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:294.19,296.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:297.3,298.42 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:298.42,301.18 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:301.18,303.5 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:304.4,304.24 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:306.3,306.13 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:309.2,309.52 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:309.52,311.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:312.2,312.49 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:312.49,314.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:316.2,316.12 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:320.80,325.23 4 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:325.23,327.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:328.2,328.15 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:332.110,334.16 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:334.16,336.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:338.2,339.9 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:339.9,341.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:343.2,343.33 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:347.37,348.20 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:348.20,351.17 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:351.17,354.4 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:355.3,355.13 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:357.2,357.12 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:362.52,365.16 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:365.16,368.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:370.2,371.68 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:371.68,374.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:376.2,376.50 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:376.50,378.55 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:378.55,379.50 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:379.50,381.5 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/pingdomtransaction/pingdom-transaction-monitor.go:385.2,385.26 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-mappers.go:11.98,26.2 12 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-mappers.go:28.104,31.55 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-mappers.go:31.55,33.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-mappers.go:35.2,35.17 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:35.103,39.96 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:39.96,42.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:43.2,43.13 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:46.63,50.2 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:52.86,56.35 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:56.35,57.27 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:57.27,59.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:62.2,64.37 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:67.64,78.11 9 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:78.11,80.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:83.2,83.18 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:83.18,88.43 5 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:88.43,91.4 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:93.3,94.17 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:94.17,96.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:97.3,99.16 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:101.2,102.60 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:105.60,119.16 10 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:119.16,123.43 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:123.43,127.18 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:127.18,129.5 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:131.4,131.17 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:131.17,133.5 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:133.10,137.5 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:138.9,140.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:141.8,143.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:147.63,163.16 11 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:163.16,166.43 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:166.43,169.18 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:169.18,171.5 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:172.4,172.17 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:172.17,174.5 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:174.10,176.5 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:177.9,179.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:180.8,182.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:185.63,198.42 8 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:198.42,201.17 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:201.17,203.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:204.3,204.16 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:204.16,206.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:206.9,208.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:209.8,211.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:214.69,224.58 6 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:224.58,226.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:226.8,228.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:231.2,231.65 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:231.65,233.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:233.8,237.3 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:239.2,239.64 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:239.64,241.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:241.8,243.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:245.2,245.60 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:245.60,247.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptime/uptime-monitor.go:249.2,249.13 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:35.51,37.25 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:37.25,39.17 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:39.17,41.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:42.3,42.21 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:44.2,44.21 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:47.71,54.16 7 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:54.16,57.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:58.2,61.42 3 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:61.42,63.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:63.8,65.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:68.76,71.16 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:71.16,74.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:75.2,76.16 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:76.16,79.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:81.2,82.31 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:82.31,83.40 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:83.40,84.51 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:84.51,85.37 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:85.37,87.6 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:90.3,100.5 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:102.2,102.17 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:105.137,108.16 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:108.16,110.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:112.2,117.27 6 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:117.27,119.44 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:119.44,121.4 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:122.3,122.35 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:122.35,124.4 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:125.3,125.37 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:125.37,127.42 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:127.42,128.50 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:128.50,129.35 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:129.35,131.7 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:134.4,134.32 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:139.2,140.36 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:140.36,142.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:144.2,145.16 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:145.16,147.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:149.2,165.8 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:169.67,172.16 3 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:172.16,175.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:178.2,179.16 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:179.16,182.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:184.2,184.92 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:187.70,189.16 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:189.16,192.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:193.2,194.16 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:194.16,197.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:198.2,199.16 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:199.16,202.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:204.2,205.16 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:205.16,208.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:210.2,210.90 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:213.87,215.29 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:215.29,216.21 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:216.21,218.4 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:221.2,221.71 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:224.70,227.16 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:227.16,230.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:231.2,232.16 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:232.16,235.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/grafana/grafana-monitor.go:239.104,241.2 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/secret/secrets.go:15.101,18.16 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/secret/secrets.go:18.16,20.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/secret/secrets.go:22.2,23.9 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/secret/secrets.go:23.9,25.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/secret/secrets.go:26.2,26.28 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/secret/secrets.go:29.105,32.16 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/secret/secrets.go:32.16,34.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/secret/secrets.go:36.2,36.38 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/secret/secrets.go:36.38,37.14 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/secret/secrets.go:38.19,39.28 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/secret/secrets.go:40.19,41.28 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/secret/secrets.go:42.11,43.83 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/secret/secrets.go:47.2,47.20 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/secret/secrets.go:47.20,49.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/secret/secrets.go:49.8,49.27 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/secret/secrets.go:49.27,51.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/secret/secrets.go:51.8,51.45 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/secret/secrets.go:51.45,53.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/secret/secrets.go:55.2,55.32 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/util/template-utils.go:17.65,18.24 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/util/template-utils.go:18.24,20.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/util/template-utils.go:21.2,24.16 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/util/template-utils.go:24.16,26.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/util/template-utils.go:28.2,30.16 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/util/template-utils.go:30.16,32.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/util/template-utils.go:33.2,33.29 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/util/test-helpers.go:13.42,14.15 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/util/test-helpers.go:14.15,15.31 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/util/test-helpers.go:15.31,17.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/util/test-helpers.go:19.2,19.5 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/util/test-helpers.go:22.88,38.2 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/util/test-helpers.go:41.87,52.2 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/util/test-helpers.go:54.88,55.54 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/util/test-helpers.go:55.54,56.28 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/util/test-helpers.go:56.28,58.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/util/test-helpers.go:61.2,61.12 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/util/util.go:9.53,12.42 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/util/util.go:12.42,14.17 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/util/util.go:14.17,16.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/util/util.go:17.3,17.40 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/util/util.go:20.2,20.22 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/util/util.go:23.57,26.42 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/util/util.go:26.42,28.17 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/util/util.go:28.17,30.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/util/util.go:31.3,31.40 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/util/util.go:34.2,34.22 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/util/util.go:37.41,40.36 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/util/util.go:40.36,43.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/util/util.go:45.2,45.20 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/util/util.go:48.39,49.22 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/util/util.go:49.22,50.13 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/util/util.go:50.13,52.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/util/util.go:54.2,54.14 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/util/util.go:57.48,58.22 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/util/util.go:58.22,59.13 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/util/util.go:59.13,61.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/util/util.go:63.2,63.14 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/util/util.go:66.50,71.2 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/util/util.go:73.35,76.16 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/util/util.go:76.16,78.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/util/util.go:79.2,79.14 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-mappers.go:12.104,22.2 8 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-mappers.go:25.113,35.2 8 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-mappers.go:38.109,40.45 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-mappers.go:40.45,42.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-mappers.go:43.2,43.17 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:39.107,44.42 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:44.42,48.3 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:48.8,50.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:54.66,63.59 6 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:63.59,65.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:65.8,67.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:69.2,69.63 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:69.63,71.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:71.8,73.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:75.2,75.67 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:75.67,77.47 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:77.47,79.4 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:80.8,81.19 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:81.19,83.48 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:83.48,85.5 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:89.2,89.63 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:89.63,91.36 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:91.36,93.4 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:96.2,96.62 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:96.62,98.34 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:98.34,100.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:103.2,103.68 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:103.68,108.22 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:108.22,112.4 3 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:112.9,114.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:117.2,117.70 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:117.70,119.17 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:119.17,120.14 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:123.3,126.17 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:126.17,128.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:128.9,132.4 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:135.2,135.66 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:135.66,138.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:138.8,204.3 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:206.2,206.27 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:206.27,207.28 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:207.28,209.4 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:210.3,210.36 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:210.36,212.4 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:213.3,213.36 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:213.36,215.4 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:225.2,225.61 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:225.61,227.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:228.2,228.54 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:228.54,230.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:231.2,231.62 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:231.62,233.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:234.2,234.65 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:234.65,236.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:237.2,237.66 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:237.66,239.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:240.2,240.64 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:240.64,242.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:243.2,243.10 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:247.67,249.25 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:249.25,250.15 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:250.15,252.4 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:254.2,254.39 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:258.57,261.2 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:264.67,270.2 5 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:273.90,275.24 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:275.24,276.36 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:276.36,277.28 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:277.28,279.5 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:282.2,283.37 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:288.86,290.16 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:290.16,293.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:294.2,297.16 4 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:297.16,300.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:301.2,304.16 3 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:304.16,307.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:309.2,310.16 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:310.16,312.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:313.2,315.38 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:315.38,321.17 3 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:321.17,324.4 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:325.3,325.82 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:327.2,329.50 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:333.95,336.16 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:336.16,339.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:341.2,342.16 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:342.16,345.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:348.2,348.51 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:348.51,350.23 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:350.23,352.18 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:352.18,355.5 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:359.2,359.18 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:363.68,366.6 3 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:366.6,368.17 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:368.17,370.48 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:370.48,371.10 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:373.9,375.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:376.3,376.12 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:378.2,378.77 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:381.85,383.16 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:383.16,386.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:387.2,394.16 8 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:394.16,397.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:398.2,401.16 3 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:401.16,404.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:406.2,407.16 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:407.16,410.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:412.2,412.38 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:412.38,414.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:415.2,417.16 3 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:417.16,420.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:422.2,422.27 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:426.64,428.16 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:428.16,431.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:432.2,436.16 5 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:436.16,439.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:440.2,442.16 3 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:442.16,445.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:446.2,446.43 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:446.43,448.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:448.8,450.17 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:450.17,453.4 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:454.3,455.36 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:460.67,462.16 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:462.16,465.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:466.2,470.16 5 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:470.16,473.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:474.2,476.16 3 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:476.16,479.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:480.2,480.45 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:480.45,482.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:482.8,484.17 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:484.17,487.4 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:488.3,489.36 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:494.67,496.16 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:496.16,499.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:500.2,504.16 4 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:504.16,507.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:508.2,510.16 3 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:510.16,513.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:514.2,514.45 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:514.45,517.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:517.8,519.54 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:519.54,521.4 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/statuscake/statuscake-monitor.go:521.9,523.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/updown/updown-monitor.go:32.103,35.2 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/updown/updown-monitor.go:38.80,49.2 4 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/updown/updown-monitor.go:52.70,62.64 5 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/updown/updown-monitor.go:62.64,66.44 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/updown/updown-monitor.go:66.44,73.4 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/updown/updown-monitor.go:74.3,74.18 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/updown/updown-monitor.go:76.8,80.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/updown/updown-monitor.go:85.99,93.47 5 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/updown/updown-monitor.go:93.47,94.40 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/updown/updown-monitor.go:94.40,97.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/updown/updown-monitor.go:100.2,100.68 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/updown/updown-monitor.go:104.72,113.69 5 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/updown/updown-monitor.go:113.69,116.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/updown/updown-monitor.go:116.8,116.79 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/updown/updown-monitor.go:116.79,119.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/updown/updown-monitor.go:119.8,122.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/updown/updown-monitor.go:128.107,139.16 6 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/updown/updown-monitor.go:139.16,142.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/updown/updown-monitor.go:144.2,151.27 5 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/updown/updown-monitor.go:155.117,162.27 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/updown/updown-monitor.go:162.27,164.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/updown/updown-monitor.go:164.8,167.3 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/updown/updown-monitor.go:169.2,169.27 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/updown/updown-monitor.go:169.27,171.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/updown/updown-monitor.go:171.8,174.3 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/updown/updown-monitor.go:176.2,176.56 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/updown/updown-monitor.go:176.56,178.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/updown/updown-monitor.go:178.8,181.3 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/updown/updown-monitor.go:185.75,193.64 5 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/updown/updown-monitor.go:193.64,196.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/updown/updown-monitor.go:196.8,199.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/updown/updown-monitor.go:204.81,211.64 4 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/updown/updown-monitor.go:211.64,214.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/updown/updown-monitor.go:214.8,214.77 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/updown/updown-monitor.go:214.77,217.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/updown/updown-monitor.go:217.8,219.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-mappers.go:12.98,23.40 8 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-mappers.go:23.40,24.60 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-mappers.go:24.60,27.4 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-mappers.go:28.3,28.66 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-mappers.go:31.2,33.11 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-mappers.go:36.104,39.55 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-mappers.go:39.55,41.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-mappers.go:43.2,43.17 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-mappers.go:46.110,54.2 5 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:30.103,31.126 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:31.126,34.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:35.2,35.13 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:38.63,44.2 5 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:46.86,55.42 5 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:55.42,58.17 3 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:58.17,60.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:62.3,62.24 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:62.24,63.39 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:63.39,64.37 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:64.37,66.6 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:70.3,70.18 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:71.8,71.62 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:71.62,74.23 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:74.23,76.18 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:76.18,80.5 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:84.2,87.37 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:90.90,99.32 5 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:99.32,102.17 3 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:102.17,104.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:106.3,106.26 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:106.26,108.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:109.3,109.18 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:112.2,115.37 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:118.64,128.42 5 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:128.42,132.17 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:132.17,134.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:136.3,136.63 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:140.2,141.12 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:145.60,154.42 5 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:154.42,157.17 3 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:157.17,159.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:161.3,161.21 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:161.21,164.4 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:164.9,166.4 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:167.8,167.62 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:167.62,170.23 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:170.23,172.18 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:172.18,175.5 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:177.8,179.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:182.63,191.42 5 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:191.42,194.17 3 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:194.17,196.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:197.3,197.21 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:197.21,200.4 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:200.9,202.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:203.8,203.62 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:203.62,206.23 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:206.23,208.18 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:208.18,211.5 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:213.8,215.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:218.112,222.26 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:222.26,224.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:224.8,226.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:229.2,231.69 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:231.69,233.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:233.8,235.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:237.2,237.58 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:237.58,239.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:239.8,242.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:244.2,244.74 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:244.74,246.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:248.2,248.74 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:248.74,250.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:252.2,252.67 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:252.67,253.76 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:253.76,255.4 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:255.9,255.86 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:255.86,258.71 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:258.71,260.79 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:260.79,262.6 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:262.11,262.85 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:262.85,264.6 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:266.10,268.5 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:270.4,270.70 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:270.70,272.5 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:272.10,274.5 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:276.8,278.3 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:279.2,279.13 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:282.63,292.42 6 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:292.42,295.17 3 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:295.17,297.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:298.3,298.21 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:298.21,300.4 1 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:300.9,303.4 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:304.8,306.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:309.109,313.67 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:313.67,315.22 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:315.22,317.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:321.105,324.16 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-monitor.go:324.16,326.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:31.69,34.2 2 1 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:36.100,43.32 4 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:43.32,46.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:46.8,48.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:50.2,52.42 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:52.42,55.17 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:55.17,57.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:58.3,58.21 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:58.21,61.4 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:61.9,65.4 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:66.8,70.3 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:73.87,82.42 5 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:82.42,85.17 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:85.17,87.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:89.3,89.21 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:89.21,91.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:91.9,94.4 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:95.8,97.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:100.143,102.16 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:102.16,106.3 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:107.2,107.66 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:107.66,110.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:110.8,119.41 5 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:119.41,122.4 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:122.9,124.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:126.3,128.43 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:128.43,131.18 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:131.18,133.5 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:135.4,135.22 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:135.22,138.5 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:138.10,142.5 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:143.9,147.4 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:151.148,153.16 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:153.16,157.3 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:158.2,166.42 5 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:166.42,169.3 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:169.8,171.3 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:173.2,175.42 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:175.42,178.17 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:178.17,180.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:181.3,181.21 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:181.21,184.4 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:184.9,188.4 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:189.8,193.3 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:196.93,205.42 5 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:205.42,208.17 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:208.17,210.4 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:212.3,212.27 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:212.27,213.45 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:213.45,215.5 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:218.3,218.18 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:221.2,224.37 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:227.110,237.42 6 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:237.42,241.43 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:241.43,242.45 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:242.45,243.40 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:243.40,246.6 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:248.4,248.27 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:251.3,251.18 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:254.2,257.37 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:260.105,276.26 10 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:276.26,277.47 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:277.47,283.44 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:283.44,286.19 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:286.19,288.6 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:290.5,290.46 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:290.46,291.54 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:291.54,293.7 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:297.3,297.36 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:300.2,303.37 3 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:306.44,308.22 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:308.22,309.13 1 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:309.13,312.4 2 0 +github.com/stakater/IngressMonitorController/v2/pkg/monitors/uptimerobot/uptime-status-page.go:314.2,315.10 2 0 diff --git a/docs/appinsights-configuration.md b/docs/appinsights-configuration.md index ebe3fc2a3..8d4e2031a 100644 --- a/docs/appinsights-configuration.md +++ b/docs/appinsights-configuration.md @@ -7,14 +7,33 @@ You can configure Application Insights as a Ingress Monitor by using below confi | name | Name of the provider (e.g. AppInsights) | | appInsightsConfig | `appInsightsConfig` is the configuration specific to Appinsights Instance as mentioned below: | +## Authentication + +The AppInsights monitor uses [azure-sdk-for-go](https://github.com/Azure/azure-sdk-for-go) to authenticate and communicate to the Azure API. + +> The [DefaultAzureCredential](https://learn.microsoft.com/en-us/azure/developer/go/sdk/authentication/credential-chains#defaultazurecredential-overview) is an opinionated, preconfigured chain of credentials. +> It's designed to support many environments, along with the most common authentication flows and developer tools. In graphical form, the underlying chain looks like this: + +It will automatically configure authentication in the following order, stopping when it finds a hit: + +* Environment Variables +* Workload Identity +* Managed Identity +* Azure CLI +* Azure Developer CLI + +Refer to the [DefaultAzureCredential documentation](https://learn.microsoft.com/en-us/azure/developer/go/sdk/authentication/credential-chains#defaultazurecredential-overview) for more details. + + ## Appinsights Configuration: | Key | Description | -| ------------------------ | -------------------------------------------------------------------------------------------------------------- | +|--------------------------|----------------------------------------------------------------------------------------------------------------| | name | Name of the Appinsights Instance | +| subscriptionId | The Azure Subscription ID | | resourceGroup | Resource group of Appinsights | | location | The location of the resource group. | -| geoLocation | Location ID for the webtest to run from. For example: `["us-tx-sn1-azr", "us-il-ch1-azr"]` | +| geoLocation | Location ID for the webtest to run from. For example: `["us-tx-sn1-azr", "us-il-ch1-azr"]`. See [Azure documentation](https://learn.microsoft.com/en-us/previous-versions/azure/azure-monitor/app/monitor-web-app-availability#location-population-tags) for details on Location population tags. | | emailAction (Optional) | Email Action is optional, This will enable monitoring alerts for ping test failure. | | webhookAction (Optional) | Webhook Action is also optional, You can use webhooks to route an Azure alert notification for custom actions. | @@ -33,8 +52,9 @@ You can configure Application Insights as a Ingress Monitor by using below confi providers: - name: AppInsights appInsightsConfig: - name: demo-appinsights - resourceGroup: demoRG + name: "demo-appinsighs" + subscriptionId: "12345678-1234-1234-1234-123456789012" + resourceGroup: "demoRG" location: "westeurope" geoLocation: [ @@ -47,7 +67,7 @@ providers: send_to_service_owners: false custom_emails: ["mail@cizer.dev"] webhookAction: - service_uri: http://myalert-webhook.io + service_uri: "http://myalert-webhook.io" enableMonitorDeletion: true ``` diff --git a/docs/statuscake-configuration.md b/docs/statuscake-configuration.md index 7136e0873..0ff14a641 100644 --- a/docs/statuscake-configuration.md +++ b/docs/statuscake-configuration.md @@ -29,7 +29,7 @@ Currently additional Statuscake configurations can be added through these fields | Regions | Regions to execute the check from | | RawPostData | Add data to change the request to a POST | | UserAgent | Add a user agent string to the request | -| Timeout | Timeout for the check in seconds (minimum of 1 and maximum of 75| +| Timeout | Timeout for the check in seconds (minimum of 5 and maximum of 75| ### Basic Auth checks diff --git a/examples/configs/test-config-appinsights.yaml b/examples/configs/test-config-appinsights.yaml index 928f1424f..569b633f9 100644 --- a/examples/configs/test-config-appinsights.yaml +++ b/examples/configs/test-config-appinsights.yaml @@ -2,6 +2,7 @@ providers: - name: AppInsights appInsightsConfig: name: demo-appinsights + subscriptionId: "00000000-0000-0000-0000-000000000000" resourceGroup: demoRG location: "westeurope" geoLocation: ["us-tx-sn1-azr","emea-nl-ams-azr","us-fl-mia-edge","latam-br-gru-edge"] @@ -9,5 +10,5 @@ providers: send_to_service_owners: false custom_emails: ["mail@cizer.dev"] webhookAction: - service_uri: https://webhook.io -enableMonitorDeletion: true \ No newline at end of file + service_uri: https://webhook.io +enableMonitorDeletion: true diff --git a/go.mod b/go.mod index b4b408b1f..865468407 100644 --- a/go.mod +++ b/go.mod @@ -1,116 +1,129 @@ module github.com/stakater/IngressMonitorController/v2 -go 1.21 - -toolchain go1.21.2 +go 1.24.0 require ( cloud.google.com/go/monitoring v1.16.3 - github.com/Azure/azure-sdk-for-go v44.0.0+incompatible - github.com/Azure/go-autorest/autorest/azure/auth v0.5.0 + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.0 + github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.10.1 + github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/applicationinsights/armapplicationinsights v1.2.0 + github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/monitor/armmonitor v0.11.0 github.com/StatusCakeDev/statuscake-go v1.3.0 github.com/antoineaugusti/updown v0.0.0-20190412074625-d590ab97f115 - github.com/go-logr/logr v1.4.1 + github.com/go-logr/logr v1.4.2 + github.com/google/go-cmp v0.6.0 github.com/grafana/synthetic-monitoring-agent v0.19.4 github.com/grafana/synthetic-monitoring-api-go-client v0.8.0 github.com/karlderkaefer/pingdom-golang-client v1.0.4 - github.com/kelseyhightower/envconfig v1.4.0 github.com/openshift/api v0.0.0-20200526144822-34f54f12813a github.com/patrickmn/go-cache v2.1.0+incompatible github.com/russellcardullo/go-pingdom v1.3.0 github.com/stakater/operator-utils v0.1.13 - github.com/stretchr/testify v1.8.4 + github.com/stretchr/testify v1.10.0 + golang.org/x/time v0.3.0 google.golang.org/api v0.149.0 - google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f + google.golang.org/genproto/googleapis/api v0.0.0-20241118233622-e639e219e697 gopkg.in/yaml.v2 v2.4.0 gotest.tools v2.2.0+incompatible - k8s.io/api v0.24.0 - k8s.io/apimachinery v0.24.0 - k8s.io/client-go v0.24.0 - sigs.k8s.io/controller-runtime v0.12.1 + k8s.io/api v0.31.0 + k8s.io/apimachinery v0.31.0 + k8s.io/client-go v0.31.0 + sigs.k8s.io/controller-runtime v0.19.0 ) require ( - cloud.google.com/go/compute v1.23.3 // indirect - cloud.google.com/go/compute/metadata v0.2.3 // indirect - github.com/Azure/go-autorest v14.2.0+incompatible // indirect - github.com/Azure/go-autorest/autorest v0.11.18 // indirect - github.com/Azure/go-autorest/autorest/adal v0.9.13 // indirect - github.com/Azure/go-autorest/autorest/azure/cli v0.4.0 // indirect - github.com/Azure/go-autorest/autorest/date v0.3.0 // indirect - github.com/Azure/go-autorest/autorest/to v0.4.0 // indirect - github.com/Azure/go-autorest/autorest/validation v0.3.0 // indirect - github.com/Azure/go-autorest/logger v0.2.1 // indirect - github.com/Azure/go-autorest/tracing v0.6.0 // indirect - github.com/PuerkitoBio/purell v1.1.1 // indirect - github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect + cloud.google.com/go/compute/metadata v0.5.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.1 // indirect + github.com/AzureAD/microsoft-authentication-library-for-go v1.4.2 // indirect + github.com/antlr4-go/antlr/v4 v4.13.0 // indirect + github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a // indirect github.com/beorn7/perks v1.0.1 // indirect - github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/blang/semver/v4 v4.0.0 // indirect + github.com/cenkalti/backoff/v4 v4.3.0 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect - github.com/dimchansky/utfbom v1.1.0 // indirect - github.com/emicklei/go-restful v2.16.0+incompatible // indirect + github.com/emicklei/go-restful/v3 v3.11.0 // indirect github.com/evanphx/json-patch v4.12.0+incompatible // indirect - github.com/form3tech-oss/jwt-go v3.2.3+incompatible // indirect - github.com/fsnotify/fsnotify v1.5.1 // indirect - github.com/go-logr/zapr v1.2.0 // indirect - github.com/go-openapi/jsonpointer v0.19.5 // indirect - github.com/go-openapi/jsonreference v0.19.5 // indirect - github.com/go-openapi/swag v0.19.14 // indirect + github.com/evanphx/json-patch/v5 v5.9.0 // indirect + github.com/felixge/httpsnoop v1.0.4 // indirect + github.com/fsnotify/fsnotify v1.7.0 // indirect + github.com/fxamacker/cbor/v2 v2.7.0 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/go-logr/zapr v1.3.0 // indirect + github.com/go-openapi/jsonpointer v0.19.6 // indirect + github.com/go-openapi/jsonreference v0.20.2 // indirect + github.com/go-openapi/swag v0.22.4 // indirect github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang-jwt/jwt/v5 v5.2.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect - github.com/golang/protobuf v1.5.3 // indirect - github.com/google/gnostic v0.5.7-v3refs // indirect - github.com/google/go-cmp v0.6.0 // indirect - github.com/google/gofuzz v1.1.0 // indirect + github.com/golang/protobuf v1.5.4 // indirect + github.com/google/cel-go v0.20.1 // indirect + github.com/google/gnostic-models v0.6.8 // indirect + github.com/google/gofuzz v1.2.0 // indirect github.com/google/s2a-go v0.1.7 // indirect github.com/google/uuid v1.6.0 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect github.com/googleapis/gax-go/v2 v2.12.0 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 // indirect github.com/imdario/mergo v0.3.12 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect + github.com/kylelemons/godebug v1.1.0 // indirect github.com/mailru/easyjson v0.7.7 // indirect - github.com/mitchellh/go-homedir v1.1.0 // indirect 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/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/prometheus/client_golang v1.18.0 // indirect - github.com/prometheus/client_model v0.5.0 // indirect - github.com/prometheus/common v0.46.0 // indirect - github.com/prometheus/procfs v0.12.0 // indirect + github.com/prometheus/client_golang v1.19.1 // indirect + github.com/prometheus/client_model v0.6.1 // indirect + github.com/prometheus/common v0.55.0 // indirect + github.com/prometheus/procfs v0.15.1 // indirect + github.com/spf13/cobra v1.8.1 // indirect github.com/spf13/pflag v1.0.5 // indirect + github.com/stoewer/go-strcase v1.2.0 // indirect + github.com/x448/float16 v0.8.4 // indirect go.opencensus.io v0.24.0 // indirect - go.uber.org/atomic v1.11.0 // indirect - go.uber.org/multierr v1.6.0 // indirect - go.uber.org/zap v1.19.1 // indirect - golang.org/x/crypto v0.21.0 // indirect - golang.org/x/net v0.23.0 // indirect - golang.org/x/oauth2 v0.16.0 // indirect - golang.org/x/sync v0.6.0 // indirect - golang.org/x/sys v0.18.0 // indirect - golang.org/x/term v0.18.0 // indirect - golang.org/x/text v0.14.0 // indirect - golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect - gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect - google.golang.org/appengine v1.6.8 // 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.uber.org/multierr v1.11.0 // indirect + go.uber.org/zap v1.26.0 // indirect + golang.org/x/crypto v0.38.0 // indirect + golang.org/x/exp v0.0.0-20231206192017-f3f8817b8deb // indirect + golang.org/x/net v0.40.0 // indirect + golang.org/x/oauth2 v0.22.0 // indirect + golang.org/x/sync v0.14.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 + gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect google.golang.org/genproto v0.0.0-20231211222908-989df2bf70f3 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0 // indirect - google.golang.org/grpc v1.61.0 // indirect - google.golang.org/protobuf v1.33.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20241113202542-65e8d215514f // indirect + google.golang.org/grpc v1.67.1 // indirect + google.golang.org/protobuf v1.35.2 // indirect + gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/apiextensions-apiserver v0.24.0 // indirect - k8s.io/component-base v0.24.0 // indirect - k8s.io/klog/v2 v2.60.1 // indirect - k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42 // indirect - k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 // indirect - sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2 // indirect - sigs.k8s.io/structured-merge-diff/v4 v4.2.1 // indirect - sigs.k8s.io/yaml v1.3.0 // indirect + k8s.io/apiextensions-apiserver v0.31.0 // indirect + k8s.io/apiserver v0.31.0 // indirect + k8s.io/component-base v0.31.0 // indirect + k8s.io/klog/v2 v2.130.1 // indirect + k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 // indirect + k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 // 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 + sigs.k8s.io/yaml v1.4.0 // indirect ) -replace github.com/stakater/IngressMonitorController => ./github.com/stakater/IngressMonitorController +replace github.com/stakater/IngressMonitorController => ./ // replace k8s.io/client-go => k8s.io/client-go v0.18.2 diff --git a/go.sum b/go.sum index 4e1ab3882..cd6b0eae5 100644 --- a/go.sum +++ b/go.sum @@ -9,25 +9,11 @@ cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6T cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= -cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= -cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= -cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= -cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= -cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/compute v1.23.3 h1:6sVlXXBmbd7jNX0Ipq0trII3e4n1/MsADLK6a+aiVlk= -cloud.google.com/go/compute v1.23.3/go.mod h1:VCgBUoMnIVIR0CscqQiPJLAG25E3ZRZMzcFZeQ+h8CI= -cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= -cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= +cloud.google.com/go/compute/metadata v0.5.0 h1:Zr0eK8JbFv6+Wi4ilXAR8FJ3wyNdpxHKJNPos6LTZOY= +cloud.google.com/go/compute/metadata v0.5.0/go.mod h1:aHnloV2TPI38yx4s9+wAZhHykWvVCfu7hQbF+9CWoiY= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= @@ -36,55 +22,47 @@ cloud.google.com/go/monitoring v1.16.3/go.mod h1:KwSsX5+8PnXv5NJnICZzW2R8pWTis8y cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/Azure/azure-sdk-for-go v44.0.0+incompatible h1:e82Yv2HNpS0kuyeCrV29OPKvEiqfs2/uJHic3/3iKdg= -github.com/Azure/azure-sdk-for-go v44.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.0 h1:Gt0j3wceWMwPmiazCa8MzMA0MfhmPIz0Qp0FJ6qcM0U= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.0/go.mod h1:Ot/6aikWnKWi4l9QB7qVSwa8iMphQNqkWALMoNT3rzM= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.10.1 h1:B+blDbyVIG3WaikNxPnhPiJ1MThR03b3vKGtER95TP4= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.10.1/go.mod h1:JdM5psgjfBf5fo2uWOZhflPWyDBZ/O/CNAH9CtsuZE4= +github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.2 h1:yz1bePFlP5Vws5+8ez6T3HWXPmwOK7Yvq8QxDBD3SKY= +github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.2/go.mod h1:Pa9ZNPuoNu/GztvBSKk9J1cDJW6vk/n0zLtV4mgd8N8= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.1 h1:FPKJS1T+clwv+OLGt13a8UjqeRuh0O4SJ3lUriThc+4= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.1/go.mod h1:j2chePtV91HrC22tGoRX3sGY42uF13WzmmV80/OdVAA= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/applicationinsights/armapplicationinsights v1.2.0 h1:7FX6sHNPamIAyukt6w9Gw5Qa5bu+gVN2Iy70yHc0xns= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/applicationinsights/armapplicationinsights v1.2.0/go.mod h1:S7Ss6Rm0nlKDRHKrO9eL2Be5EnX29Z09CNPWgK7o4+I= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal/v2 v2.0.0 h1:PTFGRSlMKCQelWwxUyYVEUqseBJVemLyqWJjvMyt0do= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal/v2 v2.0.0/go.mod h1:LRr2FzBTQlONPPa5HREE5+RjSCTXl7BwOvYOaWTqCaI= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/monitor/armmonitor v0.11.0 h1:Ds0KRF8ggpEGg4Vo42oX1cIt/IfOhHWJBikksZbVxeg= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/monitor/armmonitor v0.11.0/go.mod h1:jj6P8ybImR+5topJ+eH6fgcemSFBmU6/6bFF8KkwuDI= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.1.1 h1:7CBQ+Ei8SP2c6ydQTGCCrS35bDxgTMfoP2miAwK++OU= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.1.1/go.mod h1:c/wcGeGx5FUPbM/JltUYHZcKmigwyVLJlDq+4HdtXaw= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= -github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= -github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/Azure/go-autorest/autorest v0.11.0/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw= github.com/Azure/go-autorest/autorest v0.11.1/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw= -github.com/Azure/go-autorest/autorest v0.11.18 h1:90Y4srNYrwOtAgVo3ndrQkTYn6kf1Eg/AjTFJ8Is2aM= -github.com/Azure/go-autorest/autorest v0.11.18/go.mod h1:dSiJPy22c3u0OtOKDNttNgqpNFY/GeWa7GH/Pz56QRA= github.com/Azure/go-autorest/autorest/adal v0.9.0/go.mod h1:/c022QCutn2P7uY+/oQWWNcK9YU+MH96NgK+jErpbcg= github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A= -github.com/Azure/go-autorest/autorest/adal v0.9.13 h1:Mp5hbtOePIzM8pJVRa3YLrWWmZtoxRXqUEzCfJt3+/Q= -github.com/Azure/go-autorest/autorest/adal v0.9.13/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M= -github.com/Azure/go-autorest/autorest/azure/auth v0.5.0 h1:nSMjYIe24eBYasAIxt859TxyXef/IqoH+8/g4+LmcVs= -github.com/Azure/go-autorest/autorest/azure/auth v0.5.0/go.mod h1:QRTvSZQpxqm8mSErhnbI+tANIBAKP7B+UIE2z4ypUO0= -github.com/Azure/go-autorest/autorest/azure/cli v0.4.0 h1:Ml+UCrnlKD+cJmSzrZ/RDcDw86NjkRUpnFh7V5JUhzU= -github.com/Azure/go-autorest/autorest/azure/cli v0.4.0/go.mod h1:JljT387FplPzBA31vUcvsetLKF3pec5bdAxjVU4kI2s= -github.com/Azure/go-autorest/autorest/date v0.3.0 h1:7gUk1U5M/CQbp9WoqinNzJar+8KY+LPI6wiWrP/myHw= github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= github.com/Azure/go-autorest/autorest/mocks v0.4.0/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= -github.com/Azure/go-autorest/autorest/mocks v0.4.1 h1:K0laFcLE6VLTOwNgSxaGbUcLPuGXlNkbVvq4cW4nIHk= github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= -github.com/Azure/go-autorest/autorest/to v0.4.0 h1:oXVqrxakqqV1UZdSazDOPOLvOIz+XA683u8EctwboHk= -github.com/Azure/go-autorest/autorest/to v0.4.0/go.mod h1:fE8iZBn7LQR7zH/9XU2NcPR4o9jEImooCeWJcYV/zLE= -github.com/Azure/go-autorest/autorest/validation v0.3.0 h1:3I9AAI63HfcLtphd9g39ruUwRI+Ca+z/f36KHPFRUss= -github.com/Azure/go-autorest/autorest/validation v0.3.0/go.mod h1:yhLgjC0Wda5DYXl6JAsWyUe4KVNffhoDhG0zVzUMo3E= github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= -github.com/Azure/go-autorest/logger v0.2.1 h1:IG7i4p/mDa2Ce4TRyAO8IHnVhAVF3RFU+ZtXWSmf4Tg= -github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= -github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo= github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= +github.com/AzureAD/microsoft-authentication-extensions-for-go/cache v0.1.1 h1:WJTmL004Abzc5wDB5VtZG2PJk5ndYDgVacGqfirKxjM= +github.com/AzureAD/microsoft-authentication-extensions-for-go/cache v0.1.1/go.mod h1:tCcJZ0uHAmvjsVYzEFivsRTN00oz5BEsRgQHu5JZ9WE= +github.com/AzureAD/microsoft-authentication-library-for-go v1.4.2 h1:oygO0locgZJe7PpYPXT5A29ZkwJaPqcva7BVeemZOZs= +github.com/AzureAD/microsoft-authentication-library-for-go v1.4.2/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= -github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/StatusCakeDev/statuscake-go v1.3.0 h1:Ok6LIZUKhoe/ykcUuIzS8zg6MbtCrO3I1ZBVFl3TLMA= github.com/StatusCakeDev/statuscake-go v1.3.0/go.mod h1:YefpyhDUs1gLCKXG5F9pPcZAp3rk4JyNkb9dfHbgr1I= @@ -92,19 +70,15 @@ github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuy github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20210826220005-b48c857c3a0e/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY= +github.com/antlr4-go/antlr/v4 v4.13.0 h1:lxCg3LAv+EUK6t1i0y1V6/SLeUi0eKEKdhQAlS8TVTI= +github.com/antlr4-go/antlr/v4 v4.13.0/go.mod h1:pfChB/xh/Unjila75QW7+VU4TSnWnnk9UTnmpPaOR2g= github.com/antoineaugusti/updown v0.0.0-20190412074625-d590ab97f115 h1:zJT4IRToZQDCLmeoqL8csL/J5aSmq4dFzXrTJsrPrz8= github.com/antoineaugusti/updown v0.0.0-20190412074625-d590ab97f115/go.mod h1:TDHYwR+sNBq9h90JXEweSgaIbHRh7j+HcjJi0diGUt4= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= +github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a h1:idn718Q4B6AGu/h5Sxe66HYVdqdGu2l9Iebqhi/AEoA= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= -github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -112,27 +86,21 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= +github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= +github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= -github.com/certifi/gocertifi v0.0.0-20200922220541-2c3bb06c6054/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= -github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= -github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod h1:h6jFvWxBdQXxjopDMZyH2UVceIRfR84bdzbkoKrsWNo= -github.com/cockroachdb/errors v1.2.4/go.mod h1:rQD95gz6FARkaKkQXUksEje/d9a6wBJoCr5oaCLELYA= -github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= @@ -140,22 +108,20 @@ github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3Ee github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/dimchansky/utfbom v1.1.0 h1:FcM3g+nofKgUteL8dm/UpdRXNC9KmADgTpLKsu0TRo4= -github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= @@ -163,33 +129,29 @@ github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25Kn github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= -github.com/emicklei/go-restful v2.16.0+incompatible h1:rgqiKNjTnFQA6kkhFe16D8epTksy9HQ1MyrbDXSdYhM= -github.com/emicklei/go-restful v2.16.0+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g= +github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ= github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84= github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch/v5 v5.9.0 h1:kcBlZQbplgElYIlo/n1hJbls2z/1awpXxpRi0/FOJfg= +github.com/evanphx/json-patch/v5 v5.9.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= +github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= -github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c= -github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI= -github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= -github.com/getkin/kin-openapi v0.76.0/go.mod h1:660oXbgy5JFMKreazJaQTw7o+X00qeSyhcnluiMv+Xg= -github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= +github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= +github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= +github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= +github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= @@ -197,45 +159,48 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2 github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-logr/logr v0.3.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= -github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= -github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-logr/zapr v0.2.0/go.mod h1:qhKdvif7YF5GI9NWEpyxTSSBdGmzkNguibrdCNVPunU= -github.com/go-logr/zapr v1.2.0 h1:n4JnPI1T3Qq1SFEi/F8rwLrZERp2bso19PJZDB9dayk= -github.com/go-logr/zapr v1.2.0/go.mod h1:Qa4Bsj2Vb+FAVeAKsLD8RLQ+YRJB8YDmOAKxaBQf7Ro= +github.com/go-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ= +github.com/go-logr/zapr v1.3.0/go.mod h1:YKepepNBd1u/oyhd/yQmtjVXmm9uML4IXUgMOwR8/Gg= github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= -github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= +github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= -github.com/go-openapi/jsonreference v0.19.5 h1:1WJP/wi4OjB4iV8KVbH73rQaoialJrqv8gitZLxGLtM= -github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= +github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= +github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/swag v0.19.14 h1:gm3vOOXfiuw5i9p5N9xJvfjvuofpyvLA9Wr6QfK5Fng= -github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= +github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-openapi/swag v0.22.4 h1:QLMzNJnMGPRNDCbySlcj1x01tzU8/9LTTL9hZZZogBU= +github.com/go-openapi/swag v0.22.4/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= +github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8= +github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -248,16 +213,12 @@ github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfb github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= @@ -266,48 +227,37 @@ github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvq github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= -github.com/google/cel-go v0.10.1/go.mod h1:U7ayypeSkw23szu4GaQTPJGx66c20mx8JklMSxrmI1w= -github.com/google/cel-spec v0.6.0/go.mod h1:Nwjgxy5CbjlPrtCWjeDjUyKMl8w41YBYGjsyDdqk0xA= -github.com/google/gnostic v0.5.7-v3refs h1:FhTMOKj2VhjpouxvWJAV1TL304uMlb9zcDqkl6cEI54= -github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ= +github.com/google/cel-go v0.20.1 h1:nDx9r8S3L4pE61eDdt8igGj8rf5kjYR3ILxWIpWNi84= +github.com/google/cel-go v0.20.1/go.mod h1:kWcIzTsPX0zmQ+H3TirHstLLf9ep5QTsZBN9u4dOYLg= +github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= +github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g= github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= +github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20240525223248-4bfdf5a9a2af h1:kmjWCqn2qkEml422C2Rrd27c3VGxi6a/6HNq8QmHRKM= +github.com/google/pprof v0.0.0-20240525223248-4bfdf5a9a2af/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= @@ -327,7 +277,6 @@ github.com/googleapis/gnostic v0.1.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTV github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/grafana/synthetic-monitoring-agent v0.19.4 h1:6L3Nb9Sw1XmIs7jPcbquTilWUc+H63MvFFpNXIYzymA= @@ -337,11 +286,11 @@ github.com/grafana/synthetic-monitoring-api-go-client v0.8.0/go.mod h1:TGaywTdL2 github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 h1:bkypFPDjIYGfCYD5mRBvpqxfYX1YCS1PXdKYWi8FsN0= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0/go.mod h1:P+Lt/0by1T8bfcF3z737NnSbmxQAppXMRziHUxPOC8k= github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -365,44 +314,40 @@ github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2p github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= -github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/karlderkaefer/pingdom-golang-client v1.0.4 h1:tBLJ5Id3thyEor9D5zl7VZen5P8EI13/6izrjhvniH4= github.com/karlderkaefer/pingdom-golang-client v1.0.4/go.mod h1:Q01dHklWfM8O8V8ln80ix4nqlxburepAsdmoIHJt7hg= -github.com/kelseyhightower/envconfig v1.4.0 h1:Im6hONhd3pLkfDFsbRgu68RDNkGF1r3dvMUtDTo2cv8= -github.com/kelseyhightower/envconfig v1.4.0/go.mod h1:cccZRl6mQpaq41TPp5QxidR+Sa3axMbJDNb//FQX6Gg= +github.com/keybase/go-keychain v0.0.1 h1:way+bWYa6lDppZoZcgMbYsvC7GxljxrskdNInRtuthU= +github.com/keybase/go-keychain v0.0.1/go.mod h1:PdEILRW3i9D8JcdM+FmY6RwkHGnhHxXwkPPMeUgOK1k= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= @@ -410,12 +355,13 @@ github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= -github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= @@ -427,17 +373,13 @@ github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182aff github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo= -github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -449,43 +391,39 @@ github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8m github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= +github.com/onsi/ginkgo v1.14.1 h1:jMU0WaQrP0a/YAEq8eJmJKjBoMs+pClEr1vDMlM/Do4= github.com/onsi/ginkgo v1.14.1/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= -github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= +github.com/onsi/ginkgo/v2 v2.19.0 h1:9Cnnf7UHo57Hy3k6/m5k3dRfGTMXGvxhHFvkDTCTpvA= +github.com/onsi/ginkgo/v2 v2.19.0/go.mod h1:rlwLi9PilAFJ8jCg9UE1QP6VBpd6/xj3SRC0d6TU0To= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.10.2/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= -github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= +github.com/onsi/gomega v1.33.1 h1:dsYjIxxSR755MDmKVsaFQTE22ChNBcuuTWgkUDSubOk= +github.com/onsi/gomega v1.33.1/go.mod h1:U4R44UsT+9eLIaYRB2a5qajjtQYn0hauxvRm16AVYg0= github.com/openshift/api v0.0.0-20200526144822-34f54f12813a h1:riE/kCXnb051RWT/z+DytxKEZ3+JromVDl79rXAKyFY= github.com/openshift/api v0.0.0-20200526144822-34f54f12813a/go.mod h1:l6TGeqJ92DrZBuWMNKcot1iZUHfbYSJyBWHGgg6Dn6s= github.com/openshift/build-machinery-go v0.0.0-20200424080330-082bf86082cc/go.mod h1:1CkcsT3aVebzRBzVTSbiKSkJMsC/CASqxesfqEMfJEc= -github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= +github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= +github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -495,39 +433,34 @@ github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXP github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= -github.com/prometheus/client_golang v1.18.0 h1:HzFfmkOzH5Q8L8G+kSJKUx5dtG87sewO+FoDDqP5Tbk= -github.com/prometheus/client_golang v1.18.0/go.mod h1:T+GXkCk5wSJyOqMIzVgvvjFDlkOQntgjkJWKrN5txjA= +github.com/prometheus/client_golang v1.19.1 h1:wZWJDwK+NameRJuPGDhlnFgx8e8HN3XHQeLaYJFJBOE= +github.com/prometheus/client_golang v1.19.1/go.mod h1:mP78NwGzrVks5S2H6ab8+ZZGJLZUq1hoULYBAYBw1Ho= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= -github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= +github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= +github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.46.0 h1:doXzt5ybi1HBKpsZOL0sSkaNHJJqkyfEWZGGqqScV0Y= -github.com/prometheus/common v0.46.0/go.mod h1:Tp0qkxpb9Jsg54QMe+EAmqXkSV7Evdy1BTn+g2pa/hQ= +github.com/prometheus/common v0.55.0 h1:KEi6DK7lXW/m7Ig5i47x0vRzuBsHuvJdi5ee6Y3G1dc= +github.com/prometheus/common v0.55.0/go.mod h1:2SECS4xJG1kd8XF9IcM1gMX6510RAEL65zxzNImwdc8= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= -github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= +github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= +github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/redis/go-redis/v9 v9.8.0 h1:q3nRvjrlge/6UD7eTu/DSg2uYiU2mCL0G/uzBWqhicI= +github.com/redis/go-redis/v9 v9.8.0/go.mod h1:huWgSWd8mW6+m0VPhJjSSQ+d6Nh1VICQ6Q5lHuCH/Iw= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= -github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= +github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= +github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/russellcardullo/go-pingdom v1.3.0 h1:uf5ZJOOR6BxqLcz0Lwmtb6HMFgX20CCLIhy0wB6tc/4= github.com/russellcardullo/go-pingdom v1.3.0/go.mod h1:y9hd/6P97iuRFi6VPGgLxsRQaJQll298jZ/qPQPfcXw= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -538,21 +471,17 @@ github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeV github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= -github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= -github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= -github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= -github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= +github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= +github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= @@ -562,6 +491,7 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/stakater/operator-utils v0.1.13 h1:BWOehMy15gv+2qMe6GSEcX4k41C9DyDTbeQq51V63NU= github.com/stakater/operator-utils v0.1.13/go.mod h1:NM2WTCf9xlEQEZVcncTVaVJ3WrvarQbMe8gxZd3Ybpo= +github.com/stoewer/go-strcase v1.2.0 h1:Z2iHWqGXH00XYgqDmNgQbIBxf3wrNq0F3feEy0ainaU= github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -573,97 +503,73 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= +github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= -go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= go.etcd.io/etcd v0.5.0-alpha.5.0.20200910180754-dd1b699fc489/go.mod h1:yVHk9ub3CSBatqGNg7GRmsnfLWtoW60w4eDYfh7vHDg= -go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= -go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= -go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/pkg/v3 v3.5.1/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= -go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0= -go.etcd.io/etcd/client/v3 v3.5.1/go.mod h1:OnjH4M8OnAotwaB2l9bVgZzRFKru7/ZMoS46OtKyd3Q= -go.etcd.io/etcd/pkg/v3 v3.5.0/go.mod h1:UzJGatBQ1lXChBkQF0AuAtkRQMYnHubxAEYIrC3MSsE= -go.etcd.io/etcd/raft/v3 v3.5.0/go.mod h1:UFOHSIvO/nKwd4lhkwabrTD3cqW5yVyYYf/KlD00Szc= -go.etcd.io/etcd/server/v3 v3.5.0/go.mod h1:3Ah5ruV+M+7RZr0+Y/5mNLwC+eQlni+mQmOVdCRJoS4= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= -go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/contrib v0.20.0/go.mod h1:G/EtFaa6qaN7+LxqfIAT3GiZa7Wv5DTBUzl5H4LY0Kc= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.20.0/go.mod h1:oVGt1LRbBOBq1A5BQLlUg9UaU/54aiHw8cgjV3aWZ/E= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.20.0/go.mod h1:2AboqHi0CiIZU0qwhtUfCYD1GeUzvvIXWNkhDt7ZMG4= -go.opentelemetry.io/otel v0.20.0/go.mod h1:Y3ugLH2oa81t5QO+Lty+zXf8zC9L26ax4Nzoxm/dooo= -go.opentelemetry.io/otel/exporters/otlp v0.20.0/go.mod h1:YIieizyaN77rtLJra0buKiNBOm9XQfkPEKBeuhoMwAM= -go.opentelemetry.io/otel/metric v0.20.0/go.mod h1:598I5tYlH1vzBjn+BTuhzTCSb/9debfNp6R3s7Pr1eU= -go.opentelemetry.io/otel/oteltest v0.20.0/go.mod h1:L7bgKf9ZB7qCwT9Up7i9/pn0PWIa9FqQ2IQ8LoxiGnw= -go.opentelemetry.io/otel/sdk v0.20.0/go.mod h1:g/IcepuwNsoiX5Byy2nNV0ySUF1em498m7hBWC279Yc= -go.opentelemetry.io/otel/sdk/export/metric v0.20.0/go.mod h1:h7RBNMsDJ5pmI1zExLi+bJK+Dr8NQCh0qGhm1KDnNlE= -go.opentelemetry.io/otel/sdk/metric v0.20.0/go.mod h1:knxiS8Xd4E/N+ZqKmUPf3gTTZ4/0TjTXukfxjzSTpHE= -go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16gUEi0Nf1iBdgw= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 h1:4K4tsIXefpVJtvA/8srF4V4y0akAoPHkIslgAkjixJA= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0/go.mod h1:jjdQuTGVsXV4vSs+CJ2qYDeDPf9yIJV23qlIzBm73Vg= +go.opentelemetry.io/otel v1.28.0 h1:/SqNcYk+idO0CxKEUOtKQClMK/MimZihKYMruSMViUo= +go.opentelemetry.io/otel v1.28.0/go.mod h1:q68ijF8Fc8CnMHKyzqL6akLO46ePnjkgfIMIjUIX9z4= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0 h1:3Q/xZUyC1BBkualc9ROb4G8qkH90LXEIICcs5zv1OYY= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0/go.mod h1:s75jGIWA9OfCMzF0xr+ZgfrB5FEbbV7UuYo32ahUiFI= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 h1:qFffATk0X+HD+f1Z8lswGiOQYKHRlzfmdJm0wEaVrFA= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0/go.mod h1:MOiCmryaYtc+V0Ei+Tx9o5S1ZjA7kzLucuVuyzBZloQ= +go.opentelemetry.io/otel/metric v1.28.0 h1:f0HGvSl1KRAU1DLgLGFjrwVyismPlnuU6JD6bOeuA5Q= +go.opentelemetry.io/otel/metric v1.28.0/go.mod h1:Fb1eVBFZmLVTMb6PPohq3TO9IIhUisDsbJoL/+uQW4s= +go.opentelemetry.io/otel/sdk v1.28.0 h1:b9d7hIry8yZsgtbmM0DKyPWMMUMlK9NEKuIG4aBqWyE= +go.opentelemetry.io/otel/sdk v1.28.0/go.mod h1:oYj7ClPUA7Iw3m+r7GeEjz0qckQRJK2B8zjcZEfu7Pg= +go.opentelemetry.io/otel/trace v1.28.0 h1:GhQ9cUuQGmNDd5BTCP2dAvv75RdMxEfTmYejp+lkx9g= +go.opentelemetry.io/otel/trace v1.28.0/go.mod h1:jPyXzNPg6da9+38HEwElrQiHlVMTnVfM3/yv2OlIHaI= +go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= +go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= -go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= -go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA= -go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= -go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.8.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= -go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= -go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= -go.uber.org/zap v1.19.1 h1:ue41HOKd1vGURxrmeKIgELGb3jPW9DMUDGtsinblHwI= -go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= +go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= +go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= -golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= +golang.org/x/crypto v0.38.0 h1:jt+WWG8IZlBnVbomuhg2Mdq0+BBQaHbtqHEFEigjUV8= +golang.org/x/crypto v0.38.0/go.mod h1:MvrbAqul58NNYPKnOra203SB9vpuZW0e+RRZV+Ggqjw= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -688,8 +594,6 @@ golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHl golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= @@ -698,11 +602,6 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -720,7 +619,6 @@ golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -732,60 +630,27 @@ golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= -golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= +golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY= +golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.16.0 h1:aDkGMBSYxElaoP81NpoUoz2oo2R2wHdZpGToUxfyQrQ= -golang.org/x/oauth2 v0.16.0/go.mod h1:hqZ+0LWXsiVoZpeld6jVt06P3adbS2Uu911W1SsJv2o= +golang.org/x/oauth2 v0.22.0 h1:BzDx2FehcG7jJwgWLELCdmLuxk2i+x9UDpSiss2u0ZA= +golang.org/x/oauth2 v0.22.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= -golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.14.0 h1:woo0S4Yywslg6hp4eUFjTVOyKt0RookbpAHG4c1HmhQ= +golang.org/x/sync v0.14.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -809,7 +674,6 @@ golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -821,49 +685,15 @@ golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= -golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8= -golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= +golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/term v0.32.0 h1:DR4lr0TjUs3epypdhTOkMmuF5CDFJ/8pOnbzMZPQ7bg= +golang.org/x/term v0.32.0/go.mod h1:uZG1FhGx848Sqfsq4/DlJr3xGGsYMu/L5GW4abiaEPQ= golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -871,20 +701,15 @@ golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3 golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.25.0 h1:qVyWApTSYLk/drJRO5mDlNYskwQznZmkpV2c8q9zls4= +golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 h1:vVKdlvoWBphwdxWKrFZEuM0kGgGLxUOYcY4U/2Vjg44= -golang.org/x/time v0.0.0-20220210224613-90d013bbcef8/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= +golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -926,38 +751,20 @@ golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200616133436-c1934b75d054/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.10-0.20220218145154-897bd77cd717/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gomodules.xyz/jsonpatch/v2 v2.1.0/go.mod h1:IhYNNY4jnS53ZnfE4PAmpKtDpTCj1JFXc+3mwe7XcUU= -gomodules.xyz/jsonpatch/v2 v2.2.0 h1:4pT439QV83L+G9FkcCriY6EkpcK6r6bK+A5FBUMI7qY= -gomodules.xyz/jsonpatch/v2 v2.2.0/go.mod h1:WXp+iVDkoLQqPudfQ9GBlwB2eZ5DKOnjQZCYdOS8GPY= +gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw= +gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= @@ -967,18 +774,7 @@ google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsb google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= -google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= -google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= -google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= -google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= google.golang.org/api v0.149.0 h1:b2CqT6kG+zqJIVKRQ3ELJVLN1PwHZ6DJ3dW8yl82rgY= google.golang.org/api v0.149.0/go.mod h1:Mwn1B7JTXrzXtnvmzQE2BD6bYZQ8DShKZDZbeN9I7qI= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= @@ -987,9 +783,6 @@ google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7 google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= -google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -1007,42 +800,15 @@ google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvx google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201102152239-715cce707fb0/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20231211222908-989df2bf70f3 h1:1hfbdAfFbkmpg41000wDVqr7jUpK/Yo+LPnIxxGzmkg= google.golang.org/genproto v0.0.0-20231211222908-989df2bf70f3/go.mod h1:5RBcpGRxr25RbDzY5w+dmaqpSEvl8Gwl1x2CICf60ic= -google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f h1:2yNACc1O40tTnrsbk9Cv6oxiW8pxI/pXj0wRtdlYmgY= -google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f/go.mod h1:Uy9bTZJqmfrw2rIBxgGLnamc78euZULUBrLZ9XTITKI= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0 h1:/jFB8jK5R3Sq3i/lmeZO0cATSzFfZaJq1J2Euan3XKU= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0/go.mod h1:FUoWkonphQm3RhTS+kOEhF8h0iDpm4tdXolVCeZ9KKA= +google.golang.org/genproto/googleapis/api v0.0.0-20241118233622-e639e219e697 h1:pgr/4QbFyktUv9CtQ/Fq4gzEE6/Xs7iCXbktaGzLHbQ= +google.golang.org/genproto/googleapis/api v0.0.0-20241118233622-e639e219e697/go.mod h1:+D9ySVjN8nY8YCVjc5O7PZDIdZporIDY3KaGfJunh88= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241113202542-65e8d215514f h1:C1QccEa9kUwvMgEUORqQD9S17QesQijxjZ84sO82mfo= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241113202542-65e8d215514f/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -1051,22 +817,9 @@ google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQ google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= -google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.61.0 h1:TOvOcuXn30kRao+gfcvsebNEa5iZIiLkisYEkf7R7o0= -google.golang.org/grpc v1.61.0/go.mod h1:VUbo7IFqmF1QtCAstipjG0GIoq49KvMe9+h1jFLBNJs= +google.golang.org/grpc v1.67.1 h1:zWnc1Vrcno+lHZCOofnIMvycFcc0QRGIzm9dhnDX68E= +google.golang.org/grpc v1.67.1/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -1077,20 +830,18 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= -google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.35.2 h1:8Ar7bF+apOIoThw1EdZl0p1oWvMqTHmpA2fRTyZO8io= +google.golang.org/protobuf v1.35.2/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/evanphx/json-patch.v4 v4.12.0 h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSPG+6V4= +gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= @@ -1098,12 +849,10 @@ gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -1112,84 +861,79 @@ gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= -gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= k8s.io/api v0.18.3/go.mod h1:UOaMwERbqJMfeeeHc8XJKawj4P9TgDRnViIqqBeH2QA= k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo= k8s.io/api v0.20.2/go.mod h1:d7n6Ehyzx+S+cE3VhTGfVNNqtGc/oL9DCdYYahlurV8= -k8s.io/api v0.24.0 h1:J0hann2hfxWr1hinZIDefw7Q96wmCBx6SSB8IY0MdDg= -k8s.io/api v0.24.0/go.mod h1:5Jl90IUrJHUJYEMANRURMiVvJ0g7Ax7r3R1bqO8zx8I= +k8s.io/api v0.31.0 h1:b9LiSjR2ym/SzTOlfMHm1tr7/21aD7fSkqgD/CVJBCo= +k8s.io/api v0.31.0/go.mod h1:0YiFF+JfFxMM6+1hQei8FY8M7s1Mth+z/q7eF1aJkTE= k8s.io/apiextensions-apiserver v0.20.1/go.mod h1:ntnrZV+6a3dB504qwC5PN/Yg9PBiDNt1EVqbW2kORVk= -k8s.io/apiextensions-apiserver v0.24.0 h1:JfgFqbA8gKJ/uDT++feAqk9jBIwNnL9YGdQvaI9DLtY= -k8s.io/apiextensions-apiserver v0.24.0/go.mod h1:iuVe4aEpe6827lvO6yWQVxiPSpPoSKVjkq+MIdg84cM= +k8s.io/apiextensions-apiserver v0.31.0 h1:fZgCVhGwsclj3qCw1buVXCV6khjRzKC5eCFt24kyLSk= +k8s.io/apiextensions-apiserver v0.31.0/go.mod h1:b9aMDEYaEe5sdK+1T0KU78ApR/5ZVp4i56VacZYEHxk= k8s.io/apimachinery v0.18.3/go.mod h1:OaXp26zu/5J7p0f92ASynJa1pZo06YlV9fG7BoWbCko= k8s.io/apimachinery v0.20.1/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= k8s.io/apimachinery v0.20.2/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= -k8s.io/apimachinery v0.24.0 h1:ydFCyC/DjCvFCHK5OPMKBlxayQytB8pxy8YQInd5UyQ= -k8s.io/apimachinery v0.24.0/go.mod h1:82Bi4sCzVBdpYjyI4jY6aHX+YCUchUIrZrXKedjd2UM= +k8s.io/apimachinery v0.31.0 h1:m9jOiSr3FoSSL5WO9bjm1n6B9KROYYgNZOb4tyZ1lBc= +k8s.io/apimachinery v0.31.0/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo= k8s.io/apiserver v0.20.1/go.mod h1:ro5QHeQkgMS7ZGpvf4tSMx6bBOgPfE+f52KwvXfScaU= -k8s.io/apiserver v0.24.0/go.mod h1:WFx2yiOMawnogNToVvUYT9nn1jaIkMKj41ZYCVycsBA= +k8s.io/apiserver v0.31.0 h1:p+2dgJjy+bk+B1Csz+mc2wl5gHwvNkC9QJV+w55LVrY= +k8s.io/apiserver v0.31.0/go.mod h1:KI9ox5Yu902iBnnyMmy7ajonhKnkeZYJhTZ/YI+WEMk= k8s.io/client-go v0.20.1/go.mod h1:/zcHdt1TeWSd5HoUe6elJmHSQ6uLLgp4bIJHVEuy+/Y= k8s.io/client-go v0.20.2/go.mod h1:kH5brqWqp7HDxUFKoEgiI4v8G1xzbe9giaCenUWJzgE= -k8s.io/client-go v0.24.0 h1:lbE4aB1gTHvYFSwm6eD3OF14NhFDKCejlnsGYlSJe5U= -k8s.io/client-go v0.24.0/go.mod h1:VFPQET+cAFpYxh6Bq6f4xyMY80G6jKKktU6G0m00VDw= +k8s.io/client-go v0.31.0 h1:QqEJzNjbN2Yv1H79SsS+SWnXkBgVu4Pj3CJQgbx0gI8= +k8s.io/client-go v0.31.0/go.mod h1:Y9wvC76g4fLjmU0BA+rV+h2cncoadjvjjkkIGoTLcGU= k8s.io/code-generator v0.18.3/go.mod h1:TgNEVx9hCyPGpdtCWA34olQYLkh3ok9ar7XfSsr8b6c= k8s.io/code-generator v0.20.1/go.mod h1:UsqdF+VX4PU2g46NC2JRs4gc+IfrctnwHb76RNbWHJg= -k8s.io/code-generator v0.24.0/go.mod h1:dpVhs00hTuTdTY6jvVxvTFCk6gSMrtfRydbhZwHI15w= k8s.io/component-base v0.20.1/go.mod h1:guxkoJnNoh8LNrbtiQOlyp2Y2XFCZQmrcg2n/DeYNLk= k8s.io/component-base v0.20.2/go.mod h1:pzFtCiwe/ASD0iV7ySMu8SYVJjCapNM9bjvk7ptpKh0= -k8s.io/component-base v0.24.0 h1:h5jieHZQoHrY/lHG+HyrSbJeyfuitheBvqvKwKHVC0g= -k8s.io/component-base v0.24.0/go.mod h1:Dgazgon0i7KYUsS8krG8muGiMVtUZxG037l1MKyXgrA= +k8s.io/component-base v0.31.0 h1:/KIzGM5EvPNQcYgwq5NwoQBaOlVFrghoVGr8lG6vNRs= +k8s.io/component-base v0.31.0/go.mod h1:TYVuzI1QmN4L5ItVdMSXKvH7/DtvIuas5/mm8YT3rTo= k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20200114144118-36b2048a9120/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20201113003025-83324d819ded/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= -k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= -k8s.io/gengo v0.0.0-20211129171323-c02415ce4185/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= -k8s.io/klog/v2 v2.60.1 h1:VW25q3bZx9uE3vvdL6M8ezOX79vA2Aq1nEWLqNQclHc= -k8s.io/klog/v2 v2.60.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= +k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= k8s.io/kube-openapi v0.0.0-20200410145947-61e04a5be9a6/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E= k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM= -k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42 h1:Gii5eqf+GmIEwGNKQYQClCayuJCe2/4fZUvF7VG99sU= -k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42/go.mod h1:Z/45zLw8lUo4wdiUkI+v/ImEGAvu3WatcZl3lPMR4Rk= +k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 h1:BZqlfIlq5YbRMFko6/PM7FjZpUb45WallggurYhKGag= +k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340/go.mod h1:yD4MZYeKMBwQKVht279WycxKyM84kkAx2DPrTXaeb98= k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20210111153108-fddb29f9d009/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 h1:HNSDgDCrr/6Ly3WEGKZftiE7IY19Vz2GdbOCyI4qqhc= -k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 h1:pUdcCO1Lk/tbT5ztQWOBi5HBgbBP1J8+AsQnQCKsi8A= +k8s.io/utils v0.0.0-20240711033017-18e509b52bc8/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.14/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.30/go.mod h1:fEO7lRTdivWO2qYVCVG7dEADOMo/MLDCVr8So2g88Uw= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.30.3 h1:2770sDpzrjjsAtVhSeUFseziht227YAWYHLGNM8QPwY= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.30.3/go.mod h1:Ve9uj1L+deCXFrPOk1LpFXqTg7LCFzFso6PA48q/XZw= sigs.k8s.io/controller-runtime v0.8.1/go.mod h1:U/l+DUopBc1ecfRZ5aviA9JDmGFQKvLf5YkZNx2e0sU= -sigs.k8s.io/controller-runtime v0.12.1 h1:4BJY01xe9zKQti8oRjj/NeHKRXthf1YkYJAgLONFFoI= -sigs.k8s.io/controller-runtime v0.12.1/go.mod h1:BKhxlA4l7FPK4AQcsuL4X6vZeWnKDXez/vp1Y8dxTU0= -sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2 h1:kDi4JBNAsJWfz1aEXhO8Jg87JJaPNLh5tIzYHgStQ9Y= -sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2/go.mod h1:B+TnT182UBxE84DiCz4CVE26eOSDAeYCpfDnC2kdKMY= +sigs.k8s.io/controller-runtime v0.19.0 h1:nWVM7aq+Il2ABxwiCizrVDSlmDcshi9llbaFbC0ji/Q= +sigs.k8s.io/controller-runtime v0.19.0/go.mod h1:iRmWllt8IlaLjvTTDLhRBXIEtkCK6hwVBJJsYS9Ajf4= +sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= +sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/structured-merge-diff/v3 v3.0.0-20200116222232-67a7b8c61874/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= sigs.k8s.io/structured-merge-diff/v3 v3.0.0/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= -sigs.k8s.io/structured-merge-diff/v4 v4.2.1 h1:bKCqE9GvQ5tiVHn5rfn1r+yao3aLQEaLzkkmAkf+A6Y= -sigs.k8s.io/structured-merge-diff/v4 v4.2.1/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= +sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= +sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= -sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= -sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= +sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= +sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= diff --git a/pkg/controllers/endpointmonitor_controller.go b/internal/controller/endpointmonitor_controller.go similarity index 96% rename from pkg/controllers/endpointmonitor_controller.go rename to internal/controller/endpointmonitor_controller.go index b81f58389..094bf8a09 100644 --- a/pkg/controllers/endpointmonitor_controller.go +++ b/internal/controller/endpointmonitor_controller.go @@ -29,6 +29,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/controller" logf "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/reconcile" @@ -49,7 +50,6 @@ type EndpointMonitorReconciler struct { //+kubebuilder:rbac:groups=endpointmonitor.stakater.com,resources=endpointmonitors/status,verbs=get;update;patch //+kubebuilder:rbac:groups=endpointmonitor.stakater.com,resources=endpointmonitors/finalizers,verbs=update //+kubebuilder:rbac:groups=route.openshift.io,resources=routes,verbs=get;list;watch -//+kubebuilder:rbac:groups=extensions,resources=ingresses,verbs=get;list;watch //+kubebuilder:rbac:groups=networking.k8s.io,resources=ingresses,verbs=get;list;watch //+kubebuilder:rbac:groups="",resources=services,verbs=get;list //+kubebuilder:rbac:groups="",resources=pods,verbs=get;list @@ -105,8 +105,11 @@ func (r *EndpointMonitorReconciler) Reconcile(ctx context.Context, req ctrl.Requ } // SetupWithManager sets up the controller with the Manager. -func (r *EndpointMonitorReconciler) SetupWithManager(mgr ctrl.Manager) error { +func (r *EndpointMonitorReconciler) SetupWithManager(mgr ctrl.Manager, maxConcurrentReconciles int) error { return ctrl.NewControllerManagedBy(mgr). + WithOptions(controller.Options{ + MaxConcurrentReconciles: maxConcurrentReconciles, + }). For(&endpointmonitorv1alpha1.EndpointMonitor{}). Complete(r) } diff --git a/pkg/controllers/endpointmonitor_created.go b/internal/controller/endpointmonitor_created.go similarity index 100% rename from pkg/controllers/endpointmonitor_created.go rename to internal/controller/endpointmonitor_created.go diff --git a/pkg/controllers/endpointmonitor_deleted.go b/internal/controller/endpointmonitor_deleted.go similarity index 100% rename from pkg/controllers/endpointmonitor_deleted.go rename to internal/controller/endpointmonitor_deleted.go diff --git a/pkg/controllers/endpointmonitor_updated.go b/internal/controller/endpointmonitor_updated.go similarity index 100% rename from pkg/controllers/endpointmonitor_updated.go rename to internal/controller/endpointmonitor_updated.go diff --git a/pkg/controllers/endpointmonitor_util.go b/internal/controller/endpointmonitor_util.go similarity index 100% rename from pkg/controllers/endpointmonitor_util.go rename to internal/controller/endpointmonitor_util.go diff --git a/pkg/config/config.go b/pkg/config/config.go index e2da6ca48..46a8b4e79 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -5,8 +5,8 @@ import ( "strconv" "time" - util "github.com/stakater/operator-utils/util" - yaml "gopkg.in/yaml.v2" + "github.com/stakater/operator-utils/util" + "gopkg.in/yaml.v2" logf "sigs.k8s.io/controller-runtime/pkg/log" "github.com/stakater/IngressMonitorController/v2/pkg/secret" @@ -74,13 +74,14 @@ type Provider struct { } type AppInsights struct { - Name string `yaml:"name"` - Location string `yaml:"location"` - ResourceGroup string `yaml:"resourceGroup"` - Frequency int32 `yaml:"frequency"` - GeoLocation []interface{} `yaml:"geoLocation"` - EmailAction EmailAction `yaml:"emailAction"` - WebhookAction WebhookAction `yaml:"webhookAction"` + Name string `yaml:"name"` + SubscriptionId string `yaml:"subscriptionId"` + Location string `yaml:"location"` + ResourceGroup string `yaml:"resourceGroup"` + Frequency int32 `yaml:"frequency"` + GeoLocation []interface{} `yaml:"geoLocation"` + EmailAction EmailAction `yaml:"emailAction"` + WebhookAction WebhookAction `yaml:"webhookAction"` } type Gcloud struct { @@ -92,8 +93,8 @@ type Grafana struct { } type EmailAction struct { - SendToServiceOwners bool `yaml:"send_to_service_owners"` - CustomEmails []string `yaml:"custom_emails"` + SendToServiceOwners bool `yaml:"send_to_service_owners"` + CustomEmails []*string `yaml:"custom_emails"` } type WebhookAction struct { diff --git a/pkg/config/config_test.go b/pkg/config/config_test.go index 9bf9f3958..eb6dad4c5 100644 --- a/pkg/config/config_test.go +++ b/pkg/config/config_test.go @@ -1,6 +1,7 @@ package config import ( + "github.com/Azure/azure-sdk-for-go/sdk/azcore/to" "reflect" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/log/zap" @@ -113,7 +114,7 @@ func TestConfigWithAppinsights(t *testing.T) { ResourceGroup: "demoRG", EmailAction: EmailAction{ SendToServiceOwners: false, - CustomEmails: []string{"mail@cizer.dev"}, + CustomEmails: []*string{to.Ptr("mail@cizer.dev")}, }, WebhookAction: WebhookAction{ ServiceURI: "https://webhook.io", diff --git a/pkg/http/httpClient.go b/pkg/http/httpClient.go index 334441a1f..1ae626ce7 100644 --- a/pkg/http/httpClient.go +++ b/pkg/http/httpClient.go @@ -17,6 +17,7 @@ type HttpClient struct { type HttpResponse struct { StatusCode int Bytes []byte + Header http.Header } func CreateHttpClient(url string) *HttpClient { @@ -53,7 +54,10 @@ func (client *HttpClient) RequestWithHeaders(requestType string, body []byte, he log.Error(nil, "got empty response") } - httpResponse := HttpResponse{StatusCode: response.StatusCode} + httpResponse := HttpResponse{ + StatusCode: response.StatusCode, + Header: response.Header, + } defer response.Body.Close() responseBytes, _ := io.ReadAll(response.Body) diff --git a/pkg/kube/wrappers/ingress-wrapper.go b/pkg/kube/wrappers/ingress-wrapper.go index 9a5f37e6e..153b3c7ad 100644 --- a/pkg/kube/wrappers/ingress-wrapper.go +++ b/pkg/kube/wrappers/ingress-wrapper.go @@ -27,7 +27,7 @@ func NewIngressWrapper(ingress *v1.Ingress, client client.Client) *IngressWrappe } func (iw *IngressWrapper) supportsTLS() bool { - if iw.Ingress.Spec.TLS != nil && len(iw.Ingress.Spec.TLS) > 0 && iw.Ingress.Spec.TLS[0].Hosts != nil && len(iw.Ingress.Spec.TLS[0].Hosts) > 0 && len(iw.Ingress.Spec.TLS[0].Hosts[0]) > 0 { + if len(iw.Ingress.Spec.TLS) > 0 && len(iw.Ingress.Spec.TLS[0].Hosts) > 0 && len(iw.Ingress.Spec.TLS[0].Hosts[0]) > 0 { return true } return false @@ -50,16 +50,13 @@ func (iw *IngressWrapper) getHost() string { } func (iw *IngressWrapper) rulesExist() bool { - if iw.Ingress.Spec.Rules != nil && len(iw.Ingress.Spec.Rules) > 0 { - return true - } - return false + return len(iw.Ingress.Spec.Rules) > 0 } func (iw *IngressWrapper) getIngressSubPath() string { rule := iw.Ingress.Spec.Rules[0] if rule.HTTP != nil { - if rule.HTTP.Paths != nil && len(rule.HTTP.Paths) > 0 { + if len(rule.HTTP.Paths) > 0 { path := rule.HTTP.Paths[0].Path // Remove * from path if exists diff --git a/pkg/kube/wrappers/routeWrapper.go b/pkg/kube/wrappers/routeWrapper.go index 72342dd90..4ab471926 100644 --- a/pkg/kube/wrappers/routeWrapper.go +++ b/pkg/kube/wrappers/routeWrapper.go @@ -129,5 +129,10 @@ func (rw *RouteWrapper) GetURL(forceHttps bool, healthEndpoint string) string { u.Path = path.Join(u.Path, healthEndpoint) } } - return u.String() + path, err := url.PathUnescape(u.String()) + if err != nil { + log.Info(fmt.Sprintf("Error in unescaping path :%v", err)) + return "" + } + return path } diff --git a/pkg/kube/wrappers/routeWrapper_test.go b/pkg/kube/wrappers/routeWrapper_test.go index cfd5fee4e..d06c16dfa 100644 --- a/pkg/kube/wrappers/routeWrapper_test.go +++ b/pkg/kube/wrappers/routeWrapper_test.go @@ -53,6 +53,14 @@ func TestRouteWrapper_getURL(t *testing.T) { }, want: "http://testurl.stackator.com/hello", }, + { + name: "TestGetUrlWithParams", + fields: fields{ + route: createRouteObjectWithPath("testRoute", "test", routeTestUrl, "/health?standbyok=true&sealedcode=204&uninitcode=204"), + Client: fakekubeclient.NewClientBuilder().Build(), + }, + want: "http://testurl.stackator.com/health?standbyok=true&sealedcode=204&uninitcode=204", + }, { name: "TestGetUrlWithNoPath", fields: fields{ diff --git a/pkg/monitors/appinsights/appinsights-monitor.go b/pkg/monitors/appinsights/appinsights-monitor.go index fdc66df22..1a3d2bf8c 100644 --- a/pkg/monitors/appinsights/appinsights-monitor.go +++ b/pkg/monitors/appinsights/appinsights-monitor.go @@ -4,14 +4,20 @@ package appinsights import ( "context" "encoding/xml" + "errors" "fmt" "net/http" "os" - "github.com/Azure/azure-sdk-for-go/services/appinsights/mgmt/2015-05-01/insights" - insightsAlert "github.com/Azure/azure-sdk-for-go/services/preview/monitor/mgmt/2018-03-01/insights" - "github.com/Azure/go-autorest/autorest/azure/auth" - "github.com/kelseyhightower/envconfig" + "github.com/Azure/azure-sdk-for-go/sdk/azcore" + "github.com/Azure/azure-sdk-for-go/sdk/azcore/arm" + "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" + "github.com/Azure/azure-sdk-for-go/sdk/azcore/to" + "github.com/Azure/azure-sdk-for-go/sdk/azidentity" + "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/monitor/armmonitor" + + "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/applicationinsights/armapplicationinsights" + "github.com/stakater/IngressMonitorController/v2/pkg/config" "github.com/stakater/IngressMonitorController/v2/pkg/models" logf "sigs.k8s.io/controller-runtime/pkg/log" @@ -35,27 +41,19 @@ type Configuration struct { // AppinsightsMonitorService struct contains parameters required by appinsights go client type AppinsightsMonitorService struct { - insightsClient insights.WebTestsClient - alertrulesClient insightsAlert.AlertRulesClient + insightsClient *armapplicationinsights.WebTestsClient + alertrulesClient *armmonitor.AlertRulesClient name string location string resourceGroup string geoLocation []interface{} - emailAction []string + emailAction []*string webhookAction string emailToOwners bool subscriptionID string ctx context.Context } -// AzureConfig holds service principle credentials required of auth -type AzureConfig struct { - Subscription_ID string - Client_ID string - Client_Secret string - Tenant_ID string -} - type WebTest struct { XMLName xml.Name `xml:"WebTest"` Xmlns string `xml:"xmlns,attr"` @@ -106,13 +104,6 @@ func (aiService *AppinsightsMonitorService) Setup(provider config.Provider) { log.Info("AppInsights Monitor's Setup has been called. Initializing AppInsights Client..") - var azConfig AzureConfig - err := envconfig.Process("AZURE", &azConfig) - if err != nil { - log.Error(err, "Error fetching environment variable") - os.Exit(1) - } - aiService.ctx = context.Background() aiService.name = provider.AppInsightsConfig.Name aiService.location = provider.AppInsightsConfig.Location @@ -121,25 +112,34 @@ func (aiService *AppinsightsMonitorService) Setup(provider config.Provider) { aiService.emailAction = provider.AppInsightsConfig.EmailAction.CustomEmails aiService.emailToOwners = provider.AppInsightsConfig.EmailAction.SendToServiceOwners aiService.webhookAction = provider.AppInsightsConfig.WebhookAction.ServiceURI - aiService.subscriptionID = azConfig.Subscription_ID - - // Generate clientConfig based on Azure Credentials (Service Principle) - clientConfig := auth.NewClientCredentialsConfig(azConfig.Client_ID, azConfig.Client_Secret, azConfig.Tenant_ID) - - // initialize appinsights client - err = aiService.insightsClient.AddToUserAgent("appInsightsMonitor") - if err != nil { - log.Error(err, "Error adding UserAgent in AppInsights Client") - os.Exit(1) + aiService.subscriptionID = provider.AppInsightsConfig.SubscriptionId + + // For backward compatibility when subscriptionID was supplied via environment variable + if aiService.subscriptionID == "" { + if sid := os.Getenv("AZURE_SUBSCRIPTION_ID"); sid != "" { + aiService.subscriptionID = sid + } else { + log.Error(nil, "Azure SubscriptionId is required") + os.Exit(1) + } } - aiService.insightsClient = insights.NewWebTestsClient(azConfig.Subscription_ID) + creds, err := azidentity.NewDefaultAzureCredential(nil) if err != nil { log.Error(err, "Error initializing AppInsights Client") os.Exit(1) } - aiService.insightsClient.Authorizer, err = clientConfig.Authorizer() + clientOptions := &arm.ClientOptions{ + ClientOptions: policy.ClientOptions{ + Telemetry: policy.TelemetryOptions{ + ApplicationID: "appInsightsMonitor", + }, + }, + } + + aiService.insightsClient, err = armapplicationinsights.NewWebTestsClient(aiService.subscriptionID, creds, clientOptions) + if err != nil { log.Error(err, "Error initializing AppInsights Client") os.Exit(1) @@ -149,8 +149,7 @@ func (aiService *AppinsightsMonitorService) Setup(provider config.Provider) { // initialize monitoring alertrule client only if Email Action or Webhook Action is specified. if aiService.isAlertEnabled() { - aiService.alertrulesClient = insightsAlert.NewAlertRulesClient(azConfig.Subscription_ID) - aiService.alertrulesClient.Authorizer, err = clientConfig.Authorizer() + aiService.alertrulesClient, err = armmonitor.NewAlertRulesClient(aiService.subscriptionID, creds, clientOptions) if err != nil { log.Error(err, "Error initializing AppInsights Alertrules Client") os.Exit(1) @@ -169,23 +168,22 @@ func (aiService *AppinsightsMonitorService) GetAll() []models.Monitor { var monitors []models.Monitor - webtests, err := aiService.insightsClient.ListByComponent(aiService.ctx, aiService.name, aiService.resourceGroup) - if err != nil { - if webtests.Response().StatusCode == http.StatusNotFound { + pager := aiService.insightsClient.NewListByComponentPager(aiService.name, aiService.resourceGroup, nil) + for pager.More() { + page, err := pager.NextPage(aiService.ctx) + if err != nil { return monitors } - return monitors - } - for _, webtest := range webtests.Values() { - newMonitor := models.Monitor{ - Name: *webtest.Name, - URL: getURL(*webtest.Configuration.WebTest), - ID: *webtest.ID, + for _, wt := range page.Value { + m := models.Monitor{ + Name: *wt.Name, + ID: *wt.ID, + URL: getURL(*wt.Properties.Configuration.WebTest), + } + monitors = append(monitors, m) } - monitors = append(monitors, newMonitor) } - return monitors } @@ -195,16 +193,19 @@ func (aiService *AppinsightsMonitorService) GetAll() []models.Monitor { func (aiService *AppinsightsMonitorService) GetByName(monitorName string) (*models.Monitor, error) { log.Info("AppInsights Monitor's GetByName method has been called") - webtest, err := aiService.insightsClient.Get(aiService.ctx, aiService.resourceGroup, monitorName) + webtest, err := aiService.insightsClient.Get(aiService.ctx, aiService.resourceGroup, monitorName, nil) if err != nil { - if webtest.Response.StatusCode == http.StatusNotFound { - return nil, fmt.Errorf("Application Insights WebTest %s was not found in Resource Group %s", monitorName, aiService.resourceGroup) + var re *azcore.ResponseError + if errors.As(err, &re) { + if re.StatusCode == http.StatusNotFound { + return nil, fmt.Errorf("Application Insights WebTest %s was not found in Resource Group %s", monitorName, aiService.resourceGroup) + } } return nil, fmt.Errorf("Error retrieving Application Insights WebTests %s (Resource Group %s): %v", monitorName, aiService.resourceGroup, err) } return &models.Monitor{ Name: *webtest.Name, - URL: getURL(*webtest.Configuration.WebTest), + URL: getURL(*webtest.Properties.Configuration.WebTest), ID: *webtest.ID, }, nil @@ -216,7 +217,7 @@ func (aiService *AppinsightsMonitorService) Add(monitor models.Monitor) { log.Info("AppInsights Monitor's Add method has been called") log.Info(fmt.Sprintf("Adding Application Insights WebTest '%s' from '%s'", monitor.Name, aiService.name)) webtest := aiService.createWebTest(monitor) - _, err := aiService.insightsClient.CreateOrUpdate(aiService.ctx, aiService.resourceGroup, monitor.Name, webtest) + _, err := aiService.insightsClient.CreateOrUpdate(aiService.ctx, aiService.resourceGroup, monitor.Name, webtest, nil) if err != nil { log.Error(err, fmt.Sprintf("Error adding Application Insights WebTests %s (Resource Group %s): %v", monitor.Name, aiService.resourceGroup, err)) } else { @@ -225,7 +226,7 @@ func (aiService *AppinsightsMonitorService) Add(monitor models.Monitor) { log.Info(fmt.Sprintf("Adding alert rule for WebTest '%s' from '%s'", monitor.Name, aiService.name)) alertName := fmt.Sprintf("%s-alert", monitor.Name) webtestAlert := aiService.createAlertRuleResource(monitor) - _, err := aiService.alertrulesClient.CreateOrUpdate(aiService.ctx, aiService.resourceGroup, alertName, webtestAlert) + _, err := aiService.alertrulesClient.CreateOrUpdate(aiService.ctx, aiService.resourceGroup, alertName, webtestAlert, nil) if err != nil { log.Error(err, fmt.Sprintf("Error adding alert rule for WebTests %s (Resource Group %s): %v", monitor.Name, aiService.resourceGroup, err)) } @@ -242,7 +243,7 @@ func (aiService *AppinsightsMonitorService) Update(monitor models.Monitor) { log.Info(fmt.Sprintf("Updating Application Insights WebTest '%s' from '%s'", monitor.Name, aiService.name)) webtest := aiService.createWebTest(monitor) - _, err := aiService.insightsClient.CreateOrUpdate(aiService.ctx, aiService.resourceGroup, monitor.Name, webtest) + _, err := aiService.insightsClient.CreateOrUpdate(aiService.ctx, aiService.resourceGroup, monitor.Name, webtest, nil) if err != nil { log.Error(err, fmt.Sprintf("Error updating Application Insights WebTests %s (Resource Group %s): %v", monitor.Name, aiService.resourceGroup, err)) } else { @@ -251,7 +252,7 @@ func (aiService *AppinsightsMonitorService) Update(monitor models.Monitor) { log.Info(fmt.Sprintf("Updating alert rule for WebTest '%s' from '%s'", monitor.Name, aiService.name)) alertName := fmt.Sprintf("%s-alert", monitor.Name) webtestAlert := aiService.createAlertRuleResource(monitor) - _, err := aiService.alertrulesClient.CreateOrUpdate(aiService.ctx, aiService.resourceGroup, alertName, webtestAlert) + _, err := aiService.alertrulesClient.CreateOrUpdate(aiService.ctx, aiService.resourceGroup, alertName, webtestAlert, nil) if err != nil { log.Error(err, fmt.Sprintf("Error updating alert rule for WebTests %s (Resource Group %s): %v", monitor.Name, aiService.resourceGroup, err)) } @@ -265,10 +266,13 @@ func (aiService *AppinsightsMonitorService) Remove(monitor models.Monitor) { log.Info("AppInsights Monitor's Remove method has been called") log.Info(fmt.Sprintf("Deleting Application Insights WebTest '%s' from '%s'", monitor.Name, aiService.name)) - r, err := aiService.insightsClient.Delete(aiService.ctx, aiService.resourceGroup, monitor.Name) + _, err := aiService.insightsClient.Delete(aiService.ctx, aiService.resourceGroup, monitor.Name, nil) if err != nil { - if r.Response.StatusCode == http.StatusNotFound { - log.Error(err, fmt.Sprintf("Application Insights WebTest %s was not found in Resource Group %s", monitor.Name, aiService.resourceGroup)) + var re *azcore.ResponseError + if errors.As(err, &re) { + if re.StatusCode == http.StatusNotFound { + log.Error(err, fmt.Sprintf("Application Insights WebTest %s was not found in Resource Group %s", monitor.Name, aiService.resourceGroup)) + } } log.Error(err, fmt.Sprintf("Error deleting Application Insights WebTests %s (Resource Group %s): %v", monitor.Name, aiService.resourceGroup, err)) } else { @@ -276,10 +280,13 @@ func (aiService *AppinsightsMonitorService) Remove(monitor models.Monitor) { if aiService.isAlertEnabled() { log.Info(fmt.Sprintf("Deleting alert rule for WebTest '%s' from '%s'", monitor.Name, aiService.name)) alertName := fmt.Sprintf("%s-alert", monitor.Name) - r, err := aiService.alertrulesClient.Delete(aiService.ctx, aiService.resourceGroup, alertName) + _, err := aiService.alertrulesClient.Delete(aiService.ctx, aiService.resourceGroup, alertName, nil) if err != nil { - if r.Response.StatusCode == http.StatusNotFound { - log.Error(err, fmt.Sprintf("WebTest Alert rule %s was not found in Resource Group %s", alertName, aiService.resourceGroup)) + var re *azcore.ResponseError + if errors.As(err, &re) { + if re.StatusCode == http.StatusNotFound { + log.Error(err, fmt.Sprintf("WebTest Alert rule %s was not found in Resource Group %s", alertName, aiService.resourceGroup)) + } } log.Error(err, fmt.Sprintf("Error deleting alert rule for WebTests %s (Resource Group %s): %v", alertName, aiService.resourceGroup, err)) } @@ -289,7 +296,7 @@ func (aiService *AppinsightsMonitorService) Remove(monitor models.Monitor) { } // createWebTest forms xml configuration for Appinsights WebTest -func (aiService *AppinsightsMonitorService) createWebTest(monitor models.Monitor) insights.WebTest { +func (aiService *AppinsightsMonitorService) createWebTest(monitor models.Monitor) armapplicationinsights.WebTest { isEnabled := true webtest := NewWebTest() @@ -304,19 +311,20 @@ func (aiService *AppinsightsMonitorService) createWebTest(monitor models.Monitor log.Error(err, "Error encoding XML WebTest Configuration") } webtestConfig := string(xmlByte) - return insights.WebTest{ + pingKind := armapplicationinsights.WebTestKindPing + return armapplicationinsights.WebTest{ Name: &monitor.Name, Location: &aiService.location, - Kind: insights.Ping, // forcing type of webtest to 'ping',this could be as replace with provider configuration - WebTestProperties: &insights.WebTestProperties{ + Kind: &pingKind, // forcing type of webtest to 'ping',this could be as replace with provider configuration + Properties: &armapplicationinsights.WebTestProperties{ SyntheticMonitorID: &monitor.Name, WebTestName: &monitor.Name, - WebTestKind: insights.Ping, + WebTestKind: &pingKind, RetryEnabled: &configs.isRetryEnabled, Enabled: &isEnabled, Frequency: &configs.frequency, Locations: getGeoLocation(aiService.geoLocation), - Configuration: &insights.WebTestPropertiesConfiguration{ + Configuration: &armapplicationinsights.WebTestPropertiesConfiguration{ WebTest: &webtestConfig, }, }, @@ -326,7 +334,7 @@ func (aiService *AppinsightsMonitorService) createWebTest(monitor models.Monitor } // createWebTestAlert forms xml configuration for Appinsights WebTest -func (aiService *AppinsightsMonitorService) createAlertRuleResource(monitor models.Monitor) insightsAlert.AlertRuleResource { +func (aiService *AppinsightsMonitorService) createAlertRuleResource(monitor models.Monitor) armmonitor.AlertRuleResource { isEnabled := aiService.isAlertEnabled() failedLocationCount := int32(1) @@ -335,43 +343,44 @@ func (aiService *AppinsightsMonitorService) createAlertRuleResource(monitor mode description := fmt.Sprintf("%s alert is created using Ingress Monitor Controller", alertName) resourceUri := fmt.Sprintf("/subscriptions/%s/resourceGroups/%s/providers/microsoft.insights/webtests/%s", aiService.subscriptionID, aiService.resourceGroup, monitor.Name) - actions := make([]insightsAlert.BasicRuleAction, 0, 2) + actions := make([]armmonitor.RuleActionClassification, 0, 2) if len(aiService.emailAction) > 0 { - actions = append(actions, insightsAlert.RuleEmailAction{ + actions = append(actions, &armmonitor.RuleEmailAction{ SendToServiceOwners: &aiService.emailToOwners, - CustomEmails: &(aiService.emailAction), + CustomEmails: aiService.emailAction, }) } if aiService.webhookAction != "" { - actions = append(actions, insightsAlert.RuleWebhookAction{ + actions = append(actions, &armmonitor.RuleWebhookAction{ ServiceURI: &aiService.webhookAction, }) } - alertRule := insightsAlert.AlertRule{ + alertRule := armmonitor.AlertRule{ Name: &alertName, IsEnabled: &isEnabled, Description: &description, - Condition: &insightsAlert.LocationThresholdRuleCondition{ - DataSource: insightsAlert.RuleMetricDataSource{ + Condition: &armmonitor.LocationThresholdRuleCondition{ + DataSource: &armmonitor.RuleMetricDataSource{ ResourceURI: &resourceUri, - OdataType: insightsAlert.OdataTypeMicrosoftAzureManagementInsightsModelsRuleMetricDataSource, + ODataType: to.Ptr("Microsoft.Azure.Management.Insights.Models.RuleMetricDataSource"), MetricName: &alertName, }, FailedLocationCount: &failedLocationCount, WindowSize: &period, - OdataType: insightsAlert.OdataTypeMicrosoftAzureManagementInsightsModelsLocationThresholdRuleCondition, + ODataType: to.Ptr("Microsoft.Azure.Management.Insights.Models.LocationThresholdRuleCondition"), }, - Actions: &actions, + Actions: actions, } - return insightsAlert.AlertRuleResource{ - Name: &monitor.Name, - Location: &aiService.location, - AlertRule: &alertRule, - ID: &resourceUri, - Tags: aiService.getTags("alert", monitor.Name), + return armmonitor.AlertRuleResource{ + Location: &aiService.location, + Properties: &alertRule, + Tags: aiService.getTags("alert", monitor.Name), + ID: &resourceUri, + Name: &monitor.Name, } + } diff --git a/pkg/monitors/appinsights/appinsights-monitor_test.go b/pkg/monitors/appinsights/appinsights-monitor_test.go index e6078e6d5..17a22d4f4 100644 --- a/pkg/monitors/appinsights/appinsights-monitor_test.go +++ b/pkg/monitors/appinsights/appinsights-monitor_test.go @@ -4,11 +4,12 @@ package appinsights import ( "context" "fmt" - "reflect" + "github.com/Azure/azure-sdk-for-go/sdk/azcore/to" + "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/applicationinsights/armapplicationinsights" + "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/monitor/armmonitor" + "github.com/google/go-cmp/cmp" "testing" - "github.com/Azure/azure-sdk-for-go/services/appinsights/mgmt/2015-05-01/insights" - insightsAlert "github.com/Azure/azure-sdk-for-go/services/preview/monitor/mgmt/2018-03-01/insights" endpointmonitorv1alpha1 "github.com/stakater/IngressMonitorController/v2/api/v1alpha1" "github.com/stakater/IngressMonitorController/v2/pkg/models" ctrl "sigs.k8s.io/controller-runtime" @@ -37,13 +38,13 @@ func TestAppinsightsMonitorService_createWebTest(t *testing.T) { webTestConfig := "" type fields struct { - insightsClient insights.WebTestsClient - alertrulesClient insightsAlert.AlertRulesClient + insightsClient *armapplicationinsights.WebTestsClient + alertrulesClient *armmonitor.AlertRulesClient name string location string resourceGroup string geoLocation []interface{} - emailAction []string + emailAction []*string webhookAction string emailToOwners bool subscriptionID string @@ -56,7 +57,7 @@ func TestAppinsightsMonitorService_createWebTest(t *testing.T) { name string fields fields args args - want insights.WebTest + want armapplicationinsights.WebTest }{ { name: webtestName, @@ -67,7 +68,7 @@ func TestAppinsightsMonitorService_createWebTest(t *testing.T) { subscriptionID: "99cb99da-9cf9-9999-9999-9eacc5d36a65", resourceGroup: resourceGroup, geoLocation: []interface{}{geoLocation}, - emailAction: []string{"mail@cizer.dev"}, + emailAction: []*string{to.Ptr("mail@cizer.dev")}, webhookAction: "https://webhook.io", ctx: context.Background(), }, @@ -83,21 +84,21 @@ func TestAppinsightsMonitorService_createWebTest(t *testing.T) { ID: "", }, }, - want: insights.WebTest{ + want: armapplicationinsights.WebTest{ Name: &webtestName, Location: &location, - Kind: insights.Ping, // forcing type of webtest to 'ping',this could be as replace with provider configuration - WebTestProperties: &insights.WebTestProperties{ + Kind: to.Ptr(armapplicationinsights.WebTestKindPing), // forcing type of webtest to 'ping',this could be as replace with provider configuration + Properties: &armapplicationinsights.WebTestProperties{ SyntheticMonitorID: &webtestName, WebTestName: &webtestName, - WebTestKind: insights.Ping, + WebTestKind: to.Ptr(armapplicationinsights.WebTestKindPing), RetryEnabled: &isRetryEnabled, Enabled: &isEnabled, Frequency: &frequency, - Locations: &[]insights.WebTestGeolocation{ + Locations: []*armapplicationinsights.WebTestGeolocation{ {Location: &geoLocation}, }, - Configuration: &insights.WebTestPropertiesConfiguration{ + Configuration: &armapplicationinsights.WebTestPropertiesConfiguration{ WebTest: &webTestConfig, }, }, @@ -120,8 +121,8 @@ func TestAppinsightsMonitorService_createWebTest(t *testing.T) { subscriptionID: tt.fields.subscriptionID, ctx: tt.fields.ctx, } - if got := aiService.createWebTest(tt.args.monitor); !reflect.DeepEqual(got, tt.want) { - t.Errorf("AppinsightsMonitorService.createWebTest() = %v, want %v", got, tt.want) + if got := aiService.createWebTest(tt.args.monitor); !cmp.Equal(got, tt.want) { + t.Errorf("AppinsightsMonitorService.createWebTest() = %v", cmp.Diff(got, tt.want)) } }) } @@ -139,7 +140,7 @@ func TestAppinsightsMonitorService_createAlertRuleResource(t *testing.T) { geoLocation := []interface{}{"us-tx-sn1-azr"} isEnabled := true subID := "99cb99da-9cf9-9999-9999-9eacc5d36a65" - emailAction := []string{"mail@cizer.dev"} + emailAction := []*string{to.Ptr("mail@cizer.dev")} webhookAction := "https://webhook.io" emailToOwners := false description := fmt.Sprintf("%s-alert alert is created using Ingress Monitor Controller", webtestName) @@ -149,24 +150,24 @@ func TestAppinsightsMonitorService_createAlertRuleResource(t *testing.T) { tag["hidden-link:/subscriptions/99cb99da-9cf9-9999-9999-9eacc5d36a65/resourceGroups/demoRG/providers/microsoft.insights/components/foo-appinsights"] = &tagValue tag["hidden-link:/subscriptions/99cb99da-9cf9-9999-9999-9eacc5d36a65/resourceGroups/demoRG/providers/microsoft.insights/webtests/foo"] = &tagValue - actions := []insightsAlert.BasicRuleAction{ - insightsAlert.RuleEmailAction{ + actions := []armmonitor.RuleActionClassification{ + &armmonitor.RuleEmailAction{ SendToServiceOwners: &emailToOwners, - CustomEmails: &(emailAction), + CustomEmails: emailAction, }, - insightsAlert.RuleWebhookAction{ + &armmonitor.RuleWebhookAction{ ServiceURI: &webhookAction, }, } type fields struct { - insightsClient insights.WebTestsClient - alertrulesClient insightsAlert.AlertRulesClient + insightsClient *armapplicationinsights.WebTestsClient + alertrulesClient *armmonitor.AlertRulesClient name string location string resourceGroup string geoLocation []interface{} - emailAction []string + emailAction []*string webhookAction string emailToOwners bool subscriptionID string @@ -179,7 +180,7 @@ func TestAppinsightsMonitorService_createAlertRuleResource(t *testing.T) { name string fields fields args args - want insightsAlert.AlertRuleResource + want armmonitor.AlertRuleResource }{ { name: webtestName, @@ -206,25 +207,25 @@ func TestAppinsightsMonitorService_createAlertRuleResource(t *testing.T) { ID: "", }, }, - want: insightsAlert.AlertRuleResource{ + want: armmonitor.AlertRuleResource{ Name: &webtestName, Location: &location, ID: &resourceUri, - AlertRule: &insightsAlert.AlertRule{ + Properties: &armmonitor.AlertRule{ Name: &alertName, IsEnabled: &isEnabled, Description: &description, - Condition: &insightsAlert.LocationThresholdRuleCondition{ - DataSource: insightsAlert.RuleMetricDataSource{ + Condition: &armmonitor.LocationThresholdRuleCondition{ + DataSource: &armmonitor.RuleMetricDataSource{ ResourceURI: &resourceUri, - OdataType: insightsAlert.OdataTypeMicrosoftAzureManagementInsightsModelsRuleMetricDataSource, + ODataType: to.Ptr("Microsoft.Azure.Management.Insights.Models.RuleMetricDataSource"), MetricName: &alertName, }, FailedLocationCount: &failedLocationCount, WindowSize: &period, - OdataType: insightsAlert.OdataTypeMicrosoftAzureManagementInsightsModelsLocationThresholdRuleCondition, + ODataType: to.Ptr("Microsoft.Azure.Management.Insights.Models.LocationThresholdRuleCondition"), }, - Actions: &actions, + Actions: actions, }, Tags: tag, }, @@ -245,10 +246,8 @@ func TestAppinsightsMonitorService_createAlertRuleResource(t *testing.T) { subscriptionID: tt.fields.subscriptionID, ctx: tt.fields.ctx, } - if got := aiService.createAlertRuleResource(tt.args.monitor); !reflect.DeepEqual(got, tt.want) { - t.Errorf("%+v", got) - t.Errorf("%+v", tt.want) - t.Errorf("AppinsightsMonitorService.createAlertRuleResource() = %v, want %v", got, tt.want) + if got := aiService.createAlertRuleResource(tt.args.monitor); !cmp.Equal(got, tt.want) { + t.Errorf("AppinsightsMonitorService.createAlertRuleResource() = %s", cmp.Diff(got, tt.want)) } }) } diff --git a/pkg/monitors/appinsights/util.go b/pkg/monitors/appinsights/util.go index e8021cd0e..de1540d61 100644 --- a/pkg/monitors/appinsights/util.go +++ b/pkg/monitors/appinsights/util.go @@ -3,8 +3,8 @@ package appinsights import ( "encoding/xml" "fmt" + "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/applicationinsights/armapplicationinsights" - "github.com/Azure/azure-sdk-for-go/services/appinsights/mgmt/2015-05-01/insights" endpointmonitorv1alpha1 "github.com/stakater/IngressMonitorController/v2/api/v1alpha1" "github.com/stakater/IngressMonitorController/v2/pkg/models" ) @@ -49,15 +49,15 @@ func getURL(rawXmlData string) string { } // getGeolocation converts slice of locations into slice of location struct -func getGeoLocation(locations []interface{}) *[]insights.WebTestGeolocation { - var geoLocations []insights.WebTestGeolocation +func getGeoLocation(locations []interface{}) []*armapplicationinsights.WebTestGeolocation { + var geoLocations []*armapplicationinsights.WebTestGeolocation for _, v := range locations { l := v.(string) - geoLocations = append(geoLocations, insights.WebTestGeolocation{ + geoLocations = append(geoLocations, &armapplicationinsights.WebTestGeolocation{ Location: &l, }) } - return &geoLocations + return geoLocations } // getConfiguration fetch values from config and return object of Configuration diff --git a/pkg/monitors/gcloud/gcloud-monitor.go b/pkg/monitors/gcloud/gcloud-monitor.go index 3cc7c421c..041743fd0 100644 --- a/pkg/monitors/gcloud/gcloud-monitor.go +++ b/pkg/monitors/gcloud/gcloud-monitor.go @@ -2,6 +2,7 @@ package gcloud import ( "context" + "errors" "fmt" "net/url" "strconv" @@ -9,10 +10,10 @@ import ( logf "sigs.k8s.io/controller-runtime/pkg/log" monitoring "cloud.google.com/go/monitoring/apiv3/v2" - monitoringpb "cloud.google.com/go/monitoring/apiv3/v2/monitoringpb" + "cloud.google.com/go/monitoring/apiv3/v2/monitoringpb" "google.golang.org/api/iterator" "google.golang.org/api/option" - monitoredres "google.golang.org/genproto/googleapis/api/monitoredres" + "google.golang.org/genproto/googleapis/api/monitoredres" endpointmonitorv1alpha1 "github.com/stakater/IngressMonitorController/v2/api/v1alpha1" "github.com/stakater/IngressMonitorController/v2/pkg/config" @@ -52,7 +53,7 @@ func (service *MonitorService) GetByName(name string) (monitor *models.Monitor, for { uptimeCheckConfig, err := uptimeCheckConfigsIterator.Next() - if err == iterator.Done { + if errors.Is(err, iterator.Done) { break } if err != nil { @@ -75,7 +76,7 @@ func (service *MonitorService) GetAll() (monitors []models.Monitor) { monitors = []models.Monitor{} for { uptimeCheckConfig, err := uptimeCheckConfigsIterator.Next() - if err == iterator.Done { + if errors.Is(err, iterator.Done) { break } if err != nil { diff --git a/pkg/monitors/grafana/grafana-monitor_test.go b/pkg/monitors/grafana/grafana-monitor_test.go index 74caef2fc..669d4f6a0 100644 --- a/pkg/monitors/grafana/grafana-monitor_test.go +++ b/pkg/monitors/grafana/grafana-monitor_test.go @@ -29,7 +29,7 @@ func TestAddMonitorWithCorrectValues(t *testing.T) { service.Setup(*provider) m := models.Monitor{Name: "google-test", URL: "https://google.com", Config: &endpointmonitorv1alpha1.GrafanaConfig{ - Frequency: 20000, + Frequency: 1800000, Probes: []string{"Singapore"}, AlertSensitivity: "low", }} @@ -60,7 +60,7 @@ func TestAddMonitorWithCorrectValues(t *testing.T) { monitorConfig, _ := monitor.Config.(*endpointmonitorv1alpha1.GrafanaConfig) providerConfig, _ := m.Config.(*endpointmonitorv1alpha1.GrafanaConfig) - if monitor.Name != m.Name || monitor.URL != m.URL || monitorConfig.Frequency != providerConfig.Frequency || reflect.DeepEqual(monitorConfig.Probes, providerConfig.Probes) || monitorConfig.AlertSensitivity != providerConfig.AlertSensitivity { + if monitor.Name != m.Name || monitor.URL != m.URL || monitorConfig.Frequency != providerConfig.Frequency || !reflect.DeepEqual(monitorConfig.Probes, providerConfig.Probes) || monitorConfig.AlertSensitivity != providerConfig.AlertSensitivity { t.Error("URL, name, frequency, probes and alertSensitivity should be the same", monitor, m) } service.Remove(*monitor) @@ -81,7 +81,9 @@ func TestUpdateMonitorWithCorrectValues(t *testing.T) { } service.Setup(*provider) - m := models.Monitor{Name: "google-test", URL: "https://google.com"} + m := models.Monitor{Name: "google-test", URL: "https://google.com", Config: &endpointmonitorv1alpha1.GrafanaConfig{ + Frequency: 1800000, + }} preExistingMonitor, _ := service.GetByName(m.Name) if preExistingMonitor != nil { @@ -106,7 +108,9 @@ func TestUpdateMonitorWithCorrectValues(t *testing.T) { if monitor.Name != m.Name || monitor.URL != m.URL { t.Error("URL and name should be the same", monitor, m) } - m2 := models.Monitor{Name: "stakater-test", URL: "https://stakater.com", ID: monitor.ID, Config: monitor.Config} + m2 := models.Monitor{Name: "stakater-test", URL: "https://stakater.com", ID: monitor.ID, Config: &endpointmonitorv1alpha1.GrafanaConfig{ + Frequency: 1800000, + }} service.Update(m2) mRes2 := service.GetAll() diff --git a/pkg/monitors/statuscake/statuscake-monitor.go b/pkg/monitors/statuscake/statuscake-monitor.go index 28d538920..3c4c55b16 100644 --- a/pkg/monitors/statuscake/statuscake-monitor.go +++ b/pkg/monitors/statuscake/statuscake-monitor.go @@ -13,6 +13,7 @@ import ( "strings" "time" + "golang.org/x/time/rate" logf "sigs.k8s.io/controller-runtime/pkg/log" statuscake "github.com/StatusCakeDev/statuscake-go" @@ -23,9 +24,10 @@ import ( "github.com/stakater/IngressMonitorController/v2/pkg/secret" ) -var log = logf.Log.WithName("statuscake-monitor") -var cachedMonitors []models.Monitor - +var ( + log = logf.Log.WithName("statuscake-monitor") + rateLimiter = rate.NewLimiter(5, 1) // Allow 5 requests per second +) // StatusCakeMonitorService is the service structure for StatusCake type StatusCakeMonitorService struct { @@ -134,7 +136,6 @@ func buildUpsertForm(m models.Monitor, cgroup string) url.Values { if providerConfig != nil && len(providerConfig.StatusCodes) > 0 { f.Add("status_codes_csv", providerConfig.StatusCodes) - } else { statusCodes := []string{ "204", // No content @@ -284,7 +285,6 @@ func (service *StatusCakeMonitorService) GetByName(name string) (*models.Monitor } errorString := "GetByName Request failed for name: " + name return nil, errors.New(errorString) - } // GetByID function will Get a monitor by it's ID @@ -303,7 +303,7 @@ func (service *StatusCakeMonitorService) GetByID(id string) (*models.Monitor, er } req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", service.apiKey)) - resp, err := service.client.Do(req) + resp, err := service.doRequest(req) if err != nil { log.Error(err, "Unable to retrieve monitor") return nil, err @@ -332,11 +332,38 @@ func (service *StatusCakeMonitorService) GetByID(id string) (*models.Monitor, er return nil, errors.New("GetByID Request failed") } +// doRequest function to handle requests to StatusCake and handle ratelimits. +func (service *StatusCakeMonitorService) doRequest(req *http.Request) (*http.Response, error) { + // Wait for the rate limiter to allow a request + err := rateLimiter.Wait(req.Context()) + if err != nil { + log.Error(err, "Rate limiter wait failed") + return nil, err + } + + resp, err := service.client.Do(req) + if err != nil { + log.Error(err, "HTTP request failed") + return nil, err + } + + // Handle rate-limiting responses (HTTP 429) + if resp.StatusCode == http.StatusTooManyRequests { + retryAfter := resp.Header.Get("Retry-After") + if retryAfter != "" { + seconds, err := strconv.Atoi(retryAfter) + if err == nil { + time.Sleep(time.Duration(seconds) * time.Second) + return service.doRequest(req) // Retry after the specified delay + } + } + } + + return resp, nil +} + // GetAll function will fetch all monitors func (service *StatusCakeMonitorService) GetAll() []models.Monitor { - if len(cachedMonitors) > 0 { - return cachedMonitors - } var StatusCakeMonitorData []StatusCakeMonitorData page := 1 for { @@ -351,8 +378,7 @@ func (service *StatusCakeMonitorService) GetAll() []models.Monitor { } page += 1 } - cachedMonitors = StatusCakeMonitorMonitorsToBaseMonitorsMapper(StatusCakeMonitorData) - return cachedMonitors + return StatusCakeMonitorMonitorsToBaseMonitorsMapper(StatusCakeMonitorData) } func (service *StatusCakeMonitorService) fetchMonitors(page int) *StatusCakeMonitor { @@ -374,7 +400,7 @@ func (service *StatusCakeMonitorService) fetchMonitors(page int) *StatusCakeMoni } req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", service.apiKey)) - resp, err := service.client.Do(req) + resp, err := service.doRequest(req) if err != nil { log.Error(err, "Unable to retrieve monitor") return nil @@ -401,7 +427,6 @@ func (service *StatusCakeMonitorService) fetchMonitors(page int) *StatusCakeMoni // Add will create a new Monitor func (service *StatusCakeMonitorService) Add(m models.Monitor) { - cachedMonitors = []models.Monitor{} u, err := url.Parse(service.url) if err != nil { log.Error(err, "Unable to Parse monitor URL") @@ -416,7 +441,7 @@ func (service *StatusCakeMonitorService) Add(m models.Monitor) { return } req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", service.apiKey)) - resp, err := service.client.Do(req) + resp, err := service.doRequest(req) if err != nil { log.Error(err, "Unable to make HTTP call") return @@ -438,7 +463,6 @@ func (service *StatusCakeMonitorService) Add(m models.Monitor) { // Update will update an existing Monitor func (service *StatusCakeMonitorService) Update(m models.Monitor) { - cachedMonitors = []models.Monitor{} u, err := url.Parse(service.url) if err != nil { log.Error(err, "Unable to Parse monitor URL") @@ -453,7 +477,7 @@ func (service *StatusCakeMonitorService) Update(m models.Monitor) { return } req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", service.apiKey)) - resp, err := service.client.Do(req) + resp, err := service.doRequest(req) if err != nil { log.Error(err, "Unable to make HTTP call") return @@ -475,7 +499,6 @@ func (service *StatusCakeMonitorService) Update(m models.Monitor) { // Remove will delete an existing Monitor func (service *StatusCakeMonitorService) Remove(m models.Monitor) { - cachedMonitors = []models.Monitor{} u, err := url.Parse(service.url) if err != nil { log.Error(err, "Unable to Parse monitor URL") @@ -490,14 +513,13 @@ func (service *StatusCakeMonitorService) Remove(m models.Monitor) { return } req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", service.apiKey)) - resp, err := service.client.Do(req) + resp, err := service.doRequest(req) if err != nil { log.Error(err, "Unable to make HTTP call") return } if resp.StatusCode != http.StatusNoContent { log.Error(nil, fmt.Sprintf("Delete Request failed for Monitor: %s with id: %s", m.Name, m.ID)) - } else { _, err = service.GetByID(m.ID) if strings.Contains(err.Error(), "Request failed") { diff --git a/pkg/monitors/statuscake/statuscake-monitor_test.go b/pkg/monitors/statuscake/statuscake-monitor_test.go index 08e252072..ee5eff07e 100644 --- a/pkg/monitors/statuscake/statuscake-monitor_test.go +++ b/pkg/monitors/statuscake/statuscake-monitor_test.go @@ -114,7 +114,7 @@ func TestBuildUpsertForm(t *testing.T) { Confirmation: 2, EnableSSLAlert: true, FindString: "", - Timeout: 30, + Timeout: 30, // changed to string array type on statuscake api // TODO: release new apiVersion to cater new type in apiVersion struct diff --git a/pkg/monitors/uptimerobot/uptime-monitor.go b/pkg/monitors/uptimerobot/uptime-monitor.go index 9a3cac961..838a67d7d 100644 --- a/pkg/monitors/uptimerobot/uptime-monitor.go +++ b/pkg/monitors/uptimerobot/uptime-monitor.go @@ -9,6 +9,7 @@ import ( "reflect" "strconv" "strings" + "time" endpointmonitorv1alpha1 "github.com/stakater/IngressMonitorController/v2/api/v1alpha1" "github.com/stakater/IngressMonitorController/v2/pkg/config" @@ -67,6 +68,17 @@ func (monitor *UpTimeMonitorService) GetByName(name string) (*models.Monitor, er } return nil, nil + } else if response.StatusCode == Http.StatusTooManyRequests { + log.Info("Too many requests, Monitor waiting for timeout: " + name) + retryAfter := response.Header.Get("Retry-After") + if retryAfter != "" { + seconds, err := strconv.Atoi(retryAfter) + if err == nil { + time.Sleep(time.Duration(seconds) * time.Second) + return monitor.GetByName(name) // Retry after the specified delay + + } + } } errorString := "GetByName Request failed for name: " + name + ". Status Code: " + strconv.Itoa(response.StatusCode) @@ -152,6 +164,16 @@ func (monitor *UpTimeMonitorService) Add(m models.Monitor) { } else { log.Info("Monitor couldn't be added: " + m.Name + ". Error: " + f.Error.Message) } + } else if response.StatusCode == Http.StatusTooManyRequests { + log.Info("Too many requests, Monitor waiting for timeout: " + m.Name) + retryAfter := response.Header.Get("Retry-After") + if retryAfter != "" { + seconds, err := strconv.Atoi(retryAfter) + if err == nil { + time.Sleep(time.Duration(seconds) * time.Second) + monitor.Add(m) // Retry after the specified delay + } + } } else { log.Info("AddMonitor Request failed. Status Code: " + strconv.Itoa(response.StatusCode)) } @@ -178,6 +200,16 @@ func (monitor *UpTimeMonitorService) Update(m models.Monitor) { } else { log.Info("Monitor couldn't be updated: " + m.Name + ". Error: " + f.Error.Message) } + } else if response.StatusCode == Http.StatusTooManyRequests { + log.Info("Too many requests, Monitor waiting for timeout: " + m.Name) + retryAfter := response.Header.Get("Retry-After") + if retryAfter != "" { + seconds, err := strconv.Atoi(retryAfter) + if err == nil { + time.Sleep(time.Duration(seconds) * time.Second) + monitor.Update(m) // Retry after the specified delay + } + } } else { log.Info("UpdateMonitor Request failed. Status Code: " + strconv.Itoa(response.StatusCode)) } diff --git a/pkg/monitors/uptimerobot/uptime-status-page.go b/pkg/monitors/uptimerobot/uptime-status-page.go index 7c7b6a99e..7542b981f 100644 --- a/pkg/monitors/uptimerobot/uptime-status-page.go +++ b/pkg/monitors/uptimerobot/uptime-status-page.go @@ -163,7 +163,7 @@ func (statusPageService *UpTimeStatusPageService) RemoveMonitorFromStatusPage(st body := "api_key=" + statusPageService.apiKey + "&format=json&id=" + statusPage.ID - if existingStatusPage.Monitors != nil && len(existingStatusPage.Monitors) > 0 { + if len(existingStatusPage.Monitors) > 0 { monitors := strings.Join(existingStatusPage.Monitors, "-") body += "&monitors=" + monitors } else { diff --git a/pkg/secret/secrets.go b/pkg/secret/secrets.go index d8e92e3e7..872cf1bee 100644 --- a/pkg/secret/secrets.go +++ b/pkg/secret/secrets.go @@ -29,7 +29,6 @@ func LoadSecretData(apiReader client.Reader, secretName, namespace, dataKey stri func ReadBasicAuthSecret(apiReader clientv1.SecretInterface, secretName string) (string, string, error) { secret, err := apiReader.Get(context.TODO(), secretName, metav1.GetOptions{}) username, password := "", "" - if err != nil { return "", "", err }