diff --git a/.tmp/agent.yaml b/.tmp/agent.yaml new file mode 100644 index 0000000000..e5c4103c56 --- /dev/null +++ b/.tmp/agent.yaml @@ -0,0 +1,20 @@ +server: + log_level: debug + http_listen_port: 12345 + +tempo: + receivers: + otlp: + protocols: + grpc: + endpoint: ":9096" + attributes: + actions: + - action: upsert + key: env + value: prod + push_config: + endpoint: tempo-us-central1.grafana.net:443 + basic_auth: + username: $(gopass show caos-secrets/technical/boom/grafana-cloud/tempo-user) + password: $(gopass show caos-secrets/technical/boom/grafana-cloud/tempo-password) diff --git a/.typo-ci.yml b/.typo-ci.yml index 87864246f5..0f9c20faf8 100644 --- a/.typo-ci.yml +++ b/.typo-ci.yml @@ -35,6 +35,8 @@ excluded_words: - typoci - idps - ZITADEL's + - otel + - otlp # Would you like filenames to also be spellchecked? spellcheck_filenames: false \ No newline at end of file diff --git a/cmd/zitadel/caos_local.sh b/cmd/zitadel/caos_local.sh index 01e712bb33..76ec5ae792 100755 --- a/cmd/zitadel/caos_local.sh +++ b/cmd/zitadel/caos_local.sh @@ -8,6 +8,7 @@ export GOOGLE_APPLICATION_CREDENTIALS="$BASEDIR/local_svc-account-tracing.json" export ZITADEL_TRACING_PROJECT_ID=zitadel-dev export ZITADEL_TRACING_FRACTION=0.1 +export ZITADEL_TRACING_ENDPOINT=localhost:9096 export ZITADEL_TRACING_TYPE=google # Log diff --git a/cmd/zitadel/startup.yaml b/cmd/zitadel/startup.yaml index 71fa66bb27..1d3fff247f 100644 --- a/cmd/zitadel/startup.yaml +++ b/cmd/zitadel/startup.yaml @@ -9,6 +9,7 @@ Tracing: ProjectID: $ZITADEL_TRACING_PROJECT_ID MetricPrefix: ZITADEL-V1 Fraction: $ZITADEL_TRACING_FRACTION + Endpoint: $ZITADEL_TRACING_ENDPOINT AuthZ: Repository: diff --git a/go.mod b/go.mod index b91978486e..64b2115dbe 100644 --- a/go.mod +++ b/go.mod @@ -3,23 +3,21 @@ module github.com/caos/zitadel go 1.15 require ( - cloud.google.com/go v0.70.0 // indirect - contrib.go.opencensus.io/exporter/stackdriver v0.13.4 + cloud.google.com/go v0.71.0 // indirect github.com/BurntSushi/toml v0.3.1 github.com/DATA-DOG/go-sqlmock v1.5.0 + github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v0.13.0 github.com/Masterminds/goutils v1.1.0 // indirect github.com/Masterminds/semver v1.5.0 // indirect github.com/Masterminds/sprig v2.22.0+incompatible github.com/VictoriaMetrics/fastcache v1.5.7 github.com/ajstarks/svgo v0.0.0-20200725142600-7a3c8b57fecb github.com/allegro/bigcache v1.2.1 - github.com/aws/aws-sdk-go v1.35.11 // indirect github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc github.com/caos/logging v0.0.2 github.com/caos/oidc v0.12.5 - github.com/census-instrumentation/opencensus-proto v0.3.0 // indirect github.com/cockroachdb/cockroach-go/v2 v2.0.8 - github.com/envoyproxy/protoc-gen-validate v0.4.1 + github.com/envoyproxy/protoc-gen-validate v0.1.0 github.com/ghodss/yaml v1.0.0 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b github.com/golang/mock v1.4.4 @@ -30,7 +28,7 @@ require ( github.com/gorilla/schema v1.2.0 github.com/gorilla/securecookie v1.1.1 github.com/grpc-ecosystem/go-grpc-middleware v1.2.2 - github.com/grpc-ecosystem/grpc-gateway v1.15.2 + github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/huandu/xstrings v1.3.2 // indirect github.com/imdario/mergo v0.3.11 // indirect github.com/inconshreveable/log15 v0.0.0-20200109203555-b30bc20e4fd1 // indirect @@ -52,17 +50,21 @@ require ( github.com/stretchr/testify v1.6.1 github.com/ttacon/builder v0.0.0-20170518171403-c099f663e1c2 // indirect github.com/ttacon/libphonenumber v1.1.0 - go.opencensus.io v0.22.5 + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.13.0 + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.13.0 + go.opentelemetry.io/otel v0.13.0 + go.opentelemetry.io/otel/exporters/otlp v0.13.0 + go.opentelemetry.io/otel/exporters/stdout v0.13.0 + go.opentelemetry.io/otel/sdk v0.13.0 golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897 - golang.org/x/net v0.0.0-20201021035429-f5854403a974 // indirect - golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9 // indirect - golang.org/x/sys v0.0.0-20201020230747-6e5568b54d1a // indirect + golang.org/x/net v0.0.0-20201031054903-ff519b6c9102 // indirect + golang.org/x/sys v0.0.0-20201101102859-da207088b7d1 // indirect golang.org/x/text v0.3.4 - golang.org/x/tools v0.0.0-20201021000207-d49c4edd7d96 + golang.org/x/tools v0.0.0-20201103235415-b653051172e4 google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154 + google.golang.org/genproto v0.0.0-20201103154000-415bd0cd5df6 google.golang.org/grpc v1.33.1 google.golang.org/protobuf v1.25.0 gopkg.in/square/go-jose.v2 v2.5.1 - gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c // indirect + gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 // indirect ) diff --git a/go.sum b/go.sum index 5b8985f097..79e6fe93d9 100644 --- a/go.sum +++ b/go.sum @@ -14,11 +14,12 @@ cloud.google.com/go v0.56.0 h1:WRz29PgAsVEyPSDHyk+0fpEkwEFyfhHn+JbksT6gIL4= cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= cloud.google.com/go v0.57.0 h1:EpMNVUorLiZIELdMZbCYX/ByTFCdoYopYAGxaGVz9ms= cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.61.0/go.mod h1:XukKJg4Y7QsUu0Hxg3qQKUWR4VuWivmyMK2+rUyxAqw= cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= cloud.google.com/go v0.65.0 h1:Dg9iHVQfrhq82rUNu9ZxUDrJLaxFUe/HlCVaLyRruq8= cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go v0.70.0 h1:ujhG1RejZYi+HYfJNlgBh3j/bVKD8DewM7AkJ5UPyBc= -cloud.google.com/go v0.70.0/go.mod h1:/UTKYRQTWjVnSe7nGvoSzxEFUELzSI/yAYd0JQT6cRo= +cloud.google.com/go v0.71.0 h1:2ha722Z08cmRa0orJrzBaszYQcLbLFcsZHsGSj/kIF4= +cloud.google.com/go v0.71.0/go.mod h1:qZfY4Y7AEIQwG/fQYD3xrxLNkQZ0Xzf3HGeqCkA6LVM= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= @@ -40,8 +41,6 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0 h1:STgFzyU5/8miMl0//zKh2aQeTyeaUH3WN9bSUiJ09bA= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -contrib.go.opencensus.io/exporter/stackdriver v0.13.4 h1:ksUxwH3OD5sxkjzEqGxNTl+Xjsmu3BnC/300MhSVTSc= -contrib.go.opencensus.io/exporter/stackdriver v0.13.4/go.mod h1:aXENhDJ1Y4lIg4EUaVTwzvYETVNZk10Pu26tevFKLUc= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9 h1:VpgP7xuJadIUuKccphEpTJnWhS2jkQyMt6Y7pJCD7fY= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= @@ -54,6 +53,10 @@ github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/DATA-DOG/go-sqlmock v1.5.0 h1:Shsta01QNfFxHCfpW6YH2STWB0MudeXXEWMr20OEh60= github.com/DATA-DOG/go-sqlmock v1.5.0/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= +github.com/DataDog/sketches-go v0.0.1 h1:RtG+76WKgZuz6FIaGsjoPePmadDBkuD/KC6+ZWu78b8= +github.com/DataDog/sketches-go v0.0.1/go.mod h1:Q5DbzQ+3AkgGwymQO7aZFNP7ns2lZKGtvRBzRXfdi60= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v0.13.0 h1:fjKUtfldCPIF4nIzAAj3LzP8Lrd3DuRIMiFdOsj4fLc= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v0.13.0/go.mod h1:q/paYxLXKVhwfC3lzLfhtL54fAx14wzMN9DundQOBMc= github.com/Masterminds/goutils v1.1.0 h1:zukEsf/1JZwCMgHiK3GZftabmxiCw4apj3a28RPBiVg= github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= @@ -73,10 +76,8 @@ github.com/andybalholm/cascadia v1.1.0 h1:BuuO6sSfQNFRu1LppgbD25Hr2vLYW25JvxHs5z github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y= github.com/antihax/optional v1.0.0 h1:xK2lYat7ZLaVVcIuj82J8kIro4V6kDe0AUDFboUCwcg= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/aws/aws-sdk-go v1.23.20/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.23.20/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.35.11 h1:LICFl2K+3Y5dMTW6PCV6ycK8fzIxs21HvDhI5A3Ee3Y= -github.com/aws/aws-sdk-go v1.35.11/go.mod h1:tlPOdRjfxPBpNIwqDj61rmsnA85v9jc0Ps9+muhnW+k= +github.com/benbjohnson/clock v1.0.3 h1:vkLuvpK4fmtSCuo60+yC63p7y0BmQ8gm5ZXGuBCJyXg= +github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc h1:biVzkmvwrH8WK8raXaxBx6fRVTlJILwEwQGL1I/ByEI= github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc h1:biVzkmvwrH8WK8raXaxBx6fRVTlJILwEwQGL1I/ByEI= github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= @@ -85,17 +86,11 @@ github.com/caos/logging v0.0.2 h1:ebg5C/HN0ludYR+WkvnFjwSExF4wvyiWPyWGcKMYsoo= github.com/caos/logging v0.0.2 h1:ebg5C/HN0ludYR+WkvnFjwSExF4wvyiWPyWGcKMYsoo= github.com/caos/logging v0.0.2/go.mod h1:9LKiDE2ChuGv6CHYif/kiugrfEXu9AwDiFWSreX7Wp0= github.com/caos/logging v0.0.2/go.mod h1:9LKiDE2ChuGv6CHYif/kiugrfEXu9AwDiFWSreX7Wp0= -github.com/caos/oidc v0.12.3 h1:bzUg5BdFwRK+Bi7vPHH0pZ3ni/0vMZTNtayRCFPbD4U= -github.com/caos/oidc v0.12.3/go.mod h1:R9UKITZmSo5vNhSLUYcTDH8pAaV2xwPASXg8wpEs2xQ= -github.com/caos/oidc v0.12.4 h1:E6E+LcnVQFHzOSN8GnTfJGgXWiDYtdKu/Xm2+YC/xFk= -github.com/caos/oidc v0.12.4/go.mod h1:dLvfYUiAt9ORfl77L/KkcWuR/N0ll8Ry1nD2ERsamDY= github.com/caos/oidc v0.12.5 h1:BN3iu6ZokOIbuoOkLRX/tAZPAfVoTXIkYflKmV156U8= github.com/caos/oidc v0.12.5/go.mod h1:dLvfYUiAt9ORfl77L/KkcWuR/N0ll8Ry1nD2ERsamDY= github.com/census-instrumentation/opencensus-proto v0.2.1 h1:glEXhBS5PSLLv4IXzLA5yPRVX4bilULVyxxbrfOtDAk= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/census-instrumentation/opencensus-proto v0.3.0 h1:t/LhUZLVitR1Ow2YOnduCsavhwFUklBMoGVYUCqmCqk= -github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chzyer/logex v1.1.10 h1:Swpa1K6QvQznwJRcfTfQJmTE72DqScAa40E+fbHEXEE= @@ -130,8 +125,6 @@ github.com/envoyproxy/go-control-plane v0.9.4 h1:rEvIZUSZ3fx39WIi3JkQqQBitGwpELB github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0 h1:EQciDnbrYxy13PgWoY8AqoxGiPrpgBZ1R8UNe3ddc+A= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/envoyproxy/protoc-gen-validate v0.4.1 h1:7dLaJvASGRD7X49jSCSXXHwKPm0ZN9r9kJD+p+vS7dM= -github.com/envoyproxy/protoc-gen-validate v0.4.1/go.mod h1:E+IEazqdaWv3FrnGtZIu3b9fPFMK8AzeTTrk9SfVwWs= github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5 h1:Yzb9+7DPaBjB8zlTR87/ElzFsnQfuHnVUVqpZZIcV5Y= github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod h1:a2zkGnVExMxdzMo3M0Hi/3sEU+cWnZpSni0O6/Yb/P0= github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ= @@ -160,6 +153,8 @@ github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRx github.com/gogo/protobuf v1.2.1 h1:/s5zKNz0uPFCZ5hddgPdo2TK2TVrUNMn0OOX8/aZMTE= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= +github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY= github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= @@ -219,10 +214,13 @@ github.com/google/go-github/v31 v31.0.0 h1:JJUxlP9lFK+ziXKimTCprajMApV1ecWD4NB6C github.com/google/go-github/v31 v31.0.0/go.mod h1:NQPZol8/1sMoWYGN2yaALIBytu17gAWfhbweiEed3pM= github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= +github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g= +github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0 h1:pMen7vLs8nvgEYhywH3KDWJIJTeEr2ULsVWHWYHQyBs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= @@ -231,7 +229,7 @@ github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99 h1:Ak8CrdlwwXwAZxzS66vgPt4U8yUZX7JwLvVR58FN5jM= github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20201009210932-67992a1a5a35/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0 h1:GOZbcHa3HfsPKPlmyPyN2KEohoMXOhdMbHrvbpl2QaA= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= @@ -240,6 +238,8 @@ github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+ github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/googleinterns/cloud-operations-api-mock v0.0.0-20200709193332-a1e58c29bdd3 h1:eHv/jVY/JNop1xg2J9cBb4EzyMpWZoNCP1BslSAIkOI= +github.com/googleinterns/cloud-operations-api-mock v0.0.0-20200709193332-a1e58c29bdd3/go.mod h1:h/KNeRx7oYU4SpA4SoY7W2/NxDKEEVuwA6j9A27L4OI= github.com/gorilla/csrf v1.7.0 h1:mMPjV5/3Zd460xCavIkppUdvnl5fPXMpv2uz2Zyg7/Y= github.com/gorilla/csrf v1.7.0/go.mod h1:+a/4tCmqhG6/w4oafeAZ9pEa3/NZOWYVbD9fV0FwIQA= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= @@ -254,15 +254,13 @@ github.com/gorilla/securecookie v1.1.1 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyC github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= github.com/grpc-ecosystem/go-grpc-middleware v1.2.2 h1:FlFbCRLd5Jr4iYXZufAvgWN6Ao0JrI5chLINnUXDDr0= github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= -github.com/grpc-ecosystem/grpc-gateway v1.15.2 h1:HC+hWRWf+v5zTMPyoaYTKIJih+4sd4XRWmj0qlG87Co= -github.com/grpc-ecosystem/grpc-gateway v1.15.2/go.mod h1:vO11I9oWA+KsxmfFQPhLnnIb1VDE24M+pdxZFiuZcA8= +github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/huandu/xstrings v1.3.2 h1:L18LIDzqlW6xN2rEkpdV8+oL/IXWJ1APd+vsdYy4Wdw= github.com/huandu/xstrings v1.3.2/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= -github.com/iancoleman/strcase v0.0.0-20180726023541-3605ed457bf7 h1:ux/56T2xqZO/3cP1I2F86qpeoYPCOzk+KF/UH/Ar+lk= -github.com/iancoleman/strcase v0.0.0-20180726023541-3605ed457bf7/go.mod h1:SK73tn/9oHe+/Y0h39VT4UCxmurVJkR5NA7kMEAOgSE= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6 h1:UDMh68UUwekSh5iP2OMhRRZJiiBccgV7axzUG8vi56c= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= @@ -320,12 +318,6 @@ github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= github.com/jinzhu/now v1.0.1 h1:HjfetcXq097iXP0uoPCdnM4Efp5/9MsM0/M+XOTeR3M= github.com/jinzhu/now v1.0.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= -github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM= -github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= -github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= -github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= -github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/jmoiron/sqlx v1.2.0 h1:41Ip0zITnmWNR/vHV+S4m+VoUivnWY5E4OJfLZjCJMA= github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= @@ -341,13 +333,12 @@ github.com/kevinburke/twilio-go v0.0.0-20200810163702-320748330fac h1:qQ7NAZEHpT github.com/kevinburke/twilio-go v0.0.0-20200810163702-320748330fac/go.mod h1:Fm9alkN1/LPVY1eqD/psyMwPWE4VWl4P01/nTYZKzBk= github.com/kisielk/errcheck v1.1.0 h1:ZqfnKyx9KGpRcW04j5nnPDgRgoXUeLh2YFBeFzphcA0= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2 h1:DB17ag19krx9CFsz4o3enTrPXyIXCl+2iCXH/aMAp9s= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= -github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= @@ -364,8 +355,6 @@ github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.4.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.8.0 h1:9xohqzkUwzR4Ga4ivdTcawVS89YSDVxXMa3xJX3cGzg= github.com/lib/pq v1.8.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/lyft/protoc-gen-star v0.5.1 h1:sImehRT+p7lW9n6R7MQc5hVgzWGEkDVZU4AsBQ4Isu8= -github.com/lyft/protoc-gen-star v0.5.1/go.mod h1:9toiA3cC7z5uVbODF7kEQ91Xn7XNFkVUl+SrEe+ZORU= github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8= @@ -396,8 +385,6 @@ github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFSt github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/sftp v1.10.1 h1:VasscCm72135zRysgrJDKsntdmPN+OuU3+nnHYA9wyc= -github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pquerna/otp v1.2.0 h1:/A3+Jn+cagqayeR3iHs/L62m5ue7710D35zl1zJ1kok= @@ -430,9 +417,6 @@ github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sony/sonyflake v1.0.0 h1:MpU6Ro7tfXwgn2l5eluf9xQvQJDROTBImNCfRXn/YeM= github.com/sony/sonyflake v1.0.0/go.mod h1:Jv3cfhf/UFtolOTTRd3q4Nl6ENqM+KfyZ5PseKfZGF4= -github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= -github.com/spf13/afero v1.3.4 h1:8q6vk3hthlpb2SouZcnBVKboxWQWMDNF38bwholZrJc= -github.com/spf13/afero v1.3.4/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1 h1:2vfRuCMp5sSVIDSqO8oNnWJq7mPa6KVP3iPIwFBuy8A= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -466,6 +450,20 @@ go.opencensus.io v0.22.4 h1:LYy1Hy3MJdrCdMwwzxA/dRok4ejH+RwNGbuoD9fCjto= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5 h1:dntmOdLpSpHlVqbW5Eay97DelsZHe+55D+xC6i0dDS0= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +go.opentelemetry.io/contrib v0.13.0 h1:q34CFu5REx9Dt2ksESHC/doIjFJkEg1oV3aSwlL5JR0= +go.opentelemetry.io/contrib v0.13.0/go.mod h1:HzCu6ebm0ywgNxGaEfs3izyJOMP4rZnzxycyTgpI5Sg= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.13.0 h1:Ys1lnE8Y6rv3aKc9Ha13n7UM4pMHC0kvLSFtNx+gUfY= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.13.0/go.mod h1:ffigAFAlfY9AfFwJocEw88qbbvjAKfvqZg5tLyZv0l0= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.13.0 h1:dnZy1afzxEDrHybTYoJE1bQ3fphNwZF2ipSsynlITP4= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.13.0/go.mod h1:SeQm4RTCcZ2/hlMSTuHb7nwIROe5odBtgfKx+7MMqEs= +go.opentelemetry.io/otel v0.13.0 h1:2isEnyzjjJZq6r2EKMsFj4TxiQiexsM04AVhwbR/oBA= +go.opentelemetry.io/otel v0.13.0/go.mod h1:dlSNewoRYikTkotEnxdmuBHgzT+k/idJSfDv/FxEnOY= +go.opentelemetry.io/otel/exporters/otlp v0.13.0 h1:iithmYmMAfLFgCW5TcRXHpXR5NTWO7nGtX3WcBiusVE= +go.opentelemetry.io/otel/exporters/otlp v0.13.0/go.mod h1:YHH58UrGcqCKtBkY7sl3zPKpxBzfC1HUUYMRQONJJ9E= +go.opentelemetry.io/otel/exporters/stdout v0.13.0 h1:A+XiGIPQbGoJoBOJfKAKnZyiUSjSWvL3XWETUvtom5k= +go.opentelemetry.io/otel/exporters/stdout v0.13.0/go.mod h1:JJt8RpNY6K+ft9ir3iKpceCvT/rhzJXEExGrWFCbv1o= +go.opentelemetry.io/otel/sdk v0.13.0 h1:4VCfpKamZ8GtnepXxMRurSpHpMKkcxhtO33z1S4rGDQ= +go.opentelemetry.io/otel/sdk v0.13.0/go.mod h1:dKvLH8Uu8LcEPlSAUsfW7kMGaJBhk/1NYvpPZ6wIMbU= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0 h1:cxzIVoETapQEqDhQu3QfnvXAV4AlzcvUCxkVUFw3+EU= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= @@ -542,7 +540,6 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -558,6 +555,7 @@ golang.org/x/net v0.0.0-20200506145744-7e3656a0809f h1:QBjCr1Fz5kw158VqdE9JfI9cJ golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200625001655-4c5254603344 h1:vGXIOMxbNfDTk/aXCmfdLgkrSV+Z2tcbze+pEc3v5W4= golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU= @@ -566,9 +564,10 @@ golang.org/x/net v0.0.0-20200822124328-c89045814202 h1:VvcQYSHwXgi7W+TpUR6A9g6Up golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200904194848-62affa334b73 h1:MXfv8rhZWmFeqX3GNZRsd6vOLoaCHjYEX3qkRo3YBUA= golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201021035429-f5854403a974 h1:IX6qOQeG5uLjB/hjjwjedwfjND0hgjPMMyO1RoIXQNI= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201026091529-146b70c837a4/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201031054903-ff519b6c9102 h1:42cLlJJdEh+ySyeUUbEQ5bsTiq8voBeTuweGVkY6Puw= +golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -633,8 +632,8 @@ golang.org/x/sys v0.0.0-20200803210538-64077c9b5642 h1:B6caxRw+hozq68X2MY7jEpZh/ golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201020230747-6e5568b54d1a h1:e3IU37lwO4aq3uoRKINC7JikojFmE5gO7xhfxs8VC34= -golang.org/x/sys v0.0.0-20201020230747-6e5568b54d1a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201101102859-da207088b7d1 h1:a/mKvvZr9Jcc8oKfcmgzyp7OwF73JPWsQLvH1z2Kxck= +golang.org/x/sys v0.0.0-20201101102859-da207088b7d1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -650,6 +649,7 @@ golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqG golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= @@ -666,7 +666,6 @@ golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgw golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190823170909-c4a336ef6a2f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191010075000-0337d82405ff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -691,16 +690,17 @@ golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWc golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200522201501-cb1345f3a375/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200701151220-7cb253f4c4f8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200713011307-fd294ab11aed/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d h1:W07d4xkoAUSNOkOzdzXCdFGxT7o2rW4q8M34tB2i//k= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20201017001424-6003fad69a88/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= -golang.org/x/tools v0.0.0-20201021000207-d49c4edd7d96 h1:K+nJoPcImWk+ZGPHOKkDocKcQPACCz8usiCiVQYfXsk= -golang.org/x/tools v0.0.0-20201021000207-d49c4edd7d96/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= +golang.org/x/tools v0.0.0-20201030143252-cf7a54d06671/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201103235415-b653051172e4 h1:Qe0EMgvVYb6tmJhJHljCj3gS96hvSTkGNaIzp/ivq10= +golang.org/x/tools v0.0.0-20201103235415-b653051172e4/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -713,7 +713,6 @@ google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEt google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.10.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= @@ -732,13 +731,12 @@ google.golang.org/api v0.29.0 h1:BaiDisFir8O4IJxvAabCGGkQ6yCJegNQqSVoYUNAnbk= google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= google.golang.org/api v0.30.0 h1:yfrXXP61wVuLb0vBcG6qaOoIoqYEzOQS8jum51jkv2w= google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/api v0.33.0 h1:+gL0XvACeMIvpwLZ5rQZzLn5cwOsgg8dIcfJ2SYfBVw= -google.golang.org/api v0.33.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= +google.golang.org/api v0.34.0 h1:k40adF3uR+6x/+hO5Dh4ZFUqFp67vxvbpafFiJxl10A= +google.golang.org/api v0.34.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.2/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5 h1:tycE03LOZYQNhDpS27tcQdAzLCVMaj7QT2SXxebnpCM= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6 h1:lMO5rYAqUxkmaj76jAkRUvt5JZgFymx/+Q5Mzfivuhc= @@ -774,19 +772,22 @@ google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 h1:+kGHl1aib/qcwaRi1CbqBZ1rk19r85MNUf8HaBghugY= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200605102947-12044bf5ea91/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200711021454-869866162049/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200715011427-11fb19a81f2c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987 h1:PDIOdWxZ8eRizhKa1AAvY53xsvLB1cWorMjslvY3VA8= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154 h1:bFFRpT+e8JJVY7lMMfvezL1ZIwqiwmPl2bsE2yx4HqM= -google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201030142918-24207fddd1c3/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201103154000-415bd0cd5df6 h1:rMoZiLTOobSD3eg30lPMcFkBFNSyKUQQIQlw/hsAXME= +google.golang.org/genproto v0.0.0-20201103154000-415bd0cd5df6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= @@ -821,6 +822,7 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b h1:QRR6H1YWRnHb4Y/HeNFCTJLFVxaq6wH4YuVdsUOr75U= gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0 h1:0vLT13EuvQ0hNvakwLuFZ/jYrLp5F3kcWHXdRggjCE8= @@ -833,13 +835,12 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.7 h1:VUgggvou5XRW9mHwD/yXxIYSMtY0zoKQf/v226p2nyo= gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c h1:grhR+C34yXImVGp7EzNk+DTIk+323eIUWOmEevy6bDo= -gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 h1:tQIYjPdBoyREyB9XMu+nnTclpTYkz2zFM+lzLJFO4gQ= +gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/internal/admin/repository/eventsourcing/eventstore/iam.go b/internal/admin/repository/eventsourcing/eventstore/iam.go index f0fd571de8..5fcc5f936e 100644 --- a/internal/admin/repository/eventsourcing/eventstore/iam.go +++ b/internal/admin/repository/eventsourcing/eventstore/iam.go @@ -10,13 +10,13 @@ import ( "github.com/caos/zitadel/internal/config/systemdefaults" es_models "github.com/caos/zitadel/internal/eventstore/models" es_sdk "github.com/caos/zitadel/internal/eventstore/sdk" - iam_es_model "github.com/caos/zitadel/internal/iam/repository/view/model" - org_es "github.com/caos/zitadel/internal/org/repository/eventsourcing" - usr_model "github.com/caos/zitadel/internal/user/model" - usr_es "github.com/caos/zitadel/internal/user/repository/eventsourcing" - iam_model "github.com/caos/zitadel/internal/iam/model" iam_es "github.com/caos/zitadel/internal/iam/repository/eventsourcing" + iam_es_model "github.com/caos/zitadel/internal/iam/repository/view/model" + org_es "github.com/caos/zitadel/internal/org/repository/eventsourcing" + "github.com/caos/zitadel/internal/tracing" + usr_model "github.com/caos/zitadel/internal/user/model" + usr_es "github.com/caos/zitadel/internal/user/repository/eventsourcing" ) type IAMRepository struct { @@ -55,7 +55,7 @@ func (repo *IAMRepository) RemoveIAMMember(ctx context.Context, userID string) e func (repo *IAMRepository) SearchIAMMembers(ctx context.Context, request *iam_model.IAMMemberSearchRequest) (*iam_model.IAMMemberSearchResponse, error) { request.EnsureLimit(repo.SearchLimit) sequence, err := repo.View.GetLatestIAMMemberSequence() - logging.Log("EVENT-Slkci").OnError(err).Warn("could not read latest iam sequence") + logging.Log("EVENT-Slkci").OnError(err).WithField("traceID", tracing.TraceIDFromCtx(ctx)).Warn("could not read latest iam sequence") members, count, err := repo.View.SearchIAMMembers(request) if err != nil { return nil, err @@ -157,7 +157,7 @@ func (repo *IAMRepository) ChangeOidcIDPConfig(ctx context.Context, oidcConfig * func (repo *IAMRepository) SearchIDPConfigs(ctx context.Context, request *iam_model.IDPConfigSearchRequest) (*iam_model.IDPConfigSearchResponse, error) { request.EnsureLimit(repo.SearchLimit) sequence, err := repo.View.GetLatestIDPConfigSequence() - logging.Log("EVENT-Dk8si").OnError(err).Warn("could not read latest idp config sequence") + logging.Log("EVENT-Dk8si").OnError(err).WithField("traceID", tracing.TraceIDFromCtx(ctx)).Warn("could not read latest idp config sequence") idps, count, err := repo.View.SearchIDPConfigs(request) if err != nil { return nil, err @@ -249,7 +249,7 @@ func (repo *IAMRepository) SearchDefaultIDPProviders(ctx context.Context, reques request.EnsureLimit(repo.SearchLimit) request.AppendAggregateIDQuery(repo.SystemDefaults.IamID) sequence, err := repo.View.GetLatestIDPProviderSequence() - logging.Log("EVENT-Tuiks").OnError(err).Warn("could not read latest iam sequence") + logging.Log("EVENT-Tuiks").OnError(err).WithField("traceID", tracing.TraceIDFromCtx(ctx)).Warn("could not read latest iam sequence") providers, count, err := repo.View.SearchIDPProviders(request) if err != nil { return nil, err diff --git a/internal/admin/repository/eventsourcing/eventstore/org.go b/internal/admin/repository/eventsourcing/eventstore/org.go index a7d23cb368..b0c706b4c6 100644 --- a/internal/admin/repository/eventsourcing/eventstore/org.go +++ b/internal/admin/repository/eventsourcing/eventstore/org.go @@ -2,9 +2,11 @@ package eventstore import ( "context" + "github.com/caos/zitadel/internal/errors" iam_model "github.com/caos/zitadel/internal/iam/model" iam_view "github.com/caos/zitadel/internal/iam/repository/view/model" + "github.com/caos/zitadel/internal/tracing" "github.com/caos/logging" admin_model "github.com/caos/zitadel/internal/admin/model" @@ -86,7 +88,7 @@ func (repo *OrgRepo) OrgByID(ctx context.Context, id string) (*org_model.Org, er func (repo *OrgRepo) SearchOrgs(ctx context.Context, query *org_model.OrgSearchRequest) (*org_model.OrgSearchResult, error) { query.EnsureLimit(repo.SearchLimit) sequence, err := repo.View.GetLatestOrgSequence() - logging.Log("EVENT-LXo9w").OnError(err).Warn("could not read latest iam sequence") + logging.Log("EVENT-LXo9w").OnError(err).WithField("traceID", tracing.TraceIDFromCtx(ctx)).Warn("could not read latest iam sequence") orgs, count, err := repo.View.SearchOrgs(query) if err != nil { return nil, err diff --git a/internal/api/api.go b/internal/api/api.go index 715d54d83f..1f1e798455 100644 --- a/internal/api/api.go +++ b/internal/api/api.go @@ -16,6 +16,7 @@ import ( "github.com/caos/zitadel/internal/config/systemdefaults" "github.com/caos/zitadel/internal/errors" iam_model "github.com/caos/zitadel/internal/iam/model" + "github.com/caos/zitadel/internal/tracing" ) type Config struct { @@ -96,7 +97,7 @@ func (a *API) healthHandler() http.Handler { func handleHealth(w http.ResponseWriter, r *http.Request) { _, err := w.Write([]byte("ok")) - logging.Log("API-Hfss2").OnError(err).Error("error writing ok for health") + logging.Log("API-Hfss2").OnError(err).WithField("traceID", tracing.TraceIDFromCtx(r.Context())).Error("error writing ok for health") } func handleReadiness(checks []ValidationFunction) func(w http.ResponseWriter, r *http.Request) { @@ -124,7 +125,7 @@ type ValidationFunction func(ctx context.Context) error func validate(ctx context.Context, validations []ValidationFunction) error { for _, validation := range validations { if err := validation(ctx); err != nil { - logging.Log("API-vf823").WithError(err).Error("validation failed") + logging.Log("API-vf823").WithError(err).WithField("traceID", tracing.TraceIDFromCtx(ctx)).Error("validation failed") return err } } diff --git a/internal/api/grpc/auth/user_converter.go b/internal/api/grpc/auth/user_converter.go index e5c585e8eb..376904b7d8 100644 --- a/internal/api/grpc/auth/user_converter.go +++ b/internal/api/grpc/auth/user_converter.go @@ -3,6 +3,7 @@ package auth import ( "context" "encoding/json" + "github.com/caos/logging" "github.com/golang/protobuf/ptypes" "golang.org/x/text/language" @@ -11,6 +12,7 @@ import ( "github.com/caos/zitadel/internal/api/authz" "github.com/caos/zitadel/internal/eventstore/models" + "github.com/caos/zitadel/internal/tracing" usr_model "github.com/caos/zitadel/internal/user/model" "github.com/caos/zitadel/pkg/grpc/auth" "github.com/caos/zitadel/pkg/grpc/message" @@ -96,7 +98,7 @@ func profileViewFromModel(profile *usr_model.Profile) *auth.UserProfileView { func updateProfileToModel(ctx context.Context, u *auth.UpdateUserProfileRequest) *usr_model.Profile { preferredLanguage, err := language.Parse(u.PreferredLanguage) - logging.Log("GRPC-lk73L").OnError(err).Debug("language malformed") + logging.Log("GRPC-lk73L").OnError(err).WithField("traceID", tracing.TraceIDFromCtx(ctx)).Debug("language malformed") return &usr_model.Profile{ ObjectRoot: models.ObjectRoot{AggregateID: authz.GetCtxData(ctx).UserID}, diff --git a/internal/api/grpc/client/middleware/tacing_test.go b/internal/api/grpc/client/middleware/tacing_test.go deleted file mode 100644 index 81cc5a6cae..0000000000 --- a/internal/api/grpc/client/middleware/tacing_test.go +++ /dev/null @@ -1,68 +0,0 @@ -package middleware - -import ( - "context" - "testing" - - "go.opencensus.io/plugin/ocgrpc" - "go.opencensus.io/trace" - "google.golang.org/grpc/stats" -) - -func Test_tracingClientHandler_TagRPC(t *testing.T) { - type fields struct { - IgnoredMethods []GRPCMethod - ClientHandler ocgrpc.ClientHandler - } - type args struct { - ctx context.Context - tagInfo *stats.RPCTagInfo - } - tests := []struct { - name string - fields fields - args args - wantSpan bool - }{ - { - "ignored method", - fields{ - IgnoredMethods: []GRPCMethod{"ignore"}, - ClientHandler: ocgrpc.ClientHandler{}, - }, - args{ - ctx: context.Background(), - tagInfo: &stats.RPCTagInfo{ - FullMethodName: "ignore", - }, - }, - false, - }, - { - "tag", - fields{ - IgnoredMethods: []GRPCMethod{"ignore"}, - ClientHandler: ocgrpc.ClientHandler{}, - }, - args{ - ctx: context.Background(), - tagInfo: &stats.RPCTagInfo{ - FullMethodName: "tag", - }, - }, - true, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - s := &tracingClientHandler{ - IgnoredMethods: tt.fields.IgnoredMethods, - ClientHandler: tt.fields.ClientHandler, - } - got := s.TagRPC(tt.args.ctx, tt.args.tagInfo) - if (trace.FromContext(got) != nil) != tt.wantSpan { - t.Errorf("TagRPC() = %v, want %v", got, tt.wantSpan) - } - }) - } -} diff --git a/internal/api/grpc/client/middleware/tracing.go b/internal/api/grpc/client/middleware/tracing.go index e4e93b0e50..0f5f471ee2 100644 --- a/internal/api/grpc/client/middleware/tracing.go +++ b/internal/api/grpc/client/middleware/tracing.go @@ -4,44 +4,32 @@ import ( "context" "strings" - "go.opencensus.io/plugin/ocgrpc" - "go.opencensus.io/trace" - "google.golang.org/grpc" - "google.golang.org/grpc/stats" - grpc_utils "github.com/caos/zitadel/internal/api/grpc" - "github.com/caos/zitadel/internal/tracing" + grpc_trace "go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc" + "google.golang.org/grpc" ) type GRPCMethod string -func TracingStatsClient(ignoredMethods ...GRPCMethod) grpc.DialOption { - return grpc.WithStatsHandler( - &tracingClientHandler{ - ignoredMethods, - ocgrpc.ClientHandler{ - StartOptions: trace.StartOptions{ - Sampler: tracing.Sampler(), - SpanKind: trace.SpanKindClient}, - }, - }, - ) +func DefaultTracingClient() grpc.UnaryClientInterceptor { + return TracingServer(grpc_utils.Healthz, grpc_utils.Readiness, grpc_utils.Validation) } -func DefaultTracingStatsClient() grpc.DialOption { - return TracingStatsClient(grpc_utils.Healthz, grpc_utils.Readiness, grpc_utils.Validation) -} +func TracingServer(ignoredMethods ...GRPCMethod) grpc.UnaryClientInterceptor { + return func( + ctx context.Context, + method string, + req, reply interface{}, + cc *grpc.ClientConn, + invoker grpc.UnaryInvoker, + opts ...grpc.CallOption, + ) error { -type tracingClientHandler struct { - IgnoredMethods []GRPCMethod - ocgrpc.ClientHandler -} - -func (s *tracingClientHandler) TagRPC(ctx context.Context, tagInfo *stats.RPCTagInfo) context.Context { - for _, method := range s.IgnoredMethods { - if strings.HasSuffix(tagInfo.FullMethodName, string(method)) { - return ctx + for _, ignoredMethod := range ignoredMethods { + if strings.HasSuffix(method, string(ignoredMethod)) { + return invoker(ctx, method, req, reply, cc, opts...) + } } + return grpc_trace.UnaryClientInterceptor()(ctx, method, req, reply, cc, invoker, opts...) } - return s.ClientHandler.TagRPC(ctx, tagInfo) } diff --git a/internal/api/grpc/errors/caos_errors.go b/internal/api/grpc/errors/caos_errors.go index 53fd4367a9..d1337f656e 100644 --- a/internal/api/grpc/errors/caos_errors.go +++ b/internal/api/grpc/errors/caos_errors.go @@ -2,6 +2,7 @@ package errors import ( "context" + "github.com/caos/logging" caos_errs "github.com/caos/zitadel/internal/errors" "github.com/caos/zitadel/pkg/grpc/message" diff --git a/internal/api/grpc/server/gateway.go b/internal/api/grpc/server/gateway.go index bf8083fba2..1833e905ff 100644 --- a/internal/api/grpc/server/gateway.go +++ b/internal/api/grpc/server/gateway.go @@ -14,6 +14,7 @@ import ( client_middleware "github.com/caos/zitadel/internal/api/grpc/client/middleware" http_util "github.com/caos/zitadel/internal/api/http" http_mw "github.com/caos/zitadel/internal/api/http/middleware" + "github.com/caos/zitadel/internal/tracing" ) const ( @@ -103,7 +104,7 @@ func createGateway(ctx context.Context, g Gateway, port string, customHeaders .. mux := createMux(g, customHeaders...) opts := createDialOptions(g) err := g.RegisterGateway()(ctx, mux, http_util.Endpoint(port), opts) - logging.Log("SERVE-7B7G0E").OnError(err).Panic("failed to register grpc gateway") + logging.Log("SERVE-7B7G0E").OnError(err).WithField("traceID", tracing.TraceIDFromCtx(ctx)).Panic("failed to register grpc gateway") return addInterceptors(mux, g) } @@ -116,8 +117,10 @@ func createMux(g Gateway, customHeaders ...string) *runtime.ServeMux { } func createDialOptions(g Gateway) []grpc.DialOption { - opts := []grpc.DialOption{grpc.WithInsecure()} - opts = append(opts, client_middleware.DefaultTracingStatsClient()) + opts := []grpc.DialOption{ + grpc.WithInsecure(), + grpc.WithUnaryInterceptor(client_middleware.DefaultTracingClient()), + } if customOpts, ok := g.(gatewayCustomCallOptions); ok { opts = append(opts, customOpts.GatewayCallOptions()...) diff --git a/internal/api/grpc/server/middleware/auth_interceptor.go b/internal/api/grpc/server/middleware/auth_interceptor.go index 48494b25bc..e46f661098 100644 --- a/internal/api/grpc/server/middleware/auth_interceptor.go +++ b/internal/api/grpc/server/middleware/auth_interceptor.go @@ -20,15 +20,14 @@ func AuthorizationInterceptor(verifier *authz.TokenVerifier, authConfig authz.Co } func authorize(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler, verifier *authz.TokenVerifier, authConfig authz.Config) (_ interface{}, err error) { - ctx, span := tracing.NewServerInterceptorSpan(ctx) - defer func() { span.EndWithError(err) }() - authOpt, needsToken := verifier.CheckAuthMethod(info.FullMethod) if !needsToken { - span.End() return handler(ctx, req) } + ctx, span := tracing.NewServerInterceptorSpan(ctx) + defer func() { span.EndWithError(err) }() + authToken := grpc_util.GetAuthorizationHeader(ctx) if authToken == "" { return nil, status.Error(codes.Unauthenticated, "auth header missing") diff --git a/internal/api/grpc/server/middleware/tracing.go b/internal/api/grpc/server/middleware/tracing.go index f27f1b1940..b8c6a6909a 100644 --- a/internal/api/grpc/server/middleware/tracing.go +++ b/internal/api/grpc/server/middleware/tracing.go @@ -4,45 +4,30 @@ import ( "context" "strings" - "go.opencensus.io/plugin/ocgrpc" - "go.opencensus.io/trace" - "google.golang.org/grpc" - "google.golang.org/grpc/stats" - grpc_utils "github.com/caos/zitadel/internal/api/grpc" - "github.com/caos/zitadel/internal/tracing" + grpc_trace "go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc" + "google.golang.org/grpc" ) type GRPCMethod string -func TracingStatsServer(ignoredMethods ...GRPCMethod) grpc.ServerOption { - return grpc.StatsHandler( - &tracingServerHandler{ - ignoredMethods, - ocgrpc.ServerHandler{ - StartOptions: trace.StartOptions{ - Sampler: tracing.Sampler(), - SpanKind: trace.SpanKindServer, - }, - }, - }, - ) +func DefaultTracingServer() grpc.UnaryServerInterceptor { + return TracingServer(grpc_utils.Healthz, grpc_utils.Readiness, grpc_utils.Validation) } -func DefaultTracingStatsServer() grpc.ServerOption { - return TracingStatsServer(grpc_utils.Healthz, grpc_utils.Readiness, grpc_utils.Validation) -} +func TracingServer(ignoredMethods ...GRPCMethod) grpc.UnaryServerInterceptor { + return func( + ctx context.Context, + req interface{}, + info *grpc.UnaryServerInfo, + handler grpc.UnaryHandler, + ) (interface{}, error) { -type tracingServerHandler struct { - IgnoredMethods []GRPCMethod - ocgrpc.ServerHandler -} - -func (s *tracingServerHandler) TagRPC(ctx context.Context, tagInfo *stats.RPCTagInfo) context.Context { - for _, method := range s.IgnoredMethods { - if strings.HasSuffix(tagInfo.FullMethodName, string(method)) { - return ctx + for _, ignoredMethod := range ignoredMethods { + if strings.HasSuffix(info.FullMethod, string(ignoredMethod)) { + return handler(ctx, req) + } } + return grpc_trace.UnaryServerInterceptor()(ctx, req, info, handler) } - return s.ServerHandler.TagRPC(ctx, tagInfo) } diff --git a/internal/api/grpc/server/middleware/tracing_test.go b/internal/api/grpc/server/middleware/tracing_test.go deleted file mode 100644 index 1dd9f1c21a..0000000000 --- a/internal/api/grpc/server/middleware/tracing_test.go +++ /dev/null @@ -1,71 +0,0 @@ -package middleware - -import ( - "context" - "testing" - - "go.opencensus.io/plugin/ocgrpc" - "go.opencensus.io/trace" - "google.golang.org/grpc/stats" -) - -func Test_tracingServerHandler_TagRPC(t *testing.T) { - type fields struct { - IgnoredMethods []GRPCMethod - ServerHandler ocgrpc.ServerHandler - } - type args struct { - ctx context.Context - tagInfo *stats.RPCTagInfo - } - type res struct { - wantSpan bool - } - tests := []struct { - name string - fields fields - args args - res res - }{ - { - "ignored method", - fields{ - IgnoredMethods: []GRPCMethod{"ignore"}, - ServerHandler: ocgrpc.ServerHandler{}, - }, - args{ - ctx: context.Background(), - tagInfo: &stats.RPCTagInfo{ - FullMethodName: "ignore", - }, - }, - res{false}, - }, - { - "tag", - fields{ - IgnoredMethods: []GRPCMethod{"ignore"}, - ServerHandler: ocgrpc.ServerHandler{}, - }, - args{ - ctx: context.Background(), - tagInfo: &stats.RPCTagInfo{ - FullMethodName: "tag", - }, - }, - res{true}, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - s := &tracingServerHandler{ - IgnoredMethods: tt.fields.IgnoredMethods, - ServerHandler: tt.fields.ServerHandler, - } - got := s.TagRPC(tt.args.ctx, tt.args.tagInfo) - if (trace.FromContext(got) != nil) != tt.res.wantSpan { - t.Errorf("TagRPC() = %v, want %v", got, tt.res.wantSpan) - } - }) - } -} diff --git a/internal/api/grpc/server/probes.go b/internal/api/grpc/server/probes.go index 98cab4f56b..434c07a1bf 100644 --- a/internal/api/grpc/server/probes.go +++ b/internal/api/grpc/server/probes.go @@ -9,6 +9,7 @@ import ( "github.com/caos/zitadel/internal/errors" "github.com/caos/zitadel/internal/proto" + "github.com/caos/zitadel/internal/tracing" ) type ValidationFunction func(ctx context.Context) error @@ -41,7 +42,7 @@ func validate(ctx context.Context, validations map[string]ValidationFunction) ma errors := make(map[string]error) for id, validation := range validations { if err := validation(ctx); err != nil { - logging.Log("API-vf823").WithError(err).Error("validation failed") + logging.Log("API-vf823").WithError(err).WithField("traceID", tracing.TraceIDFromCtx(ctx)).Error("validation failed") errors[id] = err } } diff --git a/internal/api/grpc/server/server.go b/internal/api/grpc/server/server.go index acb6165c2d..57a100247a 100644 --- a/internal/api/grpc/server/server.go +++ b/internal/api/grpc/server/server.go @@ -11,6 +11,7 @@ import ( "github.com/caos/zitadel/internal/api/authz" "github.com/caos/zitadel/internal/api/grpc/server/middleware" "github.com/caos/zitadel/internal/api/http" + "github.com/caos/zitadel/internal/tracing" ) const ( @@ -27,9 +28,9 @@ type Server interface { func CreateServer(verifier *authz.TokenVerifier, authConfig authz.Config, lang language.Tag) *grpc.Server { return grpc.NewServer( - middleware.DefaultTracingStatsServer(), grpc.UnaryInterceptor( grpc_middleware.ChainUnaryServer( + middleware.DefaultTracingServer(), middleware.ErrorHandler(), middleware.AuthorizationInterceptor(verifier, authConfig), middleware.TranslationHandler(lang), @@ -49,9 +50,9 @@ func Serve(ctx context.Context, server *grpc.Server, port string) { go func() { listener := http.CreateListener(port) err := server.Serve(listener) - logging.Log("SERVE-Ga3e94").OnError(err).Panic("grpc server serve failed") + logging.Log("SERVE-Ga3e94").OnError(err).WithField("traceID", tracing.TraceIDFromCtx(ctx)).Panic("grpc server serve failed") }() - logging.LogWithFields("SERVE-bZ44QM", "port", port).Info("grpc server is listening") + logging.LogWithFields("SERVE-bZ44QM", "port", port).WithField("traceID", tracing.TraceIDFromCtx(ctx)).Info("grpc server is listening") } func grpcPort(port string) string { diff --git a/internal/api/http/middleware/trace_interceptor.go b/internal/api/http/middleware/trace_interceptor.go index 9107589778..af800c95ff 100644 --- a/internal/api/http/middleware/trace_interceptor.go +++ b/internal/api/http/middleware/trace_interceptor.go @@ -8,7 +8,7 @@ import ( ) func DefaultTraceHandler(handler http.Handler) http.Handler { - return tracing.TraceHandler(handler, http_utils.Probes...) + return TraceHandler(http_utils.Probes...)(handler) } func TraceHandler(ignoredMethods ...string) func(http.Handler) http.Handler { diff --git a/internal/api/http/server.go b/internal/api/http/server.go index 758eb704dc..f663b2acd0 100644 --- a/internal/api/http/server.go +++ b/internal/api/http/server.go @@ -5,6 +5,7 @@ import ( "net/http" "github.com/caos/logging" + "github.com/caos/zitadel/internal/tracing" ) func Serve(ctx context.Context, handler http.Handler, port, servername string) { @@ -17,14 +18,14 @@ func Serve(ctx context.Context, handler http.Handler, port, servername string) { go func() { <-ctx.Done() err := server.Shutdown(ctx) - logging.LogWithFields("HTTP-m7kBlq", "name", servername).OnError(err).Warnf("error during graceful shutdown of http server (%s)", servername) + logging.LogWithFields("HTTP-m7kBlq", "name", servername).WithField("traceID", tracing.TraceIDFromCtx(ctx)).OnError(err).Warnf("error during graceful shutdown of http server (%s)", servername) }() go func() { err := server.Serve(listener) - logging.LogWithFields("HTTP-tBHR60", "name", servername).OnError(err).Panicf("http serve (%s) failed", servername) + logging.LogWithFields("HTTP-tBHR60", "name", servername).OnError(err).WithField("traceID", tracing.TraceIDFromCtx(ctx)).Panicf("http serve (%s) failed", servername) }() - logging.LogWithFields("HTTP-KHh0Cb", "name", servername, "port", port).Infof("http server (%s) is listening", servername) + logging.LogWithFields("HTTP-KHh0Cb", "name", servername, "port", port).WithField("traceID", tracing.TraceIDFromCtx(ctx)).Infof("http server (%s) is listening", servername) } func RegisterHandler(mux *http.ServeMux, prefix string, handler http.Handler) { diff --git a/internal/api/oidc/op.go b/internal/api/oidc/op.go index 6417b7c7cf..d3ba142264 100644 --- a/internal/api/oidc/op.go +++ b/internal/api/oidc/op.go @@ -12,6 +12,7 @@ import ( "github.com/caos/zitadel/internal/auth/repository" "github.com/caos/zitadel/internal/config/types" "github.com/caos/zitadel/internal/id" + "github.com/caos/zitadel/internal/tracing" ) type OPHandlerConfig struct { @@ -52,7 +53,7 @@ type OPStorage struct { func NewProvider(ctx context.Context, config OPHandlerConfig, repo repository.Repository, localDevMode bool) op.OpenIDProvider { cookieHandler, err := middleware.NewUserAgentHandler(config.UserAgentCookieConfig, id.SonyFlakeGenerator, localDevMode) - logging.Log("OIDC-sd4fd").OnError(err).Panic("cannot user agent handler") + logging.Log("OIDC-sd4fd").OnError(err).WithField("traceID", tracing.TraceIDFromCtx(ctx)).Panic("cannot user agent handler") config.OPConfig.CodeMethodS256 = true provider, err := op.NewOpenIDProvider( ctx, @@ -71,7 +72,7 @@ func NewProvider(ctx context.Context, config OPHandlerConfig, repo repository.Re op.WithCustomKeysEndpoint(op.NewEndpointWithURL(config.Endpoints.Keys.Path, config.Endpoints.Keys.URL)), op.WithRetry(3, time.Duration(30*time.Second)), ) - logging.Log("OIDC-asf13").OnError(err).Panic("cannot create provider") + logging.Log("OIDC-asf13").OnError(err).WithField("traceID", tracing.TraceIDFromCtx(ctx)).Panic("cannot create provider") return provider } diff --git a/internal/auth/repository/eventsourcing/eventstore/auth_request.go b/internal/auth/repository/eventsourcing/eventstore/auth_request.go index b753e27bd3..2cf4ea1d2b 100644 --- a/internal/auth/repository/eventsourcing/eventstore/auth_request.go +++ b/internal/auth/repository/eventsourcing/eventstore/auth_request.go @@ -112,7 +112,7 @@ func (repo *AuthRequestRepo) CreateAuthRequest(ctx context.Context, request *mod request.AppendAudIfNotExisting(app.ProjectID) if request.LoginHint != "" { err = repo.checkLoginName(ctx, request, request.LoginHint) - logging.LogWithFields("EVENT-aG311", "login name", request.LoginHint, "id", request.ID, "applicationID", request.ApplicationID).OnError(err).Debug("login hint invalid") + logging.LogWithFields("EVENT-aG311", "login name", request.LoginHint, "id", request.ID, "applicationID", request.ApplicationID, "traceID", tracing.TraceIDFromCtx(ctx)).OnError(err).Debug("login hint invalid") } err = repo.AuthRequests.SaveAuthRequest(ctx, request) if err != nil { @@ -723,7 +723,7 @@ func userSessionByIDs(ctx context.Context, provider userSessionViewProvider, eve } events, err := eventProvider.UserEventsByID(ctx, user.ID, session.Sequence) if err != nil { - logging.Log("EVENT-Hse6s").WithError(err).Debug("error retrieving new events") + logging.Log("EVENT-Hse6s").WithError(err).WithField("traceID", tracing.TraceIDFromCtx(ctx)).Debug("error retrieving new events") return user_view_model.UserSessionToModel(session), nil } sessionCopy := *session @@ -744,7 +744,7 @@ func userSessionByIDs(ctx context.Context, provider userSessionViewProvider, eve es_model.HumanSignedOut: eventData, err := user_view_model.UserSessionFromEvent(event) if err != nil { - logging.Log("EVENT-sdgT3").WithError(err).Debug("error getting event data") + logging.Log("EVENT-sdgT3").WithError(err).WithField("traceID", tracing.TraceIDFromCtx(ctx)).Debug("error getting event data") return user_view_model.UserSessionToModel(session), nil } if eventData.UserAgentID != agentID { @@ -793,7 +793,7 @@ func userByID(ctx context.Context, viewProvider userViewProvider, eventProvider } events, err := eventProvider.UserEventsByID(ctx, userID, user.Sequence) if err != nil { - logging.Log("EVENT-dfg42").WithError(err).Debug("error retrieving new events") + logging.Log("EVENT-dfg42").WithError(err).WithField("traceID", tracing.TraceIDFromCtx(ctx)).Debug("error retrieving new events") return user_view_model.UserToModel(user), nil } if len(events) == 0 { diff --git a/internal/auth/repository/eventsourcing/eventstore/auth_request_test.go b/internal/auth/repository/eventsourcing/eventstore/auth_request_test.go index 020db064f0..827c2f71b3 100644 --- a/internal/auth/repository/eventsourcing/eventstore/auth_request_test.go +++ b/internal/auth/repository/eventsourcing/eventstore/auth_request_test.go @@ -3,11 +3,12 @@ package eventstore import ( "context" "encoding/json" - iam_model "github.com/caos/zitadel/internal/iam/model" - iam_view_model "github.com/caos/zitadel/internal/iam/repository/view/model" "testing" "time" + iam_model "github.com/caos/zitadel/internal/iam/model" + iam_view_model "github.com/caos/zitadel/internal/iam/repository/view/model" + "github.com/stretchr/testify/assert" "github.com/caos/zitadel/internal/auth/repository/eventsourcing/view" @@ -1296,7 +1297,6 @@ func Test_userSessionByIDs(t *testing.T) { func Test_userByID(t *testing.T) { type args struct { - ctx context.Context viewProvider userViewProvider eventProvider userEventProvider userID string @@ -1394,7 +1394,7 @@ func Test_userByID(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - got, err := userByID(tt.args.ctx, tt.args.viewProvider, tt.args.eventProvider, tt.args.userID) + got, err := userByID(context.Background(), tt.args.viewProvider, tt.args.eventProvider, tt.args.userID) if (err != nil && tt.wantErr == nil) || (tt.wantErr != nil && !tt.wantErr(err)) { t.Errorf("nextSteps() wrong error = %v", err) return diff --git a/internal/auth/repository/eventsourcing/eventstore/org.go b/internal/auth/repository/eventsourcing/eventstore/org.go index 05f06889fc..f521a00a77 100644 --- a/internal/auth/repository/eventsourcing/eventstore/org.go +++ b/internal/auth/repository/eventsourcing/eventstore/org.go @@ -2,12 +2,14 @@ package eventstore import ( "context" + "github.com/caos/logging" "github.com/caos/zitadel/internal/api/authz" "github.com/caos/zitadel/internal/config/systemdefaults" "github.com/caos/zitadel/internal/errors" iam_model "github.com/caos/zitadel/internal/iam/model" iam_view_model "github.com/caos/zitadel/internal/iam/repository/view/model" + "github.com/caos/zitadel/internal/tracing" auth_model "github.com/caos/zitadel/internal/auth/model" auth_view "github.com/caos/zitadel/internal/auth/repository/eventsourcing/view" @@ -35,7 +37,7 @@ type OrgRepository struct { func (repo *OrgRepository) SearchOrgs(ctx context.Context, request *org_model.OrgSearchRequest) (*org_model.OrgSearchResult, error) { request.EnsureLimit(repo.SearchLimit) sequence, err := repo.View.GetLatestOrgSequence() - logging.Log("EVENT-7Udhz").OnError(err).Warn("could not read latest org sequence") + logging.Log("EVENT-7Udhz").OnError(err).WithField("traceID", tracing.TraceIDFromCtx(ctx)).Warn("could not read latest org sequence") members, count, err := repo.View.SearchOrgs(request) if err != nil { return nil, err diff --git a/internal/auth/repository/eventsourcing/eventstore/token.go b/internal/auth/repository/eventsourcing/eventstore/token.go index 358da84a7c..0d7d378bc8 100644 --- a/internal/auth/repository/eventsourcing/eventstore/token.go +++ b/internal/auth/repository/eventsourcing/eventstore/token.go @@ -2,17 +2,18 @@ package eventstore import ( "context" - "github.com/caos/logging" - auth_req_model "github.com/caos/zitadel/internal/auth_request/model" - "github.com/caos/zitadel/internal/errors" - "github.com/caos/zitadel/internal/eventstore/models" - usr_model "github.com/caos/zitadel/internal/user/model" - user_event "github.com/caos/zitadel/internal/user/repository/eventsourcing" - "github.com/caos/zitadel/internal/user/repository/view/model" "strings" "time" + "github.com/caos/logging" "github.com/caos/zitadel/internal/auth/repository/eventsourcing/view" + auth_req_model "github.com/caos/zitadel/internal/auth_request/model" + "github.com/caos/zitadel/internal/errors" + "github.com/caos/zitadel/internal/eventstore/models" + "github.com/caos/zitadel/internal/tracing" + usr_model "github.com/caos/zitadel/internal/user/model" + user_event "github.com/caos/zitadel/internal/user/repository/eventsourcing" + "github.com/caos/zitadel/internal/user/repository/view/model" ) type TokenRepo struct { @@ -76,7 +77,7 @@ func (repo *TokenRepo) TokenByID(ctx context.Context, userID, tokenID string) (* } if esErr != nil { - logging.Log("EVENT-5Nm9s").WithError(viewErr).Debug("error retrieving new events") + logging.Log("EVENT-5Nm9s").WithError(viewErr).WithField("traceID", tracing.TraceIDFromCtx(ctx)).Debug("error retrieving new events") return model.TokenViewToModel(token), nil } viewToken := *token diff --git a/internal/auth/repository/eventsourcing/eventstore/user.go b/internal/auth/repository/eventsourcing/eventstore/user.go index fa116e2436..9541625986 100644 --- a/internal/auth/repository/eventsourcing/eventstore/user.go +++ b/internal/auth/repository/eventsourcing/eventstore/user.go @@ -110,7 +110,7 @@ func (repo *UserRepo) ChangeMyProfile(ctx context.Context, profile *model.Profil func (repo *UserRepo) SearchMyExternalIDPs(ctx context.Context, request *model.ExternalIDPSearchRequest) (*model.ExternalIDPSearchResponse, error) { request.EnsureLimit(repo.SearchLimit) sequence, seqErr := repo.View.GetLatestExternalIDPSequence() - logging.Log("EVENT-5Jsi8").OnError(seqErr).Warn("could not read latest user sequence") + logging.Log("EVENT-5Jsi8").OnError(seqErr).WithField("traceID", tracing.TraceIDFromCtx(ctx)).Warn("could not read latest user sequence") request.AppendUserQuery(authz.GetCtxData(ctx).UserID) externalIDPS, count, err := repo.View.SearchExternalIDPs(request) if err != nil { @@ -268,7 +268,7 @@ func (repo *UserRepo) AddMfaOTP(ctx context.Context, userID string) (*model.OTP, accountName := "" user, err := repo.UserByID(ctx, userID) if err != nil { - logging.Log("EVENT-Fk93s").WithError(err).Debug("unable to get user for loginname") + logging.Log("EVENT-Fk93s").WithError(err).WithField("traceID", tracing.TraceIDFromCtx(ctx)).Debug("unable to get user for loginname") } else { accountName = user.PreferredLoginName } @@ -279,7 +279,7 @@ func (repo *UserRepo) AddMyMfaOTP(ctx context.Context) (*model.OTP, error) { accountName := "" user, err := repo.UserByID(ctx, authz.GetCtxData(ctx).UserID) if err != nil { - logging.Log("EVENT-Ml0sd").WithError(err).Debug("unable to get user for loginname") + logging.Log("EVENT-Ml0sd").WithError(err).WithField("traceID", tracing.TraceIDFromCtx(ctx)).Debug("unable to get user for loginname") } else { accountName = user.PreferredLoginName } @@ -370,7 +370,7 @@ func (repo *UserRepo) UserByID(ctx context.Context, id string) (*model.UserView, } events, err := repo.UserEvents.UserEventsByID(ctx, id, user.Sequence) if err != nil { - logging.Log("EVENT-PSoc3").WithError(err).Debug("error retrieving new events") + logging.Log("EVENT-PSoc3").WithError(err).WithField("traceID", tracing.TraceIDFromCtx(ctx)).Debug("error retrieving new events") return usr_view_model.UserToModel(user), nil } userCopy := *user diff --git a/internal/auth/repository/eventsourcing/eventstore/user_grant.go b/internal/auth/repository/eventsourcing/eventstore/user_grant.go index 24ca9874a1..038d0f0a53 100644 --- a/internal/auth/repository/eventsourcing/eventstore/user_grant.go +++ b/internal/auth/repository/eventsourcing/eventstore/user_grant.go @@ -12,6 +12,7 @@ import ( global_model "github.com/caos/zitadel/internal/model" org_model "github.com/caos/zitadel/internal/org/model" org_view_model "github.com/caos/zitadel/internal/org/repository/view/model" + "github.com/caos/zitadel/internal/tracing" user_model "github.com/caos/zitadel/internal/user/model" user_view_model "github.com/caos/zitadel/internal/user/repository/view/model" grant_model "github.com/caos/zitadel/internal/usergrant/model" @@ -29,7 +30,7 @@ type UserGrantRepo struct { func (repo *UserGrantRepo) SearchMyUserGrants(ctx context.Context, request *grant_model.UserGrantSearchRequest) (*grant_model.UserGrantSearchResponse, error) { request.EnsureLimit(repo.SearchLimit) sequence, err := repo.View.GetLatestUserGrantSequence() - logging.Log("EVENT-Hd7s3").OnError(err).Warn("could not read latest user grant sequence") + logging.Log("EVENT-Hd7s3").OnError(err).WithField("traceID", tracing.TraceIDFromCtx(ctx)).Warn("could not read latest user grant sequence") request.Queries = append(request.Queries, &grant_model.UserGrantSearchQuery{Key: grant_model.UserGrantSearchKeyUserID, Method: global_model.SearchMethodEquals, Value: authz.GetCtxData(ctx).UserID}) grants, count, err := repo.View.SearchUserGrants(request) if err != nil { diff --git a/internal/authz/repository/eventsourcing/eventstore/token_verifier.go b/internal/authz/repository/eventsourcing/eventstore/token_verifier.go index 11bc5663d9..04b6966a97 100644 --- a/internal/authz/repository/eventsourcing/eventstore/token_verifier.go +++ b/internal/authz/repository/eventsourcing/eventstore/token_verifier.go @@ -2,12 +2,13 @@ package eventstore import ( "context" + "strings" + "time" + "github.com/caos/logging" usr_model "github.com/caos/zitadel/internal/user/model" usr_event "github.com/caos/zitadel/internal/user/repository/eventsourcing" "github.com/caos/zitadel/internal/user/repository/view/model" - "strings" - "time" "github.com/caos/zitadel/internal/authz/repository/eventsourcing/view" "github.com/caos/zitadel/internal/crypto" @@ -43,7 +44,7 @@ func (repo *TokenVerifierRepo) TokenByID(ctx context.Context, tokenID, userID st } if esErr != nil { - logging.Log("EVENT-5Nm9s").WithError(viewErr).Debug("error retrieving new events") + logging.Log("EVENT-5Nm9s").WithError(viewErr).WithField("traceID", tracing.TraceIDFromCtx(ctx)).Debug("error retrieving new events") return model.TokenViewToModel(token), nil } viewToken := *token diff --git a/internal/eventstore/internal/repository/sql/filter.go b/internal/eventstore/internal/repository/sql/filter.go index 4b71ed4ee0..0b393f885f 100644 --- a/internal/eventstore/internal/repository/sql/filter.go +++ b/internal/eventstore/internal/repository/sql/filter.go @@ -8,6 +8,7 @@ import ( "github.com/caos/zitadel/internal/errors" "github.com/caos/zitadel/internal/eventstore/models" es_models "github.com/caos/zitadel/internal/eventstore/models" + "github.com/caos/zitadel/internal/tracing" ) type Querier interface { @@ -55,7 +56,7 @@ func (db *SQL) LatestSequence(ctx context.Context, queryFactory *es_models.Searc sequence := new(Sequence) err := rowScanner(row.Scan, sequence) if err != nil { - logging.Log("SQL-WsxTg").WithError(err).Info("query failed") + logging.Log("SQL-WsxTg").WithError(err).WithField("traceID", tracing.TraceIDFromCtx(ctx)).Info("query failed") return 0, errors.ThrowInternal(err, "SQL-Yczyx", "unable to filter latest sequence") } return uint64(*sequence), nil diff --git a/internal/eventstore/internal/repository/sql/push.go b/internal/eventstore/internal/repository/sql/push.go index 2795a5c89f..b6af36cce0 100644 --- a/internal/eventstore/internal/repository/sql/push.go +++ b/internal/eventstore/internal/repository/sql/push.go @@ -8,6 +8,7 @@ import ( "github.com/caos/logging" caos_errs "github.com/caos/zitadel/internal/errors" "github.com/caos/zitadel/internal/eventstore/models" + "github.com/caos/zitadel/internal/tracing" "github.com/cockroachdb/cockroach-go/v2/crdb" ) @@ -25,7 +26,7 @@ func (db *SQL) PushAggregates(ctx context.Context, aggregates ...*models.Aggrega stmt, err := tx.Prepare(insertStmt) if err != nil { tx.Rollback() - logging.Log("SQL-9ctx5").WithError(err).Warn("prepare failed") + logging.Log("SQL-9ctx5").WithError(err).WithField("traceID", tracing.TraceIDFromCtx(ctx)).Warn("prepare failed") return caos_errs.ThrowInternal(err, "SQL-juCgA", "prepare failed") } diff --git a/internal/eventstore/spooler/spooler.go b/internal/eventstore/spooler/spooler.go index ec3b5109df..d670d7cfdd 100644 --- a/internal/eventstore/spooler/spooler.go +++ b/internal/eventstore/spooler/spooler.go @@ -9,6 +9,7 @@ import ( "github.com/caos/zitadel/internal/eventstore" "github.com/caos/zitadel/internal/eventstore/models" "github.com/caos/zitadel/internal/eventstore/query" + "github.com/caos/zitadel/internal/tracing" "github.com/caos/zitadel/internal/view/repository" "time" @@ -74,7 +75,7 @@ func (s *spooledHandler) load(workerID string) { errs <- err } else { errs <- s.process(ctx, events, workerID) - logging.Log("SPOOL-0pV8o").WithField("view", s.ViewModel()).WithField("worker", workerID).Debug("process done") + logging.Log("SPOOL-0pV8o").WithField("view", s.ViewModel()).WithField("worker", workerID).WithField("traceID", tracing.TraceIDFromCtx(ctx)).Debug("process done") } } <-ctx.Done() @@ -92,7 +93,7 @@ func (s *spooledHandler) process(ctx context.Context, events []*models.Event, wo for _, event := range events { select { case <-ctx.Done(): - logging.LogWithFields("SPOOL-FTKwH", "view", s.ViewModel(), "worker", workerID).Debug("context canceled") + logging.LogWithFields("SPOOL-FTKwH", "view", s.ViewModel(), "worker", workerID, "traceID", tracing.TraceIDFromCtx(ctx)).Debug("context canceled") return nil default: if err := s.Reduce(event); err != nil { @@ -110,7 +111,7 @@ func (s *spooledHandler) query(ctx context.Context) ([]*models.Event, error) { } factory := models.FactoryFromSearchQuery(query) sequence, err := s.eventstore.LatestSequence(ctx, factory) - logging.Log("SPOOL-7SciK").OnError(err).Debug("unable to query latest sequence") + logging.Log("SPOOL-7SciK").OnError(err).WithField("traceID", tracing.TraceIDFromCtx(ctx)).Debug("unable to query latest sequence") var processedSequence uint64 for _, filter := range query.Filters { if filter.GetField() == models.Field_LatestSequence { diff --git a/internal/management/repository/eventsourcing/eventstore/org.go b/internal/management/repository/eventsourcing/eventstore/org.go index c6c7ab224e..ffb6335a28 100644 --- a/internal/management/repository/eventsourcing/eventstore/org.go +++ b/internal/management/repository/eventsourcing/eventstore/org.go @@ -22,6 +22,7 @@ import ( org_es "github.com/caos/zitadel/internal/org/repository/eventsourcing" org_es_model "github.com/caos/zitadel/internal/org/repository/eventsourcing/model" "github.com/caos/zitadel/internal/org/repository/view/model" + "github.com/caos/zitadel/internal/tracing" usr_model "github.com/caos/zitadel/internal/user/model" usr_es "github.com/caos/zitadel/internal/user/repository/eventsourcing" ) @@ -108,7 +109,7 @@ func (repo *OrgRepository) SearchMyOrgDomains(ctx context.Context, request *org_ request.EnsureLimit(repo.SearchLimit) request.Queries = append(request.Queries, &org_model.OrgDomainSearchQuery{Key: org_model.OrgDomainSearchKeyOrgID, Method: global_model.SearchMethodEquals, Value: authz.GetCtxData(ctx).OrgID}) sequence, sequenceErr := repo.View.GetLatestOrgDomainSequence() - logging.Log("EVENT-SLowp").OnError(sequenceErr).Warn("could not read latest org domain sequence") + logging.Log("EVENT-SLowp").OnError(sequenceErr).WithField("traceID", tracing.TraceIDFromCtx(ctx)).Warn("could not read latest org domain sequence") domains, count, err := repo.View.SearchOrgDomains(request) if err != nil { return nil, err diff --git a/internal/tracing/config/config.go b/internal/tracing/config/config.go index 0f25feea6f..977f8f9057 100644 --- a/internal/tracing/config/config.go +++ b/internal/tracing/config/config.go @@ -5,8 +5,9 @@ import ( "github.com/caos/zitadel/internal/errors" "github.com/caos/zitadel/internal/tracing" - tracing_g "github.com/caos/zitadel/internal/tracing/google" - tracing_log "github.com/caos/zitadel/internal/tracing/log" + "github.com/caos/zitadel/internal/tracing/google" + "github.com/caos/zitadel/internal/tracing/log" + "github.com/caos/zitadel/internal/tracing/otel" ) type TracingConfig struct { @@ -15,8 +16,9 @@ type TracingConfig struct { } var tracer = map[string]func() tracing.Config{ - "google": func() tracing.Config { return &tracing_g.Config{} }, - "log": func() tracing.Config { return &tracing_log.Config{} }, + "otel": func() tracing.Config { return &otel.Config{} }, + "google": func() tracing.Config { return &google.Config{} }, + "log": func() tracing.Config { return &log.Config{} }, "none": func() tracing.Config { return &NoTracing{} }, "": func() tracing.Config { return &NoTracing{} }, } diff --git a/internal/tracing/generate.go b/internal/tracing/generate.go deleted file mode 100644 index 21b97622cb..0000000000 --- a/internal/tracing/generate.go +++ /dev/null @@ -1,3 +0,0 @@ -package tracing - -//go:generate mockgen -package mock -destination mock/tracing_mock.go github.com/caos/zitadel/internal/tracing Tracer diff --git a/internal/tracing/google/config.go b/internal/tracing/google/config.go deleted file mode 100644 index 64ee3223ba..0000000000 --- a/internal/tracing/google/config.go +++ /dev/null @@ -1,24 +0,0 @@ -package google - -import ( - "go.opencensus.io/trace" - - "github.com/caos/zitadel/internal/errors" - "github.com/caos/zitadel/internal/tracing" -) - -type Config struct { - ProjectID string - MetricPrefix string - Fraction float64 -} - -func (c *Config) NewTracer() error { - if !envIsSet() { - return errors.ThrowInvalidArgument(nil, "GOOGL-sdh3a", "env not properly set, GOOGLE_APPLICATION_CREDENTIALS is misconfigured or missing") - } - - tracing.T = &Tracer{projectID: c.ProjectID, metricPrefix: c.MetricPrefix, sampler: trace.ProbabilitySampler(c.Fraction)} - - return tracing.T.Start() -} diff --git a/internal/tracing/google/google_tracer.go b/internal/tracing/google/google_tracer.go new file mode 100644 index 0000000000..ba57958730 --- /dev/null +++ b/internal/tracing/google/google_tracer.go @@ -0,0 +1,43 @@ +package google + +import ( + "os" + "strings" + + texporter "github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace" + "github.com/caos/zitadel/internal/errors" + "github.com/caos/zitadel/internal/tracing" + "github.com/caos/zitadel/internal/tracing/otel" + sdk_trace "go.opentelemetry.io/otel/sdk/trace" +) + +type Config struct { + ProjectID string + MetricPrefix string + Fraction float64 +} + +type Tracer struct { + otel.Tracer +} + +func (c *Config) NewTracer() error { + if !envIsSet() { + return errors.ThrowInvalidArgument(nil, "GOOGL-sdh3a", "env not properly set, GOOGLE_APPLICATION_CREDENTIALS is misconfigured or missing") + } + + sampler := sdk_trace.ParentBased(sdk_trace.TraceIDRatioBased(c.Fraction)) + exporter, err := texporter.NewExporter(texporter.WithProjectID(c.ProjectID)) + if err != nil { + return err + } + + tracing.T = &Tracer{Tracer: *(otel.NewTracer(c.MetricPrefix, sampler, exporter))} + + return nil +} + +func envIsSet() bool { + gAuthCred := os.Getenv("GOOGLE_APPLICATION_CREDENTIALS") + return strings.Contains(gAuthCred, ".json") +} diff --git a/internal/tracing/google/googletracing.go b/internal/tracing/google/googletracing.go deleted file mode 100644 index 3958592d00..0000000000 --- a/internal/tracing/google/googletracing.go +++ /dev/null @@ -1,95 +0,0 @@ -package google - -import ( - "context" - "net/http" - "os" - "strings" - - "contrib.go.opencensus.io/exporter/stackdriver" - "go.opencensus.io/plugin/ocgrpc" - "go.opencensus.io/plugin/ochttp" - "go.opencensus.io/stats/view" - "go.opencensus.io/trace" - - "github.com/caos/zitadel/internal/errors" - "github.com/caos/zitadel/internal/tracing" -) - -type Tracer struct { - Exporter *stackdriver.Exporter - projectID string - metricPrefix string - sampler trace.Sampler -} - -func (t *Tracer) Start() (err error) { - t.Exporter, err = stackdriver.NewExporter(stackdriver.Options{ - ProjectID: t.projectID, - MetricPrefix: t.metricPrefix, - }) - if err != nil { - return errors.ThrowInternal(err, "GOOGL-4dCnX", "unable to start exporter") - } - - views := append(ocgrpc.DefaultServerViews, ocgrpc.DefaultClientViews...) - views = append(views, ochttp.DefaultClientViews...) - views = append(views, ochttp.DefaultServerViews...) - - if err = view.Register(views...); err != nil { - return errors.ThrowInternal(err, "GOOGL-Q6L6w", "unable to register view") - } - - trace.RegisterExporter(t.Exporter) - trace.ApplyConfig(trace.Config{DefaultSampler: t.sampler}) - - return nil -} - -func (t *Tracer) Sampler() trace.Sampler { - return t.sampler -} - -func (t *Tracer) NewServerInterceptorSpan(ctx context.Context, name string) (context.Context, *tracing.Span) { - return t.newSpanFromName(ctx, name, trace.WithSpanKind(trace.SpanKindServer)) -} - -func (t *Tracer) NewServerSpan(ctx context.Context, caller string) (context.Context, *tracing.Span) { - return t.newSpan(ctx, caller, trace.WithSpanKind(trace.SpanKindServer)) -} - -func (t *Tracer) NewClientInterceptorSpan(ctx context.Context, name string) (context.Context, *tracing.Span) { - return t.newSpanFromName(ctx, name, trace.WithSpanKind(trace.SpanKindClient)) -} - -func (t *Tracer) NewClientSpan(ctx context.Context, caller string) (context.Context, *tracing.Span) { - return t.newSpan(ctx, caller, trace.WithSpanKind(trace.SpanKindClient)) -} - -func (t *Tracer) NewSpan(ctx context.Context, caller string) (context.Context, *tracing.Span) { - return t.newSpan(ctx, caller) -} - -func (t *Tracer) newSpan(ctx context.Context, caller string, options ...trace.StartOption) (context.Context, *tracing.Span) { - return t.newSpanFromName(ctx, caller, options...) -} - -func (t *Tracer) newSpanFromName(ctx context.Context, name string, options ...trace.StartOption) (context.Context, *tracing.Span) { - ctx, span := trace.StartSpan(ctx, name, options...) - return ctx, tracing.CreateSpan(span) -} - -func (t *Tracer) NewSpanHTTP(r *http.Request, caller string) (*http.Request, *tracing.Span) { - ctx, span := t.NewSpan(r.Context(), caller) - r = r.WithContext(ctx) - return r, span -} - -func envIsSet() bool { - gAuthCred := os.Getenv("GOOGLE_APPLICATION_CREDENTIALS") - return strings.Contains(gAuthCred, ".json") -} - -func (t *Tracer) SetErrStatus(span *trace.Span, code int32, err error, obj ...string) { - span.SetStatus(trace.Status{Code: code, Message: err.Error() + strings.Join(obj, ", ")}) -} diff --git a/internal/tracing/http_handler.go b/internal/tracing/http_handler.go index 969f5efbf2..38c9664a70 100644 --- a/internal/tracing/http_handler.go +++ b/internal/tracing/http_handler.go @@ -4,29 +4,28 @@ import ( "net/http" "strings" - "go.opencensus.io/plugin/ochttp" - "go.opencensus.io/trace" + http_trace "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" ) -func TraceHandler(handler http.Handler, ignoredEndpoints ...string) http.Handler { - return &ochttp.Handler{ - Handler: handler, - FormatSpanName: func(r *http.Request) string { - host := r.URL.Host - if host == "" { - host = r.Host +func shouldNotIgnore(endpoints ...string) func(r *http.Request) bool { + return func(r *http.Request) bool { + for _, endpoint := range endpoints { + if strings.HasPrefix(r.URL.RequestURI(), endpoint) { + return false } - return host + r.URL.Path - }, - - StartOptions: trace.StartOptions{Sampler: Sampler()}, - IsHealthEndpoint: func(r *http.Request) bool { - for _, endpoint := range ignoredEndpoints { - if strings.HasPrefix(r.URL.RequestURI(), endpoint) { - return true - } - } - return false - }, + } + return true } } + +func TraceHandler(handler http.Handler, ignoredEndpoints ...string) http.Handler { + return http_trace.NewHandler(handler, + "zitadel", + http_trace.WithFilter(shouldNotIgnore(ignoredEndpoints...)), + http_trace.WithPublicEndpoint(), + http_trace.WithSpanNameFormatter(spanNameFormatter)) +} + +func spanNameFormatter(_ string, r *http.Request) string { + return r.Host + r.URL.EscapedPath() +} diff --git a/internal/tracing/log/config.go b/internal/tracing/log/config.go index be2d9bec7a..c903a46f14 100644 --- a/internal/tracing/log/config.go +++ b/internal/tracing/log/config.go @@ -1,21 +1,28 @@ package log import ( - "go.opencensus.io/trace" - "github.com/caos/zitadel/internal/tracing" + "github.com/caos/zitadel/internal/tracing/otel" + "go.opentelemetry.io/otel/exporters/stdout" + sdk_trace "go.opentelemetry.io/otel/sdk/trace" ) type Config struct { - Fraction float64 + Fraction float64 + MetricPrefix string +} + +type Tracer struct { + otel.Tracer } func (c *Config) NewTracer() error { - if c.Fraction < 1 { - c.Fraction = 1 + sampler := sdk_trace.ParentBased(sdk_trace.TraceIDRatioBased(c.Fraction)) + exporter, err := stdout.NewExporter(stdout.WithPrettyPrint()) + if err != nil { + return err } - tracing.T = &Tracer{trace.ProbabilitySampler(c.Fraction)} - - return tracing.T.Start() + tracing.T = &Tracer{Tracer: *(otel.NewTracer(c.MetricPrefix, sampler, exporter))} + return nil } diff --git a/internal/tracing/log/logTracing.go b/internal/tracing/log/logTracing.go deleted file mode 100644 index ce34c68fce..0000000000 --- a/internal/tracing/log/logTracing.go +++ /dev/null @@ -1,74 +0,0 @@ -package log - -import ( - "context" - "net/http" - - "go.opencensus.io/examples/exporter" - "go.opencensus.io/plugin/ocgrpc" - "go.opencensus.io/plugin/ochttp" - "go.opencensus.io/stats/view" - "go.opencensus.io/trace" - - "github.com/caos/zitadel/internal/errors" - "github.com/caos/zitadel/internal/tracing" -) - -type Tracer struct { - sampler trace.Sampler -} - -func (t *Tracer) Start() error { - trace.RegisterExporter(&exporter.PrintExporter{}) - - views := append(ocgrpc.DefaultServerViews, ocgrpc.DefaultClientViews...) - views = append(views, ochttp.DefaultClientViews...) - views = append(views, ochttp.DefaultServerViews...) - - if err := view.Register(views...); err != nil { - return errors.ThrowInternal(err, "LOG-PoFiB", "unable to register view") - } - - trace.ApplyConfig(trace.Config{DefaultSampler: t.sampler}) - - return nil -} - -func (t *Tracer) Sampler() trace.Sampler { - return t.sampler -} - -func (t *Tracer) NewServerInterceptorSpan(ctx context.Context, name string) (context.Context, *tracing.Span) { - return t.newSpanFromName(ctx, name, trace.WithSpanKind(trace.SpanKindServer)) -} - -func (t *Tracer) NewServerSpan(ctx context.Context, caller string) (context.Context, *tracing.Span) { - return t.newSpan(ctx, caller, trace.WithSpanKind(trace.SpanKindServer)) -} - -func (t *Tracer) NewClientInterceptorSpan(ctx context.Context, name string) (context.Context, *tracing.Span) { - return t.newSpanFromName(ctx, name, trace.WithSpanKind(trace.SpanKindClient)) -} - -func (t *Tracer) NewClientSpan(ctx context.Context, caller string) (context.Context, *tracing.Span) { - return t.newSpan(ctx, caller, trace.WithSpanKind(trace.SpanKindClient)) -} - -func (t *Tracer) NewSpan(ctx context.Context, caller string) (context.Context, *tracing.Span) { - return t.newSpan(ctx, caller) -} - -func (t *Tracer) newSpan(ctx context.Context, caller string, options ...trace.StartOption) (context.Context, *tracing.Span) { - return t.newSpanFromName(ctx, caller, options...) -} - -func (t *Tracer) newSpanFromName(ctx context.Context, name string, options ...trace.StartOption) (context.Context, *tracing.Span) { - ctx, span := trace.StartSpan(ctx, name, options...) - return ctx, tracing.CreateSpan(span) -} - -func (t *Tracer) NewSpanHTTP(r *http.Request, caller string) (*http.Request, *tracing.Span) { - ctx, span := t.NewSpan(r.Context(), caller) - r = r.WithContext(ctx) - return r, span -} diff --git a/internal/tracing/mock/tracing_mock.go b/internal/tracing/mock/tracing_mock.go deleted file mode 100644 index d765782360..0000000000 --- a/internal/tracing/mock/tracing_mock.go +++ /dev/null @@ -1,155 +0,0 @@ -// Code generated by MockGen. DO NOT EDIT. -// Source: github.com/caos/zitadel/internal/tracing (interfaces: Tracer) - -// Package mock is a generated GoMock package. -package mock - -import ( - context "context" - tracing "github.com/caos/zitadel/internal/tracing" - gomock "github.com/golang/mock/gomock" - trace "go.opencensus.io/trace" - http "net/http" - reflect "reflect" -) - -// MockTracer is a mock of Tracer interface -type MockTracer struct { - ctrl *gomock.Controller - recorder *MockTracerMockRecorder -} - -// MockTracerMockRecorder is the mock recorder for MockTracer -type MockTracerMockRecorder struct { - mock *MockTracer -} - -// NewMockTracer creates a new mock instance -func NewMockTracer(ctrl *gomock.Controller) *MockTracer { - mock := &MockTracer{ctrl: ctrl} - mock.recorder = &MockTracerMockRecorder{mock} - return mock -} - -// EXPECT returns an object that allows the caller to indicate expected use -func (m *MockTracer) EXPECT() *MockTracerMockRecorder { - return m.recorder -} - -// NewClientInterceptorSpan mocks base method -func (m *MockTracer) NewClientInterceptorSpan(arg0 context.Context, arg1 string) (context.Context, *tracing.Span) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "NewClientInterceptorSpan", arg0, arg1) - ret0, _ := ret[0].(context.Context) - ret1, _ := ret[1].(*tracing.Span) - return ret0, ret1 -} - -// NewClientInterceptorSpan indicates an expected call of NewClientInterceptorSpan -func (mr *MockTracerMockRecorder) NewClientInterceptorSpan(arg0, arg1 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewClientInterceptorSpan", reflect.TypeOf((*MockTracer)(nil).NewClientInterceptorSpan), arg0, arg1) -} - -// NewClientSpan mocks base method -func (m *MockTracer) NewClientSpan(arg0 context.Context, arg1 string) (context.Context, *tracing.Span) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "NewClientSpan", arg0, arg1) - ret0, _ := ret[0].(context.Context) - ret1, _ := ret[1].(*tracing.Span) - return ret0, ret1 -} - -// NewClientSpan indicates an expected call of NewClientSpan -func (mr *MockTracerMockRecorder) NewClientSpan(arg0, arg1 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewClientSpan", reflect.TypeOf((*MockTracer)(nil).NewClientSpan), arg0, arg1) -} - -// NewServerInterceptorSpan mocks base method -func (m *MockTracer) NewServerInterceptorSpan(arg0 context.Context, arg1 string) (context.Context, *tracing.Span) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "NewServerInterceptorSpan", arg0, arg1) - ret0, _ := ret[0].(context.Context) - ret1, _ := ret[1].(*tracing.Span) - return ret0, ret1 -} - -// NewServerInterceptorSpan indicates an expected call of NewServerInterceptorSpan -func (mr *MockTracerMockRecorder) NewServerInterceptorSpan(arg0, arg1 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewServerInterceptorSpan", reflect.TypeOf((*MockTracer)(nil).NewServerInterceptorSpan), arg0, arg1) -} - -// NewServerSpan mocks base method -func (m *MockTracer) NewServerSpan(arg0 context.Context, arg1 string) (context.Context, *tracing.Span) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "NewServerSpan", arg0, arg1) - ret0, _ := ret[0].(context.Context) - ret1, _ := ret[1].(*tracing.Span) - return ret0, ret1 -} - -// NewServerSpan indicates an expected call of NewServerSpan -func (mr *MockTracerMockRecorder) NewServerSpan(arg0, arg1 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewServerSpan", reflect.TypeOf((*MockTracer)(nil).NewServerSpan), arg0, arg1) -} - -// NewSpan mocks base method -func (m *MockTracer) NewSpan(arg0 context.Context, arg1 string) (context.Context, *tracing.Span) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "NewSpan", arg0, arg1) - ret0, _ := ret[0].(context.Context) - ret1, _ := ret[1].(*tracing.Span) - return ret0, ret1 -} - -// NewSpan indicates an expected call of NewSpan -func (mr *MockTracerMockRecorder) NewSpan(arg0, arg1 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewSpan", reflect.TypeOf((*MockTracer)(nil).NewSpan), arg0, arg1) -} - -// NewSpanHTTP mocks base method -func (m *MockTracer) NewSpanHTTP(arg0 *http.Request, arg1 string) (*http.Request, *tracing.Span) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "NewSpanHTTP", arg0, arg1) - ret0, _ := ret[0].(*http.Request) - ret1, _ := ret[1].(*tracing.Span) - return ret0, ret1 -} - -// NewSpanHTTP indicates an expected call of NewSpanHTTP -func (mr *MockTracerMockRecorder) NewSpanHTTP(arg0, arg1 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewSpanHTTP", reflect.TypeOf((*MockTracer)(nil).NewSpanHTTP), arg0, arg1) -} - -// Sampler mocks base method -func (m *MockTracer) Sampler() trace.Sampler { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Sampler") - ret0, _ := ret[0].(trace.Sampler) - return ret0 -} - -// Sampler indicates an expected call of Sampler -func (mr *MockTracerMockRecorder) Sampler() *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Sampler", reflect.TypeOf((*MockTracer)(nil).Sampler)) -} - -// Start mocks base method -func (m *MockTracer) Start() error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Start") - ret0, _ := ret[0].(error) - return ret0 -} - -// Start indicates an expected call of Start -func (mr *MockTracerMockRecorder) Start() *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Start", reflect.TypeOf((*MockTracer)(nil).Start)) -} diff --git a/internal/tracing/mock/tracing_mock_impl.go b/internal/tracing/mock/tracing_mock_impl.go deleted file mode 100644 index 7e7335d851..0000000000 --- a/internal/tracing/mock/tracing_mock_impl.go +++ /dev/null @@ -1,20 +0,0 @@ -package mock - -import ( - "context" - "testing" - - "github.com/golang/mock/gomock" - - "github.com/caos/zitadel/internal/tracing" -) - -func NewSimpleMockTracer(t *testing.T) *MockTracer { - return NewMockTracer(gomock.NewController(t)) -} - -func ExpectServerSpan(ctx context.Context, mock interface{}) { - m := mock.(*MockTracer) - any := gomock.Any() - m.EXPECT().NewServerSpan(any, any).AnyTimes().Return(ctx, &tracing.Span{}) -} diff --git a/internal/tracing/otel/config.go b/internal/tracing/otel/config.go new file mode 100644 index 0000000000..6f0087dc13 --- /dev/null +++ b/internal/tracing/otel/config.go @@ -0,0 +1,24 @@ +package otel + +import ( + "github.com/caos/zitadel/internal/tracing" + "go.opentelemetry.io/otel/exporters/otlp" + sdk_trace "go.opentelemetry.io/otel/sdk/trace" +) + +type Config struct { + Fraction float64 + MetricPrefix string + Endpoint string +} + +func (c *Config) NewTracer() error { + sampler := sdk_trace.ParentBased(sdk_trace.TraceIDRatioBased(c.Fraction)) + exporter, err := otlp.NewExporter(otlp.WithAddress(c.Endpoint), otlp.WithInsecure()) + if err != nil { + return err + } + + tracing.T = NewTracer(c.MetricPrefix, sampler, exporter) + return nil +} diff --git a/internal/tracing/otel/open_telemetry.go b/internal/tracing/otel/open_telemetry.go new file mode 100644 index 0000000000..12e7b82e72 --- /dev/null +++ b/internal/tracing/otel/open_telemetry.go @@ -0,0 +1,70 @@ +package otel + +import ( + "context" + "net/http" + + "github.com/caos/zitadel/internal/tracing" + "go.opentelemetry.io/otel/api/global" + api_trace "go.opentelemetry.io/otel/api/trace" + "go.opentelemetry.io/otel/propagators" + "go.opentelemetry.io/otel/sdk/export/trace" + sdk_trace "go.opentelemetry.io/otel/sdk/trace" +) + +type Tracer struct { + Exporter api_trace.Tracer + sampler sdk_trace.Sampler +} + +func NewTracer(name string, sampler sdk_trace.Sampler, exporter trace.SpanExporter) *Tracer { + tp := sdk_trace.NewTracerProvider( + sdk_trace.WithConfig(sdk_trace.Config{DefaultSampler: sampler}), + sdk_trace.WithSyncer(exporter), + ) + + global.SetTracerProvider(tp) + tc := propagators.TraceContext{} + global.SetTextMapPropagator(tc) + + return &Tracer{Exporter: tp.Tracer(name), sampler: sampler} +} + +func (t *Tracer) Sampler() sdk_trace.Sampler { + return t.sampler +} + +func (t *Tracer) NewServerInterceptorSpan(ctx context.Context, name string) (context.Context, *tracing.Span) { + return t.newSpanFromName(ctx, name, api_trace.WithSpanKind(api_trace.SpanKindServer)) +} + +func (t *Tracer) NewServerSpan(ctx context.Context, caller string) (context.Context, *tracing.Span) { + return t.newSpan(ctx, caller, api_trace.WithSpanKind(api_trace.SpanKindServer)) +} + +func (t *Tracer) NewClientInterceptorSpan(ctx context.Context, name string) (context.Context, *tracing.Span) { + return t.newSpanFromName(ctx, name, api_trace.WithSpanKind(api_trace.SpanKindClient)) +} + +func (t *Tracer) NewClientSpan(ctx context.Context, caller string) (context.Context, *tracing.Span) { + return t.newSpan(ctx, caller, api_trace.WithSpanKind(api_trace.SpanKindClient)) +} + +func (t *Tracer) NewSpan(ctx context.Context, caller string) (context.Context, *tracing.Span) { + return t.newSpan(ctx, caller) +} + +func (t *Tracer) newSpan(ctx context.Context, caller string, options ...api_trace.SpanOption) (context.Context, *tracing.Span) { + return t.newSpanFromName(ctx, caller, options...) +} + +func (t *Tracer) newSpanFromName(ctx context.Context, name string, options ...api_trace.SpanOption) (context.Context, *tracing.Span) { + ctx, span := t.Exporter.Start(ctx, name, options...) + return ctx, tracing.CreateSpan(span) +} + +func (t *Tracer) NewSpanHTTP(r *http.Request, caller string) (*http.Request, *tracing.Span) { + ctx, span := t.NewSpan(r.Context(), caller) + r = r.WithContext(ctx) + return r, span +} diff --git a/internal/tracing/span.go b/internal/tracing/span.go index f059f9f764..ee6000777e 100644 --- a/internal/tracing/span.go +++ b/internal/tracing/span.go @@ -1,30 +1,29 @@ package tracing import ( - "fmt" - errors2 "github.com/caos/zitadel/internal/api/grpc/errors" - "strconv" + "context" - "go.opencensus.io/trace" - - "github.com/caos/zitadel/internal/errors" + grpc_errs "github.com/caos/zitadel/internal/api/grpc/errors" + api_trace "go.opentelemetry.io/otel/api/trace" + "go.opentelemetry.io/otel/codes" + "go.opentelemetry.io/otel/label" ) type Span struct { - span *trace.Span - attributes []trace.Attribute + span api_trace.Span + opts []api_trace.SpanOption } -func CreateSpan(span *trace.Span) *Span { - return &Span{span: span, attributes: []trace.Attribute{}} +func CreateSpan(span api_trace.Span) *Span { + return &Span{span: span, opts: []api_trace.SpanOption{}} } func (s *Span) End() { if s.span == nil { return } - s.span.AddAttributes(s.attributes...) - s.span.End() + + s.span.End(s.opts...) } func (s *Span) EndWithError(err error) { @@ -36,53 +35,10 @@ func (s *Span) SetStatusByError(err error) { if s.span == nil { return } - s.span.SetStatus(statusFromError(err)) -} - -func statusFromError(err error) trace.Status { - code, msg, _, _ := errors2.ExtractCaosError(err) - return trace.Status{Code: int32(code), Message: msg} -} - -// AddAnnotation creates an annotation. The annotation will not be added to the tracing use Annotate(msg) afterwards -func (s *Span) AddAnnotation(key string, value interface{}) *Span { - attribute, err := toTraceAttribute(key, value) if err != nil { - return s + s.span.RecordError(context.TODO(), err, api_trace.WithErrorStatus(codes.Error)) } - s.attributes = append(s.attributes, attribute) - return s -} -// Annotate creates an annotation in tracing. Before added annotations will be set -func (s *Span) Annotate(message string) *Span { - if s.span == nil { - return s - } - s.span.Annotate(s.attributes, message) - s.attributes = []trace.Attribute{} - return s -} - -func (s *Span) Annotatef(format string, addiations ...interface{}) *Span { - s.Annotate(fmt.Sprintf(format, addiations...)) - return s -} - -func toTraceAttribute(key string, value interface{}) (attr trace.Attribute, err error) { - switch value := value.(type) { - case bool: - return trace.BoolAttribute(key, value), nil - case string: - return trace.StringAttribute(key, value), nil - } - if valueInt, err := convertToInt64(value); err == nil { - return trace.Int64Attribute(key, valueInt), nil - } - return attr, errors.ThrowInternal(nil, "TRACE-jlq3s", "Attribute is not of type bool, string or int64") -} - -func convertToInt64(value interface{}) (int64, error) { - valueString := fmt.Sprintf("%v", value) - return strconv.ParseInt(valueString, 10, 64) + code, msg, id, _ := grpc_errs.ExtractCaosError(err) + s.span.SetAttributes(label.Uint32("grpc_code", uint32(code)), label.String("grpc_msg", msg), label.String("error_id", id)) } diff --git a/internal/tracing/tracing.go b/internal/tracing/tracing.go index 5184ec8ea9..b57e4adabe 100644 --- a/internal/tracing/tracing.go +++ b/internal/tracing/tracing.go @@ -4,18 +4,18 @@ import ( "context" "net/http" - "go.opencensus.io/trace" + api_trace "go.opentelemetry.io/otel/api/trace" + sdk_trace "go.opentelemetry.io/otel/sdk/trace" ) type Tracer interface { - Start() error NewSpan(ctx context.Context, caller string) (context.Context, *Span) NewClientSpan(ctx context.Context, caller string) (context.Context, *Span) NewServerSpan(ctx context.Context, caller string) (context.Context, *Span) NewClientInterceptorSpan(ctx context.Context, name string) (context.Context, *Span) NewServerInterceptorSpan(ctx context.Context, name string) (context.Context, *Span) NewSpanHTTP(r *http.Request, caller string) (*http.Request, *Span) - Sampler() trace.Sampler + Sampler() sdk_trace.Sampler } type Config interface { @@ -24,9 +24,9 @@ type Config interface { var T Tracer -func Sampler() trace.Sampler { +func Sampler() sdk_trace.Sampler { if T == nil { - return trace.NeverSample() + return sdk_trace.NeverSample() } return T.Sampler() } @@ -79,3 +79,7 @@ func NewSpanHTTP(r *http.Request) (*http.Request, *Span) { } return T.NewSpanHTTP(r, GetCaller()) } + +func TraceIDFromCtx(ctx context.Context) string { + return api_trace.SpanFromContext(ctx).SpanContext().TraceID.String() +}