diff --git a/go.mod b/go.mod index 5e169e8b3..c87e6e7b7 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/kubernetes-csi/external-snapshotter/client/v4 v4.1.0 github.com/pkg/errors v0.9.1 github.com/spf13/cobra v1.1.3 - gomodules.xyz/logs v0.0.4 + gomodules.xyz/logs v0.0.6 gomodules.xyz/pointer v0.1.0 gomodules.xyz/runtime v0.2.0 gomodules.xyz/x v0.0.8 @@ -18,12 +18,12 @@ require ( k8s.io/client-go v0.21.1 k8s.io/klog/v2 v2.8.0 k8s.io/kubectl v0.21.1 - kmodules.xyz/client-go v0.0.0-20211028132207-0cf6ea46b030 + kmodules.xyz/client-go v0.0.0-20211107190155-5bb4090d2728 kmodules.xyz/objectstore-api v0.0.0-20210928135706-fdf68f88ea6e kmodules.xyz/offshoot-api v0.0.0-20210829122105-6f4d481b0c61 kmodules.xyz/openshift v0.0.0-20210618001443-f2507caa512f stash.appscode.dev/apimachinery v0.16.0 - stash.appscode.dev/stash v0.16.0 + stash.appscode.dev/stash v0.16.1-0.20211123234135-9b2178b5e1c9 ) replace bitbucket.org/ww/goautoneg => gomodules.xyz/goautoneg v0.0.0-20120707110453-a547fc61f48d diff --git a/go.sum b/go.sum index 772eb7622..96d4c369c 100644 --- a/go.sum +++ b/go.sum @@ -398,7 +398,6 @@ github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfC github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= -github.com/jpillora/go-ogle-analytics v0.0.0-20161213085824-14b04e0594ef h1:jLpa0vamfyIGeIJ/CfUJEWoKriw4ODeOgF1XxDvgMZ4= github.com/jpillora/go-ogle-analytics v0.0.0-20161213085824-14b04e0594ef/go.mod h1:PlwhC7q1VSK73InDzdDatVetQrTsQHIbOvcJAZzitY0= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= @@ -720,9 +719,10 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs= github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA= github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg= -go.bytebuilders.dev/audit v0.0.10/go.mod h1:jhNyXHoeVHijC4tM7EYpcB9RqkwnI27IoRN3k0ivick= +go.bytebuilders.dev/audit v0.0.12/go.mod h1:ByBiBbgRf3y+frLEWnxjJJCYn4rXN5TTb9Dc0Kfr0tI= go.bytebuilders.dev/license-verifier v0.9.3/go.mod h1:GpIW0o8O0wpiBVt7IIz4z7bcPuG8nza8/bCDkaupDn8= -go.bytebuilders.dev/license-verifier/kubernetes v0.9.3/go.mod h1:PjBQMcD/iYzJYKkWlTl0DnMPeAzjow/jH9Rg8L8Cmc8= +go.bytebuilders.dev/license-verifier v0.9.5/go.mod h1:GpIW0o8O0wpiBVt7IIz4z7bcPuG8nza8/bCDkaupDn8= +go.bytebuilders.dev/license-verifier/kubernetes v0.9.5/go.mod h1:mg5pZDweHlpTTw57kOdLj4bU107hHVP/1xTKKZ1eUNc= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= @@ -992,19 +992,20 @@ gomodules.xyz/clock v0.0.0-20200817085942-06523dba733f h1:hTyhR4r+tj1Uq7/PpFxLTz gomodules.xyz/clock v0.0.0-20200817085942-06523dba733f/go.mod h1:K3m7N+nBOlf91/tpv8REUGwsAgaKFwElQCuiLhm12AQ= gomodules.xyz/encoding v0.0.2/go.mod h1:ZD+5Llh/9P/xTqoiurjs2w3XfAV2jNtsh04FbucIpLw= gomodules.xyz/envsubst v0.1.0/go.mod h1:2o5f7bd13XIITbE2ZKieE05YkqB2KDoZkqKccGebduA= -gomodules.xyz/flags v0.1.2 h1:z/XHHGmduLYY/aSkzcQWJgXWIs3TCTSTLkmwtCjoizg= gomodules.xyz/flags v0.1.2/go.mod h1:CIzWYc2zYDs5lQyGJsjhqKgIj+LriNLpiYuX8Pk34gc= +gomodules.xyz/flags v0.1.3 h1:jQ06+EfmoMv5NvjXvJon03dOhLU+FF0TQMWN7I6qpzs= +gomodules.xyz/flags v0.1.3/go.mod h1:e+kvBLnqdEWGG670SKOYag1CXStM2Slrxq01OIK3tFs= gomodules.xyz/go-sh v0.1.0 h1:1BJAuGREh2RhePt7HRrpmjnkbgfpXlCzc42SiyZ5dkc= gomodules.xyz/go-sh v0.1.0/go.mod h1:N8IrjNiYppUI/rxENYrWD6FOrSxSyEZnIekPEWM7LP0= gomodules.xyz/homedir v0.0.0-20201104190528-bcd4d5d94b84/go.mod h1:rNt5O0KsgdJjAD/UXuxhO2N3b5TegqEk1T8HG9eraH4= -gomodules.xyz/homedir v0.1.0 h1:qnY/+0XQbMk/UcpImZCJYeSI1rNa2BFtcJ/xqxzCpow= gomodules.xyz/homedir v0.1.0/go.mod h1:rNt5O0KsgdJjAD/UXuxhO2N3b5TegqEk1T8HG9eraH4= gomodules.xyz/jsonpatch/v2 v2.0.1/go.mod h1:IhYNNY4jnS53ZnfE4PAmpKtDpTCj1JFXc+3mwe7XcUU= gomodules.xyz/jsonpatch/v2 v2.2.0 h1:4pT439QV83L+G9FkcCriY6EkpcK6r6bK+A5FBUMI7qY= gomodules.xyz/jsonpatch/v2 v2.2.0/go.mod h1:WXp+iVDkoLQqPudfQ9GBlwB2eZ5DKOnjQZCYdOS8GPY= gomodules.xyz/jsonpath v0.0.1/go.mod h1:du28vmLHrgEV48JqK/7rn92YHsVDoQuqrowb2w6YZmE= -gomodules.xyz/logs v0.0.4 h1:r/NdZwGa5znX2VhtvzFr9FhqhRO19Hei4dSlSrrn71o= gomodules.xyz/logs v0.0.4/go.mod h1:GRwztZB2qW4vSV/9KZR2DKFhAwyn1w/S7s4bfnV1jqo= +gomodules.xyz/logs v0.0.6 h1:8+9Wkud5yBPtIvkVszubyTeFxNII30lWODom0+GZD8U= +gomodules.xyz/logs v0.0.6/go.mod h1:Q+fFtZFLEB5q86KmDehXCGuMP72Rv+Rwz0KuVxK+Gi4= gomodules.xyz/mergo v0.3.13-0.20210702100041-9d62ff8ece4d h1:i6r7bk2jF965W3xmORgz+KYhlH608oRvrAPpcNHorlo= gomodules.xyz/mergo v0.3.13-0.20210702100041-9d62ff8ece4d/go.mod h1:i2WNHvGpzLKI+/qWRhscddeashtzrtxCAucS2H7hrtM= gomodules.xyz/password-generator v0.2.6/go.mod h1:TvwYYTx9+P1pPwKQKfZgB/wr2Id9MqAQ3B5auY7reNg= @@ -1022,8 +1023,9 @@ gomodules.xyz/sets v0.2.0/go.mod h1:jKgNp01/iDs+svOWXaPk5cKP3VXy0mWUoTF/ore+aMc= gomodules.xyz/stow v0.2.4/go.mod h1:aAgUEHyZ+4nKznyVupMMkP0JX9MXW1ZRrbRGaclp3E0= gomodules.xyz/sync v0.1.0/go.mod h1:kv570yCdknyiZ8Y94uaRFGBC5E47TV/5A7PD9jlnJoQ= gomodules.xyz/version v0.1.0/go.mod h1:Y8xuV02mL/45psyPKG3NCVOwvAOy6T5Kx0l3rCjKSjU= -gomodules.xyz/wait v0.0.0-20210218105358-639bd9211545 h1:iiD24jN1H8PzliVe1igIzYsx8+VmbXG12y9UUSupUJU= gomodules.xyz/wait v0.0.0-20210218105358-639bd9211545/go.mod h1:g/epKzZQuCqgvhzhaoG4cSBNGHqnOrhFR4Q7szDJ1JM= +gomodules.xyz/wait v0.2.0 h1:HnRIh+cvIrrKIFaXoYznCVVirv2/2xu3KzjSzsQmYAY= +gomodules.xyz/wait v0.2.0/go.mod h1:g/epKzZQuCqgvhzhaoG4cSBNGHqnOrhFR4Q7szDJ1JM= gomodules.xyz/x v0.0.0-20201105065653-91c568df6331/go.mod h1:Q5P/WKpi2XymJJ4mBhUlBVsCzoL167c78CxyIind/pA= gomodules.xyz/x v0.0.5/go.mod h1:EGy7cB7ifSuOcbNFc0U1zUPTf5yY8RtXVJlAlhGS9OE= gomodules.xyz/x v0.0.7/go.mod h1:CMXe28rpApV30pPw9cxdyEmvoC+aa5LiAqzks9dlxag= @@ -1144,11 +1146,11 @@ k8s.io/utils v0.0.0-20201110183641-67b214c5f920 h1:CbnUZsM497iRC5QMVkHwyl8s2tB3g k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= kmodules.xyz/apiversion v0.2.0/go.mod h1:oPX8g8LvlPdPX3Yc5YvCzJHQnw3YF/X4/jdW0b1am80= kmodules.xyz/client-go v0.0.0-20210617233340-13d22e91512b/go.mod h1:A6GAK6xP5zBuWK6A/vUkkjKzcuywkms7fIxRf5wblO4= -kmodules.xyz/client-go v0.0.0-20210719120358-dd0503cf99cf/go.mod h1:E/vGngai00UtVwP8R4PWpPUBF/EZa6Ub9WS5+tVcs4M= -kmodules.xyz/client-go v0.0.0-20210822203828-5e9cebbf1dfa/go.mod h1:0gkPeALtYjB27OHt4rd6+ZmMgoVTHVLtEJQeU23/gtA= kmodules.xyz/client-go v0.0.0-20210928133955-8df5bb467db6/go.mod h1:0gkPeALtYjB27OHt4rd6+ZmMgoVTHVLtEJQeU23/gtA= -kmodules.xyz/client-go v0.0.0-20211028132207-0cf6ea46b030 h1:jzGC4s2WKkpZMELKUpaEUY/5d7i3rYau9kp1hxZlYb0= +kmodules.xyz/client-go v0.0.0-20211013093146-1fbfd52e78c9/go.mod h1:0gkPeALtYjB27OHt4rd6+ZmMgoVTHVLtEJQeU23/gtA= kmodules.xyz/client-go v0.0.0-20211028132207-0cf6ea46b030/go.mod h1:ENUu8pPK19xzBkVpAJHoGCI2QRvb1SqffWRt0K2sV5I= +kmodules.xyz/client-go v0.0.0-20211107190155-5bb4090d2728 h1:wfpdSr2OID1uAD59HtupacI+c3o+UyEdeCL/qrKasdE= +kmodules.xyz/client-go v0.0.0-20211107190155-5bb4090d2728/go.mod h1:ENUu8pPK19xzBkVpAJHoGCI2QRvb1SqffWRt0K2sV5I= kmodules.xyz/constants v0.0.0-20210218100002-2c304bfda278/go.mod h1:DbiFk1bJ1KEO94t1SlAn7tzc+Zz95rSXgyUKa2nzPmY= kmodules.xyz/crd-schema-fuzz v0.0.0-20210618002152-fae23aef5fb4/go.mod h1:IIkUctlfoptoci0BOrsUf8ya+MOG5uaeh1PE4uzaIbA= kmodules.xyz/custom-resources v0.0.0-20211007080833-72bd9e8cae6e h1:0IEUFAJPgwPx3+Zb1BMcHLywKhJtXMk6YCHNsjWJwYQ= @@ -1161,8 +1163,7 @@ kmodules.xyz/openshift v0.0.0-20210618001443-f2507caa512f h1:V1lapZtGG7GntoUsOuE kmodules.xyz/openshift v0.0.0-20210618001443-f2507caa512f/go.mod h1:8E5ckbd1KMNmR4hc7ScvmQnGfx1ULUUp+UTmoDdxRkc= kmodules.xyz/prober v0.0.0-20210618020259-5836fb959027 h1:rtSPsruEkoBOLcbJkxMQjnPafpv8/vJnfWlTIj9yRBg= kmodules.xyz/prober v0.0.0-20210618020259-5836fb959027/go.mod h1:H4NcvS1RQxeXtQONALbU6r9OT3Xa7cMhfamX/k9t9wo= -kmodules.xyz/resource-metadata v0.6.4/go.mod h1:KWf68Ado/hgYpb/msYNvhYSLWvS/bJcVAAHO1/q9nNg= -kmodules.xyz/resource-metrics v0.0.3/go.mod h1:6Dv63HDgp83DhA+lZNB7GIQR6PLjNrYW6ghQKioQzII= +kmodules.xyz/resource-metadata v0.6.7/go.mod h1:BGy9IyQG13z6ArdexZ7gguVrNspLxa1fSPd/I7fdpI0= kmodules.xyz/resource-metrics v0.0.5/go.mod h1:6Dv63HDgp83DhA+lZNB7GIQR6PLjNrYW6ghQKioQzII= kmodules.xyz/webhook-runtime v0.0.0-20210928141616-7f73c2ab318a h1:kSTJu+yNGkQ4tdBeR0yMXZopI4CAMJh5uFafaE1Cr9k= kmodules.xyz/webhook-runtime v0.0.0-20210928141616-7f73c2ab318a/go.mod h1:MFZFmJk9IXNHwq8JlF/mukwBDbopFQj4swaB2MWHc/U= @@ -1194,5 +1195,5 @@ sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= stash.appscode.dev/apimachinery v0.16.0 h1:6mvmPatv9nR5Wc+PCt3Cg9R7WRJRqhy2yLu2b/HmXhA= stash.appscode.dev/apimachinery v0.16.0/go.mod h1:unpV/YyHVECNrAdFjFg/SetmPeUjfvc2+P8cnGjih/U= -stash.appscode.dev/stash v0.16.0 h1:jtLGxl26ySfa+FnSyeM76U9zzfohdS2Wk+byiQ1O/pQ= -stash.appscode.dev/stash v0.16.0/go.mod h1:zUB4kug3vsFFhhGGuJhCtZgNBHh8Nx2XRGNpCoxHGgA= +stash.appscode.dev/stash v0.16.1-0.20211123234135-9b2178b5e1c9 h1:++xnDbwOFYu4YU30vr87nfoGWef8AIP+iarIaQbLPoE= +stash.appscode.dev/stash v0.16.1-0.20211123234135-9b2178b5e1c9/go.mod h1:3Ivq1v2Vf2bB8M8vnsMQL+rB8ChaU0Sz/kMbxYvHA8c= diff --git a/pkg/root.go b/pkg/root.go index 0df7bd4ac..1d34145db 100644 --- a/pkg/root.go +++ b/pkg/root.go @@ -25,7 +25,6 @@ import ( "k8s.io/cli-runtime/pkg/genericclioptions" clientsetscheme "k8s.io/client-go/kubernetes/scheme" cmdutil "k8s.io/kubectl/pkg/cmd/util" - "kmodules.xyz/client-go/tools/cli" ocscheme "kmodules.xyz/openshift/client/clientset/versioned/scheme" ) @@ -36,8 +35,6 @@ func NewRootCmd() *cobra.Command { Long: `kubectl plugin for Stash by AppsCode. For more information, visit here: https://appscode.com/products/stash`, DisableAutoGenTag: true, PersistentPreRun: func(c *cobra.Command, args []string) { - cli.SendAnalytics(c, v.Version.Version) - utilruntime.Must(scheme.AddToScheme(clientsetscheme.Scheme)) utilruntime.Must(ocscheme.AddToScheme(clientsetscheme.Scheme)) }, @@ -50,8 +47,6 @@ func NewRootCmd() *cobra.Command { matchVersionKubeConfigFlags := cmdutil.NewMatchVersionFlags(kubeConfigFlags) matchVersionKubeConfigFlags.AddFlags(flags) - flags.BoolVar(&cli.EnableAnalytics, "enable-analytics", cli.EnableAnalytics, "Send analytical events to Google Analytics") - f := cmdutil.NewFactory(matchVersionKubeConfigFlags) rootCmd.AddCommand(v.NewCmdVersion()) diff --git a/vendor/github.com/jpillora/go-ogle-analytics/.gitignore b/vendor/github.com/jpillora/go-ogle-analytics/.gitignore deleted file mode 100644 index 3010792c7..000000000 --- a/vendor/github.com/jpillora/go-ogle-analytics/.gitignore +++ /dev/null @@ -1 +0,0 @@ -example/tracker-id.txt \ No newline at end of file diff --git a/vendor/github.com/jpillora/go-ogle-analytics/LICENSE b/vendor/github.com/jpillora/go-ogle-analytics/LICENSE deleted file mode 100644 index ec9f7530c..000000000 --- a/vendor/github.com/jpillora/go-ogle-analytics/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -MIT License - -Copyright © 2015 dev@jpillora.com, Google Inc. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/vendor/github.com/jpillora/go-ogle-analytics/README.md b/vendor/github.com/jpillora/go-ogle-analytics/README.md deleted file mode 100644 index 9a85f3af7..000000000 --- a/vendor/github.com/jpillora/go-ogle-analytics/README.md +++ /dev/null @@ -1,81 +0,0 @@ -## Go-ogle Analytics - -Track and monitor your Go programs for free with Google Analytics - -The `ga` package is essentially a Go wrapper around the [Google Analytics - Measurement Protocol](https://developers.google.com/analytics/devguides/collection/protocol/v1/reference) - -**Warning** This package is 95% generated from the [Parameter Reference](https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters) so it may contain bugs - please report them. GA allows "10 million hits per month per property" and will reject requests after that. - -### Install - -``` -go get -v github.com/jpillora/go-ogle-analytics -``` - -### API - -Create a new `client` and `Send()` a 'pageview', 'screenview', 'event', 'transaction', 'item', 'social', 'exception' or 'timing' event. - -#### http://godoc.org/github.com/jpillora/go-ogle-analytics - -### Quick Usage - -1. Log into GA and create a new property and note its Tracker ID - -1. Create a `ga-test.go` file - - ``` go - package main - - import "github.com/jpillora/go-ogle-analytics" - - func main() { - client, err := ga.NewClient("UA-XXXXXXXX-Y") - if err != nil { - panic(err) - } - - err = client.Send(ga.NewEvent("Foo", "Bar").Label("Bazz")) - if err != nil { - panic(err) - } - - println("Event fired!") - } - ``` - -1. In GA, go to Real-time > Events - -1. Run `ga-test.go` - - ``` - $ go run ga-test.go - Event fired! - ``` - -1. Watch as your event appears - - ![foo-ga](https://cloud.githubusercontent.com/assets/633843/5979585/023fc580-a8fd-11e4-803a-956610bcc2e2.png) - -#### MIT License - -Copyright © 2015 <dev@jpillora.com> - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/vendor/github.com/jpillora/go-ogle-analytics/client.go b/vendor/github.com/jpillora/go-ogle-analytics/client.go deleted file mode 100644 index 85f9169d2..000000000 --- a/vendor/github.com/jpillora/go-ogle-analytics/client.go +++ /dev/null @@ -1,76 +0,0 @@ -//go:generate go run generate/protocol.go - -package ga - -import ( - "bytes" - "fmt" - "net/http" - "net/url" - "regexp" -) - -var trackingIDMatcher = regexp.MustCompile(`^UA-\d+-\d+$`) - -func NewClient(trackingID string) (*Client, error) { - if !trackingIDMatcher.MatchString(trackingID) { - return nil, fmt.Errorf("Invalid Tracking ID: %s", trackingID) - } - return &Client{ - UseTLS: true, - HttpClient: http.DefaultClient, - protocolVersion: "1", - protocolVersionSet: true, - trackingID: trackingID, - clientID: "go-ga", - clientIDSet: true, - }, nil -} - -type hitType interface { - addFields(url.Values) error -} - -func (c *Client) Send(h hitType) error { - - cpy := c.Copy() - - v := url.Values{} - - cpy.setType(h) - - err := cpy.addFields(v) - if err != nil { - return err - } - - err = h.addFields(v) - if err != nil { - return err - } - - url := "" - if cpy.UseTLS { - url = "https://www.google-analytics.com/collect" - } else { - url = "http://ssl.google-analytics.com/collect" - } - - str := v.Encode() - buf := bytes.NewBufferString(str) - - resp, err := c.HttpClient.Post(url, "application/x-www-form-urlencoded", buf) - if err != nil { - return err - } - - defer resp.Body.Close() - - if resp.StatusCode/100 != 2 { - return fmt.Errorf("Rejected by Google with code %d", resp.StatusCode) - } - - // fmt.Printf("POST %s => %d\n", str, resp.StatusCode) - - return nil -} diff --git a/vendor/github.com/jpillora/go-ogle-analytics/conv.go b/vendor/github.com/jpillora/go-ogle-analytics/conv.go deleted file mode 100644 index 4deeb4a33..000000000 --- a/vendor/github.com/jpillora/go-ogle-analytics/conv.go +++ /dev/null @@ -1,19 +0,0 @@ -package ga - -import "fmt" - -func bool2str(val bool) string { - if val { - return "1" - } else { - return "0" - } -} - -func int2str(val int64) string { - return fmt.Sprintf("%d", val) -} - -func float2str(val float64) string { - return fmt.Sprintf("%.6f", val) -} diff --git a/vendor/github.com/jpillora/go-ogle-analytics/type-client.go b/vendor/github.com/jpillora/go-ogle-analytics/type-client.go deleted file mode 100644 index b914c6727..000000000 --- a/vendor/github.com/jpillora/go-ogle-analytics/type-client.go +++ /dev/null @@ -1,1228 +0,0 @@ -package ga - -import ( - "net/http" - "net/url" -) - -//WARNING: This file was generated. Do not edit. - -//Client Hit Type -type Client struct { - //Use TLS when Send()ing - UseTLS bool - HttpClient *http.Client - protocolVersion string - protocolVersionSet bool - trackingID string - anonymizeIP bool - anonymizeIPSet bool - dataSource string - dataSourceSet bool - queueTime int64 - queueTimeSet bool - cacheBuster string - cacheBusterSet bool - clientID string - clientIDSet bool - userID string - userIDSet bool - sessionControl string - sessionControlSet bool - iPOverride string - iPOverrideSet bool - userAgentOverride string - userAgentOverrideSet bool - geographicalOverride string - geographicalOverrideSet bool - documentReferrer string - documentReferrerSet bool - campaignName string - campaignNameSet bool - campaignSource string - campaignSourceSet bool - campaignMedium string - campaignMediumSet bool - campaignKeyword string - campaignKeywordSet bool - campaignContent string - campaignContentSet bool - campaignID string - campaignIDSet bool - googleAdWordsID string - googleAdWordsIDSet bool - googleDisplayAdsID string - googleDisplayAdsIDSet bool - screenResolution string - screenResolutionSet bool - viewportSize string - viewportSizeSet bool - documentEncoding string - documentEncodingSet bool - screenColors string - screenColorsSet bool - userLanguage string - userLanguageSet bool - javaEnabled bool - javaEnabledSet bool - flashVersion string - flashVersionSet bool - hitType string - nonInteractionHit bool - nonInteractionHitSet bool - documentLocationURL string - documentLocationURLSet bool - documentHostName string - documentHostNameSet bool - documentPath string - documentPathSet bool - documentTitle string - documentTitleSet bool - screenName string - screenNameSet bool - linkID string - linkIDSet bool - applicationName string - applicationNameSet bool - applicationID string - applicationIDSet bool - applicationVersion string - applicationVersionSet bool - applicationInstallerID string - applicationInstallerIDSet bool - productSKU string - productSKUSet bool - productName string - productNameSet bool - productBrand string - productBrandSet bool - productCategory string - productCategorySet bool - productVariant string - productVariantSet bool - productPrice float64 - productPriceSet bool - productQuantity int64 - productQuantitySet bool - productCouponCode string - productCouponCodeSet bool - productPosition int64 - productPositionSet bool - productCustomDimension string - productCustomDimensionSet bool - productCustomMetric int64 - productCustomMetricSet bool - productAction string - productActionSet bool - transactionID string - transactionIDSet bool - affiliation string - affiliationSet bool - revenue float64 - revenueSet bool - tax float64 - taxSet bool - shipping float64 - shippingSet bool - couponCode string - couponCodeSet bool - productActionList string - productActionListSet bool - checkoutStep int64 - checkoutStepSet bool - checkoutStepOption string - checkoutStepOptionSet bool - productImpressionListName string - productImpressionListNameSet bool - productImpressionSKU string - productImpressionSKUSet bool - productImpressionName string - productImpressionNameSet bool - productImpressionBrand string - productImpressionBrandSet bool - productImpressionCategory string - productImpressionCategorySet bool - productImpressionVariant string - productImpressionVariantSet bool - productImpressionPosition int64 - productImpressionPositionSet bool - productImpressionPrice float64 - productImpressionPriceSet bool - productImpressionCustomDimension string - productImpressionCustomDimensionSet bool - productImpressionCustomMetric int64 - productImpressionCustomMetricSet bool - promotionID string - promotionIDSet bool - promotionName string - promotionNameSet bool - promotionCreative string - promotionCreativeSet bool - promotionPosition string - promotionPositionSet bool - promotionAction string - promotionActionSet bool - customDimension string - customDimensionSet bool - customMetric int64 - customMetricSet bool - experimentID string - experimentIDSet bool - experimentVariant string - experimentVariantSet bool - dimensionIndex string - dimensionIndexSet bool - listIndex string - listIndexSet bool - metricIndex string - metricIndexSet bool - productIndex string - productIndexSet bool - promoIndex string - promoIndexSet bool -} - -func (c *Client) setType(h hitType) { - switch h.(type) { - case *Event: - c.hitType = "event" - case *Exception: - c.hitType = "exception" - case *Item: - c.hitType = "item" - case *Pageview: - c.hitType = "pageview" - case *Screenview: - c.hitType = "screenview" - case *Social: - c.hitType = "social" - case *Timing: - c.hitType = "timing" - case *Transaction: - c.hitType = "transaction" - } -} - -func (h *Client) addFields(v url.Values) error { - if h.protocolVersionSet { - v.Add("v", h.protocolVersion) - } - v.Add("tid", h.trackingID) - if h.anonymizeIPSet { - v.Add("aip", bool2str(h.anonymizeIP)) - } - if h.dataSourceSet { - v.Add("ds", h.dataSource) - } - if h.queueTimeSet { - v.Add("qt", int2str(h.queueTime)) - } - if h.cacheBusterSet { - v.Add("z", h.cacheBuster) - } - if h.clientIDSet { - v.Add("cid", h.clientID) - } - if h.userIDSet { - v.Add("uid", h.userID) - } - if h.sessionControlSet { - v.Add("sc", h.sessionControl) - } - if h.iPOverrideSet { - v.Add("uip", h.iPOverride) - } - if h.userAgentOverrideSet { - v.Add("ua", h.userAgentOverride) - } - if h.geographicalOverrideSet { - v.Add("geoid", h.geographicalOverride) - } - if h.documentReferrerSet { - v.Add("dr", h.documentReferrer) - } - if h.campaignNameSet { - v.Add("cn", h.campaignName) - } - if h.campaignSourceSet { - v.Add("cs", h.campaignSource) - } - if h.campaignMediumSet { - v.Add("cm", h.campaignMedium) - } - if h.campaignKeywordSet { - v.Add("ck", h.campaignKeyword) - } - if h.campaignContentSet { - v.Add("cc", h.campaignContent) - } - if h.campaignIDSet { - v.Add("ci", h.campaignID) - } - if h.googleAdWordsIDSet { - v.Add("gclid", h.googleAdWordsID) - } - if h.googleDisplayAdsIDSet { - v.Add("dclid", h.googleDisplayAdsID) - } - if h.screenResolutionSet { - v.Add("sr", h.screenResolution) - } - if h.viewportSizeSet { - v.Add("vp", h.viewportSize) - } - if h.documentEncodingSet { - v.Add("de", h.documentEncoding) - } - if h.screenColorsSet { - v.Add("sd", h.screenColors) - } - if h.userLanguageSet { - v.Add("ul", h.userLanguage) - } - if h.javaEnabledSet { - v.Add("je", bool2str(h.javaEnabled)) - } - if h.flashVersionSet { - v.Add("fl", h.flashVersion) - } - v.Add("t", h.hitType) - if h.nonInteractionHitSet { - v.Add("ni", bool2str(h.nonInteractionHit)) - } - if h.documentLocationURLSet { - v.Add("dl", h.documentLocationURL) - } - if h.documentHostNameSet { - v.Add("dh", h.documentHostName) - } - if h.documentPathSet { - v.Add("dp", h.documentPath) - } - if h.documentTitleSet { - v.Add("dt", h.documentTitle) - } - if h.screenNameSet { - v.Add("cd", h.screenName) - } - if h.linkIDSet { - v.Add("linkid", h.linkID) - } - if h.applicationNameSet { - v.Add("an", h.applicationName) - } - if h.applicationIDSet { - v.Add("aid", h.applicationID) - } - if h.applicationVersionSet { - v.Add("av", h.applicationVersion) - } - if h.applicationInstallerIDSet { - v.Add("aiid", h.applicationInstallerID) - } - if h.productSKUSet { - v.Add("pr"+h.productIndex+"id", h.productSKU) - } - if h.productNameSet { - v.Add("pr"+h.productIndex+"nm", h.productName) - } - if h.productBrandSet { - v.Add("pr"+h.productIndex+"br", h.productBrand) - } - if h.productCategorySet { - v.Add("pr"+h.productIndex+"ca", h.productCategory) - } - if h.productVariantSet { - v.Add("pr"+h.productIndex+"va", h.productVariant) - } - if h.productPriceSet { - v.Add("pr"+h.productIndex+"pr", float2str(h.productPrice)) - } - if h.productQuantitySet { - v.Add("pr"+h.productIndex+"qt", int2str(h.productQuantity)) - } - if h.productCouponCodeSet { - v.Add("pr"+h.productIndex+"cc", h.productCouponCode) - } - if h.productPositionSet { - v.Add("pr"+h.productIndex+"ps", int2str(h.productPosition)) - } - if h.productCustomDimensionSet { - v.Add("pr"+h.productIndex+"cd"+h.dimensionIndex+"", h.productCustomDimension) - } - if h.productCustomMetricSet { - v.Add("pr"+h.productIndex+"cm"+h.metricIndex+"", int2str(h.productCustomMetric)) - } - if h.productActionSet { - v.Add("pa", h.productAction) - } - if h.transactionIDSet { - v.Add("ti", h.transactionID) - } - if h.affiliationSet { - v.Add("ta", h.affiliation) - } - if h.revenueSet { - v.Add("tr", float2str(h.revenue)) - } - if h.taxSet { - v.Add("tt", float2str(h.tax)) - } - if h.shippingSet { - v.Add("ts", float2str(h.shipping)) - } - if h.couponCodeSet { - v.Add("tcc", h.couponCode) - } - if h.productActionListSet { - v.Add("pal", h.productActionList) - } - if h.checkoutStepSet { - v.Add("cos", int2str(h.checkoutStep)) - } - if h.checkoutStepOptionSet { - v.Add("col", h.checkoutStepOption) - } - if h.productImpressionListNameSet { - v.Add("il"+h.listIndex+"nm", h.productImpressionListName) - } - if h.productImpressionSKUSet { - v.Add("il"+h.listIndex+"pi"+h.productIndex+"id", h.productImpressionSKU) - } - if h.productImpressionNameSet { - v.Add("il"+h.listIndex+"pi"+h.productIndex+"nm", h.productImpressionName) - } - if h.productImpressionBrandSet { - v.Add("il"+h.listIndex+"pi"+h.productIndex+"br", h.productImpressionBrand) - } - if h.productImpressionCategorySet { - v.Add("il"+h.listIndex+"pi"+h.productIndex+"ca", h.productImpressionCategory) - } - if h.productImpressionVariantSet { - v.Add("il"+h.listIndex+"pi"+h.productIndex+"va", h.productImpressionVariant) - } - if h.productImpressionPositionSet { - v.Add("il"+h.listIndex+"pi"+h.productIndex+"ps", int2str(h.productImpressionPosition)) - } - if h.productImpressionPriceSet { - v.Add("il"+h.listIndex+"pi"+h.productIndex+"pr", float2str(h.productImpressionPrice)) - } - if h.productImpressionCustomDimensionSet { - v.Add("il"+h.listIndex+"pi"+h.productIndex+"cd"+h.dimensionIndex+"", h.productImpressionCustomDimension) - } - if h.productImpressionCustomMetricSet { - v.Add("il"+h.listIndex+"pi"+h.productIndex+"cm"+h.metricIndex+"", int2str(h.productImpressionCustomMetric)) - } - if h.promotionIDSet { - v.Add("promo"+h.promoIndex+"id", h.promotionID) - } - if h.promotionNameSet { - v.Add("promo"+h.promoIndex+"nm", h.promotionName) - } - if h.promotionCreativeSet { - v.Add("promo"+h.promoIndex+"cr", h.promotionCreative) - } - if h.promotionPositionSet { - v.Add("promo"+h.promoIndex+"ps", h.promotionPosition) - } - if h.promotionActionSet { - v.Add("promoa", h.promotionAction) - } - if h.customDimensionSet { - v.Add("cd"+h.dimensionIndex+"", h.customDimension) - } - if h.customMetricSet { - v.Add("cm"+h.metricIndex+"", int2str(h.customMetric)) - } - if h.experimentIDSet { - v.Add("xid", h.experimentID) - } - if h.experimentVariantSet { - v.Add("xvar", h.experimentVariant) - } - return nil -} - -// The Protocol version. The current value is '1'. This will -// only change when there are changes made that are not backwards -// compatible. -func (h *Client) ProtocolVersion(protocolVersion string) *Client { - h.protocolVersion = protocolVersion - h.protocolVersionSet = true - return h -} - -// When present, the IP address of the sender will be anonymized. -// For example, the IP will be anonymized if any of the following -// parameters are present in the payload: &aip=, &aip=0, or -// &aip=1 -func (h *Client) AnonymizeIP(anonymizeIP bool) *Client { - h.anonymizeIP = anonymizeIP - h.anonymizeIPSet = true - return h -} - -// Indicates the data source of the hit. Hits sent from analytics.js -// will have data source set to 'web'; hits sent from one of -// the mobile SDKs will have data source set to 'app'. -func (h *Client) DataSource(dataSource string) *Client { - h.dataSource = dataSource - h.dataSourceSet = true - return h -} - -// Used to collect offline / latent hits. The value represents -// the time delta (in milliseconds) between when the hit being -// reported occurred and the time the hit was sent. The value -// must be greater than or equal to 0. Values greater than -// four hours may lead to hits not being processed. -func (h *Client) QueueTime(queueTime int64) *Client { - h.queueTime = queueTime - h.queueTimeSet = true - return h -} - -// Used to send a random number in GET requests to ensure browsers -// and proxies don't cache hits. It should be sent as the final -// parameter of the request since we've seen some 3rd party -// internet filtering software add additional parameters to -// HTTP requests incorrectly. This value is not used in reporting. -func (h *Client) CacheBuster(cacheBuster string) *Client { - h.cacheBuster = cacheBuster - h.cacheBusterSet = true - return h -} - -// This anonymously identifies a particular user, device, or -// browser instance. For the web, this is generally stored -// as a first-party cookie with a two-year expiration. For -// mobile apps, this is randomly generated for each particular -// instance of an application install. The value of this field -// should be a random UUID (version 4) as described in http://www.ietf.org/rfc/rfc4122.txt -func (h *Client) ClientID(clientID string) *Client { - h.clientID = clientID - h.clientIDSet = true - return h -} - -// This is intended to be a known identifier for a user provided -// by the site owner/tracking library user. It may not itself -// be PII (personally identifiable information). The value -// should never be persisted in GA cookies or other Analytics -// provided storage. -func (h *Client) UserID(userID string) *Client { - h.userID = userID - h.userIDSet = true - return h -} - -// Used to control the session duration. A value of 'start' -// forces a new session to start with this hit and 'end' forces -// the current session to end with this hit. All other values -// are ignored. -func (h *Client) SessionControl(sessionControl string) *Client { - h.sessionControl = sessionControl - h.sessionControlSet = true - return h -} - -// The IP address of the user. This should be a valid IP address -// in IPv4 or IPv6 format. It will always be anonymized just -// as though &aip (anonymize IP) had been used. -func (h *Client) IPOverride(iPOverride string) *Client { - h.iPOverride = iPOverride - h.iPOverrideSet = true - return h -} - -// The User Agent of the browser. Note that Google has libraries -// to identify real user agents. Hand crafting your own agent -// could break at any time. -func (h *Client) UserAgentOverride(userAgentOverride string) *Client { - h.userAgentOverride = userAgentOverride - h.userAgentOverrideSet = true - return h -} - -// The geographical location of the user. The geographical -// ID should be a two letter country code or a criteria ID -// representing a city or region (see http://developers.google.com/analytics/devguides/collection/protocol/v1/geoid). -// This parameter takes precedent over any location derived -// from IP address, including the IP Override parameter. An -// invalid code will result in geographical dimensions to be -// set to '(not set)'. -func (h *Client) GeographicalOverride(geographicalOverride string) *Client { - h.geographicalOverride = geographicalOverride - h.geographicalOverrideSet = true - return h -} - -// Specifies which referral source brought traffic to a website. -// This value is also used to compute the traffic source. The -// format of this value is a URL. -func (h *Client) DocumentReferrer(documentReferrer string) *Client { - h.documentReferrer = documentReferrer - h.documentReferrerSet = true - return h -} - -// Specifies the campaign name. -func (h *Client) CampaignName(campaignName string) *Client { - h.campaignName = campaignName - h.campaignNameSet = true - return h -} - -// Specifies the campaign source. -func (h *Client) CampaignSource(campaignSource string) *Client { - h.campaignSource = campaignSource - h.campaignSourceSet = true - return h -} - -// Specifies the campaign medium. -func (h *Client) CampaignMedium(campaignMedium string) *Client { - h.campaignMedium = campaignMedium - h.campaignMediumSet = true - return h -} - -// Specifies the campaign keyword. -func (h *Client) CampaignKeyword(campaignKeyword string) *Client { - h.campaignKeyword = campaignKeyword - h.campaignKeywordSet = true - return h -} - -// Specifies the campaign content. -func (h *Client) CampaignContent(campaignContent string) *Client { - h.campaignContent = campaignContent - h.campaignContentSet = true - return h -} - -// Specifies the campaign ID. -func (h *Client) CampaignID(campaignID string) *Client { - h.campaignID = campaignID - h.campaignIDSet = true - return h -} - -// Specifies the Google AdWords Id. -func (h *Client) GoogleAdWordsID(googleAdWordsID string) *Client { - h.googleAdWordsID = googleAdWordsID - h.googleAdWordsIDSet = true - return h -} - -// Specifies the Google Display Ads Id. -func (h *Client) GoogleDisplayAdsID(googleDisplayAdsID string) *Client { - h.googleDisplayAdsID = googleDisplayAdsID - h.googleDisplayAdsIDSet = true - return h -} - -// Specifies the screen resolution. -func (h *Client) ScreenResolution(screenResolution string) *Client { - h.screenResolution = screenResolution - h.screenResolutionSet = true - return h -} - -// Specifies the viewable area of the browser / device. -func (h *Client) ViewportSize(viewportSize string) *Client { - h.viewportSize = viewportSize - h.viewportSizeSet = true - return h -} - -// Specifies the character set used to encode the page / document. -func (h *Client) DocumentEncoding(documentEncoding string) *Client { - h.documentEncoding = documentEncoding - h.documentEncodingSet = true - return h -} - -// Specifies the screen color depth. -func (h *Client) ScreenColors(screenColors string) *Client { - h.screenColors = screenColors - h.screenColorsSet = true - return h -} - -// Specifies the language. -func (h *Client) UserLanguage(userLanguage string) *Client { - h.userLanguage = userLanguage - h.userLanguageSet = true - return h -} - -// Specifies whether Java was enabled. -func (h *Client) JavaEnabled(javaEnabled bool) *Client { - h.javaEnabled = javaEnabled - h.javaEnabledSet = true - return h -} - -// Specifies the flash version. -func (h *Client) FlashVersion(flashVersion string) *Client { - h.flashVersion = flashVersion - h.flashVersionSet = true - return h -} - -// Specifies that a hit be considered non-interactive. -func (h *Client) NonInteractionHit(nonInteractionHit bool) *Client { - h.nonInteractionHit = nonInteractionHit - h.nonInteractionHitSet = true - return h -} - -// Use this parameter to send the full URL (document location) -// of the page on which content resides. You can use the &dh -// and &dp parameters to override the hostname and path + query -// portions of the document location, accordingly. The JavaScript -// clients determine this parameter using the concatenation -// of the document.location.origin + document.location.pathname -// + document.location.search browser parameters. Be sure to -// remove any user authentication or other private information -// from the URL if present. For 'pageview' hits, either &dl -// or both &dh and &dp have to be specified for the hit to -// be valid. -func (h *Client) DocumentLocationURL(documentLocationURL string) *Client { - h.documentLocationURL = documentLocationURL - h.documentLocationURLSet = true - return h -} - -// Specifies the hostname from which content was hosted. -func (h *Client) DocumentHostName(documentHostName string) *Client { - h.documentHostName = documentHostName - h.documentHostNameSet = true - return h -} - -// The path portion of the page URL. Should begin with '/'. -// For 'pageview' hits, either &dl or both &dh and &dp have -// to be specified for the hit to be valid. -func (h *Client) DocumentPath(documentPath string) *Client { - h.documentPath = documentPath - h.documentPathSet = true - return h -} - -// The title of the page / document. -func (h *Client) DocumentTitle(documentTitle string) *Client { - h.documentTitle = documentTitle - h.documentTitleSet = true - return h -} - -// If not specified, this will default to the unique URL of -// the page by either using the &dl parameter as-is or assembling -// it from &dh and &dp. App tracking makes use of this for -// the 'Screen Name' of the screenview hit. -func (h *Client) ScreenName(screenName string) *Client { - h.screenName = screenName - h.screenNameSet = true - return h -} - -// The ID of a clicked DOM element, used to disambiguate multiple -// links to the same URL in In-Page Analytics reports when -// Enhanced Link Attribution is enabled for the property. -func (h *Client) LinkID(linkID string) *Client { - h.linkID = linkID - h.linkIDSet = true - return h -} - -// Specifies the application name. -func (h *Client) ApplicationName(applicationName string) *Client { - h.applicationName = applicationName - h.applicationNameSet = true - return h -} - -// Application identifier. -func (h *Client) ApplicationID(applicationID string) *Client { - h.applicationID = applicationID - h.applicationIDSet = true - return h -} - -// Specifies the application version. -func (h *Client) ApplicationVersion(applicationVersion string) *Client { - h.applicationVersion = applicationVersion - h.applicationVersionSet = true - return h -} - -// Application installer identifier. -func (h *Client) ApplicationInstallerID(applicationInstallerID string) *Client { - h.applicationInstallerID = applicationInstallerID - h.applicationInstallerIDSet = true - return h -} - -// The SKU of the product. Product index must be a positive -// integer between 1 and 200, inclusive. For analytics.js the -// Enhanced Ecommerce plugin must be installed before using -// this field. -func (h *Client) ProductSKU(productSKU string) *Client { - h.productSKU = productSKU - h.productSKUSet = true - return h -} - -// The name of the product. Product index must be a positive -// integer between 1 and 200, inclusive. For analytics.js the -// Enhanced Ecommerce plugin must be installed before using -// this field. -func (h *Client) ProductName(productName string) *Client { - h.productName = productName - h.productNameSet = true - return h -} - -// The brand associated with the product. Product index must -// be a positive integer between 1 and 200, inclusive. For -// analytics.js the Enhanced Ecommerce plugin must be installed -// before using this field. -func (h *Client) ProductBrand(productBrand string) *Client { - h.productBrand = productBrand - h.productBrandSet = true - return h -} - -// The category to which the product belongs. Product index -// must be a positive integer between 1 and 200, inclusive. -// The product category parameter can be hierarchical. Use -// / as a delimiter to specify up to 5-levels of hierarchy. -// For analytics.js the Enhanced Ecommerce plugin must be installed -// before using this field. -func (h *Client) ProductCategory(productCategory string) *Client { - h.productCategory = productCategory - h.productCategorySet = true - return h -} - -// The variant of the product. Product index must be a positive -// integer between 1 and 200, inclusive. For analytics.js the -// Enhanced Ecommerce plugin must be installed before using -// this field. -func (h *Client) ProductVariant(productVariant string) *Client { - h.productVariant = productVariant - h.productVariantSet = true - return h -} - -// The price of a product. Product index must be a positive -// integer between 1 and 200, inclusive. For analytics.js the -// Enhanced Ecommerce plugin must be installed before using -// this field. -func (h *Client) ProductPrice(productPrice float64) *Client { - h.productPrice = productPrice - h.productPriceSet = true - return h -} - -// The quantity of a product. Product index must be a positive -// integer between 1 and 200, inclusive. For analytics.js the -// Enhanced Ecommerce plugin must be installed before using -// this field. -func (h *Client) ProductQuantity(productQuantity int64) *Client { - h.productQuantity = productQuantity - h.productQuantitySet = true - return h -} - -// The coupon code associated with a product. Product index -// must be a positive integer between 1 and 200, inclusive. -// For analytics.js the Enhanced Ecommerce plugin must be installed -// before using this field. -func (h *Client) ProductCouponCode(productCouponCode string) *Client { - h.productCouponCode = productCouponCode - h.productCouponCodeSet = true - return h -} - -// The product's position in a list or collection. Product -// index must be a positive integer between 1 and 200, inclusive. -// For analytics.js the Enhanced Ecommerce plugin must be installed -// before using this field. -func (h *Client) ProductPosition(productPosition int64) *Client { - h.productPosition = productPosition - h.productPositionSet = true - return h -} - -// A product-level custom dimension where dimension index is -// a positive integer between 1 and 200, inclusive. Product -// index must be a positive integer between 1 and 200, inclusive. -// For analytics.js the Enhanced Ecommerce plugin must be installed -// before using this field. -func (h *Client) ProductCustomDimension(productCustomDimension string) *Client { - h.productCustomDimension = productCustomDimension - h.productCustomDimensionSet = true - return h -} - -// A product-level custom metric where metric index is a positive -// integer between 1 and 200, inclusive. Product index must -// be a positive integer between 1 and 200, inclusive. For -// analytics.js the Enhanced Ecommerce plugin must be installed -// before using this field. -func (h *Client) ProductCustomMetric(productCustomMetric int64) *Client { - h.productCustomMetric = productCustomMetric - h.productCustomMetricSet = true - return h -} - -// The role of the products included in a hit. If a product -// action is not specified, all product definitions included -// with the hit will be ignored. Must be one of: detail, click, -// add, remove, checkout, checkout_option, purchase, refund. -// For analytics.js the Enhanced Ecommerce plugin must be installed -// before using this field. -func (h *Client) ProductAction(productAction string) *Client { - h.productAction = productAction - h.productActionSet = true - return h -} - -// The transaction ID. This is an additional parameter that -// can be sent when Product Action is set to 'purchase' or -// 'refund'. For analytics.js the Enhanced Ecommerce plugin -// must be installed before using this field. -func (h *Client) TransactionID(transactionID string) *Client { - h.transactionID = transactionID - h.transactionIDSet = true - return h -} - -// The store or affiliation from which this transaction occurred. -// This is an additional parameter that can be sent when Product -// Action is set to 'purchase' or 'refund'. For analytics.js -// the Enhanced Ecommerce plugin must be installed before using -// this field. -func (h *Client) Affiliation(affiliation string) *Client { - h.affiliation = affiliation - h.affiliationSet = true - return h -} - -// The total value of the transaction, including tax and shipping. -// If not sent, this value will be automatically calculated -// using the product quantity and price fields of all products -// in the same hit. This is an additional parameter that can -// be sent when Product Action is set to 'purchase' or 'refund'. -// For analytics.js the Enhanced Ecommerce plugin must be installed -// before using this field. -func (h *Client) Revenue(revenue float64) *Client { - h.revenue = revenue - h.revenueSet = true - return h -} - -// The total tax associated with the transaction. This is an -// additional parameter that can be sent when Product Action -// is set to 'purchase' or 'refund'. For analytics.js the Enhanced -// Ecommerce plugin must be installed before using this field. -func (h *Client) Tax(tax float64) *Client { - h.tax = tax - h.taxSet = true - return h -} - -// The shipping cost associated with the transaction. This -// is an additional parameter that can be sent when Product -// Action is set to 'purchase' or 'refund'. For analytics.js -// the Enhanced Ecommerce plugin must be installed before using -// this field. -func (h *Client) Shipping(shipping float64) *Client { - h.shipping = shipping - h.shippingSet = true - return h -} - -// The transaction coupon redeemed with the transaction. This -// is an additional parameter that can be sent when Product -// Action is set to 'purchase' or 'refund'. For analytics.js -// the Enhanced Ecommerce plugin must be installed before using -// this field. -func (h *Client) CouponCode(couponCode string) *Client { - h.couponCode = couponCode - h.couponCodeSet = true - return h -} - -// The list or collection from which a product action occurred. -// This is an additional parameter that can be sent when Product -// Action is set to 'detail' or 'click'. For analytics.js the -// Enhanced Ecommerce plugin must be installed before using -// this field. -func (h *Client) ProductActionList(productActionList string) *Client { - h.productActionList = productActionList - h.productActionListSet = true - return h -} - -// The step number in a checkout funnel. This is an additional -// parameter that can be sent when Product Action is set to -// 'checkout'. For analytics.js the Enhanced Ecommerce plugin -// must be installed before using this field. -func (h *Client) CheckoutStep(checkoutStep int64) *Client { - h.checkoutStep = checkoutStep - h.checkoutStepSet = true - return h -} - -// Additional information about a checkout step. This is an -// additional parameter that can be sent when Product Action -// is set to 'checkout'. For analytics.js the Enhanced Ecommerce -// plugin must be installed before using this field. -func (h *Client) CheckoutStepOption(checkoutStepOption string) *Client { - h.checkoutStepOption = checkoutStepOption - h.checkoutStepOptionSet = true - return h -} - -// The list or collection to which a product belongs. Impression -// List index must be a positive integer between 1 and 200, -// inclusive. For analytics.js the Enhanced Ecommerce plugin -// must be installed before using this field. -func (h *Client) ProductImpressionListName(productImpressionListName string) *Client { - h.productImpressionListName = productImpressionListName - h.productImpressionListNameSet = true - return h -} - -// The product ID or SKU. Impression List index must be a positive -// integer between 1 and 200, inclusive. Product index must -// be a positive integer between 1 and 200, inclusive. For -// analytics.js the Enhanced Ecommerce plugin must be installed -// before using this field. -func (h *Client) ProductImpressionSKU(productImpressionSKU string) *Client { - h.productImpressionSKU = productImpressionSKU - h.productImpressionSKUSet = true - return h -} - -// The name of the product. Impression List index must be a -// positive integer between 1 and 200, inclusive. Product index -// must be a positive integer between 1 and 200, inclusive. -// For analytics.js the Enhanced Ecommerce plugin must be installed -// before using this field. -func (h *Client) ProductImpressionName(productImpressionName string) *Client { - h.productImpressionName = productImpressionName - h.productImpressionNameSet = true - return h -} - -// The brand associated with the product. Impression List index -// must be a positive integer between 1 and 200, inclusive. -// Product index must be a positive integer between 1 and 200, -// inclusive. For analytics.js the Enhanced Ecommerce plugin -// must be installed before using this field. -func (h *Client) ProductImpressionBrand(productImpressionBrand string) *Client { - h.productImpressionBrand = productImpressionBrand - h.productImpressionBrandSet = true - return h -} - -// The category to which the product belongs. Impression List -// index must be a positive integer between 1 and 200, inclusive. -// Product index must be a positive integer between 1 and 200, -// inclusive. For analytics.js the Enhanced Ecommerce plugin -// must be installed before using this field. -func (h *Client) ProductImpressionCategory(productImpressionCategory string) *Client { - h.productImpressionCategory = productImpressionCategory - h.productImpressionCategorySet = true - return h -} - -// The variant of the product. Impression List index must be -// a positive integer between 1 and 200, inclusive. Product -// index must be a positive integer between 1 and 200, inclusive. -// For analytics.js the Enhanced Ecommerce plugin must be installed -// before using this field. -func (h *Client) ProductImpressionVariant(productImpressionVariant string) *Client { - h.productImpressionVariant = productImpressionVariant - h.productImpressionVariantSet = true - return h -} - -// The product's position in a list or collection. Impression -// List index must be a positive integer between 1 and 200, -// inclusive. Product index must be a positive integer between -// 1 and 200, inclusive. For analytics.js the Enhanced Ecommerce -// plugin must be installed before using this field. -func (h *Client) ProductImpressionPosition(productImpressionPosition int64) *Client { - h.productImpressionPosition = productImpressionPosition - h.productImpressionPositionSet = true - return h -} - -// The price of a product. Impression List index must be a -// positive integer between 1 and 200, inclusive. Product index -// must be a positive integer between 1 and 200, inclusive. -// For analytics.js the Enhanced Ecommerce plugin must be installed -// before using this field. -func (h *Client) ProductImpressionPrice(productImpressionPrice float64) *Client { - h.productImpressionPrice = productImpressionPrice - h.productImpressionPriceSet = true - return h -} - -// A product-level custom dimension where dimension index is -// a positive integer between 1 and 200, inclusive. Impression -// List index must be a positive integer between 1 and 200, -// inclusive. Product index must be a positive integer between -// 1 and 200, inclusive. For analytics.js the Enhanced Ecommerce -// plugin must be installed before using this field. -func (h *Client) ProductImpressionCustomDimension(productImpressionCustomDimension string) *Client { - h.productImpressionCustomDimension = productImpressionCustomDimension - h.productImpressionCustomDimensionSet = true - return h -} - -// A product-level custom metric where metric index is a positive -// integer between 1 and 200, inclusive. Impression List index -// must be a positive integer between 1 and 200, inclusive. -// Product index must be a positive integer between 1 and 200, -// inclusive. For analytics.js the Enhanced Ecommerce plugin -// must be installed before using this field. -func (h *Client) ProductImpressionCustomMetric(productImpressionCustomMetric int64) *Client { - h.productImpressionCustomMetric = productImpressionCustomMetric - h.productImpressionCustomMetricSet = true - return h -} - -// The promotion ID. Promotion index must be a positive integer -// between 1 and 200, inclusive. For analytics.js the Enhanced -// Ecommerce plugin must be installed before using this field. -func (h *Client) PromotionID(promotionID string) *Client { - h.promotionID = promotionID - h.promotionIDSet = true - return h -} - -// The name of the promotion. Promotion index must be a positive -// integer between 1 and 200, inclusive. For analytics.js the -// Enhanced Ecommerce plugin must be installed before using -// this field. -func (h *Client) PromotionName(promotionName string) *Client { - h.promotionName = promotionName - h.promotionNameSet = true - return h -} - -// The creative associated with the promotion. Promotion index -// must be a positive integer between 1 and 200, inclusive. -// For analytics.js the Enhanced Ecommerce plugin must be installed -// before using this field. -func (h *Client) PromotionCreative(promotionCreative string) *Client { - h.promotionCreative = promotionCreative - h.promotionCreativeSet = true - return h -} - -// The position of the creative. Promotion index must be a -// positive integer between 1 and 200, inclusive. For analytics.js -// the Enhanced Ecommerce plugin must be installed before using -// this field. -func (h *Client) PromotionPosition(promotionPosition string) *Client { - h.promotionPosition = promotionPosition - h.promotionPositionSet = true - return h -} - -// Specifies the role of the promotions included in a hit. -// If a promotion action is not specified, the default promotion -// action, 'view', is assumed. To measure a user click on a -// promotion set this to 'promo_click'. For analytics.js the -// Enhanced Ecommerce plugin must be installed before using -// this field. -func (h *Client) PromotionAction(promotionAction string) *Client { - h.promotionAction = promotionAction - h.promotionActionSet = true - return h -} - -// Each custom dimension has an associated index. There is -// a maximum of 20 custom dimensions (200 for Premium accounts). -// The dimension index must be a positive integer between 1 -// and 200, inclusive. -func (h *Client) CustomDimension(customDimension string) *Client { - h.customDimension = customDimension - h.customDimensionSet = true - return h -} - -// Each custom metric has an associated index. There is a maximum -// of 20 custom metrics (200 for Premium accounts). The metric -// index must be a positive integer between 1 and 200, inclusive. -func (h *Client) CustomMetric(customMetric int64) *Client { - h.customMetric = customMetric - h.customMetricSet = true - return h -} - -// This parameter specifies that this user has been exposed -// to an experiment with the given ID. It should be sent in -// conjunction with the Experiment Variant parameter. -func (h *Client) ExperimentID(experimentID string) *Client { - h.experimentID = experimentID - h.experimentIDSet = true - return h -} - -// This parameter specifies that this user has been exposed -// to a particular variation of an experiment. It should be -// sent in conjunction with the Experiment ID parameter. -func (h *Client) ExperimentVariant(experimentVariant string) *Client { - h.experimentVariant = experimentVariant - h.experimentVariantSet = true - return h -} - -// DimensionIndex is required by other properties -func (h *Client) DimensionIndex(dimensionIndex string) *Client { - h.dimensionIndex = dimensionIndex - h.dimensionIndexSet = true - return h -} - -// ListIndex is required by other properties -func (h *Client) ListIndex(listIndex string) *Client { - h.listIndex = listIndex - h.listIndexSet = true - return h -} - -// MetricIndex is required by other properties -func (h *Client) MetricIndex(metricIndex string) *Client { - h.metricIndex = metricIndex - h.metricIndexSet = true - return h -} - -// ProductIndex is required by other properties -func (h *Client) ProductIndex(productIndex string) *Client { - h.productIndex = productIndex - h.productIndexSet = true - return h -} - -// PromoIndex is required by other properties -func (h *Client) PromoIndex(promoIndex string) *Client { - h.promoIndex = promoIndex - h.promoIndexSet = true - return h -} - -func (h *Client) Copy() *Client { - c := *h - return &c -} diff --git a/vendor/github.com/jpillora/go-ogle-analytics/type-event.go b/vendor/github.com/jpillora/go-ogle-analytics/type-event.go deleted file mode 100644 index b27c36849..000000000 --- a/vendor/github.com/jpillora/go-ogle-analytics/type-event.go +++ /dev/null @@ -1,58 +0,0 @@ -package ga - -import "net/url" - -//WARNING: This file was generated. Do not edit. - -//Event Hit Type -type Event struct { - category string - action string - label string - labelSet bool - value int64 - valueSet bool -} - -// NewEvent creates a new Event Hit Type. -// Specifies the event category. -// Specifies the event action. - -func NewEvent(category string, action string) *Event { - h := &Event{ - category: category, - action: action, - } - return h -} - -func (h *Event) addFields(v url.Values) error { - v.Add("ec", h.category) - v.Add("ea", h.action) - if h.labelSet { - v.Add("el", h.label) - } - if h.valueSet { - v.Add("ev", int2str(h.value)) - } - return nil -} - -// Specifies the event label. -func (h *Event) Label(label string) *Event { - h.label = label - h.labelSet = true - return h -} - -// Specifies the event value. Values must be non-negative. -func (h *Event) Value(value int64) *Event { - h.value = value - h.valueSet = true - return h -} - -func (h *Event) Copy() *Event { - c := *h - return &c -} diff --git a/vendor/github.com/jpillora/go-ogle-analytics/type-exception.go b/vendor/github.com/jpillora/go-ogle-analytics/type-exception.go deleted file mode 100644 index f5dd25869..000000000 --- a/vendor/github.com/jpillora/go-ogle-analytics/type-exception.go +++ /dev/null @@ -1,49 +0,0 @@ -package ga - -import "net/url" - -//WARNING: This file was generated. Do not edit. - -//Exception Hit Type -type Exception struct { - description string - descriptionSet bool - isExceptionFatal bool - isExceptionFatalSet bool -} - -// NewException creates a new Exception Hit Type. - -func NewException() *Exception { - h := &Exception{} - return h -} - -func (h *Exception) addFields(v url.Values) error { - if h.descriptionSet { - v.Add("exd", h.description) - } - if h.isExceptionFatalSet { - v.Add("exf", bool2str(h.isExceptionFatal)) - } - return nil -} - -// Specifies the description of an exception. -func (h *Exception) Description(description string) *Exception { - h.description = description - h.descriptionSet = true - return h -} - -// Specifies whether the exception was fatal. -func (h *Exception) IsExceptionFatal(isExceptionFatal bool) *Exception { - h.isExceptionFatal = isExceptionFatal - h.isExceptionFatalSet = true - return h -} - -func (h *Exception) Copy() *Exception { - c := *h - return &c -} diff --git a/vendor/github.com/jpillora/go-ogle-analytics/type-item.go b/vendor/github.com/jpillora/go-ogle-analytics/type-item.go deleted file mode 100644 index 9675c716d..000000000 --- a/vendor/github.com/jpillora/go-ogle-analytics/type-item.go +++ /dev/null @@ -1,98 +0,0 @@ -package ga - -import "net/url" - -//WARNING: This file was generated. Do not edit. - -//Item Hit Type -type Item struct { - iD string - name string - price float64 - priceSet bool - quantity int64 - quantitySet bool - code string - codeSet bool - category string - categorySet bool - currencyCode string - currencyCodeSet bool -} - -// NewItem creates a new Item Hit Type. -// A unique identifier for the transaction. This value should -// be the same for both the Transaction hit and Items hits -// associated to the particular transaction. -// Specifies the item name. - -func NewItem(iD string, name string) *Item { - h := &Item{ - iD: iD, - name: name, - } - return h -} - -func (h *Item) addFields(v url.Values) error { - v.Add("ti", h.iD) - v.Add("in", h.name) - if h.priceSet { - v.Add("ip", float2str(h.price)) - } - if h.quantitySet { - v.Add("iq", int2str(h.quantity)) - } - if h.codeSet { - v.Add("ic", h.code) - } - if h.categorySet { - v.Add("iv", h.category) - } - if h.currencyCodeSet { - v.Add("cu", h.currencyCode) - } - return nil -} - -// Specifies the price for a single item / unit. -func (h *Item) Price(price float64) *Item { - h.price = price - h.priceSet = true - return h -} - -// Specifies the number of items purchased. -func (h *Item) Quantity(quantity int64) *Item { - h.quantity = quantity - h.quantitySet = true - return h -} - -// Specifies the SKU or item code. -func (h *Item) Code(code string) *Item { - h.code = code - h.codeSet = true - return h -} - -// Specifies the category that the item belongs to. -func (h *Item) Category(category string) *Item { - h.category = category - h.categorySet = true - return h -} - -// When present indicates the local currency for all transaction -// currency values. Value should be a valid ISO 4217 currency -// code. -func (h *Item) CurrencyCode(currencyCode string) *Item { - h.currencyCode = currencyCode - h.currencyCodeSet = true - return h -} - -func (h *Item) Copy() *Item { - c := *h - return &c -} diff --git a/vendor/github.com/jpillora/go-ogle-analytics/type-pageview.go b/vendor/github.com/jpillora/go-ogle-analytics/type-pageview.go deleted file mode 100644 index bc8bc5408..000000000 --- a/vendor/github.com/jpillora/go-ogle-analytics/type-pageview.go +++ /dev/null @@ -1,24 +0,0 @@ -package ga - -import "net/url" - -//WARNING: This file was generated. Do not edit. - -//Pageview Hit Type -type Pageview struct { -} - -// NewPageview creates a new Pageview Hit Type. -func NewPageview() *Pageview { - h := &Pageview{} - return h -} - -func (h *Pageview) addFields(v url.Values) error { - return nil -} - -func (h *Pageview) Copy() *Pageview { - c := *h - return &c -} diff --git a/vendor/github.com/jpillora/go-ogle-analytics/type-screenview.go b/vendor/github.com/jpillora/go-ogle-analytics/type-screenview.go deleted file mode 100644 index 859a16e37..000000000 --- a/vendor/github.com/jpillora/go-ogle-analytics/type-screenview.go +++ /dev/null @@ -1,24 +0,0 @@ -package ga - -import "net/url" - -//WARNING: This file was generated. Do not edit. - -//Screenview Hit Type -type Screenview struct { -} - -// NewScreenview creates a new Screenview Hit Type. -func NewScreenview() *Screenview { - h := &Screenview{} - return h -} - -func (h *Screenview) addFields(v url.Values) error { - return nil -} - -func (h *Screenview) Copy() *Screenview { - c := *h - return &c -} diff --git a/vendor/github.com/jpillora/go-ogle-analytics/type-social.go b/vendor/github.com/jpillora/go-ogle-analytics/type-social.go deleted file mode 100644 index 3f8cb34d3..000000000 --- a/vendor/github.com/jpillora/go-ogle-analytics/type-social.go +++ /dev/null @@ -1,41 +0,0 @@ -package ga - -import "net/url" - -//WARNING: This file was generated. Do not edit. - -//Social Hit Type -type Social struct { - network string - action string - actionTarget string -} - -// NewSocial creates a new Social Hit Type. -// Specifies the social network, for example Facebook or Google -// Plus. -// Specifies the social interaction action. For example on -// Google Plus when a user clicks the +1 button, the social -// action is 'plus'. -// Specifies the target of a social interaction. This value -// is typically a URL but can be any text. -func NewSocial(network string, action string, actionTarget string) *Social { - h := &Social{ - network: network, - action: action, - actionTarget: actionTarget, - } - return h -} - -func (h *Social) addFields(v url.Values) error { - v.Add("sn", h.network) - v.Add("sa", h.action) - v.Add("st", h.actionTarget) - return nil -} - -func (h *Social) Copy() *Social { - c := *h - return &c -} diff --git a/vendor/github.com/jpillora/go-ogle-analytics/type-timing.go b/vendor/github.com/jpillora/go-ogle-analytics/type-timing.go deleted file mode 100644 index a980520db..000000000 --- a/vendor/github.com/jpillora/go-ogle-analytics/type-timing.go +++ /dev/null @@ -1,177 +0,0 @@ -package ga - -import "net/url" - -//WARNING: This file was generated. Do not edit. - -//Timing Hit Type -type Timing struct { - userTimingCategory string - userTimingCategorySet bool - userTimingVariableName string - userTimingVariableNameSet bool - userTimingTime int64 - userTimingTimeSet bool - userTimingLabel string - userTimingLabelSet bool - pageLoadTime int64 - pageLoadTimeSet bool - dNSTime int64 - dNSTimeSet bool - pageDownloadTime int64 - pageDownloadTimeSet bool - redirectResponseTime int64 - redirectResponseTimeSet bool - tCPConnectTime int64 - tCPConnectTimeSet bool - serverResponseTime int64 - serverResponseTimeSet bool - dOMInteractiveTime int64 - dOMInteractiveTimeSet bool - contentLoadTime int64 - contentLoadTimeSet bool -} - -// NewTiming creates a new Timing Hit Type. - -func NewTiming() *Timing { - h := &Timing{} - return h -} - -func (h *Timing) addFields(v url.Values) error { - if h.userTimingCategorySet { - v.Add("utc", h.userTimingCategory) - } - if h.userTimingVariableNameSet { - v.Add("utv", h.userTimingVariableName) - } - if h.userTimingTimeSet { - v.Add("utt", int2str(h.userTimingTime)) - } - if h.userTimingLabelSet { - v.Add("utl", h.userTimingLabel) - } - if h.pageLoadTimeSet { - v.Add("plt", int2str(h.pageLoadTime)) - } - if h.dNSTimeSet { - v.Add("dns", int2str(h.dNSTime)) - } - if h.pageDownloadTimeSet { - v.Add("pdt", int2str(h.pageDownloadTime)) - } - if h.redirectResponseTimeSet { - v.Add("rrt", int2str(h.redirectResponseTime)) - } - if h.tCPConnectTimeSet { - v.Add("tcp", int2str(h.tCPConnectTime)) - } - if h.serverResponseTimeSet { - v.Add("srt", int2str(h.serverResponseTime)) - } - if h.dOMInteractiveTimeSet { - v.Add("dit", int2str(h.dOMInteractiveTime)) - } - if h.contentLoadTimeSet { - v.Add("clt", int2str(h.contentLoadTime)) - } - return nil -} - -// Specifies the user timing category. -func (h *Timing) UserTimingCategory(userTimingCategory string) *Timing { - h.userTimingCategory = userTimingCategory - h.userTimingCategorySet = true - return h -} - -// Specifies the user timing variable. -func (h *Timing) UserTimingVariableName(userTimingVariableName string) *Timing { - h.userTimingVariableName = userTimingVariableName - h.userTimingVariableNameSet = true - return h -} - -// Specifies the user timing value. The value is in milliseconds. -func (h *Timing) UserTimingTime(userTimingTime int64) *Timing { - h.userTimingTime = userTimingTime - h.userTimingTimeSet = true - return h -} - -// Specifies the user timing label. -func (h *Timing) UserTimingLabel(userTimingLabel string) *Timing { - h.userTimingLabel = userTimingLabel - h.userTimingLabelSet = true - return h -} - -// Specifies the time it took for a page to load. The value -// is in milliseconds. -func (h *Timing) PageLoadTime(pageLoadTime int64) *Timing { - h.pageLoadTime = pageLoadTime - h.pageLoadTimeSet = true - return h -} - -// Specifies the time it took to do a DNS lookup.The value -// is in milliseconds. -func (h *Timing) DNSTime(dNSTime int64) *Timing { - h.dNSTime = dNSTime - h.dNSTimeSet = true - return h -} - -// Specifies the time it took for the page to be downloaded. -// The value is in milliseconds. -func (h *Timing) PageDownloadTime(pageDownloadTime int64) *Timing { - h.pageDownloadTime = pageDownloadTime - h.pageDownloadTimeSet = true - return h -} - -// Specifies the time it took for any redirects to happen. -// The value is in milliseconds. -func (h *Timing) RedirectResponseTime(redirectResponseTime int64) *Timing { - h.redirectResponseTime = redirectResponseTime - h.redirectResponseTimeSet = true - return h -} - -// Specifies the time it took for a TCP connection to be made. -// The value is in milliseconds. -func (h *Timing) TCPConnectTime(tCPConnectTime int64) *Timing { - h.tCPConnectTime = tCPConnectTime - h.tCPConnectTimeSet = true - return h -} - -// Specifies the time it took for the server to respond after -// the connect time. The value is in milliseconds. -func (h *Timing) ServerResponseTime(serverResponseTime int64) *Timing { - h.serverResponseTime = serverResponseTime - h.serverResponseTimeSet = true - return h -} - -// Specifies the time it took for Document.readyState to be -// 'interactive'. The value is in milliseconds. -func (h *Timing) DOMInteractiveTime(dOMInteractiveTime int64) *Timing { - h.dOMInteractiveTime = dOMInteractiveTime - h.dOMInteractiveTimeSet = true - return h -} - -// Specifies the time it took for the DOMContentLoaded Event -// to fire. The value is in milliseconds. -func (h *Timing) ContentLoadTime(contentLoadTime int64) *Timing { - h.contentLoadTime = contentLoadTime - h.contentLoadTimeSet = true - return h -} - -func (h *Timing) Copy() *Timing { - c := *h - return &c -} diff --git a/vendor/github.com/jpillora/go-ogle-analytics/type-transaction.go b/vendor/github.com/jpillora/go-ogle-analytics/type-transaction.go deleted file mode 100644 index 55c781e03..000000000 --- a/vendor/github.com/jpillora/go-ogle-analytics/type-transaction.go +++ /dev/null @@ -1,95 +0,0 @@ -package ga - -import "net/url" - -//WARNING: This file was generated. Do not edit. - -//Transaction Hit Type -type Transaction struct { - iD string - affiliation string - affiliationSet bool - revenue float64 - revenueSet bool - shipping float64 - shippingSet bool - tax float64 - taxSet bool - currencyCode string - currencyCodeSet bool -} - -// NewTransaction creates a new Transaction Hit Type. -// A unique identifier for the transaction. This value should -// be the same for both the Transaction hit and Items hits -// associated to the particular transaction. - -func NewTransaction(iD string) *Transaction { - h := &Transaction{ - iD: iD, - } - return h -} - -func (h *Transaction) addFields(v url.Values) error { - v.Add("ti", h.iD) - if h.affiliationSet { - v.Add("ta", h.affiliation) - } - if h.revenueSet { - v.Add("tr", float2str(h.revenue)) - } - if h.shippingSet { - v.Add("ts", float2str(h.shipping)) - } - if h.taxSet { - v.Add("tt", float2str(h.tax)) - } - if h.currencyCodeSet { - v.Add("cu", h.currencyCode) - } - return nil -} - -// Specifies the affiliation or store name. -func (h *Transaction) Affiliation(affiliation string) *Transaction { - h.affiliation = affiliation - h.affiliationSet = true - return h -} - -// Specifies the total revenue associated with the transaction. -// This value should include any shipping or tax costs. -func (h *Transaction) Revenue(revenue float64) *Transaction { - h.revenue = revenue - h.revenueSet = true - return h -} - -// Specifies the total shipping cost of the transaction. -func (h *Transaction) Shipping(shipping float64) *Transaction { - h.shipping = shipping - h.shippingSet = true - return h -} - -// Specifies the total tax of the transaction. -func (h *Transaction) Tax(tax float64) *Transaction { - h.tax = tax - h.taxSet = true - return h -} - -// When present indicates the local currency for all transaction -// currency values. Value should be a valid ISO 4217 currency -// code. -func (h *Transaction) CurrencyCode(currencyCode string) *Transaction { - h.currencyCode = currencyCode - h.currencyCodeSet = true - return h -} - -func (h *Transaction) Copy() *Transaction { - c := *h - return &c -} diff --git a/vendor/gomodules.xyz/flags/go.mod b/vendor/gomodules.xyz/flags/go.mod index 5ae74d0d4..ed6873dea 100644 --- a/vendor/gomodules.xyz/flags/go.mod +++ b/vendor/gomodules.xyz/flags/go.mod @@ -5,5 +5,5 @@ go 1.16 require ( github.com/spf13/cobra v1.1.3 github.com/spf13/pflag v1.0.5 - gomodules.xyz/sets v0.1.0 + gomodules.xyz/sets v0.2.0 ) diff --git a/vendor/gomodules.xyz/flags/go.sum b/vendor/gomodules.xyz/flags/go.sum index f5402d0c0..3786ed8ee 100644 --- a/vendor/gomodules.xyz/flags/go.sum +++ b/vendor/gomodules.xyz/flags/go.sum @@ -248,8 +248,8 @@ golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gomodules.xyz/sets v0.1.0 h1:G/9/DV98gZw4uTLe9gNOnctk57P5kW8bYcBYOaFyAzM= -gomodules.xyz/sets v0.1.0/go.mod h1:jKgNp01/iDs+svOWXaPk5cKP3VXy0mWUoTF/ore+aMc= +gomodules.xyz/sets v0.2.0 h1:T8YPBWDaPGh/+HBjfL2JYdWeNqxNMoMofEdlvhLKE9w= +gomodules.xyz/sets v0.2.0/go.mod h1:jKgNp01/iDs+svOWXaPk5cKP3VXy0mWUoTF/ore+aMc= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= diff --git a/vendor/gomodules.xyz/homedir/LICENSE b/vendor/gomodules.xyz/homedir/LICENSE deleted file mode 100644 index d64569567..000000000 --- a/vendor/gomodules.xyz/homedir/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/vendor/gomodules.xyz/homedir/README.md b/vendor/gomodules.xyz/homedir/README.md deleted file mode 100644 index c65b4340c..000000000 --- a/vendor/gomodules.xyz/homedir/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# homedir - -Fork of https://github.com/kubernetes/client-go/tree/master/util/homedir diff --git a/vendor/gomodules.xyz/homedir/go.mod b/vendor/gomodules.xyz/homedir/go.mod deleted file mode 100644 index b540181a2..000000000 --- a/vendor/gomodules.xyz/homedir/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module gomodules.xyz/homedir - -go 1.15 diff --git a/vendor/gomodules.xyz/homedir/homedir.go b/vendor/gomodules.xyz/homedir/homedir.go deleted file mode 100644 index 3fdbeb8cf..000000000 --- a/vendor/gomodules.xyz/homedir/homedir.go +++ /dev/null @@ -1,92 +0,0 @@ -/* -Copyright 2016 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package homedir - -import ( - "os" - "path/filepath" - "runtime" -) - -// HomeDir returns the home directory for the current user. -// On Windows: -// 1. the first of %HOME%, %HOMEDRIVE%%HOMEPATH%, %USERPROFILE% containing a `.kube\config` file is returned. -// 2. if none of those locations contain a `.kube\config` file, the first of %HOME%, %USERPROFILE%, %HOMEDRIVE%%HOMEPATH% that exists and is writeable is returned. -// 3. if none of those locations are writeable, the first of %HOME%, %USERPROFILE%, %HOMEDRIVE%%HOMEPATH% that exists is returned. -// 4. if none of those locations exists, the first of %HOME%, %USERPROFILE%, %HOMEDRIVE%%HOMEPATH% that is set is returned. -func HomeDir() string { - if runtime.GOOS == "windows" { - home := os.Getenv("HOME") - homeDriveHomePath := "" - if homeDrive, homePath := os.Getenv("HOMEDRIVE"), os.Getenv("HOMEPATH"); len(homeDrive) > 0 && len(homePath) > 0 { - homeDriveHomePath = homeDrive + homePath - } - userProfile := os.Getenv("USERPROFILE") - - // Return first of %HOME%, %HOMEDRIVE%/%HOMEPATH%, %USERPROFILE% that contains a `.kube\config` file. - // %HOMEDRIVE%/%HOMEPATH% is preferred over %USERPROFILE% for backwards-compatibility. - for _, p := range []string{home, homeDriveHomePath, userProfile} { - if len(p) == 0 { - continue - } - if _, err := os.Stat(filepath.Join(p, ".kube", "config")); err != nil { - continue - } - return p - } - - firstSetPath := "" - firstExistingPath := "" - - // Prefer %USERPROFILE% over %HOMEDRIVE%/%HOMEPATH% for compatibility with other auth-writing tools - for _, p := range []string{home, userProfile, homeDriveHomePath} { - if len(p) == 0 { - continue - } - if len(firstSetPath) == 0 { - // remember the first path that is set - firstSetPath = p - } - info, err := os.Stat(p) - if err != nil { - continue - } - if len(firstExistingPath) == 0 { - // remember the first path that exists - firstExistingPath = p - } - if info.IsDir() && info.Mode().Perm()&(1<<(uint(7))) != 0 { - // return first path that is writeable - return p - } - } - - // If none are writeable, return first location that exists - if len(firstExistingPath) > 0 { - return firstExistingPath - } - - // If none exist, return first location that is set - if len(firstSetPath) > 0 { - return firstSetPath - } - - // We've got nothing - return "" - } - return os.Getenv("HOME") -} diff --git a/vendor/gomodules.xyz/logs/go.mod b/vendor/gomodules.xyz/logs/go.mod index de0fcbc6c..554c6d027 100644 --- a/vendor/gomodules.xyz/logs/go.mod +++ b/vendor/gomodules.xyz/logs/go.mod @@ -5,7 +5,7 @@ go 1.16 require ( github.com/spf13/cobra v1.1.3 github.com/spf13/pflag v1.0.5 - gomodules.xyz/flags v0.1.2 - gomodules.xyz/wait v0.0.0-20210218105358-639bd9211545 + gomodules.xyz/flags v0.1.3 + gomodules.xyz/wait v0.2.0 k8s.io/klog/v2 v2.8.0 ) diff --git a/vendor/gomodules.xyz/logs/go.sum b/vendor/gomodules.xyz/logs/go.sum index 6035e3941..1ab9cf799 100644 --- a/vendor/gomodules.xyz/logs/go.sum +++ b/vendor/gomodules.xyz/logs/go.sum @@ -252,12 +252,12 @@ golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gomodules.xyz/clock v0.0.0-20200817085942-06523dba733f h1:hTyhR4r+tj1Uq7/PpFxLTzbeA0LhMVp7bEYfhkzFjdY= gomodules.xyz/clock v0.0.0-20200817085942-06523dba733f/go.mod h1:K3m7N+nBOlf91/tpv8REUGwsAgaKFwElQCuiLhm12AQ= -gomodules.xyz/flags v0.1.2 h1:z/XHHGmduLYY/aSkzcQWJgXWIs3TCTSTLkmwtCjoizg= -gomodules.xyz/flags v0.1.2/go.mod h1:CIzWYc2zYDs5lQyGJsjhqKgIj+LriNLpiYuX8Pk34gc= -gomodules.xyz/sets v0.1.0 h1:G/9/DV98gZw4uTLe9gNOnctk57P5kW8bYcBYOaFyAzM= -gomodules.xyz/sets v0.1.0/go.mod h1:jKgNp01/iDs+svOWXaPk5cKP3VXy0mWUoTF/ore+aMc= -gomodules.xyz/wait v0.0.0-20210218105358-639bd9211545 h1:iiD24jN1H8PzliVe1igIzYsx8+VmbXG12y9UUSupUJU= -gomodules.xyz/wait v0.0.0-20210218105358-639bd9211545/go.mod h1:g/epKzZQuCqgvhzhaoG4cSBNGHqnOrhFR4Q7szDJ1JM= +gomodules.xyz/flags v0.1.3 h1:jQ06+EfmoMv5NvjXvJon03dOhLU+FF0TQMWN7I6qpzs= +gomodules.xyz/flags v0.1.3/go.mod h1:e+kvBLnqdEWGG670SKOYag1CXStM2Slrxq01OIK3tFs= +gomodules.xyz/sets v0.2.0 h1:T8YPBWDaPGh/+HBjfL2JYdWeNqxNMoMofEdlvhLKE9w= +gomodules.xyz/sets v0.2.0/go.mod h1:jKgNp01/iDs+svOWXaPk5cKP3VXy0mWUoTF/ore+aMc= +gomodules.xyz/wait v0.2.0 h1:HnRIh+cvIrrKIFaXoYznCVVirv2/2xu3KzjSzsQmYAY= +gomodules.xyz/wait v0.2.0/go.mod h1:g/epKzZQuCqgvhzhaoG4cSBNGHqnOrhFR4Q7szDJ1JM= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= diff --git a/vendor/gomodules.xyz/logs/lib.go b/vendor/gomodules.xyz/logs/lib.go index ca844da97..3bec711b2 100644 --- a/vendor/gomodules.xyz/logs/lib.go +++ b/vendor/gomodules.xyz/logs/lib.go @@ -75,9 +75,9 @@ func Init(rootCmd *cobra.Command, printFlags bool) { return } - fs := rootCmd.Flags() if fn := rootCmd.PersistentPreRunE; fn != nil { rootCmd.PersistentPreRunE = func(cmd *cobra.Command, args []string) error { + fs := cmd.Flags() if printFlags { flags.PrintFlags(fs) } @@ -86,6 +86,7 @@ func Init(rootCmd *cobra.Command, printFlags bool) { } } else if fn := rootCmd.PersistentPreRun; fn != nil { rootCmd.PersistentPreRun = func(cmd *cobra.Command, args []string) { + fs := cmd.Flags() if printFlags { flags.PrintFlags(fs) } @@ -94,6 +95,7 @@ func Init(rootCmd *cobra.Command, printFlags bool) { } } else { rootCmd.PersistentPreRun = func(cmd *cobra.Command, args []string) { + fs := cmd.Flags() if printFlags { flags.PrintFlags(fs) } diff --git a/vendor/gomodules.xyz/wait/README.md b/vendor/gomodules.xyz/wait/README.md index d3b13378c..c325fc92b 100644 --- a/vendor/gomodules.xyz/wait/README.md +++ b/vendor/gomodules.xyz/wait/README.md @@ -2,4 +2,4 @@ # wait -This library has been forked from https://github.com/kubernetes/apimachinery/tree/v0.18.8/pkg/util/wait so that it can easily used in non-k8s related projects. +This library has been forked from https://github.com/kubernetes/apimachinery/tree/v0.22.0-alpha.2/pkg/util/wait so that it can easily used in non-k8s related projects. diff --git a/vendor/gomodules.xyz/wait/wait.go b/vendor/gomodules.xyz/wait/wait.go index 17a69eb62..a53dfb8ac 100644 --- a/vendor/gomodules.xyz/wait/wait.go +++ b/vendor/gomodules.xyz/wait/wait.go @@ -204,10 +204,29 @@ var ErrWaitTimeout = errors.New("timed out waiting for the condition") // if the loop should be aborted. type ConditionFunc func() (done bool, err error) +// ConditionWithContextFunc returns true if the condition is satisfied, or an error +// if the loop should be aborted. +// +// The caller passes along a context that can be used by the condition function. +type ConditionWithContextFunc func(context.Context) (done bool, err error) + +// WithContext converts a ConditionFunc into a ConditionWithContextFunc +func (cf ConditionFunc) WithContext() ConditionWithContextFunc { + return func(context.Context) (done bool, err error) { + return cf() + } +} + // runConditionWithCrashProtection runs a ConditionFunc with crash protection func runConditionWithCrashProtection(condition ConditionFunc) (bool, error) { + return runConditionWithCrashProtectionWithContext(context.TODO(), condition.WithContext()) +} + +// runConditionWithCrashProtectionWithContext runs a +// ConditionWithContextFunc with crash protection. +func runConditionWithCrashProtectionWithContext(ctx context.Context, condition ConditionWithContextFunc) (bool, error) { defer handleCrash() - return condition() + return condition(ctx) } // Backoff holds parameters applied to a Backoff function. @@ -417,38 +436,42 @@ func ExponentialBackoff(backoff Backoff, condition ConditionFunc) error { // // If you want to Poll something forever, see PollInfinite. func Poll(interval, timeout time.Duration, condition ConditionFunc) error { - return pollInternal(poller(interval, timeout), condition) + return PollWithContext(context.Background(), interval, timeout, condition.WithContext()) } -func pollInternal(wait WaitFunc, condition ConditionFunc) error { - done := make(chan struct{}) - defer close(done) - return WaitFor(wait, condition, done) -} - -// PollImmediate tries a condition func until it returns true, an error, or the timeout -// is reached. +// PollWithContext tries a condition func until it returns true, an error, +// or when the context expires or the timeout is reached, whichever +// happens first. // -// PollImmediate always checks 'condition' before waiting for the interval. 'condition' -// will always be invoked at least once. +// PollWithContext always waits the interval before the run of 'condition'. +// 'condition' will always be invoked at least once. // // Some intervals may be missed if the condition takes too long or the time // window is too short. // -// If you want to immediately Poll something forever, see PollImmediateInfinite. -func PollImmediate(interval, timeout time.Duration, condition ConditionFunc) error { - return pollImmediateInternal(poller(interval, timeout), condition) +// If you want to Poll something forever, see PollInfinite. +func PollWithContext(ctx context.Context, interval, timeout time.Duration, condition ConditionWithContextFunc) error { + return poll(ctx, false, poller(interval, timeout), condition) } -func pollImmediateInternal(wait WaitFunc, condition ConditionFunc) error { - done, err := runConditionWithCrashProtection(condition) - if err != nil { - return err - } - if done { - return nil - } - return pollInternal(wait, condition) +// PollUntil tries a condition func until it returns true, an error or stopCh is +// closed. +// +// PollUntil always waits interval before the first run of 'condition'. +// 'condition' will always be invoked at least once. +func PollUntil(interval time.Duration, condition ConditionFunc, stopCh <-chan struct{}) error { + ctx, cancel := contextForChannel(stopCh) + defer cancel() + return PollUntilWithContext(ctx, interval, condition.WithContext()) +} + +// PollUntilWithContext tries a condition func until it returns true, +// an error or the specified context is cancelled or expired. +// +// PollUntilWithContext always waits interval before the first run of 'condition'. +// 'condition' will always be invoked at least once. +func PollUntilWithContext(ctx context.Context, interval time.Duration, condition ConditionWithContextFunc) error { + return poll(ctx, false, poller(interval, 0), condition) } // PollInfinite tries a condition func until it returns true or an error @@ -458,37 +481,45 @@ func pollImmediateInternal(wait WaitFunc, condition ConditionFunc) error { // Some intervals may be missed if the condition takes too long or the time // window is too short. func PollInfinite(interval time.Duration, condition ConditionFunc) error { - done := make(chan struct{}) - defer close(done) - return PollUntil(interval, condition, done) + return PollInfiniteWithContext(context.Background(), interval, condition.WithContext()) } -// PollImmediateInfinite tries a condition func until it returns true or an error +// PollInfiniteWithContext tries a condition func until it returns true or an error // -// PollImmediateInfinite runs the 'condition' before waiting for the interval. +// PollInfiniteWithContext always waits the interval before the run of 'condition'. // // Some intervals may be missed if the condition takes too long or the time // window is too short. -func PollImmediateInfinite(interval time.Duration, condition ConditionFunc) error { - done, err := runConditionWithCrashProtection(condition) - if err != nil { - return err - } - if done { - return nil - } - return PollInfinite(interval, condition) +func PollInfiniteWithContext(ctx context.Context, interval time.Duration, condition ConditionWithContextFunc) error { + return poll(ctx, false, poller(interval, 0), condition) } -// PollUntil tries a condition func until it returns true, an error or stopCh is -// closed. +// PollImmediate tries a condition func until it returns true, an error, or the timeout +// is reached. // -// PollUntil always waits interval before the first run of 'condition'. +// PollImmediate always checks 'condition' before waiting for the interval. 'condition' +// will always be invoked at least once. +// +// Some intervals may be missed if the condition takes too long or the time +// window is too short. +// +// If you want to immediately Poll something forever, see PollImmediateInfinite. +func PollImmediate(interval, timeout time.Duration, condition ConditionFunc) error { + return PollImmediateWithContext(context.Background(), interval, timeout, condition.WithContext()) +} + +// PollImmediateWithContext tries a condition func until it returns true, an error, +// or the timeout is reached or the specified context expires, whichever happens first. +// +// PollImmediateWithContext always checks 'condition' before waiting for the interval. // 'condition' will always be invoked at least once. -func PollUntil(interval time.Duration, condition ConditionFunc, stopCh <-chan struct{}) error { - ctx, cancel := contextForChannel(stopCh) - defer cancel() - return WaitFor(poller(interval, 0), condition, ctx.Done()) +// +// Some intervals may be missed if the condition takes too long or the time +// window is too short. +// +// If you want to immediately Poll something forever, see PollImmediateInfinite. +func PollImmediateWithContext(ctx context.Context, interval, timeout time.Duration, condition ConditionWithContextFunc) error { + return poll(ctx, true, poller(interval, timeout), condition) } // PollImmediateUntil tries a condition func until it returns true, an error or stopCh is closed. @@ -496,18 +527,67 @@ func PollUntil(interval time.Duration, condition ConditionFunc, stopCh <-chan st // PollImmediateUntil runs the 'condition' before waiting for the interval. // 'condition' will always be invoked at least once. func PollImmediateUntil(interval time.Duration, condition ConditionFunc, stopCh <-chan struct{}) error { - done, err := condition() - if err != nil { - return err - } - if done { - return nil + ctx, cancel := contextForChannel(stopCh) + defer cancel() + return PollImmediateUntilWithContext(ctx, interval, condition.WithContext()) +} + +// PollImmediateUntilWithContext tries a condition func until it returns true, +// an error or the specified context is cancelled or expired. +// +// PollImmediateUntilWithContext runs the 'condition' before waiting for the interval. +// 'condition' will always be invoked at least once. +func PollImmediateUntilWithContext(ctx context.Context, interval time.Duration, condition ConditionWithContextFunc) error { + return poll(ctx, true, poller(interval, 0), condition) +} + +// PollImmediateInfinite tries a condition func until it returns true or an error +// +// PollImmediateInfinite runs the 'condition' before waiting for the interval. +// +// Some intervals may be missed if the condition takes too long or the time +// window is too short. +func PollImmediateInfinite(interval time.Duration, condition ConditionFunc) error { + return PollImmediateInfiniteWithContext(context.Background(), interval, condition.WithContext()) +} + +// PollImmediateInfiniteWithContext tries a condition func until it returns true +// or an error or the specified context gets cancelled or expired. +// +// PollImmediateInfiniteWithContext runs the 'condition' before waiting for the interval. +// +// Some intervals may be missed if the condition takes too long or the time +// window is too short. +func PollImmediateInfiniteWithContext(ctx context.Context, interval time.Duration, condition ConditionWithContextFunc) error { + return poll(ctx, true, poller(interval, 0), condition) +} + +// Internally used, each of the the public 'Poll*' function defined in this +// package should invoke this internal function with appropriate parameters. +// ctx: the context specified by the caller, for infinite polling pass +// a context that never gets cancelled or expired. +// immediate: if true, the 'condition' will be invoked before waiting for the interval, +// in this case 'condition' will always be invoked at least once. +// wait: user specified WaitFunc function that controls at what interval the condition +// function should be invoked periodically and whether it is bound by a timeout. +// condition: user specified ConditionWithContextFunc function. +func poll(ctx context.Context, immediate bool, wait WaitWithContextFunc, condition ConditionWithContextFunc) error { + if immediate { + done, err := runConditionWithCrashProtectionWithContext(ctx, condition) + if err != nil { + return err + } + if done { + return nil + } } + select { - case <-stopCh: + case <-ctx.Done(): + // returning ctx.Err() will break backward compatibility return ErrWaitTimeout default: - return PollUntil(interval, condition, stopCh) + return WaitForWithContext(ctx, wait, condition) } } @@ -515,6 +595,20 @@ func PollImmediateUntil(interval time.Duration, condition ConditionFunc, stopCh // should be executed and is closed when the last test should be invoked. type WaitFunc func(done <-chan struct{}) <-chan struct{} +// WithContext converts the WaitFunc to an equivalent WaitWithContextFunc +func (w WaitFunc) WithContext() WaitWithContextFunc { + return func(ctx context.Context) <-chan struct{} { + return w(ctx.Done()) + } +} + +// WaitWithContextFunc creates a channel that receives an item every time a test +// should be executed and is closed when the last test should be invoked. +// +// When the specified context gets cancelled or expires the function +// stops sending item and returns immediately. +type WaitWithContextFunc func(ctx context.Context) <-chan struct{} + // WaitFor continually checks 'fn' as driven by 'wait'. // // WaitFor gets a channel from 'wait()'', and then invokes 'fn' once for every value @@ -531,13 +625,35 @@ type WaitFunc func(done <-chan struct{}) <-chan struct{} // "uniform pseudo-random", the `fn` might still run one or multiple time, // though eventually `WaitFor` will return. func WaitFor(wait WaitFunc, fn ConditionFunc, done <-chan struct{}) error { - stopCh := make(chan struct{}) - defer close(stopCh) - c := wait(stopCh) + ctx, cancel := contextForChannel(done) + defer cancel() + return WaitForWithContext(ctx, wait.WithContext(), fn.WithContext()) +} + +// WaitForWithContext continually checks 'fn' as driven by 'wait'. +// +// WaitForWithContext gets a channel from 'wait()'', and then invokes 'fn' +// once for every value placed on the channel and once more when the +// channel is closed. If the channel is closed and 'fn' +// returns false without error, WaitForWithContext returns ErrWaitTimeout. +// +// If 'fn' returns an error the loop ends and that error is returned. If +// 'fn' returns true the loop ends and nil is returned. +// +// context.Canceled will be returned if the ctx.Done() channel is closed +// without fn ever returning true. +// +// When the ctx.Done() channel is closed, because the golang `select` statement is +// "uniform pseudo-random", the `fn` might still run one or multiple times, +// though eventually `WaitForWithContext` will return. +func WaitForWithContext(ctx context.Context, wait WaitWithContextFunc, fn ConditionWithContextFunc) error { + waitCtx, cancel := context.WithCancel(context.Background()) + defer cancel() + c := wait(waitCtx) for { select { case _, open := <-c: - ok, err := runConditionWithCrashProtection(fn) + ok, err := runConditionWithCrashProtectionWithContext(ctx, fn) if err != nil { return err } @@ -547,7 +663,8 @@ func WaitFor(wait WaitFunc, fn ConditionFunc, done <-chan struct{}) error { if !open { return ErrWaitTimeout } - case <-done: + case <-ctx.Done(): + // returning ctx.Err() will break backward compatibility return ErrWaitTimeout } } @@ -563,8 +680,8 @@ func WaitFor(wait WaitFunc, fn ConditionFunc, done <-chan struct{}) error { // // Output ticks are not buffered. If the channel is not ready to receive an // item, the tick is skipped. -func poller(interval, timeout time.Duration) WaitFunc { - return WaitFunc(func(done <-chan struct{}) <-chan struct{} { +func poller(interval, timeout time.Duration) WaitWithContextFunc { + return WaitWithContextFunc(func(ctx context.Context) <-chan struct{} { ch := make(chan struct{}) go func() { @@ -594,7 +711,7 @@ func poller(interval, timeout time.Duration) WaitFunc { } case <-after: return - case <-done: + case <-ctx.Done(): return } } @@ -603,3 +720,32 @@ func poller(interval, timeout time.Duration) WaitFunc { return ch }) } + +// ExponentialBackoffWithContext works with a request context and a Backoff. It ensures that the retry wait never +// exceeds the deadline specified by the request context. +func ExponentialBackoffWithContext(ctx context.Context, backoff Backoff, condition ConditionFunc) error { + for backoff.Steps > 0 { + select { + case <-ctx.Done(): + return ctx.Err() + default: + } + + if ok, err := runConditionWithCrashProtection(condition); err != nil || ok { + return err + } + + if backoff.Steps == 1 { + break + } + + waitBeforeRetry := backoff.Step() + select { + case <-ctx.Done(): + return ctx.Err() + case <-time.After(waitBeforeRetry): + } + } + + return ErrWaitTimeout +} diff --git a/vendor/gomodules.xyz/x/analytics/analytics.go b/vendor/gomodules.xyz/x/analytics/analytics.go deleted file mode 100644 index 76295dae3..000000000 --- a/vendor/gomodules.xyz/x/analytics/analytics.go +++ /dev/null @@ -1,24 +0,0 @@ -package analytics - -import ( - "io/ioutil" - "os" - "path/filepath" - - "github.com/google/uuid" - "gomodules.xyz/homedir" -) - -func ClientID() string { - dir := filepath.Join(homedir.HomeDir(), ".appscode") - filename := filepath.Join(dir, "client-id") - id, err := ioutil.ReadFile(filename) - if os.IsNotExist(err) { - id := uuid.New().String() - if e2 := os.MkdirAll(dir, 0755); e2 == nil { - ioutil.WriteFile(filename, []byte(id), 0644) - } - return id - } - return string(id) -} diff --git a/vendor/kmodules.xyz/client-go/Makefile b/vendor/kmodules.xyz/client-go/Makefile index ac493f7d6..4902b9008 100644 --- a/vendor/kmodules.xyz/client-go/Makefile +++ b/vendor/kmodules.xyz/client-go/Makefile @@ -25,7 +25,13 @@ CODE_GENERATOR_IMAGE ?= appscode/gengo:release-1.21 git_branch := $(shell git rev-parse --abbrev-ref HEAD) git_tag := $(shell git describe --exact-match --abbrev=0 2>/dev/null || echo "") commit_hash := $(shell git rev-parse --verify HEAD) -commit_timestamp := $(shell date --date="@$$(git show -s --format=%ct)" --utc +%FT%T) +OS ?= $(shell uname -s) +ifeq ($(OS),Linux) + commit_timestamp := $(shell date --date="@$$(git show -s --format=%ct)" --utc +%FT%T) +endif +ifeq ($(OS),Darwin) + commit_timestamp := $(shell date -r "$$(git show -s --format=%ct)" -u +%FT%T) +endif VERSION := $(shell git describe --tags --always --dirty) version_strategy := commit_hash diff --git a/vendor/kmodules.xyz/client-go/meta/lib.go b/vendor/kmodules.xyz/client-go/meta/lib.go index 36ab7b402..4a734ab23 100644 --- a/vendor/kmodules.xyz/client-go/meta/lib.go +++ b/vendor/kmodules.xyz/client-go/meta/lib.go @@ -72,7 +72,7 @@ func GetKind(v interface{}) string { } func FilterKeys(domainKey string, out, in map[string]string) map[string]string { - if in == nil { + if len(in) == 0 { return out } if out == nil { @@ -102,7 +102,7 @@ func FilterKeys(domainKey string, out, in map[string]string) map[string]string { } func MergeKeys(out, in map[string]string) map[string]string { - if in == nil { + if len(in) == 0 { return out } if out == nil { @@ -118,7 +118,7 @@ func MergeKeys(out, in map[string]string) map[string]string { } func OverwriteKeys(out, in map[string]string) map[string]string { - if in == nil { + if len(in) == 0 { return out } if out == nil { diff --git a/vendor/kmodules.xyz/client-go/tools/analytics/analytics.go b/vendor/kmodules.xyz/client-go/tools/analytics/analytics.go deleted file mode 100644 index f173a2a91..000000000 --- a/vendor/kmodules.xyz/client-go/tools/analytics/analytics.go +++ /dev/null @@ -1,75 +0,0 @@ -/* -Copyright AppsCode Inc. and Contributors - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package analytics - -import ( - "os" - - "kmodules.xyz/client-go/meta" - "kmodules.xyz/client-go/tools/clusterid" - - "gomodules.xyz/x/analytics" - kerr "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/util/runtime" - "k8s.io/client-go/kubernetes" - "k8s.io/client-go/rest" -) - -const ( - Key = "APPSCODE_ANALYTICS_CLIENT_ID" -) - -func ClientID() string { - if id, found := os.LookupEnv(Key); found { - return id - } - - defer runtime.HandleCrash() - - if !meta.PossiblyInCluster() { - return analytics.ClientID() - } - - cfg, err := rest.InClusterConfig() - if err != nil { - return "$k8s$inclusterconfig" - } - client, err := kubernetes.NewForConfig(cfg) - if err != nil { - return "$k8s$newforconfig" - } - id, err := clusterid.ClusterUID(client.CoreV1().Namespaces()) - if err != nil { - return reasonForError(err) - } - return id -} - -func reasonForError(err error) string { - switch t := err.(type) { - case kerr.APIStatus: - return "$k8s$err$" + string(t.Status().Reason) - } - return "$k8s$err$" + trim(err.Error(), 32) // 32 = length of uuid -} - -func trim(s string, length int) string { - if len(s) > length { - return s[:length] - } - return s -} diff --git a/vendor/kmodules.xyz/client-go/tools/cli/cli.go b/vendor/kmodules.xyz/client-go/tools/cli/cli.go deleted file mode 100644 index 7bb2f5d87..000000000 --- a/vendor/kmodules.xyz/client-go/tools/cli/cli.go +++ /dev/null @@ -1,62 +0,0 @@ -/* -Copyright AppsCode Inc. and Contributors - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package cli - -import ( - "context" - "strings" - "time" - - "kmodules.xyz/client-go/tools/analytics" - - ga "github.com/jpillora/go-ogle-analytics" - "github.com/spf13/cobra" -) - -const ( - gaTrackingCode = "UA-62096468-20" - gaTrackingInterval = 1 * time.Hour -) - -var ( - AnalyticsClientID = analytics.ClientID() - EnableAnalytics = true -) - -func SendAnalytics(c *cobra.Command, version string) { - if !EnableAnalytics { - return - } - if client, err := ga.NewClient(gaTrackingCode); err == nil { - client.ClientID(AnalyticsClientID) - parts := strings.Split(c.CommandPath(), " ") - _ = client.Send(ga.NewEvent(parts[0], strings.Join(parts[1:], "/")).Label(version)) - } -} - -func SendPeriodicAnalytics(c *cobra.Command, version string) context.CancelFunc { - if !EnableAnalytics { - return func() {} - } - ticker := time.NewTicker(gaTrackingInterval) - go func() { - for range ticker.C { - SendAnalytics(c, version) - } - }() - return ticker.Stop -} diff --git a/vendor/kmodules.xyz/client-go/tools/clientcmd/client_getter.go b/vendor/kmodules.xyz/client-go/tools/clientcmd/client_getter.go index bff06e6ee..675cd15dc 100644 --- a/vendor/kmodules.xyz/client-go/tools/clientcmd/client_getter.go +++ b/vendor/kmodules.xyz/client-go/tools/clientcmd/client_getter.go @@ -23,9 +23,9 @@ import ( "k8s.io/client-go/discovery" "k8s.io/client-go/discovery/cached/memory" "k8s.io/client-go/rest" - "k8s.io/client-go/restmapper" "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" + "sigs.k8s.io/controller-runtime/pkg/client/apiutil" ) type restClientGetter struct { @@ -53,11 +53,12 @@ func (r restClientGetter) ToDiscoveryClient() (discovery.CachedDiscoveryInterfac } func (r restClientGetter) ToRESTMapper() (meta.RESTMapper, error) { - client, err := r.ToDiscoveryClient() + config, err := r.ToRESTConfig() if err != nil { return nil, err } - return restmapper.NewDeferredDiscoveryRESTMapper(client), nil + + return apiutil.NewDynamicRESTMapper(config) } func (r restClientGetter) ToRawKubeConfigLoader() clientcmd.ClientConfig { diff --git a/vendor/kmodules.xyz/client-go/tools/clusterid/lib.go b/vendor/kmodules.xyz/client-go/tools/clusterid/lib.go deleted file mode 100644 index f52d49f7b..000000000 --- a/vendor/kmodules.xyz/client-go/tools/clusterid/lib.go +++ /dev/null @@ -1,48 +0,0 @@ -/* -Copyright AppsCode Inc. and Contributors - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package clusterid - -import ( - "context" - "flag" - - "github.com/spf13/pflag" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - corev1 "k8s.io/client-go/kubernetes/typed/core/v1" -) - -var clusterName = "" - -func AddFlags(fs *pflag.FlagSet) { - fs.StringVar(&clusterName, "cluster-name", clusterName, "Name of cluster used in a multi-cluster setup") -} - -func AddGoFlags(fs *flag.FlagSet) { - fs.StringVar(&clusterName, "cluster-name", clusterName, "Name of cluster used in a multi-cluster setup") -} - -func ClusterName() string { - return clusterName -} - -func ClusterUID(client corev1.NamespaceInterface) (string, error) { - ns, err := client.Get(context.TODO(), metav1.NamespaceSystem, metav1.GetOptions{}) - if err != nil { - return "", err - } - return string(ns.UID), nil -} diff --git a/vendor/modules.txt b/vendor/modules.txt index c81bcf9fb..7cfafafc9 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -104,8 +104,6 @@ github.com/hashicorp/golang-lru/simplelru github.com/imdario/mergo # github.com/inconshreveable/mousetrap v1.0.0 github.com/inconshreveable/mousetrap -# github.com/jpillora/go-ogle-analytics v0.0.0-20161213085824-14b04e0594ef -github.com/jpillora/go-ogle-analytics # github.com/json-iterator/go v1.1.11 ## explicit github.com/json-iterator/go @@ -234,15 +232,13 @@ golang.org/x/text/width golang.org/x/time/rate # gomodules.xyz/clock v0.0.0-20200817085942-06523dba733f gomodules.xyz/clock -# gomodules.xyz/flags v0.1.2 +# gomodules.xyz/flags v0.1.3 gomodules.xyz/flags # gomodules.xyz/go-sh v0.1.0 gomodules.xyz/go-sh -# gomodules.xyz/homedir v0.1.0 -gomodules.xyz/homedir # gomodules.xyz/jsonpatch/v2 v2.2.0 gomodules.xyz/jsonpatch/v2 -# gomodules.xyz/logs v0.0.4 +# gomodules.xyz/logs v0.0.6 ## explicit gomodules.xyz/logs # gomodules.xyz/mergo v0.3.13-0.20210702100041-9d62ff8ece4d @@ -255,11 +251,10 @@ gomodules.xyz/pointer gomodules.xyz/runtime # gomodules.xyz/sets v0.2.0 gomodules.xyz/sets -# gomodules.xyz/wait v0.0.0-20210218105358-639bd9211545 +# gomodules.xyz/wait v0.2.0 gomodules.xyz/wait # gomodules.xyz/x v0.0.8 ## explicit -gomodules.xyz/x/analytics gomodules.xyz/x/strings gomodules.xyz/x/version # google.golang.org/appengine v1.6.7 @@ -659,7 +654,7 @@ k8s.io/utils/integer k8s.io/utils/io k8s.io/utils/pointer k8s.io/utils/trace -# kmodules.xyz/client-go v0.0.0-20211028132207-0cf6ea46b030 +# kmodules.xyz/client-go v0.0.0-20211107190155-5bb4090d2728 ## explicit kmodules.xyz/client-go kmodules.xyz/client-go/api/v1 @@ -669,10 +664,7 @@ kmodules.xyz/client-go/apiextensions/v1beta1 kmodules.xyz/client-go/core/v1 kmodules.xyz/client-go/discovery kmodules.xyz/client-go/meta -kmodules.xyz/client-go/tools/analytics -kmodules.xyz/client-go/tools/cli kmodules.xyz/client-go/tools/clientcmd -kmodules.xyz/client-go/tools/clusterid kmodules.xyz/client-go/tools/exec kmodules.xyz/client-go/tools/pushgateway # kmodules.xyz/custom-resources v0.0.0-20211007080833-72bd9e8cae6e @@ -820,7 +812,7 @@ stash.appscode.dev/apimachinery/crds stash.appscode.dev/apimachinery/pkg/docker stash.appscode.dev/apimachinery/pkg/invoker stash.appscode.dev/apimachinery/pkg/restic -# stash.appscode.dev/stash v0.16.0 +# stash.appscode.dev/stash v0.16.1-0.20211123234135-9b2178b5e1c9 ## explicit stash.appscode.dev/stash/pkg/cli stash.appscode.dev/stash/pkg/registry/snapshot diff --git a/vendor/stash.appscode.dev/stash/pkg/util/init_container.go b/vendor/stash.appscode.dev/stash/pkg/util/init_container.go index f7c38d190..db0db26d0 100644 --- a/vendor/stash.appscode.dev/stash/pkg/util/init_container.go +++ b/vendor/stash.appscode.dev/stash/pkg/util/init_container.go @@ -27,7 +27,6 @@ import ( "gomodules.xyz/flags" "gomodules.xyz/pointer" core "k8s.io/api/core/v1" - "kmodules.xyz/client-go/tools/cli" "kmodules.xyz/client-go/tools/clientcmd" "kmodules.xyz/client-go/tools/pushgateway" ofst_util "kmodules.xyz/offshoot-api/util" @@ -44,7 +43,6 @@ func NewInitContainer(r *v1alpha1_api.Restic, workload v1alpha1_api.LocalTypedRe "--image-tag=" + image.Tag, "--pushgateway-url=" + pushgateway.URL(), fmt.Sprintf("--use-kubeapiserver-fqdn-for-aks=%v", clientcmd.UseKubeAPIServerFQDNForAKS()), - fmt.Sprintf("--enable-analytics=%v", cli.EnableAnalytics), } container.Args = append(container.Args, flags.LoggerOptions.ToFlags()...) @@ -67,7 +65,6 @@ func NewRestoreInitContainer(inv invoker.RestoreInvoker, targetInfo invoker.Rest "--metrics-enabled=true", "--pushgateway-url=" + pushgateway.URL(), fmt.Sprintf("--use-kubeapiserver-fqdn-for-aks=%v", clientcmd.UseKubeAPIServerFQDNForAKS()), - fmt.Sprintf("--enable-analytics=%v", cli.EnableAnalytics), }, flags.LoggerOptions.ToFlags()...), Env: []core.EnvVar{ { diff --git a/vendor/stash.appscode.dev/stash/pkg/util/job.go b/vendor/stash.appscode.dev/stash/pkg/util/job.go index 95dd1e050..02cf511f2 100644 --- a/vendor/stash.appscode.dev/stash/pkg/util/job.go +++ b/vendor/stash.appscode.dev/stash/pkg/util/job.go @@ -32,8 +32,6 @@ import ( batch "k8s.io/api/batch/v1" core "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "kmodules.xyz/client-go/tools/analytics" - "kmodules.xyz/client-go/tools/cli" "kmodules.xyz/client-go/tools/clientcmd" "kmodules.xyz/client-go/tools/pushgateway" v1 "kmodules.xyz/offshoot-api/api/v1" @@ -74,14 +72,7 @@ func NewCheckJob(restic *api_v1alpha1.Restic, hostName, smartPrefix string, imag "--host-name=" + hostName, "--smart-prefix=" + smartPrefix, fmt.Sprintf("--use-kubeapiserver-fqdn-for-aks=%v", clientcmd.UseKubeAPIServerFQDNForAKS()), - fmt.Sprintf("--enable-analytics=%v", cli.EnableAnalytics), }, flags.LoggerOptions.ToFlags()...), - Env: []core.EnvVar{ - { - Name: analytics.Key, - Value: cli.AnalyticsClientID, - }, - }, VolumeMounts: []core.VolumeMount{ { Name: apis.ScratchDirVolumeName, @@ -165,14 +156,7 @@ func NewRecoveryJob(stashClient cs.Interface, recovery *api_v1alpha1.Recovery, i "recover", "--recovery-name=" + recovery.Name, fmt.Sprintf("--use-kubeapiserver-fqdn-for-aks=%v", clientcmd.UseKubeAPIServerFQDNForAKS()), - fmt.Sprintf("--enable-analytics=%v", cli.EnableAnalytics), }, flags.LoggerOptions.ToFlags()...), - Env: []core.EnvVar{ - { - Name: analytics.Key, - Value: cli.AnalyticsClientID, - }, - }, VolumeMounts: append(volumeMounts, core.VolumeMount{ Name: apis.ScratchDirVolumeName, MountPath: "/tmp", @@ -237,7 +221,6 @@ func NewPVCRestorerJob(inv invoker.RestoreInvoker, index int, repository *api_v1 "--metrics-enabled=true", "--pushgateway-url=" + pushgateway.URL(), fmt.Sprintf("--use-kubeapiserver-fqdn-for-aks=%v", clientcmd.UseKubeAPIServerFQDNForAKS()), - fmt.Sprintf("--enable-analytics=%v", cli.EnableAnalytics), }, flags.LoggerOptions.ToFlags()...), Env: []core.EnvVar{ { @@ -328,7 +311,6 @@ func NewVolumeSnapshotterJob(bs *api_v1beta1.BackupSession, backupTarget *api_v1 "--metrics-enabled=true", "--pushgateway-url=" + pushgateway.URL(), fmt.Sprintf("--use-kubeapiserver-fqdn-for-aks=%v", clientcmd.UseKubeAPIServerFQDNForAKS()), - fmt.Sprintf("--enable-analytics=%v", cli.EnableAnalytics), }, flags.LoggerOptions.ToFlags()...), Env: []core.EnvVar{ { @@ -376,7 +358,6 @@ func NewVolumeRestorerJob(inv invoker.RestoreInvoker, index int, image docker.Do "--metrics-enabled=true", "--pushgateway-url=" + pushgateway.URL(), fmt.Sprintf("--use-kubeapiserver-fqdn-for-aks=%v", clientcmd.UseKubeAPIServerFQDNForAKS()), - fmt.Sprintf("--enable-analytics=%v", cli.EnableAnalytics), }, flags.LoggerOptions.ToFlags()...), Env: []core.EnvVar{ { diff --git a/vendor/stash.appscode.dev/stash/pkg/util/sidecar.go b/vendor/stash.appscode.dev/stash/pkg/util/sidecar.go index 88052143d..886bebf14 100644 --- a/vendor/stash.appscode.dev/stash/pkg/util/sidecar.go +++ b/vendor/stash.appscode.dev/stash/pkg/util/sidecar.go @@ -27,8 +27,6 @@ import ( "gomodules.xyz/flags" "gomodules.xyz/pointer" core "k8s.io/api/core/v1" - "kmodules.xyz/client-go/tools/analytics" - "kmodules.xyz/client-go/tools/cli" "kmodules.xyz/client-go/tools/clientcmd" "kmodules.xyz/client-go/tools/pushgateway" store "kmodules.xyz/objectstore-api/api/v1" @@ -54,7 +52,6 @@ func NewSidecarContainer(r *api.Restic, workload api.LocalTypedReference, image "--run-via-cron=true", "--pushgateway-url=" + pushgateway.URL(), fmt.Sprintf("--use-kubeapiserver-fqdn-for-aks=%v", clientcmd.UseKubeAPIServerFQDNForAKS()), - fmt.Sprintf("--enable-analytics=%v", cli.EnableAnalytics), }, flags.LoggerOptions.ToFlags()...), Env: []core.EnvVar{ { @@ -73,10 +70,6 @@ func NewSidecarContainer(r *api.Restic, workload api.LocalTypedReference, image }, }, }, - { - Name: analytics.Key, - Value: cli.AnalyticsClientID, - }, }, Resources: r.Spec.Resources, SecurityContext: &core.SecurityContext{ @@ -124,7 +117,6 @@ func NewBackupSidecarContainer(inv invoker.BackupInvoker, targetInfo invoker.Bac "--metrics-enabled=true", "--pushgateway-url=" + pushgateway.URL(), fmt.Sprintf("--use-kubeapiserver-fqdn-for-aks=%v", clientcmd.UseKubeAPIServerFQDNForAKS()), - fmt.Sprintf("--enable-analytics=%v", cli.EnableAnalytics), }, flags.LoggerOptions.ToFlags()...), Env: []core.EnvVar{ {