mirror of https://github.com/grafana/grafana.git
Correlations: Create first version of correlations on app platform (#110843)
* WIP * Generate API * use different logging, change typing as recommended * Add feature flag and only add to installer when enabled * add codeowner * Lint/fmt * fix dockerfile * move from UID to group/name reference * add generated code * change from enterprise build * build workspace * Remove deprecated field, build api, build for enterprise, build workspace * Not sure what caused this.. * Rebuild? * Fix this file * update sdk * update sdk * fix workspace * fix test build * add to go.mod --------- Co-authored-by: Ryan McKinley <ryantxu@gmail.com>
This commit is contained in:
parent
82e5019333
commit
a6db37c2b7
|
@ -90,6 +90,7 @@
|
||||||
/apps/advisor/ @grafana/plugins-platform-backend
|
/apps/advisor/ @grafana/plugins-platform-backend
|
||||||
/apps/iam/ @grafana/access-squad
|
/apps/iam/ @grafana/access-squad
|
||||||
/apps/sdk.mk @grafana/grafana-app-platform-squad
|
/apps/sdk.mk @grafana/grafana-app-platform-squad
|
||||||
|
/apps/correlations @grafana/datapro
|
||||||
/pkg/api/ @grafana/grafana-backend-group
|
/pkg/api/ @grafana/grafana-backend-group
|
||||||
/pkg/apis/ @grafana/grafana-app-platform-squad
|
/pkg/apis/ @grafana/grafana-app-platform-squad
|
||||||
/pkg/apis/query @grafana/grafana-datasources-core-services
|
/pkg/apis/query @grafana/grafana-datasources-core-services
|
||||||
|
|
|
@ -95,6 +95,7 @@ COPY pkg/aggregator pkg/aggregator
|
||||||
COPY apps/playlist apps/playlist
|
COPY apps/playlist apps/playlist
|
||||||
COPY apps/plugins apps/plugins
|
COPY apps/plugins apps/plugins
|
||||||
COPY apps/shorturl apps/shorturl
|
COPY apps/shorturl apps/shorturl
|
||||||
|
COPY apps/correlations apps/correlations
|
||||||
COPY apps/preferences apps/preferences
|
COPY apps/preferences apps/preferences
|
||||||
COPY apps/provisioning apps/provisioning
|
COPY apps/provisioning apps/provisioning
|
||||||
COPY apps/secret apps/secret
|
COPY apps/secret apps/secret
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
include ../sdk.mk
|
||||||
|
|
||||||
|
.PHONY: generate # Run Grafana App SDK code generation
|
||||||
|
generate: install-app-sdk update-app-sdk
|
||||||
|
@$(APP_SDK_BIN) generate \
|
||||||
|
--source=./kinds/ \
|
||||||
|
--gogenpath=./pkg/apis \
|
||||||
|
--grouping=group \
|
||||||
|
--defencoding=none
|
|
@ -0,0 +1,94 @@
|
||||||
|
module github.com/grafana/grafana/apps/correlations
|
||||||
|
|
||||||
|
go 1.24.0
|
||||||
|
|
||||||
|
toolchain go1.24.6
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/grafana/grafana-app-sdk v0.45.0
|
||||||
|
github.com/grafana/grafana-app-sdk/logging v0.45.0
|
||||||
|
k8s.io/apimachinery v0.34.1
|
||||||
|
k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b
|
||||||
|
)
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/beorn7/perks v1.0.1 // indirect
|
||||||
|
github.com/bradfitz/gomemcache v0.0.0-20230905024940-24af94b03874 // indirect
|
||||||
|
github.com/cenkalti/backoff/v5 v5.0.3 // indirect
|
||||||
|
github.com/cespare/xxhash/v2 v2.3.0 // indirect
|
||||||
|
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
|
||||||
|
github.com/emicklei/go-restful/v3 v3.12.2 // indirect
|
||||||
|
github.com/evanphx/json-patch v5.9.11+incompatible // indirect
|
||||||
|
github.com/fxamacker/cbor/v2 v2.9.0 // indirect
|
||||||
|
github.com/getkin/kin-openapi v0.133.0 // indirect
|
||||||
|
github.com/go-logr/logr v1.4.3 // indirect
|
||||||
|
github.com/go-logr/stdr v1.2.2 // indirect
|
||||||
|
github.com/go-openapi/jsonpointer v0.21.0 // indirect
|
||||||
|
github.com/go-openapi/jsonreference v0.21.0 // indirect
|
||||||
|
github.com/go-openapi/swag v0.23.0 // indirect
|
||||||
|
github.com/go-test/deep v1.1.1 // indirect
|
||||||
|
github.com/gogo/protobuf v1.3.2 // indirect
|
||||||
|
github.com/google/gnostic-models v0.7.0 // indirect
|
||||||
|
github.com/google/go-cmp v0.7.0 // indirect
|
||||||
|
github.com/google/pprof v0.0.0-20250403155104-27863c87afa6 // indirect
|
||||||
|
github.com/google/uuid v1.6.0 // indirect
|
||||||
|
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 // indirect
|
||||||
|
github.com/hashicorp/errwrap v1.1.0 // indirect
|
||||||
|
github.com/hashicorp/go-multierror v1.1.1 // indirect
|
||||||
|
github.com/josharian/intern v1.0.0 // indirect
|
||||||
|
github.com/json-iterator/go v1.1.12 // indirect
|
||||||
|
github.com/mailru/easyjson v0.9.0 // indirect
|
||||||
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
||||||
|
github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
|
||||||
|
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect
|
||||||
|
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
|
||||||
|
github.com/oasdiff/yaml v0.0.0-20250309154309-f31be36b4037 // indirect
|
||||||
|
github.com/oasdiff/yaml3 v0.0.0-20250309153720-d2182401db90 // indirect
|
||||||
|
github.com/onsi/ginkgo/v2 v2.22.2 // indirect
|
||||||
|
github.com/onsi/gomega v1.36.2 // indirect
|
||||||
|
github.com/perimeterx/marshmallow v1.1.5 // indirect
|
||||||
|
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
|
||||||
|
github.com/prometheus/client_golang v1.23.2 // indirect
|
||||||
|
github.com/prometheus/client_model v0.6.2 // indirect
|
||||||
|
github.com/prometheus/common v0.66.1 // indirect
|
||||||
|
github.com/prometheus/procfs v0.16.1 // indirect
|
||||||
|
github.com/puzpuzpuz/xsync/v2 v2.5.1 // indirect
|
||||||
|
github.com/rogpeppe/go-internal v1.14.1 // indirect
|
||||||
|
github.com/spf13/pflag v1.0.10 // indirect
|
||||||
|
github.com/woodsbury/decimal128 v1.3.0 // indirect
|
||||||
|
github.com/x448/float16 v0.8.4 // indirect
|
||||||
|
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
|
||||||
|
go.opentelemetry.io/otel v1.38.0 // indirect
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 // indirect
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0 // indirect
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.38.0 // indirect
|
||||||
|
go.opentelemetry.io/otel/metric v1.38.0 // indirect
|
||||||
|
go.opentelemetry.io/otel/sdk v1.38.0 // indirect
|
||||||
|
go.opentelemetry.io/otel/trace v1.38.0 // indirect
|
||||||
|
go.opentelemetry.io/proto/otlp v1.7.1 // indirect
|
||||||
|
go.yaml.in/yaml/v2 v2.4.2 // indirect
|
||||||
|
go.yaml.in/yaml/v3 v3.0.4 // indirect
|
||||||
|
golang.org/x/net v0.44.0 // indirect
|
||||||
|
golang.org/x/oauth2 v0.30.0 // indirect
|
||||||
|
golang.org/x/sync v0.17.0 // indirect
|
||||||
|
golang.org/x/sys v0.36.0 // indirect
|
||||||
|
golang.org/x/term v0.35.0 // indirect
|
||||||
|
golang.org/x/text v0.29.0 // indirect
|
||||||
|
golang.org/x/time v0.13.0 // indirect
|
||||||
|
gomodules.xyz/jsonpatch/v2 v2.5.0 // indirect
|
||||||
|
google.golang.org/genproto/googleapis/api v0.0.0-20250908214217-97024824d090 // indirect
|
||||||
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20250908214217-97024824d090 // indirect
|
||||||
|
google.golang.org/grpc v1.75.1 // indirect
|
||||||
|
google.golang.org/protobuf v1.36.8 // indirect
|
||||||
|
gopkg.in/inf.v0 v0.9.1 // indirect
|
||||||
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
|
k8s.io/api v0.34.1 // indirect
|
||||||
|
k8s.io/apiextensions-apiserver v0.34.1 // indirect
|
||||||
|
k8s.io/client-go v0.34.1 // indirect
|
||||||
|
k8s.io/klog/v2 v2.130.1 // indirect
|
||||||
|
k8s.io/utils v0.0.0-20250604170112-4c0f3b243397 // indirect
|
||||||
|
sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 // indirect
|
||||||
|
sigs.k8s.io/randfill v1.0.0 // indirect
|
||||||
|
sigs.k8s.io/structured-merge-diff/v6 v6.3.0 // indirect
|
||||||
|
sigs.k8s.io/yaml v1.6.0 // indirect
|
||||||
|
)
|
|
@ -0,0 +1,238 @@
|
||||||
|
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
|
||||||
|
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
|
||||||
|
github.com/bradfitz/gomemcache v0.0.0-20230905024940-24af94b03874 h1:N7oVaKyGp8bttX0bfZGmcGkjz7DLQXhAn3DNd3T0ous=
|
||||||
|
github.com/bradfitz/gomemcache v0.0.0-20230905024940-24af94b03874/go.mod h1:r5xuitiExdLAJ09PR7vBVENGvp4ZuTBeWTGtxuX3K+c=
|
||||||
|
github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM=
|
||||||
|
github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw=
|
||||||
|
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/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/emicklei/go-restful/v3 v3.12.2 h1:DhwDP0vY3k8ZzE0RunuJy8GhNpPL6zqLkDf9B/a0/xU=
|
||||||
|
github.com/emicklei/go-restful/v3 v3.12.2/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
|
||||||
|
github.com/evanphx/json-patch v5.9.11+incompatible h1:ixHHqfcGvxhWkniF1tWxBHA0yb4Z+d1UQi45df52xW8=
|
||||||
|
github.com/evanphx/json-patch v5.9.11+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
|
||||||
|
github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM=
|
||||||
|
github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ=
|
||||||
|
github.com/getkin/kin-openapi v0.133.0 h1:pJdmNohVIJ97r4AUFtEXRXwESr8b0bD721u/Tz6k8PQ=
|
||||||
|
github.com/getkin/kin-openapi v0.133.0/go.mod h1:boAciF6cXk5FhPqe/NQeBTeenbjqU4LhWBf09ILVvWE=
|
||||||
|
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
||||||
|
github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
|
||||||
|
github.com/go-logr/logr v1.4.3/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-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ=
|
||||||
|
github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY=
|
||||||
|
github.com/go-openapi/jsonreference v0.21.0 h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF2+tg1TRrwQ=
|
||||||
|
github.com/go-openapi/jsonreference v0.21.0/go.mod h1:LmZmgsrTkVg9LG4EaHeY8cBDslNPMo06cago5JNLkm4=
|
||||||
|
github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE=
|
||||||
|
github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ=
|
||||||
|
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/go-test/deep v1.1.1 h1:0r/53hagsehfO4bzD2Pgr/+RgHqhmf+k1Bpse2cTu1U=
|
||||||
|
github.com/go-test/deep v1.1.1/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE=
|
||||||
|
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
|
||||||
|
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
|
||||||
|
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
|
||||||
|
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
|
||||||
|
github.com/google/gnostic-models v0.7.0 h1:qwTtogB15McXDaNqTZdzPJRHvaVJlAl+HVQnLmJEJxo=
|
||||||
|
github.com/google/gnostic-models v0.7.0/go.mod h1:whL5G0m6dmc5cPxKc5bdKdEN3UjI7OUGxBlw57miDrQ=
|
||||||
|
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
|
||||||
|
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
|
||||||
|
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||||
|
github.com/google/pprof v0.0.0-20250403155104-27863c87afa6 h1:BHT72Gu3keYf3ZEu2J0b1vyeLSOYI8bm5wbJM/8yDe8=
|
||||||
|
github.com/google/pprof v0.0.0-20250403155104-27863c87afa6/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA=
|
||||||
|
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
||||||
|
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
|
github.com/grafana/grafana-app-sdk v0.45.0 h1:niFqYovxuw9vnUB9qoxEgmupqriG7Gns9ZGwB2uuOyE=
|
||||||
|
github.com/grafana/grafana-app-sdk v0.45.0/go.mod h1:1pYGEBrgG8i6pKmmsNXvtAr15jZ4iLtyHU4yj7T6XaI=
|
||||||
|
github.com/grafana/grafana-app-sdk/logging v0.45.0 h1:0SH6nYZpiLBZRwUq4J6+1vo8xuHKJjnO95/2pGOoA8w=
|
||||||
|
github.com/grafana/grafana-app-sdk/logging v0.45.0/go.mod h1:Gh/nBWnspK3oDNWtiM5qUF/fardHzOIEez+SPI3JeHA=
|
||||||
|
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 h1:8Tjv8EJ+pM1xP8mK6egEbD1OgnVTyacbefKhmbLhIhU=
|
||||||
|
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2/go.mod h1:pkJQ2tZHJ0aFOVEEot6oZmaVEZcRme73eIFmhiVuRWs=
|
||||||
|
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
||||||
|
github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=
|
||||||
|
github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
||||||
|
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
|
||||||
|
github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
|
||||||
|
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/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
|
||||||
|
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
||||||
|
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/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
|
||||||
|
github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ=
|
||||||
|
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
|
||||||
|
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
|
||||||
|
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/mailru/easyjson v0.9.0 h1:PrnmzHw7262yW8sTBwxi1PdJA3Iw/EKBa8psRf7d9a4=
|
||||||
|
github.com/mailru/easyjson v0.9.0/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU=
|
||||||
|
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=
|
||||||
|
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
|
||||||
|
github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee h1:W5t00kpgFdJifH4BDsTlE89Zl93FEloxaWZfGcifgq8=
|
||||||
|
github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
|
||||||
|
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw=
|
||||||
|
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8=
|
||||||
|
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/oasdiff/yaml v0.0.0-20250309154309-f31be36b4037 h1:G7ERwszslrBzRxj//JalHPu/3yz+De2J+4aLtSRlHiY=
|
||||||
|
github.com/oasdiff/yaml v0.0.0-20250309154309-f31be36b4037/go.mod h1:2bpvgLBZEtENV5scfDFEtB/5+1M4hkQhDQrccEJ/qGw=
|
||||||
|
github.com/oasdiff/yaml3 v0.0.0-20250309153720-d2182401db90 h1:bQx3WeLcUWy+RletIKwUIt4x3t8n2SxavmoclizMb8c=
|
||||||
|
github.com/oasdiff/yaml3 v0.0.0-20250309153720-d2182401db90/go.mod h1:y5+oSEHCPT/DGrS++Wc/479ERge0zTFxaF8PbGKcg2o=
|
||||||
|
github.com/onsi/ginkgo/v2 v2.22.2 h1:/3X8Panh8/WwhU/3Ssa6rCKqPLuAkVY2I0RoyDLySlU=
|
||||||
|
github.com/onsi/ginkgo/v2 v2.22.2/go.mod h1:oeMosUL+8LtarXBHu/c0bx2D/K9zyQ6uX3cTyztHwsk=
|
||||||
|
github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8=
|
||||||
|
github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY=
|
||||||
|
github.com/perimeterx/marshmallow v1.1.5 h1:a2LALqQ1BlHM8PZblsDdidgv1mWi1DgC2UmX50IvK2s=
|
||||||
|
github.com/perimeterx/marshmallow v1.1.5/go.mod h1:dsXbUu8CRzfYP5a87xpp0xq9S3u0Vchtcl8we9tYaXw=
|
||||||
|
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||||
|
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
|
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=
|
||||||
|
github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o=
|
||||||
|
github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg=
|
||||||
|
github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk=
|
||||||
|
github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE=
|
||||||
|
github.com/prometheus/common v0.66.1 h1:h5E0h5/Y8niHc5DlaLlWLArTQI7tMrsfQjHV+d9ZoGs=
|
||||||
|
github.com/prometheus/common v0.66.1/go.mod h1:gcaUsgf3KfRSwHY4dIMXLPV0K/Wg1oZ8+SbZk/HH/dA=
|
||||||
|
github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg=
|
||||||
|
github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is=
|
||||||
|
github.com/puzpuzpuz/xsync/v2 v2.5.1 h1:mVGYAvzDSu52+zaGyNjC+24Xw2bQi3kTr4QJ6N9pIIU=
|
||||||
|
github.com/puzpuzpuz/xsync/v2 v2.5.1/go.mod h1:gD2H2krq/w52MfPLE+Uy64TzJDVY7lP2znR9qmR35kU=
|
||||||
|
github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
|
||||||
|
github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
|
||||||
|
github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk=
|
||||||
|
github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||||
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
|
github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
|
||||||
|
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
|
||||||
|
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||||
|
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
|
||||||
|
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
|
||||||
|
github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU=
|
||||||
|
github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
|
||||||
|
github.com/woodsbury/decimal128 v1.3.0 h1:8pffMNWIlC0O5vbyHWFZAt5yWvWcrHA+3ovIIjVWss0=
|
||||||
|
github.com/woodsbury/decimal128 v1.3.0/go.mod h1:C5UTmyTjW3JftjUFzOVhC20BEQa2a4ZKOB5I6Zjb+ds=
|
||||||
|
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/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||||
|
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||||
|
go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
|
||||||
|
go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
|
||||||
|
go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8=
|
||||||
|
go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM=
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 h1:GqRJVj7UmLjCVyVJ3ZFLdPRmhDUp2zFmQe3RHIOsw24=
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0/go.mod h1:ri3aaHSmCTVYu2AWv44YMauwAQc0aqI9gHKIcSbI1pU=
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0 h1:lwI4Dc5leUqENgGuQImwLo4WnuXFPetmPpkLi2IrX54=
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0/go.mod h1:Kz/oCE7z5wuyhPxsXDuaPteSWqjSBD5YaSdbxZYGbGk=
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.38.0 h1:aTL7F04bJHUlztTsNGJ2l+6he8c+y/b//eR0jjjemT4=
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.38.0/go.mod h1:kldtb7jDTeol0l3ewcmd8SDvx3EmIE7lyvqbasU3QC4=
|
||||||
|
go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA=
|
||||||
|
go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI=
|
||||||
|
go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E=
|
||||||
|
go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg=
|
||||||
|
go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM=
|
||||||
|
go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA=
|
||||||
|
go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE=
|
||||||
|
go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs=
|
||||||
|
go.opentelemetry.io/proto/otlp v1.7.1 h1:gTOMpGDb0WTBOP8JaO72iL3auEZhVmAQg4ipjOVAtj4=
|
||||||
|
go.opentelemetry.io/proto/otlp v1.7.1/go.mod h1:b2rVh6rfI/s2pHWNlB7ILJcRALpcNDzKhACevjI+ZnE=
|
||||||
|
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
|
||||||
|
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
|
||||||
|
go.yaml.in/yaml/v2 v2.4.2 h1:DzmwEr2rDGHl7lsFgAHxmNz/1NlQ7xLIrlN2h5d1eGI=
|
||||||
|
go.yaml.in/yaml/v2 v2.4.2/go.mod h1:081UH+NErpNdqlCXm3TtEran0rJZGxAYx9hb/ELlsPU=
|
||||||
|
go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
|
||||||
|
go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
|
||||||
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
|
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/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
|
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
|
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
|
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
|
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
|
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||||
|
golang.org/x/net v0.44.0 h1:evd8IRDyfNBMBTTY5XRF1vaZlD+EmWx6x8PkhR04H/I=
|
||||||
|
golang.org/x/net v0.44.0/go.mod h1:ECOoLqd5U3Lhyeyo/QDCEVQ4sNgYsqvCZ722XogGieY=
|
||||||
|
golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
|
||||||
|
golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
|
||||||
|
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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
|
||||||
|
golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
|
||||||
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
|
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k=
|
||||||
|
golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
|
||||||
|
golang.org/x/term v0.35.0 h1:bZBVKBudEyhRcajGcNc3jIfWPqV4y/Kt2XcoigOWtDQ=
|
||||||
|
golang.org/x/term v0.35.0/go.mod h1:TPGtkTLesOwf2DE8CgVYiZinHAOuy5AYUYT1lENIZnA=
|
||||||
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
|
golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
|
||||||
|
golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
|
||||||
|
golang.org/x/time v0.13.0 h1:eUlYslOIt32DgYD6utsuUeHs4d7AsEYLuIAdg7FlYgI=
|
||||||
|
golang.org/x/time v0.13.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4=
|
||||||
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
|
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
|
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||||
|
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||||
|
golang.org/x/tools v0.37.0 h1:DVSRzp7FwePZW356yEAChSdNcQo6Nsp+fex1SUW09lE=
|
||||||
|
golang.org/x/tools v0.37.0/go.mod h1:MBN5QPQtLMHVdvsbtarmTNukZDdgwdwlO5qGacAzF0w=
|
||||||
|
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.5.0 h1:JELs8RLM12qJGXU4u/TO3V25KW8GreMKl9pdkk14RM0=
|
||||||
|
gomodules.xyz/jsonpatch/v2 v2.5.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY=
|
||||||
|
gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
|
||||||
|
gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
|
||||||
|
google.golang.org/genproto/googleapis/api v0.0.0-20250908214217-97024824d090 h1:d8Nakh1G+ur7+P3GcMjpRDEkoLUcLW2iU92XVqR+XMQ=
|
||||||
|
google.golang.org/genproto/googleapis/api v0.0.0-20250908214217-97024824d090/go.mod h1:U8EXRNSd8sUYyDfs/It7KVWodQr+Hf9xtxyxWudSwEw=
|
||||||
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20250908214217-97024824d090 h1:/OQuEa4YWtDt7uQWHd3q3sUMb+QOLQUg1xa8CEsRv5w=
|
||||||
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20250908214217-97024824d090/go.mod h1:GmFNa4BdJZ2a8G+wCe9Bg3wwThLrJun751XstdJt5Og=
|
||||||
|
google.golang.org/grpc v1.75.1 h1:/ODCNEuf9VghjgO3rqLcfg8fiOP0nSluljWFlDxELLI=
|
||||||
|
google.golang.org/grpc v1.75.1/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ=
|
||||||
|
google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc=
|
||||||
|
google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
|
||||||
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/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/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/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
|
||||||
|
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
|
||||||
|
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||||
|
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
|
k8s.io/api v0.34.1 h1:jC+153630BMdlFukegoEL8E/yT7aLyQkIVuwhmwDgJM=
|
||||||
|
k8s.io/api v0.34.1/go.mod h1:SB80FxFtXn5/gwzCoN6QCtPD7Vbu5w2n1S0J5gFfTYk=
|
||||||
|
k8s.io/apiextensions-apiserver v0.34.1 h1:NNPBva8FNAPt1iSVwIE0FsdrVriRXMsaWFMqJbII2CI=
|
||||||
|
k8s.io/apiextensions-apiserver v0.34.1/go.mod h1:hP9Rld3zF5Ay2Of3BeEpLAToP+l4s5UlxiHfqRaRcMc=
|
||||||
|
k8s.io/apimachinery v0.34.1 h1:dTlxFls/eikpJxmAC7MVE8oOeP1zryV7iRyIjB0gky4=
|
||||||
|
k8s.io/apimachinery v0.34.1/go.mod h1:/GwIlEcWuTX9zKIg2mbw0LRFIsXwrfoVxn+ef0X13lw=
|
||||||
|
k8s.io/client-go v0.34.1 h1:ZUPJKgXsnKwVwmKKdPfw4tB58+7/Ik3CrjOEhsiZ7mY=
|
||||||
|
k8s.io/client-go v0.34.1/go.mod h1:kA8v0FP+tk6sZA0yKLRG67LWjqufAoSHA2xVGKw9Of8=
|
||||||
|
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-20250710124328-f3f2b991d03b h1:MloQ9/bdJyIu9lb1PzujOPolHyvO06MXG5TUIj2mNAA=
|
||||||
|
k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b/go.mod h1:UZ2yyWbFTpuhSbFhv24aGNOdoRdJZgsIObGBUaYVsts=
|
||||||
|
k8s.io/utils v0.0.0-20250604170112-4c0f3b243397 h1:hwvWFiBzdWw1FhfY1FooPn3kzWuJ8tmbZBHi4zVsl1Y=
|
||||||
|
k8s.io/utils v0.0.0-20250604170112-4c0f3b243397/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
|
||||||
|
sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 h1:gBQPwqORJ8d8/YNZWEjoZs7npUVDpVXUUOFfW6CgAqE=
|
||||||
|
sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg=
|
||||||
|
sigs.k8s.io/randfill v1.0.0 h1:JfjMILfT8A6RbawdsK2JXGBR5AQVfd+9TbzrlneTyrU=
|
||||||
|
sigs.k8s.io/randfill v1.0.0/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY=
|
||||||
|
sigs.k8s.io/structured-merge-diff/v6 v6.3.0 h1:jTijUJbW353oVOd9oTlifJqOGEkUw2jB/fXCbTiQEco=
|
||||||
|
sigs.k8s.io/structured-merge-diff/v6 v6.3.0/go.mod h1:M3W8sfWvn2HhQDIbGWj3S099YozAsymCo/wrT5ohRUE=
|
||||||
|
sigs.k8s.io/yaml v1.6.0 h1:G8fkbMSAFqgEFgh4b1wmtzDnioxFCUgTZhlbj5P9QYs=
|
||||||
|
sigs.k8s.io/yaml v1.6.0/go.mod h1:796bPqUfzR/0jLAl6XjHl3Ck7MiyVv8dbTdyT3/pMf4=
|
|
@ -0,0 +1,41 @@
|
||||||
|
package kinds
|
||||||
|
|
||||||
|
correlationsv0alpha1: {
|
||||||
|
kind: "Correlation" // note: must be uppercase
|
||||||
|
pluralName: "Correlations"
|
||||||
|
schema: {
|
||||||
|
spec: {
|
||||||
|
source_ds_ref: DataSourceRef
|
||||||
|
target_ds_ref?: DataSourceRef
|
||||||
|
label: string
|
||||||
|
description?: string
|
||||||
|
config: ConfigSpec
|
||||||
|
provisioned: bool
|
||||||
|
type: CorrelationType
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DataSourceRef: {
|
||||||
|
group: string // same as pluginId
|
||||||
|
name: string // same as grafana uid
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// there was a deprecated field here called type, we will need to move that for conversion and provisioning
|
||||||
|
ConfigSpec: {
|
||||||
|
field: string
|
||||||
|
target: TargetSpec
|
||||||
|
transformations?: [...TransformationSpec]
|
||||||
|
}
|
||||||
|
|
||||||
|
TargetSpec: [string]: _
|
||||||
|
|
||||||
|
TransformationSpec: {
|
||||||
|
type: string
|
||||||
|
expression: string
|
||||||
|
field: string
|
||||||
|
mapValue: string
|
||||||
|
}
|
||||||
|
|
||||||
|
CorrelationType: "query" | "external"
|
|
@ -0,0 +1,2 @@
|
||||||
|
module: "github.com/grafana/grafana/apps/correlations/kinds"
|
||||||
|
language: version: "v0.8.2"
|
|
@ -0,0 +1,24 @@
|
||||||
|
package kinds
|
||||||
|
|
||||||
|
manifest: {
|
||||||
|
appName: "correlation"
|
||||||
|
groupOverride: "correlations.grafana.app"
|
||||||
|
preferredVersion: "v0alpha1"
|
||||||
|
|
||||||
|
codegen: {
|
||||||
|
go: {
|
||||||
|
enabled: true
|
||||||
|
}
|
||||||
|
ts: {
|
||||||
|
enabled: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
versions: {
|
||||||
|
"v0alpha1": {
|
||||||
|
kinds: [
|
||||||
|
correlationsv0alpha1,
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
package v0alpha1
|
||||||
|
|
||||||
|
import "k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
|
|
||||||
|
const (
|
||||||
|
// APIGroup is the API group used by all kinds in this package
|
||||||
|
APIGroup = "correlations.grafana.app"
|
||||||
|
// APIVersion is the API version used by all kinds in this package
|
||||||
|
APIVersion = "v0alpha1"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
// GroupVersion is a schema.GroupVersion consisting of the Group and Version constants for this package
|
||||||
|
GroupVersion = schema.GroupVersion{
|
||||||
|
Group: APIGroup,
|
||||||
|
Version: APIVersion,
|
||||||
|
}
|
||||||
|
)
|
|
@ -0,0 +1,99 @@
|
||||||
|
package v0alpha1
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/grafana/grafana-app-sdk/resource"
|
||||||
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
)
|
||||||
|
|
||||||
|
type CorrelationClient struct {
|
||||||
|
client *resource.TypedClient[*Correlation, *CorrelationList]
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewCorrelationClient(client resource.Client) *CorrelationClient {
|
||||||
|
return &CorrelationClient{
|
||||||
|
client: resource.NewTypedClient[*Correlation, *CorrelationList](client, CorrelationKind()),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewCorrelationClientFromGenerator(generator resource.ClientGenerator) (*CorrelationClient, error) {
|
||||||
|
c, err := generator.ClientFor(CorrelationKind())
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return NewCorrelationClient(c), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CorrelationClient) Get(ctx context.Context, identifier resource.Identifier) (*Correlation, error) {
|
||||||
|
return c.client.Get(ctx, identifier)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CorrelationClient) List(ctx context.Context, namespace string, opts resource.ListOptions) (*CorrelationList, error) {
|
||||||
|
return c.client.List(ctx, namespace, opts)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CorrelationClient) ListAll(ctx context.Context, namespace string, opts resource.ListOptions) (*CorrelationList, error) {
|
||||||
|
resp, err := c.client.List(ctx, namespace, resource.ListOptions{
|
||||||
|
ResourceVersion: opts.ResourceVersion,
|
||||||
|
Limit: opts.Limit,
|
||||||
|
LabelFilters: opts.LabelFilters,
|
||||||
|
FieldSelectors: opts.FieldSelectors,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
for resp.GetContinue() != "" {
|
||||||
|
page, err := c.client.List(ctx, namespace, resource.ListOptions{
|
||||||
|
Continue: resp.GetContinue(),
|
||||||
|
ResourceVersion: opts.ResourceVersion,
|
||||||
|
Limit: opts.Limit,
|
||||||
|
LabelFilters: opts.LabelFilters,
|
||||||
|
FieldSelectors: opts.FieldSelectors,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
resp.SetContinue(page.GetContinue())
|
||||||
|
resp.SetResourceVersion(page.GetResourceVersion())
|
||||||
|
resp.SetItems(append(resp.GetItems(), page.GetItems()...))
|
||||||
|
}
|
||||||
|
return resp, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CorrelationClient) Create(ctx context.Context, obj *Correlation, opts resource.CreateOptions) (*Correlation, error) {
|
||||||
|
// Make sure apiVersion and kind are set
|
||||||
|
obj.APIVersion = GroupVersion.Identifier()
|
||||||
|
obj.Kind = CorrelationKind().Kind()
|
||||||
|
return c.client.Create(ctx, obj, opts)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CorrelationClient) Update(ctx context.Context, obj *Correlation, opts resource.UpdateOptions) (*Correlation, error) {
|
||||||
|
return c.client.Update(ctx, obj, opts)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CorrelationClient) Patch(ctx context.Context, identifier resource.Identifier, req resource.PatchRequest, opts resource.PatchOptions) (*Correlation, error) {
|
||||||
|
return c.client.Patch(ctx, identifier, req, opts)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CorrelationClient) UpdateStatus(ctx context.Context, identifier resource.Identifier, newStatus CorrelationStatus, opts resource.UpdateOptions) (*Correlation, error) {
|
||||||
|
return c.client.Update(ctx, &Correlation{
|
||||||
|
TypeMeta: metav1.TypeMeta{
|
||||||
|
Kind: CorrelationKind().Kind(),
|
||||||
|
APIVersion: GroupVersion.Identifier(),
|
||||||
|
},
|
||||||
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
|
ResourceVersion: opts.ResourceVersion,
|
||||||
|
Namespace: identifier.Namespace,
|
||||||
|
Name: identifier.Name,
|
||||||
|
},
|
||||||
|
Status: newStatus,
|
||||||
|
}, resource.UpdateOptions{
|
||||||
|
Subresource: "status",
|
||||||
|
ResourceVersion: opts.ResourceVersion,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CorrelationClient) Delete(ctx context.Context, identifier resource.Identifier, opts resource.DeleteOptions) error {
|
||||||
|
return c.client.Delete(ctx, identifier, opts)
|
||||||
|
}
|
|
@ -0,0 +1,28 @@
|
||||||
|
//
|
||||||
|
// Code generated by grafana-app-sdk. DO NOT EDIT.
|
||||||
|
//
|
||||||
|
|
||||||
|
package v0alpha1
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"io"
|
||||||
|
|
||||||
|
"github.com/grafana/grafana-app-sdk/resource"
|
||||||
|
)
|
||||||
|
|
||||||
|
// CorrelationJSONCodec is an implementation of resource.Codec for kubernetes JSON encoding
|
||||||
|
type CorrelationJSONCodec struct{}
|
||||||
|
|
||||||
|
// Read reads JSON-encoded bytes from `reader` and unmarshals them into `into`
|
||||||
|
func (*CorrelationJSONCodec) Read(reader io.Reader, into resource.Object) error {
|
||||||
|
return json.NewDecoder(reader).Decode(into)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write writes JSON-encoded bytes into `writer` marshaled from `from`
|
||||||
|
func (*CorrelationJSONCodec) Write(writer io.Writer, from resource.Object) error {
|
||||||
|
return json.NewEncoder(writer).Encode(from)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Interface compliance checks
|
||||||
|
var _ resource.Codec = &CorrelationJSONCodec{}
|
|
@ -0,0 +1,31 @@
|
||||||
|
// Code generated - EDITING IS FUTILE. DO NOT EDIT.
|
||||||
|
|
||||||
|
package v0alpha1
|
||||||
|
|
||||||
|
import (
|
||||||
|
time "time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// metadata contains embedded CommonMetadata and can be extended with custom string fields
|
||||||
|
// TODO: use CommonMetadata instead of redefining here; currently needs to be defined here
|
||||||
|
// without external reference as using the CommonMetadata reference breaks thema codegen.
|
||||||
|
type CorrelationMetadata struct {
|
||||||
|
UpdateTimestamp time.Time `json:"updateTimestamp"`
|
||||||
|
CreatedBy string `json:"createdBy"`
|
||||||
|
Uid string `json:"uid"`
|
||||||
|
CreationTimestamp time.Time `json:"creationTimestamp"`
|
||||||
|
DeletionTimestamp *time.Time `json:"deletionTimestamp,omitempty"`
|
||||||
|
Finalizers []string `json:"finalizers"`
|
||||||
|
ResourceVersion string `json:"resourceVersion"`
|
||||||
|
Generation int64 `json:"generation"`
|
||||||
|
UpdatedBy string `json:"updatedBy"`
|
||||||
|
Labels map[string]string `json:"labels"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewCorrelationMetadata creates a new CorrelationMetadata object.
|
||||||
|
func NewCorrelationMetadata() *CorrelationMetadata {
|
||||||
|
return &CorrelationMetadata{
|
||||||
|
Finalizers: []string{},
|
||||||
|
Labels: map[string]string{},
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,319 @@
|
||||||
|
//
|
||||||
|
// Code generated by grafana-app-sdk. DO NOT EDIT.
|
||||||
|
//
|
||||||
|
|
||||||
|
package v0alpha1
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"github.com/grafana/grafana-app-sdk/resource"
|
||||||
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
|
"k8s.io/apimachinery/pkg/types"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// +k8s:openapi-gen=true
|
||||||
|
type Correlation struct {
|
||||||
|
metav1.TypeMeta `json:",inline" yaml:",inline"`
|
||||||
|
metav1.ObjectMeta `json:"metadata" yaml:"metadata"`
|
||||||
|
|
||||||
|
// Spec is the spec of the Correlation
|
||||||
|
Spec CorrelationSpec `json:"spec" yaml:"spec"`
|
||||||
|
|
||||||
|
Status CorrelationStatus `json:"status" yaml:"status"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Correlation) GetSpec() any {
|
||||||
|
return o.Spec
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Correlation) SetSpec(spec any) error {
|
||||||
|
cast, ok := spec.(CorrelationSpec)
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf("cannot set spec type %#v, not of type Spec", spec)
|
||||||
|
}
|
||||||
|
o.Spec = cast
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Correlation) GetSubresources() map[string]any {
|
||||||
|
return map[string]any{
|
||||||
|
"status": o.Status,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Correlation) GetSubresource(name string) (any, bool) {
|
||||||
|
switch name {
|
||||||
|
case "status":
|
||||||
|
return o.Status, true
|
||||||
|
default:
|
||||||
|
return nil, false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Correlation) SetSubresource(name string, value any) error {
|
||||||
|
switch name {
|
||||||
|
case "status":
|
||||||
|
cast, ok := value.(CorrelationStatus)
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf("cannot set status type %#v, not of type CorrelationStatus", value)
|
||||||
|
}
|
||||||
|
o.Status = cast
|
||||||
|
return nil
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("subresource '%s' does not exist", name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Correlation) GetStaticMetadata() resource.StaticMetadata {
|
||||||
|
gvk := o.GroupVersionKind()
|
||||||
|
return resource.StaticMetadata{
|
||||||
|
Name: o.ObjectMeta.Name,
|
||||||
|
Namespace: o.ObjectMeta.Namespace,
|
||||||
|
Group: gvk.Group,
|
||||||
|
Version: gvk.Version,
|
||||||
|
Kind: gvk.Kind,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Correlation) SetStaticMetadata(metadata resource.StaticMetadata) {
|
||||||
|
o.Name = metadata.Name
|
||||||
|
o.Namespace = metadata.Namespace
|
||||||
|
o.SetGroupVersionKind(schema.GroupVersionKind{
|
||||||
|
Group: metadata.Group,
|
||||||
|
Version: metadata.Version,
|
||||||
|
Kind: metadata.Kind,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Correlation) GetCommonMetadata() resource.CommonMetadata {
|
||||||
|
dt := o.DeletionTimestamp
|
||||||
|
var deletionTimestamp *time.Time
|
||||||
|
if dt != nil {
|
||||||
|
deletionTimestamp = &dt.Time
|
||||||
|
}
|
||||||
|
// Legacy ExtraFields support
|
||||||
|
extraFields := make(map[string]any)
|
||||||
|
if o.Annotations != nil {
|
||||||
|
extraFields["annotations"] = o.Annotations
|
||||||
|
}
|
||||||
|
if o.ManagedFields != nil {
|
||||||
|
extraFields["managedFields"] = o.ManagedFields
|
||||||
|
}
|
||||||
|
if o.OwnerReferences != nil {
|
||||||
|
extraFields["ownerReferences"] = o.OwnerReferences
|
||||||
|
}
|
||||||
|
return resource.CommonMetadata{
|
||||||
|
UID: string(o.UID),
|
||||||
|
ResourceVersion: o.ResourceVersion,
|
||||||
|
Generation: o.Generation,
|
||||||
|
Labels: o.Labels,
|
||||||
|
CreationTimestamp: o.CreationTimestamp.Time,
|
||||||
|
DeletionTimestamp: deletionTimestamp,
|
||||||
|
Finalizers: o.Finalizers,
|
||||||
|
UpdateTimestamp: o.GetUpdateTimestamp(),
|
||||||
|
CreatedBy: o.GetCreatedBy(),
|
||||||
|
UpdatedBy: o.GetUpdatedBy(),
|
||||||
|
ExtraFields: extraFields,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Correlation) SetCommonMetadata(metadata resource.CommonMetadata) {
|
||||||
|
o.UID = types.UID(metadata.UID)
|
||||||
|
o.ResourceVersion = metadata.ResourceVersion
|
||||||
|
o.Generation = metadata.Generation
|
||||||
|
o.Labels = metadata.Labels
|
||||||
|
o.CreationTimestamp = metav1.NewTime(metadata.CreationTimestamp)
|
||||||
|
if metadata.DeletionTimestamp != nil {
|
||||||
|
dt := metav1.NewTime(*metadata.DeletionTimestamp)
|
||||||
|
o.DeletionTimestamp = &dt
|
||||||
|
} else {
|
||||||
|
o.DeletionTimestamp = nil
|
||||||
|
}
|
||||||
|
o.Finalizers = metadata.Finalizers
|
||||||
|
if o.Annotations == nil {
|
||||||
|
o.Annotations = make(map[string]string)
|
||||||
|
}
|
||||||
|
if !metadata.UpdateTimestamp.IsZero() {
|
||||||
|
o.SetUpdateTimestamp(metadata.UpdateTimestamp)
|
||||||
|
}
|
||||||
|
if metadata.CreatedBy != "" {
|
||||||
|
o.SetCreatedBy(metadata.CreatedBy)
|
||||||
|
}
|
||||||
|
if metadata.UpdatedBy != "" {
|
||||||
|
o.SetUpdatedBy(metadata.UpdatedBy)
|
||||||
|
}
|
||||||
|
// Legacy support for setting Annotations, ManagedFields, and OwnerReferences via ExtraFields
|
||||||
|
if metadata.ExtraFields != nil {
|
||||||
|
if annotations, ok := metadata.ExtraFields["annotations"]; ok {
|
||||||
|
if cast, ok := annotations.(map[string]string); ok {
|
||||||
|
o.Annotations = cast
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if managedFields, ok := metadata.ExtraFields["managedFields"]; ok {
|
||||||
|
if cast, ok := managedFields.([]metav1.ManagedFieldsEntry); ok {
|
||||||
|
o.ManagedFields = cast
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ownerReferences, ok := metadata.ExtraFields["ownerReferences"]; ok {
|
||||||
|
if cast, ok := ownerReferences.([]metav1.OwnerReference); ok {
|
||||||
|
o.OwnerReferences = cast
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Correlation) GetCreatedBy() string {
|
||||||
|
if o.ObjectMeta.Annotations == nil {
|
||||||
|
o.ObjectMeta.Annotations = make(map[string]string)
|
||||||
|
}
|
||||||
|
|
||||||
|
return o.ObjectMeta.Annotations["grafana.com/createdBy"]
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Correlation) SetCreatedBy(createdBy string) {
|
||||||
|
if o.ObjectMeta.Annotations == nil {
|
||||||
|
o.ObjectMeta.Annotations = make(map[string]string)
|
||||||
|
}
|
||||||
|
|
||||||
|
o.ObjectMeta.Annotations["grafana.com/createdBy"] = createdBy
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Correlation) GetUpdateTimestamp() time.Time {
|
||||||
|
if o.ObjectMeta.Annotations == nil {
|
||||||
|
o.ObjectMeta.Annotations = make(map[string]string)
|
||||||
|
}
|
||||||
|
|
||||||
|
parsed, _ := time.Parse(time.RFC3339, o.ObjectMeta.Annotations["grafana.com/updateTimestamp"])
|
||||||
|
return parsed
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Correlation) SetUpdateTimestamp(updateTimestamp time.Time) {
|
||||||
|
if o.ObjectMeta.Annotations == nil {
|
||||||
|
o.ObjectMeta.Annotations = make(map[string]string)
|
||||||
|
}
|
||||||
|
|
||||||
|
o.ObjectMeta.Annotations["grafana.com/updateTimestamp"] = updateTimestamp.Format(time.RFC3339)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Correlation) GetUpdatedBy() string {
|
||||||
|
if o.ObjectMeta.Annotations == nil {
|
||||||
|
o.ObjectMeta.Annotations = make(map[string]string)
|
||||||
|
}
|
||||||
|
|
||||||
|
return o.ObjectMeta.Annotations["grafana.com/updatedBy"]
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Correlation) SetUpdatedBy(updatedBy string) {
|
||||||
|
if o.ObjectMeta.Annotations == nil {
|
||||||
|
o.ObjectMeta.Annotations = make(map[string]string)
|
||||||
|
}
|
||||||
|
|
||||||
|
o.ObjectMeta.Annotations["grafana.com/updatedBy"] = updatedBy
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Correlation) Copy() resource.Object {
|
||||||
|
return resource.CopyObject(o)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Correlation) DeepCopyObject() runtime.Object {
|
||||||
|
return o.Copy()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Correlation) DeepCopy() *Correlation {
|
||||||
|
cpy := &Correlation{}
|
||||||
|
o.DeepCopyInto(cpy)
|
||||||
|
return cpy
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Correlation) DeepCopyInto(dst *Correlation) {
|
||||||
|
dst.TypeMeta.APIVersion = o.TypeMeta.APIVersion
|
||||||
|
dst.TypeMeta.Kind = o.TypeMeta.Kind
|
||||||
|
o.ObjectMeta.DeepCopyInto(&dst.ObjectMeta)
|
||||||
|
o.Spec.DeepCopyInto(&dst.Spec)
|
||||||
|
o.Status.DeepCopyInto(&dst.Status)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Interface compliance compile-time check
|
||||||
|
var _ resource.Object = &Correlation{}
|
||||||
|
|
||||||
|
// +k8s:openapi-gen=true
|
||||||
|
type CorrelationList struct {
|
||||||
|
metav1.TypeMeta `json:",inline" yaml:",inline"`
|
||||||
|
metav1.ListMeta `json:"metadata" yaml:"metadata"`
|
||||||
|
Items []Correlation `json:"items" yaml:"items"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *CorrelationList) DeepCopyObject() runtime.Object {
|
||||||
|
return o.Copy()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *CorrelationList) Copy() resource.ListObject {
|
||||||
|
cpy := &CorrelationList{
|
||||||
|
TypeMeta: o.TypeMeta,
|
||||||
|
Items: make([]Correlation, len(o.Items)),
|
||||||
|
}
|
||||||
|
o.ListMeta.DeepCopyInto(&cpy.ListMeta)
|
||||||
|
for i := 0; i < len(o.Items); i++ {
|
||||||
|
if item, ok := o.Items[i].Copy().(*Correlation); ok {
|
||||||
|
cpy.Items[i] = *item
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return cpy
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *CorrelationList) GetItems() []resource.Object {
|
||||||
|
items := make([]resource.Object, len(o.Items))
|
||||||
|
for i := 0; i < len(o.Items); i++ {
|
||||||
|
items[i] = &o.Items[i]
|
||||||
|
}
|
||||||
|
return items
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *CorrelationList) SetItems(items []resource.Object) {
|
||||||
|
o.Items = make([]Correlation, len(items))
|
||||||
|
for i := 0; i < len(items); i++ {
|
||||||
|
o.Items[i] = *items[i].(*Correlation)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *CorrelationList) DeepCopy() *CorrelationList {
|
||||||
|
cpy := &CorrelationList{}
|
||||||
|
o.DeepCopyInto(cpy)
|
||||||
|
return cpy
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *CorrelationList) DeepCopyInto(dst *CorrelationList) {
|
||||||
|
resource.CopyObjectInto(dst, o)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Interface compliance compile-time check
|
||||||
|
var _ resource.ListObject = &CorrelationList{}
|
||||||
|
|
||||||
|
// Copy methods for all subresource types
|
||||||
|
|
||||||
|
// DeepCopy creates a full deep copy of Spec
|
||||||
|
func (s *CorrelationSpec) DeepCopy() *CorrelationSpec {
|
||||||
|
cpy := &CorrelationSpec{}
|
||||||
|
s.DeepCopyInto(cpy)
|
||||||
|
return cpy
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopyInto deep copies Spec into another Spec object
|
||||||
|
func (s *CorrelationSpec) DeepCopyInto(dst *CorrelationSpec) {
|
||||||
|
resource.CopyObjectInto(dst, s)
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopy creates a full deep copy of CorrelationStatus
|
||||||
|
func (s *CorrelationStatus) DeepCopy() *CorrelationStatus {
|
||||||
|
cpy := &CorrelationStatus{}
|
||||||
|
s.DeepCopyInto(cpy)
|
||||||
|
return cpy
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopyInto deep copies CorrelationStatus into another CorrelationStatus object
|
||||||
|
func (s *CorrelationStatus) DeepCopyInto(dst *CorrelationStatus) {
|
||||||
|
resource.CopyObjectInto(dst, s)
|
||||||
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
//
|
||||||
|
// Code generated by grafana-app-sdk. DO NOT EDIT.
|
||||||
|
//
|
||||||
|
|
||||||
|
package v0alpha1
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/grafana/grafana-app-sdk/resource"
|
||||||
|
)
|
||||||
|
|
||||||
|
// schema is unexported to prevent accidental overwrites
|
||||||
|
var (
|
||||||
|
schemaCorrelation = resource.NewSimpleSchema("correlations.grafana.app", "v0alpha1", &Correlation{}, &CorrelationList{}, resource.WithKind("Correlation"),
|
||||||
|
resource.WithPlural("correlations"), resource.WithScope(resource.NamespacedScope))
|
||||||
|
kindCorrelation = resource.Kind{
|
||||||
|
Schema: schemaCorrelation,
|
||||||
|
Codecs: map[resource.KindEncoding]resource.Codec{
|
||||||
|
resource.KindEncodingJSON: &CorrelationJSONCodec{},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
// Kind returns a resource.Kind for this Schema with a JSON codec
|
||||||
|
func CorrelationKind() resource.Kind {
|
||||||
|
return kindCorrelation
|
||||||
|
}
|
||||||
|
|
||||||
|
// Schema returns a resource.SimpleSchema representation of Correlation
|
||||||
|
func CorrelationSchema() *resource.SimpleSchema {
|
||||||
|
return schemaCorrelation
|
||||||
|
}
|
||||||
|
|
||||||
|
// Interface compliance checks
|
||||||
|
var _ resource.Schema = kindCorrelation
|
|
@ -0,0 +1,72 @@
|
||||||
|
// Code generated - EDITING IS FUTILE. DO NOT EDIT.
|
||||||
|
|
||||||
|
package v0alpha1
|
||||||
|
|
||||||
|
// +k8s:openapi-gen=true
|
||||||
|
type CorrelationDataSourceRef struct {
|
||||||
|
// same as pluginId
|
||||||
|
Group string `json:"group"`
|
||||||
|
// same as grafana uid
|
||||||
|
Name string `json:"name"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewCorrelationDataSourceRef creates a new CorrelationDataSourceRef object.
|
||||||
|
func NewCorrelationDataSourceRef() *CorrelationDataSourceRef {
|
||||||
|
return &CorrelationDataSourceRef{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// there was a deprecated field here called type, we will need to move that for conversion and provisioning
|
||||||
|
// +k8s:openapi-gen=true
|
||||||
|
type CorrelationConfigSpec struct {
|
||||||
|
Field string `json:"field"`
|
||||||
|
Target CorrelationTargetSpec `json:"target"`
|
||||||
|
Transformations []CorrelationTransformationSpec `json:"transformations,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewCorrelationConfigSpec creates a new CorrelationConfigSpec object.
|
||||||
|
func NewCorrelationConfigSpec() *CorrelationConfigSpec {
|
||||||
|
return &CorrelationConfigSpec{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// +k8s:openapi-gen=true
|
||||||
|
type CorrelationTargetSpec map[string]interface{}
|
||||||
|
|
||||||
|
// +k8s:openapi-gen=true
|
||||||
|
type CorrelationTransformationSpec struct {
|
||||||
|
Type string `json:"type"`
|
||||||
|
Expression string `json:"expression"`
|
||||||
|
Field string `json:"field"`
|
||||||
|
MapValue string `json:"mapValue"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewCorrelationTransformationSpec creates a new CorrelationTransformationSpec object.
|
||||||
|
func NewCorrelationTransformationSpec() *CorrelationTransformationSpec {
|
||||||
|
return &CorrelationTransformationSpec{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// +k8s:openapi-gen=true
|
||||||
|
type CorrelationCorrelationType string
|
||||||
|
|
||||||
|
const (
|
||||||
|
CorrelationCorrelationTypeQuery CorrelationCorrelationType = "query"
|
||||||
|
CorrelationCorrelationTypeExternal CorrelationCorrelationType = "external"
|
||||||
|
)
|
||||||
|
|
||||||
|
// +k8s:openapi-gen=true
|
||||||
|
type CorrelationSpec struct {
|
||||||
|
SourceDsRef CorrelationDataSourceRef `json:"source_ds_ref"`
|
||||||
|
TargetDsRef *CorrelationDataSourceRef `json:"target_ds_ref,omitempty"`
|
||||||
|
Label string `json:"label"`
|
||||||
|
Description *string `json:"description,omitempty"`
|
||||||
|
Config CorrelationConfigSpec `json:"config"`
|
||||||
|
Provisioned bool `json:"provisioned"`
|
||||||
|
Type CorrelationCorrelationType `json:"type"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewCorrelationSpec creates a new CorrelationSpec object.
|
||||||
|
func NewCorrelationSpec() *CorrelationSpec {
|
||||||
|
return &CorrelationSpec{
|
||||||
|
SourceDsRef: *NewCorrelationDataSourceRef(),
|
||||||
|
Config: *NewCorrelationConfigSpec(),
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,44 @@
|
||||||
|
// Code generated - EDITING IS FUTILE. DO NOT EDIT.
|
||||||
|
|
||||||
|
package v0alpha1
|
||||||
|
|
||||||
|
// +k8s:openapi-gen=true
|
||||||
|
type CorrelationstatusOperatorState struct {
|
||||||
|
// lastEvaluation is the ResourceVersion last evaluated
|
||||||
|
LastEvaluation string `json:"lastEvaluation"`
|
||||||
|
// state describes the state of the lastEvaluation.
|
||||||
|
// It is limited to three possible states for machine evaluation.
|
||||||
|
State CorrelationStatusOperatorStateState `json:"state"`
|
||||||
|
// descriptiveState is an optional more descriptive state field which has no requirements on format
|
||||||
|
DescriptiveState *string `json:"descriptiveState,omitempty"`
|
||||||
|
// details contains any extra information that is operator-specific
|
||||||
|
Details map[string]interface{} `json:"details,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewCorrelationstatusOperatorState creates a new CorrelationstatusOperatorState object.
|
||||||
|
func NewCorrelationstatusOperatorState() *CorrelationstatusOperatorState {
|
||||||
|
return &CorrelationstatusOperatorState{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// +k8s:openapi-gen=true
|
||||||
|
type CorrelationStatus struct {
|
||||||
|
// operatorStates is a map of operator ID to operator state evaluations.
|
||||||
|
// Any operator which consumes this kind SHOULD add its state evaluation information to this field.
|
||||||
|
OperatorStates map[string]CorrelationstatusOperatorState `json:"operatorStates,omitempty"`
|
||||||
|
// additionalFields is reserved for future use
|
||||||
|
AdditionalFields map[string]interface{} `json:"additionalFields,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewCorrelationStatus creates a new CorrelationStatus object.
|
||||||
|
func NewCorrelationStatus() *CorrelationStatus {
|
||||||
|
return &CorrelationStatus{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// +k8s:openapi-gen=true
|
||||||
|
type CorrelationStatusOperatorStateState string
|
||||||
|
|
||||||
|
const (
|
||||||
|
CorrelationStatusOperatorStateStateSuccess CorrelationStatusOperatorStateState = "success"
|
||||||
|
CorrelationStatusOperatorStateStateInProgress CorrelationStatusOperatorStateState = "in_progress"
|
||||||
|
CorrelationStatusOperatorStateStateFailed CorrelationStatusOperatorStateState = "failed"
|
||||||
|
)
|
|
@ -0,0 +1,122 @@
|
||||||
|
//
|
||||||
|
// This file is generated by grafana-app-sdk
|
||||||
|
// DO NOT EDIT
|
||||||
|
//
|
||||||
|
|
||||||
|
package apis
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
|
"k8s.io/kube-openapi/pkg/spec3"
|
||||||
|
|
||||||
|
"github.com/grafana/grafana-app-sdk/app"
|
||||||
|
"github.com/grafana/grafana-app-sdk/resource"
|
||||||
|
|
||||||
|
v0alpha1 "github.com/grafana/grafana/apps/correlations/pkg/apis/correlation/v0alpha1"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
rawSchemaCorrelationv0alpha1 = []byte(`{"ConfigSpec":{"additionalProperties":false,"description":"there was a deprecated field here called type, we will need to move that for conversion and provisioning","properties":{"field":{"type":"string"},"target":{"$ref":"#/components/schemas/TargetSpec"},"transformations":{"items":{"$ref":"#/components/schemas/TransformationSpec"},"type":"array"}},"required":["field","target"],"type":"object"},"Correlation":{"properties":{"spec":{"$ref":"#/components/schemas/spec"},"status":{"$ref":"#/components/schemas/status"}},"required":["spec"]},"CorrelationType":{"enum":["query","external"],"type":"string"},"DataSourceRef":{"additionalProperties":false,"properties":{"group":{"description":"same as pluginId","type":"string"},"name":{"description":"same as grafana uid","type":"string"}},"required":["group","name"],"type":"object"},"OperatorState":{"additionalProperties":false,"properties":{"descriptiveState":{"description":"descriptiveState is an optional more descriptive state field which has no requirements on format","type":"string"},"details":{"additionalProperties":{"additionalProperties":{},"type":"object"},"description":"details contains any extra information that is operator-specific","type":"object"},"lastEvaluation":{"description":"lastEvaluation is the ResourceVersion last evaluated","type":"string"},"state":{"description":"state describes the state of the lastEvaluation.\nIt is limited to three possible states for machine evaluation.","enum":["success","in_progress","failed"],"type":"string"}},"required":["lastEvaluation","state"],"type":"object"},"TargetSpec":{"additionalProperties":{"additionalProperties":{},"type":"object"},"type":"object"},"TransformationSpec":{"additionalProperties":false,"properties":{"expression":{"type":"string"},"field":{"type":"string"},"mapValue":{"type":"string"},"type":{"type":"string"}},"required":["type","expression","field","mapValue"],"type":"object"},"spec":{"additionalProperties":false,"properties":{"config":{"$ref":"#/components/schemas/ConfigSpec"},"description":{"type":"string"},"label":{"type":"string"},"provisioned":{"type":"boolean"},"source_ds_ref":{"$ref":"#/components/schemas/DataSourceRef"},"target_ds_ref":{"$ref":"#/components/schemas/DataSourceRef"},"type":{"$ref":"#/components/schemas/CorrelationType"}},"required":["source_ds_ref","label","config","provisioned","type"],"type":"object"},"status":{"additionalProperties":false,"properties":{"additionalFields":{"additionalProperties":{"additionalProperties":{},"type":"object"},"description":"additionalFields is reserved for future use","type":"object"},"operatorStates":{"additionalProperties":{"$ref":"#/components/schemas/OperatorState"},"description":"operatorStates is a map of operator ID to operator state evaluations.\nAny operator which consumes this kind SHOULD add its state evaluation information to this field.","type":"object"}},"type":"object"}}`)
|
||||||
|
versionSchemaCorrelationv0alpha1 app.VersionSchema
|
||||||
|
_ = json.Unmarshal(rawSchemaCorrelationv0alpha1, &versionSchemaCorrelationv0alpha1)
|
||||||
|
)
|
||||||
|
|
||||||
|
var appManifestData = app.ManifestData{
|
||||||
|
AppName: "correlation",
|
||||||
|
Group: "correlations.grafana.app",
|
||||||
|
Versions: []app.ManifestVersion{
|
||||||
|
{
|
||||||
|
Name: "v0alpha1",
|
||||||
|
Served: true,
|
||||||
|
Kinds: []app.ManifestVersionKind{
|
||||||
|
{
|
||||||
|
Kind: "Correlation",
|
||||||
|
Plural: "Correlations",
|
||||||
|
Scope: "Namespaced",
|
||||||
|
Conversion: false,
|
||||||
|
Schema: &versionSchemaCorrelationv0alpha1,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Routes: app.ManifestVersionRoutes{
|
||||||
|
Namespaced: map[string]spec3.PathProps{},
|
||||||
|
Cluster: map[string]spec3.PathProps{},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
func LocalManifest() app.Manifest {
|
||||||
|
return app.NewEmbeddedManifest(appManifestData)
|
||||||
|
}
|
||||||
|
|
||||||
|
func RemoteManifest() app.Manifest {
|
||||||
|
return app.NewAPIServerManifest("correlation")
|
||||||
|
}
|
||||||
|
|
||||||
|
var kindVersionToGoType = map[string]resource.Kind{
|
||||||
|
"Correlation/v0alpha1": v0alpha1.CorrelationKind(),
|
||||||
|
}
|
||||||
|
|
||||||
|
// ManifestGoTypeAssociator returns the associated resource.Kind instance for a given Kind and Version, if one exists.
|
||||||
|
// If there is no association for the provided Kind and Version, exists will return false.
|
||||||
|
func ManifestGoTypeAssociator(kind, version string) (goType resource.Kind, exists bool) {
|
||||||
|
goType, exists = kindVersionToGoType[fmt.Sprintf("%s/%s", kind, version)]
|
||||||
|
return goType, exists
|
||||||
|
}
|
||||||
|
|
||||||
|
var customRouteToGoResponseType = map[string]any{}
|
||||||
|
|
||||||
|
// ManifestCustomRouteResponsesAssociator returns the associated response go type for a given kind, version, custom route path, and method, if one exists.
|
||||||
|
// kind may be empty for custom routes which are not kind subroutes. Leading slashes are removed from subroute paths.
|
||||||
|
// If there is no association for the provided kind, version, custom route path, and method, exists will return false.
|
||||||
|
// Resource routes (those without a kind) should prefix their route with "<namespace>/" if the route is namespaced (otherwise the route is assumed to be cluster-scope)
|
||||||
|
func ManifestCustomRouteResponsesAssociator(kind, version, path, verb string) (goType any, exists bool) {
|
||||||
|
if len(path) > 0 && path[0] == '/' {
|
||||||
|
path = path[1:]
|
||||||
|
}
|
||||||
|
goType, exists = customRouteToGoResponseType[fmt.Sprintf("%s|%s|%s|%s", version, kind, path, strings.ToUpper(verb))]
|
||||||
|
return goType, exists
|
||||||
|
}
|
||||||
|
|
||||||
|
var customRouteToGoParamsType = map[string]runtime.Object{}
|
||||||
|
|
||||||
|
func ManifestCustomRouteQueryAssociator(kind, version, path, verb string) (goType runtime.Object, exists bool) {
|
||||||
|
if len(path) > 0 && path[0] == '/' {
|
||||||
|
path = path[1:]
|
||||||
|
}
|
||||||
|
goType, exists = customRouteToGoParamsType[fmt.Sprintf("%s|%s|%s|%s", version, kind, path, strings.ToUpper(verb))]
|
||||||
|
return goType, exists
|
||||||
|
}
|
||||||
|
|
||||||
|
var customRouteToGoRequestBodyType = map[string]any{}
|
||||||
|
|
||||||
|
func ManifestCustomRouteRequestBodyAssociator(kind, version, path, verb string) (goType any, exists bool) {
|
||||||
|
if len(path) > 0 && path[0] == '/' {
|
||||||
|
path = path[1:]
|
||||||
|
}
|
||||||
|
goType, exists = customRouteToGoRequestBodyType[fmt.Sprintf("%s|%s|%s|%s", version, kind, path, strings.ToUpper(verb))]
|
||||||
|
return goType, exists
|
||||||
|
}
|
||||||
|
|
||||||
|
type GoTypeAssociator struct{}
|
||||||
|
|
||||||
|
func NewGoTypeAssociator() *GoTypeAssociator {
|
||||||
|
return &GoTypeAssociator{}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g *GoTypeAssociator) KindToGoType(kind, version string) (goType resource.Kind, exists bool) {
|
||||||
|
return ManifestGoTypeAssociator(kind, version)
|
||||||
|
}
|
||||||
|
func (g *GoTypeAssociator) CustomRouteReturnGoType(kind, version, path, verb string) (goType any, exists bool) {
|
||||||
|
return ManifestCustomRouteResponsesAssociator(kind, version, path, verb)
|
||||||
|
}
|
||||||
|
func (g *GoTypeAssociator) CustomRouteQueryGoType(kind, version, path, verb string) (goType runtime.Object, exists bool) {
|
||||||
|
return ManifestCustomRouteQueryAssociator(kind, version, path, verb)
|
||||||
|
}
|
||||||
|
func (g *GoTypeAssociator) CustomRouteRequestBodyGoType(kind, version, path, verb string) (goType any, exists bool) {
|
||||||
|
return ManifestCustomRouteRequestBodyAssociator(kind, version, path, verb)
|
||||||
|
}
|
|
@ -0,0 +1,52 @@
|
||||||
|
package app
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/grafana/grafana-app-sdk/app"
|
||||||
|
"github.com/grafana/grafana-app-sdk/logging"
|
||||||
|
"github.com/grafana/grafana-app-sdk/resource"
|
||||||
|
"github.com/grafana/grafana-app-sdk/simple"
|
||||||
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
|
|
||||||
|
correlationsv0alpha1 "github.com/grafana/grafana/apps/correlations/pkg/apis/correlation/v0alpha1"
|
||||||
|
)
|
||||||
|
|
||||||
|
func New(cfg app.Config) (app.App, error) {
|
||||||
|
simpleConfig := simple.AppConfig{
|
||||||
|
Name: "correlation",
|
||||||
|
KubeConfig: cfg.KubeConfig,
|
||||||
|
InformerConfig: simple.AppInformerConfig{
|
||||||
|
ErrorHandler: func(ctx context.Context, err error) {
|
||||||
|
logging.FromContext(ctx).Error("Informer processing error", "error", err)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
ManagedKinds: []simple.AppManagedKind{
|
||||||
|
{
|
||||||
|
Kind: correlationsv0alpha1.CorrelationKind(),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
a, err := simple.NewApp(simpleConfig)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = a.ValidateManifest(cfg.ManifestData)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return a, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetKinds() map[schema.GroupVersion][]resource.Kind {
|
||||||
|
gv := schema.GroupVersion{
|
||||||
|
Group: correlationsv0alpha1.CorrelationKind().Group(),
|
||||||
|
Version: correlationsv0alpha1.CorrelationKind().Version(),
|
||||||
|
}
|
||||||
|
return map[schema.GroupVersion][]resource.Kind{
|
||||||
|
gv: {correlationsv0alpha1.CorrelationKind()},
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,49 @@
|
||||||
|
/*
|
||||||
|
* This file was generated by grafana-app-sdk. DO NOT EDIT.
|
||||||
|
*/
|
||||||
|
import { Spec } from './types.spec.gen';
|
||||||
|
import { Status } from './types.status.gen';
|
||||||
|
|
||||||
|
export interface Metadata {
|
||||||
|
name: string;
|
||||||
|
namespace: string;
|
||||||
|
generateName?: string;
|
||||||
|
selfLink?: string;
|
||||||
|
uid?: string;
|
||||||
|
resourceVersion?: string;
|
||||||
|
generation?: number;
|
||||||
|
creationTimestamp?: string;
|
||||||
|
deletionTimestamp?: string;
|
||||||
|
deletionGracePeriodSeconds?: number;
|
||||||
|
labels?: Record<string, string>;
|
||||||
|
annotations?: Record<string, string>;
|
||||||
|
ownerReferences?: OwnerReference[];
|
||||||
|
finalizers?: string[];
|
||||||
|
managedFields?: ManagedFieldsEntry[];
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface OwnerReference {
|
||||||
|
apiVersion: string;
|
||||||
|
kind: string;
|
||||||
|
name: string;
|
||||||
|
uid: string;
|
||||||
|
controller?: boolean;
|
||||||
|
blockOwnerDeletion?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ManagedFieldsEntry {
|
||||||
|
manager?: string;
|
||||||
|
operation?: string;
|
||||||
|
apiVersion?: string;
|
||||||
|
time?: string;
|
||||||
|
fieldsType?: string;
|
||||||
|
subresource?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface Correlation {
|
||||||
|
kind: string;
|
||||||
|
apiVersion: string;
|
||||||
|
metadata: Metadata;
|
||||||
|
spec: Spec;
|
||||||
|
status: Status;
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
// Code generated - EDITING IS FUTILE. DO NOT EDIT.
|
||||||
|
|
||||||
|
// metadata contains embedded CommonMetadata and can be extended with custom string fields
|
||||||
|
// TODO: use CommonMetadata instead of redefining here; currently needs to be defined here
|
||||||
|
// without external reference as using the CommonMetadata reference breaks thema codegen.
|
||||||
|
export interface Metadata {
|
||||||
|
updateTimestamp: string;
|
||||||
|
createdBy: string;
|
||||||
|
uid: string;
|
||||||
|
creationTimestamp: string;
|
||||||
|
deletionTimestamp?: string;
|
||||||
|
finalizers: string[];
|
||||||
|
resourceVersion: string;
|
||||||
|
generation: number;
|
||||||
|
updatedBy: string;
|
||||||
|
labels: Record<string, string>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const defaultMetadata = (): Metadata => ({
|
||||||
|
updateTimestamp: "",
|
||||||
|
createdBy: "",
|
||||||
|
uid: "",
|
||||||
|
creationTimestamp: "",
|
||||||
|
finalizers: [],
|
||||||
|
resourceVersion: "",
|
||||||
|
generation: 0,
|
||||||
|
updatedBy: "",
|
||||||
|
labels: {},
|
||||||
|
});
|
||||||
|
|
|
@ -0,0 +1,69 @@
|
||||||
|
// Code generated - EDITING IS FUTILE. DO NOT EDIT.
|
||||||
|
|
||||||
|
export interface DataSourceRef {
|
||||||
|
// same as pluginId
|
||||||
|
group: string;
|
||||||
|
// same as grafana uid
|
||||||
|
name: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const defaultDataSourceRef = (): DataSourceRef => ({
|
||||||
|
group: "",
|
||||||
|
name: "",
|
||||||
|
});
|
||||||
|
|
||||||
|
// there was a deprecated field here called type, we will need to move that for conversion and provisioning
|
||||||
|
export interface ConfigSpec {
|
||||||
|
field: string;
|
||||||
|
target: TargetSpec;
|
||||||
|
transformations?: TransformationSpec[];
|
||||||
|
}
|
||||||
|
|
||||||
|
export const defaultConfigSpec = (): ConfigSpec => ({
|
||||||
|
field: "",
|
||||||
|
target: defaultTargetSpec(),
|
||||||
|
});
|
||||||
|
|
||||||
|
export type TargetSpec = Record<string, any>;
|
||||||
|
|
||||||
|
export const defaultTargetSpec = (): TargetSpec => ({});
|
||||||
|
|
||||||
|
export interface TransformationSpec {
|
||||||
|
type: string;
|
||||||
|
expression: string;
|
||||||
|
field: string;
|
||||||
|
mapValue: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const defaultTransformationSpec = (): TransformationSpec => ({
|
||||||
|
type: "",
|
||||||
|
expression: "",
|
||||||
|
field: "",
|
||||||
|
mapValue: "",
|
||||||
|
});
|
||||||
|
|
||||||
|
export enum CorrelationType {
|
||||||
|
Query = "query",
|
||||||
|
External = "external",
|
||||||
|
}
|
||||||
|
|
||||||
|
export const defaultCorrelationType = (): CorrelationType => (CorrelationType.Query);
|
||||||
|
|
||||||
|
export interface Spec {
|
||||||
|
source_ds_ref: DataSourceRef;
|
||||||
|
target_ds_ref?: DataSourceRef;
|
||||||
|
label: string;
|
||||||
|
description?: string;
|
||||||
|
config: ConfigSpec;
|
||||||
|
provisioned: boolean;
|
||||||
|
type: CorrelationType;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const defaultSpec = (): Spec => ({
|
||||||
|
source_ds_ref: defaultDataSourceRef(),
|
||||||
|
label: "",
|
||||||
|
config: defaultConfigSpec(),
|
||||||
|
provisioned: false,
|
||||||
|
type: CorrelationType.Query,
|
||||||
|
});
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
// Code generated - EDITING IS FUTILE. DO NOT EDIT.
|
||||||
|
|
||||||
|
export interface OperatorState {
|
||||||
|
// lastEvaluation is the ResourceVersion last evaluated
|
||||||
|
lastEvaluation: string;
|
||||||
|
// state describes the state of the lastEvaluation.
|
||||||
|
// It is limited to three possible states for machine evaluation.
|
||||||
|
state: "success" | "in_progress" | "failed";
|
||||||
|
// descriptiveState is an optional more descriptive state field which has no requirements on format
|
||||||
|
descriptiveState?: string;
|
||||||
|
// details contains any extra information that is operator-specific
|
||||||
|
details?: Record<string, any>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const defaultOperatorState = (): OperatorState => ({
|
||||||
|
lastEvaluation: "",
|
||||||
|
state: "success",
|
||||||
|
});
|
||||||
|
|
||||||
|
export interface Status {
|
||||||
|
// operatorStates is a map of operator ID to operator state evaluations.
|
||||||
|
// Any operator which consumes this kind SHOULD add its state evaluation information to this field.
|
||||||
|
operatorStates?: Record<string, OperatorState>;
|
||||||
|
// additionalFields is reserved for future use
|
||||||
|
additionalFields?: Record<string, any>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const defaultStatus = (): Status => ({
|
||||||
|
});
|
||||||
|
|
2
go.mod
2
go.mod
|
@ -236,6 +236,7 @@ require (
|
||||||
github.com/grafana/grafana/apps/alerting/alertenrichment v0.0.0 // @grafana/alerting-backend
|
github.com/grafana/grafana/apps/alerting/alertenrichment v0.0.0 // @grafana/alerting-backend
|
||||||
github.com/grafana/grafana/apps/alerting/notifications v0.0.0 // @grafana/alerting-backend
|
github.com/grafana/grafana/apps/alerting/notifications v0.0.0 // @grafana/alerting-backend
|
||||||
github.com/grafana/grafana/apps/alerting/rules v0.0.0 // @grafana/alerting-backend
|
github.com/grafana/grafana/apps/alerting/rules v0.0.0 // @grafana/alerting-backend
|
||||||
|
github.com/grafana/grafana/apps/correlations v0.0.0 // @grafana/datapro
|
||||||
github.com/grafana/grafana/apps/dashboard v0.0.0 // @grafana/grafana-app-platform-squad @grafana/dashboards-squad
|
github.com/grafana/grafana/apps/dashboard v0.0.0 // @grafana/grafana-app-platform-squad @grafana/dashboards-squad
|
||||||
github.com/grafana/grafana/apps/folder v0.0.0 // @grafana/grafana-search-and-storage
|
github.com/grafana/grafana/apps/folder v0.0.0 // @grafana/grafana-search-and-storage
|
||||||
github.com/grafana/grafana/apps/iam v0.0.0 // @grafana/identity-access-team
|
github.com/grafana/grafana/apps/iam v0.0.0 // @grafana/identity-access-team
|
||||||
|
@ -263,6 +264,7 @@ replace (
|
||||||
github.com/grafana/grafana/apps/alerting/alertenrichment => ./apps/alerting/alertenrichment
|
github.com/grafana/grafana/apps/alerting/alertenrichment => ./apps/alerting/alertenrichment
|
||||||
github.com/grafana/grafana/apps/alerting/notifications => ./apps/alerting/notifications
|
github.com/grafana/grafana/apps/alerting/notifications => ./apps/alerting/notifications
|
||||||
github.com/grafana/grafana/apps/alerting/rules => ./apps/alerting/rules
|
github.com/grafana/grafana/apps/alerting/rules => ./apps/alerting/rules
|
||||||
|
github.com/grafana/grafana/apps/correlations => ./apps/correlations
|
||||||
github.com/grafana/grafana/apps/dashboard => ./apps/dashboard
|
github.com/grafana/grafana/apps/dashboard => ./apps/dashboard
|
||||||
github.com/grafana/grafana/apps/folder => ./apps/folder
|
github.com/grafana/grafana/apps/folder => ./apps/folder
|
||||||
github.com/grafana/grafana/apps/iam => ./apps/iam
|
github.com/grafana/grafana/apps/iam => ./apps/iam
|
||||||
|
|
1
go.work
1
go.work
|
@ -9,6 +9,7 @@ use (
|
||||||
./apps/alerting/alertenrichment
|
./apps/alerting/alertenrichment
|
||||||
./apps/alerting/notifications
|
./apps/alerting/notifications
|
||||||
./apps/alerting/rules
|
./apps/alerting/rules
|
||||||
|
./apps/correlations
|
||||||
./apps/dashboard
|
./apps/dashboard
|
||||||
./apps/folder
|
./apps/folder
|
||||||
./apps/iam
|
./apps/iam
|
||||||
|
|
|
@ -649,6 +649,7 @@ github.com/apache/arrow/go/v15 v15.0.2 h1:60IliRbiyTWCWjERBCkO1W4Qun9svcYoZrSLcy
|
||||||
github.com/apache/arrow/go/v15 v15.0.2/go.mod h1:DGXsR3ajT524njufqf95822i+KTh+yea1jass9YXgjA=
|
github.com/apache/arrow/go/v15 v15.0.2/go.mod h1:DGXsR3ajT524njufqf95822i+KTh+yea1jass9YXgjA=
|
||||||
github.com/apparentlymart/go-dump v0.0.0-20180507223929-23540a00eaa3 h1:ZSTrOEhiM5J5RFxEaFvMZVEAM1KvT1YzbEOwB2EAGjA=
|
github.com/apparentlymart/go-dump v0.0.0-20180507223929-23540a00eaa3 h1:ZSTrOEhiM5J5RFxEaFvMZVEAM1KvT1YzbEOwB2EAGjA=
|
||||||
github.com/apparentlymart/go-dump v0.0.0-20180507223929-23540a00eaa3/go.mod h1:oL81AME2rN47vu18xqj1S1jPIPuN7afo62yKTNn3XMM=
|
github.com/apparentlymart/go-dump v0.0.0-20180507223929-23540a00eaa3/go.mod h1:oL81AME2rN47vu18xqj1S1jPIPuN7afo62yKTNn3XMM=
|
||||||
|
github.com/apparentlymart/go-textseg/v13 v13.0.0/go.mod h1:ZK2fH7c4NqDTLtiYLvIkEghdlcqw7yxLeM89kiTRPUo=
|
||||||
github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e h1:QEF07wC0T1rKkctt1RINW/+RMTVmiwxETico2l3gxJA=
|
github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e h1:QEF07wC0T1rKkctt1RINW/+RMTVmiwxETico2l3gxJA=
|
||||||
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6 h1:G1bPvciwNyF7IUmKXNt9Ak3m6u9DE1rF+RmtIkBpVdA=
|
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6 h1:G1bPvciwNyF7IUmKXNt9Ak3m6u9DE1rF+RmtIkBpVdA=
|
||||||
github.com/atc0005/go-teams-notify/v2 v2.13.0 h1:nbDeHy89NjYlF/PEfLVF6lsserY9O5SnN1iOIw3AxXw=
|
github.com/atc0005/go-teams-notify/v2 v2.13.0 h1:nbDeHy89NjYlF/PEfLVF6lsserY9O5SnN1iOIw3AxXw=
|
||||||
|
@ -954,6 +955,7 @@ github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91
|
||||||
github.com/go-playground/validator/v10 v10.19.0 h1:ol+5Fu+cSq9JD7SoSqe04GMI92cbn0+wvQ3bZ8b/AU4=
|
github.com/go-playground/validator/v10 v10.19.0 h1:ol+5Fu+cSq9JD7SoSqe04GMI92cbn0+wvQ3bZ8b/AU4=
|
||||||
github.com/go-playground/validator/v10 v10.19.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM=
|
github.com/go-playground/validator/v10 v10.19.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM=
|
||||||
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls=
|
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls=
|
||||||
|
github.com/go-test/deep v1.0.3/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=
|
||||||
github.com/go-viper/mapstructure/v2 v2.3.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
|
github.com/go-viper/mapstructure/v2 v2.3.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
|
||||||
github.com/gobuffalo/flect v1.0.3 h1:xeWBM2nui+qnVvNM4S3foBhCAL2XgPU+a7FdpelbTq4=
|
github.com/gobuffalo/flect v1.0.3 h1:xeWBM2nui+qnVvNM4S3foBhCAL2XgPU+a7FdpelbTq4=
|
||||||
github.com/gobuffalo/flect v1.0.3/go.mod h1:A5msMlrHtLqh9umBSnvabjsMrCcCpAyzglnDvkbYKHs=
|
github.com/gobuffalo/flect v1.0.3/go.mod h1:A5msMlrHtLqh9umBSnvabjsMrCcCpAyzglnDvkbYKHs=
|
||||||
|
@ -1141,6 +1143,7 @@ github.com/hashicorp/go-syslog v1.0.0 h1:KaodqZuhUoZereWVIYmpUgZysurB1kBLX2j0MwM
|
||||||
github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
|
github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
|
||||||
github.com/hashicorp/go.net v0.0.1 h1:sNCoNyDEvN1xa+X0baata4RdcpKwcMS6DH+xwfqPgjw=
|
github.com/hashicorp/go.net v0.0.1 h1:sNCoNyDEvN1xa+X0baata4RdcpKwcMS6DH+xwfqPgjw=
|
||||||
github.com/hashicorp/golang-lru/v2 v2.0.5/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
|
github.com/hashicorp/golang-lru/v2 v2.0.5/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
|
||||||
|
github.com/hashicorp/hcl/v2 v2.17.0/go.mod h1:gJyW2PTShkJqQBKpAmPO3yxMxIuoXkOF2TpqXzrQyx4=
|
||||||
github.com/hashicorp/logutils v1.0.0 h1:dLEQVugN8vlakKOUE3ihGLTZJRB4j+M2cdTm/ORI65Y=
|
github.com/hashicorp/logutils v1.0.0 h1:dLEQVugN8vlakKOUE3ihGLTZJRB4j+M2cdTm/ORI65Y=
|
||||||
github.com/hashicorp/mdns v1.0.5 h1:1M5hW1cunYeoXOqHwEb/GBDDHAFo0Yqb/uz/beC6LbE=
|
github.com/hashicorp/mdns v1.0.5 h1:1M5hW1cunYeoXOqHwEb/GBDDHAFo0Yqb/uz/beC6LbE=
|
||||||
github.com/hashicorp/mdns v1.0.5/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc=
|
github.com/hashicorp/mdns v1.0.5/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc=
|
||||||
|
@ -1535,6 +1538,7 @@ github.com/spf13/cast v1.7.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cA
|
||||||
github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g=
|
github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g=
|
||||||
github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y=
|
github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y=
|
||||||
github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
|
github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
|
||||||
|
github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
||||||
github.com/spkg/bom v0.0.0-20160624110644-59b7046e48ad h1:fiWzISvDn0Csy5H0iwgAuJGQTUpVfEMJJd4nRFXogbc=
|
github.com/spkg/bom v0.0.0-20160624110644-59b7046e48ad h1:fiWzISvDn0Csy5H0iwgAuJGQTUpVfEMJJd4nRFXogbc=
|
||||||
github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8=
|
github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8=
|
||||||
github.com/stretchr/testify v1.11.0/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
|
github.com/stretchr/testify v1.11.0/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
|
||||||
|
@ -1660,6 +1664,7 @@ github.com/yuin/goldmark v1.7.13 h1:GPddIs617DnBLFFVJFgpo1aBfe/4xcvMc3SB5t/D0pA=
|
||||||
github.com/yuin/goldmark v1.7.13/go.mod h1:ip/1k0VRfGynBgxOz0yCqHrbZXhcjxyuS66Brc7iBKg=
|
github.com/yuin/goldmark v1.7.13/go.mod h1:ip/1k0VRfGynBgxOz0yCqHrbZXhcjxyuS66Brc7iBKg=
|
||||||
github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0=
|
github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0=
|
||||||
github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
|
github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
|
||||||
|
github.com/zclconf/go-cty v1.13.0/go.mod h1:YKQzy/7pZ7iq2jNFzy5go57xdxdWoLLpaEp4u238AE0=
|
||||||
github.com/zclconf/go-cty-debug v0.0.0-20191215020915-b22d67c1ba0b h1:FosyBZYxY34Wul7O/MSKey3txpPYyCqVO5ZyceuQJEI=
|
github.com/zclconf/go-cty-debug v0.0.0-20191215020915-b22d67c1ba0b h1:FosyBZYxY34Wul7O/MSKey3txpPYyCqVO5ZyceuQJEI=
|
||||||
github.com/zclconf/go-cty-debug v0.0.0-20191215020915-b22d67c1ba0b/go.mod h1:ZRKQfBXbGkpdV6QMzT3rU1kSTAnfu1dO8dPKjYprgj8=
|
github.com/zclconf/go-cty-debug v0.0.0-20191215020915-b22d67c1ba0b/go.mod h1:ZRKQfBXbGkpdV6QMzT3rU1kSTAnfu1dO8dPKjYprgj8=
|
||||||
github.com/zenazn/goji v1.0.1 h1:4lbD8Mx2h7IvloP7r2C0D6ltZP6Ufip8Hn0wmSK5LR8=
|
github.com/zenazn/goji v1.0.1 h1:4lbD8Mx2h7IvloP7r2C0D6ltZP6Ufip8Hn0wmSK5LR8=
|
||||||
|
@ -1998,6 +2003,7 @@ golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuX
|
||||||
golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g=
|
golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g=
|
||||||
golang.org/x/term v0.32.0/go.mod h1:uZG1FhGx848Sqfsq4/DlJr3xGGsYMu/L5GW4abiaEPQ=
|
golang.org/x/term v0.32.0/go.mod h1:uZG1FhGx848Sqfsq4/DlJr3xGGsYMu/L5GW4abiaEPQ=
|
||||||
golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw=
|
golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw=
|
||||||
|
golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
|
||||||
golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
|
golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
|
||||||
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
|
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
|
||||||
golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
|
golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
|
||||||
|
|
|
@ -291,6 +291,10 @@ export interface FeatureToggles {
|
||||||
*/
|
*/
|
||||||
kubernetesAlertingRules?: boolean;
|
kubernetesAlertingRules?: boolean;
|
||||||
/**
|
/**
|
||||||
|
* Adds support for Kubernetes correlations
|
||||||
|
*/
|
||||||
|
kubernetesCorrelations?: boolean;
|
||||||
|
/**
|
||||||
* Disable schema validation for dashboards/v1
|
* Disable schema validation for dashboards/v1
|
||||||
*/
|
*/
|
||||||
dashboardDisableSchemaValidationV1?: boolean;
|
dashboardDisableSchemaValidationV1?: boolean;
|
||||||
|
|
|
@ -14,6 +14,7 @@ import (
|
||||||
"github.com/grafana/grafana/pkg/registry/apps/advisor"
|
"github.com/grafana/grafana/pkg/registry/apps/advisor"
|
||||||
"github.com/grafana/grafana/pkg/registry/apps/alerting/notifications"
|
"github.com/grafana/grafana/pkg/registry/apps/alerting/notifications"
|
||||||
"github.com/grafana/grafana/pkg/registry/apps/alerting/rules"
|
"github.com/grafana/grafana/pkg/registry/apps/alerting/rules"
|
||||||
|
"github.com/grafana/grafana/pkg/registry/apps/correlations"
|
||||||
"github.com/grafana/grafana/pkg/registry/apps/investigations"
|
"github.com/grafana/grafana/pkg/registry/apps/investigations"
|
||||||
"github.com/grafana/grafana/pkg/registry/apps/playlist"
|
"github.com/grafana/grafana/pkg/registry/apps/playlist"
|
||||||
"github.com/grafana/grafana/pkg/registry/apps/plugins"
|
"github.com/grafana/grafana/pkg/registry/apps/plugins"
|
||||||
|
@ -33,14 +34,21 @@ func ProvideAppInstallers(
|
||||||
pluginsApplInstaller *plugins.PluginsAppInstaller,
|
pluginsApplInstaller *plugins.PluginsAppInstaller,
|
||||||
shorturlAppInstaller *shorturl.ShortURLAppInstaller,
|
shorturlAppInstaller *shorturl.ShortURLAppInstaller,
|
||||||
rulesAppInstaller *rules.AlertingRulesAppInstaller,
|
rulesAppInstaller *rules.AlertingRulesAppInstaller,
|
||||||
|
correlationsAppInstaller *correlations.CorrelationsAppInstaller,
|
||||||
) []appsdkapiserver.AppInstaller {
|
) []appsdkapiserver.AppInstaller {
|
||||||
installers := []appsdkapiserver.AppInstaller{playlistAppInstaller, pluginsApplInstaller}
|
installers := []appsdkapiserver.AppInstaller{
|
||||||
|
playlistAppInstaller,
|
||||||
|
pluginsApplInstaller,
|
||||||
|
}
|
||||||
if features.IsEnabledGlobally(featuremgmt.FlagKubernetesShortURLs) {
|
if features.IsEnabledGlobally(featuremgmt.FlagKubernetesShortURLs) {
|
||||||
installers = append(installers, shorturlAppInstaller)
|
installers = append(installers, shorturlAppInstaller)
|
||||||
}
|
}
|
||||||
if features.IsEnabledGlobally(featuremgmt.FlagKubernetesAlertingRules) && rulesAppInstaller != nil {
|
if features.IsEnabledGlobally(featuremgmt.FlagKubernetesAlertingRules) && rulesAppInstaller != nil {
|
||||||
installers = append(installers, rulesAppInstaller)
|
installers = append(installers, rulesAppInstaller)
|
||||||
}
|
}
|
||||||
|
if features.IsEnabledGlobally(featuremgmt.FlagKubernetesCorrelations) {
|
||||||
|
installers = append(installers, correlationsAppInstaller)
|
||||||
|
}
|
||||||
return installers
|
return installers
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,17 +3,20 @@ package appregistry
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
"github.com/grafana/grafana/pkg/registry/apps/alerting/rules"
|
"github.com/grafana/grafana/pkg/registry/apps/alerting/rules"
|
||||||
|
"github.com/grafana/grafana/pkg/registry/apps/correlations"
|
||||||
"github.com/grafana/grafana/pkg/registry/apps/playlist"
|
"github.com/grafana/grafana/pkg/registry/apps/playlist"
|
||||||
"github.com/grafana/grafana/pkg/registry/apps/plugins"
|
"github.com/grafana/grafana/pkg/registry/apps/plugins"
|
||||||
"github.com/grafana/grafana/pkg/services/featuremgmt"
|
"github.com/grafana/grafana/pkg/services/featuremgmt"
|
||||||
"github.com/stretchr/testify/require"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestProvideAppInstallers_Table(t *testing.T) {
|
func TestProvideAppInstallers_Table(t *testing.T) {
|
||||||
playlistInstaller := &playlist.PlaylistAppInstaller{}
|
playlistInstaller := &playlist.PlaylistAppInstaller{}
|
||||||
pluginsInstaller := &plugins.PluginsAppInstaller{}
|
pluginsInstaller := &plugins.PluginsAppInstaller{}
|
||||||
rulesInstaller := &rules.AlertingRulesAppInstaller{}
|
rulesInstaller := &rules.AlertingRulesAppInstaller{}
|
||||||
|
correlationsAppInstaller := &correlations.CorrelationsAppInstaller{}
|
||||||
|
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
|
@ -30,7 +33,7 @@ func TestProvideAppInstallers_Table(t *testing.T) {
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
features := featuremgmt.WithFeatures(tt.flags...)
|
features := featuremgmt.WithFeatures(tt.flags...)
|
||||||
got := ProvideAppInstallers(features, playlistInstaller, pluginsInstaller, nil, tt.rulesInst)
|
got := ProvideAppInstallers(features, playlistInstaller, pluginsInstaller, nil, tt.rulesInst, correlationsAppInstaller)
|
||||||
if tt.expectRulesApp {
|
if tt.expectRulesApp {
|
||||||
require.Contains(t, got, tt.rulesInst)
|
require.Contains(t, got, tt.rulesInst)
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
package correlations
|
||||||
|
|
||||||
|
import (
|
||||||
|
restclient "k8s.io/client-go/rest"
|
||||||
|
|
||||||
|
"github.com/grafana/grafana-app-sdk/app"
|
||||||
|
appsdkapiserver "github.com/grafana/grafana-app-sdk/k8s/apiserver"
|
||||||
|
"github.com/grafana/grafana-app-sdk/simple"
|
||||||
|
"github.com/grafana/grafana/apps/correlations/pkg/apis"
|
||||||
|
correlationsapp "github.com/grafana/grafana/apps/correlations/pkg/app"
|
||||||
|
"github.com/grafana/grafana/pkg/services/featuremgmt"
|
||||||
|
"github.com/grafana/grafana/pkg/setting"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
_ appsdkapiserver.AppInstaller = (*CorrelationsAppInstaller)(nil)
|
||||||
|
)
|
||||||
|
|
||||||
|
type CorrelationsAppInstaller struct {
|
||||||
|
appsdkapiserver.AppInstaller
|
||||||
|
cfg *setting.Cfg
|
||||||
|
}
|
||||||
|
|
||||||
|
func RegisterAppInstaller(
|
||||||
|
cfg *setting.Cfg,
|
||||||
|
features featuremgmt.FeatureToggles,
|
||||||
|
) (*CorrelationsAppInstaller, error) {
|
||||||
|
installer := &CorrelationsAppInstaller{
|
||||||
|
cfg: cfg,
|
||||||
|
}
|
||||||
|
provider := simple.NewAppProvider(apis.LocalManifest(), nil, correlationsapp.New)
|
||||||
|
|
||||||
|
appConfig := app.Config{
|
||||||
|
KubeConfig: restclient.Config{}, // this will be overridden by the installer's InitializeApp method
|
||||||
|
ManifestData: *apis.LocalManifest().ManifestData,
|
||||||
|
}
|
||||||
|
i, err := appsdkapiserver.NewDefaultAppInstaller(provider, appConfig, &apis.GoTypeAssociator{})
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
installer.AppInstaller = i
|
||||||
|
|
||||||
|
return installer, nil
|
||||||
|
}
|
|
@ -6,6 +6,7 @@ import (
|
||||||
"github.com/grafana/grafana/pkg/registry/apps/advisor"
|
"github.com/grafana/grafana/pkg/registry/apps/advisor"
|
||||||
"github.com/grafana/grafana/pkg/registry/apps/alerting/notifications"
|
"github.com/grafana/grafana/pkg/registry/apps/alerting/notifications"
|
||||||
"github.com/grafana/grafana/pkg/registry/apps/alerting/rules"
|
"github.com/grafana/grafana/pkg/registry/apps/alerting/rules"
|
||||||
|
"github.com/grafana/grafana/pkg/registry/apps/correlations"
|
||||||
"github.com/grafana/grafana/pkg/registry/apps/investigations"
|
"github.com/grafana/grafana/pkg/registry/apps/investigations"
|
||||||
"github.com/grafana/grafana/pkg/registry/apps/playlist"
|
"github.com/grafana/grafana/pkg/registry/apps/playlist"
|
||||||
"github.com/grafana/grafana/pkg/registry/apps/plugins"
|
"github.com/grafana/grafana/pkg/registry/apps/plugins"
|
||||||
|
@ -21,5 +22,6 @@ var WireSet = wire.NewSet(
|
||||||
notifications.RegisterApp,
|
notifications.RegisterApp,
|
||||||
plugins.RegisterAppInstaller,
|
plugins.RegisterAppInstaller,
|
||||||
shorturl.RegisterAppInstaller,
|
shorturl.RegisterAppInstaller,
|
||||||
|
correlations.RegisterAppInstaller,
|
||||||
rules.RegisterAppInstaller,
|
rules.RegisterAppInstaller,
|
||||||
)
|
)
|
||||||
|
|
|
@ -82,6 +82,7 @@ import (
|
||||||
advisor2 "github.com/grafana/grafana/pkg/registry/apps/advisor"
|
advisor2 "github.com/grafana/grafana/pkg/registry/apps/advisor"
|
||||||
notifications2 "github.com/grafana/grafana/pkg/registry/apps/alerting/notifications"
|
notifications2 "github.com/grafana/grafana/pkg/registry/apps/alerting/notifications"
|
||||||
"github.com/grafana/grafana/pkg/registry/apps/alerting/rules"
|
"github.com/grafana/grafana/pkg/registry/apps/alerting/rules"
|
||||||
|
correlations2 "github.com/grafana/grafana/pkg/registry/apps/correlations"
|
||||||
"github.com/grafana/grafana/pkg/registry/apps/investigations"
|
"github.com/grafana/grafana/pkg/registry/apps/investigations"
|
||||||
"github.com/grafana/grafana/pkg/registry/apps/playlist"
|
"github.com/grafana/grafana/pkg/registry/apps/playlist"
|
||||||
"github.com/grafana/grafana/pkg/registry/apps/plugins"
|
"github.com/grafana/grafana/pkg/registry/apps/plugins"
|
||||||
|
@ -760,7 +761,11 @@ func Initialize(ctx context.Context, cfg *setting.Cfg, opts Options, apiOpts api
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
v2 := appregistry.ProvideAppInstallers(featureToggles, playlistAppInstaller, pluginsAppInstaller, shortURLAppInstaller, alertingRulesAppInstaller)
|
correlationsAppInstaller, err := correlations2.RegisterAppInstaller(cfg, featureToggles)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
v2 := appregistry.ProvideAppInstallers(featureToggles, playlistAppInstaller, pluginsAppInstaller, shortURLAppInstaller, alertingRulesAppInstaller, correlationsAppInstaller)
|
||||||
builderMetrics := builder.ProvideBuilderMetrics(registerer)
|
builderMetrics := builder.ProvideBuilderMetrics(registerer)
|
||||||
apiserverService, err := apiserver.ProvideService(cfg, featureToggles, routeRegisterImpl, tracingService, serverLockService, sqlStore, kvStore, middlewareHandler, scopedPluginDatasourceProvider, plugincontextProvider, pluginstoreService, dualwriteService, resourceClient, inlineSecureValueSupport, eventualRestConfigProvider, v, eventualRestConfigProvider, registerer, aggregatorRunner, v2, builderMetrics)
|
apiserverService, err := apiserver.ProvideService(cfg, featureToggles, routeRegisterImpl, tracingService, serverLockService, sqlStore, kvStore, middlewareHandler, scopedPluginDatasourceProvider, plugincontextProvider, pluginstoreService, dualwriteService, resourceClient, inlineSecureValueSupport, eventualRestConfigProvider, v, eventualRestConfigProvider, registerer, aggregatorRunner, v2, builderMetrics)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -1353,7 +1358,11 @@ func InitializeForTest(ctx context.Context, t sqlutil.ITestDB, testingT interfac
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
v2 := appregistry.ProvideAppInstallers(featureToggles, playlistAppInstaller, pluginsAppInstaller, shortURLAppInstaller, alertingRulesAppInstaller)
|
correlationsAppInstaller, err := correlations2.RegisterAppInstaller(cfg, featureToggles)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
v2 := appregistry.ProvideAppInstallers(featureToggles, playlistAppInstaller, pluginsAppInstaller, shortURLAppInstaller, alertingRulesAppInstaller, correlationsAppInstaller)
|
||||||
builderMetrics := builder.ProvideBuilderMetrics(registerer)
|
builderMetrics := builder.ProvideBuilderMetrics(registerer)
|
||||||
apiserverService, err := apiserver.ProvideService(cfg, featureToggles, routeRegisterImpl, tracingService, serverLockService, sqlStore, kvStore, middlewareHandler, scopedPluginDatasourceProvider, plugincontextProvider, pluginstoreService, dualwriteService, resourceClient, inlineSecureValueSupport, eventualRestConfigProvider, v, eventualRestConfigProvider, registerer, aggregatorRunner, v2, builderMetrics)
|
apiserverService, err := apiserver.ProvideService(cfg, featureToggles, routeRegisterImpl, tracingService, serverLockService, sqlStore, kvStore, middlewareHandler, scopedPluginDatasourceProvider, plugincontextProvider, pluginstoreService, dualwriteService, resourceClient, inlineSecureValueSupport, eventualRestConfigProvider, v, eventualRestConfigProvider, registerer, aggregatorRunner, v2, builderMetrics)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -483,6 +483,13 @@ var (
|
||||||
Owner: grafanaAlertingSquad,
|
Owner: grafanaAlertingSquad,
|
||||||
RequiresRestart: true,
|
RequiresRestart: true,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
Name: "kubernetesCorrelations",
|
||||||
|
Description: "Adds support for Kubernetes correlations",
|
||||||
|
Stage: FeatureStageExperimental,
|
||||||
|
Owner: grafanaDataProSquad,
|
||||||
|
RequiresRestart: true,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
Name: "dashboardDisableSchemaValidationV1",
|
Name: "dashboardDisableSchemaValidationV1",
|
||||||
Description: "Disable schema validation for dashboards/v1",
|
Description: "Disable schema validation for dashboards/v1",
|
||||||
|
|
|
@ -62,6 +62,7 @@ kubernetesDashboards,GA,@grafana/dashboards-squad,false,false,true
|
||||||
kubernetesShortURLs,experimental,@grafana/grafana-app-platform-squad,false,true,false
|
kubernetesShortURLs,experimental,@grafana/grafana-app-platform-squad,false,true,false
|
||||||
useKubernetesShortURLsAPI,experimental,@grafana/sharing-squad,false,false,true
|
useKubernetesShortURLsAPI,experimental,@grafana/sharing-squad,false,false,true
|
||||||
kubernetesAlertingRules,experimental,@grafana/alerting-squad,false,true,false
|
kubernetesAlertingRules,experimental,@grafana/alerting-squad,false,true,false
|
||||||
|
kubernetesCorrelations,experimental,@grafana/datapro,false,true,false
|
||||||
dashboardDisableSchemaValidationV1,experimental,@grafana/grafana-app-platform-squad,false,false,false
|
dashboardDisableSchemaValidationV1,experimental,@grafana/grafana-app-platform-squad,false,false,false
|
||||||
dashboardDisableSchemaValidationV2,experimental,@grafana/grafana-app-platform-squad,false,false,false
|
dashboardDisableSchemaValidationV2,experimental,@grafana/grafana-app-platform-squad,false,false,false
|
||||||
dashboardSchemaValidationLogging,experimental,@grafana/grafana-app-platform-squad,false,false,false
|
dashboardSchemaValidationLogging,experimental,@grafana/grafana-app-platform-squad,false,false,false
|
||||||
|
|
|
|
@ -259,6 +259,10 @@ const (
|
||||||
// Adds support for Kubernetes alerting and recording rules
|
// Adds support for Kubernetes alerting and recording rules
|
||||||
FlagKubernetesAlertingRules = "kubernetesAlertingRules"
|
FlagKubernetesAlertingRules = "kubernetesAlertingRules"
|
||||||
|
|
||||||
|
// FlagKubernetesCorrelations
|
||||||
|
// Adds support for Kubernetes correlations
|
||||||
|
FlagKubernetesCorrelations = "kubernetesCorrelations"
|
||||||
|
|
||||||
// FlagDashboardDisableSchemaValidationV1
|
// FlagDashboardDisableSchemaValidationV1
|
||||||
// Disable schema validation for dashboards/v1
|
// Disable schema validation for dashboards/v1
|
||||||
FlagDashboardDisableSchemaValidationV1 = "dashboardDisableSchemaValidationV1"
|
FlagDashboardDisableSchemaValidationV1 = "dashboardDisableSchemaValidationV1"
|
||||||
|
|
|
@ -2031,6 +2031,19 @@
|
||||||
"hideFromDocs": true
|
"hideFromDocs": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"metadata": {
|
||||||
|
"name": "kubernetesCorrelations",
|
||||||
|
"resourceVersion": "1757513374180",
|
||||||
|
"creationTimestamp": "2025-09-10T14:09:34Z"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "Adds support for Kubernetes correlations",
|
||||||
|
"stage": "experimental",
|
||||||
|
"codeowner": "@grafana/datapro",
|
||||||
|
"requiresRestart": true
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"name": "kubernetesDashboards",
|
"name": "kubernetesDashboards",
|
||||||
|
|
Loading…
Reference in New Issue