diff --git a/go.mod b/go.mod new file mode 100644 index 0000000000000000000000000000000000000000..dc3a61df1deeaa2630ba20d567c04f2fc6d95241 --- /dev/null +++ b/go.mod @@ -0,0 +1,5 @@ +module git.autistici.org/ai3/tools/logcat + +// go: no requirements found in vendor/vendor.json + +require github.com/olivere/elastic/v7 v7.0.15 diff --git a/go.sum b/go.sum new file mode 100644 index 0000000000000000000000000000000000000000..497b654bd5ff488e731b842400db19535104ec85 --- /dev/null +++ b/go.sum @@ -0,0 +1,62 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/aws/aws-sdk-go v1.30.7/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= +github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= +github.com/mailru/easyjson v0.7.1 h1:mdxE1MF9o53iCb2Ghj1VfWvh7ZOwHpnVG/xwXrV90U8= +github.com/mailru/easyjson v0.7.1/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= +github.com/olivere/elastic/v7 v7.0.15 h1:v7kX5S+oMFfYKS4ZyzD37GH6lfZSpBo9atynRwBUywE= +github.com/olivere/elastic/v7 v7.0.15/go.mod h1:+FgncZ8ho1QF3NlBo77XbuoTKYHhvEOfFZKIAfHnnDE= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9/go.mod h1:SnhjPscd9TpLiy1LpzGSKh3bXCfxxXuqd9xmQJy3slM= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/logcat.go b/logcat.go index d92951ae361c26f6cf2cc1c2dbd09acc7213c800..05896fbe50dd44cb23392f027cb103f14393346f 100644 --- a/logcat.go +++ b/logcat.go @@ -19,7 +19,7 @@ import ( "sync" "time" - "gopkg.in/olivere/elastic.v6" + "github.com/olivere/elastic/v7" ) var ( @@ -214,7 +214,7 @@ func runQuery(client *elastic.Client, query elastic.Query, indexes []string, w i return } for _, hit := range result.Hits.Hits { - jsonW.Push(*hit.Source) + jsonW.Push(hit.Source) } } }() diff --git a/vendor/github.com/mailru/easyjson/.gitignore b/vendor/github.com/mailru/easyjson/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..fbfaf7a3f444da3b327e828cc9b18a559afa2460 --- /dev/null +++ b/vendor/github.com/mailru/easyjson/.gitignore @@ -0,0 +1,6 @@ +.root +*_easyjson.go +*.iml +.idea +*.swp +bin/* diff --git a/vendor/github.com/mailru/easyjson/.travis.yml b/vendor/github.com/mailru/easyjson/.travis.yml new file mode 100644 index 0000000000000000000000000000000000000000..0ececa0718fc0f0d13c008d5c0891bc31b32ac63 --- /dev/null +++ b/vendor/github.com/mailru/easyjson/.travis.yml @@ -0,0 +1,12 @@ +language: go + +go: + - tip + - stable + +matrix: + allow_failures: + - go: tip + +install: + - go get golang.org/x/lint/golint diff --git a/vendor/github.com/mailru/easyjson/Makefile b/vendor/github.com/mailru/easyjson/Makefile index 7cfec87bfd90dc592ba13e735880b47435253cf4..80449f0d27490277f486bf715428ee3f6724847f 100644 --- a/vendor/github.com/mailru/easyjson/Makefile +++ b/vendor/github.com/mailru/easyjson/Makefile @@ -1,61 +1,56 @@ -PKG=github.com/mailru/easyjson -GOPATH:=$(PWD)/.root:$(GOPATH) -export GOPATH - all: test -.root/src/$(PKG): - mkdir -p $@ - for i in $$PWD/* ; do ln -s $$i $@/`basename $$i` ; done - -root: .root/src/$(PKG) - clean: - rm -rf .root + rm -rf bin rm -rf tests/*_easyjson.go + rm -rf benchmark/*_easyjson.go build: - go build -i -o .root/bin/easyjson $(PKG)/easyjson - -generate: root build - .root/bin/easyjson -stubs \ - .root/src/$(PKG)/tests/snake.go \ - .root/src/$(PKG)/tests/data.go \ - .root/src/$(PKG)/tests/omitempty.go \ - .root/src/$(PKG)/tests/nothing.go \ - .root/src/$(PKG)/tests/named_type.go \ - .root/src/$(PKG)/tests/custom_map_key_type.go \ - .root/src/$(PKG)/tests/embedded_type.go - - .root/bin/easyjson -all .root/src/$(PKG)/tests/data.go - .root/bin/easyjson -all .root/src/$(PKG)/tests/nothing.go - .root/bin/easyjson -all .root/src/$(PKG)/tests/errors.go - .root/bin/easyjson -snake_case .root/src/$(PKG)/tests/snake.go - .root/bin/easyjson -omit_empty .root/src/$(PKG)/tests/omitempty.go - .root/bin/easyjson -build_tags=use_easyjson .root/src/$(PKG)/benchmark/data.go - .root/bin/easyjson .root/src/$(PKG)/tests/nested_easy.go - .root/bin/easyjson .root/src/$(PKG)/tests/named_type.go - .root/bin/easyjson .root/src/$(PKG)/tests/custom_map_key_type.go - .root/bin/easyjson .root/src/$(PKG)/tests/embedded_type.go - .root/bin/easyjson -disallow_unknown_fields .root/src/$(PKG)/tests/disallow_unknown.go - -test: generate root + go build -i -o ./bin/easyjson ./easyjson + +generate: build + bin/easyjson -stubs \ + ./tests/snake.go \ + ./tests/data.go \ + ./tests/omitempty.go \ + ./tests/nothing.go \ + ./tests/named_type.go \ + ./tests/custom_map_key_type.go \ + ./tests/embedded_type.go \ + ./tests/reference_to_pointer.go \ + ./tests/html.go \ + ./tests/unknown_fields.go \ + + bin/easyjson -all ./tests/data.go + bin/easyjson -all ./tests/nothing.go + bin/easyjson -all ./tests/errors.go + bin/easyjson -all ./tests/html.go + bin/easyjson -snake_case ./tests/snake.go + bin/easyjson -omit_empty ./tests/omitempty.go + bin/easyjson -build_tags=use_easyjson ./benchmark/data.go + bin/easyjson ./tests/nested_easy.go + bin/easyjson ./tests/named_type.go + bin/easyjson ./tests/custom_map_key_type.go + bin/easyjson ./tests/embedded_type.go + bin/easyjson ./tests/reference_to_pointer.go + bin/easyjson ./tests/key_marshaler_map.go + bin/easyjson -disallow_unknown_fields ./tests/disallow_unknown.go + bin/easyjson ./tests/unknown_fields.go + +test: generate go test \ - $(PKG)/tests \ - $(PKG)/jlexer \ - $(PKG)/gen \ - $(PKG)/buffer - go test -benchmem -tags use_easyjson -bench . $(PKG)/benchmark - golint -set_exit_status .root/src/$(PKG)/tests/*_easyjson.go - -bench-other: generate root - @go test -benchmem -bench . $(PKG)/benchmark - @go test -benchmem -tags use_ffjson -bench . $(PKG)/benchmark - @go test -benchmem -tags use_jsoniter -bench . $(PKG)/benchmark - @go test -benchmem -tags use_codec -bench . $(PKG)/benchmark + ./tests \ + ./jlexer \ + ./gen \ + ./buffer + cd benchmark && go test -benchmem -tags use_easyjson -bench . + golint -set_exit_status ./tests/*_easyjson.go + +bench-other: generate + cd benchmark && make bench-python: benchmark/ujson.sh -.PHONY: root clean generate test build +.PHONY: clean generate test build diff --git a/vendor/github.com/mailru/easyjson/README.md b/vendor/github.com/mailru/easyjson/README.md index 7fd7686541104ceda8a1eb9336c56c55f9297057..3bdcf2d06c235e314f53394793a5f85108d172a9 100644 --- a/vendor/github.com/mailru/easyjson/README.md +++ b/vendor/github.com/mailru/easyjson/README.md @@ -173,6 +173,9 @@ for more information. typically for many uses/protocols the final, marshaled length of the JSON needs to be known prior to sending the data. Currently this is not possible with easyjson's architecture. + +* easyjson parser and codegen based on reflection, so it wont works on `package main` + files, because they cant be imported by parser. ## Benchmarks diff --git a/vendor/github.com/mailru/easyjson/go.mod b/vendor/github.com/mailru/easyjson/go.mod new file mode 100644 index 0000000000000000000000000000000000000000..7bc4a65844252b0d4f58515a62053d5d932b5f64 --- /dev/null +++ b/vendor/github.com/mailru/easyjson/go.mod @@ -0,0 +1,3 @@ +module github.com/mailru/easyjson + +go 1.12 diff --git a/vendor/github.com/mailru/easyjson/helpers.go b/vendor/github.com/mailru/easyjson/helpers.go index b86b87d228a1e19cef85d4b6e4d8c6485ce7d789..04ac63562870ada757af51d28a1af4b5c80c7cfa 100644 --- a/vendor/github.com/mailru/easyjson/helpers.go +++ b/vendor/github.com/mailru/easyjson/helpers.go @@ -26,6 +26,16 @@ type Optional interface { IsDefined() bool } +// UnknownsUnmarshaler provides a method to unmarshal unknown struct fileds and save them as you want +type UnknownsUnmarshaler interface { + UnmarshalUnknown(in *jlexer.Lexer, key string) +} + +// UnknownsMarshaler provides a method to write additional struct fields +type UnknownsMarshaler interface { + MarshalUnknowns(w *jwriter.Writer, first bool) +} + // Marshal returns data as a single byte slice. Method is suboptimal as the data is likely to be copied // from a chain of smaller chunks. func Marshal(v Marshaler) ([]byte, error) { diff --git a/vendor/github.com/mailru/easyjson/jlexer/lexer.go b/vendor/github.com/mailru/easyjson/jlexer/lexer.go index 51f056615c3adc8c996215c9ae1743cd8685ea65..ddd376b844cb5711ab86105e208d6dc4f9029983 100644 --- a/vendor/github.com/mailru/easyjson/jlexer/lexer.go +++ b/vendor/github.com/mailru/easyjson/jlexer/lexer.go @@ -521,11 +521,12 @@ func (r *Lexer) SkipRecursive() { r.scanToken() var start, end byte - if r.token.delimValue == '{' { + switch r.token.delimValue { + case '{': start, end = '{', '}' - } else if r.token.delimValue == '[' { + case '[': start, end = '[', ']' - } else { + default: r.consume() return } @@ -1151,7 +1152,7 @@ func (r *Lexer) Interface() interface{} { } else if r.token.delimValue == '[' { r.consume() - var ret []interface{} + ret := []interface{}{} for !r.IsDelim(']') { ret = append(ret, r.Interface()) r.WantComma() diff --git a/vendor/github.com/mailru/easyjson/jwriter/writer.go b/vendor/github.com/mailru/easyjson/jwriter/writer.go index b9ed7ccaa8bcf7eec4fbfb55fe4ab5cb57890884..eb8547ccc27a30118a049a054afc7e79f95cf378 100644 --- a/vendor/github.com/mailru/easyjson/jwriter/writer.go +++ b/vendor/github.com/mailru/easyjson/jwriter/writer.go @@ -270,16 +270,25 @@ func (w *Writer) Bool(v bool) { const chars = "0123456789abcdef" -func isNotEscapedSingleChar(c byte, escapeHTML bool) bool { - // Note: might make sense to use a table if there are more chars to escape. With 4 chars - // it benchmarks the same. - if escapeHTML { - return c != '<' && c != '>' && c != '&' && c != '\\' && c != '"' && c >= 0x20 && c < utf8.RuneSelf - } else { - return c != '\\' && c != '"' && c >= 0x20 && c < utf8.RuneSelf +func getTable(falseValues ...int) [128]bool { + table := [128]bool{} + + for i := 0; i < 128; i++ { + table[i] = true + } + + for _, v := range falseValues { + table[v] = false } + + return table } +var ( + htmlEscapeTable = getTable(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, '"', '&', '<', '>', '\\') + htmlNoEscapeTable = getTable(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, '"', '\\') +) + func (w *Writer) String(s string) { w.Buffer.AppendByte('"') @@ -288,15 +297,23 @@ func (w *Writer) String(s string) { p := 0 // last non-escape symbol + var escapeTable [128]bool + if w.NoEscapeHTML { + escapeTable = htmlNoEscapeTable + } else { + escapeTable = htmlEscapeTable + } + for i := 0; i < len(s); { c := s[i] - if isNotEscapedSingleChar(c, !w.NoEscapeHTML) { - // single-width character, no escaping is required - i++ - continue - } else if c < utf8.RuneSelf { - // single-with character, need to escape + if c < utf8.RuneSelf { + if escapeTable[c] { + // single-width character, no escaping is required + i++ + continue + } + w.Buffer.AppendString(s[p:i]) switch c { case '\t': diff --git a/vendor/github.com/mailru/easyjson/unknown_fields.go b/vendor/github.com/mailru/easyjson/unknown_fields.go new file mode 100644 index 0000000000000000000000000000000000000000..6cfdf8300ba06423d4a868f5c1b284babce09a19 --- /dev/null +++ b/vendor/github.com/mailru/easyjson/unknown_fields.go @@ -0,0 +1,34 @@ +package easyjson + +import ( + json "encoding/json" + + jlexer "github.com/mailru/easyjson/jlexer" + "github.com/mailru/easyjson/jwriter" +) + +// UnknownFieldsProxy implemets UnknownsUnmarshaler and UnknownsMarshaler +// use it as embedded field in your structure to parse and then serialize unknown struct fields +type UnknownFieldsProxy struct { + unknownFields map[string]interface{} +} + +func (s *UnknownFieldsProxy) UnmarshalUnknown(in *jlexer.Lexer, key string) { + if s.unknownFields == nil { + s.unknownFields = make(map[string]interface{}, 1) + } + s.unknownFields[key] = in.Interface() +} + +func (s UnknownFieldsProxy) MarshalUnknowns(out *jwriter.Writer, first bool) { + for key, val := range s.unknownFields { + if first { + first = false + } else { + out.RawByte(',') + } + out.String(string(key)) + out.RawByte(':') + out.Raw(json.Marshal(val)) + } +} diff --git a/vendor/github.com/olivere/elastic/v7/.gitignore b/vendor/github.com/olivere/elastic/v7/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..caa3019c887268ef44d19e9675dc900b82b40e09 --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/.gitignore @@ -0,0 +1,38 @@ +# Compiled Object files, Static and Dynamic libs (Shared Objects) +*.o +*.a +*.so + +# Folders +_obj +_test + +# Architecture specific extensions/prefixes +*.[568vq] +[568vq].out + +*.cgo1.go +*.cgo2.c +_cgo_defun.c +_cgo_gotypes.go +_cgo_export.* + +_testmain.go + +*.exe + +.envrc + +/.vscode/ +/.idea/ +/debug.test +/generator +/cluster-test/cluster-test +/cluster-test/*.log +/cluster-test/es-chaos-monkey +/dist +/go.sum +/spec +/tmp +/CHANGELOG-3.0.html + diff --git a/vendor/github.com/olivere/elastic/v7/.travis.yml.off b/vendor/github.com/olivere/elastic/v7/.travis.yml.off new file mode 100644 index 0000000000000000000000000000000000000000..b657308569868c08800f664d2d018d7ca35159f6 --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/.travis.yml.off @@ -0,0 +1,32 @@ +sudo: required +language: go +go: +- "1.13.x" +- "1.14.x" +- tip +matrix: + allow_failures: + - go: tip +env: +- GO111MODULE=on +- GO111MODULE=off +addons: + apt: + update: true + packages: + - docker-ce +services: +- docker +before_install: +- if [[ "$TRAVIS_OS_NAME" == "linux" && ! $(which nc) ]] ; then sudo apt-get install -y netcat ; fi +- sudo sysctl -w vm.max_map_count=262144 +- docker-compose pull +- docker-compose up -d +- go get -u github.com/google/go-cmp/cmp +- go get -u github.com/fortytw2/leaktest +- go get . ./aws/... ./config/... ./trace/... ./uritemplates/... +- while ! nc -z localhost 9200; do sleep 1; done +- while ! nc -z localhost 9210; do sleep 1; done +install: true # ignore the go get -t -v ./... +script: +- go test -race -deprecations -strict-decoder -v . ./aws/... ./config/... ./trace/... ./uritemplates/... diff --git a/vendor/gopkg.in/olivere/elastic.v6/CHANGELOG-3.0.md b/vendor/github.com/olivere/elastic/v7/CHANGELOG-3.0.md similarity index 100% rename from vendor/gopkg.in/olivere/elastic.v6/CHANGELOG-3.0.md rename to vendor/github.com/olivere/elastic/v7/CHANGELOG-3.0.md diff --git a/vendor/gopkg.in/olivere/elastic.v6/CHANGELOG-5.0.md b/vendor/github.com/olivere/elastic/v7/CHANGELOG-5.0.md similarity index 100% rename from vendor/gopkg.in/olivere/elastic.v6/CHANGELOG-5.0.md rename to vendor/github.com/olivere/elastic/v7/CHANGELOG-5.0.md diff --git a/vendor/gopkg.in/olivere/elastic.v6/CHANGELOG-6.0.md b/vendor/github.com/olivere/elastic/v7/CHANGELOG-6.0.md similarity index 89% rename from vendor/gopkg.in/olivere/elastic.v6/CHANGELOG-6.0.md rename to vendor/github.com/olivere/elastic/v7/CHANGELOG-6.0.md index 277925929d6304dc3e076bb25449118934bd3af1..255bda4ee1cd6049696c95906f7800db4cfd486c 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/CHANGELOG-6.0.md +++ b/vendor/github.com/olivere/elastic/v7/CHANGELOG-6.0.md @@ -14,5 +14,5 @@ Only use `true` or `false` for boolean values, not `0` or `1` or `on` or `off`. Notice that 6.0 and future versions will default to single type indices, i.e. you may not use multiple types when e.g. adding an index with a mapping. -See [here for details](https://www.elastic.co/guide/en/elasticsearch/reference/6.x/removal-of-types.html#_what_are_mapping_types). +See [here for details](https://www.elastic.co/guide/en/elasticsearch/reference/6.7/removal-of-types.html#_what_are_mapping_types). diff --git a/vendor/github.com/olivere/elastic/v7/CHANGELOG-7.0.md b/vendor/github.com/olivere/elastic/v7/CHANGELOG-7.0.md new file mode 100644 index 0000000000000000000000000000000000000000..1edd9dda94ed237a9a3265f41a8abe751a0624d4 --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/CHANGELOG-7.0.md @@ -0,0 +1,55 @@ +# Changes from 6.0 to 7.0 + +See [breaking changes](https://www.elastic.co/guide/en/elasticsearch/reference/7.x/breaking-changes-7.0.html). + +## SearchHit.Source changed from `*json.RawMessage` to `json.RawMessage` + +The `SearchHit` structure changed from + +``` +// SearchHit is a single hit. +type SearchHit struct { + ... + Source *json.RawMessage `json:"_source,omitempty"` // stored document source + ... +} +``` + +to + +``` +// SearchHit is a single hit. +type SearchHit struct { + ... + Source json.RawMessage `json:"_source,omitempty"` // stored document source + ... +} +``` + +As `json.RawMessage` is a `[]byte`, there is no need to specify it +as `*json.RawMessage` as `json.RawMessage` is perfectly ok to represent +a `nil` value. + +So when deserializing the search hits, you need to change your code from: + +``` +for _, hit := range searchResult.Hits.Hits { + var doc Doc + err := json.Unmarshal(*hit.Source, &doc) // notice the * here + if err != nil { + // Deserialization failed + } +} +``` + +to + +``` +for _, hit := range searchResult.Hits.Hits { + var doc Doc + err := json.Unmarshal(hit.Source, &doc) // it's missing here + if err != nil { + // Deserialization failed + } +} +``` diff --git a/vendor/gopkg.in/olivere/elastic.v6/CODE_OF_CONDUCT.md b/vendor/github.com/olivere/elastic/v7/CODE_OF_CONDUCT.md similarity index 100% rename from vendor/gopkg.in/olivere/elastic.v6/CODE_OF_CONDUCT.md rename to vendor/github.com/olivere/elastic/v7/CODE_OF_CONDUCT.md diff --git a/vendor/gopkg.in/olivere/elastic.v6/CONTRIBUTING.md b/vendor/github.com/olivere/elastic/v7/CONTRIBUTING.md similarity index 88% rename from vendor/gopkg.in/olivere/elastic.v6/CONTRIBUTING.md rename to vendor/github.com/olivere/elastic/v7/CONTRIBUTING.md index 4fbc79dd0d7e2cedfa1f0544bbb51a93b4a4fb73..c7c425a3ef2b34c587fa9f06a5146b6ac4fd2e35 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/CONTRIBUTING.md +++ b/vendor/github.com/olivere/elastic/v7/CONTRIBUTING.md @@ -18,7 +18,7 @@ that we missed some features or changes. Feel free to change that. To make it easy to review and understand your changes, please keep the following things in mind before submitting your pull request: -* You compared the existing implemenation with the Java API, did you? +* You compared the existing implementation with the Java API, did you? * Please work on the latest possible state of `olivere/elastic`. Use `release-branch.v2` for targeting Elasticsearch 1.x and `release-branch.v3` for targeting 2.x. @@ -36,5 +36,5 @@ following things in mind before submitting your pull request: ## Additional Resources -* [GitHub documentation](http://help.github.com/) -* [GitHub pull request documentation](http://help.github.com/send-pull-requests/) +* [GitHub documentation](https://help.github.com/) +* [GitHub pull request documentation](https://help.github.com/en/articles/creating-a-pull-request) diff --git a/vendor/gopkg.in/olivere/elastic.v6/CONTRIBUTORS b/vendor/github.com/olivere/elastic/v7/CONTRIBUTORS similarity index 70% rename from vendor/gopkg.in/olivere/elastic.v6/CONTRIBUTORS rename to vendor/github.com/olivere/elastic/v7/CONTRIBUTORS index 1beea081fb2ecd0c475f6486d8b23d3d4cdf3003..93f2d9eb5238acf8e8adf933653804e766bf5f78 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/CONTRIBUTORS +++ b/vendor/github.com/olivere/elastic/v7/CONTRIBUTORS @@ -7,53 +7,80 @@ # Please keep this list sorted. 0x6875790d0a [@huydx](https://github.com/huydx) +Aaron Tami [@aarontami](https://github.com/aarontami) Adam Alix [@adamalix](https://github.com/adamalix) Adam Weiner [@adamweiner](https://github.com/adamweiner) Adrian Lungu [@AdrianLungu](https://github.com/AdrianLungu) alehano [@alehano](https://github.com/alehano) +Alejandro Carstens [@alejandro-carstens](https://github.com/alejandro-carstens) Alex [@akotlar](https://github.com/akotlar) Alexander Sack [@asac](https://github.com/asac) Alexandre Olivier [@aliphen](https://github.com/aliphen) Alexey Sharov [@nizsheanez](https://github.com/nizsheanez) +Aman Jain [@amanjain97](https://github.com/amanjain97) +Anders [@ANerd](https://github.com/ANerd) AndreKR [@AndreKR](https://github.com/AndreKR) André Bierlein [@ligustah](https://github.com/ligustah) Andrew Dunham [@andrew-d](https://github.com/andrew-d) Andrew Gaul [@andrewgaul](https://github.com/andrewgaul) Andy Walker [@alaska](https://github.com/alaska) +Arpit Agarwal [@arpiagar](https://github.com/arpiagar) Arquivei [@arquivei](https://github.com/arquivei) +Artemiy Elozhenko [@artezh](https://github.com/artezh) arthurgustin [@arthurgustin](https://github.com/arthurgustin) +Bas van Dijk [@basvandijk](https://github.com/basvandijk) Benjamin Fernandes [@LotharSee](https://github.com/LotharSee) Benjamin Zarzycki [@kf6nux](https://github.com/kf6nux) +Björn Gerdau [@kernle32dll](https://github.com/kernle32dll) Boris Popovschi [@Zyqsempai](https://github.com/Zyqsempai) +Bowei Xu [@vancexu](https://github.com/vancexu) Braden Bassingthwaite [@bbassingthwaite-va](https://github.com/bbassingthwaite-va) Brady Love [@bradylove](https://github.com/bradylove) Bryan Conklin [@bmconklin](https://github.com/bmconklin) Bruce Zhou [@brucez-isell](https://github.com/brucez-isell) +Carl Dunham [@carldunham](https://github.com/carldunham) +Carl Johan Gustavsson [@cjgu](https://github.com/cjgu) +Cat [@cat-turner](https://github.com/cat-turner) César Jiménez [@cesarjimenez](https://github.com/cesarjimenez) cforbes [@cforbes](https://github.com/cforbes) +張泰瑋(Chang Tai Wei) [@david30907d](https://github.com/david30907d) +cheshire [@NikitaSerenko](https://github.com/NikitaSerenko) Chris M [@tebriel](https://github.com/tebriel) Chris Rice [@donutmonger](https://github.com/donutmonger) Claudiu Olteanu [@claudiuolteanu](https://github.com/claudiuolteanu) Chris Duncan [@veqryn](https://github.com/veqryn) +Chris Ludden [@cludden](https://github.com/cludden) Christophe Courtaut [@kri5](https://github.com/kri5) +cmitchell [@cmitchell](https://github.com/cmitchell) Connor Peet [@connor4312](https://github.com/connor4312) Conrad Pankoff [@deoxxa](https://github.com/deoxxa) Corey Scott [@corsc](https://github.com/corsc) +Chris Petersen [@ex-nerd](https://github.com/ex-nerd) Daniel Barrett [@shendaras](https://github.com/shendaras) Daniel Heckrath [@DanielHeckrath](https://github.com/DanielHeckrath) Daniel Imfeld [@dimfeld](https://github.com/dimfeld) +Daniel Santos [@danlsgiga](https://github.com/danlsgiga) David Emanuel Buchmann [@wuurrd](https://github.com/wuurrd) +diacone [@diacone](https://github.com/diacone) +Diego Becciolini [@itizir](https://github.com/itizir) Dwayne Schultz [@myshkin5](https://github.com/myshkin5) +Elizabeth Jarrett [@mejarrett](https://github.com/mejarrett) +Elliot Williams [@elliotwms](https://github.com/elliotwms) Ellison Leão [@ellisonleao](https://github.com/ellisonleao) +Emil Gedda [@EmilGedda](https://github.com/EmilGedda) +Erik Grinaker [@erikgrinaker](https://github.com/erikgrinaker) Erwin [@eticzon](https://github.com/eticzon) +Etienne Lafarge [@elafarge](https://github.com/elafarge) Eugene Egorov [@EugeneEgorov](https://github.com/EugeneEgorov) Evan Shaw [@edsrzf](https://github.com/edsrzf) Fanfan [@wenpos](https://github.com/wenpos) Faolan C-P [@fcheslack](https://github.com/fcheslack) Filip Tepper [@filiptepper](https://github.com/filiptepper) +Garrett Kelley [@GarrettKelley](https://github.com/GarrettKelley) Gaspard Douady [@plopik](https://github.com/plopik) Gaylord Aulke [@blafasel42](https://github.com/blafasel42) Gerhard Häring [@ghaering](https://github.com/ghaering) +gregoryfranklin [@gregoryfranklin](https://github.com/gregoryfranklin) Guilherme Silveira [@guilherme-santos](https://github.com/guilherme-santos) Guillaume J. Charmes [@creack](https://github.com/creack) Guiseppe [@gm42](https://github.com/gm42) @@ -61,16 +88,22 @@ Han Yu [@MoonighT](https://github.com/MoonighT) Harmen [@alicebob](https://github.com/alicebob) Harrison Wright [@wright8191](https://github.com/wright8191) Henry Clifford [@hcliff](https://github.com/hcliff) +Henry Stern [@hstern](https://github.com/hstern) Igor Dubinskiy [@idubinskiy](https://github.com/idubinskiy) initialcontext [@initialcontext](https://github.com/initialcontext) Isaac Saldana [@isaldana](https://github.com/isaldana) +Ishan Jain [@ishanjain28](https://github.com/ishanjain28) J Barkey Wolf [@jjhbw](https://github.com/jjhbw) Jack Lindamood [@cep21](https://github.com/cep21) Jacob [@jdelgad](https://github.com/jdelgad) +Jan Düpmeier [@jduepmeier](https://github.com/jduepmeier) Jayme Rotsaert [@jrots](https://github.com/jrots) +Jean-Alexandre Beaumont [@Enteris](https://github.com/Enteris) +Jean-François Roche [@jfroche](https://github.com/jfroche) Jeff Rand [@jeffrand](https://github.com/jeffrand) Jeremy Canady [@jrmycanady](https://github.com/jrmycanady) Jérémie Vexiau [@texvex](https://github.com/texvex) +Jesper Bränn [@Yopi](https://github.com/Yopi) Jim Berlage [@jimberlage](https://github.com/jimberlage) Joe Buck [@four2five](https://github.com/four2five) John Barker [@j16r](https://github.com/j16r) @@ -78,51 +111,69 @@ John Goodall [@jgoodall](https://github.com/jgoodall) John Stanford [@jxstanford](https://github.com/jxstanford) Jonas Groenaas Drange [@semafor](https://github.com/semafor) Josef Fröhle [@Dexus](https://github.com/Dexus) +José Martínez [@xose](https://github.com/xose) Josh Chorlton [@jchorl](https://github.com/jchorl) +Jpnock [@Jpnock](https://github.com/Jpnock) jun [@coseyo](https://github.com/coseyo) Junpei Tsuji [@jun06t](https://github.com/jun06t) +Karen Yang [@kyangtt](https://github.com/kyangtt) kartlee [@kartlee](https://github.com/kartlee) Keith Hatton [@khatton-ft](https://github.com/khatton-ft) kel [@liketic](https://github.com/liketic) Kenta SUZUKI [@suzuken](https://github.com/suzuken) Kevin Mulvey [@kmulvey](https://github.com/kmulvey) Kyle Brandt [@kylebrandt](https://github.com/kylebrandt) +Larry Cinnabar [@larrycinnabar](https://github.com/larrycinnabar) Leandro Piccilli [@lpic10](https://github.com/lpic10) Lee [@leezhm](https://github.com/leezhm) +lechnertech [@lechnertech](https://github.com/lechnertech) M. Zulfa Achsani [@misterciput](https://github.com/misterciput) Maciej Lisiewski [@c2h5oh](https://github.com/c2h5oh) Mara Kim [@autochthe](https://github.com/autochthe) Marcy Buccellato [@marcybuccellato](https://github.com/marcybuccellato) Mark Costello [@mcos](https://github.com/mcos) Martin Häger [@protomouse](https://github.com/protomouse) +Matt Braymer-Hayes [@mattayes](https://github.com/mattayes) Medhi Bechina [@mdzor](https://github.com/mdzor) Mike Beshai [@mbesh](https://github.com/mbesh) mmfrb [@mmfrb](https://github.com/mmfrb) mnpritula [@mnpritula](https://github.com/mnpritula) mosa [@mosasiru](https://github.com/mosasiru) +Muhammet Çakır [@cakirmuha](https://github.com/cakirmuha) naimulhaider [@naimulhaider](https://github.com/naimulhaider) Naoya Yoshizawa [@azihsoyn](https://github.com/azihsoyn) navins [@ishare](https://github.com/ishare) Naoya Tsutsumi [@tutuming](https://github.com/tutuming) +Nathan Lacey [@nlacey](https://github.com/nlacey) NeoCN [@NeoCN](https://github.com/NeoCN) Nicholas Wolff [@nwolff](https://github.com/nwolff) Nick K [@utrack](https://github.com/utrack) Nick Whyte [@nickw444](https://github.com/nickw444) Nicolae Vartolomei [@nvartolomei](https://github.com/nvartolomei) +okhowang [@okhowang](https://github.com/okhowang) Orne Brocaar [@brocaar](https://github.com/brocaar) Paul [@eyeamera](https://github.com/eyeamera) +Paul Oldenburg [@lr-paul](https://github.com/lr-paul) +Pedro [@otherview](https://github.com/otherview) Pete C [@peteclark-ft](https://github.com/peteclark-ft) +Peter Nagy [@nagypeterjob](https://github.com/nagypeterjob) Paolo [@ppiccolo](https://github.com/ppiccolo) -Radoslaw Wesolowski [r--w](https://github.com/r--w) +Igor Panychek [@panychek](https://github.com/panychek) +Radoslaw Wesolowski [@r--w](https://github.com/r--w) +Rafał Gałus [@rgalus](https://github.com/rgalus) rchicoli [@rchicoli](https://github.com/rchicoli) Roman Colohanin [@zuzmic](https://github.com/zuzmic) Ryan Schmukler [@rschmukler](https://github.com/rschmukler) Ryan Wynn [@rwynn](https://github.com/rwynn) Sacheendra talluri [@sacheendra](https://github.com/sacheendra) Sean DuBois [@Sean-Der](https://github.com/Sean-Der) +Sagan Yaroslav [@sgnrslv](https://github.com/sgnrslv) Shalin LK [@shalinlk](https://github.com/shalinlk) +Simon Schneider [@raynigon](https://github.com/raynigon) singham [@zhaochenxiao90](https://github.com/zhaochenxiao90) Slawomir CALUCH [@slawo](https://github.com/slawo) +soarpenguin [@soarpenguin](https://github.com/soarpenguin) +Stephan Krynauw [@skrynauw](https://github.com/skrynauw) Stephen Kubovic [@stephenkubovic](https://github.com/stephenkubovic) Stuart Warren [@Woz](https://github.com/stuart-warren) Sulaiman [@salajlan](https://github.com/salajlan) @@ -130,15 +181,18 @@ Sundar [@sundarv85](https://github.com/sundarv85) Swarlston [@Swarlston](https://github.com/Swarlston) Take [ww24](https://github.com/ww24) Tetsuya Morimoto [@t2y](https://github.com/t2y) +TheZeroSlave [@TheZeroSlave](https://github.com/TheZeroSlave) +Tomasz Elendt [@telendt](https://github.com/telendt) TimeEmit [@TimeEmit](https://github.com/timeemit) TusharM [@tusharm](https://github.com/tusharm) wangtuo [@wangtuo](https://github.com/wangtuo) Wédney Yuri [@wedneyyuri](https://github.com/wedneyyuri) +Wesley Kim [@wesleyk](https://github.com/wesleyk) wolfkdy [@wolfkdy](https://github.com/wolfkdy) Wyndham Blanton [@wyndhblb](https://github.com/wyndhblb) Yarden Bar [@ayashjorden](https://github.com/ayashjorden) -zakthomas [@zakthomas](https://github.com/zakthomas) Yuya Kusakabe [@higebu](https://github.com/higebu) +zakthomas [@zakthomas](https://github.com/zakthomas) Zach [@snowzach](https://github.com/snowzach) zhangxin [@visaxin](https://github.com/visaxin) @林 [@zplzpl](https://github.com/zplzpl) diff --git a/vendor/gopkg.in/olivere/elastic.v6/ISSUE_TEMPLATE.md b/vendor/github.com/olivere/elastic/v7/ISSUE_TEMPLATE.md similarity index 92% rename from vendor/gopkg.in/olivere/elastic.v6/ISSUE_TEMPLATE.md rename to vendor/github.com/olivere/elastic/v7/ISSUE_TEMPLATE.md index 88d66cc8395e2445f2b3ebe1261ce0083a3442e8..11d6e2ca14d1511e69a875fc8da991ec08b1ebe2 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/ISSUE_TEMPLATE.md +++ b/vendor/github.com/olivere/elastic/v7/ISSUE_TEMPLATE.md @@ -3,10 +3,11 @@ your issue/question without further inquiry. Thank you. ### Which version of Elastic are you using? -[ ] elastic.v2 (for Elasticsearch 1.x) -[ ] elastic.v3 (for Elasticsearch 2.x) -[ ] elastic.v5 (for Elasticsearch 5.x) +[ ] elastic.v7 (for Elasticsearch 7.x) [ ] elastic.v6 (for Elasticsearch 6.x) +[ ] elastic.v5 (for Elasticsearch 5.x) +[ ] elastic.v3 (for Elasticsearch 2.x) +[ ] elastic.v2 (for Elasticsearch 1.x) ### Please describe the expected behavior diff --git a/vendor/github.com/olivere/elastic/LICENSE b/vendor/github.com/olivere/elastic/v7/LICENSE similarity index 100% rename from vendor/github.com/olivere/elastic/LICENSE rename to vendor/github.com/olivere/elastic/v7/LICENSE diff --git a/vendor/gopkg.in/olivere/elastic.v6/README.md b/vendor/github.com/olivere/elastic/v7/README.md similarity index 80% rename from vendor/gopkg.in/olivere/elastic.v6/README.md rename to vendor/github.com/olivere/elastic/v7/README.md index 9df2b56babb27152cfbd1b08e40fa921293cce42..2f2b073df01f8a8b37780e6ed013abe7f3cc5577 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/README.md +++ b/vendor/github.com/olivere/elastic/v7/README.md @@ -1,29 +1,29 @@ # Elastic -**This is a development branch that is actively being worked on. DO NOT USE IN PRODUCTION! If you want to use stable versions of Elastic, please use a dependency manager like [dep](https://github.com/golang/dep).** +**This is a development branch that is actively being worked on. DO NOT USE IN PRODUCTION! If you want to use stable versions of Elastic, please use Go modules for the 7.x release (or later) or a dependency manager like [dep](https://github.com/golang/dep) for earlier releases.** Elastic is an [Elasticsearch](http://www.elasticsearch.org/) client for the [Go](http://www.golang.org/) programming language. -[](https://travis-ci.org/olivere/elastic) -[](http://godoc.org/github.com/olivere/elastic) +[](https://github.com/olivere/elastic/actions) +[](https://pkg.go.dev/github.com/olivere/elastic/v7?tab=doc) [](https://raw.githubusercontent.com/olivere/elastic/master/LICENSE) See the [wiki](https://github.com/olivere/elastic/wiki) for additional information about Elastic. <a href="https://www.buymeacoffee.com/Bjd96U8fm" target="_blank"><img src="https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png" alt="Buy Me A Coffee" style="height: 41px !important;width: 174px !important;box-shadow: 0px 3px 2px 0px rgba(190, 190, 190, 0.5) !important;-webkit-box-shadow: 0px 3px 2px 0px rgba(190, 190, 190, 0.5) !important;" ></a> - ## Releases -**The release branches (e.g. [`release-branch.v6`](https://github.com/olivere/elastic/tree/release-branch.v6)) +**The release branches (e.g. [`release-branch.v7`](https://github.com/olivere/elastic/tree/release-branch.v7)) are actively being worked on and can break at any time. -If you want to use stable versions of Elastic, please use a dependency manager like [dep](https://github.com/golang/dep).** +If you want to use stable versions of Elastic, please use Go modules.** Here's the version matrix: Elasticsearch version | Elastic version | Package URL | Remarks | ----------------------|------------------|-------------|---------| +7.x | 7.0 | [`github.com/olivere/elastic/v7`](https://github.com/olivere/elastic) ([source](https://github.com/olivere/elastic/tree/release-branch.v7) [doc](http://godoc.org/github.com/olivere/elastic)) | Use Go modules. 6.x | 6.0 | [`github.com/olivere/elastic`](https://github.com/olivere/elastic) ([source](https://github.com/olivere/elastic/tree/release-branch.v6) [doc](http://godoc.org/github.com/olivere/elastic)) | Use a dependency manager (see below). 5.x | 5.0 | [`gopkg.in/olivere/elastic.v5`](https://gopkg.in/olivere/elastic.v5) ([source](https://github.com/olivere/elastic/tree/release-branch.v5) [doc](http://godoc.org/gopkg.in/olivere/elastic.v5)) | Actively maintained. 2.x | 3.0 | [`gopkg.in/olivere/elastic.v3`](https://gopkg.in/olivere/elastic.v3) ([source](https://github.com/olivere/elastic/tree/release-branch.v3) [doc](http://godoc.org/gopkg.in/olivere/elastic.v3)) | Deprecated. Please update. @@ -32,27 +32,32 @@ Elasticsearch version | Elastic version | Package URL | Remarks | **Example:** -You have installed Elasticsearch 6.0.0 and want to use Elastic. -As listed above, you should use Elastic 6.0. +You have installed Elasticsearch 7.0.0 and want to use Elastic. +As listed above, you should use Elastic 7.0 (code is in `release-branch.v7`). -To use the required version of Elastic in your application, it is strongly -advised to use a tool like -[dep](https://github.com/golang/dep) -or -[Glide](https://glide.sh/) -to manage that dependency. Make sure to use a version such as `^6.0.0`. +To use the required version of Elastic in your application, you +should use [Go modules](https://github.com/golang/go/wiki/Modules) +to manage dependencies. Make sure to use a version such as `7.0.0` or later. -To use Elastic, simply import: +To use Elastic, import: ```go -import "github.com/olivere/elastic" +import "github.com/olivere/elastic/v7" ``` +### Elastic 7.0 + +Elastic 7.0 targets Elasticsearch 7.x which [was released on April 10th 2019](https://www.elastic.co/guide/en/elasticsearch/reference/7.0/release-notes-7.0.0.html). + +As always with major version, there are a lot of [breaking changes](https://www.elastic.co/guide/en/elasticsearch/reference/7.0/release-notes-7.0.0.html#breaking-7.0.0). +We will use this as an opportunity to [clean up and refactor Elastic](https://github.com/olivere/elastic/blob/release-branch.v7/CHANGELOG-7.0.md), +as we already did in earlier (major) releases. + ### Elastic 6.0 Elastic 6.0 targets Elasticsearch 6.x which was [released on 14th November 2017](https://www.elastic.co/blog/elasticsearch-6-0-0-released). -Notice that there are will be a lot of [breaking changes in Elasticsearch 6.0](https://www.elastic.co/guide/en/elasticsearch/reference/6.2/breaking-changes-6.0.html) +Notice that there are a lot of [breaking changes in Elasticsearch 6.0](https://www.elastic.co/guide/en/elasticsearch/reference/6.7/breaking-changes-6.0.html) and we used this as an opportunity to [clean up and refactor Elastic](https://github.com/olivere/elastic/blob/release-branch.v6/CHANGELOG-6.0.md) as we did in the transition from earlier versions of Elastic. @@ -100,12 +105,10 @@ Having said that, there have been no big API changes that required you to rewrite your application big time. More often than not it's renaming APIs and adding/removing features so that Elastic is in sync with Elasticsearch. -Elastic has been used in production starting with Elasticsearch 0.90 up to recent 6.x -versions. Furthermore, we use [Travis CI](https://travis-ci.org/) -to test Elastic with the most recent versions of Elasticsearch and Go. -See the [.travis.yml](https://github.com/olivere/elastic/blob/master/.travis.yml) -file for the exact matrix and [Travis](https://travis-ci.org/olivere/elastic) -for the results. +Elastic has been used in production starting with Elasticsearch 0.90 up to recent 7.x +versions. +We recently switched to [GitHub Actions for testing](https://github.com/olivere/elastic/actions). +Before that, we used [Travis CI](https://travis-ci.org/olivere/elastic) successfully for years). Elasticsearch has quite a few features. Most of them are implemented by Elastic. I add features and APIs as required. It's straightforward @@ -129,8 +132,8 @@ Here's a [link to a complete working example for v6](https://gist.github.com/oli Here are a few tips on how to get used to Elastic: 1. Head over to the [Wiki](https://github.com/olivere/elastic/wiki) for detailed information and - topics like e.g. [how to add a middleware](/olivere/elastic/wiki/HttpTransport) - or how to [connect to AWS](/olivere/elastic/wiki/Using-with-AWS-Elasticsearch-Service). + topics like e.g. [how to add a middleware](https://github.com/olivere/elastic/wiki/HttpTransport) + or how to [connect to AWS](https://github.com/olivere/elastic/wiki/Using-with-AWS-Elasticsearch-Service). 2. If you are unsure how to implement something, read the tests (all `_test.go` files). They not only serve as a guard against changes, but also as a reference. 3. The [recipes](https://github.com/olivere/elastic/tree/release-branch.v6/recipes) @@ -191,6 +194,7 @@ Here are a few tips on how to get used to Elastic: - Bucket Aggregations - [x] Adjacency Matrix - [x] Children + - [x] Auto-interval Date Histogram - [x] Date Histogram - [x] Date Range - [x] Diversified Sampler @@ -252,22 +256,33 @@ Here are a few tips on how to get used to Elastic: - [x] Indices Segments - [ ] Indices Recovery - [ ] Indices Shard Stores -- [ ] Clear Cache +- [x] Clear Cache - [x] Flush - [x] Synced Flush - [x] Refresh - [x] Force Merge -### cat APIs +### Index Lifecycle Management APIs + +- [x] Create Policy +- [x] Get Policy +- [x] Delete Policy +- [ ] Move to Step +- [ ] Remove Policy +- [ ] Retry Policy +- [ ] Get Ilm Status +- [ ] Explain Lifecycle +- [ ] Start Ilm +- [ ] Stop Ilm -The cat APIs are not implemented as of now. We think they are better suited for operating with Elasticsearch on the command line. +### cat APIs -- [ ] cat aliases -- [ ] cat allocation -- [ ] cat count +- [X] cat aliases +- [X] cat allocation +- [X] cat count - [ ] cat fielddata -- [ ] cat health -- [ ] cat indices +- [X] cat health +- [X] cat indices - [ ] cat master - [ ] cat nodeattrs - [ ] cat nodes @@ -287,7 +302,7 @@ The cat APIs are not implemented as of now. We think they are better suited for - [x] Cluster State - [x] Cluster Stats - [ ] Pending Cluster Tasks -- [ ] Cluster Reroute +- [x] Cluster Reroute - [ ] Cluster Update Settings - [x] Nodes Stats - [x] Nodes Info @@ -338,8 +353,10 @@ The cat APIs are not implemented as of now. We think they are better suited for - [x] Geo Distance Query - [x] Geo Polygon Query - Specialized queries + - [x] Distance Feature Query - [x] More Like This Query - [x] Script Query + - [x] Script Score Query - [x] Percolate Query - Span queries - [ ] Span Term Query @@ -358,7 +375,9 @@ The cat APIs are not implemented as of now. We think they are better suited for - Snapshot and Restore - [x] Repositories - - [x] Snapshot + - [x] Snapshot get + - [x] Snapshot create + - [x] Snapshot delete - [ ] Restore - [ ] Snapshot status - [ ] Monitoring snapshot/restore status diff --git a/vendor/gopkg.in/olivere/elastic.v6/acknowledged_response.go b/vendor/github.com/olivere/elastic/v7/acknowledged_response.go similarity index 90% rename from vendor/gopkg.in/olivere/elastic.v6/acknowledged_response.go rename to vendor/github.com/olivere/elastic/v7/acknowledged_response.go index 2045ab85e4174ba4dae2b22ae59211031ab82802..a203c22543dea32d3436bc5e5a15f09cb24f4fa4 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/acknowledged_response.go +++ b/vendor/github.com/olivere/elastic/v7/acknowledged_response.go @@ -5,7 +5,7 @@ package elastic // AcknowledgedResponse is returned from various APIs. It simply indicates -// whether the operation is ack'd or not. +// whether the operation is acknowledged or not. type AcknowledgedResponse struct { Acknowledged bool `json:"acknowledged"` ShardsAcknowledged bool `json:"shards_acknowledged"` diff --git a/vendor/gopkg.in/olivere/elastic.v6/backoff.go b/vendor/github.com/olivere/elastic/v7/backoff.go similarity index 100% rename from vendor/gopkg.in/olivere/elastic.v6/backoff.go rename to vendor/github.com/olivere/elastic/v7/backoff.go diff --git a/vendor/gopkg.in/olivere/elastic.v6/bulk.go b/vendor/github.com/olivere/elastic/v7/bulk.go similarity index 83% rename from vendor/gopkg.in/olivere/elastic.v6/bulk.go rename to vendor/github.com/olivere/elastic/v7/bulk.go index 32b74cb8f0093e7b25a881f74cb0ce04c824526d..9ffe8806440cdd338e04866dc0551be7ef76c7fc 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/bulk.go +++ b/vendor/github.com/olivere/elastic/v7/bulk.go @@ -5,13 +5,14 @@ package elastic import ( - "bytes" "context" "errors" "fmt" + "net/http" "net/url" + "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // BulkService allows for batching bulk requests and sending them to @@ -23,12 +24,18 @@ import ( // reuse BulkService to send many batches. You do not have to create a new // BulkService for each batch. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-bulk.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/docs-bulk.html // for more details. type BulkService struct { client *Client retrier Retrier + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + index string typ string requests []BulkableRequest @@ -37,7 +44,6 @@ type BulkService struct { refresh string routing string waitForActiveShards string - pretty bool // estimated bulk size in bytes, up to the request index sizeInBytesCursor sizeInBytes int64 @@ -52,6 +58,46 @@ func NewBulkService(client *Client) *BulkService { return builder } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *BulkService) Pretty(pretty bool) *BulkService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *BulkService) Human(human bool) *BulkService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *BulkService) ErrorTrace(errorTrace bool) *BulkService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *BulkService) FilterPath(filterPath ...string) *BulkService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *BulkService) Header(name string, value string) *BulkService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *BulkService) Headers(headers http.Header) *BulkService { + s.headers = headers + return s +} + // Reset cleans up the request queue func (s *BulkService) Reset() { s.requests = make([]BulkableRequest, 0) @@ -91,10 +137,10 @@ func (s *BulkService) Timeout(timeout string) *BulkService { // Refresh controls when changes made by this request are made visible // to search. The allowed values are: "true" (refresh the relevant // primary and replica shards immediately), "wait_for" (wait for the -// changes to be made visible by a refresh before reying), or "false" +// changes to be made visible by a refresh before replying), or "false" // (no refresh related actions). The default value is "false". // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-refresh.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/docs-refresh.html // for details. func (s *BulkService) Refresh(refresh string) *BulkService { s.refresh = refresh @@ -123,18 +169,10 @@ func (s *BulkService) WaitForActiveShards(waitForActiveShards string) *BulkServi return s } -// Pretty tells Elasticsearch whether to return a formatted JSON response. -func (s *BulkService) Pretty(pretty bool) *BulkService { - s.pretty = pretty - return s -} - // Add adds bulkable requests, i.e. BulkIndexRequest, BulkUpdateRequest, // and/or BulkDeleteRequest. func (s *BulkService) Add(requests ...BulkableRequest) *BulkService { - for _, r := range requests { - s.requests = append(s.requests, r) - } + s.requests = append(s.requests, requests...) return s } @@ -172,7 +210,8 @@ func (s *BulkService) NumberOfActions() int { func (s *BulkService) bodyAsString() (string, error) { // Pre-allocate to reduce allocs - buf := bytes.NewBuffer(make([]byte, 0, s.EstimatedSizeInBytes())) + var buf strings.Builder + buf.Grow(int(s.EstimatedSizeInBytes())) for _, req := range s.requests { source, err := req.Source() @@ -226,9 +265,18 @@ func (s *BulkService) Do(ctx context.Context) (*BulkResponse, error) { path += "_bulk" // Parameters - params := make(url.Values) - if s.pretty { - params.Set("pretty", fmt.Sprintf("%v", s.pretty)) + params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if s.pipeline != "" { params.Set("pipeline", s.pipeline) @@ -254,6 +302,7 @@ func (s *BulkService) Do(ctx context.Context) (*BulkResponse, error) { Body: body, ContentType: "application/x-ndjson", Retrier: s.retrier, + Headers: s.headers, }) if err != nil { return nil, err @@ -325,7 +374,7 @@ type BulkResponseItem struct { Id string `json:"_id,omitempty"` Version int64 `json:"_version,omitempty"` Result string `json:"result,omitempty"` - Shards *shardsInfo `json:"_shards,omitempty"` + Shards *ShardsInfo `json:"_shards,omitempty"` SeqNo int64 `json:"_seq_no,omitempty"` PrimaryTerm int64 `json:"_primary_term,omitempty"` Status int `json:"status,omitempty"` diff --git a/vendor/gopkg.in/olivere/elastic.v6/bulk_delete_request.go b/vendor/github.com/olivere/elastic/v7/bulk_delete_request.go similarity index 68% rename from vendor/gopkg.in/olivere/elastic.v6/bulk_delete_request.go rename to vendor/github.com/olivere/elastic/v7/bulk_delete_request.go index 4bdadeb021243f53fed546e1a6b3e09eb6e74606..55b2cbcb001b346547509de5148295ad13d504ba 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/bulk_delete_request.go +++ b/vendor/github.com/olivere/elastic/v7/bulk_delete_request.go @@ -16,17 +16,19 @@ import ( // BulkDeleteRequest is a request to remove a document from Elasticsearch. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-bulk.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/docs-bulk.html // for details. type BulkDeleteRequest struct { BulkableRequest - index string - typ string - id string - parent string - routing string - version int64 // default is MATCH_ANY - versionType string // default is "internal" + index string + typ string + id string + parent string + routing string + version int64 // default is MATCH_ANY + versionType string // default is "internal" + ifSeqNo *int64 + ifPrimaryTerm *int64 source []string @@ -38,13 +40,15 @@ type bulkDeleteRequestCommand map[string]bulkDeleteRequestCommandOp //easyjson:json type bulkDeleteRequestCommandOp struct { - Index string `json:"_index,omitempty"` - Type string `json:"_type,omitempty"` - Id string `json:"_id,omitempty"` - Parent string `json:"parent,omitempty"` - Routing string `json:"routing,omitempty"` - Version int64 `json:"version,omitempty"` - VersionType string `json:"version_type,omitempty"` + Index string `json:"_index,omitempty"` + Type string `json:"_type,omitempty"` + Id string `json:"_id,omitempty"` + Parent string `json:"parent,omitempty"` + Routing string `json:"routing,omitempty"` + Version int64 `json:"version,omitempty"` + VersionType string `json:"version_type,omitempty"` + IfSeqNo *int64 `json:"if_seq_no,omitempty"` + IfPrimaryTerm *int64 `json:"if_primary_term,omitempty"` } // NewBulkDeleteRequest returns a new BulkDeleteRequest. @@ -116,6 +120,20 @@ func (r *BulkDeleteRequest) VersionType(versionType string) *BulkDeleteRequest { return r } +// IfSeqNo indicates to only perform the delete operation if the last +// operation that has changed the document has the specified sequence number. +func (r *BulkDeleteRequest) IfSeqNo(ifSeqNo int64) *BulkDeleteRequest { + r.ifSeqNo = &ifSeqNo + return r +} + +// IfPrimaryTerm indicates to only perform the delete operation if the +// last operation that has changed the document has the specified primary term. +func (r *BulkDeleteRequest) IfPrimaryTerm(ifPrimaryTerm int64) *BulkDeleteRequest { + r.ifPrimaryTerm = &ifPrimaryTerm + return r +} + // String returns the on-wire representation of the delete request, // concatenated as a single string. func (r *BulkDeleteRequest) String() string { @@ -128,7 +146,7 @@ func (r *BulkDeleteRequest) String() string { // Source returns the on-wire representation of the delete request, // split into an action-and-meta-data line and an (optional) source line. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-bulk.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/docs-bulk.html // for details. func (r *BulkDeleteRequest) Source() ([]string, error) { if r.source != nil { @@ -136,13 +154,15 @@ func (r *BulkDeleteRequest) Source() ([]string, error) { } command := bulkDeleteRequestCommand{ "delete": bulkDeleteRequestCommandOp{ - Index: r.index, - Type: r.typ, - Id: r.id, - Routing: r.routing, - Parent: r.parent, - Version: r.version, - VersionType: r.versionType, + Index: r.index, + Type: r.typ, + Id: r.id, + Routing: r.routing, + Parent: r.parent, + Version: r.version, + VersionType: r.versionType, + IfSeqNo: r.ifSeqNo, + IfPrimaryTerm: r.ifPrimaryTerm, }, } diff --git a/vendor/gopkg.in/olivere/elastic.v6/bulk_delete_request_easyjson.go b/vendor/github.com/olivere/elastic/v7/bulk_delete_request_easyjson.go similarity index 72% rename from vendor/gopkg.in/olivere/elastic.v6/bulk_delete_request_easyjson.go rename to vendor/github.com/olivere/elastic/v7/bulk_delete_request_easyjson.go index df3452ce68211be8d77168201b2aa6ee51c58ea8..084e5417e6c2b2055110e0b29fbe305368db2583 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/bulk_delete_request_easyjson.go +++ b/vendor/github.com/olivere/elastic/v7/bulk_delete_request_easyjson.go @@ -17,7 +17,7 @@ var ( _ easyjson.Marshaler ) -func easyjson8092efb6DecodeGithubComOlivereElastic(in *jlexer.Lexer, out *bulkDeleteRequestCommandOp) { +func easyjson8092efb6DecodeGithubComOlivereElasticV7(in *jlexer.Lexer, out *bulkDeleteRequestCommandOp) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -50,6 +50,26 @@ func easyjson8092efb6DecodeGithubComOlivereElastic(in *jlexer.Lexer, out *bulkDe out.Version = int64(in.Int64()) case "version_type": out.VersionType = string(in.String()) + case "if_seq_no": + if in.IsNull() { + in.Skip() + out.IfSeqNo = nil + } else { + if out.IfSeqNo == nil { + out.IfSeqNo = new(int64) + } + *out.IfSeqNo = int64(in.Int64()) + } + case "if_primary_term": + if in.IsNull() { + in.Skip() + out.IfPrimaryTerm = nil + } else { + if out.IfPrimaryTerm == nil { + out.IfPrimaryTerm = new(int64) + } + *out.IfPrimaryTerm = int64(in.Int64()) + } default: in.SkipRecursive() } @@ -60,18 +80,14 @@ func easyjson8092efb6DecodeGithubComOlivereElastic(in *jlexer.Lexer, out *bulkDe in.Consumed() } } -func easyjson8092efb6EncodeGithubComOlivereElastic(out *jwriter.Writer, in bulkDeleteRequestCommandOp) { +func easyjson8092efb6EncodeGithubComOlivereElasticV7(out *jwriter.Writer, in bulkDeleteRequestCommandOp) { out.RawByte('{') first := true _ = first if in.Index != "" { const prefix string = ",\"_index\":" - if first { - first = false - out.RawString(prefix[1:]) - } else { - out.RawString(prefix) - } + first = false + out.RawString(prefix[1:]) out.String(string(in.Index)) } if in.Type != "" { @@ -134,43 +150,59 @@ func easyjson8092efb6EncodeGithubComOlivereElastic(out *jwriter.Writer, in bulkD } out.String(string(in.VersionType)) } + if in.IfSeqNo != nil { + const prefix string = ",\"if_seq_no\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + out.Int64(int64(*in.IfSeqNo)) + } + if in.IfPrimaryTerm != nil { + const prefix string = ",\"if_primary_term\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + out.Int64(int64(*in.IfPrimaryTerm)) + } out.RawByte('}') } // MarshalJSON supports json.Marshaler interface func (v bulkDeleteRequestCommandOp) MarshalJSON() ([]byte, error) { w := jwriter.Writer{} - easyjson8092efb6EncodeGithubComOlivereElastic(&w, v) + easyjson8092efb6EncodeGithubComOlivereElasticV7(&w, v) return w.Buffer.BuildBytes(), w.Error } // MarshalEasyJSON supports easyjson.Marshaler interface func (v bulkDeleteRequestCommandOp) MarshalEasyJSON(w *jwriter.Writer) { - easyjson8092efb6EncodeGithubComOlivereElastic(w, v) + easyjson8092efb6EncodeGithubComOlivereElasticV7(w, v) } // UnmarshalJSON supports json.Unmarshaler interface func (v *bulkDeleteRequestCommandOp) UnmarshalJSON(data []byte) error { r := jlexer.Lexer{Data: data} - easyjson8092efb6DecodeGithubComOlivereElastic(&r, v) + easyjson8092efb6DecodeGithubComOlivereElasticV7(&r, v) return r.Error() } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *bulkDeleteRequestCommandOp) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjson8092efb6DecodeGithubComOlivereElastic(l, v) + easyjson8092efb6DecodeGithubComOlivereElasticV7(l, v) } -func easyjson8092efb6DecodeGithubComOlivereElastic1(in *jlexer.Lexer, out *bulkDeleteRequestCommand) { +func easyjson8092efb6DecodeGithubComOlivereElasticV71(in *jlexer.Lexer, out *bulkDeleteRequestCommand) { isTopLevel := in.IsStart() if in.IsNull() { in.Skip() } else { in.Delim('{') - if !in.IsDelim('}') { - *out = make(bulkDeleteRequestCommand) - } else { - *out = nil - } + *out = make(bulkDeleteRequestCommand) for !in.IsDelim('}') { key := string(in.String()) in.WantColon() @@ -185,7 +217,7 @@ func easyjson8092efb6DecodeGithubComOlivereElastic1(in *jlexer.Lexer, out *bulkD in.Consumed() } } -func easyjson8092efb6EncodeGithubComOlivereElastic1(out *jwriter.Writer, in bulkDeleteRequestCommand) { +func easyjson8092efb6EncodeGithubComOlivereElasticV71(out *jwriter.Writer, in bulkDeleteRequestCommand) { if in == nil && (out.Flags&jwriter.NilMapAsEmpty) == 0 { out.RawString(`null`) } else { @@ -208,23 +240,23 @@ func easyjson8092efb6EncodeGithubComOlivereElastic1(out *jwriter.Writer, in bulk // MarshalJSON supports json.Marshaler interface func (v bulkDeleteRequestCommand) MarshalJSON() ([]byte, error) { w := jwriter.Writer{} - easyjson8092efb6EncodeGithubComOlivereElastic1(&w, v) + easyjson8092efb6EncodeGithubComOlivereElasticV71(&w, v) return w.Buffer.BuildBytes(), w.Error } // MarshalEasyJSON supports easyjson.Marshaler interface func (v bulkDeleteRequestCommand) MarshalEasyJSON(w *jwriter.Writer) { - easyjson8092efb6EncodeGithubComOlivereElastic1(w, v) + easyjson8092efb6EncodeGithubComOlivereElasticV71(w, v) } // UnmarshalJSON supports json.Unmarshaler interface func (v *bulkDeleteRequestCommand) UnmarshalJSON(data []byte) error { r := jlexer.Lexer{Data: data} - easyjson8092efb6DecodeGithubComOlivereElastic1(&r, v) + easyjson8092efb6DecodeGithubComOlivereElasticV71(&r, v) return r.Error() } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *bulkDeleteRequestCommand) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjson8092efb6DecodeGithubComOlivereElastic1(l, v) + easyjson8092efb6DecodeGithubComOlivereElasticV71(l, v) } diff --git a/vendor/gopkg.in/olivere/elastic.v6/bulk_index_request.go b/vendor/github.com/olivere/elastic/v7/bulk_index_request.go similarity index 82% rename from vendor/gopkg.in/olivere/elastic.v6/bulk_index_request.go rename to vendor/github.com/olivere/elastic/v7/bulk_index_request.go index 0f09ac5eaaf8a69d713cd22b731f5095ec91a51e..fcbc71733011d1bc9b2699dcab9cf6c10736b722 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/bulk_index_request.go +++ b/vendor/github.com/olivere/elastic/v7/bulk_index_request.go @@ -14,7 +14,7 @@ import ( // BulkIndexRequest is a request to add a document to Elasticsearch. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-bulk.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/docs-bulk.html // for details. type BulkIndexRequest struct { BulkableRequest @@ -24,11 +24,13 @@ type BulkIndexRequest struct { opType string routing string parent string - version int64 // default is MATCH_ANY + version *int64 // default is MATCH_ANY versionType string // default is "internal" doc interface{} pipeline string retryOnConflict *int + ifSeqNo *int64 + ifPrimaryTerm *int64 source []string @@ -47,9 +49,11 @@ type bulkIndexRequestCommandOp struct { // RetryOnConflict is "_retry_on_conflict" for 6.0 and "retry_on_conflict" for 6.1+. RetryOnConflict *int `json:"retry_on_conflict,omitempty"` Routing string `json:"routing,omitempty"` - Version int64 `json:"version,omitempty"` + Version *int64 `json:"version,omitempty"` VersionType string `json:"version_type,omitempty"` Pipeline string `json:"pipeline,omitempty"` + IfSeqNo *int64 `json:"if_seq_no,omitempty"` + IfPrimaryTerm *int64 `json:"if_primary_term,omitempty"` } // NewBulkIndexRequest returns a new BulkIndexRequest. @@ -95,7 +99,7 @@ func (r *BulkIndexRequest) Id(id string) *BulkIndexRequest { // OpType specifies if this request should follow create-only or upsert // behavior. This follows the OpType of the standard document index API. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-index_.html#operation-type +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/docs-index_.html#operation-type // for details. func (r *BulkIndexRequest) OpType(opType string) *BulkIndexRequest { r.opType = opType @@ -120,7 +124,8 @@ func (r *BulkIndexRequest) Parent(parent string) *BulkIndexRequest { // Version indicates the version of the document as part of an optimistic // concurrency model. func (r *BulkIndexRequest) Version(version int64) *BulkIndexRequest { - r.version = version + v := version + r.version = &v r.source = nil return r } @@ -128,7 +133,7 @@ func (r *BulkIndexRequest) Version(version int64) *BulkIndexRequest { // VersionType specifies how versions are created. It can be e.g. internal, // external, external_gte, or force. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-index_.html#index-versioning +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/docs-index_.html#index-versioning // for details. func (r *BulkIndexRequest) VersionType(versionType string) *BulkIndexRequest { r.versionType = versionType @@ -157,6 +162,20 @@ func (r *BulkIndexRequest) Pipeline(pipeline string) *BulkIndexRequest { return r } +// IfSeqNo indicates to only perform the index operation if the last +// operation that has changed the document has the specified sequence number. +func (r *BulkIndexRequest) IfSeqNo(ifSeqNo int64) *BulkIndexRequest { + r.ifSeqNo = &ifSeqNo + return r +} + +// IfPrimaryTerm indicates to only perform the index operation if the +// last operation that has changed the document has the specified primary term. +func (r *BulkIndexRequest) IfPrimaryTerm(ifPrimaryTerm int64) *BulkIndexRequest { + r.ifPrimaryTerm = &ifPrimaryTerm + return r +} + // String returns the on-wire representation of the index request, // concatenated as a single string. func (r *BulkIndexRequest) String() string { @@ -169,7 +188,7 @@ func (r *BulkIndexRequest) String() string { // Source returns the on-wire representation of the index request, // split into an action-and-meta-data line and an (optional) source line. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-bulk.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/docs-bulk.html // for details. func (r *BulkIndexRequest) Source() ([]string, error) { // { "index" : { "_index" : "test", "_type" : "type1", "_id" : "1" } } @@ -192,6 +211,8 @@ func (r *BulkIndexRequest) Source() ([]string, error) { VersionType: r.versionType, RetryOnConflict: r.retryOnConflict, Pipeline: r.pipeline, + IfSeqNo: r.ifSeqNo, + IfPrimaryTerm: r.ifPrimaryTerm, } command := bulkIndexRequestCommand{ r.opType: indexCommand, diff --git a/vendor/gopkg.in/olivere/elastic.v6/bulk_index_request_easyjson.go b/vendor/github.com/olivere/elastic/v7/bulk_index_request_easyjson.go similarity index 72% rename from vendor/gopkg.in/olivere/elastic.v6/bulk_index_request_easyjson.go rename to vendor/github.com/olivere/elastic/v7/bulk_index_request_easyjson.go index f8792978facfed8729cc65226513fa0e823d8565..aaae24e263606772aadf3d66a12181ea113e0c80 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/bulk_index_request_easyjson.go +++ b/vendor/github.com/olivere/elastic/v7/bulk_index_request_easyjson.go @@ -17,7 +17,7 @@ var ( _ easyjson.Marshaler ) -func easyjson9de0fcbfDecodeGithubComOlivereElastic(in *jlexer.Lexer, out *bulkIndexRequestCommandOp) { +func easyjson9de0fcbfDecodeGithubComOlivereElasticV7(in *jlexer.Lexer, out *bulkIndexRequestCommandOp) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -57,11 +57,39 @@ func easyjson9de0fcbfDecodeGithubComOlivereElastic(in *jlexer.Lexer, out *bulkIn case "routing": out.Routing = string(in.String()) case "version": - out.Version = int64(in.Int64()) + if in.IsNull() { + in.Skip() + out.Version = nil + } else { + if out.Version == nil { + out.Version = new(int64) + } + *out.Version = int64(in.Int64()) + } case "version_type": out.VersionType = string(in.String()) case "pipeline": out.Pipeline = string(in.String()) + case "if_seq_no": + if in.IsNull() { + in.Skip() + out.IfSeqNo = nil + } else { + if out.IfSeqNo == nil { + out.IfSeqNo = new(int64) + } + *out.IfSeqNo = int64(in.Int64()) + } + case "if_primary_term": + if in.IsNull() { + in.Skip() + out.IfPrimaryTerm = nil + } else { + if out.IfPrimaryTerm == nil { + out.IfPrimaryTerm = new(int64) + } + *out.IfPrimaryTerm = int64(in.Int64()) + } default: in.SkipRecursive() } @@ -72,18 +100,14 @@ func easyjson9de0fcbfDecodeGithubComOlivereElastic(in *jlexer.Lexer, out *bulkIn in.Consumed() } } -func easyjson9de0fcbfEncodeGithubComOlivereElastic(out *jwriter.Writer, in bulkIndexRequestCommandOp) { +func easyjson9de0fcbfEncodeGithubComOlivereElasticV7(out *jwriter.Writer, in bulkIndexRequestCommandOp) { out.RawByte('{') first := true _ = first if in.Index != "" { const prefix string = ",\"_index\":" - if first { - first = false - out.RawString(prefix[1:]) - } else { - out.RawString(prefix) - } + first = false + out.RawString(prefix[1:]) out.String(string(in.Index)) } if in.Id != "" { @@ -136,7 +160,7 @@ func easyjson9de0fcbfEncodeGithubComOlivereElastic(out *jwriter.Writer, in bulkI } out.String(string(in.Routing)) } - if in.Version != 0 { + if in.Version != nil { const prefix string = ",\"version\":" if first { first = false @@ -144,7 +168,7 @@ func easyjson9de0fcbfEncodeGithubComOlivereElastic(out *jwriter.Writer, in bulkI } else { out.RawString(prefix) } - out.Int64(int64(in.Version)) + out.Int64(int64(*in.Version)) } if in.VersionType != "" { const prefix string = ",\"version_type\":" @@ -166,43 +190,59 @@ func easyjson9de0fcbfEncodeGithubComOlivereElastic(out *jwriter.Writer, in bulkI } out.String(string(in.Pipeline)) } + if in.IfSeqNo != nil { + const prefix string = ",\"if_seq_no\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + out.Int64(int64(*in.IfSeqNo)) + } + if in.IfPrimaryTerm != nil { + const prefix string = ",\"if_primary_term\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + out.Int64(int64(*in.IfPrimaryTerm)) + } out.RawByte('}') } // MarshalJSON supports json.Marshaler interface func (v bulkIndexRequestCommandOp) MarshalJSON() ([]byte, error) { w := jwriter.Writer{} - easyjson9de0fcbfEncodeGithubComOlivereElastic(&w, v) + easyjson9de0fcbfEncodeGithubComOlivereElasticV7(&w, v) return w.Buffer.BuildBytes(), w.Error } // MarshalEasyJSON supports easyjson.Marshaler interface func (v bulkIndexRequestCommandOp) MarshalEasyJSON(w *jwriter.Writer) { - easyjson9de0fcbfEncodeGithubComOlivereElastic(w, v) + easyjson9de0fcbfEncodeGithubComOlivereElasticV7(w, v) } // UnmarshalJSON supports json.Unmarshaler interface func (v *bulkIndexRequestCommandOp) UnmarshalJSON(data []byte) error { r := jlexer.Lexer{Data: data} - easyjson9de0fcbfDecodeGithubComOlivereElastic(&r, v) + easyjson9de0fcbfDecodeGithubComOlivereElasticV7(&r, v) return r.Error() } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *bulkIndexRequestCommandOp) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjson9de0fcbfDecodeGithubComOlivereElastic(l, v) + easyjson9de0fcbfDecodeGithubComOlivereElasticV7(l, v) } -func easyjson9de0fcbfDecodeGithubComOlivereElastic1(in *jlexer.Lexer, out *bulkIndexRequestCommand) { +func easyjson9de0fcbfDecodeGithubComOlivereElasticV71(in *jlexer.Lexer, out *bulkIndexRequestCommand) { isTopLevel := in.IsStart() if in.IsNull() { in.Skip() } else { in.Delim('{') - if !in.IsDelim('}') { - *out = make(bulkIndexRequestCommand) - } else { - *out = nil - } + *out = make(bulkIndexRequestCommand) for !in.IsDelim('}') { key := string(in.String()) in.WantColon() @@ -217,7 +257,7 @@ func easyjson9de0fcbfDecodeGithubComOlivereElastic1(in *jlexer.Lexer, out *bulkI in.Consumed() } } -func easyjson9de0fcbfEncodeGithubComOlivereElastic1(out *jwriter.Writer, in bulkIndexRequestCommand) { +func easyjson9de0fcbfEncodeGithubComOlivereElasticV71(out *jwriter.Writer, in bulkIndexRequestCommand) { if in == nil && (out.Flags&jwriter.NilMapAsEmpty) == 0 { out.RawString(`null`) } else { @@ -240,23 +280,23 @@ func easyjson9de0fcbfEncodeGithubComOlivereElastic1(out *jwriter.Writer, in bulk // MarshalJSON supports json.Marshaler interface func (v bulkIndexRequestCommand) MarshalJSON() ([]byte, error) { w := jwriter.Writer{} - easyjson9de0fcbfEncodeGithubComOlivereElastic1(&w, v) + easyjson9de0fcbfEncodeGithubComOlivereElasticV71(&w, v) return w.Buffer.BuildBytes(), w.Error } // MarshalEasyJSON supports easyjson.Marshaler interface func (v bulkIndexRequestCommand) MarshalEasyJSON(w *jwriter.Writer) { - easyjson9de0fcbfEncodeGithubComOlivereElastic1(w, v) + easyjson9de0fcbfEncodeGithubComOlivereElasticV71(w, v) } // UnmarshalJSON supports json.Unmarshaler interface func (v *bulkIndexRequestCommand) UnmarshalJSON(data []byte) error { r := jlexer.Lexer{Data: data} - easyjson9de0fcbfDecodeGithubComOlivereElastic1(&r, v) + easyjson9de0fcbfDecodeGithubComOlivereElasticV71(&r, v) return r.Error() } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *bulkIndexRequestCommand) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjson9de0fcbfDecodeGithubComOlivereElastic1(l, v) + easyjson9de0fcbfDecodeGithubComOlivereElasticV71(l, v) } diff --git a/vendor/gopkg.in/olivere/elastic.v6/bulk_processor.go b/vendor/github.com/olivere/elastic/v7/bulk_processor.go similarity index 82% rename from vendor/gopkg.in/olivere/elastic.v6/bulk_processor.go rename to vendor/github.com/olivere/elastic/v7/bulk_processor.go index eb8620fb81bdcba9973bac8302b2060f896bf87f..f2711f829d85aff1afbbb79ae7a49bb6a1c1f9f1 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/bulk_processor.go +++ b/vendor/github.com/olivere/elastic/v7/bulk_processor.go @@ -6,12 +6,21 @@ package elastic import ( "context" + "errors" "net" "sync" "sync/atomic" "time" ) +var ( + // ErrBulkItemRetry is returned in BulkProcessor from a worker when + // a response item needs to be retried. + ErrBulkItemRetry = errors.New("elastic: uncommitted bulk response items") + + defaultRetryItemStatusCodes = []int{408, 429, 503, 507} +) + // BulkProcessorService allows to easily process bulk requests. It allows setting // policies when to flush new bulk requests, e.g. based on a number of actions, // on the size of the actions, and/or to flush periodically. It also allows @@ -21,7 +30,9 @@ import ( // BulkProcessorService, by default, commits either every 1000 requests or when the // (estimated) size of the bulk requests exceeds 5 MB. However, it does not // commit periodically. BulkProcessorService also does retry by default, using -// an exponential backoff algorithm. +// an exponential backoff algorithm. It also will automatically re-enqueue items +// returned with a status of 408, 429, 503 or 507. You can change this +// behavior with RetryItemStatusCodes. // // The caller is responsible for setting the index and type on every // bulk request added to BulkProcessorService. @@ -30,16 +41,17 @@ import ( // Elasticsearch Java API as documented in // https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-docs-bulk-processor.html. type BulkProcessorService struct { - c *Client - beforeFn BulkBeforeFunc - afterFn BulkAfterFunc - name string // name of processor - numWorkers int // # of workers (>= 1) - bulkActions int // # of requests after which to commit - bulkSize int // # of bytes after which to commit - flushInterval time.Duration // periodic flush interval - wantStats bool // indicates whether to gather statistics - backoff Backoff // a custom Backoff to use for errors + c *Client + beforeFn BulkBeforeFunc + afterFn BulkAfterFunc + name string // name of processor + numWorkers int // # of workers (>= 1) + bulkActions int // # of requests after which to commit + bulkSize int // # of bytes after which to commit + flushInterval time.Duration // periodic flush interval + wantStats bool // indicates whether to gather statistics + backoff Backoff // a custom Backoff to use for errors + retryItemStatusCodes []int // array of status codes for bulk response line items that may be retried } // NewBulkProcessorService creates a new BulkProcessorService. @@ -53,6 +65,7 @@ func NewBulkProcessorService(client *Client) *BulkProcessorService { time.Duration(200)*time.Millisecond, time.Duration(10000)*time.Millisecond, ), + retryItemStatusCodes: defaultRetryItemStatusCodes, } } @@ -64,7 +77,7 @@ type BulkBeforeFunc func(executionId int64, requests []BulkableRequest) // after a commit to Elasticsearch. The err parameter signals an error. type BulkAfterFunc func(executionId int64, requests []BulkableRequest, response *BulkResponse, err error) -// Before specifies a function to be executed before bulk requests get comitted +// Before specifies a function to be executed before bulk requests get committed // to Elasticsearch. func (s *BulkProcessorService) Before(fn BulkBeforeFunc) *BulkProcessorService { s.beforeFn = fn @@ -72,7 +85,7 @@ func (s *BulkProcessorService) Before(fn BulkBeforeFunc) *BulkProcessorService { } // After specifies a function to be executed when bulk requests have been -// comitted to Elasticsearch. The After callback executes both when the +// committed to Elasticsearch. The After callback executes both when the // commit was successful as well as on failures. func (s *BulkProcessorService) After(fn BulkAfterFunc) *BulkProcessorService { s.afterFn = fn @@ -128,6 +141,13 @@ func (s *BulkProcessorService) Backoff(backoff Backoff) *BulkProcessorService { return s } +// RetryItemStatusCodes sets an array of status codes that indicate that a bulk +// response line item should be retried. +func (s *BulkProcessorService) RetryItemStatusCodes(retryItemStatusCodes ...int) *BulkProcessorService { + s.retryItemStatusCodes = retryItemStatusCodes + return s +} + // Do creates a new BulkProcessor and starts it. // Consider the BulkProcessor as a running instance that accepts bulk requests // and commits them to Elasticsearch, spreading the work across one or more @@ -144,6 +164,12 @@ func (s *BulkProcessorService) Backoff(backoff Backoff) *BulkProcessorService { // Calling Do several times returns new BulkProcessors. You probably don't // want to do this. BulkProcessorService implements just a builder pattern. func (s *BulkProcessorService) Do(ctx context.Context) (*BulkProcessor, error) { + + retryItemStatusCodes := make(map[int]struct{}) + for _, code := range s.retryItemStatusCodes { + retryItemStatusCodes[code] = struct{}{} + } + p := newBulkProcessor( s.c, s.beforeFn, @@ -154,7 +180,8 @@ func (s *BulkProcessorService) Do(ctx context.Context) (*BulkProcessor, error) { s.bulkSize, s.flushInterval, s.wantStats, - s.backoff) + s.backoff, + retryItemStatusCodes) err := p.Start(ctx) if err != nil { @@ -228,21 +255,22 @@ func (st *BulkProcessorWorkerStats) dup() *BulkProcessorWorkerStats { // BulkProcessor is returned by setting up a BulkProcessorService and // calling the Do method. type BulkProcessor struct { - c *Client - beforeFn BulkBeforeFunc - afterFn BulkAfterFunc - name string - bulkActions int - bulkSize int - numWorkers int - executionId int64 - requestsC chan BulkableRequest - workerWg sync.WaitGroup - workers []*bulkWorker - flushInterval time.Duration - flusherStopC chan struct{} - wantStats bool - backoff Backoff + c *Client + beforeFn BulkBeforeFunc + afterFn BulkAfterFunc + name string + bulkActions int + bulkSize int + numWorkers int + executionId int64 + requestsC chan BulkableRequest + workerWg sync.WaitGroup + workers []*bulkWorker + flushInterval time.Duration + flusherStopC chan struct{} + wantStats bool + retryItemStatusCodes map[int]struct{} + backoff Backoff startedMu sync.Mutex // guards the following block started bool @@ -263,18 +291,20 @@ func newBulkProcessor( bulkSize int, flushInterval time.Duration, wantStats bool, - backoff Backoff) *BulkProcessor { + backoff Backoff, + retryItemStatusCodes map[int]struct{}) *BulkProcessor { return &BulkProcessor{ - c: client, - beforeFn: beforeFn, - afterFn: afterFn, - name: name, - numWorkers: numWorkers, - bulkActions: bulkActions, - bulkSize: bulkSize, - flushInterval: flushInterval, - wantStats: wantStats, - backoff: backoff, + c: client, + beforeFn: beforeFn, + afterFn: afterFn, + name: name, + numWorkers: numWorkers, + bulkActions: bulkActions, + bulkSize: bulkSize, + flushInterval: flushInterval, + wantStats: wantStats, + retryItemStatusCodes: retryItemStatusCodes, + backoff: backoff, } } @@ -504,13 +534,19 @@ func (w *bulkWorker) commit(ctx context.Context) error { reqs := w.service.requests res, err = w.service.Do(ctx) if err == nil { - // Check res.Items since some might be soft failures - if res.Items != nil && res.Errors { - // res.Items will be 1 to 1 with reqs in same order - for i, item := range res.Items { - for _, result := range item { - if result.Status == 429 { // too many requests - w.service.Add(reqs[i]) + // Overall bulk request was OK. But each bulk response item also has a status + if w.p.retryItemStatusCodes != nil && len(w.p.retryItemStatusCodes) > 0 { + // Check res.Items since some might be soft failures + if res.Items != nil && res.Errors { + // res.Items will be 1 to 1 with reqs in same order + for i, item := range res.Items { + for _, result := range item { + if _, found := w.p.retryItemStatusCodes[result.Status]; found { + w.service.Add(reqs[i]) + if err == nil { + err = ErrBulkItemRetry + } + } } } } @@ -574,7 +610,7 @@ func (w *bulkWorker) waitForActiveConnection(ready chan<- struct{}) { return } case <-t.C: - client.healthcheck(time.Duration(3)*time.Second, true) + client.healthcheck(context.Background(), 3*time.Second, true) if client.mustActiveConn() == nil { // found an active connection // exit and signal done to the WaitGroup diff --git a/vendor/gopkg.in/olivere/elastic.v6/bulk_request.go b/vendor/github.com/olivere/elastic/v7/bulk_request.go similarity index 100% rename from vendor/gopkg.in/olivere/elastic.v6/bulk_request.go rename to vendor/github.com/olivere/elastic/v7/bulk_request.go diff --git a/vendor/gopkg.in/olivere/elastic.v6/bulk_update_request.go b/vendor/github.com/olivere/elastic/v7/bulk_update_request.go similarity index 82% rename from vendor/gopkg.in/olivere/elastic.v6/bulk_update_request.go rename to vendor/github.com/olivere/elastic/v7/bulk_update_request.go index d55002a794a1adb4a09c806f969630d89b2e0424..a0ddf18051493a0e81cb1d59ef97b64dc803c081 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/bulk_update_request.go +++ b/vendor/github.com/olivere/elastic/v7/bulk_update_request.go @@ -14,7 +14,7 @@ import ( // BulkUpdateRequest is a request to update a document in Elasticsearch. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-bulk.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/docs-bulk.html // for details. type BulkUpdateRequest struct { BulkableRequest @@ -34,6 +34,8 @@ type BulkUpdateRequest struct { detectNoop *bool doc interface{} returnSource *bool + ifSeqNo *int64 + ifPrimaryTerm *int64 source []string @@ -54,6 +56,8 @@ type bulkUpdateRequestCommandOp struct { Routing string `json:"routing,omitempty"` Version int64 `json:"version,omitempty"` VersionType string `json:"version_type,omitempty"` + IfSeqNo *int64 `json:"if_seq_no,omitempty"` + IfPrimaryTerm *int64 `json:"if_primary_term,omitempty"` } //easyjson:json @@ -120,8 +124,8 @@ func (r *BulkUpdateRequest) Parent(parent string) *BulkUpdateRequest { } // Script specifies an update script. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-bulk.html#bulk-update -// and https://www.elastic.co/guide/en/elasticsearch/reference/6.2/modules-scripting.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/docs-bulk.html#bulk-update +// and https://www.elastic.co/guide/en/elasticsearch/reference/7.0/modules-scripting.html // for details. func (r *BulkUpdateRequest) Script(script *Script) *BulkUpdateRequest { r.script = script @@ -132,7 +136,7 @@ func (r *BulkUpdateRequest) Script(script *Script) *BulkUpdateRequest { // ScripedUpsert specifies if your script will run regardless of // whether the document exists or not. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-update.html#_literal_scripted_upsert_literal +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/docs-update.html#_literal_scripted_upsert_literal func (r *BulkUpdateRequest) ScriptedUpsert(upsert bool) *BulkUpdateRequest { r.scriptedUpsert = &upsert r.source = nil @@ -162,6 +166,20 @@ func (r *BulkUpdateRequest) VersionType(versionType string) *BulkUpdateRequest { return r } +// IfSeqNo indicates to only perform the index operation if the last +// operation that has changed the document has the specified sequence number. +func (r *BulkUpdateRequest) IfSeqNo(ifSeqNo int64) *BulkUpdateRequest { + r.ifSeqNo = &ifSeqNo + return r +} + +// IfPrimaryTerm indicates to only perform the index operation if the +// last operation that has changed the document has the specified primary term. +func (r *BulkUpdateRequest) IfPrimaryTerm(ifPrimaryTerm int64) *BulkUpdateRequest { + r.ifPrimaryTerm = &ifPrimaryTerm + return r +} + // Doc specifies the updated document. func (r *BulkUpdateRequest) Doc(doc interface{}) *BulkUpdateRequest { r.doc = doc @@ -172,7 +190,7 @@ func (r *BulkUpdateRequest) Doc(doc interface{}) *BulkUpdateRequest { // DocAsUpsert indicates whether the contents of Doc should be used as // the Upsert value. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-update.html#_literal_doc_as_upsert_literal +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/docs-update.html#_literal_doc_as_upsert_literal // for details. func (r *BulkUpdateRequest) DocAsUpsert(docAsUpsert bool) *BulkUpdateRequest { r.docAsUpsert = &docAsUpsert @@ -218,7 +236,7 @@ func (r *BulkUpdateRequest) String() string { // Source returns the on-wire representation of the update request, // split into an action-and-meta-data line and an (optional) source line. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-bulk.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/docs-bulk.html // for details. func (r *BulkUpdateRequest) Source() ([]string, error) { // { "update" : { "_index" : "test", "_type" : "type1", "_id" : "1", ... } } @@ -243,6 +261,8 @@ func (r *BulkUpdateRequest) Source() ([]string, error) { Version: r.version, VersionType: r.versionType, RetryOnConflict: r.retryOnConflict, + IfSeqNo: r.ifSeqNo, + IfPrimaryTerm: r.ifPrimaryTerm, } command := bulkUpdateRequestCommand{ "update": updateCommand, @@ -264,12 +284,28 @@ func (r *BulkUpdateRequest) Source() ([]string, error) { lines[0] = string(body) // 2nd line: {"doc" : { ... }} or {"script": {...}} + var doc interface{} + if r.doc != nil { + // Automatically serialize strings as raw JSON + switch t := r.doc.(type) { + default: + doc = r.doc + case string: + if len(t) > 0 { + doc = json.RawMessage(t) + } + case *string: + if t != nil && len(*t) > 0 { + doc = json.RawMessage(*t) + } + } + } data := bulkUpdateRequestCommandData{ DocAsUpsert: r.docAsUpsert, DetectNoop: r.detectNoop, Upsert: r.upsert, ScriptedUpsert: r.scriptedUpsert, - Doc: r.doc, + Doc: doc, Source: r.returnSource, } if r.script != nil { diff --git a/vendor/gopkg.in/olivere/elastic.v6/bulk_update_request_easyjson.go b/vendor/github.com/olivere/elastic/v7/bulk_update_request_easyjson.go similarity index 82% rename from vendor/gopkg.in/olivere/elastic.v6/bulk_update_request_easyjson.go rename to vendor/github.com/olivere/elastic/v7/bulk_update_request_easyjson.go index d2c2cbfc7b803f75e88ea4950082a07c5ef98e95..79d8db167659d9bb12e662002be24f427255c8de 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/bulk_update_request_easyjson.go +++ b/vendor/github.com/olivere/elastic/v7/bulk_update_request_easyjson.go @@ -17,7 +17,7 @@ var ( _ easyjson.Marshaler ) -func easyjson1ed00e60DecodeGithubComOlivereElastic(in *jlexer.Lexer, out *bulkUpdateRequestCommandOp) { +func easyjson1ed00e60DecodeGithubComOlivereElasticV7(in *jlexer.Lexer, out *bulkUpdateRequestCommandOp) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -60,6 +60,26 @@ func easyjson1ed00e60DecodeGithubComOlivereElastic(in *jlexer.Lexer, out *bulkUp out.Version = int64(in.Int64()) case "version_type": out.VersionType = string(in.String()) + case "if_seq_no": + if in.IsNull() { + in.Skip() + out.IfSeqNo = nil + } else { + if out.IfSeqNo == nil { + out.IfSeqNo = new(int64) + } + *out.IfSeqNo = int64(in.Int64()) + } + case "if_primary_term": + if in.IsNull() { + in.Skip() + out.IfPrimaryTerm = nil + } else { + if out.IfPrimaryTerm == nil { + out.IfPrimaryTerm = new(int64) + } + *out.IfPrimaryTerm = int64(in.Int64()) + } default: in.SkipRecursive() } @@ -70,18 +90,14 @@ func easyjson1ed00e60DecodeGithubComOlivereElastic(in *jlexer.Lexer, out *bulkUp in.Consumed() } } -func easyjson1ed00e60EncodeGithubComOlivereElastic(out *jwriter.Writer, in bulkUpdateRequestCommandOp) { +func easyjson1ed00e60EncodeGithubComOlivereElasticV7(out *jwriter.Writer, in bulkUpdateRequestCommandOp) { out.RawByte('{') first := true _ = first if in.Index != "" { const prefix string = ",\"_index\":" - if first { - first = false - out.RawString(prefix[1:]) - } else { - out.RawString(prefix) - } + first = false + out.RawString(prefix[1:]) out.String(string(in.Index)) } if in.Type != "" { @@ -154,33 +170,53 @@ func easyjson1ed00e60EncodeGithubComOlivereElastic(out *jwriter.Writer, in bulkU } out.String(string(in.VersionType)) } + if in.IfSeqNo != nil { + const prefix string = ",\"if_seq_no\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + out.Int64(int64(*in.IfSeqNo)) + } + if in.IfPrimaryTerm != nil { + const prefix string = ",\"if_primary_term\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + out.Int64(int64(*in.IfPrimaryTerm)) + } out.RawByte('}') } // MarshalJSON supports json.Marshaler interface func (v bulkUpdateRequestCommandOp) MarshalJSON() ([]byte, error) { w := jwriter.Writer{} - easyjson1ed00e60EncodeGithubComOlivereElastic(&w, v) + easyjson1ed00e60EncodeGithubComOlivereElasticV7(&w, v) return w.Buffer.BuildBytes(), w.Error } // MarshalEasyJSON supports easyjson.Marshaler interface func (v bulkUpdateRequestCommandOp) MarshalEasyJSON(w *jwriter.Writer) { - easyjson1ed00e60EncodeGithubComOlivereElastic(w, v) + easyjson1ed00e60EncodeGithubComOlivereElasticV7(w, v) } // UnmarshalJSON supports json.Unmarshaler interface func (v *bulkUpdateRequestCommandOp) UnmarshalJSON(data []byte) error { r := jlexer.Lexer{Data: data} - easyjson1ed00e60DecodeGithubComOlivereElastic(&r, v) + easyjson1ed00e60DecodeGithubComOlivereElasticV7(&r, v) return r.Error() } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *bulkUpdateRequestCommandOp) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjson1ed00e60DecodeGithubComOlivereElastic(l, v) + easyjson1ed00e60DecodeGithubComOlivereElasticV7(l, v) } -func easyjson1ed00e60DecodeGithubComOlivereElastic1(in *jlexer.Lexer, out *bulkUpdateRequestCommandData) { +func easyjson1ed00e60DecodeGithubComOlivereElasticV71(in *jlexer.Lexer, out *bulkUpdateRequestCommandData) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -273,18 +309,14 @@ func easyjson1ed00e60DecodeGithubComOlivereElastic1(in *jlexer.Lexer, out *bulkU in.Consumed() } } -func easyjson1ed00e60EncodeGithubComOlivereElastic1(out *jwriter.Writer, in bulkUpdateRequestCommandData) { +func easyjson1ed00e60EncodeGithubComOlivereElasticV71(out *jwriter.Writer, in bulkUpdateRequestCommandData) { out.RawByte('{') first := true _ = first if in.DetectNoop != nil { const prefix string = ",\"detect_noop\":" - if first { - first = false - out.RawString(prefix[1:]) - } else { - out.RawString(prefix) - } + first = false + out.RawString(prefix[1:]) out.Bool(bool(*in.DetectNoop)) } if in.Doc != nil { @@ -371,37 +403,33 @@ func easyjson1ed00e60EncodeGithubComOlivereElastic1(out *jwriter.Writer, in bulk // MarshalJSON supports json.Marshaler interface func (v bulkUpdateRequestCommandData) MarshalJSON() ([]byte, error) { w := jwriter.Writer{} - easyjson1ed00e60EncodeGithubComOlivereElastic1(&w, v) + easyjson1ed00e60EncodeGithubComOlivereElasticV71(&w, v) return w.Buffer.BuildBytes(), w.Error } // MarshalEasyJSON supports easyjson.Marshaler interface func (v bulkUpdateRequestCommandData) MarshalEasyJSON(w *jwriter.Writer) { - easyjson1ed00e60EncodeGithubComOlivereElastic1(w, v) + easyjson1ed00e60EncodeGithubComOlivereElasticV71(w, v) } // UnmarshalJSON supports json.Unmarshaler interface func (v *bulkUpdateRequestCommandData) UnmarshalJSON(data []byte) error { r := jlexer.Lexer{Data: data} - easyjson1ed00e60DecodeGithubComOlivereElastic1(&r, v) + easyjson1ed00e60DecodeGithubComOlivereElasticV71(&r, v) return r.Error() } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *bulkUpdateRequestCommandData) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjson1ed00e60DecodeGithubComOlivereElastic1(l, v) + easyjson1ed00e60DecodeGithubComOlivereElasticV71(l, v) } -func easyjson1ed00e60DecodeGithubComOlivereElastic2(in *jlexer.Lexer, out *bulkUpdateRequestCommand) { +func easyjson1ed00e60DecodeGithubComOlivereElasticV72(in *jlexer.Lexer, out *bulkUpdateRequestCommand) { isTopLevel := in.IsStart() if in.IsNull() { in.Skip() } else { in.Delim('{') - if !in.IsDelim('}') { - *out = make(bulkUpdateRequestCommand) - } else { - *out = nil - } + *out = make(bulkUpdateRequestCommand) for !in.IsDelim('}') { key := string(in.String()) in.WantColon() @@ -416,7 +444,7 @@ func easyjson1ed00e60DecodeGithubComOlivereElastic2(in *jlexer.Lexer, out *bulkU in.Consumed() } } -func easyjson1ed00e60EncodeGithubComOlivereElastic2(out *jwriter.Writer, in bulkUpdateRequestCommand) { +func easyjson1ed00e60EncodeGithubComOlivereElasticV72(out *jwriter.Writer, in bulkUpdateRequestCommand) { if in == nil && (out.Flags&jwriter.NilMapAsEmpty) == 0 { out.RawString(`null`) } else { @@ -439,23 +467,23 @@ func easyjson1ed00e60EncodeGithubComOlivereElastic2(out *jwriter.Writer, in bulk // MarshalJSON supports json.Marshaler interface func (v bulkUpdateRequestCommand) MarshalJSON() ([]byte, error) { w := jwriter.Writer{} - easyjson1ed00e60EncodeGithubComOlivereElastic2(&w, v) + easyjson1ed00e60EncodeGithubComOlivereElasticV72(&w, v) return w.Buffer.BuildBytes(), w.Error } // MarshalEasyJSON supports easyjson.Marshaler interface func (v bulkUpdateRequestCommand) MarshalEasyJSON(w *jwriter.Writer) { - easyjson1ed00e60EncodeGithubComOlivereElastic2(w, v) + easyjson1ed00e60EncodeGithubComOlivereElasticV72(w, v) } // UnmarshalJSON supports json.Unmarshaler interface func (v *bulkUpdateRequestCommand) UnmarshalJSON(data []byte) error { r := jlexer.Lexer{Data: data} - easyjson1ed00e60DecodeGithubComOlivereElastic2(&r, v) + easyjson1ed00e60DecodeGithubComOlivereElasticV72(&r, v) return r.Error() } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *bulkUpdateRequestCommand) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjson1ed00e60DecodeGithubComOlivereElastic2(l, v) + easyjson1ed00e60DecodeGithubComOlivereElasticV72(l, v) } diff --git a/vendor/gopkg.in/olivere/elastic.v6/canonicalize.go b/vendor/github.com/olivere/elastic/v7/canonicalize.go similarity index 100% rename from vendor/gopkg.in/olivere/elastic.v6/canonicalize.go rename to vendor/github.com/olivere/elastic/v7/canonicalize.go diff --git a/vendor/gopkg.in/olivere/elastic.v6/cat_aliases.go b/vendor/github.com/olivere/elastic/v7/cat_aliases.go similarity index 65% rename from vendor/gopkg.in/olivere/elastic.v6/cat_aliases.go rename to vendor/github.com/olivere/elastic/v7/cat_aliases.go index 4e49ce833de42fde10d71fb12427b8c68c674ae9..ddadef5b28a1c180540580b0bee89dfe1d8a0c8c 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/cat_aliases.go +++ b/vendor/github.com/olivere/elastic/v7/cat_aliases.go @@ -7,20 +7,27 @@ package elastic import ( "context" "fmt" + "net/http" "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // CatAliasesService shows information about currently configured aliases // to indices including filter and routing infos. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/cat-aliases.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/cat-aliases.html // for details. type CatAliasesService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + local *bool masterTimeout string aliases []string @@ -35,6 +42,46 @@ func NewCatAliasesService(client *Client) *CatAliasesService { } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *CatAliasesService) Pretty(pretty bool) *CatAliasesService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *CatAliasesService) Human(human bool) *CatAliasesService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *CatAliasesService) ErrorTrace(errorTrace bool) *CatAliasesService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *CatAliasesService) FilterPath(filterPath ...string) *CatAliasesService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *CatAliasesService) Header(name string, value string) *CatAliasesService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *CatAliasesService) Headers(headers http.Header) *CatAliasesService { + s.headers = headers + return s +} + // Alias specifies one or more aliases to which information should be returned. func (s *CatAliasesService) Alias(alias ...string) *CatAliasesService { s.aliases = alias @@ -74,12 +121,6 @@ func (s *CatAliasesService) Sort(fields ...string) *CatAliasesService { return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *CatAliasesService) Pretty(pretty bool) *CatAliasesService { - s.pretty = pretty - return s -} - // buildURL builds the URL for the operation. func (s *CatAliasesService) buildURL() (string, url.Values, error) { // Build URL @@ -103,8 +144,17 @@ func (s *CatAliasesService) buildURL() (string, url.Values, error) { params := url.Values{ "format": []string{"json"}, // always returns as JSON } - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if v := s.local; v != nil { params.Set("local", fmt.Sprint(*v)) @@ -115,6 +165,9 @@ func (s *CatAliasesService) buildURL() (string, url.Values, error) { if len(s.sort) > 0 { params.Set("s", strings.Join(s.sort, ",")) } + if len(s.columns) > 0 { + params.Set("h", strings.Join(s.columns, ",")) + } return path, params, nil } @@ -128,9 +181,10 @@ func (s *CatAliasesService) Do(ctx context.Context) (CatAliasesResponse, error) // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, + Method: "GET", + Path: path, + Params: params, + Headers: s.headers, }) if err != nil { return nil, err @@ -163,4 +217,6 @@ type CatAliasesResponseRow struct { RoutingIndex string `json:"routing.index"` // RoutingSearch specifies the search routing (or "-"). RoutingSearch string `json:"routing.search"` + // IsWriteIndex indicates whether the index can be written to (or "-"). + IsWriteIndex string `json:"is_write_index"` } diff --git a/vendor/gopkg.in/olivere/elastic.v6/cat_allocation.go b/vendor/github.com/olivere/elastic/v7/cat_allocation.go similarity index 70% rename from vendor/gopkg.in/olivere/elastic.v6/cat_allocation.go rename to vendor/github.com/olivere/elastic/v7/cat_allocation.go index ec15dcaf033318f0ac3e72dc23f589c51056140e..0e49707a2138ae65667477a5e8d36d396b3592d9 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/cat_allocation.go +++ b/vendor/github.com/olivere/elastic/v7/cat_allocation.go @@ -7,20 +7,27 @@ package elastic import ( "context" "fmt" + "net/http" "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // CatAllocationService provides a snapshot of how many shards are allocated // to each data node and how much disk space they are using. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/cat-allocation.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/cat-allocation.html // for details. type CatAllocationService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + bytes string // b, k, m, or g local *bool masterTimeout string @@ -36,6 +43,46 @@ func NewCatAllocationService(client *Client) *CatAllocationService { } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *CatAllocationService) Pretty(pretty bool) *CatAllocationService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *CatAllocationService) Human(human bool) *CatAllocationService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *CatAllocationService) ErrorTrace(errorTrace bool) *CatAllocationService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *CatAllocationService) FilterPath(filterPath ...string) *CatAllocationService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *CatAllocationService) Header(name string, value string) *CatAllocationService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *CatAllocationService) Headers(headers http.Header) *CatAllocationService { + s.headers = headers + return s +} + // NodeID specifies one or more node IDs to for information should be returned. func (s *CatAllocationService) NodeID(nodes ...string) *CatAllocationService { s.nodes = nodes @@ -82,12 +129,6 @@ func (s *CatAllocationService) Sort(fields ...string) *CatAllocationService { return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *CatAllocationService) Pretty(pretty bool) *CatAllocationService { - s.pretty = pretty - return s -} - // buildURL builds the URL for the operation. func (s *CatAllocationService) buildURL() (string, url.Values, error) { // Build URL @@ -111,8 +152,17 @@ func (s *CatAllocationService) buildURL() (string, url.Values, error) { params := url.Values{ "format": []string{"json"}, // always returns as JSON } - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if s.bytes != "" { params.Set("bytes", s.bytes) @@ -126,6 +176,9 @@ func (s *CatAllocationService) buildURL() (string, url.Values, error) { if len(s.sort) > 0 { params.Set("s", strings.Join(s.sort, ",")) } + if len(s.columns) > 0 { + params.Set("h", strings.Join(s.columns, ",")) + } return path, params, nil } @@ -139,9 +192,10 @@ func (s *CatAllocationService) Do(ctx context.Context) (CatAllocationResponse, e // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, + Method: "GET", + Path: path, + Params: params, + Headers: s.headers, }) if err != nil { return nil, err diff --git a/vendor/gopkg.in/olivere/elastic.v6/cat_count.go b/vendor/github.com/olivere/elastic/v7/cat_count.go similarity index 65% rename from vendor/gopkg.in/olivere/elastic.v6/cat_count.go rename to vendor/github.com/olivere/elastic/v7/cat_count.go index 87d67c8ed32b24576b11ce9bc050c166d7d5520b..82fffd964f94af74a9eff8c0fd381aaa83962a2e 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/cat_count.go +++ b/vendor/github.com/olivere/elastic/v7/cat_count.go @@ -7,20 +7,27 @@ package elastic import ( "context" "fmt" + "net/http" "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // CatCountService provides quick access to the document count of the entire cluster, // or individual indices. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/cat-count.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/cat-count.html // for details. type CatCountService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + index []string local *bool masterTimeout string @@ -35,6 +42,46 @@ func NewCatCountService(client *Client) *CatCountService { } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *CatCountService) Pretty(pretty bool) *CatCountService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *CatCountService) Human(human bool) *CatCountService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *CatCountService) ErrorTrace(errorTrace bool) *CatCountService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *CatCountService) FilterPath(filterPath ...string) *CatCountService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *CatCountService) Header(name string, value string) *CatCountService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *CatCountService) Headers(headers http.Header) *CatCountService { + s.headers = headers + return s +} + // Index specifies zero or more indices for which to return counts // (by default counts for all indices are returned). func (s *CatCountService) Index(index ...string) *CatCountService { @@ -75,12 +122,6 @@ func (s *CatCountService) Sort(fields ...string) *CatCountService { return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *CatCountService) Pretty(pretty bool) *CatCountService { - s.pretty = pretty - return s -} - // buildURL builds the URL for the operation. func (s *CatCountService) buildURL() (string, url.Values, error) { // Build URL @@ -104,8 +145,17 @@ func (s *CatCountService) buildURL() (string, url.Values, error) { params := url.Values{ "format": []string{"json"}, // always returns as JSON } - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if v := s.local; v != nil { params.Set("local", fmt.Sprint(*v)) @@ -116,6 +166,9 @@ func (s *CatCountService) buildURL() (string, url.Values, error) { if len(s.sort) > 0 { params.Set("s", strings.Join(s.sort, ",")) } + if len(s.columns) > 0 { + params.Set("h", strings.Join(s.columns, ",")) + } return path, params, nil } @@ -129,9 +182,10 @@ func (s *CatCountService) Do(ctx context.Context) (CatCountResponse, error) { // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, + Method: "GET", + Path: path, + Params: params, + Headers: s.headers, }) if err != nil { return nil, err diff --git a/vendor/gopkg.in/olivere/elastic.v6/cat_health.go b/vendor/github.com/olivere/elastic/v7/cat_health.go similarity index 70% rename from vendor/gopkg.in/olivere/elastic.v6/cat_health.go rename to vendor/github.com/olivere/elastic/v7/cat_health.go index 55dd79bd091923849520df981d82195caca45eb7..2d6bf893cbf69ef4ac2c31bd93497632d81903b1 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/cat_health.go +++ b/vendor/github.com/olivere/elastic/v7/cat_health.go @@ -7,6 +7,7 @@ package elastic import ( "context" "fmt" + "net/http" "net/url" "strings" ) @@ -14,11 +15,17 @@ import ( // CatHealthService returns a terse representation of the same information // as /_cluster/health. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/cat-health.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/cat-health.html // for details. type CatHealthService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + local *bool masterTimeout string columns []string @@ -33,6 +40,46 @@ func NewCatHealthService(client *Client) *CatHealthService { } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *CatHealthService) Pretty(pretty bool) *CatHealthService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *CatHealthService) Human(human bool) *CatHealthService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *CatHealthService) ErrorTrace(errorTrace bool) *CatHealthService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *CatHealthService) FilterPath(filterPath ...string) *CatHealthService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *CatHealthService) Header(name string, value string) *CatHealthService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *CatHealthService) Headers(headers http.Header) *CatHealthService { + s.headers = headers + return s +} + // Local indicates to return local information, i.e. do not retrieve // the state from master node (default: false). func (s *CatHealthService) Local(local bool) *CatHealthService { @@ -72,12 +119,6 @@ func (s *CatHealthService) DisableTimestamping(disable bool) *CatHealthService { return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *CatHealthService) Pretty(pretty bool) *CatHealthService { - s.pretty = pretty - return s -} - // buildURL builds the URL for the operation. func (s *CatHealthService) buildURL() (string, url.Values, error) { // Build URL @@ -87,8 +128,17 @@ func (s *CatHealthService) buildURL() (string, url.Values, error) { params := url.Values{ "format": []string{"json"}, // always returns as JSON } - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if v := s.local; v != nil { params.Set("local", fmt.Sprint(*v)) @@ -102,6 +152,9 @@ func (s *CatHealthService) buildURL() (string, url.Values, error) { if v := s.disableTimestamping; v != nil { params.Set("ts", fmt.Sprint(*v)) } + if len(s.columns) > 0 { + params.Set("h", strings.Join(s.columns, ",")) + } return path, params, nil } @@ -115,9 +168,10 @@ func (s *CatHealthService) Do(ctx context.Context) (CatHealthResponse, error) { // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, + Method: "GET", + Path: path, + Params: params, + Headers: s.headers, }) if err != nil { return nil, err diff --git a/vendor/gopkg.in/olivere/elastic.v6/cat_indices.go b/vendor/github.com/olivere/elastic/v7/cat_indices.go similarity index 65% rename from vendor/gopkg.in/olivere/elastic.v6/cat_indices.go rename to vendor/github.com/olivere/elastic/v7/cat_indices.go index 70eb08a25a2d399c17d12721a12669a72aa19932..77725c12e85d803cf614b31cb58c2f7602e79359 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/cat_indices.go +++ b/vendor/github.com/olivere/elastic/v7/cat_indices.go @@ -7,20 +7,26 @@ package elastic import ( "context" "fmt" + "net/http" "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // CatIndicesService returns the list of indices plus some additional // information about them. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/cat-indices.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/cat-indices.html // for details. type CatIndicesService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + index string bytes string // b, k, m, or g local *bool @@ -29,6 +35,7 @@ type CatIndicesService struct { health string // green, yellow, or red primaryOnly *bool // true for primary shards only sort []string // list of columns for sort order + headers http.Header } // NewCatIndicesService creates a new CatIndicesService. @@ -38,6 +45,46 @@ func NewCatIndicesService(client *Client) *CatIndicesService { } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *CatIndicesService) Pretty(pretty bool) *CatIndicesService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *CatIndicesService) Human(human bool) *CatIndicesService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *CatIndicesService) ErrorTrace(errorTrace bool) *CatIndicesService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *CatIndicesService) FilterPath(filterPath ...string) *CatIndicesService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *CatIndicesService) Header(name string, value string) *CatIndicesService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *CatIndicesService) Headers(headers http.Header) *CatIndicesService { + s.headers = headers + return s +} + // Index is the name of the index to list (by default all indices are returned). func (s *CatIndicesService) Index(index string) *CatIndicesService { s.index = index @@ -97,12 +144,6 @@ func (s *CatIndicesService) Sort(fields ...string) *CatIndicesService { return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *CatIndicesService) Pretty(pretty bool) *CatIndicesService { - s.pretty = pretty - return s -} - // buildURL builds the URL for the operation. func (s *CatIndicesService) buildURL() (string, url.Values, error) { // Build URL @@ -126,8 +167,17 @@ func (s *CatIndicesService) buildURL() (string, url.Values, error) { params := url.Values{ "format": []string{"json"}, // always returns as JSON } - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if s.bytes != "" { params.Set("bytes", s.bytes) @@ -138,6 +188,25 @@ func (s *CatIndicesService) buildURL() (string, url.Values, error) { if s.masterTimeout != "" { params.Set("master_timeout", s.masterTimeout) } + if len(s.columns) > 0 { + // loop through all columns and apply alias if needed + for i, column := range s.columns { + if fullValueRaw, isAliased := catIndicesResponseRowAliasesMap[column]; isAliased { + // alias can be translated to multiple fields, + // so if translated value contains a comma, than replace the first value + // and append the others + if strings.Contains(fullValueRaw, ",") { + fullValues := strings.Split(fullValueRaw, ",") + s.columns[i] = fullValues[0] + s.columns = append(s.columns, fullValues[1:]...) + } else { + s.columns[i] = fullValueRaw + } + } + } + + params.Set("h", strings.Join(s.columns, ",")) + } if s.health != "" { params.Set("health", s.health) } @@ -160,9 +229,10 @@ func (s *CatIndicesService) Do(ctx context.Context) (CatIndicesResponse, error) // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, + Method: "GET", + Path: path, + Params: params, + Headers: s.headers, }) if err != nil { return nil, err @@ -216,8 +286,8 @@ type CatIndicesResponseRow struct { PriRequestCacheHitCount int `json:"pri.request_cache.hit_count,string"` // request cache hit count on primaries RequestCacheMissCount int `json:"request_cache.miss_count,string"` // request cache miss count on primaries & replicas PriRequestCacheMissCount int `json:"pri.request_cache.miss_count,string"` // request cache miss count on primaries - FlushTotal int `json:"flush.total"` // number of flushes on primaries & replicas - PriFlushTotal int `json:"pri.flush.total"` // number of flushes on primaries + FlushTotal int `json:"flush.total,string"` // number of flushes on primaries & replicas + PriFlushTotal int `json:"pri.flush.total,string"` // number of flushes on primaries FlushTotalTime string `json:"flush.total_time"` // time spent in flush on primaries & replicas PriFlushTotalTime string `json:"pri.flush.total_time"` // time spent in flush on primaries GetCurrent int `json:"get.current,string"` // number of current get ops on primaries & replicas @@ -264,8 +334,12 @@ type CatIndicesResponseRow struct { PriMergesTotalTime string `json:"pri.merges.total_time"` // time spent in merges on primaries RefreshTotal int `json:"refresh.total,string"` // total refreshes on primaries & replicas PriRefreshTotal int `json:"pri.refresh.total,string"` // total refreshes on primaries + RefreshExternalTotal int `json:"refresh.external_total,string"` // total external refreshes on primaries & replicas + PriRefreshExternalTotal int `json:"pri.refresh.external_total,string"` // total external refreshes on primaries RefreshTime string `json:"refresh.time"` // time spent in refreshes on primaries & replicas PriRefreshTime string `json:"pri.refresh.time"` // time spent in refreshes on primaries + RefreshExternalTime string `json:"refresh.external_time"` // external time spent in refreshes on primaries & replicas + PriRefreshExternalTime string `json:"pri.refresh.external_time"` // external time spent in refreshes on primaries RefreshListeners int `json:"refresh.listeners,string"` // number of pending refresh listeners on primaries & replicas PriRefreshListeners int `json:"pri.refresh.listeners,string"` // number of pending refresh listeners on primaries SearchFetchCurrent int `json:"search.fetch_current,string"` // current fetch phase ops on primaries & replicas @@ -288,6 +362,7 @@ type CatIndicesResponseRow struct { PriSearchScrollTime string `json:"pri.search.scroll_time"` // time scroll contexts held open on primaries, e.g. "0s" SearchScrollTotal int `json:"search.scroll_total,string"` // completed scroll contexts on primaries & replicas PriSearchScrollTotal int `json:"pri.search.scroll_total,string"` // completed scroll contexts on primaries + SearchThrottled bool `json:"search.throttled,string"` // indicates if the index is search throttled SegmentsCount int `json:"segments.count,string"` // number of segments on primaries & replicas PriSegmentsCount int `json:"pri.segments.count,string"` // number of segments on primaries SegmentsMemory string `json:"segments.memory"` // memory used by segments on primaries & replicas, e.g. "1.3kb" @@ -298,8 +373,8 @@ type CatIndicesResponseRow struct { PriSegmentsVersionMapMemory string `json:"pri.segments.version_map_memory"` // memory used by version map on primaries, e.g. "0b" SegmentsFixedBitsetMemory string `json:"segments.fixed_bitset_memory"` // memory used by fixed bit sets for nested object field types and type filters for types referred in _parent fields on primaries & replicas, e.g. "0b" PriSegmentsFixedBitsetMemory string `json:"pri.segments.fixed_bitset_memory"` // memory used by fixed bit sets for nested object field types and type filters for types referred in _parent fields on primaries, e.g. "0b" - WarmerCurrent int `json:"warmer.count,string"` // current warmer ops on primaries & replicas - PriWarmerCurrent int `json:"pri.warmer.count,string"` // current warmer ops on primaries + WarmerCurrent int `json:"warmer.current,string"` // current warmer ops on primaries & replicas + PriWarmerCurrent int `json:"pri.warmer.current,string"` // current warmer ops on primaries WarmerTotal int `json:"warmer.total,string"` // total warmer ops on primaries & replicas PriWarmerTotal int `json:"pri.warmer.total,string"` // total warmer ops on primaries WarmerTotalTime string `json:"warmer.total_time"` // time spent in warmers on primaries & replicas, e.g. "47s" @@ -313,3 +388,144 @@ type CatIndicesResponseRow struct { MemoryTotal string `json:"memory.total"` // total user memory on primaries & replicas, e.g. "1.5kb" PriMemoryTotal string `json:"pri.memory.total"` // total user memory on primaries, e.g. "1.5kb" } + +// catIndicesResponseRowAliasesMap holds the global map for columns aliases +// the map is used by CatIndicesService.buildURL +// for backwards compatibility some fields are able to have the same aliases +// that means that one alias can be translated to different columns (from different elastic versions) +// example for understanding: rto -> RefreshTotal, RefreshExternalTotal +var catIndicesResponseRowAliasesMap = map[string]string{ + "qce": "query_cache.evictions", + "searchFetchTime": "search.fetch_time", + "memoryTotal": "memory.total", + "requestCacheEvictions": "request_cache.evictions", + "ftt": "flush.total_time", + "iic": "indexing.index_current", + "mtt": "merges.total_time", + "scti": "search.scroll_time", + "searchScrollTime": "search.scroll_time", + "segmentsCount": "segments.count", + "getTotal": "get.total", + "sfti": "search.fetch_time", + "searchScrollCurrent": "search.scroll_current", + "svmm": "segments.version_map_memory", + "warmerTotalTime": "warmer.total_time", + "r": "rep", + "indexingIndexTime": "indexing.index_time", + "refreshTotal": "refresh.total,refresh.external_total", + "scc": "search.scroll_current", + "suggestTime": "suggest.time", + "idc": "indexing.delete_current", + "rti": "refresh.time,refresh.external_time", + "sfto": "search.fetch_total", + "completionSize": "completion.size", + "mt": "merges.total", + "segmentsVersionMapMemory": "segments.version_map_memory", + "rto": "refresh.total,refresh.external_total", + "id": "uuid", + "dd": "docs.deleted", + "docsDeleted": "docs.deleted", + "fielddataMemory": "fielddata.memory_size", + "getTime": "get.time", + "getExistsTime": "get.exists_time", + "mtd": "merges.total_docs", + "rli": "refresh.listeners", + "h": "health", + "cds": "creation.date.string", + "rcmc": "request_cache.miss_count", + "iif": "indexing.index_failed", + "warmerCurrent": "warmer.current", + "gti": "get.time", + "indexingIndexFailed": "indexing.index_failed", + "mts": "merges.total_size", + "sqti": "search.query_time", + "segmentsIndexWriterMemory": "segments.index_writer_memory", + "iiti": "indexing.index_time", + "iito": "indexing.index_total", + "cd": "creation.date", + "gc": "get.current", + "searchFetchTotal": "search.fetch_total", + "sqc": "search.query_current", + "segmentsMemory": "segments.memory", + "dc": "docs.count", + "qcm": "query_cache.memory_size", + "queryCacheMemory": "query_cache.memory_size", + "mergesTotalDocs": "merges.total_docs", + "searchOpenContexts": "search.open_contexts", + "shards.primary": "pri", + "cs": "completion.size", + "mergesTotalTIme": "merges.total_time", + "wtt": "warmer.total_time", + "mergesCurrentSize": "merges.current_size", + "mergesTotal": "merges.total", + "refreshTime": "refresh.time,refresh.external_time", + "wc": "warmer.current", + "p": "pri", + "idti": "indexing.delete_time", + "searchQueryCurrent": "search.query_current", + "warmerTotal": "warmer.total", + "suggestTotal": "suggest.total", + "tm": "memory.total", + "ss": "store.size", + "ft": "flush.total", + "getExistsTotal": "get.exists_total", + "scto": "search.scroll_total", + "s": "status", + "queryCacheEvictions": "query_cache.evictions", + "rce": "request_cache.evictions", + "geto": "get.exists_total", + "refreshListeners": "refresh.listeners", + "suto": "suggest.total", + "storeSize": "store.size", + "gmti": "get.missing_time", + "indexingIdexCurrent": "indexing.index_current", + "searchFetchCurrent": "search.fetch_current", + "idx": "index", + "fm": "fielddata.memory_size", + "geti": "get.exists_time", + "indexingDeleteCurrent": "indexing.delete_current", + "mergesCurrentDocs": "merges.current_docs", + "sth": "search.throttled", + "flushTotal": "flush.total", + "sfc": "search.fetch_current", + "wto": "warmer.total", + "suti": "suggest.time", + "shardsReplica": "rep", + "mergesCurrent": "merges.current", + "mcs": "merges.current_size", + "so": "search.open_contexts", + "i": "index", + "siwm": "segments.index_writer_memory", + "sfbm": "segments.fixed_bitset_memory", + "fe": "fielddata.evictions", + "requestCacheMissCount": "request_cache.miss_count", + "idto": "indexing.delete_total", + "mergesTotalSize": "merges.total_size", + "suc": "suggest.current", + "suggestCurrent": "suggest.current", + "flushTotalTime": "flush.total_time", + "getMissingTotal": "get.missing_total", + "sqto": "search.query_total", + "searchScrollTotal": "search.scroll_total", + "fixedBitsetMemory": "segments.fixed_bitset_memory", + "getMissingTime": "get.missing_time", + "indexingDeleteTotal": "indexing.delete_total", + "mcd": "merges.current_docs", + "docsCount": "docs.count", + "gto": "get.total", + "mc": "merges.current", + "fielddataEvictions": "fielddata.evictions", + "rcm": "request_cache.memory_size", + "requestCacheHitCount": "request_cache.hit_count", + "gmto": "get.missing_total", + "searchQueryTime": "search.query_time", + "shards.replica": "rep", + "requestCacheMemory": "request_cache.memory_size", + "rchc": "request_cache.hit_count", + "getCurrent": "get.current", + "indexingIndexTotal": "indexing.index_total", + "sc": "segments.count,segments.memory", + "shardsPrimary": "pri", + "indexingDeleteTime": "indexing.delete_time", + "searchQueryTotal": "search.query_total", +} diff --git a/vendor/github.com/olivere/elastic/v7/cat_shards.go b/vendor/github.com/olivere/elastic/v7/cat_shards.go new file mode 100644 index 0000000000000000000000000000000000000000..c2ccfc5f86e3c0cea958e32e8746bc01d18773ef --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/cat_shards.go @@ -0,0 +1,387 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/http" + "net/url" + "strings" + + "github.com/olivere/elastic/v7/uritemplates" +) + +// CatShardsService returns the list of shards plus some additional +// information about them. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.6/cat-shards.html +// for details. +type CatShardsService struct { + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + + index []string + bytes string // b, k, kb, m, mb, g, gb, t, tb, p, or pb + local *bool + masterTimeout string + columns []string + time string // d, h, m, s, ms, micros, or nanos + sort []string // list of columns for sort order + headers http.Header +} + +// NewCatShardsService creates a new CatShardsService. +func NewCatShardsService(client *Client) *CatShardsService { + return &CatShardsService{ + client: client, + } +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *CatShardsService) Pretty(pretty bool) *CatShardsService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *CatShardsService) Human(human bool) *CatShardsService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *CatShardsService) ErrorTrace(errorTrace bool) *CatShardsService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *CatShardsService) FilterPath(filterPath ...string) *CatShardsService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *CatShardsService) Header(name string, value string) *CatShardsService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *CatShardsService) Headers(headers http.Header) *CatShardsService { + s.headers = headers + return s +} + +// Index is the name of the index to list (by default all indices are returned). +func (s *CatShardsService) Index(index ...string) *CatShardsService { + s.index = index + return s +} + +// Bytes represents the unit in which to display byte values. +// Valid values are: "b", "k", "kb", "m", "mb", "g", "gb", "t", "tb", "p" or "pb". +func (s *CatShardsService) Bytes(bytes string) *CatShardsService { + s.bytes = bytes + return s +} + +// Local indicates to return local information, i.e. do not retrieve +// the state from master node (default: false). +func (s *CatShardsService) Local(local bool) *CatShardsService { + s.local = &local + return s +} + +// MasterTimeout is the explicit operation timeout for connection to master node. +func (s *CatShardsService) MasterTimeout(masterTimeout string) *CatShardsService { + s.masterTimeout = masterTimeout + return s +} + +// Columns to return in the response. +// +// To get a list of all possible columns to return, run the following command +// in your terminal: +// +// Example: +// curl 'http://localhost:9200/_cat/shards?help' +// +// You can use Columns("*") to return all possible columns. That might take +// a little longer than the default set of columns. +func (s *CatShardsService) Columns(columns ...string) *CatShardsService { + s.columns = columns + return s +} + +// Sort is a list of fields to sort by. +func (s *CatShardsService) Sort(fields ...string) *CatShardsService { + s.sort = fields + return s +} + +// Time specifies the way that time values are formatted with. +func (s *CatShardsService) Time(time string) *CatShardsService { + s.time = time + return s +} + +// buildURL builds the URL for the operation. +func (s *CatShardsService) buildURL() (string, url.Values, error) { + // Build URL + var ( + path string + err error + ) + + if len(s.index) > 0 { + path, err = uritemplates.Expand("/_cat/shards/{index}", map[string]string{ + "index": strings.Join(s.index, ","), + }) + } else { + path = "/_cat/shards" + } + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{ + "format": []string{"json"}, // always returns as JSON + } + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } + if s.bytes != "" { + params.Set("bytes", s.bytes) + } + if s.time != "" { + params.Set("time", s.time) + } + if v := s.local; v != nil { + params.Set("local", fmt.Sprint(*v)) + } + if s.masterTimeout != "" { + params.Set("master_timeout", s.masterTimeout) + } + if len(s.columns) > 0 { + // loop through all columns and apply alias if needed + for i, column := range s.columns { + if fullValueRaw, isAliased := catShardsResponseRowAliasesMap[column]; isAliased { + // alias can be translated to multiple fields, + // so if translated value contains a comma, than replace the first value + // and append the others + if strings.Contains(fullValueRaw, ",") { + fullValues := strings.Split(fullValueRaw, ",") + s.columns[i] = fullValues[0] + s.columns = append(s.columns, fullValues[1:]...) + } else { + s.columns[i] = fullValueRaw + } + } + } + params.Set("h", strings.Join(s.columns, ",")) + } + if len(s.sort) > 0 { + params.Set("s", strings.Join(s.sort, ",")) + } + return path, params, nil +} + +// Do executes the operation. +func (s *CatShardsService) Do(ctx context.Context) (CatShardsResponse, error) { + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "GET", + Path: path, + Params: params, + Headers: s.headers, + }) + if err != nil { + return nil, err + } + + // Return operation response + var ret CatShardsResponse + if err := s.client.decoder.Decode(res.Body, &ret); err != nil { + return nil, err + } + return ret, nil +} + +// -- Result of a get request. + +// CatShardsResponse is the outcome of CatShardsService.Do. +type CatShardsResponse []CatShardsResponseRow + +// CatShardsResponseRow specifies the data returned for one index +// of a CatShardsResponse. Notice that not all of these fields might +// be filled; that depends on the number of columns chose in the +// request (see CatShardsService.Columns). +type CatShardsResponseRow struct { + Index string `json:"index"` // index name + UUID string `json:"uuid"` // index uuid + Shard int `json:"shard,string"` // shard number, e.g. 1 + Prirep string `json:"prirep"` // "r" for replica, "p" for primary + State string `json:"state"` // STARTED, INITIALIZING, RELOCATING, or UNASSIGNED + Docs int64 `json:"docs,string"` // number of documents, e.g. 142847 + Store string `json:"store"` // size, e.g. "40mb" + IP string `json:"ip"` // IP address + ID string `json:"id"` + Node string `json:"node"` // Node name + SyncID string `json:"sync_id"` + UnassignedReason string `json:"unassigned.reason"` + UnassignedAt string `json:"unassigned.at"` + UnassignedFor string `json:"unassigned.for"` + UnassignedDetails string `json:"unassigned.details"` + RecoverysourceType string `json:"recoverysource.type"` + CompletionSize string `json:"completion.size"` // size of completion on primaries & replicas + FielddataMemorySize string `json:"fielddata.memory_size"` // used fielddata cache on primaries & replicas + FielddataEvictions int `json:"fielddata.evictions,string"` // fielddata evictions on primaries & replicas + QueryCacheMemorySize string `json:"query_cache.memory_size"` // used query cache on primaries & replicas + QueryCacheEvictions int `json:"query_cache.evictions,string"` // query cache evictions on primaries & replicas + FlushTotal int `json:"flush.total,string"` // number of flushes on primaries & replicas + FlushTotalTime string `json:"flush.total_time"` // time spent in flush on primaries & replicas + GetCurrent int `json:"get.current,string"` // number of current get ops on primaries & replicas + GetTime string `json:"get.time"` // time spent in get on primaries & replicas + GetTotal int `json:"get.total,string"` // number of get ops on primaries & replicas + GetExistsTime string `json:"get.exists_time"` // time spent in successful gets on primaries & replicas + GetExistsTotal int `json:"get.exists_total,string"` // number of successful gets on primaries & replicas + GetMissingTime string `json:"get.missing_time"` // time spent in failed gets on primaries & replicas + GetMissingTotal int `json:"get.missing_total,string"` // number of failed gets on primaries & replicas + IndexingDeleteCurrent int `json:"indexing.delete_current,string"` // number of current deletions on primaries & replicas + IndexingDeleteTime string `json:"indexing.delete_time"` // time spent in deletions on primaries & replicas + IndexingDeleteTotal int `json:"indexing.delete_total,string"` // number of delete ops on primaries & replicas + IndexingIndexCurrent int `json:"indexing.index_current,string"` // number of current indexing on primaries & replicas + IndexingIndexTime string `json:"indexing.index_time"` // time spent in indexing on primaries & replicas + IndexingIndexTotal int `json:"indexing.index_total,string"` // number of index ops on primaries & replicas + IndexingIndexFailed int `json:"indexing.index_failed,string"` // number of failed indexing ops on primaries & replicas + MergesCurrent int `json:"merges.current,string"` // number of current merges on primaries & replicas + MergesCurrentDocs int `json:"merges.current_docs,string"` // number of current merging docs on primaries & replicas + MergesCurrentSize string `json:"merges.current_size"` // size of current merges on primaries & replicas + MergesTotal int `json:"merges.total,string"` // number of completed merge ops on primaries & replicas + MergesTotalDocs int `json:"merges.total_docs,string"` // docs merged on primaries & replicas + MergesTotalSize string `json:"merges.total_size"` // size merged on primaries & replicas + MergesTotalTime string `json:"merges.total_time"` // time spent in merges on primaries & replicas + RefreshTotal int `json:"refresh.total,string"` // total refreshes on primaries & replicas + RefreshExternalTotal int `json:"refresh.external_total,string"` // total external refreshes on primaries & replicas + RefreshTime string `json:"refresh.time"` // time spent in refreshes on primaries & replicas + RefreshExternalTime string `json:"refresh.external_time"` // external time spent in refreshes on primaries & replicas + RefreshListeners int `json:"refresh.listeners,string"` // number of pending refresh listeners on primaries & replicas + SearchFetchCurrent int `json:"search.fetch_current,string"` // current fetch phase ops on primaries & replicas + SearchFetchTime string `json:"search.fetch_time"` // time spent in fetch phase on primaries & replicas + SearchFetchTotal int `json:"search.fetch_total,string"` // total fetch ops on primaries & replicas + SearchOpenContexts int `json:"search.open_contexts,string"` // open search contexts on primaries & replicas + SearchQueryCurrent int `json:"search.query_current,string"` // current query phase ops on primaries & replicas + SearchQueryTime string `json:"search.query_time"` // time spent in query phase on primaries & replicas, e.g. "0s" + SearchQueryTotal int `json:"search.query_total,string"` // total query phase ops on primaries & replicas + SearchScrollCurrent int `json:"search.scroll_current,string"` // open scroll contexts on primaries & replicas + SearchScrollTime string `json:"search.scroll_time"` // time scroll contexts held open on primaries & replicas, e.g. "0s" + SearchScrollTotal int `json:"search.scroll_total,string"` // completed scroll contexts on primaries & replicas + SearchThrottled bool `json:"search.throttled,string"` // indicates if the index is search throttled + SegmentsCount int `json:"segments.count,string"` // number of segments on primaries & replicas + SegmentsMemory string `json:"segments.memory"` // memory used by segments on primaries & replicas, e.g. "1.3kb" + SegmentsIndexWriterMemory string `json:"segments.index_writer_memory"` // memory used by index writer on primaries & replicas, e.g. "0b" + SegmentsVersionMapMemory string `json:"segments.version_map_memory"` // memory used by version map on primaries & replicas, e.g. "0b" + SegmentsFixedBitsetMemory string `json:"segments.fixed_bitset_memory"` // memory used by fixed bit sets for nested object field types and type filters for types referred in _parent fields on primaries & replicas, e.g. "0b" + SeqNoMax int `json:"seq_no.max,string"` + SeqNoLocalCheckpoint int `json:"seq_no.local_checkpoint,string"` + SeqNoGlobalCheckpoint int `json:"seq_no.global_checkpoint,string"` + WarmerCurrent int `json:"warmer.current,string"` // current warmer ops on primaries & replicas + WarmerTotal int `json:"warmer.total,string"` // total warmer ops on primaries & replicas + WarmerTotalTime string `json:"warmer.total_time"` // time spent in warmers on primaries & replicas, e.g. "47s" +} + +// catShardsResponseRowAliasesMap holds the global map for columns aliases +// the map is used by CatShardsService.buildURL. +// For backwards compatibility some fields are able to have the same aliases +// that means that one alias can be translated to different columns (from different elastic versions) +// example for understanding: rto -> RefreshTotal, RefreshExternalTotal +var catShardsResponseRowAliasesMap = map[string]string{ + "sync_id": "sync_id", + "ur": "unassigned.reason", + "ua": "unassigned.at", + "uf": "unassigned.for", + "ud": "unassigned.details", + "rs": "recoverysource.type", + "cs": "completion.size", + "fm": "fielddata.memory_size", + "fe": "fielddata.evictions", + "qcm": "query_cache.memory_size", + "qce": "query_cache.evictions", + "ft": "flush.total", + "ftt": "flush.total_time", + "gc": "get.current", + "gti": "get.time", + "gto": "get.total", + "geti": "get.exists_time", + "geto": "get.exists_total", + "gmti": "get.missing_time", + "gmto": "get.missing_total", + "idc": "indexing.delete_current", + "idti": "indexing.delete_time", + "idto": "indexing.delete_total", + "iic": "indexing.index_current", + "iiti": "indexing.index_time", + "iito": "indexing.index_total", + "iif": "indexing.index_failed", + "mc": "merges.current", + "mcd": "merges.current_docs", + "mcs": "merges.current_size", + "mt": "merges.total", + "mtd": "merges.total_docs", + "mts": "merges.total_size", + "mtt": "merges.total_time", + "rto": "refresh.total", + "rti": "refresh.time", + // "rto": "refresh.external_total", + // "rti": "refresh.external_time", + "rli": "refresh.listeners", + "sfc": "search.fetch_current", + "sfti": "search.fetch_time", + "sfto": "search.fetch_total", + "so": "search.open_contexts", + "sqc": "search.query_current", + "sqti": "search.query_time", + "sqto": "search.query_total", + "scc": "search.scroll_current", + "scti": "search.scroll_time", + "scto": "search.scroll_total", + "sc": "segments.count", + "sm": "segments.memory", + "siwm": "segments.index_writer_memory", + "svmm": "segments.version_map_memory", + "sfbm": "segments.fixed_bitset_memory", + "sqm": "seq_no.max", + "sql": "seq_no.local_checkpoint", + "sqg": "seq_no.global_checkpoint", + "wc": "warmer.current", + "wto": "warmer.total", + "wtt": "warmer.total_time", +} diff --git a/vendor/gopkg.in/olivere/elastic.v6/clear_scroll.go b/vendor/github.com/olivere/elastic/v7/clear_scroll.go similarity index 51% rename from vendor/gopkg.in/olivere/elastic.v6/clear_scroll.go rename to vendor/github.com/olivere/elastic/v7/clear_scroll.go index e1f46010e8f5285110fddef7a86f68949bb855f8..a71cad6454d0af126a99c7967f5c98f5f538bccb 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/clear_scroll.go +++ b/vendor/github.com/olivere/elastic/v7/clear_scroll.go @@ -7,16 +7,24 @@ package elastic import ( "context" "fmt" + "net/http" "net/url" + "strings" ) // ClearScrollService clears one or more scroll contexts by their ids. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-request-scroll.html#_clear_scroll_api +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-request-scroll.html#_clear_scroll_api // for details. type ClearScrollService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + scrollId []string } @@ -28,6 +36,46 @@ func NewClearScrollService(client *Client) *ClearScrollService { } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *ClearScrollService) Pretty(pretty bool) *ClearScrollService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *ClearScrollService) Human(human bool) *ClearScrollService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *ClearScrollService) ErrorTrace(errorTrace bool) *ClearScrollService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *ClearScrollService) FilterPath(filterPath ...string) *ClearScrollService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *ClearScrollService) Header(name string, value string) *ClearScrollService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *ClearScrollService) Headers(headers http.Header) *ClearScrollService { + s.headers = headers + return s +} + // ScrollId is a list of scroll IDs to clear. // Use _all to clear all search contexts. func (s *ClearScrollService) ScrollId(scrollIds ...string) *ClearScrollService { @@ -35,12 +83,6 @@ func (s *ClearScrollService) ScrollId(scrollIds ...string) *ClearScrollService { return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *ClearScrollService) Pretty(pretty bool) *ClearScrollService { - s.pretty = pretty - return s -} - // buildURL builds the URL for the operation. func (s *ClearScrollService) buildURL() (string, url.Values, error) { // Build URL @@ -48,8 +90,17 @@ func (s *ClearScrollService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } return path, params, nil } @@ -86,10 +137,11 @@ func (s *ClearScrollService) Do(ctx context.Context) (*ClearScrollResponse, erro // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "DELETE", - Path: path, - Params: params, - Body: body, + Method: "DELETE", + Path: path, + Params: params, + Body: body, + Headers: s.headers, }) if err != nil { return nil, err @@ -105,4 +157,6 @@ func (s *ClearScrollService) Do(ctx context.Context) (*ClearScrollResponse, erro // ClearScrollResponse is the response of ClearScrollService.Do. type ClearScrollResponse struct { + Succeeded bool `json:"succeeded,omitempty"` + NumFreed int `json:"num_freed,omitempty"` } diff --git a/vendor/gopkg.in/olivere/elastic.v6/client.go b/vendor/github.com/olivere/elastic/v7/client.go similarity index 80% rename from vendor/gopkg.in/olivere/elastic.v6/client.go rename to vendor/github.com/olivere/elastic/v7/client.go index cc4472317e2bbea1d941498f26d4cbd4c6625fe6..a0d3ecb29d8ea69af2dfc9f8c21c1bbd13acff35 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/client.go +++ b/vendor/github.com/olivere/elastic/v7/client.go @@ -14,19 +14,18 @@ import ( "net/http/httputil" "net/url" "os" - "regexp" "strings" "sync" "time" "github.com/pkg/errors" - "github.com/olivere/elastic/config" + "github.com/olivere/elastic/v7/config" ) const ( // Version is the current version of Elastic. - Version = "6.1.27" + Version = "7.0.15" // DefaultURL is the default endpoint of Elasticsearch on the local machine. // It is used e.g. when initializing a new Client without a specific URL. @@ -97,26 +96,36 @@ var ( // noRetries is a retrier that does not retry. noRetries = NewStopRetrier() + + // noDeprecationLog is a no-op for logging deprecations. + noDeprecationLog = func(*http.Request, *http.Response) {} ) +// Doer is an interface to perform HTTP requests. +// It can be used for mocking. +type Doer interface { + Do(*http.Request) (*http.Response, error) +} + // ClientOptionFunc is a function that configures a Client. // It is used in NewClient. type ClientOptionFunc func(*Client) error // Client is an Elasticsearch client. Create one by calling NewClient. type Client struct { - c *http.Client // net/http Client to use for requests + c Doer // e.g. a net/*http.Client to use for requests connsMu sync.RWMutex // connsMu guards the next block conns []*conn // all connections cindex int // index into conns - mu sync.RWMutex // guards the next block - urls []string // set of URLs passed initially to the client - running bool // true if the client's background processes are running - errorlog Logger // error log for critical messages - infolog Logger // information log for e.g. response times - tracelog Logger // trace log for debugging + mu sync.RWMutex // guards the next block + urls []string // set of URLs passed initially to the client + running bool // true if the client's background processes are running + errorlog Logger // error log for critical messages + infolog Logger // information log for e.g. response times + tracelog Logger // trace log for debugging + deprecationlog func(*http.Request, *http.Response) scheme string // http or https healthcheckEnabled bool // healthchecks enabled or disabled healthcheckTimeoutStartup time.Duration // time the healthcheck waits for a response from Elasticsearch on startup @@ -137,6 +146,7 @@ type Client struct { gzipEnabled bool // gzip compression enabled or disabled (default) requiredPlugins []string // list of required plugins retrier Retrier // strategy for retries + headers http.Header // a list of default headers to add to each request } // NewClient creates a new client to work with Elasticsearch. @@ -158,7 +168,7 @@ type Client struct { // // If the sniffer is enabled (the default), the new client then sniffes // the cluster via the Nodes Info API -// (see https://www.elastic.co/guide/en/elasticsearch/reference/6.2/cluster-nodes-info.html#cluster-nodes-info). +// (see https://www.elastic.co/guide/en/elasticsearch/reference/7.0/cluster-nodes-info.html#cluster-nodes-info). // It uses the URLs specified by the caller. The caller is responsible // to only pass a list of URLs of nodes that belong to the same cluster. // This sniffing process is run on startup and periodically. @@ -190,6 +200,119 @@ type Client struct { // An error is also returned when some configuration option is invalid or // the new client cannot sniff the cluster (if enabled). func NewClient(options ...ClientOptionFunc) (*Client, error) { + return DialContext(context.Background(), options...) +} + +// NewClientFromConfig initializes a client from a configuration. +func NewClientFromConfig(cfg *config.Config) (*Client, error) { + options, err := configToOptions(cfg) + if err != nil { + return nil, err + } + return DialContext(context.Background(), options...) +} + +// NewSimpleClient creates a new short-lived Client that can be used in +// use cases where you need e.g. one client per request. +// +// While NewClient by default sets up e.g. periodic health checks +// and sniffing for new nodes in separate goroutines, NewSimpleClient does +// not and is meant as a simple replacement where you don't need all the +// heavy lifting of NewClient. +// +// NewSimpleClient does the following by default: First, all health checks +// are disabled, including timeouts and periodic checks. Second, sniffing +// is disabled, including timeouts and periodic checks. The number of retries +// is set to 1. NewSimpleClient also does not start any goroutines. +// +// Notice that you can still override settings by passing additional options, +// just like with NewClient. +func NewSimpleClient(options ...ClientOptionFunc) (*Client, error) { + c := &Client{ + c: http.DefaultClient, + conns: make([]*conn, 0), + cindex: -1, + scheme: DefaultScheme, + decoder: &DefaultDecoder{}, + healthcheckEnabled: false, + healthcheckTimeoutStartup: off, + healthcheckTimeout: off, + healthcheckInterval: off, + healthcheckStop: make(chan bool), + snifferEnabled: false, + snifferTimeoutStartup: off, + snifferTimeout: off, + snifferInterval: off, + snifferCallback: nopSnifferCallback, + snifferStop: make(chan bool), + sendGetBodyAs: DefaultSendGetBodyAs, + gzipEnabled: DefaultGzipEnabled, + retrier: noRetries, // no retries by default + deprecationlog: noDeprecationLog, + } + + // Run the options on it + for _, option := range options { + if err := option(c); err != nil { + return nil, err + } + } + + // Use a default URL and normalize them + if len(c.urls) == 0 { + c.urls = []string{DefaultURL} + } + c.urls = canonicalize(c.urls...) + + // If the URLs have auth info, use them here as an alternative to SetBasicAuth + if !c.basicAuth { + for _, urlStr := range c.urls { + u, err := url.Parse(urlStr) + if err == nil && u.User != nil { + c.basicAuth = true + c.basicAuthUsername = u.User.Username() + c.basicAuthPassword, _ = u.User.Password() + break + } + } + } + + for _, url := range c.urls { + c.conns = append(c.conns, newConn(url, url)) + } + + // Ensure that we have at least one connection available + if err := c.mustActiveConn(); err != nil { + return nil, err + } + + // Check the required plugins + for _, plugin := range c.requiredPlugins { + found, err := c.HasPlugin(plugin) + if err != nil { + return nil, err + } + if !found { + return nil, fmt.Errorf("elastic: plugin %s not found", plugin) + } + } + + c.mu.Lock() + c.running = true + c.mu.Unlock() + + return c, nil +} + +// Dial will call DialContext with a background context. +func Dial(options ...ClientOptionFunc) (*Client, error) { + return DialContext(context.Background(), options...) +} + +// DialContext will connect to Elasticsearch, just like NewClient does. +// +// The context is honoured in terms of e.g. cancellation. +func DialContext(ctx context.Context, options ...ClientOptionFunc) (*Client, error) { // Set up the client c := &Client{ c: http.DefaultClient, @@ -211,6 +334,7 @@ func NewClient(options ...ClientOptionFunc) (*Client, error) { sendGetBodyAs: DefaultSendGetBodyAs, gzipEnabled: DefaultGzipEnabled, retrier: noRetries, // no retries by default + deprecationlog: noDeprecationLog, } // Run the options on it @@ -241,14 +365,14 @@ func NewClient(options ...ClientOptionFunc) (*Client, error) { // Check if we can make a request to any of the specified URLs if c.healthcheckEnabled { - if err := c.startupHealthcheck(c.healthcheckTimeoutStartup); err != nil { + if err := c.startupHealthcheck(ctx, c.healthcheckTimeoutStartup); err != nil { return nil, err } } if c.snifferEnabled { // Sniff the cluster initially - if err := c.sniff(c.snifferTimeoutStartup); err != nil { + if err := c.sniff(ctx, c.snifferTimeoutStartup); err != nil { return nil, err } } else { @@ -260,7 +384,7 @@ func NewClient(options ...ClientOptionFunc) (*Client, error) { if c.healthcheckEnabled { // Perform an initial health check - c.healthcheck(c.healthcheckTimeoutStartup, true) + c.healthcheck(ctx, c.healthcheckTimeoutStartup, true) } // Ensure that we have at least one connection available if err := c.mustActiveConn(); err != nil { @@ -292,8 +416,19 @@ func NewClient(options ...ClientOptionFunc) (*Client, error) { return c, nil } -// NewClientFromConfig initializes a client from a configuration. -func NewClientFromConfig(cfg *config.Config) (*Client, error) { +// DialWithConfig will use the configuration settings parsed from config package +// to connect to Elasticsearch. +// +// The context is honoured in terms of e.g. cancellation. +func DialWithConfig(ctx context.Context, cfg *config.Config) (*Client, error) { + options, err := configToOptions(cfg) + if err != nil { + return nil, err + } + return DialContext(ctx, options...) +} + +func configToOptions(cfg *config.Config) ([]ClientOptionFunc, error) { var options []ClientOptionFunc if cfg != nil { if cfg.URL != "" { @@ -329,104 +464,16 @@ func NewClientFromConfig(cfg *config.Config) (*Client, error) { if cfg.Sniff != nil { options = append(options, SetSniff(*cfg.Sniff)) } - } - return NewClient(options...) -} - -// NewSimpleClient creates a new short-lived Client that can be used in -// use cases where you need e.g. one client per request. -// -// While NewClient by default sets up e.g. periodic health checks -// and sniffing for new nodes in separate goroutines, NewSimpleClient does -// not and is meant as a simple replacement where you don't need all the -// heavy lifting of NewClient. -// -// NewSimpleClient does the following by default: First, all health checks -// are disabled, including timeouts and periodic checks. Second, sniffing -// is disabled, including timeouts and periodic checks. The number of retries -// is set to 1. NewSimpleClient also does not start any goroutines. -// -// Notice that you can still override settings by passing additional options, -// just like with NewClient. -func NewSimpleClient(options ...ClientOptionFunc) (*Client, error) { - c := &Client{ - c: http.DefaultClient, - conns: make([]*conn, 0), - cindex: -1, - scheme: DefaultScheme, - decoder: &DefaultDecoder{}, - healthcheckEnabled: false, - healthcheckTimeoutStartup: off, - healthcheckTimeout: off, - healthcheckInterval: off, - healthcheckStop: make(chan bool), - snifferEnabled: false, - snifferTimeoutStartup: off, - snifferTimeout: off, - snifferInterval: off, - snifferCallback: nopSnifferCallback, - snifferStop: make(chan bool), - sendGetBodyAs: DefaultSendGetBodyAs, - gzipEnabled: DefaultGzipEnabled, - retrier: noRetries, // no retries by default - } - - // Run the options on it - for _, option := range options { - if err := option(c); err != nil { - return nil, err + if cfg.Healthcheck != nil { + options = append(options, SetHealthcheck(*cfg.Healthcheck)) } } - - // Use a default URL and normalize them - if len(c.urls) == 0 { - c.urls = []string{DefaultURL} - } - c.urls = canonicalize(c.urls...) - - // If the URLs have auth info, use them here as an alternative to SetBasicAuth - if !c.basicAuth { - for _, urlStr := range c.urls { - u, err := url.Parse(urlStr) - if err == nil && u.User != nil { - c.basicAuth = true - c.basicAuthUsername = u.User.Username() - c.basicAuthPassword, _ = u.User.Password() - break - } - } - } - - for _, url := range c.urls { - c.conns = append(c.conns, newConn(url, url)) - } - - // Ensure that we have at least one connection available - if err := c.mustActiveConn(); err != nil { - return nil, err - } - - // Check the required plugins - for _, plugin := range c.requiredPlugins { - found, err := c.HasPlugin(plugin) - if err != nil { - return nil, err - } - if !found { - return nil, fmt.Errorf("elastic: plugin %s not found", plugin) - } - } - - c.mu.Lock() - c.running = true - c.mu.Unlock() - - return c, nil + return options, nil } // SetHttpClient can be used to specify the http.Client to use when making // HTTP requests to Elasticsearch. -func SetHttpClient(httpClient *http.Client) ClientOptionFunc { +func SetHttpClient(httpClient Doer) ClientOptionFunc { return func(c *Client) error { if httpClient != nil { c.c = httpClient @@ -677,6 +724,15 @@ func SetRetrier(retrier Retrier) ClientOptionFunc { } } +// SetHeaders adds a list of default HTTP headers that will be added to +// each requests executed by PerformRequest. +func SetHeaders(headers http.Header) ClientOptionFunc { + return func(c *Client) error { + c.headers = headers + return nil + } +} + // String returns a string representation of the client status. func (c *Client) String() string { c.connsMu.Lock() @@ -816,7 +872,7 @@ func (c *Client) sniffer() { c.snifferStop <- true return case <-ticker.C: - c.sniff(timeout) + c.sniff(context.Background(), timeout) } } } @@ -826,7 +882,7 @@ func (c *Client) sniffer() { // by the preceding sniffing process (if sniffing is enabled). // // If sniffing is disabled, this is a no-op. -func (c *Client) sniff(timeout time.Duration) error { +func (c *Client) sniff(parentCtx context.Context, timeout time.Duration) error { c.mu.RLock() if !c.snifferEnabled { c.mu.RUnlock() @@ -863,7 +919,7 @@ func (c *Client) sniff(timeout time.Duration) error { // Start sniffing on all found URLs ch := make(chan []*conn, len(urls)) - ctx, cancel := context.WithTimeout(context.Background(), timeout) + ctx, cancel := context.WithTimeout(parentCtx, timeout) defer cancel() for _, url := range urls { @@ -879,6 +935,13 @@ func (c *Client) sniff(timeout time.Duration) error { return nil } case <-ctx.Done(): + if err := ctx.Err(); err != nil { + switch { + case IsContextErr(err): + return err + } + return errors.Wrapf(ErrNoClient, "sniff timeout: %v", err) + } // We get here if no cluster responds in time return errors.Wrap(ErrNoClient, "sniff timeout") } @@ -908,13 +971,7 @@ func (c *Client) sniffNode(ctx context.Context, url string) []*conn { if err != nil { return nodes } - if res == nil { - return nodes - } - - if res.Body != nil { - defer res.Body.Close() - } + defer res.Body.Close() var info NodesInfoResponse if err := json.NewDecoder(res.Body).Decode(&info); err == nil { @@ -934,25 +991,24 @@ func (c *Client) sniffNode(ctx context.Context, url string) []*conn { return nodes } -// reSniffHostAndPort is used to extract hostname and port from a result -// from a Nodes Info API (example: "inet[/127.0.0.1:9200]"). -var reSniffHostAndPort = regexp.MustCompile(`\/([^:]*):([0-9]+)\]`) - +// extractHostname returns the URL from the http.publish_address setting. func (c *Client) extractHostname(scheme, address string) string { - if strings.HasPrefix(address, "inet") { - m := reSniffHostAndPort.FindStringSubmatch(address) - if len(m) == 3 { - return fmt.Sprintf("%s://%s:%s", scheme, m[1], m[2]) - } - } - s := address - if idx := strings.Index(s, "/"); idx >= 0 { - s = s[idx+1:] - } - if strings.Index(s, ":") < 0 { - return "" + var ( + host string + port string + + addrs = strings.Split(address, "/") + ports = strings.Split(address, ":") + ) + + if len(addrs) > 1 { + host = addrs[0] + } else { + host = strings.Split(addrs[0], ":")[0] } - return fmt.Sprintf("%s://%s", scheme, s) + port = ports[len(ports)-1] + + return fmt.Sprintf("%s://%s:%s", scheme, host, port) } // updateConns updates the clients' connections with new information @@ -967,7 +1023,9 @@ func (c *Client) updateConns(conns []*conn) { for _, conn := range conns { var found bool for _, oldConn := range c.conns { - if oldConn.NodeID() == conn.NodeID() { + // Notice that e.g. in a Kubernetes cluster the NodeID might be + // stable while the URL has changed. + if oldConn.NodeID() == conn.NodeID() && oldConn.URL() == conn.URL() { // Take over the old connection newConns = append(newConns, oldConn) found = true @@ -1003,7 +1061,7 @@ func (c *Client) healthchecker() { c.healthcheckStop <- true return case <-ticker.C: - c.healthcheck(timeout, false) + c.healthcheck(context.Background(), timeout, false) } } } @@ -1012,7 +1070,7 @@ func (c *Client) healthchecker() { // the node state, it marks connections as dead, sets them alive etc. // If healthchecks are disabled and force is false, this is a no-op. // The timeout specifies how long to wait for a response from Elasticsearch. -func (c *Client) healthcheck(timeout time.Duration, force bool) { +func (c *Client) healthcheck(parentCtx context.Context, timeout time.Duration, force bool) { c.mu.RLock() if !c.healthcheckEnabled && !force { c.mu.RUnlock() @@ -1029,7 +1087,7 @@ func (c *Client) healthcheck(timeout time.Duration, force bool) { for _, conn := range conns { // Run the HEAD request against ES with a timeout - ctx, cancel := context.WithTimeout(context.Background(), timeout) + ctx, cancel := context.WithTimeout(parentCtx, timeout) defer cancel() // Goroutine executes the HTTP request, returns an error and sets status @@ -1077,7 +1135,7 @@ func (c *Client) healthcheck(timeout time.Duration, force bool) { // startupHealthcheck is used at startup to check if the server is available // at all. -func (c *Client) startupHealthcheck(timeout time.Duration) error { +func (c *Client) startupHealthcheck(parentCtx context.Context, timeout time.Duration) error { c.mu.Lock() urls := c.urls basicAuth := c.basicAuth @@ -1088,7 +1146,8 @@ func (c *Client) startupHealthcheck(timeout time.Duration) error { // If we don't get a connection after "timeout", we bail. var lastErr error start := time.Now() - for { + done := false + for !done { for _, url := range urls { req, err := http.NewRequest("HEAD", url, nil) if err != nil { @@ -1097,7 +1156,7 @@ func (c *Client) startupHealthcheck(timeout time.Duration) error { if basicAuth { req.SetBasicAuth(basicAuthUsername, basicAuthPassword) } - ctx, cancel := context.WithTimeout(req.Context(), timeout) + ctx, cancel := context.WithTimeout(parentCtx, timeout) defer cancel() req = req.WithContext(ctx) res, err := c.c.Do(req) @@ -1107,12 +1166,20 @@ func (c *Client) startupHealthcheck(timeout time.Duration) error { lastErr = err } } - time.Sleep(1 * time.Second) - if time.Since(start) > timeout { - break + select { + case <-parentCtx.Done(): + lastErr = parentCtx.Err() + done = true + case <-time.After(1 * time.Second): + if time.Since(start) > timeout { + done = true + } } } if lastErr != nil { + if IsContextErr(lastErr) { + return lastErr + } return errors.Wrapf(ErrNoClient, "health check timeout: %v", lastErr) } return errors.Wrap(ErrNoClient, "health check timeout") @@ -1175,13 +1242,15 @@ func (c *Client) mustActiveConn() error { // PerformRequestOptions must be passed into PerformRequest. type PerformRequestOptions struct { - Method string - Path string - Params url.Values - Body interface{} - ContentType string - IgnoreErrors []int - Retrier Retrier + Method string + Path string + Params url.Values + Body interface{} + ContentType string + IgnoreErrors []int + Retrier Retrier + Headers http.Header + MaxResponseSize int64 } // PerformRequest does a HTTP request to Elasticsearch. @@ -1200,10 +1269,12 @@ func (c *Client) PerformRequest(ctx context.Context, opt PerformRequestOptions) basicAuthPassword := c.basicAuthPassword sendGetBodyAs := c.sendGetBodyAs gzipEnabled := c.gzipEnabled + healthcheckEnabled := c.healthcheckEnabled retrier := c.retrier if opt.Retrier != nil { retrier = opt.Retrier } + defaultHeaders := c.headers c.mu.RUnlock() var err error @@ -1230,7 +1301,11 @@ func (c *Client) PerformRequest(ctx context.Context, opt PerformRequestOptions) n++ if !retried { // Force a healtcheck as all connections seem to be dead. - c.healthcheck(timeout, false) + c.healthcheck(ctx, timeout, false) + if healthcheckEnabled { + retried = true + continue + } } wait, ok, rerr := retrier.Retry(ctx, n, nil, nil, err) if rerr != nil { @@ -1253,13 +1328,26 @@ func (c *Client) PerformRequest(ctx context.Context, opt PerformRequestOptions) c.errorf("elastic: cannot create request for %s %s: %v", strings.ToUpper(opt.Method), conn.URL()+pathWithParams, err) return nil, err } - if basicAuth { req.SetBasicAuth(basicAuthUsername, basicAuthPassword) } if opt.ContentType != "" { req.Header.Set("Content-Type", opt.ContentType) } + if len(opt.Headers) > 0 { + for key, value := range opt.Headers { + for _, v := range value { + req.Header.Add(key, v) + } + } + } + if len(defaultHeaders) > 0 { + for key, value := range defaultHeaders { + for _, v := range value { + req.Header.Add(key, v) + } + } + } // Set body if opt.Body != nil { @@ -1296,30 +1384,31 @@ func (c *Client) PerformRequest(ctx context.Context, opt PerformRequestOptions) time.Sleep(wait) continue // try again } - if res.Body != nil { - defer res.Body.Close() - } + defer res.Body.Close() // Tracing c.dumpResponse(res) // Log deprecation warnings as errors - if s := res.Header.Get("Warning"); s != "" { - c.errorf(s) + if len(res.Header["Warning"]) > 0 { + c.deprecationlog((*http.Request)(req), res) + for _, warning := range res.Header["Warning"] { + c.errorf("Deprecation warning: %s", warning) + } } // Check for errors if err := checkResponse((*http.Request)(req), res, opt.IgnoreErrors...); err != nil { // No retry if request succeeded // We still try to return a response. - resp, _ = c.newResponse(res) + resp, _ = c.newResponse(res, opt.MaxResponseSize) return resp, err } // We successfully made a request with this connection conn.MarkAsHealthy() - resp, err = c.newResponse(res) + resp, err = c.newResponse(res, opt.MaxResponseSize) if err != nil { return nil, err } @@ -1391,7 +1480,7 @@ func (c *Client) BulkProcessor() *BulkProcessorService { // Reindex copies data from a source index into a destination index. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-reindex.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/docs-reindex.html // for details on the Reindex API. func (c *Client) Reindex() *ReindexService { return NewReindexService(c) @@ -1399,9 +1488,9 @@ func (c *Client) Reindex() *ReindexService { // TermVectors returns information and statistics on terms in the fields // of a particular document. -func (c *Client) TermVectors(index, typ string) *TermvectorsService { +func (c *Client) TermVectors(index string) *TermvectorsService { builder := NewTermvectorsService(c) - builder = builder.Index(index).Type(typ) + builder = builder.Index(index) return builder } @@ -1495,11 +1584,6 @@ func (c *Client) RolloverIndex(alias string) *IndicesRolloverService { return NewIndicesRolloverService(c).Alias(alias) } -// TypeExists allows to check if one or more types exist in one or more indices. -func (c *Client) TypeExists() *IndicesExistsTypeService { - return NewIndicesExistsTypeService(c) -} - // IndexStats provides statistics on different operations happining // in one or more indices. func (c *Client) IndexStats(indices ...string) *IndicesStatsService { @@ -1516,6 +1600,16 @@ func (c *Client) CloseIndex(name string) *IndicesCloseService { return NewIndicesCloseService(c).Index(name) } +// FreezeIndex freezes an index. +func (c *Client) FreezeIndex(name string) *IndicesFreezeService { + return NewIndicesFreezeService(c).Index(name) +} + +// UnfreezeIndex unfreezes an index. +func (c *Client) UnfreezeIndex(name string) *IndicesUnfreezeService { + return NewIndicesUnfreezeService(c).Index(name) +} + // IndexGet retrieves information about one or more indices. // IndexGet is only available for Elasticsearch 1.4 or later. func (c *Client) IndexGet(indices ...string) *IndicesGetService { @@ -1560,6 +1654,20 @@ func (c *Client) Flush(indices ...string) *IndicesFlushService { return NewIndicesFlushService(c).Index(indices...) } +// SyncedFlush performs a synced flush. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/indices-synced-flush.html +// for more details on synched flushes and how they differ from a normal +// Flush. +func (c *Client) SyncedFlush(indices ...string) *IndicesSyncedFlushService { + return NewIndicesSyncedFlushService(c).Index(indices...) +} + +// ClearCache clears caches for one or more indices. +func (c *Client) ClearCache(indices ...string) *IndicesClearCacheService { + return NewIndicesClearCacheService(c).Index(indices...) +} + // Alias enables the caller to add and/or remove aliases. func (c *Client) Alias() *AliasService { return NewAliasService(c) @@ -1646,6 +1754,11 @@ func (c *Client) CatIndices() *CatIndicesService { return NewCatIndicesService(c) } +// CatShards returns information about shards. +func (c *Client) CatShards() *CatShardsService { + return NewCatShardsService(c) +} + // -- Ingest APIs -- // IngestPutPipeline adds pipelines and updates existing pipelines in @@ -1677,6 +1790,12 @@ func (c *Client) ClusterHealth() *ClusterHealthService { return NewClusterHealthService(c) } +// ClusterReroute allows for manual changes to the allocation of +// individual shards in the cluster. +func (c *Client) ClusterReroute() *ClusterRerouteService { + return NewClusterRerouteService(c) +} + // ClusterState retrieves the state of the cluster. func (c *Client) ClusterState() *ClusterStateService { return NewClusterStateService(c) @@ -1720,10 +1839,10 @@ func (c *Client) TasksGetTask() *TasksGetTaskService { // -- Snapshot and Restore -- -// TODO Snapshot Delete -// TODO Snapshot Get -// TODO Snapshot Restore -// TODO Snapshot Status +// SnapshotStatus returns information about the status of a snapshot. +func (c *Client) SnapshotStatus() *SnapshotStatusService { + return NewSnapshotStatusService(c) +} // SnapshotCreate creates a snapshot. func (c *Client) SnapshotCreate(repository string, snapshot string) *SnapshotCreateService { @@ -1735,6 +1854,11 @@ func (c *Client) SnapshotCreateRepository(repository string) *SnapshotCreateRepo return NewSnapshotCreateRepositoryService(c).Repository(repository) } +// SnapshotDelete deletes a snapshot in a snapshot repository. +func (c *Client) SnapshotDelete(repository string, snapshot string) *SnapshotDeleteService { + return NewSnapshotDeleteService(c).Repository(repository).Snapshot(snapshot) +} + // SnapshotDeleteRepository deletes a snapshot repository. func (c *Client) SnapshotDeleteRepository(repositories ...string) *SnapshotDeleteRepositoryService { return NewSnapshotDeleteRepositoryService(c).Repository(repositories...) @@ -1745,11 +1869,21 @@ func (c *Client) SnapshotGetRepository(repositories ...string) *SnapshotGetRepos return NewSnapshotGetRepositoryService(c).Repository(repositories...) } +// SnapshotGet lists snapshot for a repository. +func (c *Client) SnapshotGet(repository string) *SnapshotGetService { + return NewSnapshotGetService(c).Repository(repository) +} + // SnapshotVerifyRepository verifies a snapshot repository. func (c *Client) SnapshotVerifyRepository(repository string) *SnapshotVerifyRepositoryService { return NewSnapshotVerifyRepositoryService(c).Repository(repository) } +// SnapshotRestore restores the specified indices from a given snapshot +func (c *Client) SnapshotRestore(repository string, snapshot string) *SnapshotRestoreService { + return NewSnapshotRestoreService(c).Repository(repository).Snapshot(snapshot) +} + // -- Scripting APIs -- // GetScript reads a stored script in Elasticsearch. @@ -1768,6 +1902,148 @@ func (c *Client) DeleteScript() *DeleteScriptService { return NewDeleteScriptService(c) } +// -- X-Pack General -- + +// XPackInfo gets information on the xpack plugins enabled on the cluster + +func (c *Client) XPackInfo() *XPackInfoService { + return NewXPackInfoService(c) +} + +// -- X-Pack Index Lifecycle Management -- + +// XPackIlmPutLifecycle adds or modifies an ilm policy. +func (c *Client) XPackIlmPutLifecycle() *XPackIlmPutLifecycleService { + return NewXPackIlmPutLifecycleService(c) +} + +// XPackIlmGettLifecycle gets an ilm policy. +func (c *Client) XPackIlmGetLifecycle() *XPackIlmGetLifecycleService { + return NewXPackIlmGetLifecycleService(c) +} + +// XPackIlmDeleteLifecycle deletes an ilm policy. +func (c *Client) XPackIlmDeleteLifecycle() *XPackIlmDeleteLifecycleService { + return NewXPackIlmDeleteLifecycleService(c) +} + +// -- X-Pack Security -- + +// XPackSecurityGetRoleMapping gets a role mapping. +func (c *Client) XPackSecurityGetRoleMapping(roleMappingName string) *XPackSecurityGetRoleMappingService { + return NewXPackSecurityGetRoleMappingService(c).Name(roleMappingName) +} + +// XPackSecurityPutRoleMapping adds a role mapping. +func (c *Client) XPackSecurityPutRoleMapping(roleMappingName string) *XPackSecurityPutRoleMappingService { + return NewXPackSecurityPutRoleMappingService(c).Name(roleMappingName) +} + +// XPackSecurityDeleteRoleMapping deletes a role mapping. +func (c *Client) XPackSecurityDeleteRoleMapping(roleMappingName string) *XPackSecurityDeleteRoleMappingService { + return NewXPackSecurityDeleteRoleMappingService(c).Name(roleMappingName) +} + +// XPackSecurityGetRole gets a role. +func (c *Client) XPackSecurityGetRole(roleName string) *XPackSecurityGetRoleService { + return NewXPackSecurityGetRoleService(c).Name(roleName) +} + +// XPackSecurityPutRole adds a role. +func (c *Client) XPackSecurityPutRole(roleName string) *XPackSecurityPutRoleService { + return NewXPackSecurityPutRoleService(c).Name(roleName) +} + +// XPackSecurityDeleteRole deletes a role. +func (c *Client) XPackSecurityDeleteRole(roleName string) *XPackSecurityDeleteRoleService { + return NewXPackSecurityDeleteRoleService(c).Name(roleName) +} + +// TODO: Clear role cache API +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/security-api-clear-role-cache.html + +// XPackSecurityChangePassword changes the password of users in the native realm. +func (c *Client) XPackSecurityChangePassword(username string) *XPackSecurityChangePasswordService { + return NewXPackSecurityChangePasswordService(c).Username(username) +} + +// XPackSecurityGetUser gets details about one or more users. +func (c *Client) XPackSecurityGetUser(usernames ...string) *XPackSecurityGetUserService { + return NewXPackSecurityGetUserService(c).Usernames(usernames...) +} + +// XPackSecurityPutUser adds or updates a user. +func (c *Client) XPackSecurityPutUser(username string) *XPackSecurityPutUserService { + return NewXPackSecurityPutUserService(c).Username(username) +} + +// XPackSecurityEnableUser enables a user. +func (c *Client) XPackSecurityEnableUser(username string) *XPackSecurityEnableUserService { + return NewXPackSecurityEnableUserService(c).Username(username) +} + +// XPackSecurityDisableUser disables a user. +func (c *Client) XPackSecurityDisableUser(username string) *XPackSecurityDisableUserService { + return NewXPackSecurityDisableUserService(c).Username(username) +} + +// XPackSecurityDeleteUser deletes a user. +func (c *Client) XPackSecurityDeleteUser(username string) *XPackSecurityDeleteUserService { + return NewXPackSecurityDeleteUserService(c).Username(username) +} + +// -- X-Pack Watcher -- + +// XPackWatchPut adds a watch. +func (c *Client) XPackWatchPut(watchId string) *XPackWatcherPutWatchService { + return NewXPackWatcherPutWatchService(c).Id(watchId) +} + +// XPackWatchGet gets a watch. +func (c *Client) XPackWatchGet(watchId string) *XPackWatcherGetWatchService { + return NewXPackWatcherGetWatchService(c).Id(watchId) +} + +// XPackWatchDelete deletes a watch. +func (c *Client) XPackWatchDelete(watchId string) *XPackWatcherDeleteWatchService { + return NewXPackWatcherDeleteWatchService(c).Id(watchId) +} + +// XPackWatchExecute executes a watch. +func (c *Client) XPackWatchExecute() *XPackWatcherExecuteWatchService { + return NewXPackWatcherExecuteWatchService(c) +} + +// XPackWatchAck acknowledging a watch. +func (c *Client) XPackWatchAck(watchId string) *XPackWatcherAckWatchService { + return NewXPackWatcherAckWatchService(c).WatchId(watchId) +} + +// XPackWatchActivate activates a watch. +func (c *Client) XPackWatchActivate(watchId string) *XPackWatcherActivateWatchService { + return NewXPackWatcherActivateWatchService(c).WatchId(watchId) +} + +// XPackWatchDeactivate deactivates a watch. +func (c *Client) XPackWatchDeactivate(watchId string) *XPackWatcherDeactivateWatchService { + return NewXPackWatcherDeactivateWatchService(c).WatchId(watchId) +} + +// XPackWatchStats returns the current Watcher metrics. +func (c *Client) XPackWatchStats() *XPackWatcherStatsService { + return NewXPackWatcherStatsService(c) +} + +// XPackWatchStart starts a watch. +func (c *Client) XPackWatchStart() *XPackWatcherStartService { + return NewXPackWatcherStartService(c) +} + +// XPackWatchStop stops a watch. +func (c *Client) XPackWatchStop() *XPackWatcherStopService { + return NewXPackWatcherStopService(c) +} + // -- Helpers and shortcuts -- // ElasticsearchVersion returns the version number of Elasticsearch diff --git a/vendor/gopkg.in/olivere/elastic.v6/cluster_health.go b/vendor/github.com/olivere/elastic/v7/cluster_health.go similarity index 77% rename from vendor/gopkg.in/olivere/elastic.v6/cluster_health.go rename to vendor/github.com/olivere/elastic/v7/cluster_health.go index f960cfe8ead216e498986e4591286846b41d13ab..eba5e22120a02c50439dd07f6e71baa1d80934ea 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/cluster_health.go +++ b/vendor/github.com/olivere/elastic/v7/cluster_health.go @@ -7,19 +7,26 @@ package elastic import ( "context" "fmt" + "net/http" "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // ClusterHealthService allows to get a very simple status on the health of the cluster. // -// See http://www.elastic.co/guide/en/elasticsearch/reference/5.2/cluster-health.html +// See http://www.elastic.co/guide/en/elasticsearch/reference/7.0/cluster-health.html // for details. type ClusterHealthService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + indices []string level string local *bool @@ -39,6 +46,46 @@ func NewClusterHealthService(client *Client) *ClusterHealthService { } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *ClusterHealthService) Pretty(pretty bool) *ClusterHealthService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *ClusterHealthService) Human(human bool) *ClusterHealthService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *ClusterHealthService) ErrorTrace(errorTrace bool) *ClusterHealthService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *ClusterHealthService) FilterPath(filterPath ...string) *ClusterHealthService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *ClusterHealthService) Header(name string, value string) *ClusterHealthService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *ClusterHealthService) Headers(headers http.Header) *ClusterHealthService { + s.headers = headers + return s +} + // Index limits the information returned to specific indices. func (s *ClusterHealthService) Index(indices ...string) *ClusterHealthService { s.indices = append(s.indices, indices...) @@ -106,12 +153,6 @@ func (s *ClusterHealthService) WaitForYellowStatus() *ClusterHealthService { return s.WaitForStatus("yellow") } -// Pretty indicates that the JSON response be indented and human readable. -func (s *ClusterHealthService) Pretty(pretty bool) *ClusterHealthService { - s.pretty = pretty - return s -} - // buildURL builds the URL for the operation. func (s *ClusterHealthService) buildURL() (string, url.Values, error) { // Build URL @@ -130,8 +171,17 @@ func (s *ClusterHealthService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if s.level != "" { params.Set("level", s.level) @@ -180,9 +230,10 @@ func (s *ClusterHealthService) Do(ctx context.Context) (*ClusterHealthResponse, // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, + Method: "GET", + Path: path, + Params: params, + Headers: s.headers, }) if err != nil { return nil, err @@ -211,11 +262,10 @@ type ClusterHealthResponse struct { DelayedUnassignedShards int `json:"delayed_unassigned_shards"` NumberOfPendingTasks int `json:"number_of_pending_tasks"` NumberOfInFlightFetch int `json:"number_of_in_flight_fetch"` - TaskMaxWaitTimeInQueueInMillis int `json:"task_max_waiting_in_queue_millis"` - ActiveShardsPercentAsNumber float64 `json:"active_shards_percent_as_number"` - - // Validation failures -> index name -> array of validation failures - ValidationFailures []map[string][]string `json:"validation_failures"` + TaskMaxWaitTimeInQueue string `json:"task_max_waiting_in_queue"` // "0s" + TaskMaxWaitTimeInQueueInMillis int `json:"task_max_waiting_in_queue_millis"` // 0 + ActiveShardsPercent string `json:"active_shards_percent"` // "100.0%" + ActiveShardsPercentAsNumber float64 `json:"active_shards_percent_as_number"` // 100.0 // Index name -> index health Indices map[string]*ClusterIndexHealth `json:"indices"` @@ -231,8 +281,6 @@ type ClusterIndexHealth struct { RelocatingShards int `json:"relocating_shards"` InitializingShards int `json:"initializing_shards"` UnassignedShards int `json:"unassigned_shards"` - // Validation failures - ValidationFailures []string `json:"validation_failures"` // Shards by id, e.g. "0" or "1" Shards map[string]*ClusterShardHealth `json:"shards"` } diff --git a/vendor/github.com/olivere/elastic/v7/cluster_reroute.go b/vendor/github.com/olivere/elastic/v7/cluster_reroute.go new file mode 100644 index 0000000000000000000000000000000000000000..92a96255fe98b54db6ac20ba6683569f868d835b --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/cluster_reroute.go @@ -0,0 +1,438 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "errors" + "fmt" + "net/http" + "net/url" + "strings" +) + +// ClusterRerouteService allows for manual changes to the allocation of +// individual shards in the cluster. For example, a shard can be moved from +// one node to another explicitly, an allocation can be cancelled, and +// an unassigned shard can be explicitly allocated to a specific node. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/cluster-reroute.html +// for details. +type ClusterRerouteService struct { + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + + metrics []string + dryRun *bool + explain *bool + retryFailed *bool + masterTimeout string + timeout string + commands []AllocationCommand + body interface{} +} + +// NewClusterRerouteService creates a new ClusterRerouteService. +func NewClusterRerouteService(client *Client) *ClusterRerouteService { + return &ClusterRerouteService{ + client: client, + } +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *ClusterRerouteService) Pretty(pretty bool) *ClusterRerouteService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *ClusterRerouteService) Human(human bool) *ClusterRerouteService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *ClusterRerouteService) ErrorTrace(errorTrace bool) *ClusterRerouteService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *ClusterRerouteService) FilterPath(filterPath ...string) *ClusterRerouteService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *ClusterRerouteService) Header(name string, value string) *ClusterRerouteService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *ClusterRerouteService) Headers(headers http.Header) *ClusterRerouteService { + s.headers = headers + return s +} + +// Metric limits the information returned to the specified metric. +// It can be one of: "_all", "blocks", "metadata", "nodes", "routing_table", "master_node", "version". +// Defaults to all but metadata. +func (s *ClusterRerouteService) Metric(metrics ...string) *ClusterRerouteService { + s.metrics = append(s.metrics, metrics...) + return s +} + +// DryRun indicates whether to simulate the operation only and return the +// resulting state. +func (s *ClusterRerouteService) DryRun(dryRun bool) *ClusterRerouteService { + s.dryRun = &dryRun + return s +} + +// Explain, when set to true, returns an explanation of why the commands +// can or cannot be executed. +func (s *ClusterRerouteService) Explain(explain bool) *ClusterRerouteService { + s.explain = &explain + return s +} + +// RetryFailed indicates whether to retry allocation of shards that are blocked +// due to too many subsequent allocation failures. +func (s *ClusterRerouteService) RetryFailed(retryFailed bool) *ClusterRerouteService { + s.retryFailed = &retryFailed + return s +} + +// MasterTimeout specifies an explicit timeout for connection to master. +func (s *ClusterRerouteService) MasterTimeout(masterTimeout string) *ClusterRerouteService { + s.masterTimeout = masterTimeout + return s +} + +// Timeout specifies an explicit operationtimeout. +func (s *ClusterRerouteService) Timeout(timeout string) *ClusterRerouteService { + s.timeout = timeout + return s +} + +// Add adds one or more commands to be executed. +func (s *ClusterRerouteService) Add(commands ...AllocationCommand) *ClusterRerouteService { + s.commands = append(s.commands, commands...) + return s +} + +// Body specifies the body to be sent. +// If you specify Body, the commands passed via Add are ignored. +// In other words: Body takes precedence over Add. +func (s *ClusterRerouteService) Body(body interface{}) *ClusterRerouteService { + s.body = body + return s +} + +// buildURL builds the URL for the operation. +func (s *ClusterRerouteService) buildURL() (string, url.Values, error) { + // Build URL + path := "/_cluster/reroute" + + // Add query string parameters + params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } + if v := s.dryRun; v != nil { + params.Set("dry_run", fmt.Sprint(*v)) + } + if v := s.explain; v != nil { + params.Set("explain", fmt.Sprint(*v)) + } + if v := s.retryFailed; v != nil { + params.Set("retry_failed", fmt.Sprint(*v)) + } + if len(s.metrics) > 0 { + params.Set("metric", strings.Join(s.metrics, ",")) + } + if s.masterTimeout != "" { + params.Set("master_timeout", s.masterTimeout) + } + if s.timeout != "" { + params.Set("timeout", s.timeout) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *ClusterRerouteService) Validate() error { + if s.body == nil && len(s.commands) == 0 { + return errors.New("missing allocate commands or raw body") + } + return nil +} + +// Do executes the operation. +func (s *ClusterRerouteService) Do(ctx context.Context) (*ClusterRerouteResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Setup HTTP request body + var body interface{} + if s.body != nil { + body = s.body + } else { + commands := make([]interface{}, len(s.commands)) + for i, cmd := range s.commands { + src, err := cmd.Source() + if err != nil { + return nil, err + } + commands[i] = map[string]interface{}{ + cmd.Name(): src, + } + } + query := make(map[string]interface{}) + query["commands"] = commands + body = query + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "POST", + Path: path, + Params: params, + Body: body, + Headers: s.headers, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(ClusterRerouteResponse) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// ClusterRerouteResponse is the response of ClusterRerouteService.Do. +type ClusterRerouteResponse struct { + State *ClusterStateResponse `json:"state"` + Explanations []RerouteExplanation `json:"explanations,omitempty"` +} + +// RerouteExplanation is returned in ClusterRerouteResponse if +// the "explain" parameter is set to "true". +type RerouteExplanation struct { + Command string `json:"command"` + Parameters map[string]interface{} `json:"parameters"` + Decisions []RerouteDecision `json:"decisions"` +} + +// RerouteDecision is a decision the decider made while rerouting. +type RerouteDecision interface{} + +// -- Allocation commands -- + +// AllocationCommand is a command to be executed in a call +// to Cluster Reroute API. +type AllocationCommand interface { + Name() string + Source() (interface{}, error) +} + +var _ AllocationCommand = (*MoveAllocationCommand)(nil) + +// MoveAllocationCommand moves a shard from a specific node to +// another node. +type MoveAllocationCommand struct { + index string + shardId int + fromNode string + toNode string +} + +// NewMoveAllocationCommand creates a new MoveAllocationCommand. +func NewMoveAllocationCommand(index string, shardId int, fromNode, toNode string) *MoveAllocationCommand { + return &MoveAllocationCommand{ + index: index, + shardId: shardId, + fromNode: fromNode, + toNode: toNode, + } +} + +// Name of the command in a request to the Cluster Reroute API. +func (cmd *MoveAllocationCommand) Name() string { return "move" } + +// Source generates the (inner) JSON to be used when serializing the command. +func (cmd *MoveAllocationCommand) Source() (interface{}, error) { + source := make(map[string]interface{}) + source["index"] = cmd.index + source["shard"] = cmd.shardId + source["from_node"] = cmd.fromNode + source["to_node"] = cmd.toNode + return source, nil +} + +var _ AllocationCommand = (*CancelAllocationCommand)(nil) + +// CancelAllocationCommand cancels relocation, or recovery of a given shard on a node. +type CancelAllocationCommand struct { + index string + shardId int + node string + allowPrimary bool +} + +// NewCancelAllocationCommand creates a new CancelAllocationCommand. +func NewCancelAllocationCommand(index string, shardId int, node string, allowPrimary bool) *CancelAllocationCommand { + return &CancelAllocationCommand{ + index: index, + shardId: shardId, + node: node, + allowPrimary: allowPrimary, + } +} + +// Name of the command in a request to the Cluster Reroute API. +func (cmd *CancelAllocationCommand) Name() string { return "cancel" } + +// Source generates the (inner) JSON to be used when serializing the command. +func (cmd *CancelAllocationCommand) Source() (interface{}, error) { + source := make(map[string]interface{}) + source["index"] = cmd.index + source["shard"] = cmd.shardId + source["node"] = cmd.node + source["allow_primary"] = cmd.allowPrimary + return source, nil +} + +var _ AllocationCommand = (*AllocateStalePrimaryAllocationCommand)(nil) + +// AllocateStalePrimaryAllocationCommand allocates an unassigned stale +// primary shard to a specific node. Use with extreme care as this will +// result in data loss. Allocation deciders are ignored. +type AllocateStalePrimaryAllocationCommand struct { + index string + shardId int + node string + acceptDataLoss bool +} + +// NewAllocateStalePrimaryAllocationCommand creates a new +// AllocateStalePrimaryAllocationCommand. +func NewAllocateStalePrimaryAllocationCommand(index string, shardId int, node string, acceptDataLoss bool) *AllocateStalePrimaryAllocationCommand { + return &AllocateStalePrimaryAllocationCommand{ + index: index, + shardId: shardId, + node: node, + acceptDataLoss: acceptDataLoss, + } +} + +// Name of the command in a request to the Cluster Reroute API. +func (cmd *AllocateStalePrimaryAllocationCommand) Name() string { return "allocate_stale_primary" } + +// Source generates the (inner) JSON to be used when serializing the command. +func (cmd *AllocateStalePrimaryAllocationCommand) Source() (interface{}, error) { + source := make(map[string]interface{}) + source["index"] = cmd.index + source["shard"] = cmd.shardId + source["node"] = cmd.node + source["accept_data_loss"] = cmd.acceptDataLoss + return source, nil +} + +var _ AllocationCommand = (*AllocateReplicaAllocationCommand)(nil) + +// AllocateReplicaAllocationCommand allocates an unassigned replica shard +// to a specific node. Checks if allocation deciders allow allocation. +type AllocateReplicaAllocationCommand struct { + index string + shardId int + node string +} + +// NewAllocateReplicaAllocationCommand creates a new +// AllocateReplicaAllocationCommand. +func NewAllocateReplicaAllocationCommand(index string, shardId int, node string) *AllocateReplicaAllocationCommand { + return &AllocateReplicaAllocationCommand{ + index: index, + shardId: shardId, + node: node, + } +} + +// Name of the command in a request to the Cluster Reroute API. +func (cmd *AllocateReplicaAllocationCommand) Name() string { return "allocate_replica" } + +// Source generates the (inner) JSON to be used when serializing the command. +func (cmd *AllocateReplicaAllocationCommand) Source() (interface{}, error) { + source := make(map[string]interface{}) + source["index"] = cmd.index + source["shard"] = cmd.shardId + source["node"] = cmd.node + return source, nil +} + +// AllocateEmptyPrimaryAllocationCommand allocates an unassigned empty +// primary shard to a specific node. Use with extreme care as this will +// result in data loss. Allocation deciders are ignored. +type AllocateEmptyPrimaryAllocationCommand struct { + index string + shardId int + node string + acceptDataLoss bool +} + +// NewAllocateEmptyPrimaryAllocationCommand creates a new +// AllocateEmptyPrimaryAllocationCommand. +func NewAllocateEmptyPrimaryAllocationCommand(index string, shardId int, node string, acceptDataLoss bool) *AllocateEmptyPrimaryAllocationCommand { + return &AllocateEmptyPrimaryAllocationCommand{ + index: index, + shardId: shardId, + node: node, + acceptDataLoss: acceptDataLoss, + } +} + +// Name of the command in a request to the Cluster Reroute API. +func (cmd *AllocateEmptyPrimaryAllocationCommand) Name() string { return "allocate_empty_primary" } + +// Source generates the (inner) JSON to be used when serializing the command. +func (cmd *AllocateEmptyPrimaryAllocationCommand) Source() (interface{}, error) { + source := make(map[string]interface{}) + source["index"] = cmd.index + source["shard"] = cmd.shardId + source["node"] = cmd.node + source["accept_data_loss"] = cmd.acceptDataLoss + return source, nil +} diff --git a/vendor/gopkg.in/olivere/elastic.v6/cluster_state.go b/vendor/github.com/olivere/elastic/v7/cluster_state.go similarity index 64% rename from vendor/gopkg.in/olivere/elastic.v6/cluster_state.go rename to vendor/github.com/olivere/elastic/v7/cluster_state.go index 139195159850ed5826a365b9a74b21c534811cea..7d30086f6be3bf556cfb70ea81aadbf6ed94bca0 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/cluster_state.go +++ b/vendor/github.com/olivere/elastic/v7/cluster_state.go @@ -7,19 +7,26 @@ package elastic import ( "context" "fmt" + "net/http" "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // ClusterStateService allows to get a comprehensive state information of the whole cluster. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/cluster-state.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/cluster-state.html // for details. type ClusterStateService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + indices []string metrics []string allowNoIndices *bool @@ -39,6 +46,46 @@ func NewClusterStateService(client *Client) *ClusterStateService { } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *ClusterStateService) Pretty(pretty bool) *ClusterStateService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *ClusterStateService) Human(human bool) *ClusterStateService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *ClusterStateService) ErrorTrace(errorTrace bool) *ClusterStateService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *ClusterStateService) FilterPath(filterPath ...string) *ClusterStateService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *ClusterStateService) Header(name string, value string) *ClusterStateService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *ClusterStateService) Headers(headers http.Header) *ClusterStateService { + s.headers = headers + return s +} + // Index is a list of index names. Use _all or an empty string to // perform the operation on all indices. func (s *ClusterStateService) Index(indices ...string) *ClusterStateService { @@ -95,12 +142,6 @@ func (s *ClusterStateService) MasterTimeout(masterTimeout string) *ClusterStateS return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *ClusterStateService) Pretty(pretty bool) *ClusterStateService { - s.pretty = pretty - return s -} - // buildURL builds the URL for the operation. func (s *ClusterStateService) buildURL() (string, url.Values, error) { // Build URL @@ -122,8 +163,17 @@ func (s *ClusterStateService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if s.allowNoIndices != nil { params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) @@ -166,9 +216,10 @@ func (s *ClusterStateService) Do(ctx context.Context) (*ClusterStateResponse, er // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, + Method: "GET", + Path: path, + Params: params, + Headers: s.headers, }) if err != nil { return nil, err @@ -184,16 +235,17 @@ func (s *ClusterStateService) Do(ctx context.Context) (*ClusterStateResponse, er // ClusterStateResponse is the response of ClusterStateService.Do. type ClusterStateResponse struct { - ClusterName string `json:"cluster_name"` - Version int64 `json:"version"` - StateUUID string `json:"state_uuid"` - MasterNode string `json:"master_node"` - Blocks map[string]*clusterBlocks `json:"blocks"` - Nodes map[string]*discoveryNode `json:"nodes"` - Metadata *clusterStateMetadata `json:"metadata"` - RoutingTable map[string]*clusterStateRoutingTable `json:"routing_table"` - RoutingNodes *clusterStateRoutingNode `json:"routing_nodes"` - Customs map[string]interface{} `json:"customs"` + ClusterName string `json:"cluster_name"` + ClusterUUID string `json:"cluster_uuid"` + Version int64 `json:"version"` + StateUUID string `json:"state_uuid"` + MasterNode string `json:"master_node"` + Blocks map[string]*clusterBlocks `json:"blocks"` + Nodes map[string]*discoveryNode `json:"nodes"` + Metadata *clusterStateMetadata `json:"metadata"` + RoutingTable *clusterStateRoutingTable `json:"routing_table"` + RoutingNodes *clusterStateRoutingNode `json:"routing_nodes"` + Customs map[string]interface{} `json:"customs"` } type clusterBlocks struct { @@ -209,21 +261,34 @@ type clusterBlock struct { } type clusterStateMetadata struct { - ClusterUUID string `json:"cluster_uuid"` - Templates map[string]*indexTemplateMetaData `json:"templates"` // template name -> index template metadata - Indices map[string]*indexMetaData `json:"indices"` // index name _> meta data - RoutingTable struct { + ClusterUUID string `json:"cluster_uuid"` + ClusterUUIDCommitted string `json:"cluster_uuid_committed"` + ClusterCoordination *clusterCoordinationMetaData `json:"cluster_coordination"` + Templates map[string]*indexTemplateMetaData `json:"templates"` // template name -> index template metadata + Indices map[string]*indexMetaData `json:"indices"` // index name _> meta data + RoutingTable struct { Indices map[string]*indexRoutingTable `json:"indices"` // index name -> routing table } `json:"routing_table"` RoutingNodes struct { Unassigned []*shardRouting `json:"unassigned"` Nodes []*shardRouting `json:"nodes"` } `json:"routing_nodes"` - Customs map[string]interface{} `json:"customs"` + Customs map[string]interface{} `json:"customs"` + Ingest map[string]interface{} `json:"ingest"` + StoredScripts map[string]interface{} `json:"stored_scripts"` + IndexGraveyard map[string]interface{} `json:"index-graveyard"` +} + +type clusterCoordinationMetaData struct { + Term int64 `json:"term"` + LastCommittedConfig interface{} `json:"last_committed_config,omitempty"` + LastAcceptedConfig interface{} `json:"last_accepted_config,omitempty"` + VotingConfigExclusions []interface{} `json:"voting_config_exclusions,omitempty"` } type discoveryNode struct { Name string `json:"name"` // server name, e.g. "es1" + EphemeralID string `json:"ephemeral_id"` // e.g. "paHSLpn6QyuVy_n-GM1JAQ" TransportAddress string `json:"transport_address"` // e.g. inet[/1.2.3.4:9300] Attributes map[string]interface{} `json:"attributes"` // e.g. { "data": true, "master": true } } @@ -246,10 +311,12 @@ type indexTemplateMetaData struct { } type indexMetaData struct { - State string `json:"state"` - Settings map[string]interface{} `json:"settings"` - Mappings map[string]interface{} `json:"mappings"` - Aliases []string `json:"aliases"` // e.g. [ "alias1", "alias2" ] + State string `json:"state"` + Settings map[string]interface{} `json:"settings"` + Mappings map[string]interface{} `json:"mappings"` + Aliases []string `json:"aliases"` // e.g. [ "alias1", "alias2" ] + PrimaryTerms map[string]interface{} `json:"primary_terms"` + InSyncAllocations map[string]interface{} `json:"in_sync_allocations"` } type indexRoutingTable struct { diff --git a/vendor/gopkg.in/olivere/elastic.v6/cluster_stats.go b/vendor/github.com/olivere/elastic/v7/cluster_stats.go similarity index 64% rename from vendor/gopkg.in/olivere/elastic.v6/cluster_stats.go rename to vendor/github.com/olivere/elastic/v7/cluster_stats.go index 07bc3aea0130ff6c9597ea390cb59d0d275d8ecc..711c2a76ded55cba7205acbb26de08ea1bf175df 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/cluster_stats.go +++ b/vendor/github.com/olivere/elastic/v7/cluster_stats.go @@ -7,20 +7,26 @@ package elastic import ( "context" "fmt" + "net/http" "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // ClusterStatsService is documented at -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/cluster-stats.html. +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/cluster-stats.html. type ClusterStatsService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + nodeId []string flatSettings *bool - human *bool } // NewClusterStatsService creates a new ClusterStatsService. @@ -31,27 +37,55 @@ func NewClusterStatsService(client *Client) *ClusterStatsService { } } -// NodeId is documented as: A comma-separated list of node IDs or names to limit the returned information; use `_local` to return information from the node you're connecting to, leave empty to get information from all nodes. -func (s *ClusterStatsService) NodeId(nodeId []string) *ClusterStatsService { - s.nodeId = nodeId +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *ClusterStatsService) Pretty(pretty bool) *ClusterStatsService { + s.pretty = &pretty return s } -// FlatSettings is documented as: Return settings in flat format (default: false). -func (s *ClusterStatsService) FlatSettings(flatSettings bool) *ClusterStatsService { - s.flatSettings = &flatSettings +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *ClusterStatsService) Human(human bool) *ClusterStatsService { + s.human = &human return s } -// Human is documented as: Whether to return time and byte values in human-readable format.. -func (s *ClusterStatsService) Human(human bool) *ClusterStatsService { - s.human = &human +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *ClusterStatsService) ErrorTrace(errorTrace bool) *ClusterStatsService { + s.errorTrace = &errorTrace return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *ClusterStatsService) Pretty(pretty bool) *ClusterStatsService { - s.pretty = pretty +// FilterPath specifies a list of filters used to reduce the response. +func (s *ClusterStatsService) FilterPath(filterPath ...string) *ClusterStatsService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *ClusterStatsService) Header(name string, value string) *ClusterStatsService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *ClusterStatsService) Headers(headers http.Header) *ClusterStatsService { + s.headers = headers + return s +} + +// NodeId is documented as: A comma-separated list of node IDs or names to limit the returned information; use `_local` to return information from the node you're connecting to, leave empty to get information from all nodes. +func (s *ClusterStatsService) NodeId(nodeId []string) *ClusterStatsService { + s.nodeId = nodeId + return s +} + +// FlatSettings is documented as: Return settings in flat format (default: false). +func (s *ClusterStatsService) FlatSettings(flatSettings bool) *ClusterStatsService { + s.flatSettings = &flatSettings return s } @@ -77,15 +111,21 @@ func (s *ClusterStatsService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if s.flatSettings != nil { params.Set("flat_settings", fmt.Sprintf("%v", *s.flatSettings)) } - if s.human != nil { - params.Set("human", fmt.Sprintf("%v", *s.human)) - } return path, params, nil } @@ -109,9 +149,10 @@ func (s *ClusterStatsService) Do(ctx context.Context) (*ClusterStatsResponse, er // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, + Method: "GET", + Path: path, + Params: params, + Headers: s.headers, }) if err != nil { return nil, err @@ -127,25 +168,24 @@ func (s *ClusterStatsService) Do(ctx context.Context) (*ClusterStatsResponse, er // ClusterStatsResponse is the response of ClusterStatsService.Do. type ClusterStatsResponse struct { + NodesStats *ShardsInfo `json:"_nodes,omitempty"` Timestamp int64 `json:"timestamp"` ClusterName string `json:"cluster_name"` - ClusterUUID string `json:"uuid"` - Status string `json:"status"` + ClusterUUID string `json:"cluster_uuid"` + Status string `json:"status,omitempty"` // e.g. green Indices *ClusterStatsIndices `json:"indices"` Nodes *ClusterStatsNodes `json:"nodes"` } type ClusterStatsIndices struct { - Count int `json:"count"` - Shards *ClusterStatsIndicesShards `json:"shards"` - Docs *ClusterStatsIndicesDocs `json:"docs"` - Store *ClusterStatsIndicesStore `json:"store"` - FieldData *ClusterStatsIndicesFieldData `json:"fielddata"` - FilterCache *ClusterStatsIndicesFilterCache `json:"filter_cache"` - IdCache *ClusterStatsIndicesIdCache `json:"id_cache"` - Completion *ClusterStatsIndicesCompletion `json:"completion"` - Segments *ClusterStatsIndicesSegments `json:"segments"` - Percolate *ClusterStatsIndicesPercolate `json:"percolate"` + Count int `json:"count"` // number of indices + Shards *ClusterStatsIndicesShards `json:"shards"` + Docs *ClusterStatsIndicesDocs `json:"docs"` + Store *ClusterStatsIndicesStore `json:"store"` + FieldData *ClusterStatsIndicesFieldData `json:"fielddata"` + QueryCache *ClusterStatsIndicesQueryCache `json:"query_cache"` + Completion *ClusterStatsIndicesCompletion `json:"completion"` + Segments *IndexStatsSegments `json:"segments"` } type ClusterStatsIndicesShards struct { @@ -190,52 +230,33 @@ type ClusterStatsIndicesFieldData struct { Fields map[string]struct { MemorySize string `json:"memory_size"` // e.g. "61.3kb" MemorySizeInBytes int64 `json:"memory_size_in_bytes"` - } `json:"fields"` + } `json:"fields,omitempty"` } -type ClusterStatsIndicesFilterCache struct { +type ClusterStatsIndicesQueryCache struct { MemorySize string `json:"memory_size"` // e.g. "61.3kb" MemorySizeInBytes int64 `json:"memory_size_in_bytes"` + TotalCount int64 `json:"total_count"` + HitCount int64 `json:"hit_count"` + MissCount int64 `json:"miss_count"` + CacheSize int64 `json:"cache_size"` + CacheCount int64 `json:"cache_count"` Evictions int64 `json:"evictions"` } -type ClusterStatsIndicesIdCache struct { - MemorySize string `json:"memory_size"` // e.g. "61.3kb" - MemorySizeInBytes int64 `json:"memory_size_in_bytes"` -} - type ClusterStatsIndicesCompletion struct { Size string `json:"size"` // e.g. "61.3kb" SizeInBytes int64 `json:"size_in_bytes"` Fields map[string]struct { Size string `json:"size"` // e.g. "61.3kb" SizeInBytes int64 `json:"size_in_bytes"` - } `json:"fields"` -} - -type ClusterStatsIndicesSegments struct { - Count int64 `json:"count"` - Memory string `json:"memory"` // e.g. "61.3kb" - MemoryInBytes int64 `json:"memory_in_bytes"` - IndexWriterMemory string `json:"index_writer_memory"` // e.g. "61.3kb" - IndexWriterMemoryInBytes int64 `json:"index_writer_memory_in_bytes"` - IndexWriterMaxMemory string `json:"index_writer_max_memory"` // e.g. "61.3kb" - IndexWriterMaxMemoryInBytes int64 `json:"index_writer_max_memory_in_bytes"` - VersionMapMemory string `json:"version_map_memory"` // e.g. "61.3kb" - VersionMapMemoryInBytes int64 `json:"version_map_memory_in_bytes"` - FixedBitSet string `json:"fixed_bit_set"` // e.g. "61.3kb" - FixedBitSetInBytes int64 `json:"fixed_bit_set_memory_in_bytes"` -} - -type ClusterStatsIndicesPercolate struct { - Total int64 `json:"total"` - // TODO(oe) The JSON tag here is wrong as of ES 1.5.2 it seems - Time string `json:"get_time"` // e.g. "1s" - TimeInBytes int64 `json:"time_in_millis"` - Current int64 `json:"current"` - MemorySize string `json:"memory_size"` // e.g. "61.3kb" - MemorySizeInBytes int64 `json:"memory_sitze_in_bytes"` - Queries int64 `json:"queries"` + } `json:"fields,omitempty"` +} + +type ClusterStatsIndicesSegmentsFile struct { + Size string `json:"size"` // e.g. "61.3kb" + SizeInBytes int64 `json:"size_in_bytes"` + Description string `json:"description,omitempty"` } // --- @@ -248,6 +269,10 @@ type ClusterStatsNodes struct { JVM *ClusterStatsNodesJvmStats `json:"jvm"` FS *ClusterStatsNodesFsStats `json:"fs"` Plugins []*ClusterStatsNodesPlugin `json:"plugins"` + + NetworkTypes *ClusterStatsNodesNetworkTypes `json:"network_types"` + DiscoveryTypes *ClusterStatsNodesDiscoveryTypes `json:"discovery_types"` + PackagingTypes *ClusterStatsNodesPackagingTypes `json:"packaging_types"` } type ClusterStatsNodesCount struct { @@ -259,14 +284,29 @@ type ClusterStatsNodesCount struct { } type ClusterStatsNodesOsStats struct { - AvailableProcessors int `json:"available_processors"` - Mem *ClusterStatsNodesOsStatsMem `json:"mem"` - CPU []*ClusterStatsNodesOsStatsCPU `json:"cpu"` + AvailableProcessors int `json:"available_processors"` + AllocatedProcessors int `json:"allocated_processors"` + Names []struct { + Name string `json:"name"` + Value int `json:"count"` + } `json:"names"` + PrettyNames []struct { + PrettyName string `json:"pretty_name"` + Value int `json:"count"` + } `json:"pretty_names"` + Mem *ClusterStatsNodesOsStatsMem `json:"mem"` + // CPU []*ClusterStatsNodesOsStatsCPU `json:"cpu"` } type ClusterStatsNodesOsStatsMem struct { Total string `json:"total"` // e.g. "16gb" TotalInBytes int64 `json:"total_in_bytes"` + Free string `json:"free"` // e.g. "12gb" + FreeInBytes int64 `json:"free_in_bytes"` + Used string `json:"used"` // e.g. "4gb" + UsedInBytes int64 `json:"used_in_bytes"` + FreePercent int `json:"free_percent"` + UsedPercent int `json:"used_percent"` } type ClusterStatsNodesOsStatsCPU struct { @@ -305,11 +345,13 @@ type ClusterStatsNodesJvmStats struct { } type ClusterStatsNodesJvmStatsVersion struct { - Version string `json:"version"` // e.g. "1.8.0_45" - VMName string `json:"vm_name"` // e.g. "Java HotSpot(TM) 64-Bit Server VM" - VMVersion string `json:"vm_version"` // e.g. "25.45-b02" - VMVendor string `json:"vm_vendor"` // e.g. "Oracle Corporation" - Count int `json:"count"` + Version string `json:"version"` // e.g. "1.8.0_45" + VMName string `json:"vm_name"` // e.g. "Java HotSpot(TM) 64-Bit Server VM" + VMVersion string `json:"vm_version"` // e.g. "25.45-b02" + VMVendor string `json:"vm_vendor"` // e.g. "Oracle Corporation" + BundledJDK bool `json:"bundled_jdk"` + UsingBundledJDK bool `json:"using_bundled_jdk"` + Count int `json:"count"` } type ClusterStatsNodesJvmStatsMem struct { @@ -350,3 +392,18 @@ type ClusterStatsNodesPlugin struct { JVM bool `json:"jvm"` Site bool `json:"site"` } + +type ClusterStatsNodesNetworkTypes struct { + TransportTypes map[string]interface{} `json:"transport_types"` // e.g. "netty4": 1 + HTTPTypes map[string]interface{} `json:"http_types"` // e.g. "netty4": 1 +} + +type ClusterStatsNodesDiscoveryTypes interface{} + +type ClusterStatsNodesPackagingTypes []*ClusterStatsNodesPackagingType + +type ClusterStatsNodesPackagingType struct { + Flavor string `json:"flavor"` // e.g. "oss" + Type string `json:"type"` // e.g. "docker" + Count int `json:"count"` // e.g. 1 +} diff --git a/vendor/github.com/olivere/elastic/config/config.go b/vendor/github.com/olivere/elastic/v7/config/config.go similarity index 100% rename from vendor/github.com/olivere/elastic/config/config.go rename to vendor/github.com/olivere/elastic/v7/config/config.go diff --git a/vendor/github.com/olivere/elastic/config/doc.go b/vendor/github.com/olivere/elastic/v7/config/doc.go similarity index 100% rename from vendor/github.com/olivere/elastic/config/doc.go rename to vendor/github.com/olivere/elastic/v7/config/doc.go diff --git a/vendor/gopkg.in/olivere/elastic.v6/connection.go b/vendor/github.com/olivere/elastic/v7/connection.go similarity index 100% rename from vendor/gopkg.in/olivere/elastic.v6/connection.go rename to vendor/github.com/olivere/elastic/v7/connection.go diff --git a/vendor/gopkg.in/olivere/elastic.v6/count.go b/vendor/github.com/olivere/elastic/v7/count.go similarity index 79% rename from vendor/gopkg.in/olivere/elastic.v6/count.go rename to vendor/github.com/olivere/elastic/v7/count.go index 8dde488c2249ffaa2a7abe3cf6beb6d2715ff64d..d1c75be166fa54b51ecf8c706932a5a62100c22f 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/count.go +++ b/vendor/github.com/olivere/elastic/v7/count.go @@ -7,18 +7,25 @@ package elastic import ( "context" "fmt" + "net/http" "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // CountService is a convenient service for determining the // number of documents in an index. Use SearchService with // a SearchType of count for counting with queries etc. type CountService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + index []string typ []string allowNoIndices *bool @@ -47,6 +54,46 @@ func NewCountService(client *Client) *CountService { } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *CountService) Pretty(pretty bool) *CountService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *CountService) Human(human bool) *CountService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *CountService) ErrorTrace(errorTrace bool) *CountService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *CountService) FilterPath(filterPath ...string) *CountService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *CountService) Header(name string, value string) *CountService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *CountService) Headers(headers http.Header) *CountService { + s.headers = headers + return s +} + // Index sets the names of the indices to restrict the results. func (s *CountService) Index(index ...string) *CountService { if s.index == nil { @@ -57,6 +104,9 @@ func (s *CountService) Index(index ...string) *CountService { } // Type sets the types to use to restrict the results. +// +// Deprecated: Types are in the process of being removed. Instead of using a type, prefer to +// filter on a field on the document. func (s *CountService) Type(typ ...string) *CountService { if s.typ == nil { s.typ = make([]string, 0) @@ -166,12 +216,6 @@ func (s *CountService) TerminateAfter(terminateAfter int) *CountService { return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *CountService) Pretty(pretty bool) *CountService { - s.pretty = pretty - return s -} - // BodyJson specifies the query to restrict the results specified with the // Query DSL (optional). The interface{} will be serialized to a JSON document, // so use a map[string]interface{}. @@ -214,8 +258,17 @@ func (s *CountService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if s.allowNoIndices != nil { params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) @@ -298,10 +351,11 @@ func (s *CountService) Do(ctx context.Context) (int64, error) { // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "POST", - Path: path, - Params: params, - Body: body, + Method: "POST", + Path: path, + Params: params, + Body: body, + Headers: s.headers, }) if err != nil { return 0, err @@ -321,6 +375,7 @@ func (s *CountService) Do(ctx context.Context) (int64, error) { // CountResponse is the response of using the Count API. type CountResponse struct { - Count int64 `json:"count"` - Shards shardsInfo `json:"_shards,omitempty"` + Count int64 `json:"count"` + TerminatedEarly bool `json:"terminated_early,omitempty"` + Shards *ShardsInfo `json:"_shards,omitempty"` } diff --git a/vendor/gopkg.in/olivere/elastic.v6/decoder.go b/vendor/github.com/olivere/elastic/v7/decoder.go similarity index 68% rename from vendor/gopkg.in/olivere/elastic.v6/decoder.go rename to vendor/github.com/olivere/elastic/v7/decoder.go index 9cd2cf720db7a2c7e2c1009806337233f22f5a0c..9133ccd910c9ce2d867d5872e7d54436b45235aa 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/decoder.go +++ b/vendor/github.com/olivere/elastic/v7/decoder.go @@ -5,6 +5,7 @@ package elastic import ( + "bytes" "encoding/json" ) @@ -24,3 +25,14 @@ type DefaultDecoder struct{} func (u *DefaultDecoder) Decode(data []byte, v interface{}) error { return json.Unmarshal(data, v) } + +// NumberDecoder uses json.NewDecoder, with UseNumber() enabled, from +// the Go standard library to decode JSON data. +type NumberDecoder struct{} + +// Decode decodes with json.Unmarshal from the Go standard library. +func (u *NumberDecoder) Decode(data []byte, v interface{}) error { + dec := json.NewDecoder(bytes.NewReader(data)) + dec.UseNumber() + return dec.Decode(v) +} diff --git a/vendor/gopkg.in/olivere/elastic.v6/delete.go b/vendor/github.com/olivere/elastic/v7/delete.go similarity index 65% rename from vendor/gopkg.in/olivere/elastic.v6/delete.go rename to vendor/github.com/olivere/elastic/v7/delete.go index baac24e6d41d4c66a420bfbc3f27ec6621585b70..f6947017749f7bd3d7760e27d35ccde72f1611c9 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/delete.go +++ b/vendor/github.com/olivere/elastic/v7/delete.go @@ -9,18 +9,25 @@ import ( "fmt" "net/http" "net/url" + "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // DeleteService allows to delete a typed JSON document from a specified // index based on its id. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-delete.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/docs-delete.html // for details. type DeleteService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + id string index string typ string @@ -31,16 +38,61 @@ type DeleteService struct { waitForActiveShards string parent string refresh string + ifSeqNo *int64 + ifPrimaryTerm *int64 } // NewDeleteService creates a new DeleteService. func NewDeleteService(client *Client) *DeleteService { return &DeleteService{ client: client, + typ: "_doc", + } +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *DeleteService) Pretty(pretty bool) *DeleteService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *DeleteService) Human(human bool) *DeleteService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *DeleteService) ErrorTrace(errorTrace bool) *DeleteService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *DeleteService) FilterPath(filterPath ...string) *DeleteService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *DeleteService) Header(name string, value string) *DeleteService { + if s.headers == nil { + s.headers = http.Header{} } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *DeleteService) Headers(headers http.Header) *DeleteService { + s.headers = headers + return s } // Type is the type of the document. +// +// Deprecated: Types are in the process of being removed. func (s *DeleteService) Type(typ string) *DeleteService { s.typ = typ return s @@ -100,16 +152,24 @@ func (s *DeleteService) Parent(parent string) *DeleteService { // Refresh the index after performing the operation. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-refresh.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/docs-refresh.html // for details. func (s *DeleteService) Refresh(refresh string) *DeleteService { s.refresh = refresh return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *DeleteService) Pretty(pretty bool) *DeleteService { - s.pretty = pretty +// IfSeqNo indicates to only perform the delete operation if the last +// operation that has changed the document has the specified sequence number. +func (s *DeleteService) IfSeqNo(seqNo int64) *DeleteService { + s.ifSeqNo = &seqNo + return s +} + +// IfPrimaryTerm indicates to only perform the delete operation if the +// last operation that has changed the document has the specified primary term. +func (s *DeleteService) IfPrimaryTerm(primaryTerm int64) *DeleteService { + s.ifPrimaryTerm = &primaryTerm return s } @@ -127,8 +187,17 @@ func (s *DeleteService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if s.refresh != "" { params.Set("refresh", s.refresh) @@ -139,8 +208,8 @@ func (s *DeleteService) buildURL() (string, url.Values, error) { if s.timeout != "" { params.Set("timeout", s.timeout) } - if s.version != nil { - params.Set("version", fmt.Sprintf("%v", s.version)) + if v := s.version; v != nil { + params.Set("version", fmt.Sprint(v)) } if s.versionType != "" { params.Set("version_type", s.versionType) @@ -151,6 +220,12 @@ func (s *DeleteService) buildURL() (string, url.Values, error) { if s.parent != "" { params.Set("parent", s.parent) } + if v := s.ifSeqNo; v != nil { + params.Set("if_seq_no", fmt.Sprintf("%d", *v)) + } + if v := s.ifPrimaryTerm; v != nil { + params.Set("if_primary_term", fmt.Sprintf("%d", *v)) + } return path, params, nil } @@ -193,6 +268,7 @@ func (s *DeleteService) Do(ctx context.Context) (*DeleteResponse, error) { Path: path, Params: params, IgnoreErrors: []int{http.StatusNotFound}, + Headers: s.headers, }) if err != nil { return nil, err @@ -221,7 +297,7 @@ type DeleteResponse struct { Id string `json:"_id,omitempty"` Version int64 `json:"_version,omitempty"` Result string `json:"result,omitempty"` - Shards *shardsInfo `json:"_shards,omitempty"` + Shards *ShardsInfo `json:"_shards,omitempty"` SeqNo int64 `json:"_seq_no,omitempty"` PrimaryTerm int64 `json:"_primary_term,omitempty"` Status int `json:"status,omitempty"` diff --git a/vendor/gopkg.in/olivere/elastic.v6/delete_by_query.go b/vendor/github.com/olivere/elastic/v7/delete_by_query.go similarity index 87% rename from vendor/gopkg.in/olivere/elastic.v6/delete_by_query.go rename to vendor/github.com/olivere/elastic/v7/delete_by_query.go index c9e006c0949fd72e12d0ad876a65fde66e295217..4c98444f4e934cba19ec2a90c85192c44dcce706 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/delete_by_query.go +++ b/vendor/github.com/olivere/elastic/v7/delete_by_query.go @@ -7,16 +7,24 @@ package elastic import ( "context" "fmt" + "net/http" "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // DeleteByQueryService deletes documents that match a query. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-delete-by-query.html. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/docs-delete-by-query.html. type DeleteByQueryService struct { - client *Client + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + index []string typ []string query Query @@ -62,7 +70,6 @@ type DeleteByQueryService struct { version *bool waitForActiveShards string waitForCompletion *bool - pretty bool } // NewDeleteByQueryService creates a new DeleteByQueryService. @@ -75,6 +82,46 @@ func NewDeleteByQueryService(client *Client) *DeleteByQueryService { return builder } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *DeleteByQueryService) Pretty(pretty bool) *DeleteByQueryService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *DeleteByQueryService) Human(human bool) *DeleteByQueryService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *DeleteByQueryService) ErrorTrace(errorTrace bool) *DeleteByQueryService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *DeleteByQueryService) FilterPath(filterPath ...string) *DeleteByQueryService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *DeleteByQueryService) Header(name string, value string) *DeleteByQueryService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *DeleteByQueryService) Headers(headers http.Header) *DeleteByQueryService { + s.headers = headers + return s +} + // Index sets the indices on which to perform the delete operation. func (s *DeleteByQueryService) Index(index ...string) *DeleteByQueryService { s.index = append(s.index, index...) @@ -82,6 +129,9 @@ func (s *DeleteByQueryService) Index(index ...string) *DeleteByQueryService { } // Type limits the delete operation to the given types. +// +// Deprecated: Types are in the process of being removed. Instead of +// using a type, prefer to filter on a field of the document. func (s *DeleteByQueryService) Type(typ ...string) *DeleteByQueryService { s.typ = append(s.typ, typ...) return s @@ -242,7 +292,7 @@ func (s *DeleteByQueryService) Query(query Query) *DeleteByQueryService { // Refresh indicates whether the effected indexes should be refreshed. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-refresh.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/docs-refresh.html // for details. func (s *DeleteByQueryService) Refresh(refresh string) *DeleteByQueryService { s.refresh = refresh @@ -303,9 +353,9 @@ func (s *DeleteByQueryService) Size(size int) *DeleteByQueryService { } // Slices represents the number of slices (default: 1). -// It used to be a number, but can be set to "auto" as of 6.3. +// It used to be a number, but can be set to "auto" as of 6.7. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.3/docs-delete-by-query.html#docs-delete-by-query-automatic-slice +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/docs-delete-by-query.html#docs-delete-by-query-automatic-slice // for details. func (s *DeleteByQueryService) Slices(slices interface{}) *DeleteByQueryService { s.slices = slices @@ -413,12 +463,6 @@ func (s *DeleteByQueryService) WaitForCompletion(waitForCompletion bool) *Delete return s } -// Pretty indents the JSON output from Elasticsearch. -func (s *DeleteByQueryService) Pretty(pretty bool) *DeleteByQueryService { - s.pretty = pretty - return s -} - // Body specifies the body of the request. It overrides data being specified via SearchService. func (s *DeleteByQueryService) Body(body string) *DeleteByQueryService { s.body = body @@ -446,14 +490,26 @@ func (s *DeleteByQueryService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } if len(s.xSource) > 0 { params.Set("_source", strings.Join(s.xSource, ",")) } if len(s.xSourceExclude) > 0 { - params.Set("_source_exclude", strings.Join(s.xSourceExclude, ",")) + params.Set("_source_excludes", strings.Join(s.xSourceExclude, ",")) } if len(s.xSourceInclude) > 0 { - params.Set("_source_include", strings.Join(s.xSourceInclude, ",")) + params.Set("_source_includes", strings.Join(s.xSourceInclude, ",")) } if s.analyzer != "" { params.Set("analyzer", s.analyzer) @@ -569,9 +625,6 @@ func (s *DeleteByQueryService) buildURL() (string, url.Values, error) { if s.requestsPerSecond != nil { params.Set("requests_per_second", fmt.Sprintf("%v", *s.requestsPerSecond)) } - if s.pretty { - params.Set("pretty", fmt.Sprintf("%v", s.pretty)) - } return path, params, nil } @@ -616,10 +669,11 @@ func (s *DeleteByQueryService) Do(ctx context.Context) (*BulkIndexByScrollRespon // Get response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "POST", - Path: path, - Params: params, - Body: body, + Method: "POST", + Path: path, + Params: params, + Body: body, + Headers: s.headers, }) if err != nil { return nil, err @@ -691,16 +745,17 @@ func (s *DeleteByQueryService) DoAsync(ctx context.Context) (*StartTaskResult, e // BulkIndexByScrollResponse is the outcome of executing Do with // DeleteByQueryService and UpdateByQueryService. type BulkIndexByScrollResponse struct { - Took int64 `json:"took"` - SliceId *int64 `json:"slice_id,omitempty"` - TimedOut bool `json:"timed_out"` - Total int64 `json:"total"` - Updated int64 `json:"updated,omitempty"` - Created int64 `json:"created,omitempty"` - Deleted int64 `json:"deleted"` - Batches int64 `json:"batches"` - VersionConflicts int64 `json:"version_conflicts"` - Noops int64 `json:"noops"` + Header http.Header `json:"-"` + Took int64 `json:"took"` + SliceId *int64 `json:"slice_id,omitempty"` + TimedOut bool `json:"timed_out"` + Total int64 `json:"total"` + Updated int64 `json:"updated,omitempty"` + Created int64 `json:"created,omitempty"` + Deleted int64 `json:"deleted"` + Batches int64 `json:"batches"` + VersionConflicts int64 `json:"version_conflicts"` + Noops int64 `json:"noops"` Retries struct { Bulk int64 `json:"bulk"` Search int64 `json:"search"` diff --git a/vendor/gopkg.in/olivere/elastic.v6/doc.go b/vendor/github.com/olivere/elastic/v7/doc.go similarity index 100% rename from vendor/gopkg.in/olivere/elastic.v6/doc.go rename to vendor/github.com/olivere/elastic/v7/doc.go diff --git a/vendor/github.com/olivere/elastic/v7/docker-compose.yml b/vendor/github.com/olivere/elastic/v7/docker-compose.yml new file mode 100644 index 0000000000000000000000000000000000000000..2fd0d98f6e5103d38ee1168a843652b79ff3f46b --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/docker-compose.yml @@ -0,0 +1,61 @@ +version: '3' + +services: + elasticsearch: + image: docker.elastic.co/elasticsearch/elasticsearch-oss:7.6.2 + hostname: elasticsearch + environment: + - cluster.name=elasticsearch + - bootstrap.memory_lock=true + - discovery.type=single-node + # - http.publish_host=localhost + # - http.host=0.0.0.0 + # - transport.host=127.0.0.1 + # - network.host=_local_ + - network.publish_host=127.0.0.1 + - logger.org.elasticsearch=warn + - "ES_JAVA_OPTS=-Xms1g -Xmx1g" + ulimits: + nproc: 65536 + nofile: + soft: 65536 + hard: 65536 + memlock: + soft: -1 + hard: -1 + # volumes: + # - ./data/elasticsearch:/usr/share/elasticsearch/data + ports: + - 9200:9200 + platinum: + image: docker.elastic.co/elasticsearch/elasticsearch:7.6.2 + hostname: elasticsearch-platinum + environment: + - cluster.name=platinum + - bootstrap.memory_lock=true + - discovery.type=single-node + - xpack.ilm.enabled=true + - xpack.license.self_generated.type=trial + - xpack.security.enabled=true + - xpack.watcher.enabled=true + # - http.publish_host=localhost + # - http.host=0.0.0.0 + # - transport.host=127.0.0.1 + # - network.host=_local_ + - http.port=9210 + - network.publish_host=127.0.0.1 + - logger.org.elasticsearch=warn + - "ES_JAVA_OPTS=-Xms1g -Xmx1g" + - ELASTIC_PASSWORD=elastic + ulimits: + nproc: 65536 + nofile: + soft: 65536 + hard: 65536 + memlock: + soft: -1 + hard: -1 + # volumes: + # - ./data/elasticsearch-platinum:/usr/share/elasticsearch/data + ports: + - 9210:9210 diff --git a/vendor/github.com/olivere/elastic/v7/docvalue_field.go b/vendor/github.com/olivere/elastic/v7/docvalue_field.go new file mode 100644 index 0000000000000000000000000000000000000000..e73cd24b159e9a1f631b4d23beb47693f0dac3bb --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/docvalue_field.go @@ -0,0 +1,42 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// DocvalueField represents a docvalue field, its name and +// its format (optional). +type DocvalueField struct { + Field string + Format string +} + +// Source serializes the DocvalueField into JSON. +func (d DocvalueField) Source() (interface{}, error) { + if d.Format == "" { + return d.Field, nil + } + return map[string]interface{}{ + "field": d.Field, + "format": d.Format, + }, nil +} + +// DocvalueFields is a slice of DocvalueField instances. +type DocvalueFields []DocvalueField + +// Source serializes the DocvalueFields into JSON. +func (d DocvalueFields) Source() (interface{}, error) { + if d == nil { + return nil, nil + } + v := make([]interface{}, 0) + for _, f := range d { + src, err := f.Source() + if err != nil { + return nil, err + } + v = append(v, src) + } + return v, nil +} diff --git a/vendor/gopkg.in/olivere/elastic.v6/errors.go b/vendor/github.com/olivere/elastic/v7/errors.go similarity index 75% rename from vendor/gopkg.in/olivere/elastic.v6/errors.go rename to vendor/github.com/olivere/elastic/v7/errors.go index 2aeff6b4bd21c3bb7a1881890162d8ede44df827..0b51c5e8d49b6e0ca21f5f18d5a8f4c32a5e807a 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/errors.go +++ b/vendor/github.com/olivere/elastic/v7/errors.go @@ -82,6 +82,21 @@ type ErrorDetails struct { CausedBy map[string]interface{} `json:"caused_by,omitempty"` RootCause []*ErrorDetails `json:"root_cause,omitempty"` FailedShards []map[string]interface{} `json:"failed_shards,omitempty"` + + // ScriptException adds the information in the following block. + + ScriptStack []string `json:"script_stack,omitempty"` // from ScriptException + Script string `json:"script,omitempty"` // from ScriptException + Lang string `json:"lang,omitempty"` // from ScriptException + Position *ScriptErrorPosition `json:"position,omitempty"` // from ScriptException (7.7+) +} + +// ScriptErrorPosition specifies the position of the error +// in a script. It is used in ErrorDetails for scripting errors. +type ScriptErrorPosition struct { + Offset int `json:"offset"` + Start int `json:"start"` + End int `json:"end"` } // Error returns a string representation of the error. @@ -137,6 +152,14 @@ func IsConflict(err interface{}) bool { return IsStatusCode(err, http.StatusConflict) } +// IsForbidden returns true if the given error indicates that Elasticsearch +// returned HTTP status 403. This happens e.g. due to a missing license. +// The err parameter can be of type *elastic.Error, elastic.Error, +// *http.Response or int (indicating the HTTP status code). +func IsForbidden(err interface{}) bool { + return IsStatusCode(err, http.StatusForbidden) +} + // IsStatusCode returns true if the given error indicates that the Elasticsearch // operation returned the specified HTTP status code. The err parameter can be of // type *http.Response, *Error, Error, or int (indicating the HTTP status code). @@ -156,17 +179,21 @@ func IsStatusCode(err interface{}, code int) bool { // -- General errors -- -// shardsInfo represents information from a shard. -type shardsInfo struct { - Total int `json:"total"` - Successful int `json:"successful"` - Failed int `json:"failed"` +// ShardsInfo represents information from a shard. +type ShardsInfo struct { + Total int `json:"total"` + Successful int `json:"successful"` + Failed int `json:"failed"` + Failures []*ShardFailure `json:"failures,omitempty"` + Skipped int `json:"skipped,omitempty"` } -// shardOperationFailure represents a shard failure. -type shardOperationFailure struct { - Shard int `json:"shard"` - Index string `json:"index"` - Status string `json:"status"` - // "reason" +// ShardFailure represents details about a failure. +type ShardFailure struct { + Index string `json:"_index,omitempty"` + Shard int `json:"_shard,omitempty"` + Node string `json:"_node,omitempty"` + Reason map[string]interface{} `json:"reason,omitempty"` + Status string `json:"status,omitempty"` + Primary bool `json:"primary,omitempty"` } diff --git a/vendor/gopkg.in/olivere/elastic.v6/exists.go b/vendor/github.com/olivere/elastic/v7/exists.go similarity index 65% rename from vendor/gopkg.in/olivere/elastic.v6/exists.go rename to vendor/github.com/olivere/elastic/v7/exists.go index 9031bdd23037de1839dd928d731cfcc9187d6022..dbc353a7b46e0b13dd9002fbcbe17340bc56bf7f 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/exists.go +++ b/vendor/github.com/olivere/elastic/v7/exists.go @@ -9,17 +9,24 @@ import ( "fmt" "net/http" "net/url" + "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // ExistsService checks for the existence of a document using HEAD. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-get.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/docs-get.html // for details. type ExistsService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + id string index string typ string @@ -34,9 +41,50 @@ type ExistsService struct { func NewExistsService(client *Client) *ExistsService { return &ExistsService{ client: client, + typ: "_doc", } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *ExistsService) Pretty(pretty bool) *ExistsService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *ExistsService) Human(human bool) *ExistsService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *ExistsService) ErrorTrace(errorTrace bool) *ExistsService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *ExistsService) FilterPath(filterPath ...string) *ExistsService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *ExistsService) Header(name string, value string) *ExistsService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *ExistsService) Headers(headers http.Header) *ExistsService { + s.headers = headers + return s +} + // Id is the document ID. func (s *ExistsService) Id(id string) *ExistsService { s.id = id @@ -70,7 +118,7 @@ func (s *ExistsService) Realtime(realtime bool) *ExistsService { // Refresh the shard containing the document before performing the operation. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-refresh.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/docs-refresh.html // for details. func (s *ExistsService) Refresh(refresh string) *ExistsService { s.refresh = refresh @@ -89,12 +137,6 @@ func (s *ExistsService) Parent(parent string) *ExistsService { return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *ExistsService) Pretty(pretty bool) *ExistsService { - s.pretty = pretty - return s -} - // buildURL builds the URL for the operation. func (s *ExistsService) buildURL() (string, url.Values, error) { // Build URL @@ -109,11 +151,20 @@ func (s *ExistsService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if s.realtime != nil { - params.Set("realtime", fmt.Sprintf("%v", *s.realtime)) + params.Set("realtime", fmt.Sprint(*s.realtime)) } if s.refresh != "" { params.Set("refresh", s.refresh) @@ -167,6 +218,7 @@ func (s *ExistsService) Do(ctx context.Context) (bool, error) { Path: path, Params: params, IgnoreErrors: []int{404}, + Headers: s.headers, }) if err != nil { return false, err diff --git a/vendor/gopkg.in/olivere/elastic.v6/explain.go b/vendor/github.com/olivere/elastic/v7/explain.go similarity index 76% rename from vendor/gopkg.in/olivere/elastic.v6/explain.go rename to vendor/github.com/olivere/elastic/v7/explain.go index 52b8d379d9e914f5b934f62f3a79aa2bb8a1d683..dc8795eb43c9b89b696d912df1ad690bc3fe975f 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/explain.go +++ b/vendor/github.com/olivere/elastic/v7/explain.go @@ -7,18 +7,25 @@ package elastic import ( "context" "fmt" + "net/http" "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // ExplainService computes a score explanation for a query and // a specific document. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-explain.html. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-explain.html. type ExplainService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + id string index string typ string @@ -45,6 +52,7 @@ type ExplainService struct { func NewExplainService(client *Client) *ExplainService { return &ExplainService{ client: client, + typ: "_doc", xSource: make([]string, 0), xSourceExclude: make([]string, 0), fields: make([]string, 0), @@ -52,6 +60,46 @@ func NewExplainService(client *Client) *ExplainService { } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *ExplainService) Pretty(pretty bool) *ExplainService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *ExplainService) Human(human bool) *ExplainService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *ExplainService) ErrorTrace(errorTrace bool) *ExplainService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *ExplainService) FilterPath(filterPath ...string) *ExplainService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *ExplainService) Header(name string, value string) *ExplainService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *ExplainService) Headers(headers http.Header) *ExplainService { + s.headers = headers + return s +} + // Id is the document ID. func (s *ExplainService) Id(id string) *ExplainService { s.id = id @@ -65,6 +113,8 @@ func (s *ExplainService) Index(index string) *ExplainService { } // Type is the type of the document. +// +// Deprecated: Types are in the process of being removed. func (s *ExplainService) Type(typ string) *ExplainService { s.typ = typ return s @@ -162,12 +212,6 @@ func (s *ExplainService) XSource(xSource ...string) *ExplainService { return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *ExplainService) Pretty(pretty bool) *ExplainService { - s.pretty = pretty - return s -} - // Query sets a query definition using the Query DSL. func (s *ExplainService) Query(query Query) *ExplainService { src, err := query.Source() @@ -196,19 +240,38 @@ func (s *ExplainService) BodyString(body string) *ExplainService { // buildURL builds the URL for the operation. func (s *ExplainService) buildURL() (string, url.Values, error) { // Build URL - path, err := uritemplates.Expand("/{index}/{type}/{id}/_explain", map[string]string{ - "id": s.id, - "index": s.index, - "type": s.typ, - }) + var path string + var err error + + if s.typ == "" || s.typ == "_doc" { + path, err = uritemplates.Expand("/{index}/_explain/{id}", map[string]string{ + "id": s.id, + "index": s.index, + }) + } else { + path, err = uritemplates.Expand("/{index}/{type}/{id}/_explain", map[string]string{ + "id": s.id, + "index": s.index, + "type": s.typ, + }) + } if err != nil { return "", url.Values{}, err } // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if len(s.xSource) > 0 { params.Set("_source", strings.Join(s.xSource, ",")) @@ -226,7 +289,7 @@ func (s *ExplainService) buildURL() (string, url.Values, error) { params.Set("source", s.source) } if len(s.xSourceExclude) > 0 { - params.Set("_source_exclude", strings.Join(s.xSourceExclude, ",")) + params.Set("_source_excludes", strings.Join(s.xSourceExclude, ",")) } if s.lenient != nil { params.Set("lenient", fmt.Sprintf("%v", *s.lenient)) @@ -244,7 +307,7 @@ func (s *ExplainService) buildURL() (string, url.Values, error) { params.Set("lowercase_expanded_terms", fmt.Sprintf("%v", *s.lowercaseExpandedTerms)) } if len(s.xSourceInclude) > 0 { - params.Set("_source_include", strings.Join(s.xSourceInclude, ",")) + params.Set("_source_includes", strings.Join(s.xSourceInclude, ",")) } if s.analyzeWildcard != nil { params.Set("analyze_wildcard", fmt.Sprintf("%v", *s.analyzeWildcard)) @@ -299,10 +362,11 @@ func (s *ExplainService) Do(ctx context.Context) (*ExplainResponse, error) { // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, - Body: body, + Method: "GET", + Path: path, + Params: params, + Body: body, + Headers: s.headers, }) if err != nil { return nil, err diff --git a/vendor/gopkg.in/olivere/elastic.v6/fetch_source_context.go b/vendor/github.com/olivere/elastic/v7/fetch_source_context.go similarity index 90% rename from vendor/gopkg.in/olivere/elastic.v6/fetch_source_context.go rename to vendor/github.com/olivere/elastic/v7/fetch_source_context.go index 91488bae4d400b446c80b9cfdf5551f8c1358db0..7a4a76941c12e232b9494cab5c1612438ec347e0 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/fetch_source_context.go +++ b/vendor/github.com/olivere/elastic/v7/fetch_source_context.go @@ -14,7 +14,7 @@ import ( // with various endpoints, e.g. when searching for documents, retrieving // individual documents, or even updating documents. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-request-source-filtering.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-request-source-filtering.html // for details. type FetchSourceContext struct { fetchSource bool @@ -78,10 +78,10 @@ func (fsc *FetchSourceContext) Query() url.Values { params := url.Values{} if fsc.fetchSource { if len(fsc.includes) > 0 { - params.Add("_source_include", strings.Join(fsc.includes, ",")) + params.Add("_source_includes", strings.Join(fsc.includes, ",")) } if len(fsc.excludes) > 0 { - params.Add("_source_exclude", strings.Join(fsc.excludes, ",")) + params.Add("_source_excludes", strings.Join(fsc.excludes, ",")) } } else { params.Add("_source", "false") diff --git a/vendor/gopkg.in/olivere/elastic.v6/field_caps.go b/vendor/github.com/olivere/elastic/v7/field_caps.go similarity index 70% rename from vendor/gopkg.in/olivere/elastic.v6/field_caps.go rename to vendor/github.com/olivere/elastic/v7/field_caps.go index a4b604965eadc083ab770b56cfaccb8044675d9e..b84a1f13f0bf9477d10a61ad524cb1d5fba06cc9 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/field_caps.go +++ b/vendor/github.com/olivere/elastic/v7/field_caps.go @@ -11,16 +11,22 @@ import ( "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // FieldCapsService allows retrieving the capabilities of fields among multiple indices. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-field-caps.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-field-caps.html // for details type FieldCapsService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + index []string allowNoIndices *bool expandWildcards string @@ -37,6 +43,46 @@ func NewFieldCapsService(client *Client) *FieldCapsService { } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *FieldCapsService) Pretty(pretty bool) *FieldCapsService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *FieldCapsService) Human(human bool) *FieldCapsService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *FieldCapsService) ErrorTrace(errorTrace bool) *FieldCapsService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *FieldCapsService) FilterPath(filterPath ...string) *FieldCapsService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *FieldCapsService) Header(name string, value string) *FieldCapsService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *FieldCapsService) Headers(headers http.Header) *FieldCapsService { + s.headers = headers + return s +} + // Index is a list of index names; use `_all` or empty string to perform // the operation on all indices. func (s *FieldCapsService) Index(index ...string) *FieldCapsService { @@ -71,12 +117,6 @@ func (s *FieldCapsService) IgnoreUnavailable(ignoreUnavailable bool) *FieldCapsS return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *FieldCapsService) Pretty(pretty bool) *FieldCapsService { - s.pretty = pretty - return s -} - // BodyJson is documented as: Field json objects containing the name and optionally a range to filter out indices result, that have results outside the defined bounds. func (s *FieldCapsService) BodyJson(body interface{}) *FieldCapsService { s.bodyJson = body @@ -107,8 +147,17 @@ func (s *FieldCapsService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if s.allowNoIndices != nil { params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) @@ -158,6 +207,7 @@ func (s *FieldCapsService) Do(ctx context.Context) (*FieldCapsResponse, error) { Params: params, Body: body, IgnoreErrors: []int{http.StatusNotFound}, + Headers: s.headers, }) if err != nil { return nil, err @@ -188,9 +238,14 @@ type FieldCapsRequest struct { // FieldCapsResponse contains field capabilities. type FieldCapsResponse struct { - Fields map[string]FieldCaps `json:"fields,omitempty"` + Indices []string `json:"indices,omitempty"` // list of index names + Fields map[string]FieldCapsType `json:"fields,omitempty"` // Name -> type -> caps } +// FieldCapsType represents a mapping from type (e.g. keyword) +// to capabilities. +type FieldCapsType map[string]FieldCaps // type -> caps + // FieldCaps contains capabilities of an individual field. type FieldCaps struct { Type string `json:"type"` diff --git a/vendor/gopkg.in/olivere/elastic.v6/geo_point.go b/vendor/github.com/olivere/elastic/v7/geo_point.go similarity index 100% rename from vendor/gopkg.in/olivere/elastic.v6/geo_point.go rename to vendor/github.com/olivere/elastic/v7/geo_point.go diff --git a/vendor/gopkg.in/olivere/elastic.v6/get.go b/vendor/github.com/olivere/elastic/v7/get.go similarity index 66% rename from vendor/gopkg.in/olivere/elastic.v6/get.go rename to vendor/github.com/olivere/elastic/v7/get.go index 8c264557a248d33a58fb81c692e1d2813e71829a..769389b53f0d931059962133f0ed138045ee3277 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/get.go +++ b/vendor/github.com/olivere/elastic/v7/get.go @@ -8,20 +8,27 @@ import ( "context" "encoding/json" "fmt" + "net/http" "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // GetService allows to get a typed JSON document from the index based // on its id. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-get.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/docs-get.html // for details. type GetService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + index string typ string id string @@ -41,8 +48,48 @@ type GetService struct { func NewGetService(client *Client) *GetService { return &GetService{ client: client, - typ: "_all", + typ: "_doc", + } +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *GetService) Pretty(pretty bool) *GetService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *GetService) Human(human bool) *GetService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *GetService) ErrorTrace(errorTrace bool) *GetService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *GetService) FilterPath(filterPath ...string) *GetService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *GetService) Header(name string, value string) *GetService { + if s.headers == nil { + s.headers = http.Header{} } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *GetService) Headers(headers http.Header) *GetService { + s.headers = headers + return s } // Index is the name of the index. @@ -51,8 +98,9 @@ func (s *GetService) Index(index string) *GetService { return s } -// Type is the type of the document (use `_all` to fetch the first document -// matching the ID across all types). +// Type is the type of the document +// +// Deprecated: Types are in the process of being removed. func (s *GetService) Type(typ string) *GetService { s.typ = typ return s @@ -104,7 +152,7 @@ func (s *GetService) FetchSourceContext(fetchSourceContext *FetchSourceContext) // Refresh the shard containing the document before performing the operation. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-refresh.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/docs-refresh.html // for details. func (s *GetService) Refresh(refresh string) *GetService { s.refresh = refresh @@ -136,12 +184,6 @@ func (s *GetService) IgnoreErrorsOnGeneratedFields(ignore bool) *GetService { return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *GetService) Pretty(pretty bool) *GetService { - s.pretty = pretty - return s -} - // Validate checks if the operation is valid. func (s *GetService) Validate() error { var invalid []string @@ -174,8 +216,17 @@ func (s *GetService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if s.routing != "" { params.Set("routing", s.routing) @@ -227,9 +278,10 @@ func (s *GetService) Do(ctx context.Context) (*GetResult, error) { // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, + Method: "GET", + Path: path, + Params: params, + Headers: s.headers, }) if err != nil { return nil, err @@ -247,16 +299,18 @@ func (s *GetService) Do(ctx context.Context) (*GetResult, error) { // GetResult is the outcome of GetService.Do. type GetResult struct { - Index string `json:"_index"` // index meta field - Type string `json:"_type"` // type meta field - Id string `json:"_id"` // id meta field - Uid string `json:"_uid"` // uid meta field (see MapperService.java for all meta fields) - Routing string `json:"_routing"` // routing meta field - Parent string `json:"_parent"` // parent meta field - Version *int64 `json:"_version"` // version number, when Version is set to true in SearchService - Source *json.RawMessage `json:"_source,omitempty"` - Found bool `json:"found,omitempty"` - Fields map[string]interface{} `json:"fields,omitempty"` + Index string `json:"_index"` // index meta field + Type string `json:"_type"` // type meta field + Id string `json:"_id"` // id meta field + Uid string `json:"_uid"` // uid meta field (see MapperService.java for all meta fields) + Routing string `json:"_routing"` // routing meta field + Parent string `json:"_parent"` // parent meta field + Version *int64 `json:"_version"` // version number, when Version is set to true in SearchService + SeqNo *int64 `json:"_seq_no"` + PrimaryTerm *int64 `json:"_primary_term"` + Source json.RawMessage `json:"_source,omitempty"` + Found bool `json:"found,omitempty"` + Fields map[string]interface{} `json:"fields,omitempty"` //Error string `json:"error,omitempty"` // used only in MultiGet // TODO double-check that MultiGet now returns details error information Error *ErrorDetails `json:"error,omitempty"` // only used in MultiGet diff --git a/vendor/github.com/olivere/elastic/v7/go.mod b/vendor/github.com/olivere/elastic/v7/go.mod new file mode 100644 index 0000000000000000000000000000000000000000..61cca83109c10235a6323f2d3ad756f94b705d8a --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/go.mod @@ -0,0 +1,14 @@ +module github.com/olivere/elastic/v7 + +go 1.14 + +require ( + github.com/aws/aws-sdk-go v1.30.7 + github.com/fortytw2/leaktest v1.3.0 + github.com/google/go-cmp v0.4.0 + github.com/mailru/easyjson v0.7.1 + github.com/opentracing/opentracing-go v1.1.0 + github.com/pkg/errors v0.9.1 + github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9 + go.opencensus.io v0.22.3 +) diff --git a/vendor/gopkg.in/olivere/elastic.v6/highlight.go b/vendor/github.com/olivere/elastic/v7/highlight.go similarity index 98% rename from vendor/gopkg.in/olivere/elastic.v6/highlight.go rename to vendor/github.com/olivere/elastic/v7/highlight.go index ed024e45b91030ccf7612715f20705f44c3956f9..49e1b4d329061bf21ca21e18b97d98eacf867162 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/highlight.go +++ b/vendor/github.com/olivere/elastic/v7/highlight.go @@ -6,7 +6,7 @@ package elastic // Highlight allows highlighting search results on one or more fields. // For details, see: -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-request-highlighting.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-request-highlighting.html type Highlight struct { fields []*HighlighterField tagsSchema *string @@ -125,7 +125,7 @@ func (hl *Highlight) Fragmenter(fragmenter string) *Highlight { return hl } -func (hl *Highlight) HighlighQuery(highlightQuery Query) *Highlight { +func (hl *Highlight) HighlightQuery(highlightQuery Query) *Highlight { hl.highlightQuery = highlightQuery return hl } @@ -238,7 +238,7 @@ func (hl *Highlight) Source() (interface{}, error) { source["fields"] = fields } else { // Use a map for the fields - fields := make(map[string]interface{}, 0) + fields := make(map[string]interface{}) for _, field := range hl.fields { src, err := field.Source() if err != nil { diff --git a/vendor/gopkg.in/olivere/elastic.v6/index.go b/vendor/github.com/olivere/elastic/v7/index.go similarity index 70% rename from vendor/gopkg.in/olivere/elastic.v6/index.go rename to vendor/github.com/olivere/elastic/v7/index.go index 807dd27c197e138aed227af05a6523a4275010cc..2e3d66f231f5f546243a4b363b7cbb4bb683b1a3 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/index.go +++ b/vendor/github.com/olivere/elastic/v7/index.go @@ -7,19 +7,27 @@ package elastic import ( "context" "fmt" + "net/http" "net/url" + "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // IndexService adds or updates a typed JSON document in a specified index, // making it searchable. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-index_.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/docs-index_.html // for details. type IndexService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + id string index string typ string @@ -34,6 +42,8 @@ type IndexService struct { refresh string waitForActiveShards string pipeline string + ifSeqNo *int64 + ifPrimaryTerm *int64 bodyJson interface{} bodyString string } @@ -42,7 +52,48 @@ type IndexService struct { func NewIndexService(client *Client) *IndexService { return &IndexService{ client: client, + typ: "_doc", + } +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *IndexService) Pretty(pretty bool) *IndexService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *IndexService) Human(human bool) *IndexService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *IndexService) ErrorTrace(errorTrace bool) *IndexService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *IndexService) FilterPath(filterPath ...string) *IndexService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *IndexService) Header(name string, value string) *IndexService { + if s.headers == nil { + s.headers = http.Header{} } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *IndexService) Headers(headers http.Header) *IndexService { + s.headers = headers + return s } // Id is the document ID. @@ -58,6 +109,8 @@ func (s *IndexService) Index(index string) *IndexService { } // Type is the type of the document. +// +// Deprecated: Types are in the process of being removed. func (s *IndexService) Type(typ string) *IndexService { s.typ = typ return s @@ -81,7 +134,7 @@ func (s *IndexService) Pipeline(pipeline string) *IndexService { // Refresh the index after performing the operation. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-refresh.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/docs-refresh.html // for details. func (s *IndexService) Refresh(refresh string) *IndexService { s.refresh = refresh @@ -142,9 +195,17 @@ func (s *IndexService) VersionType(versionType string) *IndexService { return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *IndexService) Pretty(pretty bool) *IndexService { - s.pretty = pretty +// IfSeqNo indicates to only perform the index operation if the last +// operation that has changed the document has the specified sequence number. +func (s *IndexService) IfSeqNo(seqNo int64) *IndexService { + s.ifSeqNo = &seqNo + return s +} + +// IfPrimaryTerm indicates to only perform the index operation if the +// last operation that has changed the document has the specified primary term. +func (s *IndexService) IfPrimaryTerm(primaryTerm int64) *IndexService { + s.ifPrimaryTerm = &primaryTerm return s } @@ -175,7 +236,7 @@ func (s *IndexService) buildURL() (string, string, url.Values, error) { }) } else { // Automatic ID generation - // See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-index_.html#index-creation + // See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/docs-index_.html#index-creation method = "POST" path, err = uritemplates.Expand("/{index}/{type}/", map[string]string{ "index": s.index, @@ -188,8 +249,17 @@ func (s *IndexService) buildURL() (string, string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if s.waitForActiveShards != "" { params.Set("wait_for_active_shards", s.waitForActiveShards) @@ -224,6 +294,12 @@ func (s *IndexService) buildURL() (string, string, url.Values, error) { if s.versionType != "" { params.Set("version_type", s.versionType) } + if v := s.ifSeqNo; v != nil { + params.Set("if_seq_no", fmt.Sprintf("%d", *v)) + } + if v := s.ifPrimaryTerm; v != nil { + params.Set("if_primary_term", fmt.Sprintf("%d", *v)) + } return method, path, params, nil } @@ -268,10 +344,11 @@ func (s *IndexService) Do(ctx context.Context) (*IndexResponse, error) { // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: method, - Path: path, - Params: params, - Body: body, + Method: method, + Path: path, + Params: params, + Body: body, + Headers: s.headers, }) if err != nil { return nil, err @@ -292,7 +369,7 @@ type IndexResponse struct { Id string `json:"_id,omitempty"` Version int64 `json:"_version,omitempty"` Result string `json:"result,omitempty"` - Shards *shardsInfo `json:"_shards,omitempty"` + Shards *ShardsInfo `json:"_shards,omitempty"` SeqNo int64 `json:"_seq_no,omitempty"` PrimaryTerm int64 `json:"_primary_term,omitempty"` Status int `json:"status,omitempty"` diff --git a/vendor/gopkg.in/olivere/elastic.v6/indices_analyze.go b/vendor/github.com/olivere/elastic/v7/indices_analyze.go similarity index 63% rename from vendor/gopkg.in/olivere/elastic.v6/indices_analyze.go rename to vendor/github.com/olivere/elastic/v7/indices_analyze.go index e57c38184cc9fafd5ca517f3ef004245f1151f6f..3f0c282cfa6b57117eb155cb674cfa428a0cdfe1 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/indices_analyze.go +++ b/vendor/github.com/olivere/elastic/v7/indices_analyze.go @@ -7,19 +7,27 @@ package elastic import ( "context" "fmt" + "net/http" "net/url" + "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // IndicesAnalyzeService performs the analysis process on a text and returns // the tokens breakdown of the text. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-analyze.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/indices-analyze.html // for detail. type IndicesAnalyzeService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + index string request *IndicesAnalyzeRequest format string @@ -36,6 +44,46 @@ func NewIndicesAnalyzeService(client *Client) *IndicesAnalyzeService { } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *IndicesAnalyzeService) Pretty(pretty bool) *IndicesAnalyzeService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *IndicesAnalyzeService) Human(human bool) *IndicesAnalyzeService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *IndicesAnalyzeService) ErrorTrace(errorTrace bool) *IndicesAnalyzeService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *IndicesAnalyzeService) FilterPath(filterPath ...string) *IndicesAnalyzeService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *IndicesAnalyzeService) Header(name string, value string) *IndicesAnalyzeService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *IndicesAnalyzeService) Headers(headers http.Header) *IndicesAnalyzeService { + s.headers = headers + return s +} + // Index is the name of the index to scope the operation. func (s *IndicesAnalyzeService) Index(index string) *IndicesAnalyzeService { s.index = index @@ -114,12 +162,6 @@ func (s *IndicesAnalyzeService) Tokenizer(tokenizer string) *IndicesAnalyzeServi return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *IndicesAnalyzeService) Pretty(pretty bool) *IndicesAnalyzeService { - s.pretty = pretty - return s -} - // BodyJson is the text on which the analysis should be performed. func (s *IndicesAnalyzeService) BodyJson(body interface{}) *IndicesAnalyzeService { s.bodyJson = body @@ -151,8 +193,17 @@ func (s *IndicesAnalyzeService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if s.format != "" { params.Set("format", s.format) @@ -185,15 +236,16 @@ func (s *IndicesAnalyzeService) Do(ctx context.Context) (*IndicesAnalyzeResponse } else { // Request parameters are deprecated in 5.1.1, and we must use a JSON // structure in the body to pass the parameters. - // See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-analyze.html + // See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/indices-analyze.html body = s.request } res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "POST", - Path: path, - Params: params, - Body: body, + Method: "POST", + Path: path, + Params: params, + Body: body, + Headers: s.headers, }) if err != nil { return nil, err @@ -233,52 +285,36 @@ type IndicesAnalyzeRequest struct { } type IndicesAnalyzeResponse struct { - Tokens []IndicesAnalyzeResponseToken `json:"tokens"` // json part for normal message - Detail IndicesAnalyzeResponseDetail `json:"detail"` // json part for verbose message of explain request + Tokens []AnalyzeToken `json:"tokens"` // json part for normal message + Detail IndicesAnalyzeResponseDetail `json:"detail"` // json part for verbose message of explain request +} + +type AnalyzeTokenList struct { + Name string `json:"name"` + Tokens []AnalyzeToken `json:"tokens,omitempty"` +} + +type AnalyzeToken struct { + Token string `json:"token"` + Type string `json:"type"` // e.g. "<ALPHANUM>" + StartOffset int `json:"start_offset"` + EndOffset int `json:"end_offset"` + Bytes string `json:"bytes"` // e.g. "[67 75 79]" + Position int `json:"position"` + PositionLength int `json:"positionLength"` // seems to be wrong in 7.2+ (no snake_case), see https://github.com/elastic/elasticsearch/blob/7.2/server/src/main/java/org/elasticsearch/action/admin/indices/analyze/AnalyzeResponse.java + TermFrequency int `json:"termFrequency"` + Keyword bool `json:"keyword"` } -type IndicesAnalyzeResponseToken struct { - Token string `json:"token"` - StartOffset int `json:"start_offset"` - EndOffset int `json:"end_offset"` - Type string `json:"type"` - Position int `json:"position"` +type CharFilteredText struct { + Name string `json:"name"` + FilteredText []string `json:"filtered_text"` } type IndicesAnalyzeResponseDetail struct { - CustomAnalyzer bool `json:"custom_analyzer"` - Charfilters []interface{} `json:"charfilters"` - Analyzer struct { - Name string `json:"name"` - Tokens []struct { - Token string `json:"token"` - StartOffset int `json:"start_offset"` - EndOffset int `json:"end_offset"` - Type string `json:"type"` - Position int `json:"position"` - Bytes string `json:"bytes"` - PositionLength int `json:"positionLength"` - } `json:"tokens"` - } `json:"analyzer"` - Tokenizer struct { - Name string `json:"name"` - Tokens []struct { - Token string `json:"token"` - StartOffset int `json:"start_offset"` - EndOffset int `json:"end_offset"` - Type string `json:"type"` - Position int `json:"position"` - } `json:"tokens"` - } `json:"tokenizer"` - Tokenfilters []struct { - Name string `json:"name"` - Tokens []struct { - Token string `json:"token"` - StartOffset int `json:"start_offset"` - EndOffset int `json:"end_offset"` - Type string `json:"type"` - Position int `json:"position"` - Keyword bool `json:"keyword"` - } `json:"tokens"` - } `json:"tokenfilters"` + CustomAnalyzer bool `json:"custom_analyzer"` + Analyzer *AnalyzeTokenList `json:"analyzer,omitempty"` + Charfilters []*CharFilteredText `json:"charfilters,omitempty"` + Tokenizer *AnalyzeTokenList `json:"tokenizer,omitempty"` + TokenFilters []*AnalyzeTokenList `json:"tokenfilters,omitempty"` } diff --git a/vendor/github.com/olivere/elastic/v7/indices_clear_cache.go b/vendor/github.com/olivere/elastic/v7/indices_clear_cache.go new file mode 100644 index 0000000000000000000000000000000000000000..7a2d9f7cb44c850f7c61a799eee95265a70ed368 --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/indices_clear_cache.go @@ -0,0 +1,240 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/http" + "net/url" + "strings" + + "github.com/olivere/elastic/v7/uritemplates" +) + +// IndicesClearCacheService allows to clear either all caches or specific cached associated +// with one or more indices. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.6/indices-clearcache.html +// for details. +type IndicesClearCacheService struct { + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + + index []string + ignoreUnavailable *bool + allowNoIndices *bool + expandWildcards string + fieldData *bool + fields string + query *bool + request *bool +} + +// NewIndicesClearCacheService initializes a new instance of +// IndicesClearCacheService. +func NewIndicesClearCacheService(client *Client) *IndicesClearCacheService { + return &IndicesClearCacheService{client: client} +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *IndicesClearCacheService) Pretty(pretty bool) *IndicesClearCacheService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *IndicesClearCacheService) Human(human bool) *IndicesClearCacheService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *IndicesClearCacheService) ErrorTrace(errorTrace bool) *IndicesClearCacheService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *IndicesClearCacheService) FilterPath(filterPath ...string) *IndicesClearCacheService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *IndicesClearCacheService) Header(name string, value string) *IndicesClearCacheService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *IndicesClearCacheService) Headers(headers http.Header) *IndicesClearCacheService { + s.headers = headers + return s +} + +// Index is the comma-separated list or wildcard expression of index names used to clear cache. +func (s *IndicesClearCacheService) Index(indices ...string) *IndicesClearCacheService { + s.index = append(s.index, indices...) + return s +} + +// IgnoreUnavailable indicates whether specified concrete indices should be +// ignored when unavailable (missing or closed). +func (s *IndicesClearCacheService) IgnoreUnavailable(ignoreUnavailable bool) *IndicesClearCacheService { + s.ignoreUnavailable = &ignoreUnavailable + return s +} + +// AllowNoIndices indicates whether to ignore if a wildcard indices +// expression resolves into no concrete indices. (This includes `_all` string or when no indices +// have been specified). +func (s *IndicesClearCacheService) AllowNoIndices(allowNoIndices bool) *IndicesClearCacheService { + s.allowNoIndices = &allowNoIndices + return s +} + +// ExpandWildcards indicates whether to expand wildcard expression to +// concrete indices that are open, closed or both. +func (s *IndicesClearCacheService) ExpandWildcards(expandWildcards string) *IndicesClearCacheService { + s.expandWildcards = expandWildcards + return s +} + +// FieldData indicates whether to clear the fields cache. +// Use the fields parameter to clear the cache of specific fields only. +func (s *IndicesClearCacheService) FieldData(fieldData bool) *IndicesClearCacheService { + s.fieldData = &fieldData + return s +} + +// Fields indicates comma-separated list of field names used to limit the fielddata parameter. +// Defaults to all fields. +func (s *IndicesClearCacheService) Fields(fields string) *IndicesClearCacheService { + s.fields = fields + return s +} + +// Query indicates whether to clear only query cache. +func (s *IndicesClearCacheService) Query(queryCache bool) *IndicesClearCacheService { + s.query = &queryCache + return s +} + +// Request indicates whether to clear only request cache. +func (s *IndicesClearCacheService) Request(requestCache bool) *IndicesClearCacheService { + s.request = &requestCache + return s +} + +// buildURL builds the URL for the operation. +func (s *IndicesClearCacheService) buildURL() (string, url.Values, error) { + // Build URL + var path string + var err error + + if len(s.index) > 0 { + path, err = uritemplates.Expand("/{index}/_cache/clear", map[string]string{ + "index": strings.Join(s.index, ","), + }) + } else { + path = "/_cache/clear" + } + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } + if v := s.allowNoIndices; v != nil { + params.Set("allow_no_indices", fmt.Sprint(*v)) + } + if v := s.expandWildcards; v != "" { + params.Set("expand_wildcards", v) + } + if v := s.ignoreUnavailable; v != nil { + params.Set("ignore_unavailable", fmt.Sprint(*v)) + } + if len(s.index) > 0 { + params.Set("index", fmt.Sprintf("%v", s.index)) + } + if v := s.ignoreUnavailable; v != nil { + params.Set("fielddata", fmt.Sprint(*v)) + } + if len(s.fields) > 0 { + params.Set("fields", fmt.Sprintf("%v", s.fields)) + } + if v := s.query; v != nil { + params.Set("query", fmt.Sprint(*v)) + } + if s.request != nil { + params.Set("request", fmt.Sprintf("%v", *s.request)) + } + + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *IndicesClearCacheService) Validate() error { + return nil +} + +// Do executes the operation. +func (s *IndicesClearCacheService) Do(ctx context.Context) (*IndicesClearCacheResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "POST", + Path: path, + Params: params, + Headers: s.headers, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(IndicesClearCacheResponse) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// IndicesClearCacheResponse is the response of IndicesClearCacheService.Do. +type IndicesClearCacheResponse struct { + Shards *ShardsInfo `json:"_shards"` +} diff --git a/vendor/gopkg.in/olivere/elastic.v6/indices_close.go b/vendor/github.com/olivere/elastic/v7/indices_close.go similarity index 67% rename from vendor/gopkg.in/olivere/elastic.v6/indices_close.go rename to vendor/github.com/olivere/elastic/v7/indices_close.go index e6a4127ad5c44491a0e34e96efdc6eca956a0979..36edd60e0b3e94690550f9998556c859cb1d1ba4 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/indices_close.go +++ b/vendor/github.com/olivere/elastic/v7/indices_close.go @@ -7,18 +7,26 @@ package elastic import ( "context" "fmt" + "net/http" "net/url" + "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // IndicesCloseService closes an index. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-open-close.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/indices-open-close.html // for details. type IndicesCloseService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + index string timeout string masterTimeout string @@ -32,6 +40,46 @@ func NewIndicesCloseService(client *Client) *IndicesCloseService { return &IndicesCloseService{client: client} } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *IndicesCloseService) Pretty(pretty bool) *IndicesCloseService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *IndicesCloseService) Human(human bool) *IndicesCloseService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *IndicesCloseService) ErrorTrace(errorTrace bool) *IndicesCloseService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *IndicesCloseService) FilterPath(filterPath ...string) *IndicesCloseService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *IndicesCloseService) Header(name string, value string) *IndicesCloseService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *IndicesCloseService) Headers(headers http.Header) *IndicesCloseService { + s.headers = headers + return s +} + // Index is the name of the index to close. func (s *IndicesCloseService) Index(index string) *IndicesCloseService { s.index = index @@ -71,12 +119,6 @@ func (s *IndicesCloseService) ExpandWildcards(expandWildcards string) *IndicesCl return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *IndicesCloseService) Pretty(pretty bool) *IndicesCloseService { - s.pretty = pretty - return s -} - // buildURL builds the URL for the operation. func (s *IndicesCloseService) buildURL() (string, url.Values, error) { // Build URL @@ -89,6 +131,18 @@ func (s *IndicesCloseService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } if s.allowNoIndices != nil { params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) } @@ -135,9 +189,10 @@ func (s *IndicesCloseService) Do(ctx context.Context) (*IndicesCloseResponse, er // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "POST", - Path: path, - Params: params, + Method: "POST", + Path: path, + Params: params, + Headers: s.headers, }) if err != nil { return nil, err diff --git a/vendor/github.com/olivere/elastic/v7/indices_create.go b/vendor/github.com/olivere/elastic/v7/indices_create.go new file mode 100644 index 0000000000000000000000000000000000000000..4bcd77bedfbc9a9853c2c5d50082cb60c2b03f68 --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/indices_create.go @@ -0,0 +1,189 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "errors" + "fmt" + "net/http" + "net/url" + "strings" + + "github.com/olivere/elastic/v7/uritemplates" +) + +// IndicesCreateService creates a new index. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/indices-create-index.html +// for details. +type IndicesCreateService struct { + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + + index string + timeout string + masterTimeout string + bodyJson interface{} + bodyString string +} + +// NewIndicesCreateService returns a new IndicesCreateService. +func NewIndicesCreateService(client *Client) *IndicesCreateService { + return &IndicesCreateService{client: client} +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *IndicesCreateService) Pretty(pretty bool) *IndicesCreateService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *IndicesCreateService) Human(human bool) *IndicesCreateService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *IndicesCreateService) ErrorTrace(errorTrace bool) *IndicesCreateService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *IndicesCreateService) FilterPath(filterPath ...string) *IndicesCreateService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *IndicesCreateService) Header(name string, value string) *IndicesCreateService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *IndicesCreateService) Headers(headers http.Header) *IndicesCreateService { + s.headers = headers + return s +} + +// Index is the name of the index to create. +func (s *IndicesCreateService) Index(index string) *IndicesCreateService { + s.index = index + return s +} + +// Timeout the explicit operation timeout, e.g. "5s". +func (s *IndicesCreateService) Timeout(timeout string) *IndicesCreateService { + s.timeout = timeout + return s +} + +// MasterTimeout specifies the timeout for connection to master. +func (s *IndicesCreateService) MasterTimeout(masterTimeout string) *IndicesCreateService { + s.masterTimeout = masterTimeout + return s +} + +// Body specifies the configuration of the index as a string. +// It is an alias for BodyString. +func (s *IndicesCreateService) Body(body string) *IndicesCreateService { + s.bodyString = body + return s +} + +// BodyString specifies the configuration of the index as a string. +func (s *IndicesCreateService) BodyString(body string) *IndicesCreateService { + s.bodyString = body + return s +} + +// BodyJson specifies the configuration of the index. The interface{} will +// be serializes as a JSON document, so use a map[string]interface{}. +func (s *IndicesCreateService) BodyJson(body interface{}) *IndicesCreateService { + s.bodyJson = body + return s +} + +// Do executes the operation. +func (s *IndicesCreateService) Do(ctx context.Context) (*IndicesCreateResult, error) { + if s.index == "" { + return nil, errors.New("missing index name") + } + + // Build url + path, err := uritemplates.Expand("/{index}", map[string]string{ + "index": s.index, + }) + if err != nil { + return nil, err + } + + params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } + if s.masterTimeout != "" { + params.Set("master_timeout", s.masterTimeout) + } + if s.timeout != "" { + params.Set("timeout", s.timeout) + } + + // Setup HTTP request body + var body interface{} + if s.bodyJson != nil { + body = s.bodyJson + } else { + body = s.bodyString + } + + // Get response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "PUT", + Path: path, + Params: params, + Body: body, + Headers: s.headers, + }) + if err != nil { + return nil, err + } + + ret := new(IndicesCreateResult) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// -- Result of a create index request. + +// IndicesCreateResult is the outcome of creating a new index. +type IndicesCreateResult struct { + Acknowledged bool `json:"acknowledged"` + ShardsAcknowledged bool `json:"shards_acknowledged"` + Index string `json:"index,omitempty"` +} diff --git a/vendor/gopkg.in/olivere/elastic.v6/indices_delete.go b/vendor/github.com/olivere/elastic/v7/indices_delete.go similarity index 59% rename from vendor/gopkg.in/olivere/elastic.v6/indices_delete.go rename to vendor/github.com/olivere/elastic/v7/indices_delete.go index 59567e26db7a3516126927d33983bce4375634bc..cdf27a56062bc02000bfd0533660604dc99e820e 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/indices_delete.go +++ b/vendor/github.com/olivere/elastic/v7/indices_delete.go @@ -7,19 +7,26 @@ package elastic import ( "context" "fmt" + "net/http" "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // IndicesDeleteService allows to delete existing indices. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-delete-index.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/indices-delete-index.html // for details. type IndicesDeleteService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + index []string timeout string masterTimeout string @@ -33,6 +40,46 @@ func NewIndicesDeleteService(client *Client) *IndicesDeleteService { } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *IndicesDeleteService) Pretty(pretty bool) *IndicesDeleteService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *IndicesDeleteService) Human(human bool) *IndicesDeleteService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *IndicesDeleteService) ErrorTrace(errorTrace bool) *IndicesDeleteService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *IndicesDeleteService) FilterPath(filterPath ...string) *IndicesDeleteService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *IndicesDeleteService) Header(name string, value string) *IndicesDeleteService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *IndicesDeleteService) Headers(headers http.Header) *IndicesDeleteService { + s.headers = headers + return s +} + // Index adds the list of indices to delete. // Use `_all` or `*` string to delete all indices. func (s *IndicesDeleteService) Index(index []string) *IndicesDeleteService { @@ -52,12 +99,6 @@ func (s *IndicesDeleteService) MasterTimeout(masterTimeout string) *IndicesDelet return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *IndicesDeleteService) Pretty(pretty bool) *IndicesDeleteService { - s.pretty = pretty - return s -} - // buildURL builds the URL for the operation. func (s *IndicesDeleteService) buildURL() (string, url.Values, error) { // Build URL @@ -70,8 +111,17 @@ func (s *IndicesDeleteService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if s.timeout != "" { params.Set("timeout", s.timeout) @@ -109,9 +159,10 @@ func (s *IndicesDeleteService) Do(ctx context.Context) (*IndicesDeleteResponse, // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "DELETE", - Path: path, - Params: params, + Method: "DELETE", + Path: path, + Params: params, + Headers: s.headers, }) if err != nil { return nil, err diff --git a/vendor/gopkg.in/olivere/elastic.v6/indices_delete_template.go b/vendor/github.com/olivere/elastic/v7/indices_delete_template.go similarity index 58% rename from vendor/gopkg.in/olivere/elastic.v6/indices_delete_template.go rename to vendor/github.com/olivere/elastic/v7/indices_delete_template.go index 2a4c46647c38e8c2e0851320a3c97ff3e8def015..e1ed3e68aa36216331f3f9f5cae4e8eec469a2a1 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/indices_delete_template.go +++ b/vendor/github.com/olivere/elastic/v7/indices_delete_template.go @@ -7,16 +7,24 @@ package elastic import ( "context" "fmt" + "net/http" "net/url" + "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // IndicesDeleteTemplateService deletes index templates. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-templates.html. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/indices-templates.html. type IndicesDeleteTemplateService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + name string timeout string masterTimeout string @@ -29,6 +37,46 @@ func NewIndicesDeleteTemplateService(client *Client) *IndicesDeleteTemplateServi } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *IndicesDeleteTemplateService) Pretty(pretty bool) *IndicesDeleteTemplateService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *IndicesDeleteTemplateService) Human(human bool) *IndicesDeleteTemplateService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *IndicesDeleteTemplateService) ErrorTrace(errorTrace bool) *IndicesDeleteTemplateService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *IndicesDeleteTemplateService) FilterPath(filterPath ...string) *IndicesDeleteTemplateService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *IndicesDeleteTemplateService) Header(name string, value string) *IndicesDeleteTemplateService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *IndicesDeleteTemplateService) Headers(headers http.Header) *IndicesDeleteTemplateService { + s.headers = headers + return s +} + // Name is the name of the template. func (s *IndicesDeleteTemplateService) Name(name string) *IndicesDeleteTemplateService { s.name = name @@ -47,12 +95,6 @@ func (s *IndicesDeleteTemplateService) MasterTimeout(masterTimeout string) *Indi return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *IndicesDeleteTemplateService) Pretty(pretty bool) *IndicesDeleteTemplateService { - s.pretty = pretty - return s -} - // buildURL builds the URL for the operation. func (s *IndicesDeleteTemplateService) buildURL() (string, url.Values, error) { // Build URL @@ -65,8 +107,17 @@ func (s *IndicesDeleteTemplateService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if s.timeout != "" { params.Set("timeout", s.timeout) @@ -104,9 +155,10 @@ func (s *IndicesDeleteTemplateService) Do(ctx context.Context) (*IndicesDeleteTe // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "DELETE", - Path: path, - Params: params, + Method: "DELETE", + Path: path, + Params: params, + Headers: s.headers, }) if err != nil { return nil, err diff --git a/vendor/gopkg.in/olivere/elastic.v6/indices_exists.go b/vendor/github.com/olivere/elastic/v7/indices_exists.go similarity index 66% rename from vendor/gopkg.in/olivere/elastic.v6/indices_exists.go rename to vendor/github.com/olivere/elastic/v7/indices_exists.go index 737c31cd6d51b50e1c62f077d1a3d2b3221f918a..a813f561ac6b5701ab442095e637cec32b3c88ea 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/indices_exists.go +++ b/vendor/github.com/olivere/elastic/v7/indices_exists.go @@ -11,16 +11,22 @@ import ( "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // IndicesExistsService checks if an index or indices exist or not. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-exists.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/indices-exists.html // for details. type IndicesExistsService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + index []string ignoreUnavailable *bool allowNoIndices *bool @@ -36,6 +42,46 @@ func NewIndicesExistsService(client *Client) *IndicesExistsService { } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *IndicesExistsService) Pretty(pretty bool) *IndicesExistsService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *IndicesExistsService) Human(human bool) *IndicesExistsService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *IndicesExistsService) ErrorTrace(errorTrace bool) *IndicesExistsService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *IndicesExistsService) FilterPath(filterPath ...string) *IndicesExistsService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *IndicesExistsService) Header(name string, value string) *IndicesExistsService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *IndicesExistsService) Headers(headers http.Header) *IndicesExistsService { + s.headers = headers + return s +} + // Index is a list of one or more indices to check. func (s *IndicesExistsService) Index(index []string) *IndicesExistsService { s.index = index @@ -71,12 +117,6 @@ func (s *IndicesExistsService) IgnoreUnavailable(ignoreUnavailable bool) *Indice return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *IndicesExistsService) Pretty(pretty bool) *IndicesExistsService { - s.pretty = pretty - return s -} - // buildURL builds the URL for the operation. func (s *IndicesExistsService) buildURL() (string, url.Values, error) { // Build URL @@ -89,8 +129,17 @@ func (s *IndicesExistsService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if s.local != nil { params.Set("local", fmt.Sprintf("%v", *s.local)) @@ -132,12 +181,12 @@ func (s *IndicesExistsService) Do(ctx context.Context) (bool, error) { return false, err } - // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ Method: "HEAD", Path: path, Params: params, IgnoreErrors: []int{404}, + Headers: s.headers, }) if err != nil { return false, err diff --git a/vendor/gopkg.in/olivere/elastic.v6/indices_exists_template.go b/vendor/github.com/olivere/elastic/v7/indices_exists_template.go similarity index 56% rename from vendor/gopkg.in/olivere/elastic.v6/indices_exists_template.go rename to vendor/github.com/olivere/elastic/v7/indices_exists_template.go index 40b06e895ea2f361a49df6b3be03b86e1f336855..c5c9bbdc5b0eaa91858569761e58c5935e31b532 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/indices_exists_template.go +++ b/vendor/github.com/olivere/elastic/v7/indices_exists_template.go @@ -9,18 +9,25 @@ import ( "fmt" "net/http" "net/url" + "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // IndicesExistsTemplateService checks if a given template exists. -// See http://www.elastic.co/guide/en/elasticsearch/reference/5.2/indices-templates.html#indices-templates-exists +// See http://www.elastic.co/guide/en/elasticsearch/reference/7.0/indices-templates.html#indices-templates-exists // for documentation. type IndicesExistsTemplateService struct { client *Client - pretty bool - name string - local *bool + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + + name string + local *bool } // NewIndicesExistsTemplateService creates a new IndicesExistsTemplateService. @@ -30,6 +37,46 @@ func NewIndicesExistsTemplateService(client *Client) *IndicesExistsTemplateServi } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *IndicesExistsTemplateService) Pretty(pretty bool) *IndicesExistsTemplateService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *IndicesExistsTemplateService) Human(human bool) *IndicesExistsTemplateService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *IndicesExistsTemplateService) ErrorTrace(errorTrace bool) *IndicesExistsTemplateService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *IndicesExistsTemplateService) FilterPath(filterPath ...string) *IndicesExistsTemplateService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *IndicesExistsTemplateService) Header(name string, value string) *IndicesExistsTemplateService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *IndicesExistsTemplateService) Headers(headers http.Header) *IndicesExistsTemplateService { + s.headers = headers + return s +} + // Name is the name of the template. func (s *IndicesExistsTemplateService) Name(name string) *IndicesExistsTemplateService { s.name = name @@ -43,12 +90,6 @@ func (s *IndicesExistsTemplateService) Local(local bool) *IndicesExistsTemplateS return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *IndicesExistsTemplateService) Pretty(pretty bool) *IndicesExistsTemplateService { - s.pretty = pretty - return s -} - // buildURL builds the URL for the operation. func (s *IndicesExistsTemplateService) buildURL() (string, url.Values, error) { // Build URL @@ -61,8 +102,17 @@ func (s *IndicesExistsTemplateService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if s.local != nil { params.Set("local", fmt.Sprintf("%v", *s.local)) @@ -101,6 +151,7 @@ func (s *IndicesExistsTemplateService) Do(ctx context.Context) (bool, error) { Path: path, Params: params, IgnoreErrors: []int{404}, + Headers: s.headers, }) if err != nil { return false, err diff --git a/vendor/gopkg.in/olivere/elastic.v6/indices_flush.go b/vendor/github.com/olivere/elastic/v7/indices_flush.go similarity index 69% rename from vendor/gopkg.in/olivere/elastic.v6/indices_flush.go rename to vendor/github.com/olivere/elastic/v7/indices_flush.go index cf14e8e4736e5750db0d8d218919108062526121..5d4c4e1c61fbec93ca7c32c901ed104d3de5e8da 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/indices_flush.go +++ b/vendor/github.com/olivere/elastic/v7/indices_flush.go @@ -7,21 +7,28 @@ package elastic import ( "context" "fmt" + "net/http" "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // Flush allows to flush one or more indices. The flush process of an index // basically frees memory from the index by flushing data to the index // storage and clearing the internal transaction log. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-flush.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/indices-flush.html // for details. type IndicesFlushService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + index []string force *bool waitIfOngoing *bool @@ -38,6 +45,46 @@ func NewIndicesFlushService(client *Client) *IndicesFlushService { } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *IndicesFlushService) Pretty(pretty bool) *IndicesFlushService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *IndicesFlushService) Human(human bool) *IndicesFlushService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *IndicesFlushService) ErrorTrace(errorTrace bool) *IndicesFlushService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *IndicesFlushService) FilterPath(filterPath ...string) *IndicesFlushService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *IndicesFlushService) Header(name string, value string) *IndicesFlushService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *IndicesFlushService) Headers(headers http.Header) *IndicesFlushService { + s.headers = headers + return s +} + // Index is a list of index names; use `_all` or empty string for all indices. func (s *IndicesFlushService) Index(indices ...string) *IndicesFlushService { s.index = append(s.index, indices...) @@ -84,12 +131,6 @@ func (s *IndicesFlushService) ExpandWildcards(expandWildcards string) *IndicesFl return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *IndicesFlushService) Pretty(pretty bool) *IndicesFlushService { - s.pretty = pretty - return s -} - // buildURL builds the URL for the operation. func (s *IndicesFlushService) buildURL() (string, url.Values, error) { // Build URL @@ -109,8 +150,17 @@ func (s *IndicesFlushService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if s.force != nil { params.Set("force", fmt.Sprintf("%v", *s.force)) @@ -150,9 +200,10 @@ func (s *IndicesFlushService) Do(ctx context.Context) (*IndicesFlushResponse, er // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "POST", - Path: path, - Params: params, + Method: "POST", + Path: path, + Params: params, + Headers: s.headers, }) if err != nil { return nil, err @@ -169,5 +220,5 @@ func (s *IndicesFlushService) Do(ctx context.Context) (*IndicesFlushResponse, er // -- Result of a flush request. type IndicesFlushResponse struct { - Shards shardsInfo `json:"_shards"` + Shards *ShardsInfo `json:"_shards"` } diff --git a/vendor/github.com/olivere/elastic/v7/indices_flush_synced.go b/vendor/github.com/olivere/elastic/v7/indices_flush_synced.go new file mode 100644 index 0000000000000000000000000000000000000000..140ae62e2b79a49d1a8cb5ab5c0c8009a2f3b2f5 --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/indices_flush_synced.go @@ -0,0 +1,281 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "net/url" + "strings" + + "github.com/olivere/elastic/v7/uritemplates" +) + +// IndicesSyncedFlushService performs a normal flush, then adds a generated +// unique marked (sync_id) to all shards. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/indices-synced-flush.html +// for details. +type IndicesSyncedFlushService struct { + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + + index []string + ignoreUnavailable *bool + allowNoIndices *bool + expandWildcards string +} + +// NewIndicesSyncedFlushService creates a new IndicesSyncedFlushService. +func NewIndicesSyncedFlushService(client *Client) *IndicesSyncedFlushService { + return &IndicesSyncedFlushService{ + client: client, + } +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *IndicesSyncedFlushService) Pretty(pretty bool) *IndicesSyncedFlushService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *IndicesSyncedFlushService) Human(human bool) *IndicesSyncedFlushService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *IndicesSyncedFlushService) ErrorTrace(errorTrace bool) *IndicesSyncedFlushService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *IndicesSyncedFlushService) FilterPath(filterPath ...string) *IndicesSyncedFlushService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *IndicesSyncedFlushService) Header(name string, value string) *IndicesSyncedFlushService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *IndicesSyncedFlushService) Headers(headers http.Header) *IndicesSyncedFlushService { + s.headers = headers + return s +} + +// Index is a list of index names; use `_all` or empty string for all indices. +func (s *IndicesSyncedFlushService) Index(indices ...string) *IndicesSyncedFlushService { + s.index = append(s.index, indices...) + return s +} + +// IgnoreUnavailable indicates whether specified concrete indices should be +// ignored when unavailable (missing or closed). +func (s *IndicesSyncedFlushService) IgnoreUnavailable(ignoreUnavailable bool) *IndicesSyncedFlushService { + s.ignoreUnavailable = &ignoreUnavailable + return s +} + +// AllowNoIndices indicates whether to ignore if a wildcard indices expression +// resolves into no concrete indices. (This includes `_all` string or when +// no indices have been specified). +func (s *IndicesSyncedFlushService) AllowNoIndices(allowNoIndices bool) *IndicesSyncedFlushService { + s.allowNoIndices = &allowNoIndices + return s +} + +// ExpandWildcards specifies whether to expand wildcard expression to +// concrete indices that are open, closed or both.. +func (s *IndicesSyncedFlushService) ExpandWildcards(expandWildcards string) *IndicesSyncedFlushService { + s.expandWildcards = expandWildcards + return s +} + +// buildURL builds the URL for the operation. +func (s *IndicesSyncedFlushService) buildURL() (string, url.Values, error) { + // Build URL + var err error + var path string + + if len(s.index) > 0 { + path, err = uritemplates.Expand("/{index}/_flush/synced", map[string]string{ + "index": strings.Join(s.index, ","), + }) + } else { + path = "/_flush/synced" + } + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } + if s.ignoreUnavailable != nil { + params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) + } + if s.allowNoIndices != nil { + params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) + } + if s.expandWildcards != "" { + params.Set("expand_wildcards", s.expandWildcards) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *IndicesSyncedFlushService) Validate() error { + return nil +} + +// Do executes the service. +func (s *IndicesSyncedFlushService) Do(ctx context.Context) (*IndicesSyncedFlushResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "POST", + Path: path, + Params: params, + Headers: s.headers, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(IndicesSyncedFlushResponse) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// -- Result of a flush request. + +// IndicesSyncedFlushResponse is the outcome of a synched flush call. +type IndicesSyncedFlushResponse struct { + Shards *ShardsInfo `json:"_shards"` + Index map[string]*IndicesShardsSyncedFlushResult `json:"-"` + + // TODO Add information about the indices here from the root level + // It looks like this: + // { + // "_shards" : { + // "total" : 4, + // "successful" : 4, + // "failed" : 0 + // }, + // "elastic-test" : { + // "total" : 1, + // "successful" : 1, + // "failed" : 0 + // }, + // "elastic-test2" : { + // "total" : 1, + // "successful" : 1, + // "failed" : 0 + // }, + // "elastic-orders" : { + // "total" : 1, + // "successful" : 1, + // "failed" : 0 + // }, + // "elastic-nosource-test" : { + // "total" : 1, + // "successful" : 1, + // "failed" : 0 + // } + // } +} + +// IndicesShardsSyncedFlushResult represents synced flush information about +// a specific index. +type IndicesShardsSyncedFlushResult struct { + Total int `json:"total"` + Successful int `json:"successful"` + Failed int `json:"failed"` + Failures []IndicesShardsSyncedFlushResultFailure `json:"failures,omitempty"` +} + +// IndicesShardsSyncedFlushResultFailure represents a failure of a synced +// flush operation. +type IndicesShardsSyncedFlushResultFailure struct { + Shard int `json:"shard"` + Reason string `json:"reason"` + Routing struct { + State string `json:"state"` + Primary bool `json:"primary"` + Node string `json:"node"` + RelocatingNode *string `json:"relocating_node"` + Shard int `json:"shard"` + Index string `json:"index"` + ExpectedShardSizeInBytes int64 `json:"expected_shard_size_in_bytes,omitempty"` + // recoverySource + // allocationId + // unassignedInfo + } `json:"routing"` +} + +// UnmarshalJSON parses the output from Synced Flush API. +func (resp *IndicesSyncedFlushResponse) UnmarshalJSON(data []byte) error { + m := make(map[string]json.RawMessage) + err := json.Unmarshal(data, &m) + if err != nil { + return err + } + resp.Index = make(map[string]*IndicesShardsSyncedFlushResult) + for k, v := range m { + if k == "_shards" { + if err := json.Unmarshal(v, &resp.Shards); err != nil { + return err + } + } else { + ix := new(IndicesShardsSyncedFlushResult) + if err := json.Unmarshal(v, &ix); err != nil { + return err + } + resp.Index[k] = ix + } + } + return nil +} diff --git a/vendor/gopkg.in/olivere/elastic.v6/indices_forcemerge.go b/vendor/github.com/olivere/elastic/v7/indices_forcemerge.go similarity index 70% rename from vendor/gopkg.in/olivere/elastic.v6/indices_forcemerge.go rename to vendor/github.com/olivere/elastic/v7/indices_forcemerge.go index 0e999cf199bb52cfef9ec41488ca28a4699c401d..809839057bb4714beb1c1be53518a764a680469c 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/indices_forcemerge.go +++ b/vendor/github.com/olivere/elastic/v7/indices_forcemerge.go @@ -7,10 +7,11 @@ package elastic import ( "context" "fmt" + "net/http" "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // IndicesForcemergeService allows to force merging of one or more indices. @@ -18,11 +19,17 @@ import ( // within each shard. The force merge operation allows to reduce the number // of segments by merging them. // -// See http://www.elastic.co/guide/en/elasticsearch/reference/5.2/indices-forcemerge.html +// See http://www.elastic.co/guide/en/elasticsearch/reference/7.0/indices-forcemerge.html // for more information. type IndicesForcemergeService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + index []string allowNoIndices *bool expandWildcards string @@ -30,7 +37,6 @@ type IndicesForcemergeService struct { ignoreUnavailable *bool maxNumSegments interface{} onlyExpungeDeletes *bool - operationThreading interface{} } // NewIndicesForcemergeService creates a new IndicesForcemergeService. @@ -41,6 +47,46 @@ func NewIndicesForcemergeService(client *Client) *IndicesForcemergeService { } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *IndicesForcemergeService) Pretty(pretty bool) *IndicesForcemergeService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *IndicesForcemergeService) Human(human bool) *IndicesForcemergeService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *IndicesForcemergeService) ErrorTrace(errorTrace bool) *IndicesForcemergeService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *IndicesForcemergeService) FilterPath(filterPath ...string) *IndicesForcemergeService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *IndicesForcemergeService) Header(name string, value string) *IndicesForcemergeService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *IndicesForcemergeService) Headers(headers http.Header) *IndicesForcemergeService { + s.headers = headers + return s +} + // Index is a list of index names; use `_all` or empty string to perform // the operation on all indices. func (s *IndicesForcemergeService) Index(index ...string) *IndicesForcemergeService { @@ -94,17 +140,6 @@ func (s *IndicesForcemergeService) OnlyExpungeDeletes(onlyExpungeDeletes bool) * return s } -func (s *IndicesForcemergeService) OperationThreading(operationThreading interface{}) *IndicesForcemergeService { - s.operationThreading = operationThreading - return s -} - -// Pretty indicates that the JSON response be indented and human readable. -func (s *IndicesForcemergeService) Pretty(pretty bool) *IndicesForcemergeService { - s.pretty = pretty - return s -} - // buildURL builds the URL for the operation. func (s *IndicesForcemergeService) buildURL() (string, url.Values, error) { var err error @@ -124,8 +159,17 @@ func (s *IndicesForcemergeService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if s.allowNoIndices != nil { params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) @@ -145,9 +189,6 @@ func (s *IndicesForcemergeService) buildURL() (string, url.Values, error) { if s.onlyExpungeDeletes != nil { params.Set("only_expunge_deletes", fmt.Sprintf("%v", *s.onlyExpungeDeletes)) } - if s.operationThreading != nil { - params.Set("operation_threading", fmt.Sprintf("%v", s.operationThreading)) - } return path, params, nil } @@ -171,9 +212,10 @@ func (s *IndicesForcemergeService) Do(ctx context.Context) (*IndicesForcemergeRe // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "POST", - Path: path, - Params: params, + Method: "POST", + Path: path, + Params: params, + Headers: s.headers, }) if err != nil { return nil, err @@ -189,5 +231,5 @@ func (s *IndicesForcemergeService) Do(ctx context.Context) (*IndicesForcemergeRe // IndicesForcemergeResponse is the response of IndicesForcemergeService.Do. type IndicesForcemergeResponse struct { - Shards shardsInfo `json:"_shards"` + Shards *ShardsInfo `json:"_shards"` } diff --git a/vendor/github.com/olivere/elastic/v7/indices_freeze.go b/vendor/github.com/olivere/elastic/v7/indices_freeze.go new file mode 100644 index 0000000000000000000000000000000000000000..04c2a3e1588e789d22c531a4decb058bad097ad1 --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/indices_freeze.go @@ -0,0 +1,229 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/http" + "net/url" + "strings" + + "github.com/olivere/elastic/v7/uritemplates" +) + +// IndicesFreezeService freezes an index. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/freeze-index-api.html +// and https://www.elastic.co/blog/creating-frozen-indices-with-the-elasticsearch-freeze-index-api +// for details. +type IndicesFreezeService struct { + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + + index string + timeout string + masterTimeout string + ignoreUnavailable *bool + allowNoIndices *bool + expandWildcards string + waitForActiveShards string +} + +// NewIndicesFreezeService creates a new IndicesFreezeService. +func NewIndicesFreezeService(client *Client) *IndicesFreezeService { + return &IndicesFreezeService{ + client: client, + } +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *IndicesFreezeService) Pretty(pretty bool) *IndicesFreezeService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *IndicesFreezeService) Human(human bool) *IndicesFreezeService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *IndicesFreezeService) ErrorTrace(errorTrace bool) *IndicesFreezeService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *IndicesFreezeService) FilterPath(filterPath ...string) *IndicesFreezeService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *IndicesFreezeService) Header(name string, value string) *IndicesFreezeService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *IndicesFreezeService) Headers(headers http.Header) *IndicesFreezeService { + s.headers = headers + return s +} + +// Index is the name of the index to freeze. +func (s *IndicesFreezeService) Index(index string) *IndicesFreezeService { + s.index = index + return s +} + +// Timeout allows to specify an explicit timeout. +func (s *IndicesFreezeService) Timeout(timeout string) *IndicesFreezeService { + s.timeout = timeout + return s +} + +// MasterTimeout allows to specify a timeout for connection to master. +func (s *IndicesFreezeService) MasterTimeout(masterTimeout string) *IndicesFreezeService { + s.masterTimeout = masterTimeout + return s +} + +// IgnoreUnavailable indicates whether specified concrete indices should be +// ignored when unavailable (missing or closed). +func (s *IndicesFreezeService) IgnoreUnavailable(ignoreUnavailable bool) *IndicesFreezeService { + s.ignoreUnavailable = &ignoreUnavailable + return s +} + +// AllowNoIndices indicates whether to ignore if a wildcard indices expression +// resolves into no concrete indices. (This includes `_all` string or when +// no indices have been specified). +func (s *IndicesFreezeService) AllowNoIndices(allowNoIndices bool) *IndicesFreezeService { + s.allowNoIndices = &allowNoIndices + return s +} + +// ExpandWildcards specifies whether to expand wildcard expression to +// concrete indices that are open, closed or both.. +func (s *IndicesFreezeService) ExpandWildcards(expandWildcards string) *IndicesFreezeService { + s.expandWildcards = expandWildcards + return s +} + +// WaitForActiveShards sets the number of active shards to wait for +// before the operation returns. +func (s *IndicesFreezeService) WaitForActiveShards(numShards string) *IndicesFreezeService { + s.waitForActiveShards = numShards + return s +} + +// buildURL builds the URL for the operation. +func (s *IndicesFreezeService) buildURL() (string, url.Values, error) { + // Build URL + path, err := uritemplates.Expand("/{index}/_freeze", map[string]string{ + "index": s.index, + }) + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } + if s.timeout != "" { + params.Set("timeout", s.timeout) + } + if s.masterTimeout != "" { + params.Set("master_timeout", s.masterTimeout) + } + if s.expandWildcards != "" { + params.Set("expand_wildcards", s.expandWildcards) + } + if s.ignoreUnavailable != nil { + params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) + } + if s.allowNoIndices != nil { + params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) + } + if s.expandWildcards != "" { + params.Set("expand_wildcards", s.expandWildcards) + } + if s.waitForActiveShards != "" { + params.Set("wait_for_active_shards", s.waitForActiveShards) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *IndicesFreezeService) Validate() error { + var invalid []string + if s.index == "" { + invalid = append(invalid, "Index") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the service. +func (s *IndicesFreezeService) Do(ctx context.Context) (*IndicesFreezeResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "POST", + Path: path, + Params: params, + Headers: s.headers, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(IndicesFreezeResponse) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// IndicesFreezeResponse is the outcome of freezing an index. +type IndicesFreezeResponse struct { + Shards *ShardsInfo `json:"_shards"` +} diff --git a/vendor/gopkg.in/olivere/elastic.v6/indices_get.go b/vendor/github.com/olivere/elastic/v7/indices_get.go similarity index 71% rename from vendor/gopkg.in/olivere/elastic.v6/indices_get.go rename to vendor/github.com/olivere/elastic/v7/indices_get.go index 204703d0c89e790bcbee64458ed906b0cf6ff1fd..6416c04a9f907a388824d406796e978166cf04ad 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/indices_get.go +++ b/vendor/github.com/olivere/elastic/v7/indices_get.go @@ -7,19 +7,26 @@ package elastic import ( "context" "fmt" + "net/http" "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // IndicesGetService retrieves information about one or more indices. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-get-index.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/indices-get-index.html // for more details. type IndicesGetService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + index []string feature []string local *bool @@ -27,7 +34,6 @@ type IndicesGetService struct { allowNoIndices *bool expandWildcards string flatSettings *bool - human *bool } // NewIndicesGetService creates a new IndicesGetService. @@ -39,6 +45,46 @@ func NewIndicesGetService(client *Client) *IndicesGetService { } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *IndicesGetService) Pretty(pretty bool) *IndicesGetService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *IndicesGetService) Human(human bool) *IndicesGetService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *IndicesGetService) ErrorTrace(errorTrace bool) *IndicesGetService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *IndicesGetService) FilterPath(filterPath ...string) *IndicesGetService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *IndicesGetService) Header(name string, value string) *IndicesGetService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *IndicesGetService) Headers(headers http.Header) *IndicesGetService { + s.headers = headers + return s +} + // Index is a list of index names. func (s *IndicesGetService) Index(indices ...string) *IndicesGetService { s.index = append(s.index, indices...) @@ -78,28 +124,6 @@ func (s *IndicesGetService) ExpandWildcards(expandWildcards string) *IndicesGetS return s } -/* Disabled because serialization would fail in that case. */ -/* -// FlatSettings make the service return settings in flat format (default: false). -func (s *IndicesGetService) FlatSettings(flatSettings bool) *IndicesGetService { - s.flatSettings = &flatSettings - return s -} -*/ - -// Human indicates whether to return version and creation date values -// in human-readable format (default: false). -func (s *IndicesGetService) Human(human bool) *IndicesGetService { - s.human = &human - return s -} - -// Pretty indicates that the JSON response be indented and human readable. -func (s *IndicesGetService) Pretty(pretty bool) *IndicesGetService { - s.pretty = pretty - return s -} - // buildURL builds the URL for the operation. func (s *IndicesGetService) buildURL() (string, url.Values, error) { var err error @@ -130,8 +154,17 @@ func (s *IndicesGetService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if s.expandWildcards != "" { params.Set("expand_wildcards", s.expandWildcards) @@ -139,9 +172,6 @@ func (s *IndicesGetService) buildURL() (string, url.Values, error) { if s.flatSettings != nil { params.Set("flat_settings", fmt.Sprintf("%v", *s.flatSettings)) } - if s.human != nil { - params.Set("human", fmt.Sprintf("%v", *s.human)) - } if s.local != nil { params.Set("local", fmt.Sprintf("%v", *s.local)) } @@ -181,9 +211,10 @@ func (s *IndicesGetService) Do(ctx context.Context) (map[string]*IndicesGetRespo // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, + Method: "GET", + Path: path, + Params: params, + Headers: s.headers, }) if err != nil { return nil, err diff --git a/vendor/gopkg.in/olivere/elastic.v6/indices_get_aliases.go b/vendor/github.com/olivere/elastic/v7/indices_get_aliases.go similarity index 55% rename from vendor/gopkg.in/olivere/elastic.v6/indices_get_aliases.go rename to vendor/github.com/olivere/elastic/v7/indices_get_aliases.go index 6d895da8d4da533986c5184758c16e02c06339aa..596dc606ce1315559e9a32ae4af0a3e551fbf297 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/indices_get_aliases.go +++ b/vendor/github.com/olivere/elastic/v7/indices_get_aliases.go @@ -7,20 +7,27 @@ package elastic import ( "context" "fmt" + "net/http" "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // AliasesService returns the aliases associated with one or more indices, or the // indices associated with one or more aliases, or a combination of those filters. -// See http://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-aliases.html. +// See http://www.elastic.co/guide/en/elasticsearch/reference/7.0/indices-aliases.html. type AliasesService struct { client *Client - index []string - alias []string - pretty bool + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + + index []string + alias []string } // NewAliasesService instantiates a new AliasesService. @@ -31,9 +38,43 @@ func NewAliasesService(client *Client) *AliasesService { return builder } -// Pretty asks Elasticsearch to indent the returned JSON. +// Pretty tells Elasticsearch whether to return a formatted JSON response. func (s *AliasesService) Pretty(pretty bool) *AliasesService { - s.pretty = pretty + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *AliasesService) Human(human bool) *AliasesService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *AliasesService) ErrorTrace(errorTrace bool) *AliasesService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *AliasesService) FilterPath(filterPath ...string) *AliasesService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *AliasesService) Header(name string, value string) *AliasesService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *AliasesService) Headers(headers http.Header) *AliasesService { + s.headers = headers return s } @@ -71,8 +112,17 @@ func (s *AliasesService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", fmt.Sprintf("%v", s.pretty)) + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } return path, params, nil } @@ -85,9 +135,10 @@ func (s *AliasesService) Do(ctx context.Context) (*AliasesResult, error) { // Get response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, + Method: "GET", + Path: path, + Params: params, + Headers: s.headers, }) if err != nil { return nil, err @@ -104,7 +155,11 @@ func (s *AliasesService) Do(ctx context.Context) (*AliasesResult, error) { // ... // }, // } - indexMap := make(map[string]interface{}) + indexMap := make(map[string]struct { + Aliases map[string]struct { + IsWriteIndex bool `json:"is_write_index"` + } `json:"aliases"` + }) if err := s.client.decoder.Decode(res.Body, &indexMap); err != nil { return nil, err } @@ -114,21 +169,19 @@ func (s *AliasesService) Do(ctx context.Context) (*AliasesResult, error) { Indices: make(map[string]indexResult), } for indexName, indexData := range indexMap { + if indexData.Aliases == nil { + continue + } + indexOut, found := ret.Indices[indexName] if !found { indexOut = indexResult{Aliases: make([]aliasResult, 0)} } // { "aliases" : { ... } } - indexDataMap, ok := indexData.(map[string]interface{}) - if ok { - aliasesData, ok := indexDataMap["aliases"].(map[string]interface{}) - if ok { - for aliasName, _ := range aliasesData { - aliasRes := aliasResult{AliasName: aliasName} - indexOut.Aliases = append(indexOut.Aliases, aliasRes) - } - } + for aliasName, aliasData := range indexData.Aliases { + aliasRes := aliasResult{AliasName: aliasName, IsWriteIndex: aliasData.IsWriteIndex} + indexOut.Aliases = append(indexOut.Aliases, aliasRes) } ret.Indices[indexName] = indexOut @@ -139,6 +192,7 @@ func (s *AliasesService) Do(ctx context.Context) (*AliasesResult, error) { // -- Result of an alias request. +// AliasesResult is the outcome of calling AliasesService.Do. type AliasesResult struct { Indices map[string]indexResult } @@ -148,9 +202,11 @@ type indexResult struct { } type aliasResult struct { - AliasName string + AliasName string + IsWriteIndex bool } +// IndicesByAlias returns all indices given a specific alias name. func (ar AliasesResult) IndicesByAlias(aliasName string) []string { var indices []string for indexName, indexInfo := range ar.Indices { @@ -163,6 +219,7 @@ func (ar AliasesResult) IndicesByAlias(aliasName string) []string { return indices } +// HasAlias returns true if the index has a specific alias. func (ir indexResult) HasAlias(aliasName string) bool { for _, alias := range ir.Aliases { if alias.AliasName == aliasName { diff --git a/vendor/gopkg.in/olivere/elastic.v6/indices_get_field_mapping.go b/vendor/github.com/olivere/elastic/v7/indices_get_field_mapping.go similarity index 69% rename from vendor/gopkg.in/olivere/elastic.v6/indices_get_field_mapping.go rename to vendor/github.com/olivere/elastic/v7/indices_get_field_mapping.go index 20f0196b7edf30b2ae8f188203a61010718c4cb7..5875af5860b8fd144a5f58775389d6e31f3c92d4 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/indices_get_field_mapping.go +++ b/vendor/github.com/olivere/elastic/v7/indices_get_field_mapping.go @@ -7,20 +7,27 @@ package elastic import ( "context" "fmt" + "net/http" "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // IndicesGetFieldMappingService retrieves the mapping definitions for the fields in an index // or index/type. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-get-field-mapping.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/indices-get-field-mapping.html // for details. type IndicesGetFieldMappingService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + index []string typ []string field []string @@ -43,6 +50,46 @@ func NewIndicesGetFieldMappingService(client *Client) *IndicesGetFieldMappingSer } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *IndicesGetFieldMappingService) Pretty(pretty bool) *IndicesGetFieldMappingService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *IndicesGetFieldMappingService) Human(human bool) *IndicesGetFieldMappingService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *IndicesGetFieldMappingService) ErrorTrace(errorTrace bool) *IndicesGetFieldMappingService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *IndicesGetFieldMappingService) FilterPath(filterPath ...string) *IndicesGetFieldMappingService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *IndicesGetFieldMappingService) Header(name string, value string) *IndicesGetFieldMappingService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *IndicesGetFieldMappingService) Headers(headers http.Header) *IndicesGetFieldMappingService { + s.headers = headers + return s +} + // Index is a list of index names. func (s *IndicesGetFieldMappingService) Index(indices ...string) *IndicesGetFieldMappingService { s.index = append(s.index, indices...) @@ -90,12 +137,6 @@ func (s *IndicesGetFieldMappingService) IgnoreUnavailable(ignoreUnavailable bool return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *IndicesGetFieldMappingService) Pretty(pretty bool) *IndicesGetFieldMappingService { - s.pretty = pretty - return s -} - // buildURL builds the URL for the operation. func (s *IndicesGetFieldMappingService) buildURL() (string, url.Values, error) { var index, typ, field []string @@ -130,8 +171,17 @@ func (s *IndicesGetFieldMappingService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if s.ignoreUnavailable != nil { params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) @@ -171,9 +221,10 @@ func (s *IndicesGetFieldMappingService) Do(ctx context.Context) (map[string]inte // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, + Method: "GET", + Path: path, + Params: params, + Headers: s.headers, }) if err != nil { return nil, err diff --git a/vendor/gopkg.in/olivere/elastic.v6/indices_get_mapping.go b/vendor/github.com/olivere/elastic/v7/indices_get_mapping.go similarity index 68% rename from vendor/gopkg.in/olivere/elastic.v6/indices_get_mapping.go rename to vendor/github.com/olivere/elastic/v7/indices_get_mapping.go index 2533ede9d1c240240af194f08c38bcaa54818afc..352016342d07ad8f63d312e90d70bf8e529386e3 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/indices_get_mapping.go +++ b/vendor/github.com/olivere/elastic/v7/indices_get_mapping.go @@ -7,20 +7,27 @@ package elastic import ( "context" "fmt" + "net/http" "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // IndicesGetMappingService retrieves the mapping definitions for an index or // index/type. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-get-mapping.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/indices-get-mapping.html // for details. type IndicesGetMappingService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + index []string typ []string local *bool @@ -44,6 +51,46 @@ func NewIndicesGetMappingService(client *Client) *IndicesGetMappingService { } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *IndicesGetMappingService) Pretty(pretty bool) *IndicesGetMappingService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *IndicesGetMappingService) Human(human bool) *IndicesGetMappingService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *IndicesGetMappingService) ErrorTrace(errorTrace bool) *IndicesGetMappingService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *IndicesGetMappingService) FilterPath(filterPath ...string) *IndicesGetMappingService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *IndicesGetMappingService) Header(name string, value string) *IndicesGetMappingService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *IndicesGetMappingService) Headers(headers http.Header) *IndicesGetMappingService { + s.headers = headers + return s +} + // Index is a list of index names. func (s *IndicesGetMappingService) Index(indices ...string) *IndicesGetMappingService { s.index = append(s.index, indices...) @@ -85,12 +132,6 @@ func (s *IndicesGetMappingService) IgnoreUnavailable(ignoreUnavailable bool) *In return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *IndicesGetMappingService) Pretty(pretty bool) *IndicesGetMappingService { - s.pretty = pretty - return s -} - // buildURL builds the URL for the operation. func (s *IndicesGetMappingService) buildURL() (string, url.Values, error) { var index, typ []string @@ -118,8 +159,17 @@ func (s *IndicesGetMappingService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if s.ignoreUnavailable != nil { params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) @@ -157,9 +207,10 @@ func (s *IndicesGetMappingService) Do(ctx context.Context) (map[string]interface // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, + Method: "GET", + Path: path, + Params: params, + Headers: s.headers, }) if err != nil { return nil, err diff --git a/vendor/gopkg.in/olivere/elastic.v6/indices_get_settings.go b/vendor/github.com/olivere/elastic/v7/indices_get_settings.go similarity index 70% rename from vendor/gopkg.in/olivere/elastic.v6/indices_get_settings.go rename to vendor/github.com/olivere/elastic/v7/indices_get_settings.go index d63afceecb0dc40dccb67754adf987e639934794..2f7e4d49c38ea407dfd498910cd4d5165f688d77 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/indices_get_settings.go +++ b/vendor/github.com/olivere/elastic/v7/indices_get_settings.go @@ -7,20 +7,27 @@ package elastic import ( "context" "fmt" + "net/http" "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // IndicesGetSettingsService allows to retrieve settings of one // or more indices. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-get-settings.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/indices-get-settings.html // for more details. type IndicesGetSettingsService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + index []string name []string ignoreUnavailable *bool @@ -39,6 +46,46 @@ func NewIndicesGetSettingsService(client *Client) *IndicesGetSettingsService { } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *IndicesGetSettingsService) Pretty(pretty bool) *IndicesGetSettingsService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *IndicesGetSettingsService) Human(human bool) *IndicesGetSettingsService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *IndicesGetSettingsService) ErrorTrace(errorTrace bool) *IndicesGetSettingsService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *IndicesGetSettingsService) FilterPath(filterPath ...string) *IndicesGetSettingsService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *IndicesGetSettingsService) Header(name string, value string) *IndicesGetSettingsService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *IndicesGetSettingsService) Headers(headers http.Header) *IndicesGetSettingsService { + s.headers = headers + return s +} + // Index is a list of index names; use `_all` or empty string to perform // the operation on all indices. func (s *IndicesGetSettingsService) Index(indices ...string) *IndicesGetSettingsService { @@ -88,12 +135,6 @@ func (s *IndicesGetSettingsService) Local(local bool) *IndicesGetSettingsService return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *IndicesGetSettingsService) Pretty(pretty bool) *IndicesGetSettingsService { - s.pretty = pretty - return s -} - // buildURL builds the URL for the operation. func (s *IndicesGetSettingsService) buildURL() (string, url.Values, error) { var err error @@ -124,8 +165,17 @@ func (s *IndicesGetSettingsService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if s.ignoreUnavailable != nil { params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) @@ -165,9 +215,10 @@ func (s *IndicesGetSettingsService) Do(ctx context.Context) (map[string]*Indices // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, + Method: "GET", + Path: path, + Params: params, + Headers: s.headers, }) if err != nil { return nil, err diff --git a/vendor/gopkg.in/olivere/elastic.v6/indices_get_template.go b/vendor/github.com/olivere/elastic/v7/indices_get_template.go similarity index 54% rename from vendor/gopkg.in/olivere/elastic.v6/indices_get_template.go rename to vendor/github.com/olivere/elastic/v7/indices_get_template.go index faaa6ee91f0eb0e33d89645ba673e1494ec113b6..aeafe9128eb0bebb82fc3fc04c8e2f8bd14023af 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/indices_get_template.go +++ b/vendor/github.com/olivere/elastic/v7/indices_get_template.go @@ -7,17 +7,24 @@ package elastic import ( "context" "fmt" + "net/http" "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // IndicesGetTemplateService returns an index template. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-templates.html. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/indices-templates.html. type IndicesGetTemplateService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + name []string flatSettings *bool local *bool @@ -31,6 +38,46 @@ func NewIndicesGetTemplateService(client *Client) *IndicesGetTemplateService { } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *IndicesGetTemplateService) Pretty(pretty bool) *IndicesGetTemplateService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *IndicesGetTemplateService) Human(human bool) *IndicesGetTemplateService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *IndicesGetTemplateService) ErrorTrace(errorTrace bool) *IndicesGetTemplateService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *IndicesGetTemplateService) FilterPath(filterPath ...string) *IndicesGetTemplateService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *IndicesGetTemplateService) Header(name string, value string) *IndicesGetTemplateService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *IndicesGetTemplateService) Headers(headers http.Header) *IndicesGetTemplateService { + s.headers = headers + return s +} + // Name is the name of the index template. func (s *IndicesGetTemplateService) Name(name ...string) *IndicesGetTemplateService { s.name = append(s.name, name...) @@ -50,12 +97,6 @@ func (s *IndicesGetTemplateService) Local(local bool) *IndicesGetTemplateService return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *IndicesGetTemplateService) Pretty(pretty bool) *IndicesGetTemplateService { - s.pretty = pretty - return s -} - // buildURL builds the URL for the operation. func (s *IndicesGetTemplateService) buildURL() (string, url.Values, error) { // Build URL @@ -74,8 +115,17 @@ func (s *IndicesGetTemplateService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if s.flatSettings != nil { params.Set("flat_settings", fmt.Sprintf("%v", *s.flatSettings)) @@ -106,9 +156,10 @@ func (s *IndicesGetTemplateService) Do(ctx context.Context) (map[string]*Indices // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, + Method: "GET", + Path: path, + Params: params, + Headers: s.headers, }) if err != nil { return nil, err @@ -124,10 +175,10 @@ func (s *IndicesGetTemplateService) Do(ctx context.Context) (map[string]*Indices // IndicesGetTemplateResponse is the response of IndicesGetTemplateService.Do. type IndicesGetTemplateResponse struct { - Order int `json:"order,omitempty"` - Version int `json:"version,omitempty"` - Template string `json:"template,omitempty"` - Settings map[string]interface{} `json:"settings,omitempty"` - Mappings map[string]interface{} `json:"mappings,omitempty"` - Aliases map[string]interface{} `json:"aliases,omitempty"` + Order int `json:"order,omitempty"` + Version int `json:"version,omitempty"` + IndexPatterns []string `json:"index_patterns,omitempty"` + Settings map[string]interface{} `json:"settings,omitempty"` + Mappings map[string]interface{} `json:"mappings,omitempty"` + Aliases map[string]interface{} `json:"aliases,omitempty"` } diff --git a/vendor/gopkg.in/olivere/elastic.v6/indices_open.go b/vendor/github.com/olivere/elastic/v7/indices_open.go similarity index 59% rename from vendor/gopkg.in/olivere/elastic.v6/indices_open.go rename to vendor/github.com/olivere/elastic/v7/indices_open.go index 4cd4b06f7e60e9e4bcb49af52bd0d031b168c467..81ad90f91bdcd93c960522bb0fa80f1dc6f5b177 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/indices_open.go +++ b/vendor/github.com/olivere/elastic/v7/indices_open.go @@ -7,24 +7,33 @@ package elastic import ( "context" "fmt" + "net/http" "net/url" + "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // IndicesOpenService opens an index. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-open-close.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/indices-open-close.html // for details. type IndicesOpenService struct { - client *Client - pretty bool - index string - timeout string - masterTimeout string - ignoreUnavailable *bool - allowNoIndices *bool - expandWildcards string + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + + index string + timeout string + masterTimeout string + ignoreUnavailable *bool + allowNoIndices *bool + expandWildcards string + waitForActiveShards string } // NewIndicesOpenService creates and initializes a new IndicesOpenService. @@ -32,6 +41,46 @@ func NewIndicesOpenService(client *Client) *IndicesOpenService { return &IndicesOpenService{client: client} } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *IndicesOpenService) Pretty(pretty bool) *IndicesOpenService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *IndicesOpenService) Human(human bool) *IndicesOpenService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *IndicesOpenService) ErrorTrace(errorTrace bool) *IndicesOpenService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *IndicesOpenService) FilterPath(filterPath ...string) *IndicesOpenService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *IndicesOpenService) Header(name string, value string) *IndicesOpenService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *IndicesOpenService) Headers(headers http.Header) *IndicesOpenService { + s.headers = headers + return s +} + // Index is the name of the index to open. func (s *IndicesOpenService) Index(index string) *IndicesOpenService { s.index = index @@ -72,9 +121,11 @@ func (s *IndicesOpenService) ExpandWildcards(expandWildcards string) *IndicesOpe return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *IndicesOpenService) Pretty(pretty bool) *IndicesOpenService { - s.pretty = pretty +// WaitForActiveShards specifies the number of shards that must be allocated +// before the Open operation returns. Valid values are "all" or an integer +// between 0 and number_of_replicas+1 (default: 0) +func (s *IndicesOpenService) WaitForActiveShards(waitForActiveShards string) *IndicesOpenService { + s.waitForActiveShards = waitForActiveShards return s } @@ -90,8 +141,17 @@ func (s *IndicesOpenService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if s.timeout != "" { params.Set("timeout", s.timeout) @@ -108,6 +168,9 @@ func (s *IndicesOpenService) buildURL() (string, url.Values, error) { if s.expandWildcards != "" { params.Set("expand_wildcards", s.expandWildcards) } + if s.waitForActiveShards != "" { + params.Set("wait_for_active_shards", s.waitForActiveShards) + } return path, params, nil } @@ -139,9 +202,10 @@ func (s *IndicesOpenService) Do(ctx context.Context) (*IndicesOpenResponse, erro // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "POST", - Path: path, - Params: params, + Method: "POST", + Path: path, + Params: params, + Headers: s.headers, }) if err != nil { return nil, err diff --git a/vendor/gopkg.in/olivere/elastic.v6/indices_put_alias.go b/vendor/github.com/olivere/elastic/v7/indices_put_alias.go similarity index 77% rename from vendor/gopkg.in/olivere/elastic.v6/indices_put_alias.go rename to vendor/github.com/olivere/elastic/v7/indices_put_alias.go index 4ad84521ef1dd294b98d6dc7f6711dced187ea92..b723eb908adefb953e9c599db5d46439acc34b5e 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/indices_put_alias.go +++ b/vendor/github.com/olivere/elastic/v7/indices_put_alias.go @@ -7,6 +7,7 @@ package elastic import ( "context" "fmt" + "net/http" "net/url" "strings" ) @@ -26,6 +27,7 @@ type AliasAddAction struct { routing string searchRouting string indexRouting string + isWriteIndex *bool } // NewAliasAddAction returns an action to add an alias. @@ -76,6 +78,12 @@ func (a *AliasAddAction) SearchRouting(routing ...string) *AliasAddAction { return a } +// IsWriteIndex associates an is_write_index flag to the alias. +func (a *AliasAddAction) IsWriteIndex(flag bool) *AliasAddAction { + a.isWriteIndex = &flag + return a +} + // Validate checks if the operation is valid. func (a *AliasAddAction) Validate() error { var invalid []string @@ -88,6 +96,9 @@ func (a *AliasAddAction) Validate() error { if len(invalid) > 0 { return fmt.Errorf("missing required fields: %v", invalid) } + if a.isWriteIndex != nil && len(a.index) > 1 { + return fmt.Errorf("more than 1 target index specified in operation with 'is_write_index' flag present") + } return nil } @@ -123,6 +134,9 @@ func (a *AliasAddAction) Source() (interface{}, error) { if len(a.searchRouting) > 0 { act["search_routing"] = a.searchRouting } + if a.isWriteIndex != nil { + act["is_write_index"] = *a.isWriteIndex + } return src, nil } @@ -225,12 +239,18 @@ func (a *AliasRemoveIndexAction) Source() (interface{}, error) { // -- Service -- // AliasService enables users to add or remove an alias. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-aliases.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/indices-aliases.html // for details. type AliasService struct { - client *Client + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + actions []AliasAction - pretty bool } // NewAliasService implements a service to manage aliases. @@ -241,9 +261,43 @@ func NewAliasService(client *Client) *AliasService { return builder } -// Pretty asks Elasticsearch to indent the HTTP response. +// Pretty tells Elasticsearch whether to return a formatted JSON response. func (s *AliasService) Pretty(pretty bool) *AliasService { - s.pretty = pretty + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *AliasService) Human(human bool) *AliasService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *AliasService) ErrorTrace(errorTrace bool) *AliasService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *AliasService) FilterPath(filterPath ...string) *AliasService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *AliasService) Header(name string, value string) *AliasService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *AliasService) Headers(headers http.Header) *AliasService { + s.headers = headers return s } @@ -281,8 +335,17 @@ func (s *AliasService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", fmt.Sprintf("%v", s.pretty)) + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } return path, params, nil } @@ -308,10 +371,11 @@ func (s *AliasService) Do(ctx context.Context) (*AliasResult, error) { // Get response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "POST", - Path: path, - Params: params, - Body: body, + Method: "POST", + Path: path, + Params: params, + Body: body, + Headers: s.headers, }) if err != nil { return nil, err diff --git a/vendor/gopkg.in/olivere/elastic.v6/indices_put_mapping.go b/vendor/github.com/olivere/elastic/v7/indices_put_mapping.go similarity index 71% rename from vendor/gopkg.in/olivere/elastic.v6/indices_put_mapping.go rename to vendor/github.com/olivere/elastic/v7/indices_put_mapping.go index 04254d35bdef6fb2876a22f3ce1ba060a8f6b01b..eae320ac60be34406bfa9369ee2da68cdd928b4d 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/indices_put_mapping.go +++ b/vendor/github.com/olivere/elastic/v7/indices_put_mapping.go @@ -7,21 +7,27 @@ package elastic import ( "context" "fmt" + "net/http" "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // IndicesPutMappingService allows to register specific mapping definition // for a specific type. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-put-mapping.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/indices-put-mapping.html // for details. type IndicesPutMappingService struct { - client *Client - pretty bool - typ string + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + index []string masterTimeout string ignoreUnavailable *bool @@ -47,6 +53,46 @@ func NewIndicesPutMappingService(client *Client) *IndicesPutMappingService { } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *IndicesPutMappingService) Pretty(pretty bool) *IndicesPutMappingService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *IndicesPutMappingService) Human(human bool) *IndicesPutMappingService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *IndicesPutMappingService) ErrorTrace(errorTrace bool) *IndicesPutMappingService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *IndicesPutMappingService) FilterPath(filterPath ...string) *IndicesPutMappingService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *IndicesPutMappingService) Header(name string, value string) *IndicesPutMappingService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *IndicesPutMappingService) Headers(headers http.Header) *IndicesPutMappingService { + s.headers = headers + return s +} + // Index is a list of index names the mapping should be added to // (supports wildcards); use `_all` or omit to add the mapping on all indices. func (s *IndicesPutMappingService) Index(indices ...string) *IndicesPutMappingService { @@ -54,12 +100,6 @@ func (s *IndicesPutMappingService) Index(indices ...string) *IndicesPutMappingSe return s } -// Type is the name of the document type. -func (s *IndicesPutMappingService) Type(typ string) *IndicesPutMappingService { - s.typ = typ - return s -} - // Timeout is an explicit operation timeout. func (s *IndicesPutMappingService) Timeout(timeout string) *IndicesPutMappingService { s.timeout = timeout @@ -101,12 +141,6 @@ func (s *IndicesPutMappingService) UpdateAllTypes(updateAllTypes bool) *IndicesP return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *IndicesPutMappingService) Pretty(pretty bool) *IndicesPutMappingService { - s.pretty = pretty - return s -} - // BodyJson contains the mapping definition. func (s *IndicesPutMappingService) BodyJson(mapping map[string]interface{}) *IndicesPutMappingService { s.bodyJson = mapping @@ -121,28 +155,26 @@ func (s *IndicesPutMappingService) BodyString(mapping string) *IndicesPutMapping // buildURL builds the URL for the operation. func (s *IndicesPutMappingService) buildURL() (string, url.Values, error) { - var err error - var path string - - // Build URL: Typ MUST be specified and is verified in Validate. - if len(s.index) > 0 { - path, err = uritemplates.Expand("/{index}/_mapping/{type}", map[string]string{ - "index": strings.Join(s.index, ","), - "type": s.typ, - }) - } else { - path, err = uritemplates.Expand("/_mapping/{type}", map[string]string{ - "type": s.typ, - }) - } + path, err := uritemplates.Expand("/{index}/_mapping", map[string]string{ + "index": strings.Join(s.index, ","), + }) if err != nil { return "", url.Values{}, err } // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if s.ignoreUnavailable != nil { params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) @@ -168,8 +200,8 @@ func (s *IndicesPutMappingService) buildURL() (string, url.Values, error) { // Validate checks if the operation is valid. func (s *IndicesPutMappingService) Validate() error { var invalid []string - if s.typ == "" { - invalid = append(invalid, "Type") + if len(s.index) == 0 { + invalid = append(invalid, "Index") } if s.bodyString == "" && s.bodyJson == nil { invalid = append(invalid, "BodyJson") @@ -203,10 +235,11 @@ func (s *IndicesPutMappingService) Do(ctx context.Context) (*PutMappingResponse, // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "PUT", - Path: path, - Params: params, - Body: body, + Method: "PUT", + Path: path, + Params: params, + Body: body, + Headers: s.headers, }) if err != nil { return nil, err diff --git a/vendor/gopkg.in/olivere/elastic.v6/indices_put_settings.go b/vendor/github.com/olivere/elastic/v7/indices_put_settings.go similarity index 71% rename from vendor/gopkg.in/olivere/elastic.v6/indices_put_settings.go rename to vendor/github.com/olivere/elastic/v7/indices_put_settings.go index 92308c483770a40fc8a0c437c1b50e578c85646d..c8c081163af8660cb4c057bb46bd85021f32f71e 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/indices_put_settings.go +++ b/vendor/github.com/olivere/elastic/v7/indices_put_settings.go @@ -7,20 +7,27 @@ package elastic import ( "context" "fmt" + "net/http" "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // IndicesPutSettingsService changes specific index level settings in // real time. // // See the documentation at -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-update-settings.html. +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/indices-update-settings.html. type IndicesPutSettingsService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + index []string allowNoIndices *bool expandWildcards string @@ -39,6 +46,46 @@ func NewIndicesPutSettingsService(client *Client) *IndicesPutSettingsService { } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *IndicesPutSettingsService) Pretty(pretty bool) *IndicesPutSettingsService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *IndicesPutSettingsService) Human(human bool) *IndicesPutSettingsService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *IndicesPutSettingsService) ErrorTrace(errorTrace bool) *IndicesPutSettingsService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *IndicesPutSettingsService) FilterPath(filterPath ...string) *IndicesPutSettingsService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *IndicesPutSettingsService) Header(name string, value string) *IndicesPutSettingsService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *IndicesPutSettingsService) Headers(headers http.Header) *IndicesPutSettingsService { + s.headers = headers + return s +} + // Index is a list of index names the mapping should be added to // (supports wildcards); use `_all` or omit to add the mapping on all indices. func (s *IndicesPutSettingsService) Index(indices ...string) *IndicesPutSettingsService { @@ -80,12 +127,6 @@ func (s *IndicesPutSettingsService) MasterTimeout(masterTimeout string) *Indices return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *IndicesPutSettingsService) Pretty(pretty bool) *IndicesPutSettingsService { - s.pretty = pretty - return s -} - // BodyJson is documented as: The index settings to be updated. func (s *IndicesPutSettingsService) BodyJson(body interface{}) *IndicesPutSettingsService { s.bodyJson = body @@ -117,8 +158,17 @@ func (s *IndicesPutSettingsService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if s.allowNoIndices != nil { params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) @@ -166,10 +216,11 @@ func (s *IndicesPutSettingsService) Do(ctx context.Context) (*IndicesPutSettings // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "PUT", - Path: path, - Params: params, - Body: body, + Method: "PUT", + Path: path, + Params: params, + Body: body, + Headers: s.headers, }) if err != nil { return nil, err diff --git a/vendor/gopkg.in/olivere/elastic.v6/indices_put_template.go b/vendor/github.com/olivere/elastic/v7/indices_put_template.go similarity index 71% rename from vendor/gopkg.in/olivere/elastic.v6/indices_put_template.go rename to vendor/github.com/olivere/elastic/v7/indices_put_template.go index a8750ea3930d762b8fae6b3b4d8cc05855ab85ed..4ced8e8f496a0f216cc5ce202ed9d7b7edd5ba0a 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/indices_put_template.go +++ b/vendor/github.com/olivere/elastic/v7/indices_put_template.go @@ -7,16 +7,24 @@ package elastic import ( "context" "fmt" + "net/http" "net/url" + "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // IndicesPutTemplateService creates or updates index mappings. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-templates.html. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/indices-templates.html. type IndicesPutTemplateService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + name string cause string order interface{} @@ -36,6 +44,46 @@ func NewIndicesPutTemplateService(client *Client) *IndicesPutTemplateService { } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *IndicesPutTemplateService) Pretty(pretty bool) *IndicesPutTemplateService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *IndicesPutTemplateService) Human(human bool) *IndicesPutTemplateService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *IndicesPutTemplateService) ErrorTrace(errorTrace bool) *IndicesPutTemplateService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *IndicesPutTemplateService) FilterPath(filterPath ...string) *IndicesPutTemplateService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *IndicesPutTemplateService) Header(name string, value string) *IndicesPutTemplateService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *IndicesPutTemplateService) Headers(headers http.Header) *IndicesPutTemplateService { + s.headers = headers + return s +} + // Name is the name of the index template. func (s *IndicesPutTemplateService) Name(name string) *IndicesPutTemplateService { s.name = name @@ -87,12 +135,6 @@ func (s *IndicesPutTemplateService) Create(create bool) *IndicesPutTemplateServi return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *IndicesPutTemplateService) Pretty(pretty bool) *IndicesPutTemplateService { - s.pretty = pretty - return s -} - // BodyJson is documented as: The template definition. func (s *IndicesPutTemplateService) BodyJson(body interface{}) *IndicesPutTemplateService { s.bodyJson = body @@ -117,8 +159,17 @@ func (s *IndicesPutTemplateService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if s.order != nil { params.Set("order", fmt.Sprintf("%v", s.order)) @@ -182,10 +233,11 @@ func (s *IndicesPutTemplateService) Do(ctx context.Context) (*IndicesPutTemplate // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "PUT", - Path: path, - Params: params, - Body: body, + Method: "PUT", + Path: path, + Params: params, + Body: body, + Headers: s.headers, }) if err != nil { return nil, err diff --git a/vendor/github.com/olivere/elastic/v7/indices_refresh.go b/vendor/github.com/olivere/elastic/v7/indices_refresh.go new file mode 100644 index 0000000000000000000000000000000000000000..4dfdbe40fed22d89453d6db7d6eebc40c919415a --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/indices_refresh.go @@ -0,0 +1,149 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/http" + "net/url" + "strings" + + "github.com/olivere/elastic/v7/uritemplates" +) + +// RefreshService explicitly refreshes one or more indices. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/indices-refresh.html. +type RefreshService struct { + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + + index []string +} + +// NewRefreshService creates a new instance of RefreshService. +func NewRefreshService(client *Client) *RefreshService { + builder := &RefreshService{ + client: client, + } + return builder +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *RefreshService) Pretty(pretty bool) *RefreshService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *RefreshService) Human(human bool) *RefreshService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *RefreshService) ErrorTrace(errorTrace bool) *RefreshService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *RefreshService) FilterPath(filterPath ...string) *RefreshService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *RefreshService) Header(name string, value string) *RefreshService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *RefreshService) Headers(headers http.Header) *RefreshService { + s.headers = headers + return s +} + +// Index specifies the indices to refresh. +func (s *RefreshService) Index(index ...string) *RefreshService { + s.index = append(s.index, index...) + return s +} + +// buildURL builds the URL for the operation. +func (s *RefreshService) buildURL() (string, url.Values, error) { + var err error + var path string + + if len(s.index) > 0 { + path, err = uritemplates.Expand("/{index}/_refresh", map[string]string{ + "index": strings.Join(s.index, ","), + }) + } else { + path = "/_refresh" + } + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } + return path, params, nil +} + +// Do executes the request. +func (s *RefreshService) Do(ctx context.Context) (*RefreshResult, error) { + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "POST", + Path: path, + Params: params, + Headers: s.headers, + }) + if err != nil { + return nil, err + } + + // Return result + ret := new(RefreshResult) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// -- Result of a refresh request. + +// RefreshResult is the outcome of RefreshService.Do. +type RefreshResult struct { + Shards *ShardsInfo `json:"_shards,omitempty"` +} diff --git a/vendor/gopkg.in/olivere/elastic.v6/indices_rollover.go b/vendor/github.com/olivere/elastic/v7/indices_rollover.go similarity index 78% rename from vendor/gopkg.in/olivere/elastic.v6/indices_rollover.go rename to vendor/github.com/olivere/elastic/v7/indices_rollover.go index 5f5fed338bf885331655a41bbb61bc668216b53e..ce72ef1e67ebc74475edef27e722b34c5137504a 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/indices_rollover.go +++ b/vendor/github.com/olivere/elastic/v7/indices_rollover.go @@ -8,19 +8,27 @@ import ( "context" "encoding/json" "fmt" + "net/http" "net/url" + "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // IndicesRolloverService rolls an alias over to a new index when the // existing index is considered to be too large or too old. // // It is documented at -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-rollover-index.html. +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/indices-rollover-index.html. type IndicesRolloverService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + dryRun bool newIndex string alias string @@ -44,6 +52,46 @@ func NewIndicesRolloverService(client *Client) *IndicesRolloverService { } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *IndicesRolloverService) Pretty(pretty bool) *IndicesRolloverService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *IndicesRolloverService) Human(human bool) *IndicesRolloverService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *IndicesRolloverService) ErrorTrace(errorTrace bool) *IndicesRolloverService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *IndicesRolloverService) FilterPath(filterPath ...string) *IndicesRolloverService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *IndicesRolloverService) Header(name string, value string) *IndicesRolloverService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *IndicesRolloverService) Headers(headers http.Header) *IndicesRolloverService { + s.headers = headers + return s +} + // Alias is the name of the alias to rollover. func (s *IndicesRolloverService) Alias(alias string) *IndicesRolloverService { s.alias = alias @@ -75,12 +123,6 @@ func (s *IndicesRolloverService) WaitForActiveShards(waitForActiveShards string) return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *IndicesRolloverService) Pretty(pretty bool) *IndicesRolloverService { - s.pretty = pretty - return s -} - // DryRun, when set, specifies that only conditions are checked without // performing the actual rollover. func (s *IndicesRolloverService) DryRun(dryRun bool) *IndicesRolloverService { @@ -188,8 +230,17 @@ func (s *IndicesRolloverService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if s.dryRun { params.Set("dry_run", "true") @@ -243,10 +294,11 @@ func (s *IndicesRolloverService) Do(ctx context.Context) (*IndicesRolloverRespon // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "POST", - Path: path, - Params: params, - Body: body, + Method: "POST", + Path: path, + Params: params, + Body: body, + Headers: s.headers, }) if err != nil { return nil, err diff --git a/vendor/gopkg.in/olivere/elastic.v6/indices_segments.go b/vendor/github.com/olivere/elastic/v7/indices_segments.go similarity index 79% rename from vendor/gopkg.in/olivere/elastic.v6/indices_segments.go rename to vendor/github.com/olivere/elastic/v7/indices_segments.go index 92ad8339f11e2c9136a89258463e2543682a925c..01c5c8dbd2194b111fbc1b15b1ddf102b356e686 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/indices_segments.go +++ b/vendor/github.com/olivere/elastic/v7/indices_segments.go @@ -8,10 +8,11 @@ import ( "context" "encoding/json" "fmt" + "net/http" "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // IndicesSegmentsService provides low level segments information that a @@ -20,15 +21,20 @@ import ( // optimization information, data "wasted" on deletes, and so on. // // Find further documentation at -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-segments.html. +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/indices-segments.html. type IndicesSegmentsService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + index []string allowNoIndices *bool expandWildcards string ignoreUnavailable *bool - human *bool operationThreading interface{} verbose *bool } @@ -40,6 +46,46 @@ func NewIndicesSegmentsService(client *Client) *IndicesSegmentsService { } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *IndicesSegmentsService) Pretty(pretty bool) *IndicesSegmentsService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *IndicesSegmentsService) Human(human bool) *IndicesSegmentsService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *IndicesSegmentsService) ErrorTrace(errorTrace bool) *IndicesSegmentsService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *IndicesSegmentsService) FilterPath(filterPath ...string) *IndicesSegmentsService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *IndicesSegmentsService) Header(name string, value string) *IndicesSegmentsService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *IndicesSegmentsService) Headers(headers http.Header) *IndicesSegmentsService { + s.headers = headers + return s +} + // Index is a comma-separated list of index names; use `_all` or empty string // to perform the operation on all indices. func (s *IndicesSegmentsService) Index(indices ...string) *IndicesSegmentsService { @@ -69,12 +115,6 @@ func (s *IndicesSegmentsService) IgnoreUnavailable(ignoreUnavailable bool) *Indi return s } -// Human, when set to true, returns time and byte-values in human-readable format. -func (s *IndicesSegmentsService) Human(human bool) *IndicesSegmentsService { - s.human = &human - return s -} - // OperationThreading is undocumented in Elasticsearch as of now. func (s *IndicesSegmentsService) OperationThreading(operationThreading interface{}) *IndicesSegmentsService { s.operationThreading = operationThreading @@ -87,12 +127,6 @@ func (s *IndicesSegmentsService) Verbose(verbose bool) *IndicesSegmentsService { return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *IndicesSegmentsService) Pretty(pretty bool) *IndicesSegmentsService { - s.pretty = pretty - return s -} - // buildURL builds the URL for the operation. func (s *IndicesSegmentsService) buildURL() (string, url.Values, error) { var err error @@ -111,8 +145,17 @@ func (s *IndicesSegmentsService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if s.allowNoIndices != nil { params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) @@ -123,9 +166,6 @@ func (s *IndicesSegmentsService) buildURL() (string, url.Values, error) { if s.ignoreUnavailable != nil { params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) } - if s.human != nil { - params.Set("human", fmt.Sprintf("%v", *s.human)) - } if s.operationThreading != nil { params.Set("operation_threading", fmt.Sprintf("%v", s.operationThreading)) } @@ -155,9 +195,10 @@ func (s *IndicesSegmentsService) Do(ctx context.Context) (*IndicesSegmentsRespon // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, + Method: "GET", + Path: path, + Params: params, + Headers: s.headers, }) if err != nil { return nil, err @@ -174,7 +215,7 @@ func (s *IndicesSegmentsService) Do(ctx context.Context) (*IndicesSegmentsRespon // IndicesSegmentsResponse is the response of IndicesSegmentsService.Do. type IndicesSegmentsResponse struct { // Shards provides information returned from shards. - Shards shardsInfo `json:"_shards"` + Shards *ShardsInfo `json:"_shards"` // Indices provides a map into the stats of an index. // The key of the map is the index name. diff --git a/vendor/gopkg.in/olivere/elastic.v6/indices_shrink.go b/vendor/github.com/olivere/elastic/v7/indices_shrink.go similarity index 68% rename from vendor/gopkg.in/olivere/elastic.v6/indices_shrink.go rename to vendor/github.com/olivere/elastic/v7/indices_shrink.go index 275614bfdc8feace77e3eeeb8bdbcbe01c23364a..76cec613b44dcd0701aa94037e66f22253733315 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/indices_shrink.go +++ b/vendor/github.com/olivere/elastic/v7/indices_shrink.go @@ -8,19 +8,27 @@ import ( "context" "encoding/json" "fmt" + "net/http" "net/url" + "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // IndicesShrinkService allows you to shrink an existing index into a // new index with fewer primary shards. // // For further details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-shrink-index.html. +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/indices-shrink-index.html. type IndicesShrinkService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + source string target string masterTimeout string @@ -37,6 +45,46 @@ func NewIndicesShrinkService(client *Client) *IndicesShrinkService { } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *IndicesShrinkService) Pretty(pretty bool) *IndicesShrinkService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *IndicesShrinkService) Human(human bool) *IndicesShrinkService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *IndicesShrinkService) ErrorTrace(errorTrace bool) *IndicesShrinkService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *IndicesShrinkService) FilterPath(filterPath ...string) *IndicesShrinkService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *IndicesShrinkService) Header(name string, value string) *IndicesShrinkService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *IndicesShrinkService) Headers(headers http.Header) *IndicesShrinkService { + s.headers = headers + return s +} + // Source is the name of the source index to shrink. func (s *IndicesShrinkService) Source(source string) *IndicesShrinkService { s.source = source @@ -68,12 +116,6 @@ func (s *IndicesShrinkService) WaitForActiveShards(waitForActiveShards string) * return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *IndicesShrinkService) Pretty(pretty bool) *IndicesShrinkService { - s.pretty = pretty - return s -} - // BodyJson is the configuration for the target index (`settings` and `aliases`) // defined as a JSON-serializable instance to be sent as the request body. func (s *IndicesShrinkService) BodyJson(body interface{}) *IndicesShrinkService { @@ -101,8 +143,17 @@ func (s *IndicesShrinkService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if s.masterTimeout != "" { params.Set("master_timeout", s.masterTimeout) @@ -154,10 +205,11 @@ func (s *IndicesShrinkService) Do(ctx context.Context) (*IndicesShrinkResponse, // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "POST", - Path: path, - Params: params, - Body: body, + Method: "POST", + Path: path, + Params: params, + Body: body, + Headers: s.headers, }) if err != nil { return nil, err diff --git a/vendor/github.com/olivere/elastic/v7/indices_stats.go b/vendor/github.com/olivere/elastic/v7/indices_stats.go new file mode 100644 index 0000000000000000000000000000000000000000..397d63861106095a4cb20a9557225b9aecb22c86 --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/indices_stats.go @@ -0,0 +1,530 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/http" + "net/url" + "strings" + + "github.com/olivere/elastic/v7/uritemplates" +) + +// IndicesStatsService provides stats on various metrics of one or more +// indices. See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/indices-stats.html. +type IndicesStatsService struct { + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + + metric []string + index []string + level string + types []string + completionFields []string + fielddataFields []string + fields []string + groups []string +} + +// NewIndicesStatsService creates a new IndicesStatsService. +func NewIndicesStatsService(client *Client) *IndicesStatsService { + return &IndicesStatsService{ + client: client, + index: make([]string, 0), + metric: make([]string, 0), + completionFields: make([]string, 0), + fielddataFields: make([]string, 0), + fields: make([]string, 0), + groups: make([]string, 0), + types: make([]string, 0), + } +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *IndicesStatsService) Pretty(pretty bool) *IndicesStatsService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *IndicesStatsService) Human(human bool) *IndicesStatsService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *IndicesStatsService) ErrorTrace(errorTrace bool) *IndicesStatsService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *IndicesStatsService) FilterPath(filterPath ...string) *IndicesStatsService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *IndicesStatsService) Header(name string, value string) *IndicesStatsService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *IndicesStatsService) Headers(headers http.Header) *IndicesStatsService { + s.headers = headers + return s +} + +// Metric limits the information returned the specific metrics. Options are: +// docs, store, indexing, get, search, completion, fielddata, flush, merge, +// query_cache, refresh, suggest, and warmer. +func (s *IndicesStatsService) Metric(metric ...string) *IndicesStatsService { + s.metric = append(s.metric, metric...) + return s +} + +// Index is the list of index names; use `_all` or empty string to perform +// the operation on all indices. +func (s *IndicesStatsService) Index(indices ...string) *IndicesStatsService { + s.index = append(s.index, indices...) + return s +} + +// Type is a list of document types for the `indexing` index metric. +func (s *IndicesStatsService) Type(types ...string) *IndicesStatsService { + s.types = append(s.types, types...) + return s +} + +// Level returns stats aggregated at cluster, index or shard level. +func (s *IndicesStatsService) Level(level string) *IndicesStatsService { + s.level = level + return s +} + +// CompletionFields is a list of fields for `fielddata` and `suggest` +// index metric (supports wildcards). +func (s *IndicesStatsService) CompletionFields(completionFields ...string) *IndicesStatsService { + s.completionFields = append(s.completionFields, completionFields...) + return s +} + +// FielddataFields is a list of fields for `fielddata` index metric (supports wildcards). +func (s *IndicesStatsService) FielddataFields(fielddataFields ...string) *IndicesStatsService { + s.fielddataFields = append(s.fielddataFields, fielddataFields...) + return s +} + +// Fields is a list of fields for `fielddata` and `completion` index metric +// (supports wildcards). +func (s *IndicesStatsService) Fields(fields ...string) *IndicesStatsService { + s.fields = append(s.fields, fields...) + return s +} + +// Groups is a list of search groups for `search` index metric. +func (s *IndicesStatsService) Groups(groups ...string) *IndicesStatsService { + s.groups = append(s.groups, groups...) + return s +} + +// buildURL builds the URL for the operation. +func (s *IndicesStatsService) buildURL() (string, url.Values, error) { + var err error + var path string + if len(s.index) > 0 && len(s.metric) > 0 { + path, err = uritemplates.Expand("/{index}/_stats/{metric}", map[string]string{ + "index": strings.Join(s.index, ","), + "metric": strings.Join(s.metric, ","), + }) + } else if len(s.index) > 0 { + path, err = uritemplates.Expand("/{index}/_stats", map[string]string{ + "index": strings.Join(s.index, ","), + }) + } else if len(s.metric) > 0 { + path, err = uritemplates.Expand("/_stats/{metric}", map[string]string{ + "metric": strings.Join(s.metric, ","), + }) + } else { + path = "/_stats" + } + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } + if len(s.groups) > 0 { + params.Set("groups", strings.Join(s.groups, ",")) + } + if s.level != "" { + params.Set("level", s.level) + } + if len(s.types) > 0 { + params.Set("types", strings.Join(s.types, ",")) + } + if len(s.completionFields) > 0 { + params.Set("completion_fields", strings.Join(s.completionFields, ",")) + } + if len(s.fielddataFields) > 0 { + params.Set("fielddata_fields", strings.Join(s.fielddataFields, ",")) + } + if len(s.fields) > 0 { + params.Set("fields", strings.Join(s.fields, ",")) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *IndicesStatsService) Validate() error { + return nil +} + +// Do executes the operation. +func (s *IndicesStatsService) Do(ctx context.Context) (*IndicesStatsResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "GET", + Path: path, + Params: params, + Headers: s.headers, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(IndicesStatsResponse) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// IndicesStatsResponse is the response of IndicesStatsService.Do. +type IndicesStatsResponse struct { + // Shards provides information returned from shards. + Shards *ShardsInfo `json:"_shards"` + + // All provides summary stats about all indices. + All *IndexStats `json:"_all,omitempty"` + + // Indices provides a map into the stats of an index. The key of the + // map is the index name. + Indices map[string]*IndexStats `json:"indices,omitempty"` +} + +// IndexStats is index stats for a specific index. +type IndexStats struct { + UUID string `json:"uuid,omitempty"` + Primaries *IndexStatsDetails `json:"primaries,omitempty"` + Total *IndexStatsDetails `json:"total,omitempty"` + Shards map[string][]*IndexStatsDetails `json:"shards,omitempty"` +} + +type IndexStatsDetails struct { + Routing *IndexStatsRouting `json:"routing,omitempty"` + Docs *IndexStatsDocs `json:"docs,omitempty"` + Store *IndexStatsStore `json:"store,omitempty"` + Indexing *IndexStatsIndexing `json:"indexing,omitempty"` + Get *IndexStatsGet `json:"get,omitempty"` + Search *IndexStatsSearch `json:"search,omitempty"` + Merges *IndexStatsMerges `json:"merges,omitempty"` + Refresh *IndexStatsRefresh `json:"refresh,omitempty"` + Recovery *IndexStatsRecovery `json:"recovery,omitempty"` + Flush *IndexStatsFlush `json:"flush,omitempty"` + Warmer *IndexStatsWarmer `json:"warmer,omitempty"` + FilterCache *IndexStatsFilterCache `json:"filter_cache,omitempty"` + IdCache *IndexStatsIdCache `json:"id_cache,omitempty"` + Fielddata *IndexStatsFielddata `json:"fielddata,omitempty"` + Percolate *IndexStatsPercolate `json:"percolate,omitempty"` + Completion *IndexStatsCompletion `json:"completion,omitempty"` + Segments *IndexStatsSegments `json:"segments,omitempty"` + Translog *IndexStatsTranslog `json:"translog,omitempty"` + Suggest *IndexStatsSuggest `json:"suggest,omitempty"` + QueryCache *IndexStatsQueryCache `json:"query_cache,omitempty"` + RequestCache *IndexStatsRequestCache `json:"request_cache,omitempty"` + Commit *IndexStatsCommit `json:"commit,omitempty"` + SeqNo *IndexStatsSeqNo `json:"seq_no,omitempty"` + RetentionLeases *IndexStatsRetentionLeases `json:"retention_leases,omitempty"` + ShardPath *IndexStatsShardPath `json:"shard_path,omitempty"` +} + +type IndexStatsRouting struct { + State string `json:"state"` // e.g. "STARTED" + Primary bool `json:"primary"` + Node string `json:"node"` // e.g. "-aXnGv4oTW6bIIl0db3eCg" + RelocatingNode *string `json:"relocating_node"` +} + +type IndexStatsShardPath struct { + StatePath string `json:"state_path"` // e.g. "/usr/share/elasticsearch/data/nodes/0" + DataPath string `json:"data_path"` // e.g. "/usr/share/elasticsearch/data/nodes/0" + IsCustomDataPath bool `json:"is_custom_data_path"` +} + +type IndexStatsDocs struct { + Count int64 `json:"count,omitempty"` + Deleted int64 `json:"deleted,omitempty"` +} + +type IndexStatsStore struct { + Size string `json:"size,omitempty"` // human size, e.g. 119.3mb + SizeInBytes int64 `json:"size_in_bytes,omitempty"` +} + +type IndexStatsIndexing struct { + IndexTotal int64 `json:"index_total,omitempty"` + IndexTime string `json:"index_time,omitempty"` + IndexTimeInMillis int64 `json:"index_time_in_millis,omitempty"` + IndexCurrent int64 `json:"index_current,omitempty"` + IndexFailed int64 `json:"index_failed,omitempty"` + DeleteTotal int64 `json:"delete_total,omitempty"` + DeleteTime string `json:"delete_time,omitempty"` + DeleteTimeInMillis int64 `json:"delete_time_in_millis,omitempty"` + DeleteCurrent int64 `json:"delete_current,omitempty"` + NoopUpdateTotal int64 `json:"noop_update_total,omitempty"` + IsThrottled bool `json:"is_throttled,omitempty"` + ThrottleTime string `json:"throttle_time,omitempty"` + ThrottleTimeInMillis int64 `json:"throttle_time_in_millis,omitempty"` +} + +type IndexStatsGet struct { + Total int64 `json:"total,omitempty"` + GetTime string `json:"getTime,omitempty"` // 7.4.0 uses "getTime", earlier versions used "get_time" + TimeInMillis int64 `json:"time_in_millis,omitempty"` + ExistsTotal int64 `json:"exists_total,omitempty"` + ExistsTime string `json:"exists_time,omitempty"` + ExistsTimeInMillis int64 `json:"exists_time_in_millis,omitempty"` + MissingTotal int64 `json:"missing_total,omitempty"` + MissingTime string `json:"missing_time,omitempty"` + MissingTimeInMillis int64 `json:"missing_time_in_millis,omitempty"` + Current int64 `json:"current,omitempty"` +} + +type IndexStatsSearch struct { + OpenContexts int64 `json:"open_contexts,omitempty"` + QueryTotal int64 `json:"query_total,omitempty"` + QueryTime string `json:"query_time,omitempty"` + QueryTimeInMillis int64 `json:"query_time_in_millis,omitempty"` + QueryCurrent int64 `json:"query_current,omitempty"` + FetchTotal int64 `json:"fetch_total,omitempty"` + FetchTime string `json:"fetch_time,omitempty"` + FetchTimeInMillis int64 `json:"fetch_time_in_millis,omitempty"` + FetchCurrent int64 `json:"fetch_current,omitempty"` + ScrollTotal int64 `json:"scroll_total,omitempty"` + ScrollTime string `json:"scroll_time,omitempty"` + ScrollTimeInMillis int64 `json:"scroll_time_in_millis,omitempty"` + ScrollCurrent int64 `json:"scroll_current,omitempty"` + SuggestTotal int64 `json:"suggest_total,omitempty"` + SuggestTime string `json:"suggest_time,omitempty"` + SuggestTimeInMillis int64 `json:"suggest_time_in_millis,omitempty"` + SuggestCurrent int64 `json:"suggest_current,omitempty"` +} + +type IndexStatsMerges struct { + Current int64 `json:"current,omitempty"` + CurrentDocs int64 `json:"current_docs,omitempty"` + CurrentSize string `json:"current_size,omitempty"` + CurrentSizeInBytes int64 `json:"current_size_in_bytes,omitempty"` + Total int64 `json:"total,omitempty"` + TotalTime string `json:"total_time,omitempty"` + TotalTimeInMillis int64 `json:"total_time_in_millis,omitempty"` + TotalDocs int64 `json:"total_docs,omitempty"` + TotalSize string `json:"total_size,omitempty"` + TotalSizeInBytes int64 `json:"total_size_in_bytes,omitempty"` + TotalStoppedTime string `json:"total_stopped_time,omitempty"` + TotalStoppedTimeInMillis int64 `json:"total_stopped_time_in_millis,omitempty"` + TotalThrottledTime string `json:"total_throttled_time,omitempty"` + TotalThrottledTimeInMillis int64 `json:"total_throttled_time_in_millis,omitempty"` + TotalAutoThrottle string `json:"total_auto_throttle,omitempty"` + TotalAutoThrottleInBytes int64 `json:"total_auto_throttle_in_bytes,omitempty"` +} + +type IndexStatsRefresh struct { + Total int64 `json:"total,omitempty"` + TotalTime string `json:"total_time,omitempty"` + TotalTimeInMillis int64 `json:"total_time_in_millis,omitempty"` + ExternalTotal int64 `json:"external_total,omitempty"` + ExternalTotalTime string `json:"external_total_time,omitempty"` + ExternalTotalTimeInMillis int64 `json:"external_total_time_in_millis,omitempty"` + Listeners int64 `json:"listeners,omitempty"` +} + +type IndexStatsRecovery struct { + CurrentAsSource int64 `json:"current_as_source,omitempty"` + CurrentAsTarget int64 `json:"current_as_target,omitempty"` + ThrottleTime string `json:"throttle_time,omitempty"` + ThrottleTimeInMillis int64 `json:"throttle_time_in_millis,omitempty"` +} + +type IndexStatsFlush struct { + Total int64 `json:"total,omitempty"` + TotalTime string `json:"total_time,omitempty"` + TotalTimeInMillis int64 `json:"total_time_in_millis,omitempty"` + Periodic int64 `json:"periodic,omitempty"` +} + +type IndexStatsWarmer struct { + Current int64 `json:"current,omitempty"` + Total int64 `json:"total,omitempty"` + TotalTime string `json:"total_time,omitempty"` + TotalTimeInMillis int64 `json:"total_time_in_millis,omitempty"` +} + +type IndexStatsRequestCache struct { + MemorySize string `json:"memory_size,omitempty"` + MemorySizeInBytes int64 `json:"memory_size_in_bytes,omitempty"` + Evictions int64 `json:"evictions,omitempty"` + HitCount int64 `json:"hit_count,omitempty"` + MissCount int64 `json:"miss_count,omitempty"` +} + +type IndexStatsCommit struct { + ID string `json:"id,omitempty"` // lucene commit ID in base64, e.g. "m2tDMYHzSpSV6zJH0lIAnA==" + Generation int64 `json:"generation,omitempty"` + UserData map[string]string `json:"user_data,omitempty"` + NumDocs int64 `json:"num_docs,omitempty"` +} + +type IndexStatsFilterCache struct { + MemorySize string `json:"memory_size,omitempty"` + MemorySizeInBytes int64 `json:"memory_size_in_bytes,omitempty"` + Evictions int64 `json:"evictions,omitempty"` +} + +type IndexStatsIdCache struct { + MemorySize string `json:"memory_size,omitempty"` + MemorySizeInBytes int64 `json:"memory_size_in_bytes,omitempty"` +} + +type IndexStatsFielddata struct { + MemorySize string `json:"memory_size,omitempty"` + MemorySizeInBytes int64 `json:"memory_size_in_bytes,omitempty"` + Evictions int64 `json:"evictions,omitempty"` +} + +type IndexStatsPercolate struct { + Total int64 `json:"total,omitempty"` + GetTime string `json:"get_time,omitempty"` + TimeInMillis int64 `json:"time_in_millis,omitempty"` + Current int64 `json:"current,omitempty"` + MemorySize string `json:"memory_size,omitempty"` + MemorySizeInBytes int64 `json:"memory_size_in_bytes,omitempty"` + Queries int64 `json:"queries,omitempty"` +} + +type IndexStatsCompletion struct { + Size string `json:"size,omitempty"` + SizeInBytes int64 `json:"size_in_bytes,omitempty"` +} + +type IndexStatsSegments struct { + Count int64 `json:"count"` + Memory string `json:"memory"` // e.g. "61.3kb" + MemoryInBytes int64 `json:"memory_in_bytes"` + TermsMemory string `json:"terms_memory"` // e.g. "61.3kb" + TermsMemoryInBytes int64 `json:"terms_memory_in_bytes"` + StoredFieldsMemory string `json:"stored_fields_memory"` // e.g. "61.3kb" + StoredFieldsMemoryInBytes int64 `json:"stored_fields_memory_in_bytes"` + TermVectorsMemory string `json:"term_vectors_memory"` // e.g. "61.3kb" + TermVectorsMemoryInBytes int64 `json:"term_vectors_memory_in_bytes"` + NormsMemory string `json:"norms_memory"` // e.g. "61.3kb" + NormsMemoryInBytes int64 `json:"norms_memory_in_bytes"` + PointsMemory string `json:"points_memory"` // e.g. "61.3kb" + PointsMemoryInBytes int64 `json:"points_memory_in_bytes"` + DocValuesMemory string `json:"doc_values_memory"` // e.g. "61.3kb" + DocValuesMemoryInBytes int64 `json:"doc_values_memory_in_bytes"` + IndexWriterMemory string `json:"index_writer_memory"` // e.g. "61.3kb" + IndexWriterMemoryInBytes int64 `json:"index_writer_memory_in_bytes"` + VersionMapMemory string `json:"version_map_memory"` // e.g. "61.3kb" + VersionMapMemoryInBytes int64 `json:"version_map_memory_in_bytes"` + FixedBitSet string `json:"fixed_bit_set"` // e.g. "61.3kb" + FixedBitSetInBytes int64 `json:"fixed_bit_set_memory_in_bytes"` + MaxUnsafeAutoIDTimestamp int64 `json:"max_unsafe_auto_id_timestamp"` + FileSizes map[string]*ClusterStatsIndicesSegmentsFile `json:"file_sizes"` +} + +type IndexStatsTranslog struct { + Operations int64 `json:"operations,omitempty"` + Size string `json:"size,omitempty"` + SizeInBytes int64 `json:"size_in_bytes,omitempty"` + UncommittedOperations int64 `json:"uncommitted_operations,omitempty"` + UncommittedSize string `json:"uncommitted_size,omitempty"` + UncommittedSizeInBytes int64 `json:"uncommitted_size_in_bytes,omitempty"` + EarliestLastModifiedAge int64 `json:"earliest_last_modified_age,omitempty"` +} + +type IndexStatsSuggest struct { + Total int64 `json:"total,omitempty"` + Time string `json:"time,omitempty"` + TimeInMillis int64 `json:"time_in_millis,omitempty"` + Current int64 `json:"current,omitempty"` +} + +type IndexStatsQueryCache struct { + MemorySize string `json:"memory_size,omitempty"` + MemorySizeInBytes int64 `json:"memory_size_in_bytes,omitempty"` + TotalCount int64 `json:"total_count,omitempty"` + HitCount int64 `json:"hit_count,omitempty"` + MissCount int64 `json:"miss_count,omitempty"` + CacheSize int64 `json:"cache_size,omitempty"` + CacheCount int64 `json:"cache_count,omitempty"` + Evictions int64 `json:"evictions,omitempty"` +} + +type IndexStatsSeqNo struct { + MaxSeqNo int64 `json:"max_seq_no,omitempty"` + LocalCheckpoint int64 `json:"local_checkpoint,omitempty"` + GlobalCheckpoint int64 `json:"global_checkpoint,omitempty"` +} + +type IndexStatsRetentionLeases struct { + PrimaryTerm int64 `json:"primary_term,omitempty"` + Version int64 `json:"version,omitempty"` + Leases []*IndexStatsRetentionLease `json:"leases,omitempty"` +} + +type IndexStatsRetentionLease struct { + Id string `json:"id,omitempty"` + RetainingSeqNo int64 `json:"retaining_seq_no,omitempty"` + Timestamp int64 `json:"timestamp,omitempty"` + Source string `json:"source,omitempty"` +} diff --git a/vendor/github.com/olivere/elastic/v7/indices_unfreeze.go b/vendor/github.com/olivere/elastic/v7/indices_unfreeze.go new file mode 100644 index 0000000000000000000000000000000000000000..3da75d4fd7ab6214b46d4613664c3531cba7005e --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/indices_unfreeze.go @@ -0,0 +1,229 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/http" + "net/url" + "strings" + + "github.com/olivere/elastic/v7/uritemplates" +) + +// IndicesUnfreezeService unfreezes an index. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/unfreeze-index-api.html +// and https://www.elastic.co/blog/creating-frozen-indices-with-the-elasticsearch-freeze-index-api +// for details. +type IndicesUnfreezeService struct { + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + + index string + timeout string + masterTimeout string + ignoreUnavailable *bool + allowNoIndices *bool + expandWildcards string + waitForActiveShards string +} + +// NewIndicesUnfreezeService creates a new IndicesUnfreezeService. +func NewIndicesUnfreezeService(client *Client) *IndicesUnfreezeService { + return &IndicesUnfreezeService{ + client: client, + } +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *IndicesUnfreezeService) Pretty(pretty bool) *IndicesUnfreezeService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *IndicesUnfreezeService) Human(human bool) *IndicesUnfreezeService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *IndicesUnfreezeService) ErrorTrace(errorTrace bool) *IndicesUnfreezeService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *IndicesUnfreezeService) FilterPath(filterPath ...string) *IndicesUnfreezeService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *IndicesUnfreezeService) Header(name string, value string) *IndicesUnfreezeService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *IndicesUnfreezeService) Headers(headers http.Header) *IndicesUnfreezeService { + s.headers = headers + return s +} + +// Index is the name of the index to unfreeze. +func (s *IndicesUnfreezeService) Index(index string) *IndicesUnfreezeService { + s.index = index + return s +} + +// Timeout allows to specify an explicit timeout. +func (s *IndicesUnfreezeService) Timeout(timeout string) *IndicesUnfreezeService { + s.timeout = timeout + return s +} + +// MasterTimeout allows to specify a timeout for connection to master. +func (s *IndicesUnfreezeService) MasterTimeout(masterTimeout string) *IndicesUnfreezeService { + s.masterTimeout = masterTimeout + return s +} + +// IgnoreUnavailable indicates whether specified concrete indices should be +// ignored when unavailable (missing or closed). +func (s *IndicesUnfreezeService) IgnoreUnavailable(ignoreUnavailable bool) *IndicesUnfreezeService { + s.ignoreUnavailable = &ignoreUnavailable + return s +} + +// AllowNoIndices indicates whether to ignore if a wildcard indices expression +// resolves into no concrete indices. (This includes `_all` string or when +// no indices have been specified). +func (s *IndicesUnfreezeService) AllowNoIndices(allowNoIndices bool) *IndicesUnfreezeService { + s.allowNoIndices = &allowNoIndices + return s +} + +// ExpandWildcards specifies whether to expand wildcard expression to +// concrete indices that are open, closed or both.. +func (s *IndicesUnfreezeService) ExpandWildcards(expandWildcards string) *IndicesUnfreezeService { + s.expandWildcards = expandWildcards + return s +} + +// WaitForActiveShards sets the number of active shards to wait for +// before the operation returns. +func (s *IndicesUnfreezeService) WaitForActiveShards(numShards string) *IndicesUnfreezeService { + s.waitForActiveShards = numShards + return s +} + +// buildURL builds the URL for the operation. +func (s *IndicesUnfreezeService) buildURL() (string, url.Values, error) { + // Build URL + path, err := uritemplates.Expand("/{index}/_unfreeze", map[string]string{ + "index": s.index, + }) + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } + if s.timeout != "" { + params.Set("timeout", s.timeout) + } + if s.masterTimeout != "" { + params.Set("master_timeout", s.masterTimeout) + } + if s.expandWildcards != "" { + params.Set("expand_wildcards", s.expandWildcards) + } + if s.ignoreUnavailable != nil { + params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) + } + if s.allowNoIndices != nil { + params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) + } + if s.expandWildcards != "" { + params.Set("expand_wildcards", s.expandWildcards) + } + if s.waitForActiveShards != "" { + params.Set("wait_for_active_shards", s.waitForActiveShards) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *IndicesUnfreezeService) Validate() error { + var invalid []string + if s.index == "" { + invalid = append(invalid, "Index") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the service. +func (s *IndicesUnfreezeService) Do(ctx context.Context) (*IndicesUnfreezeResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "POST", + Path: path, + Params: params, + Headers: s.headers, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(IndicesUnfreezeResponse) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// IndicesUnfreezeResponse is the outcome of freezing an index. +type IndicesUnfreezeResponse struct { + Shards *ShardsInfo `json:"_shards"` +} diff --git a/vendor/gopkg.in/olivere/elastic.v6/ingest_delete_pipeline.go b/vendor/github.com/olivere/elastic/v7/ingest_delete_pipeline.go similarity index 60% rename from vendor/gopkg.in/olivere/elastic.v6/ingest_delete_pipeline.go rename to vendor/github.com/olivere/elastic/v7/ingest_delete_pipeline.go index 7ca280267bcab07f240229427bdf3d1881e1ee05..fed06d60708035ba085fc38ae1141d04226b09cb 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/ingest_delete_pipeline.go +++ b/vendor/github.com/olivere/elastic/v7/ingest_delete_pipeline.go @@ -8,16 +8,24 @@ import ( "context" "encoding/json" "fmt" + "net/http" "net/url" + "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // IngestDeletePipelineService deletes pipelines by ID. -// It is documented at https://www.elastic.co/guide/en/elasticsearch/reference/6.2/delete-pipeline-api.html. +// It is documented at https://www.elastic.co/guide/en/elasticsearch/reference/7.0/delete-pipeline-api.html. type IngestDeletePipelineService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + id string masterTimeout string timeout string @@ -30,6 +38,46 @@ func NewIngestDeletePipelineService(client *Client) *IngestDeletePipelineService } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *IngestDeletePipelineService) Pretty(pretty bool) *IngestDeletePipelineService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *IngestDeletePipelineService) Human(human bool) *IngestDeletePipelineService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *IngestDeletePipelineService) ErrorTrace(errorTrace bool) *IngestDeletePipelineService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *IngestDeletePipelineService) FilterPath(filterPath ...string) *IngestDeletePipelineService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *IngestDeletePipelineService) Header(name string, value string) *IngestDeletePipelineService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *IngestDeletePipelineService) Headers(headers http.Header) *IngestDeletePipelineService { + s.headers = headers + return s +} + // Id is documented as: Pipeline ID. func (s *IngestDeletePipelineService) Id(id string) *IngestDeletePipelineService { s.id = id @@ -48,12 +96,6 @@ func (s *IngestDeletePipelineService) Timeout(timeout string) *IngestDeletePipel return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *IngestDeletePipelineService) Pretty(pretty bool) *IngestDeletePipelineService { - s.pretty = pretty - return s -} - // buildURL builds the URL for the operation. func (s *IngestDeletePipelineService) buildURL() (string, url.Values, error) { // Build URL @@ -66,8 +108,17 @@ func (s *IngestDeletePipelineService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if s.masterTimeout != "" { params.Set("master_timeout", s.masterTimeout) @@ -105,9 +156,10 @@ func (s *IngestDeletePipelineService) Do(ctx context.Context) (*IngestDeletePipe // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "DELETE", - Path: path, - Params: params, + Method: "DELETE", + Path: path, + Params: params, + Headers: s.headers, }) if err != nil { return nil, err diff --git a/vendor/gopkg.in/olivere/elastic.v6/ingest_get_pipeline.go b/vendor/github.com/olivere/elastic/v7/ingest_get_pipeline.go similarity index 52% rename from vendor/gopkg.in/olivere/elastic.v6/ingest_get_pipeline.go rename to vendor/github.com/olivere/elastic/v7/ingest_get_pipeline.go index 46d28bdd9c70a0acbe3bc8ab613b23c1a37c3e2b..5f7e0279ced3d1e70ef597a18409432bd3358180 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/ingest_get_pipeline.go +++ b/vendor/github.com/olivere/elastic/v7/ingest_get_pipeline.go @@ -7,18 +7,26 @@ package elastic import ( "context" "encoding/json" + "fmt" + "net/http" "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // IngestGetPipelineService returns pipelines based on ID. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/get-pipeline-api.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/get-pipeline-api.html // for documentation. type IngestGetPipelineService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + id []string masterTimeout string } @@ -30,6 +38,46 @@ func NewIngestGetPipelineService(client *Client) *IngestGetPipelineService { } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *IngestGetPipelineService) Pretty(pretty bool) *IngestGetPipelineService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *IngestGetPipelineService) Human(human bool) *IngestGetPipelineService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *IngestGetPipelineService) ErrorTrace(errorTrace bool) *IngestGetPipelineService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *IngestGetPipelineService) FilterPath(filterPath ...string) *IngestGetPipelineService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *IngestGetPipelineService) Header(name string, value string) *IngestGetPipelineService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *IngestGetPipelineService) Headers(headers http.Header) *IngestGetPipelineService { + s.headers = headers + return s +} + // Id is a list of pipeline ids. Wildcards supported. func (s *IngestGetPipelineService) Id(id ...string) *IngestGetPipelineService { s.id = append(s.id, id...) @@ -42,12 +90,6 @@ func (s *IngestGetPipelineService) MasterTimeout(masterTimeout string) *IngestGe return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *IngestGetPipelineService) Pretty(pretty bool) *IngestGetPipelineService { - s.pretty = pretty - return s -} - // buildURL builds the URL for the operation. func (s *IngestGetPipelineService) buildURL() (string, url.Values, error) { var err error @@ -67,8 +109,17 @@ func (s *IngestGetPipelineService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if s.masterTimeout != "" { params.Set("master_timeout", s.masterTimeout) @@ -96,9 +147,10 @@ func (s *IngestGetPipelineService) Do(ctx context.Context) (IngestGetPipelineRes // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, + Method: "GET", + Path: path, + Params: params, + Headers: s.headers, }) if err != nil { return nil, err @@ -115,7 +167,11 @@ func (s *IngestGetPipelineService) Do(ctx context.Context) (IngestGetPipelineRes // IngestGetPipelineResponse is the response of IngestGetPipelineService.Do. type IngestGetPipelineResponse map[string]*IngestGetPipeline +// IngestGetPipeline describes a specific ingest pipeline, its +// processors etc. type IngestGetPipeline struct { - ID string `json:"id"` - Config map[string]interface{} `json:"config"` + Description string `json:"description"` + Processors []map[string]interface{} `json:"processors"` + Version int64 `json:"version,omitempty"` + OnFailure []map[string]interface{} `json:"on_failure,omitempty"` } diff --git a/vendor/gopkg.in/olivere/elastic.v6/ingest_put_pipeline.go b/vendor/github.com/olivere/elastic/v7/ingest_put_pipeline.go similarity index 64% rename from vendor/gopkg.in/olivere/elastic.v6/ingest_put_pipeline.go rename to vendor/github.com/olivere/elastic/v7/ingest_put_pipeline.go index 7c1dbc4fe9298da694083d56ac987d55d5cf6169..5f780f6bd750c515d6976a9bdaaa862685fe7a47 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/ingest_put_pipeline.go +++ b/vendor/github.com/olivere/elastic/v7/ingest_put_pipeline.go @@ -8,18 +8,26 @@ import ( "context" "encoding/json" "fmt" + "net/http" "net/url" + "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // IngestPutPipelineService adds pipelines and updates existing pipelines in // the cluster. // -// It is documented at https://www.elastic.co/guide/en/elasticsearch/reference/6.2/put-pipeline-api.html. +// It is documented at https://www.elastic.co/guide/en/elasticsearch/reference/7.0/put-pipeline-api.html. type IngestPutPipelineService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + id string masterTimeout string timeout string @@ -34,6 +42,46 @@ func NewIngestPutPipelineService(client *Client) *IngestPutPipelineService { } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *IngestPutPipelineService) Pretty(pretty bool) *IngestPutPipelineService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *IngestPutPipelineService) Human(human bool) *IngestPutPipelineService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *IngestPutPipelineService) ErrorTrace(errorTrace bool) *IngestPutPipelineService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *IngestPutPipelineService) FilterPath(filterPath ...string) *IngestPutPipelineService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *IngestPutPipelineService) Header(name string, value string) *IngestPutPipelineService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *IngestPutPipelineService) Headers(headers http.Header) *IngestPutPipelineService { + s.headers = headers + return s +} + // Id is the pipeline ID. func (s *IngestPutPipelineService) Id(id string) *IngestPutPipelineService { s.id = id @@ -52,12 +100,6 @@ func (s *IngestPutPipelineService) Timeout(timeout string) *IngestPutPipelineSer return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *IngestPutPipelineService) Pretty(pretty bool) *IngestPutPipelineService { - s.pretty = pretty - return s -} - // BodyJson is the ingest definition, defined as a JSON-serializable document. // Use e.g. a map[string]interface{} here. func (s *IngestPutPipelineService) BodyJson(body interface{}) *IngestPutPipelineService { @@ -83,8 +125,17 @@ func (s *IngestPutPipelineService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if s.masterTimeout != "" { params.Set("master_timeout", s.masterTimeout) @@ -133,10 +184,11 @@ func (s *IngestPutPipelineService) Do(ctx context.Context) (*IngestPutPipelineRe // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "PUT", - Path: path, - Params: params, - Body: body, + Method: "PUT", + Path: path, + Params: params, + Body: body, + Headers: s.headers, }) if err != nil { return nil, err diff --git a/vendor/gopkg.in/olivere/elastic.v6/ingest_simulate_pipeline.go b/vendor/github.com/olivere/elastic/v7/ingest_simulate_pipeline.go similarity index 63% rename from vendor/gopkg.in/olivere/elastic.v6/ingest_simulate_pipeline.go rename to vendor/github.com/olivere/elastic/v7/ingest_simulate_pipeline.go index 43cca208d7df841415b44be4e162d1bd354657cd..70de000d0cea4bb1a7de65a832173086a286dfbd 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/ingest_simulate_pipeline.go +++ b/vendor/github.com/olivere/elastic/v7/ingest_simulate_pipeline.go @@ -8,19 +8,27 @@ import ( "context" "encoding/json" "fmt" + "net/http" "net/url" + "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // IngestSimulatePipelineService executes a specific pipeline against the set of // documents provided in the body of the request. // // The API is documented at -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/simulate-pipeline-api.html. +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/simulate-pipeline-api.html. type IngestSimulatePipelineService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + id string verbose *bool bodyJson interface{} @@ -34,6 +42,46 @@ func NewIngestSimulatePipelineService(client *Client) *IngestSimulatePipelineSer } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *IngestSimulatePipelineService) Pretty(pretty bool) *IngestSimulatePipelineService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *IngestSimulatePipelineService) Human(human bool) *IngestSimulatePipelineService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *IngestSimulatePipelineService) ErrorTrace(errorTrace bool) *IngestSimulatePipelineService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *IngestSimulatePipelineService) FilterPath(filterPath ...string) *IngestSimulatePipelineService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *IngestSimulatePipelineService) Header(name string, value string) *IngestSimulatePipelineService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *IngestSimulatePipelineService) Headers(headers http.Header) *IngestSimulatePipelineService { + s.headers = headers + return s +} + // Id specifies the pipeline ID. func (s *IngestSimulatePipelineService) Id(id string) *IngestSimulatePipelineService { s.id = id @@ -46,12 +94,6 @@ func (s *IngestSimulatePipelineService) Verbose(verbose bool) *IngestSimulatePip return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *IngestSimulatePipelineService) Pretty(pretty bool) *IngestSimulatePipelineService { - s.pretty = pretty - return s -} - // BodyJson is the ingest definition, defined as a JSON-serializable simulate // definition. Use e.g. a map[string]interface{} here. func (s *IngestSimulatePipelineService) BodyJson(body interface{}) *IngestSimulatePipelineService { @@ -84,11 +126,20 @@ func (s *IngestSimulatePipelineService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } - if s.verbose != nil { - params.Set("verbose", fmt.Sprintf("%v", *s.verbose)) + if v := s.verbose; v != nil { + params.Set("verbose", fmt.Sprint(*v)) } return path, params, nil } @@ -128,10 +179,11 @@ func (s *IngestSimulatePipelineService) Do(ctx context.Context) (*IngestSimulate // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "POST", - Path: path, - Params: params, - Body: body, + Method: "POST", + Path: path, + Params: params, + Body: body, + Headers: s.headers, }) if err != nil { return nil, err diff --git a/vendor/gopkg.in/olivere/elastic.v6/inner_hit.go b/vendor/github.com/olivere/elastic/v7/inner_hit.go similarity index 89% rename from vendor/gopkg.in/olivere/elastic.v6/inner_hit.go rename to vendor/github.com/olivere/elastic/v7/inner_hit.go index c371fbf791cedb7295082ead4f39159606435ac4..803662646c48d1df35c8a52015964c50294c548a 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/inner_hit.go +++ b/vendor/github.com/olivere/elastic/v7/inner_hit.go @@ -7,7 +7,7 @@ package elastic // InnerHit implements a simple join for parent/child, nested, and even // top-level documents in Elasticsearch. // It is an experimental feature for Elasticsearch versions 1.5 (or greater). -// See http://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-request-inner-hits.html +// See http://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-request-inner-hits.html // for documentation. // // See the tests for SearchSource, HasChildFilter, HasChildQuery, @@ -96,11 +96,21 @@ func (hit *InnerHit) DocvalueFields(docvalueFields ...string) *InnerHit { return hit } +func (hit *InnerHit) DocvalueFieldsWithFormat(docvalueFields ...DocvalueField) *InnerHit { + hit.source.DocvalueFieldsWithFormat(docvalueFields...) + return hit +} + func (hit *InnerHit) DocvalueField(docvalueField string) *InnerHit { hit.source.DocvalueField(docvalueField) return hit } +func (hit *InnerHit) DocvalueFieldWithFormat(docvalueField DocvalueField) *InnerHit { + hit.source.DocvalueFieldWithFormat(docvalueField) + return hit +} + func (hit *InnerHit) ScriptFields(scriptFields ...*ScriptField) *InnerHit { hit.source.ScriptFields(scriptFields...) return hit diff --git a/vendor/gopkg.in/olivere/elastic.v6/logger.go b/vendor/github.com/olivere/elastic/v7/logger.go similarity index 100% rename from vendor/gopkg.in/olivere/elastic.v6/logger.go rename to vendor/github.com/olivere/elastic/v7/logger.go diff --git a/vendor/gopkg.in/olivere/elastic.v6/mget.go b/vendor/github.com/olivere/elastic/v7/mget.go similarity index 75% rename from vendor/gopkg.in/olivere/elastic.v6/mget.go rename to vendor/github.com/olivere/elastic/v7/mget.go index eccf194f444c601a3bea83b0e0803d8ffe7a27d2..9e5f83b3ceb31ace75d5151f38187de90d193518 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/mget.go +++ b/vendor/github.com/olivere/elastic/v7/mget.go @@ -7,6 +7,7 @@ package elastic import ( "context" "fmt" + "net/http" "net/url" "strings" ) @@ -16,11 +17,17 @@ import ( // a docs array with all the fetched documents, each element similar // in structure to a document provided by the Get API. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-multi-get.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/docs-multi-get.html // for details. type MgetService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + preference string realtime *bool refresh string @@ -37,6 +44,46 @@ func NewMgetService(client *Client) *MgetService { return builder } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *MgetService) Pretty(pretty bool) *MgetService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *MgetService) Human(human bool) *MgetService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *MgetService) ErrorTrace(errorTrace bool) *MgetService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *MgetService) FilterPath(filterPath ...string) *MgetService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *MgetService) Header(name string, value string) *MgetService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *MgetService) Headers(headers http.Header) *MgetService { + s.headers = headers + return s +} + // Preference specifies the node or shard the operation should be performed // on (default: random). func (s *MgetService) Preference(preference string) *MgetService { @@ -46,7 +93,7 @@ func (s *MgetService) Preference(preference string) *MgetService { // Refresh the shard containing the document before performing the operation. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-refresh.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/docs-refresh.html // for details. func (s *MgetService) Refresh(refresh string) *MgetService { s.refresh = refresh @@ -71,12 +118,6 @@ func (s *MgetService) StoredFields(storedFields ...string) *MgetService { return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *MgetService) Pretty(pretty bool) *MgetService { - s.pretty = pretty - return s -} - // Add an item to the request. func (s *MgetService) Add(items ...*MultiGetItem) *MgetService { s.items = append(s.items, items...) @@ -103,7 +144,19 @@ func (s *MgetService) Do(ctx context.Context) (*MgetResponse, error) { // Build url path := "/_mget" - params := make(url.Values) + params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } if s.realtime != nil { params.Add("realtime", fmt.Sprintf("%v", *s.realtime)) } @@ -128,10 +181,11 @@ func (s *MgetService) Do(ctx context.Context) (*MgetResponse, error) { // Get response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, - Body: body, + Method: "GET", + Path: path, + Params: params, + Body: body, + Headers: s.headers, }) if err != nil { return nil, err @@ -237,7 +291,7 @@ func (item *MultiGetItem) Source() (interface{}, error) { source["_source"] = src } if item.routing != "" { - source["_routing"] = item.routing + source["routing"] = item.routing } if len(item.storedFields) > 0 { source["stored_fields"] = strings.Join(item.storedFields, ",") diff --git a/vendor/gopkg.in/olivere/elastic.v6/msearch.go b/vendor/github.com/olivere/elastic/v7/msearch.go similarity index 55% rename from vendor/gopkg.in/olivere/elastic.v6/msearch.go rename to vendor/github.com/olivere/elastic/v7/msearch.go index c1a589a977388958586a6ebc2093ca35b81b7ef5..1f6aed0e55bf3a1a6d45cd8e0474818226b6ce5b 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/msearch.go +++ b/vendor/github.com/olivere/elastic/v7/msearch.go @@ -8,16 +8,23 @@ import ( "context" "encoding/json" "fmt" + "net/http" "net/url" "strings" ) // MultiSearch executes one or more searches in one roundtrip. type MultiSearchService struct { - client *Client + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + requests []*SearchRequest indices []string - pretty bool maxConcurrentRequests *int preFilterShardSize *int } @@ -29,6 +36,46 @@ func NewMultiSearchService(client *Client) *MultiSearchService { return builder } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *MultiSearchService) Pretty(pretty bool) *MultiSearchService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *MultiSearchService) Human(human bool) *MultiSearchService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *MultiSearchService) ErrorTrace(errorTrace bool) *MultiSearchService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *MultiSearchService) FilterPath(filterPath ...string) *MultiSearchService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *MultiSearchService) Header(name string, value string) *MultiSearchService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *MultiSearchService) Headers(headers http.Header) *MultiSearchService { + s.headers = headers + return s +} + func (s *MultiSearchService) Add(requests ...*SearchRequest) *MultiSearchService { s.requests = append(s.requests, requests...) return s @@ -39,11 +86,6 @@ func (s *MultiSearchService) Index(indices ...string) *MultiSearchService { return s } -func (s *MultiSearchService) Pretty(pretty bool) *MultiSearchService { - s.pretty = pretty - return s -} - func (s *MultiSearchService) MaxConcurrentSearches(max int) *MultiSearchService { s.maxConcurrentRequests = &max return s @@ -59,9 +101,18 @@ func (s *MultiSearchService) Do(ctx context.Context) (*MultiSearchResult, error) path := "/_msearch" // Parameters - params := make(url.Values) - if s.pretty { - params.Set("pretty", fmt.Sprintf("%v", s.pretty)) + params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if v := s.maxConcurrentRequests; v != nil { params.Set("max_concurrent_searches", fmt.Sprintf("%v", *v)) @@ -93,10 +144,11 @@ func (s *MultiSearchService) Do(ctx context.Context) (*MultiSearchResult, error) // Get response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, - Body: body, + Method: "GET", + Path: path, + Params: params, + Body: body, + Headers: s.headers, }) if err != nil { return nil, err @@ -112,5 +164,6 @@ func (s *MultiSearchService) Do(ctx context.Context) (*MultiSearchResult, error) // MultiSearchResult is the outcome of running a multi-search operation. type MultiSearchResult struct { - Responses []*SearchResult `json:"responses,omitempty"` + TookInMillis int64 `json:"took,omitempty"` // search time in milliseconds + Responses []*SearchResult `json:"responses,omitempty"` } diff --git a/vendor/gopkg.in/olivere/elastic.v6/mtermvectors.go b/vendor/github.com/olivere/elastic/v7/mtermvectors.go similarity index 86% rename from vendor/gopkg.in/olivere/elastic.v6/mtermvectors.go rename to vendor/github.com/olivere/elastic/v7/mtermvectors.go index e8fb48fc776386e7c7fe388133dfccf59a8d2379..59284e60adca78a689d5039cbaced7cfc1ce85ee 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/mtermvectors.go +++ b/vendor/github.com/olivere/elastic/v7/mtermvectors.go @@ -8,21 +8,28 @@ import ( "context" "encoding/json" "fmt" + "net/http" "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // MultiTermvectorService returns information and statistics on terms in the // fields of a particular document. The document could be stored in the // index or artificially provided by the user. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-multi-termvectors.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/docs-multi-termvectors.html // for documentation. type MultiTermvectorService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + index string typ string fieldStatistics *bool @@ -50,9 +57,43 @@ func NewMultiTermvectorService(client *Client) *MultiTermvectorService { } } -// Pretty indicates that the JSON response be indented and human readable. +// Pretty tells Elasticsearch whether to return a formatted JSON response. func (s *MultiTermvectorService) Pretty(pretty bool) *MultiTermvectorService { - s.pretty = pretty + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *MultiTermvectorService) Human(human bool) *MultiTermvectorService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *MultiTermvectorService) ErrorTrace(errorTrace bool) *MultiTermvectorService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *MultiTermvectorService) FilterPath(filterPath ...string) *MultiTermvectorService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *MultiTermvectorService) Header(name string, value string) *MultiTermvectorService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *MultiTermvectorService) Headers(headers http.Header) *MultiTermvectorService { + s.headers = headers return s } @@ -197,8 +238,17 @@ func (s *MultiTermvectorService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if s.fieldStatistics != nil { params.Set("field_statistics", fmt.Sprintf("%v", *s.fieldStatistics)) @@ -279,10 +329,11 @@ func (s *MultiTermvectorService) Do(ctx context.Context) (*MultiTermvectorRespon // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, - Body: body, + Method: "GET", + Path: path, + Params: params, + Body: body, + Headers: s.headers, }) if err != nil { return nil, err diff --git a/vendor/gopkg.in/olivere/elastic.v6/nodes_info.go b/vendor/github.com/olivere/elastic/v7/nodes_info.go similarity index 86% rename from vendor/gopkg.in/olivere/elastic.v6/nodes_info.go rename to vendor/github.com/olivere/elastic/v7/nodes_info.go index 6323481f36730a19219ce93b0b1346f1b2dfec9b..3037df4f62a17b6f35eead250f3ceb999de57ef5 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/nodes_info.go +++ b/vendor/github.com/olivere/elastic/v7/nodes_info.go @@ -7,34 +7,78 @@ package elastic import ( "context" "fmt" + "net/http" "net/url" "strings" "time" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // NodesInfoService allows to retrieve one or more or all of the // cluster nodes information. -// It is documented at https://www.elastic.co/guide/en/elasticsearch/reference/6.2/cluster-nodes-info.html. +// It is documented at https://www.elastic.co/guide/en/elasticsearch/reference/7.0/cluster-nodes-info.html. type NodesInfoService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + nodeId []string metric []string flatSettings *bool - human *bool } // NewNodesInfoService creates a new NodesInfoService. func NewNodesInfoService(client *Client) *NodesInfoService { return &NodesInfoService{ client: client, - nodeId: []string{"_all"}, - metric: []string{"_all"}, } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *NodesInfoService) Pretty(pretty bool) *NodesInfoService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *NodesInfoService) Human(human bool) *NodesInfoService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *NodesInfoService) ErrorTrace(errorTrace bool) *NodesInfoService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *NodesInfoService) FilterPath(filterPath ...string) *NodesInfoService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *NodesInfoService) Header(name string, value string) *NodesInfoService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *NodesInfoService) Headers(headers http.Header) *NodesInfoService { + s.headers = headers + return s +} + // NodeId is a list of node IDs or names to limit the returned information. // Use "_local" to return information from the node you're connecting to, // leave empty to get information from all nodes. @@ -57,24 +101,26 @@ func (s *NodesInfoService) FlatSettings(flatSettings bool) *NodesInfoService { return s } -// Human indicates whether to return time and byte values in human-readable format. -func (s *NodesInfoService) Human(human bool) *NodesInfoService { - s.human = &human - return s -} - -// Pretty indicates whether to indent the returned JSON. -func (s *NodesInfoService) Pretty(pretty bool) *NodesInfoService { - s.pretty = pretty - return s -} - // buildURL builds the URL for the operation. func (s *NodesInfoService) buildURL() (string, url.Values, error) { + var nodeId, metric string + + if len(s.nodeId) > 0 { + nodeId = strings.Join(s.nodeId, ",") + } else { + nodeId = "_all" + } + + if len(s.metric) > 0 { + metric = strings.Join(s.metric, ",") + } else { + metric = "_all" + } + // Build URL path, err := uritemplates.Expand("/_nodes/{node_id}/{metric}", map[string]string{ - "node_id": strings.Join(s.nodeId, ","), - "metric": strings.Join(s.metric, ","), + "node_id": nodeId, + "metric": metric, }) if err != nil { return "", url.Values{}, err @@ -82,14 +128,20 @@ func (s *NodesInfoService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.flatSettings != nil { - params.Set("flat_settings", fmt.Sprintf("%v", *s.flatSettings)) + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) } - if s.human != nil { - params.Set("human", fmt.Sprintf("%v", *s.human)) + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } - if s.pretty { - params.Set("pretty", "true") + if s.flatSettings != nil { + params.Set("flat_settings", fmt.Sprintf("%v", *s.flatSettings)) } return path, params, nil } @@ -114,9 +166,10 @@ func (s *NodesInfoService) Do(ctx context.Context) (*NodesInfoResponse, error) { // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, + Method: "GET", + Path: path, + Params: params, + Headers: s.headers, }) if err != nil { return nil, err diff --git a/vendor/gopkg.in/olivere/elastic.v6/nodes_stats.go b/vendor/github.com/olivere/elastic/v7/nodes_stats.go similarity index 89% rename from vendor/gopkg.in/olivere/elastic.v6/nodes_stats.go rename to vendor/github.com/olivere/elastic/v7/nodes_stats.go index 7c5f0c9d61c6ecc587725fc281ec3e34c305c020..a57651e3be339c6fb443c7b1a9eb7dc9b6f8c5ea 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/nodes_stats.go +++ b/vendor/github.com/olivere/elastic/v7/nodes_stats.go @@ -8,18 +8,25 @@ import ( "context" "encoding/json" "fmt" + "net/http" "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // NodesStatsService returns node statistics. -// See http://www.elastic.co/guide/en/elasticsearch/reference/5.2/cluster-nodes-stats.html +// See http://www.elastic.co/guide/en/elasticsearch/reference/7.0/cluster-nodes-stats.html // for details. type NodesStatsService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + metric []string indexMetric []string nodeId []string @@ -27,7 +34,6 @@ type NodesStatsService struct { fielddataFields []string fields []string groups *bool - human *bool level string timeout string types []string @@ -40,6 +46,46 @@ func NewNodesStatsService(client *Client) *NodesStatsService { } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *NodesStatsService) Pretty(pretty bool) *NodesStatsService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *NodesStatsService) Human(human bool) *NodesStatsService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *NodesStatsService) ErrorTrace(errorTrace bool) *NodesStatsService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *NodesStatsService) FilterPath(filterPath ...string) *NodesStatsService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *NodesStatsService) Header(name string, value string) *NodesStatsService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *NodesStatsService) Headers(headers http.Header) *NodesStatsService { + s.headers = headers + return s +} + // Metric limits the information returned to the specified metrics. func (s *NodesStatsService) Metric(metric ...string) *NodesStatsService { s.metric = append(s.metric, metric...) @@ -87,12 +133,6 @@ func (s *NodesStatsService) Groups(groups bool) *NodesStatsService { return s } -// Human indicates whether to return time and byte values in human-readable format. -func (s *NodesStatsService) Human(human bool) *NodesStatsService { - s.human = &human - return s -} - // Level specifies whether to return indices stats aggregated at node, index or shard level. func (s *NodesStatsService) Level(level string) *NodesStatsService { s.level = level @@ -111,12 +151,6 @@ func (s *NodesStatsService) Types(types ...string) *NodesStatsService { return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *NodesStatsService) Pretty(pretty bool) *NodesStatsService { - s.pretty = pretty - return s -} - // buildURL builds the URL for the operation. func (s *NodesStatsService) buildURL() (string, url.Values, error) { var err error @@ -164,8 +198,17 @@ func (s *NodesStatsService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if len(s.completionFields) > 0 { params.Set("completion_fields", strings.Join(s.completionFields, ",")) @@ -179,9 +222,6 @@ func (s *NodesStatsService) buildURL() (string, url.Values, error) { if s.groups != nil { params.Set("groups", fmt.Sprintf("%v", *s.groups)) } - if s.human != nil { - params.Set("human", fmt.Sprintf("%v", *s.human)) - } if s.level != "" { params.Set("level", s.level) } @@ -214,9 +254,10 @@ func (s *NodesStatsService) Do(ctx context.Context) (*NodesStatsResponse, error) // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, + Method: "GET", + Path: path, + Params: params, + Headers: s.headers, }) if err != nil { return nil, err @@ -325,16 +366,19 @@ type NodesStatsStoreStats struct { } type NodesStatsIndexingStats struct { - IndexTotal int64 `json:"index_total"` - IndexTime string `json:"index_time"` - IndexTimeInMillis int64 `json:"index_time_in_millis"` - IndexCurrent int64 `json:"index_current"` - IndexFailed int64 `json:"index_failed"` - DeleteTotal int64 `json:"delete_total"` - DeleteTime string `json:"delete_time"` - DeleteTimeInMillis int64 `json:"delete_time_in_millis"` - DeleteCurrent int64 `json:"delete_current"` - NoopUpdateTotal int64 `json:"noop_update_total"` + IndexTotal int64 `json:"index_total"` + IndexTime string `json:"index_time"` + IndexTimeInMillis int64 `json:"index_time_in_millis"` + IndexCurrent int64 `json:"index_current"` + IndexFailed int64 `json:"index_failed"` + DeleteTotal int64 `json:"delete_total"` + DeleteTime string `json:"delete_time"` + DeleteTimeInMillis int64 `json:"delete_time_in_millis"` + DeleteCurrent int64 `json:"delete_current"` + NoopUpdateTotal int64 `json:"noop_update_total"` + IsThrottled bool `json:"is_throttled"` + ThrottledTime string `json:"throttle_time"` // no typo, see https://github.com/elastic/elasticsearch/blob/ff99bc1d3f8a7ea72718872d214ec2097dfca276/server/src/main/java/org/elasticsearch/index/shard/IndexingStats.java#L244 + ThrottledTimeInMillis int64 `json:"throttle_time_in_millis"` Types map[string]*NodesStatsIndexingStats `json:"types"` // stats for individual types } diff --git a/vendor/github.com/olivere/elastic/v7/ping.go b/vendor/github.com/olivere/elastic/v7/ping.go new file mode 100644 index 0000000000000000000000000000000000000000..1ad786174018302649c676ebef4927f502ce2851 --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/ping.go @@ -0,0 +1,197 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "net/url" + "strings" +) + +// PingService checks if an Elasticsearch server on a given URL is alive. +// When asked for, it can also return various information about the +// Elasticsearch server, e.g. the Elasticsearch version number. +// +// Ping simply starts a HTTP GET request to the URL of the server. +// If the server responds with HTTP Status code 200 OK, the server is alive. +type PingService struct { + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + + url string + timeout string + httpHeadOnly bool +} + +// PingResult is the result returned from querying the Elasticsearch server. +type PingResult struct { + Name string `json:"name"` + ClusterName string `json:"cluster_name"` + Version struct { + Number string `json:"number"` // e.g. "7.0.0" + BuildFlavor string `json:"build_flavor"` // e.g. "oss" or "default" + BuildType string `json:"build_type"` // e.g. "docker" + BuildHash string `json:"build_hash"` // e.g. "b7e28a7" + BuildDate string `json:"build_date"` // e.g. "2019-04-05T22:55:32.697037Z" + BuildSnapshot bool `json:"build_snapshot"` // e.g. false + LuceneVersion string `json:"lucene_version"` // e.g. "8.0.0" + MinimumWireCompatibilityVersion string `json:"minimum_wire_compatibility_version"` // e.g. "6.7.0" + MinimumIndexCompatibilityVersion string `json:"minimum_index_compatibility_version"` // e.g. "6.0.0-beta1" + } `json:"version"` + TagLine string `json:"tagline"` +} + +func NewPingService(client *Client) *PingService { + return &PingService{ + client: client, + url: DefaultURL, + httpHeadOnly: false, + } +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *PingService) Pretty(pretty bool) *PingService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *PingService) Human(human bool) *PingService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *PingService) ErrorTrace(errorTrace bool) *PingService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *PingService) FilterPath(filterPath ...string) *PingService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *PingService) Header(name string, value string) *PingService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *PingService) Headers(headers http.Header) *PingService { + s.headers = headers + return s +} + +func (s *PingService) URL(url string) *PingService { + s.url = url + return s +} + +func (s *PingService) Timeout(timeout string) *PingService { + s.timeout = timeout + return s +} + +// HeadOnly makes the service to only return the status code in Do; +// the PingResult will be nil. +func (s *PingService) HttpHeadOnly(httpHeadOnly bool) *PingService { + s.httpHeadOnly = httpHeadOnly + return s +} + +// Do returns the PingResult, the HTTP status code of the Elasticsearch +// server, and an error. +func (s *PingService) Do(ctx context.Context) (*PingResult, int, error) { + s.client.mu.RLock() + basicAuth := s.client.basicAuth + basicAuthUsername := s.client.basicAuthUsername + basicAuthPassword := s.client.basicAuthPassword + defaultHeaders := s.client.headers + s.client.mu.RUnlock() + + url_ := strings.TrimSuffix(s.url, "/") + "/" + + params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } + if s.timeout != "" { + params.Set("timeout", s.timeout) + } + if len(params) > 0 { + url_ += "?" + params.Encode() + } + + var method string + if s.httpHeadOnly { + method = "HEAD" + } else { + method = "GET" + } + + // Notice: This service must NOT use PerformRequest! + req, err := NewRequest(method, url_) + if err != nil { + return nil, 0, err + } + if len(s.headers) > 0 { + for key, values := range s.headers { + for _, v := range values { + req.Header.Add(key, v) + } + } + } + if len(defaultHeaders) > 0 { + for key, values := range defaultHeaders { + for _, v := range values { + req.Header.Add(key, v) + } + } + } + + if basicAuth { + req.SetBasicAuth(basicAuthUsername, basicAuthPassword) + } + + res, err := s.client.c.Do((*http.Request)(req).WithContext(ctx)) + if err != nil { + return nil, 0, err + } + defer res.Body.Close() + + var ret *PingResult + if !s.httpHeadOnly { + ret = new(PingResult) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, res.StatusCode, err + } + } + + return ret, res.StatusCode, nil +} diff --git a/vendor/gopkg.in/olivere/elastic.v6/plugins.go b/vendor/github.com/olivere/elastic/v7/plugins.go similarity index 100% rename from vendor/gopkg.in/olivere/elastic.v6/plugins.go rename to vendor/github.com/olivere/elastic/v7/plugins.go diff --git a/vendor/gopkg.in/olivere/elastic.v6/query.go b/vendor/github.com/olivere/elastic/v7/query.go similarity index 100% rename from vendor/gopkg.in/olivere/elastic.v6/query.go rename to vendor/github.com/olivere/elastic/v7/query.go diff --git a/vendor/gopkg.in/olivere/elastic.v6/reindex.go b/vendor/github.com/olivere/elastic/v7/reindex.go similarity index 75% rename from vendor/gopkg.in/olivere/elastic.v6/reindex.go rename to vendor/github.com/olivere/elastic/v7/reindex.go index e908cf5e4c57d1e7afe339c4ff44f00c33742502..2bf74a6f9f264de6233a9096354bdef2b0f37789 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/reindex.go +++ b/vendor/github.com/olivere/elastic/v7/reindex.go @@ -6,15 +6,24 @@ package elastic import ( "context" + "errors" "fmt" + "net/http" "net/url" + "strings" ) // ReindexService is a method to copy documents from one index to another. -// It is documented at https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-reindex.html. +// It is documented at https://www.elastic.co/guide/en/elasticsearch/reference/7.0/docs-reindex.html. type ReindexService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + refresh string timeout string waitForActiveShards string @@ -36,6 +45,46 @@ func NewReindexService(client *Client) *ReindexService { } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *ReindexService) Pretty(pretty bool) *ReindexService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *ReindexService) Human(human bool) *ReindexService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *ReindexService) ErrorTrace(errorTrace bool) *ReindexService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *ReindexService) FilterPath(filterPath ...string) *ReindexService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *ReindexService) Header(name string, value string) *ReindexService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *ReindexService) Headers(headers http.Header) *ReindexService { + s.headers = headers + return s +} + // WaitForActiveShards sets the number of shard copies that must be active before // proceeding with the reindex operation. Defaults to 1, meaning the primary shard only. // Set to `all` for all shard copies, otherwise set to any non-negative value less than or @@ -53,9 +102,9 @@ func (s *ReindexService) RequestsPerSecond(requestsPerSecond int) *ReindexServic } // Slices specifies the number of slices this task should be divided into. Defaults to 1. -// It used to be a number, but can be set to "auto" as of 6.3. +// It used to be a number, but can be set to "auto" as of 6.7. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.3/docs-reindex.html#docs-reindex-slice +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/docs-reindex.html#docs-reindex-slice // for details. func (s *ReindexService) Slices(slices interface{}) *ReindexService { s.slices = slices @@ -65,7 +114,7 @@ func (s *ReindexService) Slices(slices interface{}) *ReindexService { // Refresh indicates whether Elasticsearch should refresh the effected indexes // immediately. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-refresh.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/docs-refresh.html // for details. func (s *ReindexService) Refresh(refresh string) *ReindexService { s.refresh = refresh @@ -86,12 +135,6 @@ func (s *ReindexService) WaitForCompletion(waitForCompletion bool) *ReindexServi return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *ReindexService) Pretty(pretty bool) *ReindexService { - s.pretty = pretty - return s -} - // Source specifies the source of the reindexing process. func (s *ReindexService) Source(source *ReindexSource) *ReindexService { s.source = source @@ -181,8 +224,17 @@ func (s *ReindexService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if s.refresh != "" { params.Set("refresh", s.refresh) @@ -214,7 +266,7 @@ func (s *ReindexService) Validate() error { if s.source == nil { invalid = append(invalid, "Source") } else { - if len(s.source.indices) == 0 { + if len(s.source.request.indices) == 0 { invalid = append(invalid, "Source.Index") } } @@ -285,10 +337,11 @@ func (s *ReindexService) Do(ctx context.Context) (*BulkIndexByScrollResponse, er // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "POST", - Path: path, - Params: params, - Body: body, + Method: "POST", + Path: path, + Params: params, + Body: body, + Headers: s.headers, }) if err != nil { return nil, err @@ -299,6 +352,7 @@ func (s *ReindexService) Do(ctx context.Context) (*BulkIndexByScrollResponse, er if err := s.client.decoder.Decode(res.Body, ret); err != nil { return nil, err } + ret.Header = res.Header return ret, nil } @@ -311,7 +365,7 @@ func (s *ReindexService) DoAsync(ctx context.Context) (*StartTaskResult, error) return nil, err } - // DoAsync only makes sense with WaitForCompletion set to true + // DoAsync only makes sense with WaitForCompletion set to false if s.waitForCompletion != nil && *s.waitForCompletion { return nil, fmt.Errorf("cannot start a task with WaitForCompletion set to true") } @@ -332,10 +386,11 @@ func (s *ReindexService) DoAsync(ctx context.Context) (*StartTaskResult, error) // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "POST", - Path: path, - Params: params, - Body: body, + Method: "POST", + Path: path, + Params: params, + Body: body, + Headers: s.headers, }) if err != nil { return nil, err @@ -346,6 +401,7 @@ func (s *ReindexService) DoAsync(ctx context.Context) (*StartTaskResult, error) if err := s.client.decoder.Decode(res.Body, ret); err != nil { return nil, err } + ret.Header = res.Header return ret, nil } @@ -353,85 +409,111 @@ func (s *ReindexService) DoAsync(ctx context.Context) (*StartTaskResult, error) // ReindexSource specifies the source of a Reindex process. type ReindexSource struct { - searchType string // default in ES is "query_then_fetch" - indices []string - types []string - routing *string - preference *string - requestCache *bool - scroll string - query Query - sorts []SortInfo - sorters []Sorter - searchSource *SearchSource - remoteInfo *ReindexRemoteInfo + request *SearchRequest + remoteInfo *ReindexRemoteInfo } // NewReindexSource creates a new ReindexSource. func NewReindexSource() *ReindexSource { - return &ReindexSource{} + return &ReindexSource{ + request: NewSearchRequest(), + } +} + +// Request specifies the search request used for source. +func (r *ReindexSource) Request(request *SearchRequest) *ReindexSource { + if request == nil { + r.request = NewSearchRequest() + } else { + r.request = request + } + return r } // SearchType is the search operation type. Possible values are // "query_then_fetch" and "dfs_query_then_fetch". func (r *ReindexSource) SearchType(searchType string) *ReindexSource { - r.searchType = searchType + r.request = r.request.SearchType(searchType) return r } func (r *ReindexSource) SearchTypeDfsQueryThenFetch() *ReindexSource { - return r.SearchType("dfs_query_then_fetch") + r.request = r.request.SearchType("dfs_query_then_fetch") + return r } func (r *ReindexSource) SearchTypeQueryThenFetch() *ReindexSource { - return r.SearchType("query_then_fetch") + r.request = r.request.SearchType("query_then_fetch") + return r } func (r *ReindexSource) Index(indices ...string) *ReindexSource { - r.indices = append(r.indices, indices...) + r.request = r.request.Index(indices...) return r } func (r *ReindexSource) Type(types ...string) *ReindexSource { - r.types = append(r.types, types...) + r.request = r.request.Type(types...) return r } func (r *ReindexSource) Preference(preference string) *ReindexSource { - r.preference = &preference + r.request = r.request.Preference(preference) return r } func (r *ReindexSource) RequestCache(requestCache bool) *ReindexSource { - r.requestCache = &requestCache + r.request = r.request.RequestCache(requestCache) return r } func (r *ReindexSource) Scroll(scroll string) *ReindexSource { - r.scroll = scroll + r.request = r.request.Scroll(scroll) return r } func (r *ReindexSource) Query(query Query) *ReindexSource { - r.query = query + r.request = r.request.Query(query) return r } // Sort adds a sort order. func (r *ReindexSource) Sort(field string, ascending bool) *ReindexSource { - r.sorts = append(r.sorts, SortInfo{Field: field, Ascending: ascending}) + r.request = r.request.Sort(field, ascending) return r } // SortWithInfo adds a sort order. func (r *ReindexSource) SortWithInfo(info SortInfo) *ReindexSource { - r.sorts = append(r.sorts, info) + r.request = r.request.SortWithInfo(info) return r } // SortBy adds a sort order. func (r *ReindexSource) SortBy(sorter ...Sorter) *ReindexSource { - r.sorters = append(r.sorters, sorter...) + r.request = r.request.SortBy(sorter...) + return r +} + +// FetchSource indicates whether the response should contain the stored +// _source for every hit. +func (r *ReindexSource) FetchSource(fetchSource bool) *ReindexSource { + r.request = r.request.FetchSource(fetchSource) + return r +} + +// FetchSourceIncludeExclude specifies that _source should be returned +// with each hit, where "include" and "exclude" serve as a simple wildcard +// matcher that gets applied to its fields +// (e.g. include := []string{"obj1.*","obj2.*"}, exclude := []string{"description.*"}). +func (r *ReindexSource) FetchSourceIncludeExclude(include, exclude []string) *ReindexSource { + r.request = r.request.FetchSourceIncludeExclude(include, exclude) + return r +} + +// FetchSourceContext indicates how the _source should be fetched. +func (r *ReindexSource) FetchSourceContext(fsc *FetchSourceContext) *ReindexSource { + r.request = r.request.FetchSourceContext(fsc) return r } @@ -443,54 +525,28 @@ func (r *ReindexSource) RemoteInfo(ri *ReindexRemoteInfo) *ReindexSource { // Source returns a serializable JSON request for the request. func (r *ReindexSource) Source() (interface{}, error) { - source := make(map[string]interface{}) - - if r.query != nil { - src, err := r.query.Source() - if err != nil { - return nil, err - } - source["query"] = src - } else if r.searchSource != nil { - src, err := r.searchSource.Source() - if err != nil { - return nil, err - } - source["source"] = src + src, err := r.request.sourceAsMap() + if err != nil { + return nil, err } - - if r.searchType != "" { - source["search_type"] = r.searchType + source, ok := src.(map[string]interface{}) + if !ok { + return nil, errors.New("unable to use SearchRequest as map[string]interface{}") } - switch len(r.indices) { - case 0: + switch len(r.request.indices) { case 1: - source["index"] = r.indices[0] + source["index"] = r.request.indices[0] default: - source["index"] = r.indices + source["index"] = r.request.indices } - - switch len(r.types) { + switch len(r.request.types) { case 0: case 1: - source["type"] = r.types[0] + source["type"] = r.request.types[0] default: - source["type"] = r.types - } - - if r.preference != nil && *r.preference != "" { - source["preference"] = *r.preference - } - - if r.requestCache != nil { - source["request_cache"] = fmt.Sprintf("%v", *r.requestCache) - } - - if r.scroll != "" { - source["scroll"] = r.scroll + source["type"] = r.request.types } - if r.remoteInfo != nil { src, err := r.remoteInfo.Source() if err != nil { @@ -498,29 +554,6 @@ func (r *ReindexSource) Source() (interface{}, error) { } source["remote"] = src } - - if len(r.sorters) > 0 { - var sortarr []interface{} - for _, sorter := range r.sorters { - src, err := sorter.Source() - if err != nil { - return nil, err - } - sortarr = append(sortarr, src) - } - source["sort"] = sortarr - } else if len(r.sorts) > 0 { - var sortarr []interface{} - for _, sort := range r.sorts { - src, err := sort.Source() - if err != nil { - return nil, err - } - sortarr = append(sortarr, src) - } - source["sort"] = sortarr - } - return source, nil } @@ -590,13 +623,13 @@ func (ri *ReindexRemoteInfo) Source() (interface{}, error) { return res, nil } -// -source Destination of Reindex -- +// -- Destination of Reindex -- // ReindexDestination is the destination of a Reindex API call. // It is basically the meta data of a BulkIndexRequest. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-reindex.html -// fsourcer details. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/docs-reindex.html +// for details. type ReindexDestination struct { index string typ string @@ -605,6 +638,7 @@ type ReindexDestination struct { opType string version int64 // default is MATCH_ANY versionType string // default is "internal" + pipeline string } // NewReindexDestination returns a new ReindexDestination. @@ -654,7 +688,7 @@ func (r *ReindexDestination) Parent(parent string) *ReindexDestination { // OpType specifies if this request should follow create-only or upsert // behavior. This follows the OpType of the standard document index API. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-index_.html#operation-type +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/docs-index_.html#operation-type // for details. func (r *ReindexDestination) OpType(opType string) *ReindexDestination { r.opType = opType @@ -674,6 +708,12 @@ func (r *ReindexDestination) VersionType(versionType string) *ReindexDestination return r } +// Pipeline specifies the pipeline to use for reindexing. +func (r *ReindexDestination) Pipeline(pipeline string) *ReindexDestination { + r.pipeline = pipeline + return r +} + // Source returns a serializable JSON request for the request. func (r *ReindexDestination) Source() (interface{}, error) { source := make(map[string]interface{}) @@ -698,5 +738,8 @@ func (r *ReindexDestination) Source() (interface{}, error) { if r.versionType != "" { source["version_type"] = r.versionType } + if r.pipeline != "" { + source["pipeline"] = r.pipeline + } return source, nil } diff --git a/vendor/gopkg.in/olivere/elastic.v6/request.go b/vendor/github.com/olivere/elastic/v7/request.go similarity index 100% rename from vendor/gopkg.in/olivere/elastic.v6/request.go rename to vendor/github.com/olivere/elastic/v7/request.go diff --git a/vendor/gopkg.in/olivere/elastic.v6/rescore.go b/vendor/github.com/olivere/elastic/v7/rescore.go similarity index 100% rename from vendor/gopkg.in/olivere/elastic.v6/rescore.go rename to vendor/github.com/olivere/elastic/v7/rescore.go diff --git a/vendor/gopkg.in/olivere/elastic.v6/rescorer.go b/vendor/github.com/olivere/elastic/v7/rescorer.go similarity index 100% rename from vendor/gopkg.in/olivere/elastic.v6/rescorer.go rename to vendor/github.com/olivere/elastic/v7/rescorer.go diff --git a/vendor/gopkg.in/olivere/elastic.v6/response.go b/vendor/github.com/olivere/elastic/v7/response.go similarity index 52% rename from vendor/gopkg.in/olivere/elastic.v6/response.go rename to vendor/github.com/olivere/elastic/v7/response.go index 4fcdc32d62870cd9cb77d4752ae7c4a01c106b5f..200ed3d92050e1fe28e247417ecfb4d28ed8238a 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/response.go +++ b/vendor/github.com/olivere/elastic/v7/response.go @@ -6,10 +6,17 @@ package elastic import ( "encoding/json" + "errors" + "io" "io/ioutil" "net/http" ) +var ( + // ErrResponseSize is raised if a response body exceeds the given max body size. + ErrResponseSize = errors.New("elastic: response size too large") +) + // Response represents a response from Elasticsearch. type Response struct { // StatusCode is the HTTP status code, e.g. 200. @@ -19,19 +26,33 @@ type Response struct { Header http.Header // Body is the deserialized response body. Body json.RawMessage + // DeprecationWarnings lists all deprecation warnings returned from + // Elasticsearch. + DeprecationWarnings []string } // newResponse creates a new response from the HTTP response. -func (c *Client) newResponse(res *http.Response) (*Response, error) { +func (c *Client) newResponse(res *http.Response, maxBodySize int64) (*Response, error) { r := &Response{ - StatusCode: res.StatusCode, - Header: res.Header, + StatusCode: res.StatusCode, + Header: res.Header, + DeprecationWarnings: res.Header["Warning"], } if res.Body != nil { - slurp, err := ioutil.ReadAll(res.Body) + body := io.Reader(res.Body) + if maxBodySize > 0 { + if res.ContentLength > maxBodySize { + return nil, ErrResponseSize + } + body = io.LimitReader(body, maxBodySize+1) + } + slurp, err := ioutil.ReadAll(body) if err != nil { return nil, err } + if maxBodySize > 0 && int64(len(slurp)) > maxBodySize { + return nil, ErrResponseSize + } // HEAD requests return a body but no content if len(slurp) > 0 { r.Body = json.RawMessage(slurp) diff --git a/vendor/gopkg.in/olivere/elastic.v6/retrier.go b/vendor/github.com/olivere/elastic/v7/retrier.go similarity index 100% rename from vendor/gopkg.in/olivere/elastic.v6/retrier.go rename to vendor/github.com/olivere/elastic/v7/retrier.go diff --git a/vendor/gopkg.in/olivere/elastic.v6/retry.go b/vendor/github.com/olivere/elastic/v7/retry.go similarity index 100% rename from vendor/gopkg.in/olivere/elastic.v6/retry.go rename to vendor/github.com/olivere/elastic/v7/retry.go diff --git a/vendor/gopkg.in/olivere/elastic.v6/run-es.sh b/vendor/github.com/olivere/elastic/v7/run-es.sh old mode 100755 new mode 100644 similarity index 91% rename from vendor/gopkg.in/olivere/elastic.v6/run-es.sh rename to vendor/github.com/olivere/elastic/v7/run-es.sh index 887c1d18a8de66e62060ab42a0c1a9053a912f8e..8b60fbc95d76d4c007814682da64b2167f4e3649 --- a/vendor/gopkg.in/olivere/elastic.v6/run-es.sh +++ b/vendor/github.com/olivere/elastic/v7/run-es.sh @@ -1,3 +1,3 @@ #!/bin/sh -VERSION=${VERSION:=6.3.2} +VERSION=${VERSION:=6.4.0} docker run --rm -p 9200:9200 -e "http.host=0.0.0.0" -e "transport.host=127.0.0.1" -e "bootstrap.memory_lock=true" -e "ES_JAVA_OPTS=-Xms1g -Xmx1g" docker.elastic.co/elasticsearch/elasticsearch-oss:$VERSION elasticsearch -Enetwork.host=_local_,_site_ -Enetwork.publish_host=_local_ diff --git a/vendor/github.com/olivere/elastic/v7/run-tests.sh b/vendor/github.com/olivere/elastic/v7/run-tests.sh new file mode 100644 index 0000000000000000000000000000000000000000..1204ad367aac96bc34bdbc42bfc10334d5cdaeba --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/run-tests.sh @@ -0,0 +1,2 @@ +#!/bin/sh +go test . ./aws/... ./config/... ./trace/... ./uritemplates/... diff --git a/vendor/gopkg.in/olivere/elastic.v6/script.go b/vendor/github.com/olivere/elastic/v7/script.go similarity index 69% rename from vendor/gopkg.in/olivere/elastic.v6/script.go rename to vendor/github.com/olivere/elastic/v7/script.go index 192c3c3f57158cf7a3b4d101db13bc5c66e863d9..ce3bd83d87f73f28925ee7c0fe8579770e7b6c26 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/script.go +++ b/vendor/github.com/olivere/elastic/v7/script.go @@ -4,12 +4,17 @@ package elastic -import "errors" - -// Script holds all the paramaters necessary to compile or find in cache +import ( + "encoding/json" + "errors" + "fmt" + "strings" +) + +// Script holds all the parameters necessary to compile or find in cache // and then execute a script. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/modules-scripting.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/modules-scripting.html // for details of scripting. type Script struct { script string @@ -53,10 +58,9 @@ func (s *Script) Type(typ string) *Script { return s } -// Lang sets the language of the script. Permitted values are "groovy", -// "expression", "mustache", "mvel" (default), "javascript", "python". -// To use certain languages, you need to configure your server and/or -// add plugins. See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/modules-scripting.html +// Lang sets the language of the script. The default scripting language +// is Painless ("painless"). +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/modules-scripting.html // for details. func (s *Script) Lang(lang string) *Script { s.lang = lang @@ -86,7 +90,11 @@ func (s *Script) Source() (interface{}, error) { source := make(map[string]interface{}) // Beginning with 6.0, the type can only be "source" or "id" if s.typ == "" || s.typ == "inline" { - source["source"] = s.script + src, err := s.rawScriptSource(s.script) + if err != nil { + return nil, err + } + source["source"] = src } else { source["id"] = s.script } @@ -99,13 +107,27 @@ func (s *Script) Source() (interface{}, error) { return source, nil } +// rawScriptSource returns an embeddable script. If it uses a short +// script form, e.g. "ctx._source.likes++" (without the quotes), it +// is quoted. Otherwise it returns the raw script that will be directly +// embedded into the JSON data. +func (s *Script) rawScriptSource(script string) (interface{}, error) { + v := strings.TrimSpace(script) + if !strings.HasPrefix(v, "{") && !strings.HasPrefix(v, `"`) { + v = fmt.Sprintf("%q", v) + } + raw := json.RawMessage(v) + return &raw, nil +} + // -- Script Field -- // ScriptField is a single script field. type ScriptField struct { FieldName string // name of the field - script *Script + script *Script + ignoreFailure *bool // used in e.g. ScriptSource } // NewScriptField creates and initializes a new ScriptField. @@ -113,6 +135,13 @@ func NewScriptField(fieldName string, script *Script) *ScriptField { return &ScriptField{FieldName: fieldName, script: script} } +// IgnoreFailure indicates whether to ignore failures. It is used +// in e.g. ScriptSource. +func (f *ScriptField) IgnoreFailure(ignore bool) *ScriptField { + f.ignoreFailure = &ignore + return f +} + // Source returns the serializable JSON for the ScriptField. func (f *ScriptField) Source() (interface{}, error) { if f.script == nil { @@ -124,5 +153,8 @@ func (f *ScriptField) Source() (interface{}, error) { return nil, err } source["script"] = src + if v := f.ignoreFailure; v != nil { + source["ignore_failure"] = *v + } return source, nil } diff --git a/vendor/gopkg.in/olivere/elastic.v6/script_delete.go b/vendor/github.com/olivere/elastic/v7/script_delete.go similarity index 57% rename from vendor/gopkg.in/olivere/elastic.v6/script_delete.go rename to vendor/github.com/olivere/elastic/v7/script_delete.go index f71b31d5c2962634baef77b790936a243e6044fc..dc6833606cbc284ff2bda5e52d6ef7e60834002f 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/script_delete.go +++ b/vendor/github.com/olivere/elastic/v7/script_delete.go @@ -7,18 +7,26 @@ package elastic import ( "context" "fmt" + "net/http" "net/url" + "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // DeleteScriptService removes a stored script in Elasticsearch. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/modules-scripting.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/modules-scripting.html // for details. type DeleteScriptService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + id string timeout string masterTimeout string @@ -31,6 +39,46 @@ func NewDeleteScriptService(client *Client) *DeleteScriptService { } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *DeleteScriptService) Pretty(pretty bool) *DeleteScriptService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *DeleteScriptService) Human(human bool) *DeleteScriptService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *DeleteScriptService) ErrorTrace(errorTrace bool) *DeleteScriptService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *DeleteScriptService) FilterPath(filterPath ...string) *DeleteScriptService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *DeleteScriptService) Header(name string, value string) *DeleteScriptService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *DeleteScriptService) Headers(headers http.Header) *DeleteScriptService { + s.headers = headers + return s +} + // Id is the script ID. func (s *DeleteScriptService) Id(id string) *DeleteScriptService { s.id = id @@ -49,12 +97,6 @@ func (s *DeleteScriptService) MasterTimeout(masterTimeout string) *DeleteScriptS return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *DeleteScriptService) Pretty(pretty bool) *DeleteScriptService { - s.pretty = pretty - return s -} - // buildURL builds the URL for the operation. func (s *DeleteScriptService) buildURL() (string, string, url.Values, error) { var ( @@ -72,8 +114,17 @@ func (s *DeleteScriptService) buildURL() (string, string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if s.timeout != "" { params.Set("timeout", s.timeout) @@ -111,9 +162,10 @@ func (s *DeleteScriptService) Do(ctx context.Context) (*DeleteScriptResponse, er // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: method, - Path: path, - Params: params, + Method: method, + Path: path, + Params: params, + Headers: s.headers, }) if err != nil { return nil, err diff --git a/vendor/gopkg.in/olivere/elastic.v6/script_get.go b/vendor/github.com/olivere/elastic/v7/script_get.go similarity index 52% rename from vendor/gopkg.in/olivere/elastic.v6/script_get.go rename to vendor/github.com/olivere/elastic/v7/script_get.go index 313d539848297e6380f92b1d8806ae5fc6c5b304..81cedac710113ca663d5be33a1dfad720b068259 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/script_get.go +++ b/vendor/github.com/olivere/elastic/v7/script_get.go @@ -8,19 +8,27 @@ import ( "context" "encoding/json" "fmt" + "net/http" "net/url" + "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // GetScriptService reads a stored script in Elasticsearch. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/modules-scripting.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/modules-scripting.html // for details. type GetScriptService struct { client *Client - pretty bool - id string + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + + id string } // NewGetScriptService creates a new GetScriptService. @@ -30,15 +38,49 @@ func NewGetScriptService(client *Client) *GetScriptService { } } -// Id is the script ID. -func (s *GetScriptService) Id(id string) *GetScriptService { - s.id = id +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *GetScriptService) Pretty(pretty bool) *GetScriptService { + s.pretty = &pretty return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *GetScriptService) Pretty(pretty bool) *GetScriptService { - s.pretty = pretty +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *GetScriptService) Human(human bool) *GetScriptService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *GetScriptService) ErrorTrace(errorTrace bool) *GetScriptService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *GetScriptService) FilterPath(filterPath ...string) *GetScriptService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *GetScriptService) Header(name string, value string) *GetScriptService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *GetScriptService) Headers(headers http.Header) *GetScriptService { + s.headers = headers + return s +} + +// Id is the script ID. +func (s *GetScriptService) Id(id string) *GetScriptService { + s.id = id return s } @@ -59,8 +101,17 @@ func (s *GetScriptService) buildURL() (string, string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } return method, path, params, nil } @@ -92,9 +143,10 @@ func (s *GetScriptService) Do(ctx context.Context) (*GetScriptResponse, error) { // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: method, - Path: path, - Params: params, + Method: method, + Path: path, + Params: params, + Headers: s.headers, }) if err != nil { return nil, err @@ -108,7 +160,7 @@ func (s *GetScriptService) Do(ctx context.Context) (*GetScriptResponse, error) { return ret, nil } -// GetScriptResponse is the result of deleting a stored script +// GetScriptResponse is the result of getting a stored script // in Elasticsearch. type GetScriptResponse struct { Id string `json:"_id"` diff --git a/vendor/gopkg.in/olivere/elastic.v6/script_put.go b/vendor/github.com/olivere/elastic/v7/script_put.go similarity index 64% rename from vendor/gopkg.in/olivere/elastic.v6/script_put.go rename to vendor/github.com/olivere/elastic/v7/script_put.go index c7310f5f92fb666be257cd020355f3980d5bb568..f8b831a29d1c8cd0480fbddd2152afec4867d3a0 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/script_put.go +++ b/vendor/github.com/olivere/elastic/v7/script_put.go @@ -7,18 +7,26 @@ package elastic import ( "context" "fmt" + "net/http" "net/url" + "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // PutScriptService adds or updates a stored script in Elasticsearch. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/modules-scripting.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/modules-scripting.html // for details. type PutScriptService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + id string context string timeout string @@ -34,6 +42,46 @@ func NewPutScriptService(client *Client) *PutScriptService { } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *PutScriptService) Pretty(pretty bool) *PutScriptService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *PutScriptService) Human(human bool) *PutScriptService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *PutScriptService) ErrorTrace(errorTrace bool) *PutScriptService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *PutScriptService) FilterPath(filterPath ...string) *PutScriptService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *PutScriptService) Header(name string, value string) *PutScriptService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *PutScriptService) Headers(headers http.Header) *PutScriptService { + s.headers = headers + return s +} + // Id is the script ID. func (s *PutScriptService) Id(id string) *PutScriptService { s.id = id @@ -58,12 +106,6 @@ func (s *PutScriptService) MasterTimeout(masterTimeout string) *PutScriptService return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *PutScriptService) Pretty(pretty bool) *PutScriptService { - s.pretty = pretty - return s -} - // BodyJson is the document as a serializable JSON interface. func (s *PutScriptService) BodyJson(body interface{}) *PutScriptService { s.bodyJson = body @@ -100,8 +142,17 @@ func (s *PutScriptService) buildURL() (string, string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if s.timeout != "" { params.Set("timeout", s.timeout) @@ -150,10 +201,11 @@ func (s *PutScriptService) Do(ctx context.Context) (*PutScriptResponse, error) { // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: method, - Path: path, - Params: params, - Body: body, + Method: method, + Path: path, + Params: params, + Body: body, + Headers: s.headers, }) if err != nil { return nil, err diff --git a/vendor/gopkg.in/olivere/elastic.v6/scroll.go b/vendor/github.com/olivere/elastic/v7/scroll.go similarity index 67% rename from vendor/gopkg.in/olivere/elastic.v6/scroll.go rename to vendor/github.com/olivere/elastic/v7/scroll.go index 7a2671c0907f656e43283a90997cee4c24021cf3..3819d91b0efae33e21a3017dcd6e75f5fe872ab2 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/scroll.go +++ b/vendor/github.com/olivere/elastic/v7/scroll.go @@ -8,11 +8,12 @@ import ( "context" "fmt" "io" + "net/http" "net/url" "strings" "sync" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) const ( @@ -22,20 +23,27 @@ const ( // ScrollService iterates over pages of search results from Elasticsearch. type ScrollService struct { - client *Client - retrier Retrier + client *Client + retrier Retrier + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + indices []string types []string keepAlive string body interface{} ss *SearchSource size *int - pretty bool routing string preference string ignoreUnavailable *bool allowNoIndices *bool expandWildcards string + maxResponseSize int64 mu sync.RWMutex scrollId string @@ -51,6 +59,46 @@ func NewScrollService(client *Client) *ScrollService { return builder } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *ScrollService) Pretty(pretty bool) *ScrollService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *ScrollService) Human(human bool) *ScrollService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *ScrollService) ErrorTrace(errorTrace bool) *ScrollService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *ScrollService) FilterPath(filterPath ...string) *ScrollService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *ScrollService) Header(name string, value string) *ScrollService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *ScrollService) Headers(headers http.Header) *ScrollService { + s.headers = headers + return s +} + // Retrier allows to set specific retry logic for this ScrollService. // If not specified, it will use the client's default retrier. func (s *ScrollService) Retrier(retrier Retrier) *ScrollService { @@ -68,6 +116,9 @@ func (s *ScrollService) Index(indices ...string) *ScrollService { } // Type sets the name of one or more types to iterate over. +// +// Deprecated: Types are in the process of being removed. Instead of using a type, prefer to +// filter on a field on the document. func (s *ScrollService) Type(types ...string) *ScrollService { if s.types == nil { s.types = make([]string, 0) @@ -84,7 +135,7 @@ func (s *ScrollService) Scroll(keepAlive string) *ScrollService { } // KeepAlive sets the maximum time after which the cursor will expire. -// It is "2m" by default. +// It is "5m" by default. func (s *ScrollService) KeepAlive(keepAlive string) *ScrollService { s.keepAlive = keepAlive return s @@ -97,6 +148,12 @@ func (s *ScrollService) Size(size int) *ScrollService { return s } +// Highlight allows to highlight search results on one or more fields +func (s *ScrollService) Highlight(highlight *Highlight) *ScrollService { + s.ss = s.ss.Highlight(highlight) + return s +} + // Body sets the raw body to send to Elasticsearch. This can be e.g. a string, // a map[string]interface{} or anything that can be serialized into JSON. // Notice that setting the body disables the use of SearchSource and many @@ -125,7 +182,7 @@ func (s *ScrollService) Query(query Query) *ScrollService { // PostFilter is executed as the last filter. It only affects the // search hits but not facets. See -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-request-post-filter.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-request-post-filter.html // for details. func (s *ScrollService) PostFilter(postFilter Query) *ScrollService { s.ss = s.ss.PostFilter(postFilter) @@ -134,7 +191,7 @@ func (s *ScrollService) PostFilter(postFilter Query) *ScrollService { // Slice allows slicing the scroll request into several batches. // This is supported in Elasticsearch 5.0 or later. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-request-scroll.html#sliced-scroll +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-request-scroll.html#sliced-scroll // for details. func (s *ScrollService) Slice(sliceQuery Query) *ScrollService { s.ss = s.ss.Slice(sliceQuery) @@ -155,7 +212,7 @@ func (s *ScrollService) FetchSourceContext(fetchSourceContext *FetchSourceContex } // Version can be set to true to return a version for each search hit. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-request-version.html. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-request-version.html. func (s *ScrollService) Version(version bool) *ScrollService { s.ss = s.ss.Version(version) return s @@ -182,9 +239,12 @@ func (s *ScrollService) SortBy(sorter ...Sorter) *ScrollService { return s } -// Pretty asks Elasticsearch to pretty-print the returned JSON. -func (s *ScrollService) Pretty(pretty bool) *ScrollService { - s.pretty = pretty +// TrackTotalHits controls if the total hit count for the query should be tracked. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.1/search-request-track-total-hits.html +// for details. +func (s *ScrollService) TrackTotalHits(trackTotalHits interface{}) *ScrollService { + s.ss = s.ss.TrackTotalHits(trackTotalHits) return s } @@ -227,6 +287,13 @@ func (s *ScrollService) ExpandWildcards(expandWildcards string) *ScrollService { return s } +// MaxResponseSize sets an upper limit on the response body size that we accept, +// to guard against OOM situations. +func (s *ScrollService) MaxResponseSize(maxResponseSize int64) *ScrollService { + s.maxResponseSize = maxResponseSize + return s +} + // ScrollId specifies the identifier of a scroll in action. func (s *ScrollService) ScrollId(scrollId string) *ScrollService { s.mu.Lock() @@ -260,6 +327,18 @@ func (s *ScrollService) Clear(ctx context.Context) error { path := "/_search/scroll" params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } body := struct { ScrollId []string `json:"scroll_id,omitempty"` }{ @@ -298,11 +377,13 @@ func (s *ScrollService) first(ctx context.Context) (*SearchResult, error) { // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "POST", - Path: path, - Params: params, - Body: body, - Retrier: s.retrier, + Method: "POST", + Path: path, + Params: params, + Body: body, + Retrier: s.retrier, + Headers: s.headers, + MaxResponseSize: s.maxResponseSize, }) if err != nil { return nil, err @@ -317,7 +398,7 @@ func (s *ScrollService) first(ctx context.Context) (*SearchResult, error) { s.scrollId = ret.ScrollId s.mu.Unlock() if ret.Hits == nil || len(ret.Hits.Hits) == 0 { - return nil, io.EOF + return ret, io.EOF } return ret, nil } @@ -349,8 +430,28 @@ func (s *ScrollService) buildFirstURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + // Always add "hits._scroll_id", otherwise we cannot scroll + var found bool + for _, path := range s.filterPath { + if path == "_scroll_id" { + found = true + break + } + } + if !found { + s.filterPath = append(s.filterPath, "_scroll_id") + } + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if s.size != nil && *s.size > 0 { params.Set("size", fmt.Sprintf("%d", *s.size)) @@ -418,11 +519,13 @@ func (s *ScrollService) next(ctx context.Context) (*SearchResult, error) { // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "POST", - Path: path, - Params: params, - Body: body, - Retrier: s.retrier, + Method: "POST", + Path: path, + Params: params, + Body: body, + Retrier: s.retrier, + Headers: s.headers, + MaxResponseSize: s.maxResponseSize, }) if err != nil { return nil, err @@ -437,7 +540,7 @@ func (s *ScrollService) next(ctx context.Context) (*SearchResult, error) { s.scrollId = ret.ScrollId s.mu.Unlock() if ret.Hits == nil || len(ret.Hits.Hits) == 0 { - return nil, io.EOF + return ret, io.EOF } return ret, nil } @@ -448,8 +551,28 @@ func (s *ScrollService) buildNextURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + // Always add "hits._scroll_id", otherwise we cannot scroll + var found bool + for _, path := range s.filterPath { + if path == "_scroll_id" { + found = true + break + } + } + if !found { + s.filterPath = append(s.filterPath, "_scroll_id") + } + params.Set("filter_path", strings.Join(s.filterPath, ",")) } return path, params, nil @@ -468,3 +591,31 @@ func (s *ScrollService) bodyNext() (interface{}, error) { s.mu.RUnlock() return body, nil } + +// DocvalueField adds a single field to load from the field data cache +// and return as part of the search. +func (s *ScrollService) DocvalueField(docvalueField string) *ScrollService { + s.ss = s.ss.DocvalueField(docvalueField) + return s +} + +// DocvalueFieldWithFormat adds a single field to load from the field data cache +// and return as part of the search. +func (s *ScrollService) DocvalueFieldWithFormat(docvalueField DocvalueField) *ScrollService { + s.ss = s.ss.DocvalueFieldWithFormat(docvalueField) + return s +} + +// DocvalueFields adds one or more fields to load from the field data cache +// and return as part of the search. +func (s *ScrollService) DocvalueFields(docvalueFields ...string) *ScrollService { + s.ss = s.ss.DocvalueFields(docvalueFields...) + return s +} + +// DocvalueFieldsWithFormat adds one or more fields to load from the field data cache +// and return as part of the search. +func (s *ScrollService) DocvalueFieldsWithFormat(docvalueFields ...DocvalueField) *ScrollService { + s.ss = s.ss.DocvalueFieldsWithFormat(docvalueFields...) + return s +} diff --git a/vendor/github.com/olivere/elastic/v7/search.go b/vendor/github.com/olivere/elastic/v7/search.go new file mode 100644 index 0000000000000000000000000000000000000000..16351045752d80081f4bd8f5483731377779b02f --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/search.go @@ -0,0 +1,868 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "net/url" + "reflect" + "strings" + + "github.com/olivere/elastic/v7/uritemplates" +) + +// Search for documents in Elasticsearch. +type SearchService struct { + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + + searchSource *SearchSource // q + source interface{} + searchType string // search_type + index []string + typ []string + routing string // routing + preference string // preference + requestCache *bool // request_cache + ignoreUnavailable *bool // ignore_unavailable + ignoreThrottled *bool // ignore_throttled + allowNoIndices *bool // allow_no_indices + expandWildcards string // expand_wildcards + lenient *bool // lenient + maxResponseSize int64 + allowPartialSearchResults *bool // allow_partial_search_results + typedKeys *bool // typed_keys + seqNoPrimaryTerm *bool // seq_no_primary_term + batchedReduceSize *int // batched_reduce_size + maxConcurrentShardRequests *int // max_concurrent_shard_requests + preFilterShardSize *int // pre_filter_shard_size + restTotalHitsAsInt *bool // rest_total_hits_as_int + + ccsMinimizeRoundtrips *bool // ccs_minimize_roundtrips + +} + +// NewSearchService creates a new service for searching in Elasticsearch. +func NewSearchService(client *Client) *SearchService { + builder := &SearchService{ + client: client, + searchSource: NewSearchSource(), + } + return builder +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *SearchService) Pretty(pretty bool) *SearchService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *SearchService) Human(human bool) *SearchService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *SearchService) ErrorTrace(errorTrace bool) *SearchService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *SearchService) FilterPath(filterPath ...string) *SearchService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *SearchService) Header(name string, value string) *SearchService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *SearchService) Headers(headers http.Header) *SearchService { + s.headers = headers + return s +} + +// SearchSource sets the search source builder to use with this service. +func (s *SearchService) SearchSource(searchSource *SearchSource) *SearchService { + s.searchSource = searchSource + if s.searchSource == nil { + s.searchSource = NewSearchSource() + } + return s +} + +// Source allows the user to set the request body manually without using +// any of the structs and interfaces in Elastic. +func (s *SearchService) Source(source interface{}) *SearchService { + s.source = source + return s +} + +// Index sets the names of the indices to use for search. +func (s *SearchService) Index(index ...string) *SearchService { + s.index = append(s.index, index...) + return s +} + +// Type adds search restrictions for a list of types. +// +// Deprecated: Types are in the process of being removed. Instead of using a type, prefer to +// filter on a field on the document. +func (s *SearchService) Type(typ ...string) *SearchService { + s.typ = append(s.typ, typ...) + return s +} + +// Timeout sets the timeout to use, e.g. "1s" or "1000ms". +func (s *SearchService) Timeout(timeout string) *SearchService { + s.searchSource = s.searchSource.Timeout(timeout) + return s +} + +// Profile sets the Profile API flag on the search source. +// When enabled, a search executed by this service will return query +// profiling data. +func (s *SearchService) Profile(profile bool) *SearchService { + s.searchSource = s.searchSource.Profile(profile) + return s +} + +// Collapse adds field collapsing. +func (s *SearchService) Collapse(collapse *CollapseBuilder) *SearchService { + s.searchSource = s.searchSource.Collapse(collapse) + return s +} + +// TimeoutInMillis sets the timeout in milliseconds. +func (s *SearchService) TimeoutInMillis(timeoutInMillis int) *SearchService { + s.searchSource = s.searchSource.TimeoutInMillis(timeoutInMillis) + return s +} + +// TerminateAfter specifies the maximum number of documents to collect for +// each shard, upon reaching which the query execution will terminate early. +func (s *SearchService) TerminateAfter(terminateAfter int) *SearchService { + s.searchSource = s.searchSource.TerminateAfter(terminateAfter) + return s +} + +// SearchType sets the search operation type. Valid values are: +// "dfs_query_then_fetch" and "query_then_fetch". +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-request-search-type.html +// for details. +func (s *SearchService) SearchType(searchType string) *SearchService { + s.searchType = searchType + return s +} + +// Routing is a list of specific routing values to control the shards +// the search will be executed on. +func (s *SearchService) Routing(routings ...string) *SearchService { + s.routing = strings.Join(routings, ",") + return s +} + +// Preference sets the preference to execute the search. Defaults to +// randomize across shards ("random"). Can be set to "_local" to prefer +// local shards, "_primary" to execute on primary shards only, +// or a custom value which guarantees that the same order will be used +// across different requests. +func (s *SearchService) Preference(preference string) *SearchService { + s.preference = preference + return s +} + +// RequestCache indicates whether the cache should be used for this +// request or not, defaults to index level setting. +func (s *SearchService) RequestCache(requestCache bool) *SearchService { + s.requestCache = &requestCache + return s +} + +// Query sets the query to perform, e.g. MatchAllQuery. +func (s *SearchService) Query(query Query) *SearchService { + s.searchSource = s.searchSource.Query(query) + return s +} + +// PostFilter will be executed after the query has been executed and +// only affects the search hits, not the aggregations. +// This filter is always executed as the last filtering mechanism. +func (s *SearchService) PostFilter(postFilter Query) *SearchService { + s.searchSource = s.searchSource.PostFilter(postFilter) + return s +} + +// FetchSource indicates whether the response should contain the stored +// _source for every hit. +func (s *SearchService) FetchSource(fetchSource bool) *SearchService { + s.searchSource = s.searchSource.FetchSource(fetchSource) + return s +} + +// FetchSourceContext indicates how the _source should be fetched. +func (s *SearchService) FetchSourceContext(fetchSourceContext *FetchSourceContext) *SearchService { + s.searchSource = s.searchSource.FetchSourceContext(fetchSourceContext) + return s +} + +// Highlight adds highlighting to the search. +func (s *SearchService) Highlight(highlight *Highlight) *SearchService { + s.searchSource = s.searchSource.Highlight(highlight) + return s +} + +// GlobalSuggestText defines the global text to use with all suggesters. +// This avoids repetition. +func (s *SearchService) GlobalSuggestText(globalText string) *SearchService { + s.searchSource = s.searchSource.GlobalSuggestText(globalText) + return s +} + +// Suggester adds a suggester to the search. +func (s *SearchService) Suggester(suggester Suggester) *SearchService { + s.searchSource = s.searchSource.Suggester(suggester) + return s +} + +// Aggregation adds an aggreation to perform as part of the search. +func (s *SearchService) Aggregation(name string, aggregation Aggregation) *SearchService { + s.searchSource = s.searchSource.Aggregation(name, aggregation) + return s +} + +// MinScore sets the minimum score below which docs will be filtered out. +func (s *SearchService) MinScore(minScore float64) *SearchService { + s.searchSource = s.searchSource.MinScore(minScore) + return s +} + +// From index to start the search from. Defaults to 0. +func (s *SearchService) From(from int) *SearchService { + s.searchSource = s.searchSource.From(from) + return s +} + +// Size is the number of search hits to return. Defaults to 10. +func (s *SearchService) Size(size int) *SearchService { + s.searchSource = s.searchSource.Size(size) + return s +} + +// Explain indicates whether each search hit should be returned with +// an explanation of the hit (ranking). +func (s *SearchService) Explain(explain bool) *SearchService { + s.searchSource = s.searchSource.Explain(explain) + return s +} + +// Version indicates whether each search hit should be returned with +// a version associated to it. +func (s *SearchService) Version(version bool) *SearchService { + s.searchSource = s.searchSource.Version(version) + return s +} + +// Sort adds a sort order. +func (s *SearchService) Sort(field string, ascending bool) *SearchService { + s.searchSource = s.searchSource.Sort(field, ascending) + return s +} + +// SortWithInfo adds a sort order. +func (s *SearchService) SortWithInfo(info SortInfo) *SearchService { + s.searchSource = s.searchSource.SortWithInfo(info) + return s +} + +// SortBy adds a sort order. +func (s *SearchService) SortBy(sorter ...Sorter) *SearchService { + s.searchSource = s.searchSource.SortBy(sorter...) + return s +} + +// DocvalueField adds a single field to load from the field data cache +// and return as part of the search. +func (s *SearchService) DocvalueField(docvalueField string) *SearchService { + s.searchSource = s.searchSource.DocvalueField(docvalueField) + return s +} + +// DocvalueFieldWithFormat adds a single field to load from the field data cache +// and return as part of the search. +func (s *SearchService) DocvalueFieldWithFormat(docvalueField DocvalueField) *SearchService { + s.searchSource = s.searchSource.DocvalueFieldWithFormat(docvalueField) + return s +} + +// DocvalueFields adds one or more fields to load from the field data cache +// and return as part of the search. +func (s *SearchService) DocvalueFields(docvalueFields ...string) *SearchService { + s.searchSource = s.searchSource.DocvalueFields(docvalueFields...) + return s +} + +// DocvalueFieldsWithFormat adds one or more fields to load from the field data cache +// and return as part of the search. +func (s *SearchService) DocvalueFieldsWithFormat(docvalueFields ...DocvalueField) *SearchService { + s.searchSource = s.searchSource.DocvalueFieldsWithFormat(docvalueFields...) + return s +} + +// NoStoredFields indicates that no stored fields should be loaded, resulting in only +// id and type to be returned per field. +func (s *SearchService) NoStoredFields() *SearchService { + s.searchSource = s.searchSource.NoStoredFields() + return s +} + +// StoredField adds a single field to load and return (note, must be stored) as +// part of the search request. If none are specified, the source of the +// document will be returned. +func (s *SearchService) StoredField(fieldName string) *SearchService { + s.searchSource = s.searchSource.StoredField(fieldName) + return s +} + +// StoredFields sets the fields to load and return as part of the search request. +// If none are specified, the source of the document will be returned. +func (s *SearchService) StoredFields(fields ...string) *SearchService { + s.searchSource = s.searchSource.StoredFields(fields...) + return s +} + +// TrackScores is applied when sorting and controls if scores will be +// tracked as well. Defaults to false. +func (s *SearchService) TrackScores(trackScores bool) *SearchService { + s.searchSource = s.searchSource.TrackScores(trackScores) + return s +} + +// TrackTotalHits controls if the total hit count for the query should be tracked. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.1/search-request-track-total-hits.html +// for details. +func (s *SearchService) TrackTotalHits(trackTotalHits interface{}) *SearchService { + s.searchSource = s.searchSource.TrackTotalHits(trackTotalHits) + return s +} + +// SearchAfter allows a different form of pagination by using a live cursor, +// using the results of the previous page to help the retrieval of the next. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-request-search-after.html +func (s *SearchService) SearchAfter(sortValues ...interface{}) *SearchService { + s.searchSource = s.searchSource.SearchAfter(sortValues...) + return s +} + +// DefaultRescoreWindowSize sets the rescore window size for rescores +// that don't specify their window. +func (s *SearchService) DefaultRescoreWindowSize(defaultRescoreWindowSize int) *SearchService { + s.searchSource = s.searchSource.DefaultRescoreWindowSize(defaultRescoreWindowSize) + return s +} + +// Rescorer adds a rescorer to the search. +func (s *SearchService) Rescorer(rescore *Rescore) *SearchService { + s.searchSource = s.searchSource.Rescorer(rescore) + return s +} + +// IgnoreUnavailable indicates whether the specified concrete indices +// should be ignored when unavailable (missing or closed). +func (s *SearchService) IgnoreUnavailable(ignoreUnavailable bool) *SearchService { + s.ignoreUnavailable = &ignoreUnavailable + return s +} + +// IgnoreThrottled indicates whether specified concrete, expanded or aliased +// indices should be ignored when throttled. +func (s *SearchService) IgnoreThrottled(ignoreThrottled bool) *SearchService { + s.ignoreThrottled = &ignoreThrottled + return s +} + +// AllowNoIndices indicates whether to ignore if a wildcard indices +// expression resolves into no concrete indices. (This includes `_all` string +// or when no indices have been specified). +func (s *SearchService) AllowNoIndices(allowNoIndices bool) *SearchService { + s.allowNoIndices = &allowNoIndices + return s +} + +// ExpandWildcards indicates whether to expand wildcard expression to +// concrete indices that are open, closed or both. +func (s *SearchService) ExpandWildcards(expandWildcards string) *SearchService { + s.expandWildcards = expandWildcards + return s +} + +// Lenient specifies whether format-based query failures (such as providing +// text to a numeric field) should be ignored. +func (s *SearchService) Lenient(lenient bool) *SearchService { + s.lenient = &lenient + return s +} + +// MaxResponseSize sets an upper limit on the response body size that we accept, +// to guard against OOM situations. +func (s *SearchService) MaxResponseSize(maxResponseSize int64) *SearchService { + s.maxResponseSize = maxResponseSize + return s +} + +// AllowPartialSearchResults indicates if an error should be returned if +// there is a partial search failure or timeout. +func (s *SearchService) AllowPartialSearchResults(enabled bool) *SearchService { + s.allowPartialSearchResults = &enabled + return s +} + +// TypedKeys specifies whether aggregation and suggester names should be +// prefixed by their respective types in the response. +func (s *SearchService) TypedKeys(enabled bool) *SearchService { + s.typedKeys = &enabled + return s +} + +// SeqNoPrimaryTerm specifies whether to return sequence number and +// primary term of the last modification of each hit. +func (s *SearchService) SeqNoPrimaryTerm(enabled bool) *SearchService { + s.seqNoPrimaryTerm = &enabled + return s +} + +// BatchedReduceSize specifies the number of shard results that should be reduced +// at once on the coordinating node. This value should be used as a protection +// mechanism to reduce the memory overhead per search request if the potential +// number of shards in the request can be large. +func (s *SearchService) BatchedReduceSize(size int) *SearchService { + s.batchedReduceSize = &size + return s +} + +// MaxConcurrentShardRequests specifies the number of concurrent shard requests +// this search executes concurrently. This value should be used to limit the +// impact of the search on the cluster in order to limit the number of +// concurrent shard requests. +func (s *SearchService) MaxConcurrentShardRequests(max int) *SearchService { + s.maxConcurrentShardRequests = &max + return s +} + +// PreFilterShardSize specifies a threshold that enforces a pre-filter roundtrip +// to prefilter search shards based on query rewriting if the number of shards +// the search request expands to exceeds the threshold. This filter roundtrip +// can limit the number of shards significantly if for instance a shard can +// not match any documents based on it's rewrite method i.e. if date filters are +// mandatory to match but the shard bounds and the query are disjoint. +func (s *SearchService) PreFilterShardSize(threshold int) *SearchService { + s.preFilterShardSize = &threshold + return s +} + +// RestTotalHitsAsInt indicates whether hits.total should be rendered as an +// integer or an object in the rest search response. +func (s *SearchService) RestTotalHitsAsInt(enabled bool) *SearchService { + s.restTotalHitsAsInt = &enabled + return s +} + +// CCSMinimizeRoundtrips indicates whether network round-trips should be minimized +// as part of cross-cluster search requests execution. +func (s *SearchService) CCSMinimizeRoundtrips(enabled bool) *SearchService { + s.ccsMinimizeRoundtrips = &enabled + return s +} + +// buildURL builds the URL for the operation. +func (s *SearchService) buildURL() (string, url.Values, error) { + var err error + var path string + + if len(s.index) > 0 && len(s.typ) > 0 { + path, err = uritemplates.Expand("/{index}/{type}/_search", map[string]string{ + "index": strings.Join(s.index, ","), + "type": strings.Join(s.typ, ","), + }) + } else if len(s.index) > 0 { + path, err = uritemplates.Expand("/{index}/_search", map[string]string{ + "index": strings.Join(s.index, ","), + }) + } else if len(s.typ) > 0 { + path, err = uritemplates.Expand("/_all/{type}/_search", map[string]string{ + "type": strings.Join(s.typ, ","), + }) + } else { + path = "/_search" + } + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } + if s.searchType != "" { + params.Set("search_type", s.searchType) + } + if s.routing != "" { + params.Set("routing", s.routing) + } + if s.preference != "" { + params.Set("preference", s.preference) + } + if v := s.requestCache; v != nil { + params.Set("request_cache", fmt.Sprint(*v)) + } + if v := s.allowNoIndices; v != nil { + params.Set("allow_no_indices", fmt.Sprint(*v)) + } + if s.expandWildcards != "" { + params.Set("expand_wildcards", s.expandWildcards) + } + if v := s.lenient; v != nil { + params.Set("lenient", fmt.Sprint(*v)) + } + if v := s.ignoreUnavailable; v != nil { + params.Set("ignore_unavailable", fmt.Sprint(*v)) + } + if v := s.ignoreThrottled; v != nil { + params.Set("ignore_throttled", fmt.Sprint(*v)) + } + if s.seqNoPrimaryTerm != nil { + params.Set("seq_no_primary_term", fmt.Sprint(*s.seqNoPrimaryTerm)) + } + if v := s.allowPartialSearchResults; v != nil { + params.Set("allow_partial_search_results", fmt.Sprint(*v)) + } + if v := s.typedKeys; v != nil { + params.Set("typed_keys", fmt.Sprint(*v)) + } + if v := s.batchedReduceSize; v != nil { + params.Set("batched_reduce_size", fmt.Sprint(*v)) + } + if v := s.maxConcurrentShardRequests; v != nil { + params.Set("max_concurrent_shard_requests", fmt.Sprint(*v)) + } + if v := s.preFilterShardSize; v != nil { + params.Set("pre_filter_shard_size", fmt.Sprint(*v)) + } + if v := s.restTotalHitsAsInt; v != nil { + params.Set("rest_total_hits_as_int", fmt.Sprint(*v)) + } + if v := s.ccsMinimizeRoundtrips; v != nil { + params.Set("ccs_minimize_roundtrips", fmt.Sprint(*v)) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *SearchService) Validate() error { + return nil +} + +// Do executes the search and returns a SearchResult. +func (s *SearchService) Do(ctx context.Context) (*SearchResult, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Perform request + var body interface{} + if s.source != nil { + body = s.source + } else { + src, err := s.searchSource.Source() + if err != nil { + return nil, err + } + body = src + } + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "POST", + Path: path, + Params: params, + Body: body, + Headers: s.headers, + MaxResponseSize: s.maxResponseSize, + }) + if err != nil { + return nil, err + } + + // Return search results + ret := new(SearchResult) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + ret.Header = res.Header + return nil, err + } + ret.Header = res.Header + return ret, nil +} + +// SearchResult is the result of a search in Elasticsearch. +type SearchResult struct { + Header http.Header `json:"-"` + TookInMillis int64 `json:"took,omitempty"` // search time in milliseconds + TerminatedEarly bool `json:"terminated_early,omitempty"` // request terminated early + NumReducePhases int `json:"num_reduce_phases,omitempty"` + Clusters *SearchResultCluster `json:"_clusters,omitempty"` // 6.1.0+ + ScrollId string `json:"_scroll_id,omitempty"` // only used with Scroll and Scan operations + Hits *SearchHits `json:"hits,omitempty"` // the actual search hits + Suggest SearchSuggest `json:"suggest,omitempty"` // results from suggesters + Aggregations Aggregations `json:"aggregations,omitempty"` // results from aggregations + TimedOut bool `json:"timed_out,omitempty"` // true if the search timed out + Error *ErrorDetails `json:"error,omitempty"` // only used in MultiGet + Profile *SearchProfile `json:"profile,omitempty"` // profiling results, if optional Profile API was active for this search + Shards *ShardsInfo `json:"_shards,omitempty"` // shard information + Status int `json:"status,omitempty"` // used in MultiSearch +} + +// SearchResultCluster holds information about a search response +// from a cluster. +type SearchResultCluster struct { + Successful int `json:"successful,omitempty"` + Total int `json:"total,omitempty"` + Skipped int `json:"skipped,omitempty"` +} + +// TotalHits is a convenience function to return the number of hits for +// a search result. The return value might not be accurate, unless +// track_total_hits parameter has set to true. +func (r *SearchResult) TotalHits() int64 { + if r.Hits != nil && r.Hits.TotalHits != nil { + return r.Hits.TotalHits.Value + } + return 0 +} + +// Each is a utility function to iterate over all hits. It saves you from +// checking for nil values. Notice that Each will ignore errors in +// serializing JSON and hits with empty/nil _source will get an empty +// value +func (r *SearchResult) Each(typ reflect.Type) []interface{} { + if r.Hits == nil || r.Hits.Hits == nil || len(r.Hits.Hits) == 0 { + return nil + } + var slice []interface{} + for _, hit := range r.Hits.Hits { + v := reflect.New(typ).Elem() + if hit.Source == nil { + slice = append(slice, v.Interface()) + continue + } + if err := json.Unmarshal(hit.Source, v.Addr().Interface()); err == nil { + slice = append(slice, v.Interface()) + } + } + return slice +} + +// SearchHits specifies the list of search hits. +type SearchHits struct { + TotalHits *TotalHits `json:"total,omitempty"` // total number of hits found + MaxScore *float64 `json:"max_score,omitempty"` // maximum score of all hits + Hits []*SearchHit `json:"hits,omitempty"` // the actual hits returned +} + +// NestedHit is a nested innerhit +type NestedHit struct { + Field string `json:"field"` + Offset int `json:"offset,omitempty"` + Child *NestedHit `json:"_nested,omitempty"` +} + +// TotalHits specifies total number of hits and its relation +type TotalHits struct { + Value int64 `json:"value"` // value of the total hit count + Relation string `json:"relation"` // how the value should be interpreted: accurate ("eq") or a lower bound ("gte") +} + +// UnmarshalJSON into TotalHits, accepting both the new response structure +// in ES 7.x as well as the older response structure in earlier versions. +// The latter can be enabled with RestTotalHitsAsInt(true). +func (h *TotalHits) UnmarshalJSON(data []byte) error { + if data == nil || string(data) == "null" { + return nil + } + var v struct { + Value int64 `json:"value"` // value of the total hit count + Relation string `json:"relation"` // how the value should be interpreted: accurate ("eq") or a lower bound ("gte") + } + if err := json.Unmarshal(data, &v); err != nil { + var count int64 + if err2 := json.Unmarshal(data, &count); err2 != nil { + return err // return inner error + } + h.Value = count + h.Relation = "eq" + return nil + } + *h = v + return nil +} + +// SearchHit is a single hit. +type SearchHit struct { + Score *float64 `json:"_score,omitempty"` // computed score + Index string `json:"_index,omitempty"` // index name + Type string `json:"_type,omitempty"` // type meta field + Id string `json:"_id,omitempty"` // external or internal + Uid string `json:"_uid,omitempty"` // uid meta field (see MapperService.java for all meta fields) + Routing string `json:"_routing,omitempty"` // routing meta field + Parent string `json:"_parent,omitempty"` // parent meta field + Version *int64 `json:"_version,omitempty"` // version number, when Version is set to true in SearchService + SeqNo *int64 `json:"_seq_no"` + PrimaryTerm *int64 `json:"_primary_term"` + Sort []interface{} `json:"sort,omitempty"` // sort information + Highlight SearchHitHighlight `json:"highlight,omitempty"` // highlighter information + Source json.RawMessage `json:"_source,omitempty"` // stored document source + Fields map[string]interface{} `json:"fields,omitempty"` // returned (stored) fields + Explanation *SearchExplanation `json:"_explanation,omitempty"` // explains how the score was computed + MatchedQueries []string `json:"matched_queries,omitempty"` // matched queries + InnerHits map[string]*SearchHitInnerHits `json:"inner_hits,omitempty"` // inner hits with ES >= 1.5.0 + Nested *NestedHit `json:"_nested,omitempty"` // for nested inner hits + Shard string `json:"_shard,omitempty"` // used e.g. in Search Explain + Node string `json:"_node,omitempty"` // used e.g. in Search Explain + + // HighlightFields + // SortValues + // MatchedFilters +} + +// SearchHitInnerHits is used for inner hits. +type SearchHitInnerHits struct { + Hits *SearchHits `json:"hits,omitempty"` +} + +// SearchExplanation explains how the score for a hit was computed. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-request-explain.html. +type SearchExplanation struct { + Value float64 `json:"value"` // e.g. 1.0 + Description string `json:"description"` // e.g. "boost" or "ConstantScore(*:*), product of:" + Details []SearchExplanation `json:"details,omitempty"` // recursive details +} + +// Suggest + +// SearchSuggest is a map of suggestions. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-suggesters.html. +type SearchSuggest map[string][]SearchSuggestion + +// SearchSuggestion is a single search suggestion. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-suggesters.html. +type SearchSuggestion struct { + Text string `json:"text"` + Offset int `json:"offset"` + Length int `json:"length"` + Options []SearchSuggestionOption `json:"options"` +} + +// SearchSuggestionOption is an option of a SearchSuggestion. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-suggesters.html. +type SearchSuggestionOption struct { + Text string `json:"text"` + Index string `json:"_index"` + Type string `json:"_type"` + Id string `json:"_id"` + Score float64 `json:"score"` // term and phrase suggesters uses "score" as of 6.2.4 + ScoreUnderscore float64 `json:"_score"` // completion and context suggesters uses "_score" as of 6.2.4 + Highlighted string `json:"highlighted"` + CollateMatch bool `json:"collate_match"` + Freq int `json:"freq"` // from TermSuggestion.Option in Java API + Source json.RawMessage `json:"_source"` + Contexts map[string][]string `json:"contexts,omitempty"` +} + +// SearchProfile is a list of shard profiling data collected during +// query execution in the "profile" section of a SearchResult +type SearchProfile struct { + Shards []SearchProfileShardResult `json:"shards"` +} + +// SearchProfileShardResult returns the profiling data for a single shard +// accessed during the search query or aggregation. +type SearchProfileShardResult struct { + ID string `json:"id"` + Searches []QueryProfileShardResult `json:"searches"` + Aggregations []ProfileResult `json:"aggregations"` +} + +// QueryProfileShardResult is a container class to hold the profile results +// for a single shard in the request. It comtains a list of query profiles, +// a collector tree and a total rewrite tree. +type QueryProfileShardResult struct { + Query []ProfileResult `json:"query,omitempty"` + RewriteTime int64 `json:"rewrite_time,omitempty"` + Collector []interface{} `json:"collector,omitempty"` +} + +// CollectorResult holds the profile timings of the collectors used in the +// search. Children's CollectorResults may be embedded inside of a parent +// CollectorResult. +type CollectorResult struct { + Name string `json:"name,omitempty"` + Reason string `json:"reason,omitempty"` + Time string `json:"time,omitempty"` + TimeNanos int64 `json:"time_in_nanos,omitempty"` + Children []CollectorResult `json:"children,omitempty"` +} + +// ProfileResult is the internal representation of a profiled query, +// corresponding to a single node in the query tree. +type ProfileResult struct { + Type string `json:"type"` + Description string `json:"description,omitempty"` + NodeTime string `json:"time,omitempty"` + NodeTimeNanos int64 `json:"time_in_nanos,omitempty"` + Breakdown map[string]int64 `json:"breakdown,omitempty"` + Children []ProfileResult `json:"children,omitempty"` +} + +// Aggregations (see search_aggs.go) + +// Highlighting + +// SearchHitHighlight is the highlight information of a search hit. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-request-highlighting.html +// for a general discussion of highlighting. +type SearchHitHighlight map[string][]string diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs.go b/vendor/github.com/olivere/elastic/v7/search_aggs.go similarity index 71% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs.go rename to vendor/github.com/olivere/elastic/v7/search_aggs.go index 62bbd08085f0f9bfcca9c09a7cc27fc94f8d2e2a..0ba9ebf8c21d27fdbb649446aaefe26be8d06b29 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs.go @@ -13,7 +13,7 @@ import ( // analytic information over a set of documents. It is // (in many senses) the follow-up of facets in Elasticsearch. // For more details about aggregations, visit: -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations.html type Aggregation interface { // Source returns a JSON-serializable aggregation that is a fragment // of the request sent to Elasticsearch. @@ -21,17 +21,17 @@ type Aggregation interface { } // Aggregations is a list of aggregations that are part of a search result. -type Aggregations map[string]*json.RawMessage +type Aggregations map[string]json.RawMessage // Min returns min aggregation results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-min-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-metrics-min-aggregation.html func (a Aggregations) Min(name string) (*AggregationValueMetric, bool) { if raw, found := a[name]; found { agg := new(AggregationValueMetric) if raw == nil { return agg, true } - if err := json.Unmarshal(*raw, agg); err == nil { + if err := json.Unmarshal(raw, agg); err == nil { return agg, true } } @@ -39,14 +39,14 @@ func (a Aggregations) Min(name string) (*AggregationValueMetric, bool) { } // Max returns max aggregation results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-max-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-metrics-max-aggregation.html func (a Aggregations) Max(name string) (*AggregationValueMetric, bool) { if raw, found := a[name]; found { agg := new(AggregationValueMetric) if raw == nil { return agg, true } - if err := json.Unmarshal(*raw, agg); err == nil { + if err := json.Unmarshal(raw, agg); err == nil { return agg, true } } @@ -54,14 +54,14 @@ func (a Aggregations) Max(name string) (*AggregationValueMetric, bool) { } // Sum returns sum aggregation results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-sum-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-metrics-sum-aggregation.html func (a Aggregations) Sum(name string) (*AggregationValueMetric, bool) { if raw, found := a[name]; found { agg := new(AggregationValueMetric) if raw == nil { return agg, true } - if err := json.Unmarshal(*raw, agg); err == nil { + if err := json.Unmarshal(raw, agg); err == nil { return agg, true } } @@ -69,14 +69,45 @@ func (a Aggregations) Sum(name string) (*AggregationValueMetric, bool) { } // Avg returns average aggregation results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-avg-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-metrics-avg-aggregation.html func (a Aggregations) Avg(name string) (*AggregationValueMetric, bool) { if raw, found := a[name]; found { agg := new(AggregationValueMetric) if raw == nil { return agg, true } - if err := json.Unmarshal(*raw, agg); err == nil { + if err := json.Unmarshal(raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// WeightedAvg computes the weighted average of numeric values that are extracted from the aggregated documents. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-metrics-weight-avg-aggregation.html +func (a Aggregations) WeightedAvg(name string) (*AggregationValueMetric, bool) { + if raw, found := a[name]; found { + agg := new(AggregationValueMetric) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// MedianAbsoluteDeviation returns median absolute deviation aggregation results. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.6/search-aggregations-metrics-median-absolute-deviation-aggregation.html +// for details. +func (a Aggregations) MedianAbsoluteDeviation(name string) (*AggregationValueMetric, bool) { + if raw, found := a[name]; found { + agg := new(AggregationValueMetric) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(raw, agg); err == nil { return agg, true } } @@ -84,14 +115,14 @@ func (a Aggregations) Avg(name string) (*AggregationValueMetric, bool) { } // ValueCount returns value-count aggregation results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-valuecount-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-metrics-valuecount-aggregation.html func (a Aggregations) ValueCount(name string) (*AggregationValueMetric, bool) { if raw, found := a[name]; found { agg := new(AggregationValueMetric) if raw == nil { return agg, true } - if err := json.Unmarshal(*raw, agg); err == nil { + if err := json.Unmarshal(raw, agg); err == nil { return agg, true } } @@ -99,14 +130,14 @@ func (a Aggregations) ValueCount(name string) (*AggregationValueMetric, bool) { } // Cardinality returns cardinality aggregation results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-cardinality-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-metrics-cardinality-aggregation.html func (a Aggregations) Cardinality(name string) (*AggregationValueMetric, bool) { if raw, found := a[name]; found { agg := new(AggregationValueMetric) if raw == nil { return agg, true } - if err := json.Unmarshal(*raw, agg); err == nil { + if err := json.Unmarshal(raw, agg); err == nil { return agg, true } } @@ -114,14 +145,14 @@ func (a Aggregations) Cardinality(name string) (*AggregationValueMetric, bool) { } // Stats returns stats aggregation results. -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-stats-aggregation.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-metrics-stats-aggregation.html func (a Aggregations) Stats(name string) (*AggregationStatsMetric, bool) { if raw, found := a[name]; found { agg := new(AggregationStatsMetric) if raw == nil { return agg, true } - if err := json.Unmarshal(*raw, agg); err == nil { + if err := json.Unmarshal(raw, agg); err == nil { return agg, true } } @@ -129,14 +160,14 @@ func (a Aggregations) Stats(name string) (*AggregationStatsMetric, bool) { } // ExtendedStats returns extended stats aggregation results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-extendedstats-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-metrics-extendedstats-aggregation.html func (a Aggregations) ExtendedStats(name string) (*AggregationExtendedStatsMetric, bool) { if raw, found := a[name]; found { agg := new(AggregationExtendedStatsMetric) if raw == nil { return agg, true } - if err := json.Unmarshal(*raw, agg); err == nil { + if err := json.Unmarshal(raw, agg); err == nil { return agg, true } } @@ -144,14 +175,14 @@ func (a Aggregations) ExtendedStats(name string) (*AggregationExtendedStatsMetri } // MatrixStats returns matrix stats aggregation results. -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-matrix-stats-aggregation.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-matrix-stats-aggregation.html func (a Aggregations) MatrixStats(name string) (*AggregationMatrixStats, bool) { if raw, found := a[name]; found { agg := new(AggregationMatrixStats) if raw == nil { return agg, true } - if err := json.Unmarshal(*raw, agg); err == nil { + if err := json.Unmarshal(raw, agg); err == nil { return agg, true } } @@ -159,14 +190,14 @@ func (a Aggregations) MatrixStats(name string) (*AggregationMatrixStats, bool) { } // Percentiles returns percentiles results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-percentile-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-metrics-percentile-aggregation.html func (a Aggregations) Percentiles(name string) (*AggregationPercentilesMetric, bool) { if raw, found := a[name]; found { agg := new(AggregationPercentilesMetric) if raw == nil { return agg, true } - if err := json.Unmarshal(*raw, agg); err == nil { + if err := json.Unmarshal(raw, agg); err == nil { return agg, true } } @@ -174,14 +205,14 @@ func (a Aggregations) Percentiles(name string) (*AggregationPercentilesMetric, b } // PercentileRanks returns percentile ranks results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-percentile-rank-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-metrics-percentile-rank-aggregation.html func (a Aggregations) PercentileRanks(name string) (*AggregationPercentilesMetric, bool) { if raw, found := a[name]; found { agg := new(AggregationPercentilesMetric) if raw == nil { return agg, true } - if err := json.Unmarshal(*raw, agg); err == nil { + if err := json.Unmarshal(raw, agg); err == nil { return agg, true } } @@ -189,14 +220,14 @@ func (a Aggregations) PercentileRanks(name string) (*AggregationPercentilesMetri } // TopHits returns top-hits aggregation results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-top-hits-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-metrics-top-hits-aggregation.html func (a Aggregations) TopHits(name string) (*AggregationTopHitsMetric, bool) { if raw, found := a[name]; found { agg := new(AggregationTopHitsMetric) if raw == nil { return agg, true } - if err := json.Unmarshal(*raw, agg); err == nil { + if err := json.Unmarshal(raw, agg); err == nil { return agg, true } } @@ -204,14 +235,14 @@ func (a Aggregations) TopHits(name string) (*AggregationTopHitsMetric, bool) { } // Global returns global results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-global-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-global-aggregation.html func (a Aggregations) Global(name string) (*AggregationSingleBucket, bool) { if raw, found := a[name]; found { agg := new(AggregationSingleBucket) if raw == nil { return agg, true } - if err := json.Unmarshal(*raw, agg); err == nil { + if err := json.Unmarshal(raw, agg); err == nil { return agg, true } } @@ -219,14 +250,14 @@ func (a Aggregations) Global(name string) (*AggregationSingleBucket, bool) { } // Filter returns filter results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-filter-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-filter-aggregation.html func (a Aggregations) Filter(name string) (*AggregationSingleBucket, bool) { if raw, found := a[name]; found { agg := new(AggregationSingleBucket) if raw == nil { return agg, true } - if err := json.Unmarshal(*raw, agg); err == nil { + if err := json.Unmarshal(raw, agg); err == nil { return agg, true } } @@ -234,14 +265,14 @@ func (a Aggregations) Filter(name string) (*AggregationSingleBucket, bool) { } // Filters returns filters results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-filters-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-filters-aggregation.html func (a Aggregations) Filters(name string) (*AggregationBucketFilters, bool) { if raw, found := a[name]; found { agg := new(AggregationBucketFilters) if raw == nil { return agg, true } - if err := json.Unmarshal(*raw, agg); err == nil { + if err := json.Unmarshal(raw, agg); err == nil { return agg, true } } @@ -249,14 +280,14 @@ func (a Aggregations) Filters(name string) (*AggregationBucketFilters, bool) { } // AdjacencyMatrix returning a form of adjacency matrix. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-adjacency-matrix-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-adjacency-matrix-aggregation.html func (a Aggregations) AdjacencyMatrix(name string) (*AggregationBucketAdjacencyMatrix, bool) { if raw, found := a[name]; found { agg := new(AggregationBucketAdjacencyMatrix) if raw == nil { return agg, true } - if err := json.Unmarshal(*raw, agg); err == nil { + if err := json.Unmarshal(raw, agg); err == nil { return agg, true } } @@ -264,14 +295,14 @@ func (a Aggregations) AdjacencyMatrix(name string) (*AggregationBucketAdjacencyM } // Missing returns missing results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-missing-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-missing-aggregation.html func (a Aggregations) Missing(name string) (*AggregationSingleBucket, bool) { if raw, found := a[name]; found { agg := new(AggregationSingleBucket) if raw == nil { return agg, true } - if err := json.Unmarshal(*raw, agg); err == nil { + if err := json.Unmarshal(raw, agg); err == nil { return agg, true } } @@ -279,14 +310,14 @@ func (a Aggregations) Missing(name string) (*AggregationSingleBucket, bool) { } // Nested returns nested results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-nested-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-nested-aggregation.html func (a Aggregations) Nested(name string) (*AggregationSingleBucket, bool) { if raw, found := a[name]; found { agg := new(AggregationSingleBucket) if raw == nil { return agg, true } - if err := json.Unmarshal(*raw, agg); err == nil { + if err := json.Unmarshal(raw, agg); err == nil { return agg, true } } @@ -294,14 +325,14 @@ func (a Aggregations) Nested(name string) (*AggregationSingleBucket, bool) { } // ReverseNested returns reverse-nested results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-reverse-nested-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-reverse-nested-aggregation.html func (a Aggregations) ReverseNested(name string) (*AggregationSingleBucket, bool) { if raw, found := a[name]; found { agg := new(AggregationSingleBucket) if raw == nil { return agg, true } - if err := json.Unmarshal(*raw, agg); err == nil { + if err := json.Unmarshal(raw, agg); err == nil { return agg, true } } @@ -309,14 +340,14 @@ func (a Aggregations) ReverseNested(name string) (*AggregationSingleBucket, bool } // Children returns children results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-children-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-children-aggregation.html func (a Aggregations) Children(name string) (*AggregationSingleBucket, bool) { if raw, found := a[name]; found { agg := new(AggregationSingleBucket) if raw == nil { return agg, true } - if err := json.Unmarshal(*raw, agg); err == nil { + if err := json.Unmarshal(raw, agg); err == nil { return agg, true } } @@ -324,14 +355,14 @@ func (a Aggregations) Children(name string) (*AggregationSingleBucket, bool) { } // Terms returns terms aggregation results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-terms-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-terms-aggregation.html func (a Aggregations) Terms(name string) (*AggregationBucketKeyItems, bool) { if raw, found := a[name]; found { agg := new(AggregationBucketKeyItems) if raw == nil { return agg, true } - if err := json.Unmarshal(*raw, agg); err == nil { + if err := json.Unmarshal(raw, agg); err == nil { return agg, true } } @@ -339,14 +370,29 @@ func (a Aggregations) Terms(name string) (*AggregationBucketKeyItems, bool) { } // SignificantTerms returns significant terms aggregation results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-significantterms-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-significantterms-aggregation.html func (a Aggregations) SignificantTerms(name string) (*AggregationBucketSignificantTerms, bool) { if raw, found := a[name]; found { agg := new(AggregationBucketSignificantTerms) if raw == nil { return agg, true } - if err := json.Unmarshal(*raw, agg); err == nil { + if err := json.Unmarshal(raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// RareTerms returns rate terms aggregation results. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-rare-terms-aggregation.html +func (a Aggregations) RareTerms(name string) (*AggregationBucketKeyItems, bool) { + if raw, found := a[name]; found { + agg := new(AggregationBucketKeyItems) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(raw, agg); err == nil { return agg, true } } @@ -354,14 +400,14 @@ func (a Aggregations) SignificantTerms(name string) (*AggregationBucketSignifica } // Sampler returns sampler aggregation results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-sampler-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-sampler-aggregation.html func (a Aggregations) Sampler(name string) (*AggregationSingleBucket, bool) { if raw, found := a[name]; found { agg := new(AggregationSingleBucket) if raw == nil { return agg, true } - if err := json.Unmarshal(*raw, agg); err == nil { + if err := json.Unmarshal(raw, agg); err == nil { return agg, true } } @@ -369,14 +415,14 @@ func (a Aggregations) Sampler(name string) (*AggregationSingleBucket, bool) { } // DiversifiedSampler returns diversified_sampler aggregation results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-diversified-sampler-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-diversified-sampler-aggregation.html func (a Aggregations) DiversifiedSampler(name string) (*AggregationSingleBucket, bool) { if raw, found := a[name]; found { agg := new(AggregationSingleBucket) if raw == nil { return agg, true } - if err := json.Unmarshal(*raw, agg); err == nil { + if err := json.Unmarshal(raw, agg); err == nil { return agg, true } } @@ -384,14 +430,14 @@ func (a Aggregations) DiversifiedSampler(name string) (*AggregationSingleBucket, } // Range returns range aggregation results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-range-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-range-aggregation.html func (a Aggregations) Range(name string) (*AggregationBucketRangeItems, bool) { if raw, found := a[name]; found { agg := new(AggregationBucketRangeItems) if raw == nil { return agg, true } - if err := json.Unmarshal(*raw, agg); err == nil { + if err := json.Unmarshal(raw, agg); err == nil { return agg, true } } @@ -399,14 +445,14 @@ func (a Aggregations) Range(name string) (*AggregationBucketRangeItems, bool) { } // KeyedRange returns keyed range aggregation results. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-range-aggregation.html. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-range-aggregation.html. func (a Aggregations) KeyedRange(name string) (*AggregationBucketKeyedRangeItems, bool) { if raw, found := a[name]; found { agg := new(AggregationBucketKeyedRangeItems) if raw == nil { return agg, true } - if err := json.Unmarshal(*raw, agg); err == nil { + if err := json.Unmarshal(raw, agg); err == nil { return agg, true } } @@ -414,14 +460,14 @@ func (a Aggregations) KeyedRange(name string) (*AggregationBucketKeyedRangeItems } // DateRange returns date range aggregation results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-daterange-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-daterange-aggregation.html func (a Aggregations) DateRange(name string) (*AggregationBucketRangeItems, bool) { if raw, found := a[name]; found { agg := new(AggregationBucketRangeItems) if raw == nil { return agg, true } - if err := json.Unmarshal(*raw, agg); err == nil { + if err := json.Unmarshal(raw, agg); err == nil { return agg, true } } @@ -429,14 +475,14 @@ func (a Aggregations) DateRange(name string) (*AggregationBucketRangeItems, bool } // IPRange returns IP range aggregation results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-iprange-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-iprange-aggregation.html func (a Aggregations) IPRange(name string) (*AggregationBucketRangeItems, bool) { if raw, found := a[name]; found { agg := new(AggregationBucketRangeItems) if raw == nil { return agg, true } - if err := json.Unmarshal(*raw, agg); err == nil { + if err := json.Unmarshal(raw, agg); err == nil { return agg, true } } @@ -444,14 +490,29 @@ func (a Aggregations) IPRange(name string) (*AggregationBucketRangeItems, bool) } // Histogram returns histogram aggregation results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-histogram-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-histogram-aggregation.html func (a Aggregations) Histogram(name string) (*AggregationBucketHistogramItems, bool) { if raw, found := a[name]; found { agg := new(AggregationBucketHistogramItems) if raw == nil { return agg, true } - if err := json.Unmarshal(*raw, agg); err == nil { + if err := json.Unmarshal(raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// AutoDateHistogram returns auto date histogram aggregation results. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-datehistogram-aggregation.html +func (a Aggregations) AutoDateHistogram(name string) (*AggregationBucketHistogramItems, bool) { + if raw, found := a[name]; found { + agg := new(AggregationBucketHistogramItems) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(raw, agg); err == nil { return agg, true } } @@ -459,14 +520,30 @@ func (a Aggregations) Histogram(name string) (*AggregationBucketHistogramItems, } // DateHistogram returns date histogram aggregation results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-datehistogram-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-datehistogram-aggregation.html func (a Aggregations) DateHistogram(name string) (*AggregationBucketHistogramItems, bool) { if raw, found := a[name]; found { agg := new(AggregationBucketHistogramItems) if raw == nil { return agg, true } - if err := json.Unmarshal(*raw, agg); err == nil { + if err := json.Unmarshal(raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// KeyedDateHistogram returns date histogram aggregation results for keyed responses. +// +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-datehistogram-aggregation.html#_keyed_response_3 +func (a Aggregations) KeyedDateHistogram(name string) (*AggregationBucketKeyedHistogramItems, bool) { + if raw, found := a[name]; found { + agg := new(AggregationBucketKeyedHistogramItems) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(raw, agg); err == nil { return agg, true } } @@ -474,14 +551,14 @@ func (a Aggregations) DateHistogram(name string) (*AggregationBucketHistogramIte } // GeoBounds returns geo-bounds aggregation results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-geobounds-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-metrics-geobounds-aggregation.html func (a Aggregations) GeoBounds(name string) (*AggregationGeoBoundsMetric, bool) { if raw, found := a[name]; found { agg := new(AggregationGeoBoundsMetric) if raw == nil { return agg, true } - if err := json.Unmarshal(*raw, agg); err == nil { + if err := json.Unmarshal(raw, agg); err == nil { return agg, true } } @@ -489,14 +566,14 @@ func (a Aggregations) GeoBounds(name string) (*AggregationGeoBoundsMetric, bool) } // GeoHash returns geo-hash aggregation results. -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-geohashgrid-aggregation.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-geohashgrid-aggregation.html func (a Aggregations) GeoHash(name string) (*AggregationBucketKeyItems, bool) { if raw, found := a[name]; found { agg := new(AggregationBucketKeyItems) if raw == nil { return agg, true } - if err := json.Unmarshal(*raw, agg); err == nil { + if err := json.Unmarshal(raw, agg); err == nil { return agg, true } } @@ -504,14 +581,14 @@ func (a Aggregations) GeoHash(name string) (*AggregationBucketKeyItems, bool) { } // GeoCentroid returns geo-centroid aggregation results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-geocentroid-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-metrics-geocentroid-aggregation.html func (a Aggregations) GeoCentroid(name string) (*AggregationGeoCentroidMetric, bool) { if raw, found := a[name]; found { agg := new(AggregationGeoCentroidMetric) if raw == nil { return agg, true } - if err := json.Unmarshal(*raw, agg); err == nil { + if err := json.Unmarshal(raw, agg); err == nil { return agg, true } } @@ -519,14 +596,14 @@ func (a Aggregations) GeoCentroid(name string) (*AggregationGeoCentroidMetric, b } // GeoDistance returns geo distance aggregation results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-geodistance-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-geodistance-aggregation.html func (a Aggregations) GeoDistance(name string) (*AggregationBucketRangeItems, bool) { if raw, found := a[name]; found { agg := new(AggregationBucketRangeItems) if raw == nil { return agg, true } - if err := json.Unmarshal(*raw, agg); err == nil { + if err := json.Unmarshal(raw, agg); err == nil { return agg, true } } @@ -534,14 +611,14 @@ func (a Aggregations) GeoDistance(name string) (*AggregationBucketRangeItems, bo } // AvgBucket returns average bucket pipeline aggregation results. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-avg-bucket-aggregation.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-pipeline-avg-bucket-aggregation.html func (a Aggregations) AvgBucket(name string) (*AggregationPipelineSimpleValue, bool) { if raw, found := a[name]; found { agg := new(AggregationPipelineSimpleValue) if raw == nil { return agg, true } - if err := json.Unmarshal(*raw, agg); err == nil { + if err := json.Unmarshal(raw, agg); err == nil { return agg, true } } @@ -549,14 +626,14 @@ func (a Aggregations) AvgBucket(name string) (*AggregationPipelineSimpleValue, b } // SumBucket returns sum bucket pipeline aggregation results. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-sum-bucket-aggregation.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-pipeline-sum-bucket-aggregation.html func (a Aggregations) SumBucket(name string) (*AggregationPipelineSimpleValue, bool) { if raw, found := a[name]; found { agg := new(AggregationPipelineSimpleValue) if raw == nil { return agg, true } - if err := json.Unmarshal(*raw, agg); err == nil { + if err := json.Unmarshal(raw, agg); err == nil { return agg, true } } @@ -564,14 +641,14 @@ func (a Aggregations) SumBucket(name string) (*AggregationPipelineSimpleValue, b } // StatsBucket returns stats bucket pipeline aggregation results. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-stats-bucket-aggregation.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-pipeline-stats-bucket-aggregation.html func (a Aggregations) StatsBucket(name string) (*AggregationPipelineStatsMetric, bool) { if raw, found := a[name]; found { agg := new(AggregationPipelineStatsMetric) if raw == nil { return agg, true } - if err := json.Unmarshal(*raw, agg); err == nil { + if err := json.Unmarshal(raw, agg); err == nil { return agg, true } } @@ -579,14 +656,14 @@ func (a Aggregations) StatsBucket(name string) (*AggregationPipelineStatsMetric, } // PercentilesBucket returns stats bucket pipeline aggregation results. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-percentiles-bucket-aggregation.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-pipeline-percentiles-bucket-aggregation.html func (a Aggregations) PercentilesBucket(name string) (*AggregationPipelinePercentilesMetric, bool) { if raw, found := a[name]; found { agg := new(AggregationPipelinePercentilesMetric) if raw == nil { return agg, true } - if err := json.Unmarshal(*raw, agg); err == nil { + if err := json.Unmarshal(raw, agg); err == nil { return agg, true } } @@ -594,14 +671,14 @@ func (a Aggregations) PercentilesBucket(name string) (*AggregationPipelinePercen } // MaxBucket returns maximum bucket pipeline aggregation results. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-max-bucket-aggregation.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-pipeline-max-bucket-aggregation.html func (a Aggregations) MaxBucket(name string) (*AggregationPipelineBucketMetricValue, bool) { if raw, found := a[name]; found { agg := new(AggregationPipelineBucketMetricValue) if raw == nil { return agg, true } - if err := json.Unmarshal(*raw, agg); err == nil { + if err := json.Unmarshal(raw, agg); err == nil { return agg, true } } @@ -609,14 +686,14 @@ func (a Aggregations) MaxBucket(name string) (*AggregationPipelineBucketMetricVa } // MinBucket returns minimum bucket pipeline aggregation results. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-min-bucket-aggregation.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-pipeline-min-bucket-aggregation.html func (a Aggregations) MinBucket(name string) (*AggregationPipelineBucketMetricValue, bool) { if raw, found := a[name]; found { agg := new(AggregationPipelineBucketMetricValue) if raw == nil { return agg, true } - if err := json.Unmarshal(*raw, agg); err == nil { + if err := json.Unmarshal(raw, agg); err == nil { return agg, true } } @@ -624,14 +701,31 @@ func (a Aggregations) MinBucket(name string) (*AggregationPipelineBucketMetricVa } // MovAvg returns moving average pipeline aggregation results. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-movavg-aggregation.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-pipeline-movavg-aggregation.html +// +// Deprecated: The MovAvgAggregation has been deprecated in 6.4.0. Use the more generate MovFnAggregation instead. func (a Aggregations) MovAvg(name string) (*AggregationPipelineSimpleValue, bool) { if raw, found := a[name]; found { agg := new(AggregationPipelineSimpleValue) if raw == nil { return agg, true } - if err := json.Unmarshal(*raw, agg); err == nil { + if err := json.Unmarshal(raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// MovFn returns moving function pipeline aggregation results. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-pipeline-movfn-aggregation.html +func (a Aggregations) MovFn(name string) (*AggregationPipelineSimpleValue, bool) { + if raw, found := a[name]; found { + agg := new(AggregationPipelineSimpleValue) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(raw, agg); err == nil { return agg, true } } @@ -639,14 +733,14 @@ func (a Aggregations) MovAvg(name string) (*AggregationPipelineSimpleValue, bool } // Derivative returns derivative pipeline aggregation results. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-derivative-aggregation.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-pipeline-derivative-aggregation.html func (a Aggregations) Derivative(name string) (*AggregationPipelineDerivative, bool) { if raw, found := a[name]; found { agg := new(AggregationPipelineDerivative) if raw == nil { return agg, true } - if err := json.Unmarshal(*raw, agg); err == nil { + if err := json.Unmarshal(raw, agg); err == nil { return agg, true } } @@ -654,14 +748,14 @@ func (a Aggregations) Derivative(name string) (*AggregationPipelineDerivative, b } // CumulativeSum returns a cumulative sum pipeline aggregation results. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-cumulative-sum-aggregation.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-pipeline-cumulative-sum-aggregation.html func (a Aggregations) CumulativeSum(name string) (*AggregationPipelineSimpleValue, bool) { if raw, found := a[name]; found { agg := new(AggregationPipelineSimpleValue) if raw == nil { return agg, true } - if err := json.Unmarshal(*raw, agg); err == nil { + if err := json.Unmarshal(raw, agg); err == nil { return agg, true } } @@ -669,14 +763,14 @@ func (a Aggregations) CumulativeSum(name string) (*AggregationPipelineSimpleValu } // BucketScript returns bucket script pipeline aggregation results. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-bucket-script-aggregation.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-pipeline-bucket-script-aggregation.html func (a Aggregations) BucketScript(name string) (*AggregationPipelineSimpleValue, bool) { if raw, found := a[name]; found { agg := new(AggregationPipelineSimpleValue) if raw == nil { return agg, true } - if err := json.Unmarshal(*raw, agg); err == nil { + if err := json.Unmarshal(raw, agg); err == nil { return agg, true } } @@ -684,14 +778,14 @@ func (a Aggregations) BucketScript(name string) (*AggregationPipelineSimpleValue } // SerialDiff returns serial differencing pipeline aggregation results. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-serialdiff-aggregation.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-pipeline-serialdiff-aggregation.html func (a Aggregations) SerialDiff(name string) (*AggregationPipelineSimpleValue, bool) { if raw, found := a[name]; found { agg := new(AggregationPipelineSimpleValue) if raw == nil { return agg, true } - if err := json.Unmarshal(*raw, agg); err == nil { + if err := json.Unmarshal(raw, agg); err == nil { return agg, true } } @@ -700,7 +794,7 @@ func (a Aggregations) SerialDiff(name string) (*AggregationPipelineSimpleValue, // Composite returns composite bucket aggregation results. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-composite-aggregation.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-composite-aggregation.html // for details. func (a Aggregations) Composite(name string) (*AggregationBucketCompositeItems, bool) { if raw, found := a[name]; found { @@ -708,7 +802,23 @@ func (a Aggregations) Composite(name string) (*AggregationBucketCompositeItems, if raw == nil { return agg, true } - if err := json.Unmarshal(*raw, agg); err == nil { + if err := json.Unmarshal(raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// ScriptedMetric returns scripted metric aggregation results. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.2/search-aggregations-metrics-scripted-metric-aggregation.html +// for details. +func (a Aggregations) ScriptedMetric(name string) (*AggregationScriptedMetric, bool) { + if raw, found := a[name]; found { + agg := new(AggregationScriptedMetric) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(raw, agg); err == nil { return agg, true } } @@ -728,15 +838,15 @@ type AggregationValueMetric struct { // UnmarshalJSON decodes JSON data and initializes an AggregationValueMetric structure. func (a *AggregationValueMetric) UnmarshalJSON(data []byte) error { - var aggs map[string]*json.RawMessage + var aggs map[string]json.RawMessage if err := json.Unmarshal(data, &aggs); err != nil { return err } if v, ok := aggs["value"]; ok && v != nil { - json.Unmarshal(*v, &a.Value) + json.Unmarshal(v, &a.Value) } if v, ok := aggs["meta"]; ok && v != nil { - json.Unmarshal(*v, &a.Meta) + json.Unmarshal(v, &a.Meta) } a.Aggregations = aggs return nil @@ -758,27 +868,27 @@ type AggregationStatsMetric struct { // UnmarshalJSON decodes JSON data and initializes an AggregationStatsMetric structure. func (a *AggregationStatsMetric) UnmarshalJSON(data []byte) error { - var aggs map[string]*json.RawMessage + var aggs map[string]json.RawMessage if err := json.Unmarshal(data, &aggs); err != nil { return err } if v, ok := aggs["count"]; ok && v != nil { - json.Unmarshal(*v, &a.Count) + json.Unmarshal(v, &a.Count) } if v, ok := aggs["min"]; ok && v != nil { - json.Unmarshal(*v, &a.Min) + json.Unmarshal(v, &a.Min) } if v, ok := aggs["max"]; ok && v != nil { - json.Unmarshal(*v, &a.Max) + json.Unmarshal(v, &a.Max) } if v, ok := aggs["avg"]; ok && v != nil { - json.Unmarshal(*v, &a.Avg) + json.Unmarshal(v, &a.Avg) } if v, ok := aggs["sum"]; ok && v != nil { - json.Unmarshal(*v, &a.Sum) + json.Unmarshal(v, &a.Sum) } if v, ok := aggs["meta"]; ok && v != nil { - json.Unmarshal(*v, &a.Meta) + json.Unmarshal(v, &a.Meta) } a.Aggregations = aggs return nil @@ -803,36 +913,36 @@ type AggregationExtendedStatsMetric struct { // UnmarshalJSON decodes JSON data and initializes an AggregationExtendedStatsMetric structure. func (a *AggregationExtendedStatsMetric) UnmarshalJSON(data []byte) error { - var aggs map[string]*json.RawMessage + var aggs map[string]json.RawMessage if err := json.Unmarshal(data, &aggs); err != nil { return err } if v, ok := aggs["count"]; ok && v != nil { - json.Unmarshal(*v, &a.Count) + json.Unmarshal(v, &a.Count) } if v, ok := aggs["min"]; ok && v != nil { - json.Unmarshal(*v, &a.Min) + json.Unmarshal(v, &a.Min) } if v, ok := aggs["max"]; ok && v != nil { - json.Unmarshal(*v, &a.Max) + json.Unmarshal(v, &a.Max) } if v, ok := aggs["avg"]; ok && v != nil { - json.Unmarshal(*v, &a.Avg) + json.Unmarshal(v, &a.Avg) } if v, ok := aggs["sum"]; ok && v != nil { - json.Unmarshal(*v, &a.Sum) + json.Unmarshal(v, &a.Sum) } if v, ok := aggs["sum_of_squares"]; ok && v != nil { - json.Unmarshal(*v, &a.SumOfSquares) + json.Unmarshal(v, &a.SumOfSquares) } if v, ok := aggs["variance"]; ok && v != nil { - json.Unmarshal(*v, &a.Variance) + json.Unmarshal(v, &a.Variance) } if v, ok := aggs["std_deviation"]; ok && v != nil { - json.Unmarshal(*v, &a.StdDeviation) + json.Unmarshal(v, &a.StdDeviation) } if v, ok := aggs["meta"]; ok && v != nil { - json.Unmarshal(*v, &a.Meta) + json.Unmarshal(v, &a.Meta) } a.Aggregations = aggs return nil @@ -863,16 +973,16 @@ type AggregationMatrixStatsField struct { // UnmarshalJSON decodes JSON data and initializes an AggregationMatrixStats structure. func (a *AggregationMatrixStats) UnmarshalJSON(data []byte) error { - var aggs map[string]*json.RawMessage + var aggs map[string]json.RawMessage if err := json.Unmarshal(data, &aggs); err != nil { return err } if v, ok := aggs["fields"]; ok && v != nil { // RunningStats for every field - json.Unmarshal(*v, &a.Fields) + json.Unmarshal(v, &a.Fields) } if v, ok := aggs["meta"]; ok && v != nil { - json.Unmarshal(*v, &a.Meta) + json.Unmarshal(v, &a.Meta) } a.Aggregations = aggs return nil @@ -890,15 +1000,15 @@ type AggregationPercentilesMetric struct { // UnmarshalJSON decodes JSON data and initializes an AggregationPercentilesMetric structure. func (a *AggregationPercentilesMetric) UnmarshalJSON(data []byte) error { - var aggs map[string]*json.RawMessage + var aggs map[string]json.RawMessage if err := json.Unmarshal(data, &aggs); err != nil { return err } if v, ok := aggs["values"]; ok && v != nil { - json.Unmarshal(*v, &a.Values) + json.Unmarshal(v, &a.Values) } if v, ok := aggs["meta"]; ok && v != nil { - json.Unmarshal(*v, &a.Meta) + json.Unmarshal(v, &a.Meta) } a.Aggregations = aggs return nil @@ -916,17 +1026,17 @@ type AggregationTopHitsMetric struct { // UnmarshalJSON decodes JSON data and initializes an AggregationTopHitsMetric structure. func (a *AggregationTopHitsMetric) UnmarshalJSON(data []byte) error { - var aggs map[string]*json.RawMessage + var aggs map[string]json.RawMessage if err := json.Unmarshal(data, &aggs); err != nil { return err } a.Aggregations = aggs a.Hits = new(SearchHits) if v, ok := aggs["hits"]; ok && v != nil { - json.Unmarshal(*v, &a.Hits) + json.Unmarshal(v, &a.Hits) } if v, ok := aggs["meta"]; ok && v != nil { - json.Unmarshal(*v, &a.Meta) + json.Unmarshal(v, &a.Meta) } return nil } @@ -953,15 +1063,15 @@ type AggregationGeoBoundsMetric struct { // UnmarshalJSON decodes JSON data and initializes an AggregationGeoBoundsMetric structure. func (a *AggregationGeoBoundsMetric) UnmarshalJSON(data []byte) error { - var aggs map[string]*json.RawMessage + var aggs map[string]json.RawMessage if err := json.Unmarshal(data, &aggs); err != nil { return err } if v, ok := aggs["bounds"]; ok && v != nil { - json.Unmarshal(*v, &a.Bounds) + json.Unmarshal(v, &a.Bounds) } if v, ok := aggs["meta"]; ok && v != nil { - json.Unmarshal(*v, &a.Meta) + json.Unmarshal(v, &a.Meta) } a.Aggregations = aggs return nil @@ -983,18 +1093,18 @@ type AggregationGeoCentroidMetric struct { // UnmarshalJSON decodes JSON data and initializes an AggregationGeoCentroidMetric structure. func (a *AggregationGeoCentroidMetric) UnmarshalJSON(data []byte) error { - var aggs map[string]*json.RawMessage + var aggs map[string]json.RawMessage if err := json.Unmarshal(data, &aggs); err != nil { return err } if v, ok := aggs["location"]; ok && v != nil { - json.Unmarshal(*v, &a.Location) + json.Unmarshal(v, &a.Location) } if v, ok := aggs["meta"]; ok && v != nil { - json.Unmarshal(*v, &a.Meta) + json.Unmarshal(v, &a.Meta) } if v, ok := aggs["count"]; ok && v != nil { - json.Unmarshal(*v, &a.Count) + json.Unmarshal(v, &a.Count) } a.Aggregations = aggs return nil @@ -1012,15 +1122,15 @@ type AggregationSingleBucket struct { // UnmarshalJSON decodes JSON data and initializes an AggregationSingleBucket structure. func (a *AggregationSingleBucket) UnmarshalJSON(data []byte) error { - var aggs map[string]*json.RawMessage + var aggs map[string]json.RawMessage if err := json.Unmarshal(data, &aggs); err != nil { return err } if v, ok := aggs["doc_count"]; ok && v != nil { - json.Unmarshal(*v, &a.DocCount) + json.Unmarshal(v, &a.DocCount) } if v, ok := aggs["meta"]; ok && v != nil { - json.Unmarshal(*v, &a.Meta) + json.Unmarshal(v, &a.Meta) } a.Aggregations = aggs return nil @@ -1041,21 +1151,21 @@ type AggregationBucketRangeItems struct { // UnmarshalJSON decodes JSON data and initializes an AggregationBucketRangeItems structure. func (a *AggregationBucketRangeItems) UnmarshalJSON(data []byte) error { - var aggs map[string]*json.RawMessage + var aggs map[string]json.RawMessage if err := json.Unmarshal(data, &aggs); err != nil { return err } if v, ok := aggs["doc_count_error_upper_bound"]; ok && v != nil { - json.Unmarshal(*v, &a.DocCountErrorUpperBound) + json.Unmarshal(v, &a.DocCountErrorUpperBound) } if v, ok := aggs["sum_other_doc_count"]; ok && v != nil { - json.Unmarshal(*v, &a.SumOfOtherDocCount) + json.Unmarshal(v, &a.SumOfOtherDocCount) } if v, ok := aggs["buckets"]; ok && v != nil { - json.Unmarshal(*v, &a.Buckets) + json.Unmarshal(v, &a.Buckets) } if v, ok := aggs["meta"]; ok && v != nil { - json.Unmarshal(*v, &a.Meta) + json.Unmarshal(v, &a.Meta) } a.Aggregations = aggs return nil @@ -1074,21 +1184,21 @@ type AggregationBucketKeyedRangeItems struct { // UnmarshalJSON decodes JSON data and initializes an AggregationBucketRangeItems structure. func (a *AggregationBucketKeyedRangeItems) UnmarshalJSON(data []byte) error { - var aggs map[string]*json.RawMessage + var aggs map[string]json.RawMessage if err := json.Unmarshal(data, &aggs); err != nil { return err } if v, ok := aggs["doc_count_error_upper_bound"]; ok && v != nil { - json.Unmarshal(*v, &a.DocCountErrorUpperBound) + json.Unmarshal(v, &a.DocCountErrorUpperBound) } if v, ok := aggs["sum_other_doc_count"]; ok && v != nil { - json.Unmarshal(*v, &a.SumOfOtherDocCount) + json.Unmarshal(v, &a.SumOfOtherDocCount) } if v, ok := aggs["buckets"]; ok && v != nil { - json.Unmarshal(*v, &a.Buckets) + json.Unmarshal(v, &a.Buckets) } if v, ok := aggs["meta"]; ok && v != nil { - json.Unmarshal(*v, &a.Meta) + json.Unmarshal(v, &a.Meta) } a.Aggregations = aggs return nil @@ -1108,27 +1218,27 @@ type AggregationBucketRangeItem struct { // UnmarshalJSON decodes JSON data and initializes an AggregationBucketRangeItem structure. func (a *AggregationBucketRangeItem) UnmarshalJSON(data []byte) error { - var aggs map[string]*json.RawMessage + var aggs map[string]json.RawMessage if err := json.Unmarshal(data, &aggs); err != nil { return err } if v, ok := aggs["key"]; ok && v != nil { - json.Unmarshal(*v, &a.Key) + json.Unmarshal(v, &a.Key) } if v, ok := aggs["doc_count"]; ok && v != nil { - json.Unmarshal(*v, &a.DocCount) + json.Unmarshal(v, &a.DocCount) } if v, ok := aggs["from"]; ok && v != nil { - json.Unmarshal(*v, &a.From) + json.Unmarshal(v, &a.From) } if v, ok := aggs["from_as_string"]; ok && v != nil { - json.Unmarshal(*v, &a.FromAsString) + json.Unmarshal(v, &a.FromAsString) } if v, ok := aggs["to"]; ok && v != nil { - json.Unmarshal(*v, &a.To) + json.Unmarshal(v, &a.To) } if v, ok := aggs["to_as_string"]; ok && v != nil { - json.Unmarshal(*v, &a.ToAsString) + json.Unmarshal(v, &a.ToAsString) } a.Aggregations = aggs return nil @@ -1149,21 +1259,21 @@ type AggregationBucketKeyItems struct { // UnmarshalJSON decodes JSON data and initializes an AggregationBucketKeyItems structure. func (a *AggregationBucketKeyItems) UnmarshalJSON(data []byte) error { - var aggs map[string]*json.RawMessage + var aggs map[string]json.RawMessage if err := json.Unmarshal(data, &aggs); err != nil { return err } if v, ok := aggs["doc_count_error_upper_bound"]; ok && v != nil { - json.Unmarshal(*v, &a.DocCountErrorUpperBound) + json.Unmarshal(v, &a.DocCountErrorUpperBound) } if v, ok := aggs["sum_other_doc_count"]; ok && v != nil { - json.Unmarshal(*v, &a.SumOfOtherDocCount) + json.Unmarshal(v, &a.SumOfOtherDocCount) } if v, ok := aggs["buckets"]; ok && v != nil { - json.Unmarshal(*v, &a.Buckets) + json.Unmarshal(v, &a.Buckets) } if v, ok := aggs["meta"]; ok && v != nil { - json.Unmarshal(*v, &a.Meta) + json.Unmarshal(v, &a.Meta) } a.Aggregations = aggs return nil @@ -1181,21 +1291,21 @@ type AggregationBucketKeyItem struct { // UnmarshalJSON decodes JSON data and initializes an AggregationBucketKeyItem structure. func (a *AggregationBucketKeyItem) UnmarshalJSON(data []byte) error { - var aggs map[string]*json.RawMessage + var aggs map[string]json.RawMessage dec := json.NewDecoder(bytes.NewReader(data)) dec.UseNumber() if err := dec.Decode(&aggs); err != nil { return err } if v, ok := aggs["key"]; ok && v != nil { - json.Unmarshal(*v, &a.Key) - json.Unmarshal(*v, &a.KeyNumber) + json.Unmarshal(v, &a.Key) + json.Unmarshal(v, &a.KeyNumber) } if v, ok := aggs["key_as_string"]; ok && v != nil { - json.Unmarshal(*v, &a.KeyAsString) + json.Unmarshal(v, &a.KeyAsString) } if v, ok := aggs["doc_count"]; ok && v != nil { - json.Unmarshal(*v, &a.DocCount) + json.Unmarshal(v, &a.DocCount) } a.Aggregations = aggs return nil @@ -1215,18 +1325,18 @@ type AggregationBucketSignificantTerms struct { // UnmarshalJSON decodes JSON data and initializes an AggregationBucketSignificantTerms structure. func (a *AggregationBucketSignificantTerms) UnmarshalJSON(data []byte) error { - var aggs map[string]*json.RawMessage + var aggs map[string]json.RawMessage if err := json.Unmarshal(data, &aggs); err != nil { return err } if v, ok := aggs["doc_count"]; ok && v != nil { - json.Unmarshal(*v, &a.DocCount) + json.Unmarshal(v, &a.DocCount) } if v, ok := aggs["buckets"]; ok && v != nil { - json.Unmarshal(*v, &a.Buckets) + json.Unmarshal(v, &a.Buckets) } if v, ok := aggs["meta"]; ok && v != nil { - json.Unmarshal(*v, &a.Meta) + json.Unmarshal(v, &a.Meta) } a.Aggregations = aggs return nil @@ -1244,21 +1354,21 @@ type AggregationBucketSignificantTerm struct { // UnmarshalJSON decodes JSON data and initializes an AggregationBucketSignificantTerm structure. func (a *AggregationBucketSignificantTerm) UnmarshalJSON(data []byte) error { - var aggs map[string]*json.RawMessage + var aggs map[string]json.RawMessage if err := json.Unmarshal(data, &aggs); err != nil { return err } if v, ok := aggs["key"]; ok && v != nil { - json.Unmarshal(*v, &a.Key) + json.Unmarshal(v, &a.Key) } if v, ok := aggs["doc_count"]; ok && v != nil { - json.Unmarshal(*v, &a.DocCount) + json.Unmarshal(v, &a.DocCount) } if v, ok := aggs["bg_count"]; ok && v != nil { - json.Unmarshal(*v, &a.BgCount) + json.Unmarshal(v, &a.BgCount) } if v, ok := aggs["score"]; ok && v != nil { - json.Unmarshal(*v, &a.Score) + json.Unmarshal(v, &a.Score) } a.Aggregations = aggs return nil @@ -1278,16 +1388,16 @@ type AggregationBucketFilters struct { // UnmarshalJSON decodes JSON data and initializes an AggregationBucketFilters structure. func (a *AggregationBucketFilters) UnmarshalJSON(data []byte) error { - var aggs map[string]*json.RawMessage + var aggs map[string]json.RawMessage if err := json.Unmarshal(data, &aggs); err != nil { return err } if v, ok := aggs["buckets"]; ok && v != nil { - json.Unmarshal(*v, &a.Buckets) - json.Unmarshal(*v, &a.NamedBuckets) + json.Unmarshal(v, &a.Buckets) + json.Unmarshal(v, &a.NamedBuckets) } if v, ok := aggs["meta"]; ok && v != nil { - json.Unmarshal(*v, &a.Meta) + json.Unmarshal(v, &a.Meta) } a.Aggregations = aggs return nil @@ -1306,15 +1416,15 @@ type AggregationBucketAdjacencyMatrix struct { // UnmarshalJSON decodes JSON data and initializes an AggregationBucketAdjacencyMatrix structure. func (a *AggregationBucketAdjacencyMatrix) UnmarshalJSON(data []byte) error { - var aggs map[string]*json.RawMessage + var aggs map[string]json.RawMessage if err := json.Unmarshal(data, &aggs); err != nil { return err } if v, ok := aggs["buckets"]; ok && v != nil { - json.Unmarshal(*v, &a.Buckets) + json.Unmarshal(v, &a.Buckets) } if v, ok := aggs["meta"]; ok && v != nil { - json.Unmarshal(*v, &a.Meta) + json.Unmarshal(v, &a.Meta) } a.Aggregations = aggs return nil @@ -1327,21 +1437,46 @@ func (a *AggregationBucketAdjacencyMatrix) UnmarshalJSON(data []byte) error { type AggregationBucketHistogramItems struct { Aggregations - Buckets []*AggregationBucketHistogramItem //`json:"buckets"` + Buckets []*AggregationBucketHistogramItem // `json:"buckets"` Meta map[string]interface{} // `json:"meta,omitempty"` } // UnmarshalJSON decodes JSON data and initializes an AggregationBucketHistogramItems structure. func (a *AggregationBucketHistogramItems) UnmarshalJSON(data []byte) error { - var aggs map[string]*json.RawMessage + var aggs map[string]json.RawMessage if err := json.Unmarshal(data, &aggs); err != nil { return err } if v, ok := aggs["buckets"]; ok && v != nil { - json.Unmarshal(*v, &a.Buckets) + json.Unmarshal(v, &a.Buckets) } if v, ok := aggs["meta"]; ok && v != nil { - json.Unmarshal(*v, &a.Meta) + json.Unmarshal(v, &a.Meta) + } + a.Aggregations = aggs + return nil +} + +// AggregationBucketKeyedHistogramItems is a bucket aggregation that is returned +// with a (keyed) date histogram aggregation. +type AggregationBucketKeyedHistogramItems struct { + Aggregations + + Buckets map[string]*AggregationBucketHistogramItem //`json:"buckets"` + Meta map[string]interface{} // `json:"meta,omitempty"` +} + +// UnmarshalJSON decodes JSON data and initializes an AggregationBucketKeyedHistogramItems structure. +func (a *AggregationBucketKeyedHistogramItems) UnmarshalJSON(data []byte) error { + var aggs map[string]json.RawMessage + if err := json.Unmarshal(data, &aggs); err != nil { + return err + } + if v, ok := aggs["buckets"]; ok && v != nil { + json.Unmarshal(v, &a.Buckets) + } + if v, ok := aggs["meta"]; ok && v != nil { + json.Unmarshal(v, &a.Meta) } a.Aggregations = aggs return nil @@ -1358,18 +1493,18 @@ type AggregationBucketHistogramItem struct { // UnmarshalJSON decodes JSON data and initializes an AggregationBucketHistogramItem structure. func (a *AggregationBucketHistogramItem) UnmarshalJSON(data []byte) error { - var aggs map[string]*json.RawMessage + var aggs map[string]json.RawMessage if err := json.Unmarshal(data, &aggs); err != nil { return err } if v, ok := aggs["key"]; ok && v != nil { - json.Unmarshal(*v, &a.Key) + json.Unmarshal(v, &a.Key) } if v, ok := aggs["key_as_string"]; ok && v != nil { - json.Unmarshal(*v, &a.KeyAsString) + json.Unmarshal(v, &a.KeyAsString) } if v, ok := aggs["doc_count"]; ok && v != nil { - json.Unmarshal(*v, &a.DocCount) + json.Unmarshal(v, &a.DocCount) } a.Aggregations = aggs return nil @@ -1389,18 +1524,18 @@ type AggregationPipelineSimpleValue struct { // UnmarshalJSON decodes JSON data and initializes an AggregationPipelineSimpleValue structure. func (a *AggregationPipelineSimpleValue) UnmarshalJSON(data []byte) error { - var aggs map[string]*json.RawMessage + var aggs map[string]json.RawMessage if err := json.Unmarshal(data, &aggs); err != nil { return err } if v, ok := aggs["value"]; ok && v != nil { - json.Unmarshal(*v, &a.Value) + json.Unmarshal(v, &a.Value) } if v, ok := aggs["value_as_string"]; ok && v != nil { - json.Unmarshal(*v, &a.ValueAsString) + json.Unmarshal(v, &a.ValueAsString) } if v, ok := aggs["meta"]; ok && v != nil { - json.Unmarshal(*v, &a.Meta) + json.Unmarshal(v, &a.Meta) } a.Aggregations = aggs return nil @@ -1421,21 +1556,21 @@ type AggregationPipelineBucketMetricValue struct { // UnmarshalJSON decodes JSON data and initializes an AggregationPipelineBucketMetricValue structure. func (a *AggregationPipelineBucketMetricValue) UnmarshalJSON(data []byte) error { - var aggs map[string]*json.RawMessage + var aggs map[string]json.RawMessage if err := json.Unmarshal(data, &aggs); err != nil { return err } if v, ok := aggs["keys"]; ok && v != nil { - json.Unmarshal(*v, &a.Keys) + json.Unmarshal(v, &a.Keys) } if v, ok := aggs["value"]; ok && v != nil { - json.Unmarshal(*v, &a.Value) + json.Unmarshal(v, &a.Value) } if v, ok := aggs["value_as_string"]; ok && v != nil { - json.Unmarshal(*v, &a.ValueAsString) + json.Unmarshal(v, &a.ValueAsString) } if v, ok := aggs["meta"]; ok && v != nil { - json.Unmarshal(*v, &a.Meta) + json.Unmarshal(v, &a.Meta) } a.Aggregations = aggs return nil @@ -1457,24 +1592,24 @@ type AggregationPipelineDerivative struct { // UnmarshalJSON decodes JSON data and initializes an AggregationPipelineDerivative structure. func (a *AggregationPipelineDerivative) UnmarshalJSON(data []byte) error { - var aggs map[string]*json.RawMessage + var aggs map[string]json.RawMessage if err := json.Unmarshal(data, &aggs); err != nil { return err } if v, ok := aggs["value"]; ok && v != nil { - json.Unmarshal(*v, &a.Value) + json.Unmarshal(v, &a.Value) } if v, ok := aggs["value_as_string"]; ok && v != nil { - json.Unmarshal(*v, &a.ValueAsString) + json.Unmarshal(v, &a.ValueAsString) } if v, ok := aggs["normalized_value"]; ok && v != nil { - json.Unmarshal(*v, &a.NormalizedValue) + json.Unmarshal(v, &a.NormalizedValue) } if v, ok := aggs["normalized_value_as_string"]; ok && v != nil { - json.Unmarshal(*v, &a.NormalizedValueAsString) + json.Unmarshal(v, &a.NormalizedValueAsString) } if v, ok := aggs["meta"]; ok && v != nil { - json.Unmarshal(*v, &a.Meta) + json.Unmarshal(v, &a.Meta) } a.Aggregations = aggs return nil @@ -1503,42 +1638,42 @@ type AggregationPipelineStatsMetric struct { // UnmarshalJSON decodes JSON data and initializes an AggregationPipelineStatsMetric structure. func (a *AggregationPipelineStatsMetric) UnmarshalJSON(data []byte) error { - var aggs map[string]*json.RawMessage + var aggs map[string]json.RawMessage if err := json.Unmarshal(data, &aggs); err != nil { return err } if v, ok := aggs["count"]; ok && v != nil { - json.Unmarshal(*v, &a.Count) + json.Unmarshal(v, &a.Count) } if v, ok := aggs["count_as_string"]; ok && v != nil { - json.Unmarshal(*v, &a.CountAsString) + json.Unmarshal(v, &a.CountAsString) } if v, ok := aggs["min"]; ok && v != nil { - json.Unmarshal(*v, &a.Min) + json.Unmarshal(v, &a.Min) } if v, ok := aggs["min_as_string"]; ok && v != nil { - json.Unmarshal(*v, &a.MinAsString) + json.Unmarshal(v, &a.MinAsString) } if v, ok := aggs["max"]; ok && v != nil { - json.Unmarshal(*v, &a.Max) + json.Unmarshal(v, &a.Max) } if v, ok := aggs["max_as_string"]; ok && v != nil { - json.Unmarshal(*v, &a.MaxAsString) + json.Unmarshal(v, &a.MaxAsString) } if v, ok := aggs["avg"]; ok && v != nil { - json.Unmarshal(*v, &a.Avg) + json.Unmarshal(v, &a.Avg) } if v, ok := aggs["avg_as_string"]; ok && v != nil { - json.Unmarshal(*v, &a.AvgAsString) + json.Unmarshal(v, &a.AvgAsString) } if v, ok := aggs["sum"]; ok && v != nil { - json.Unmarshal(*v, &a.Sum) + json.Unmarshal(v, &a.Sum) } if v, ok := aggs["sum_as_string"]; ok && v != nil { - json.Unmarshal(*v, &a.SumAsString) + json.Unmarshal(v, &a.SumAsString) } if v, ok := aggs["meta"]; ok && v != nil { - json.Unmarshal(*v, &a.Meta) + json.Unmarshal(v, &a.Meta) } a.Aggregations = aggs return nil @@ -1557,15 +1692,15 @@ type AggregationPipelinePercentilesMetric struct { // UnmarshalJSON decodes JSON data and initializes an AggregationPipelinePercentilesMetric structure. func (a *AggregationPipelinePercentilesMetric) UnmarshalJSON(data []byte) error { - var aggs map[string]*json.RawMessage + var aggs map[string]json.RawMessage if err := json.Unmarshal(data, &aggs); err != nil { return err } if v, ok := aggs["values"]; ok && v != nil { - json.Unmarshal(*v, &a.Values) + json.Unmarshal(v, &a.Values) } if v, ok := aggs["meta"]; ok && v != nil { - json.Unmarshal(*v, &a.Meta) + json.Unmarshal(v, &a.Meta) } a.Aggregations = aggs return nil @@ -1578,21 +1713,25 @@ func (a *AggregationPipelinePercentilesMetric) UnmarshalJSON(data []byte) error type AggregationBucketCompositeItems struct { Aggregations - Buckets []*AggregationBucketCompositeItem //`json:"buckets"` - Meta map[string]interface{} // `json:"meta,omitempty"` + Buckets []*AggregationBucketCompositeItem //`json:"buckets"` + Meta map[string]interface{} // `json:"meta,omitempty"` + AfterKey map[string]interface{} // `json:"after_key,omitempty"` } // UnmarshalJSON decodes JSON data and initializes an AggregationBucketCompositeItems structure. func (a *AggregationBucketCompositeItems) UnmarshalJSON(data []byte) error { - var aggs map[string]*json.RawMessage + var aggs map[string]json.RawMessage if err := json.Unmarshal(data, &aggs); err != nil { return err } if v, ok := aggs["buckets"]; ok && v != nil { - json.Unmarshal(*v, &a.Buckets) + json.Unmarshal(v, &a.Buckets) } if v, ok := aggs["meta"]; ok && v != nil { - json.Unmarshal(*v, &a.Meta) + json.Unmarshal(v, &a.Meta) + } + if v, ok := aggs["after_key"]; ok && v != nil { + json.Unmarshal(v, &a.AfterKey) } a.Aggregations = aggs return nil @@ -1608,17 +1747,44 @@ type AggregationBucketCompositeItem struct { // UnmarshalJSON decodes JSON data and initializes an AggregationBucketCompositeItem structure. func (a *AggregationBucketCompositeItem) UnmarshalJSON(data []byte) error { - var aggs map[string]*json.RawMessage + var aggs map[string]json.RawMessage dec := json.NewDecoder(bytes.NewReader(data)) dec.UseNumber() if err := dec.Decode(&aggs); err != nil { return err } if v, ok := aggs["key"]; ok && v != nil { - json.Unmarshal(*v, &a.Key) + json.Unmarshal(v, &a.Key) } if v, ok := aggs["doc_count"]; ok && v != nil { - json.Unmarshal(*v, &a.DocCount) + json.Unmarshal(v, &a.DocCount) + } + a.Aggregations = aggs + return nil +} + +// AggregationScriptedMetric is the value return by a scripted metric aggregation. +// Value maybe one of map[string]interface{}/[]interface{}/string/bool/json.Number +type AggregationScriptedMetric struct { + Aggregations + + Value interface{} //`json:"value"` + Meta map[string]interface{} //`json:"meta,omitempty"` +} + +// UnmarshalJSON decodes JSON data and initializes an AggregationScriptedMetric structure. +func (a *AggregationScriptedMetric) UnmarshalJSON(data []byte) error { + var aggs map[string]json.RawMessage + if err := json.Unmarshal(data, &aggs); err != nil { + return err + } + if v, ok := aggs["value"]; ok && v != nil { + decoder := json.NewDecoder(bytes.NewReader(v)) + decoder.UseNumber() + decoder.Decode(&a.Value) + } + if v, ok := aggs["meta"]; ok && v != nil { + json.Unmarshal(v, &a.Meta) } a.Aggregations = aggs return nil diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_adjacency_matrix.go b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_adjacency_matrix.go similarity index 97% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_adjacency_matrix.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_bucket_adjacency_matrix.go index 24ccee26f6b53e8b104c269a11b4823e7b3f7f38..7dff0e025c9087b90423e0f034d0028de2520a64 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_adjacency_matrix.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_adjacency_matrix.go @@ -10,7 +10,7 @@ package elastic // response represents a non-empty cell in the matrix of intersecting filters. // // For details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-adjacency-matrix-aggregation.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-adjacency-matrix-aggregation.html type AdjacencyMatrixAggregation struct { filters map[string]Query subAggregations map[string]Aggregation diff --git a/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_auto_date_histogram.go b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_auto_date_histogram.go new file mode 100644 index 0000000000000000000000000000000000000000..281ee233b0efc98421d5438224232b2c8119ee48 --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_auto_date_histogram.go @@ -0,0 +1,163 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// AutoDateHistogramAggregation is a multi-bucket aggregation similar to the +// histogram except it can only be applied on date values, and the buckets num can bin pointed. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.3/search-aggregations-bucket-autodatehistogram-aggregation.html +type AutoDateHistogramAggregation struct { + field string + script *Script + missing interface{} + subAggregations map[string]Aggregation + meta map[string]interface{} + + buckets int + minDocCount *int64 + timeZone string + format string + minimumInterval string +} + +// NewAutoDateHistogramAggregation creates a new AutoDateHistogramAggregation. +func NewAutoDateHistogramAggregation() *AutoDateHistogramAggregation { + return &AutoDateHistogramAggregation{ + subAggregations: make(map[string]Aggregation), + } +} + +// Field on which the aggregation is processed. +func (a *AutoDateHistogramAggregation) Field(field string) *AutoDateHistogramAggregation { + a.field = field + return a +} + +// Script on which th +func (a *AutoDateHistogramAggregation) Script(script *Script) *AutoDateHistogramAggregation { + a.script = script + return a +} + +// Missing configures the value to use when documents miss a value. +func (a *AutoDateHistogramAggregation) Missing(missing interface{}) *AutoDateHistogramAggregation { + a.missing = missing + return a +} + +// SubAggregation sub aggregation +func (a *AutoDateHistogramAggregation) SubAggregation(name string, subAggregation Aggregation) *AutoDateHistogramAggregation { + a.subAggregations[name] = subAggregation + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *AutoDateHistogramAggregation) Meta(metaData map[string]interface{}) *AutoDateHistogramAggregation { + a.meta = metaData + return a +} + +// Buckets buckets num by which the aggregation gets processed. +func (a *AutoDateHistogramAggregation) Buckets(buckets int) *AutoDateHistogramAggregation { + a.buckets = buckets + return a +} + +// MinDocCount sets the minimum document count per bucket. +// Buckets with less documents than this min value will not be returned. +func (a *AutoDateHistogramAggregation) MinDocCount(minDocCount int64) *AutoDateHistogramAggregation { + a.minDocCount = &minDocCount + return a +} + +// TimeZone sets the timezone in which to translate dates before computing buckets. +func (a *AutoDateHistogramAggregation) TimeZone(timeZone string) *AutoDateHistogramAggregation { + a.timeZone = timeZone + return a +} + +// Format sets the format to use for dates. +func (a *AutoDateHistogramAggregation) Format(format string) *AutoDateHistogramAggregation { + a.format = format + return a +} + +// MinimumInterval accepted units for minimum_interval are: year/month/day/hour/minute/second +func (a *AutoDateHistogramAggregation) MinimumInterval(interval string) *AutoDateHistogramAggregation { + a.minimumInterval = interval + return a +} + +// Source source for AutoDateHistogramAggregation +func (a *AutoDateHistogramAggregation) Source() (interface{}, error) { + // Example: + // { + // "aggs" : { + // "articles_over_time" : { + // "auto_date_histogram" : { + // "field" : "date", + // "buckets" : 10 + // } + // } + // } + // } + // + // This method returns only the { "auto_date_histogram" : { ... } } part. + + source := make(map[string]interface{}) + opts := make(map[string]interface{}) + source["auto_date_histogram"] = opts + + // ValuesSourceAggregationBuilder + if a.field != "" { + opts["field"] = a.field + } + if a.script != nil { + src, err := a.script.Source() + if err != nil { + return nil, err + } + opts["script"] = src + } + if a.missing != nil { + opts["missing"] = a.missing + } + + if a.buckets > 0 { + opts["buckets"] = a.buckets + } + + if a.minDocCount != nil { + opts["min_doc_count"] = *a.minDocCount + } + if a.timeZone != "" { + opts["time_zone"] = a.timeZone + } + if a.format != "" { + opts["format"] = a.format + } + if a.minimumInterval != "" { + opts["minimum_interval"] = a.minimumInterval + } + + // AggregationBuilder (SubAggregations) + if len(a.subAggregations) > 0 { + aggsMap := make(map[string]interface{}) + source["aggregations"] = aggsMap + for name, aggregate := range a.subAggregations { + src, err := aggregate.Source() + if err != nil { + return nil, err + } + aggsMap[name] = src + } + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_children.go b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_children.go similarity index 97% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_children.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_bucket_children.go index 1a948c31ba5514d771d7e21a551ec8250a92b3bf..4078b1de0a4e6711027786318759a279538113de 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_children.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_children.go @@ -7,7 +7,7 @@ package elastic // ChildrenAggregation is a special single bucket aggregation that enables // aggregating from buckets on parent document types to buckets on child documents. // It is available from 1.4.0.Beta1 upwards. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-children-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-children-aggregation.html type ChildrenAggregation struct { typ string subAggregations map[string]Aggregation diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_composite.go b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_composite.go similarity index 78% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_composite.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_bucket_composite.go index 98a48e29713c69d2f8ebd1fe8a7e5bf796a21377..859c9e44c4c8c156f816985098e2f1adc65eec73 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_composite.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_composite.go @@ -7,7 +7,7 @@ package elastic // CompositeAggregation is a multi-bucket values source based aggregation // that can be used to calculate unique composite values from source documents. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-composite-aggregation.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-composite-aggregation.html // for details. type CompositeAggregation struct { after map[string]interface{} @@ -129,7 +129,7 @@ func (a *CompositeAggregation) Source() (interface{}, error) { // need to implement. // // The different implementations are described in -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-composite-aggregation.html#_values_source_2. +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-composite-aggregation.html#_values_source_2. type CompositeAggregationValuesSource interface { Source() (interface{}, error) } @@ -139,15 +139,16 @@ type CompositeAggregationValuesSource interface { // CompositeAggregationTermsValuesSource is a source for the CompositeAggregation that handles terms // it works very similar to a terms aggregation with slightly different syntax // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-composite-aggregation.html#_terms +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-composite-aggregation.html#_terms // for details. type CompositeAggregationTermsValuesSource struct { - name string - field string - script *Script - valueType string - missing interface{} - order string + name string + field string + script *Script + valueType string + missing interface{} + missingBucket *bool + order string } // NewCompositeAggregationTermsValuesSource creates and initializes @@ -198,11 +199,20 @@ func (a *CompositeAggregationTermsValuesSource) Desc() *CompositeAggregationTerm // Missing specifies the value to use when the source finds a missing // value in a document. +// +// Deprecated: Use MissingBucket instead. func (a *CompositeAggregationTermsValuesSource) Missing(missing interface{}) *CompositeAggregationTermsValuesSource { a.missing = missing return a } +// MissingBucket, if true, will create an explicit null bucket which represents +// documents with missing values. +func (a *CompositeAggregationTermsValuesSource) MissingBucket(missingBucket bool) *CompositeAggregationTermsValuesSource { + a.missingBucket = &missingBucket + return a +} + // Source returns the serializable JSON for this values source. func (a *CompositeAggregationTermsValuesSource) Source() (interface{}, error) { source := make(map[string]interface{}) @@ -230,6 +240,11 @@ func (a *CompositeAggregationTermsValuesSource) Source() (interface{}, error) { values["missing"] = a.missing } + // missing_bucket + if a.missingBucket != nil { + values["missing_bucket"] = *a.missingBucket + } + // value_type if a.valueType != "" { values["value_type"] = a.valueType @@ -249,16 +264,17 @@ func (a *CompositeAggregationTermsValuesSource) Source() (interface{}, error) { // CompositeAggregationHistogramValuesSource is a source for the CompositeAggregation that handles histograms // it works very similar to a terms histogram with slightly different syntax // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-composite-aggregation.html#_histogram +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-composite-aggregation.html#_histogram // for details. type CompositeAggregationHistogramValuesSource struct { - name string - field string - script *Script - valueType string - missing interface{} - order string - interval float64 + name string + field string + script *Script + valueType string + missing interface{} + missingBucket *bool + order string + interval float64 } // NewCompositeAggregationHistogramValuesSource creates and initializes @@ -291,11 +307,20 @@ func (a *CompositeAggregationHistogramValuesSource) ValueType(valueType string) // Missing specifies the value to use when the source finds a missing // value in a document. +// +// Deprecated: Use MissingBucket instead. func (a *CompositeAggregationHistogramValuesSource) Missing(missing interface{}) *CompositeAggregationHistogramValuesSource { a.missing = missing return a } +// MissingBucket, if true, will create an explicit null bucket which represents +// documents with missing values. +func (a *CompositeAggregationHistogramValuesSource) MissingBucket(missingBucket bool) *CompositeAggregationHistogramValuesSource { + a.missingBucket = &missingBucket + return a +} + // Order specifies the order in the values produced by this source. // It can be either "asc" or "desc". func (a *CompositeAggregationHistogramValuesSource) Order(order string) *CompositeAggregationHistogramValuesSource { @@ -348,6 +373,11 @@ func (a *CompositeAggregationHistogramValuesSource) Source() (interface{}, error values["missing"] = a.missing } + // missing_bucket + if a.missingBucket != nil { + values["missing_bucket"] = *a.missingBucket + } + // value_type if a.valueType != "" { values["value_type"] = a.valueType @@ -370,25 +400,28 @@ func (a *CompositeAggregationHistogramValuesSource) Source() (interface{}, error // CompositeAggregationDateHistogramValuesSource is a source for the CompositeAggregation that handles date histograms // it works very similar to a date histogram aggregation with slightly different syntax // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-composite-aggregation.html#_date_histogram +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.4/search-aggregations-bucket-composite-aggregation.html#_date_histogram // for details. type CompositeAggregationDateHistogramValuesSource struct { - name string - field string - script *Script - valueType string - missing interface{} - order string - interval interface{} - timeZone string + name string + field string + script *Script + valueType string + missing interface{} + missingBucket *bool + order string + interval interface{} + fixedInterval interface{} + calendarInterval interface{} + format string + timeZone string } // NewCompositeAggregationDateHistogramValuesSource creates and initializes // a new CompositeAggregationDateHistogramValuesSource. -func NewCompositeAggregationDateHistogramValuesSource(name string, interval interface{}) *CompositeAggregationDateHistogramValuesSource { +func NewCompositeAggregationDateHistogramValuesSource(name string) *CompositeAggregationDateHistogramValuesSource { return &CompositeAggregationDateHistogramValuesSource{ - name: name, - interval: interval, + name: name, } } @@ -413,11 +446,20 @@ func (a *CompositeAggregationDateHistogramValuesSource) ValueType(valueType stri // Missing specifies the value to use when the source finds a missing // value in a document. +// +// Deprecated: Use MissingBucket instead. func (a *CompositeAggregationDateHistogramValuesSource) Missing(missing interface{}) *CompositeAggregationDateHistogramValuesSource { a.missing = missing return a } +// MissingBucket, if true, will create an explicit null bucket which represents +// documents with missing values. +func (a *CompositeAggregationDateHistogramValuesSource) MissingBucket(missingBucket bool) *CompositeAggregationDateHistogramValuesSource { + a.missingBucket = &missingBucket + return a +} + // Order specifies the order in the values produced by this source. // It can be either "asc" or "desc". func (a *CompositeAggregationDateHistogramValuesSource) Order(order string) *CompositeAggregationDateHistogramValuesSource { @@ -438,11 +480,31 @@ func (a *CompositeAggregationDateHistogramValuesSource) Desc() *CompositeAggrega } // Interval to use for the date histogram, e.g. "1d" or a numeric value like "60". +// +// Deprecated: Use FixedInterval or CalendarInterval instead. func (a *CompositeAggregationDateHistogramValuesSource) Interval(interval interface{}) *CompositeAggregationDateHistogramValuesSource { a.interval = interval return a } +// FixedInterval to use for the date histogram, e.g. "1d" or a numeric value like "60". +func (a *CompositeAggregationDateHistogramValuesSource) FixedInterval(fixedInterval interface{}) *CompositeAggregationDateHistogramValuesSource { + a.fixedInterval = fixedInterval + return a +} + +// CalendarInterval to use for the date histogram, e.g. "1d" or a numeric value like "60". +func (a *CompositeAggregationDateHistogramValuesSource) CalendarInterval(calendarInterval interface{}) *CompositeAggregationDateHistogramValuesSource { + a.calendarInterval = calendarInterval + return a +} + +// Format to use for the date histogram, e.g. "strict_date_optional_time" +func (a *CompositeAggregationDateHistogramValuesSource) Format(format string) *CompositeAggregationDateHistogramValuesSource { + a.format = format + return a +} + // TimeZone to use for the dates. func (a *CompositeAggregationDateHistogramValuesSource) TimeZone(timeZone string) *CompositeAggregationDateHistogramValuesSource { a.timeZone = timeZone @@ -476,6 +538,11 @@ func (a *CompositeAggregationDateHistogramValuesSource) Source() (interface{}, e values["missing"] = a.missing } + // missing_bucket + if a.missingBucket != nil { + values["missing_bucket"] = *a.missingBucket + } + // value_type if a.valueType != "" { values["value_type"] = a.valueType @@ -486,8 +553,20 @@ func (a *CompositeAggregationDateHistogramValuesSource) Source() (interface{}, e values["order"] = a.order } + if a.format != "" { + values["format"] = a.format + } + // DateHistogram-related properties - values["interval"] = a.interval + if v := a.interval; v != nil { + values["interval"] = v + } + if v := a.fixedInterval; v != nil { + values["fixed_interval"] = v + } + if v := a.calendarInterval; v != nil { + values["calendar_interval"] = v + } // timeZone if a.timeZone != "" { diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_count_thresholds.go b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_count_thresholds.go similarity index 100% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_count_thresholds.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_bucket_count_thresholds.go diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_date_histogram.go b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_date_histogram.go similarity index 76% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_date_histogram.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_bucket_date_histogram.go index 881da228e6be82282ef4aeecd270ab1648a1400a..4ab567cac8a98d5b2da188a54d3790015aad2b81 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_date_histogram.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_date_histogram.go @@ -6,7 +6,7 @@ package elastic // DateHistogramAggregation is a multi-bucket aggregation similar to the // histogram except it can only be applied on date values. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-datehistogram-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-datehistogram-aggregation.html type DateHistogramAggregation struct { field string script *Script @@ -15,6 +15,8 @@ type DateHistogramAggregation struct { meta map[string]interface{} interval string + fixedInterval string + calendarInterval string order string orderAsc bool minDocCount *int64 @@ -23,6 +25,7 @@ type DateHistogramAggregation struct { timeZone string format string offset string + keyed *bool } // NewDateHistogramAggregation creates a new DateHistogramAggregation. @@ -60,15 +63,48 @@ func (a *DateHistogramAggregation) Meta(metaData map[string]interface{}) *DateHi return a } -// Interval by which the aggregation gets processed. -// Allowed values are: "year", "quarter", "month", "week", "day", -// "hour", "minute". It also supports time settings like "1.5h" -// (up to "w" for weeks). +// Interval by which the aggregation gets processed. This field +// will be replaced by the two FixedInterval and CalendarInterval +// fields (see below). +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.4/search-aggregations-bucket-datehistogram-aggregation.html +// +// Deprecated: This field will be removed in the future. func (a *DateHistogramAggregation) Interval(interval string) *DateHistogramAggregation { a.interval = interval return a } +// FixedInterval by which the aggregation gets processed. +// +// Allowed values are: "year", "1y", "quarter", "1q", "month", "1M", +// "week", "1w", "day", "1d", "hour", "1h", "minute", "1m", "second", +// or "1s". It also supports time settings like "1.5h". +// +// These units are not calendar-aware and are simply multiples of +// fixed, SI units. This is mutually exclusive with CalendarInterval. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.4/search-aggregations-bucket-datehistogram-aggregation.html +func (a *DateHistogramAggregation) FixedInterval(fixedInterval string) *DateHistogramAggregation { + a.fixedInterval = fixedInterval + return a +} + +// CalendarInterval by which the aggregation gets processed. +// +// Allowed values are: "year" ("1y", "y"), "quarter" ("1q", "q"), +// "month" ("1M", "M"), "week" ("1w", "w"), "day" ("d", "1d") +// +// These units are calendar-aware, meaning they respect leap +// additions, variable days per month etc. This is mutually +// exclusive with FixedInterval. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.4/search-aggregations-bucket-datehistogram-aggregation.html +func (a *DateHistogramAggregation) CalendarInterval(calendarInterval string) *DateHistogramAggregation { + a.calendarInterval = calendarInterval + return a +} + // Order specifies the sort order. Valid values for order are: // "_key", "_count", a sub-aggregation name, or a sub-aggregation name // with a metric. @@ -196,6 +232,14 @@ func (a *DateHistogramAggregation) ExtendedBoundsMax(max interface{}) *DateHisto return a } +// Keyed specifies whether to return the results with a keyed response (or not). +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-datehistogram-aggregation.html#_keyed_response_3. +func (a *DateHistogramAggregation) Keyed(keyed bool) *DateHistogramAggregation { + a.keyed = &keyed + return a +} + func (a *DateHistogramAggregation) Source() (interface{}, error) { // Example: // { @@ -203,7 +247,7 @@ func (a *DateHistogramAggregation) Source() (interface{}, error) { // "articles_over_time" : { // "date_histogram" : { // "field" : "date", - // "interval" : "month" + // "fixed_interval" : "month" // } // } // } @@ -230,7 +274,16 @@ func (a *DateHistogramAggregation) Source() (interface{}, error) { opts["missing"] = a.missing } - opts["interval"] = a.interval + if s := a.interval; s != "" { + opts["interval"] = s + } + if s := a.fixedInterval; s != "" { + opts["fixed_interval"] = s + } + if s := a.calendarInterval; s != "" { + opts["calendar_interval"] = s + } + if a.minDocCount != nil { opts["min_doc_count"] = *a.minDocCount } @@ -262,6 +315,9 @@ func (a *DateHistogramAggregation) Source() (interface{}, error) { } opts["extended_bounds"] = bounds } + if a.keyed != nil { + opts["keyed"] = *a.keyed + } // AggregationBuilder (SubAggregations) if len(a.subAggregations) > 0 { diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_date_range.go b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_date_range.go similarity index 99% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_date_range.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_bucket_date_range.go index 97cc1472bfe5969afdbcdca1435ffad3804e64ec..a4becaae903e56d4bd59bf51d7c1bcd3e10f525b 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_date_range.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_date_range.go @@ -15,7 +15,7 @@ import ( // date format by which the from and to response fields will be returned. // Note that this aggregration includes the from value and excludes the to // value for each range. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-daterange-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-daterange-aggregation.html type DateRangeAggregation struct { field string script *Script diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_diversified_sampler.go b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_diversified_sampler.go similarity index 98% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_diversified_sampler.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_bucket_diversified_sampler.go index ef7a696d2a82b54d9f3ed1be0d236908b2e6323d..6d3a448291098608ad23d1d7c98ad0c7e15c0ac3 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_diversified_sampler.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_diversified_sampler.go @@ -8,7 +8,7 @@ package elastic // sub aggregations’ processing to a sample of the top-scoring documents. The diversified_sampler aggregation adds // the ability to limit the number of matches that share a common value such as an "author". // -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-diversified-sampler-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-diversified-sampler-aggregation.html type DiversifiedSamplerAggregation struct { subAggregations map[string]Aggregation meta map[string]interface{} diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_filter.go b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_filter.go similarity index 97% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_filter.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_bucket_filter.go index 40acdeeaa42d9458e31bf2401282b08881fb18e6..c002c81331a8bf65bceeb8619d056ce861191431 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_filter.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_filter.go @@ -8,7 +8,7 @@ package elastic // in the current document set context that match a specified filter. // Often this will be used to narrow down the current aggregation context // to a specific set of documents. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-filter-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-filter-aggregation.html type FilterAggregation struct { filter Query subAggregations map[string]Aggregation diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_filters.go b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_filters.go similarity index 98% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_filters.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_bucket_filters.go index 8f1f28949a6313f0b02fe31f62437367622ebe49..d2ea5eaf9206a023c0ee098544be279014cf7c07 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_filters.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_filters.go @@ -15,7 +15,7 @@ import "errors" // use both named and unnamed filters. // // For details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-filters-aggregation.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-filters-aggregation.html type FiltersAggregation struct { unnamedFilters []Query namedFilters map[string]Query diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_geo_distance.go b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_geo_distance.go similarity index 98% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_geo_distance.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_bucket_geo_distance.go index c4a59e8238f7a4a9d730c893f946dfebbe7162b7..ee8dd0cb4f4d176737701112ce8b527e14e4aeed 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_geo_distance.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_geo_distance.go @@ -11,7 +11,7 @@ package elastic // the origin point and determines the buckets it belongs to based on // the ranges (a document belongs to a bucket if the distance between the // document and the origin falls within the distance range of the bucket). -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-geodistance-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-geodistance-aggregation.html type GeoDistanceAggregation struct { field string unit string diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_geohash_grid.go b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_geohash_grid.go similarity index 94% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_geohash_grid.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_bucket_geohash_grid.go index 4c3e945f870fd8116be5a518c6bcff88eeec660f..1a56b57528964fffcd787b3cd04d58dfc4dfbb1e 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_geohash_grid.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_geohash_grid.go @@ -23,8 +23,8 @@ func (a *GeoHashGridAggregation) Field(field string) *GeoHashGridAggregation { } // Precision accepts the level as int value between 1 and 12 or Distance Units like "2km", "5mi" as described at -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/common-options.html#distance-units and -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-geohashgrid-aggregation.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/common-options.html#distance-units and +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-geohashgrid-aggregation.html func (a *GeoHashGridAggregation) Precision(precision interface{}) *GeoHashGridAggregation { a.precision = precision return a diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_global.go b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_global.go similarity index 97% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_global.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_bucket_global.go index 961f6dd46c1416ec6228012c3f990dc9c9a25bce..2e07f5d55708d201e739fd0337860704d0f8881d 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_global.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_global.go @@ -8,7 +8,7 @@ package elastic // the search execution context. This context is defined by the indices // and the document types you’re searching on, but is not influenced // by the search query itself. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-global-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-global-aggregation.html type GlobalAggregation struct { subAggregations map[string]Aggregation meta map[string]interface{} diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_histogram.go b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_histogram.go similarity index 99% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_histogram.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_bucket_histogram.go index 16c53fbb721db86c34740f249206ec4b48dfef6e..69021e6f89809679b4305998d2c73ce7878cec40 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_histogram.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_histogram.go @@ -8,7 +8,7 @@ package elastic // that can be applied on numeric values extracted from the documents. // It dynamically builds fixed size (a.k.a. interval) buckets over the // values. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-histogram-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-histogram-aggregation.html type HistogramAggregation struct { field string script *Script diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_ip_range.go b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_ip_range.go similarity index 98% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_ip_range.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_bucket_ip_range.go index 08b4f7d65d3fd7d709e7138c04222734a8e0dac3..76ebe0d404db3dcaf1be6162447e19270480677d 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_ip_range.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_ip_range.go @@ -7,7 +7,7 @@ package elastic // IPRangeAggregation is a range aggregation that is dedicated for // IP addresses. // -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-iprange-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-iprange-aggregation.html type IPRangeAggregation struct { field string subAggregations map[string]Aggregation diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_missing.go b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_missing.go similarity index 97% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_missing.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_bucket_missing.go index 182f4e3a93f172d9368baf93fda4f5f92f309383..68eba983b5d91c215bae6422c14e556a2d107dc0 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_missing.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_missing.go @@ -11,7 +11,7 @@ package elastic // conjunction with other field data bucket aggregators (such as ranges) // to return information for all the documents that could not be placed // in any of the other buckets due to missing field data values. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-missing-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-missing-aggregation.html type MissingAggregation struct { field string subAggregations map[string]Aggregation diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_nested.go b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_nested.go similarity index 97% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_nested.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_bucket_nested.go index 8b444b0bd25c491120072eff00339ea9131df059..5481f921464abd4fce42d22a0e433a4cf8d9a641 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_nested.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_nested.go @@ -6,7 +6,7 @@ package elastic // NestedAggregation is a special single bucket aggregation that enables // aggregating nested documents. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-nested-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-nested-aggregation.html type NestedAggregation struct { path string subAggregations map[string]Aggregation diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_range.go b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_range.go similarity index 99% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_range.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_bucket_range.go index 94a71c918713a27938b733380d0a11f0fdf79f9e..7e786d9fbc81e243c345f4a8e3320a458a062139 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_range.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_range.go @@ -14,7 +14,7 @@ import ( // will be checked against each bucket range and "bucket" the // relevant/matching document. Note that this aggregration includes the // from value and excludes the to value for each range. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-range-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-range-aggregation.html type RangeAggregation struct { field string script *Script diff --git a/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_rare_terms.go b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_rare_terms.go new file mode 100644 index 0000000000000000000000000000000000000000..4d77bbcc9e2f1af2ffe2b09fbe03dfd6117bc2a0 --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_rare_terms.go @@ -0,0 +1,156 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// RareTermsAggregation is a multi-bucket value source based aggregation +// which finds "rare" terms — terms that are at the long-tail of the distribution +// and are not frequent. Conceptually, this is like a terms aggregation that +// is sorted by _count ascending. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-rare-terms-aggregation.html +// for details. +type RareTermsAggregation struct { + field string + subAggregations map[string]Aggregation + meta map[string]interface{} + + includeExclude *TermsAggregationIncludeExclude + maxDocCount *int + precision *float64 + missing interface{} +} + +func NewRareTermsAggregation() *RareTermsAggregation { + return &RareTermsAggregation{ + subAggregations: make(map[string]Aggregation), + } +} + +func (a *RareTermsAggregation) Field(field string) *RareTermsAggregation { + a.field = field + return a +} + +func (a *RareTermsAggregation) SubAggregation(name string, subAggregation Aggregation) *RareTermsAggregation { + a.subAggregations[name] = subAggregation + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *RareTermsAggregation) Meta(metaData map[string]interface{}) *RareTermsAggregation { + a.meta = metaData + return a +} + +func (a *RareTermsAggregation) MaxDocCount(maxDocCount int) *RareTermsAggregation { + a.maxDocCount = &maxDocCount + return a +} + +func (a *RareTermsAggregation) Precision(precision float64) *RareTermsAggregation { + a.precision = &precision + return a +} + +func (a *RareTermsAggregation) Missing(missing interface{}) *RareTermsAggregation { + a.missing = missing + return a +} + +func (a *RareTermsAggregation) Include(regexp string) *RareTermsAggregation { + if a.includeExclude == nil { + a.includeExclude = &TermsAggregationIncludeExclude{} + } + a.includeExclude.Include = regexp + return a +} + +func (a *RareTermsAggregation) IncludeValues(values ...interface{}) *RareTermsAggregation { + if a.includeExclude == nil { + a.includeExclude = &TermsAggregationIncludeExclude{} + } + a.includeExclude.IncludeValues = append(a.includeExclude.IncludeValues, values...) + return a +} + +func (a *RareTermsAggregation) Exclude(regexp string) *RareTermsAggregation { + if a.includeExclude == nil { + a.includeExclude = &TermsAggregationIncludeExclude{} + } + a.includeExclude.Exclude = regexp + return a +} + +func (a *RareTermsAggregation) ExcludeValues(values ...interface{}) *RareTermsAggregation { + if a.includeExclude == nil { + a.includeExclude = &TermsAggregationIncludeExclude{} + } + a.includeExclude.ExcludeValues = append(a.includeExclude.ExcludeValues, values...) + return a +} + +func (a *RareTermsAggregation) IncludeExclude(includeExclude *TermsAggregationIncludeExclude) *RareTermsAggregation { + a.includeExclude = includeExclude + return a +} + +func (a *RareTermsAggregation) Source() (interface{}, error) { + // Example: + // { + // "aggregations" : { + // "genres" : { + // "rare_terms" : { "field" : "genre" } + // } + // } + // } + // + // This method returns only the + // "rare_terms" : { "field" : "genre" } + // part. + + source := make(map[string]interface{}) + opts := make(map[string]interface{}) + source["rare_terms"] = opts + + if a.field != "" { + opts["field"] = a.field + } + if a.maxDocCount != nil { + opts["max_doc_count"] = *a.maxDocCount + } + if a.precision != nil { + opts["precision"] = *a.precision + } + if a.missing != nil { + opts["missing"] = a.missing + } + + // Include/Exclude + if ie := a.includeExclude; ie != nil { + if err := ie.MergeInto(opts); err != nil { + return nil, err + } + } + + // AggregationBuilder (SubAggregations) + if len(a.subAggregations) > 0 { + aggsMap := make(map[string]interface{}) + source["aggregations"] = aggsMap + for name, aggregate := range a.subAggregations { + src, err := aggregate.Source() + if err != nil { + return nil, err + } + aggsMap[name] = src + } + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_reverse_nested.go b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_reverse_nested.go similarity index 97% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_reverse_nested.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_bucket_reverse_nested.go index b769a53244947adc872ad868cd8b74a7dae021d9..8f454f8fcebac9be14a3d4e4df43851c9628e787 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_reverse_nested.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_reverse_nested.go @@ -11,7 +11,7 @@ package elastic // which allows nesting other aggregations that aren’t part of // the nested object in a nested aggregation. // -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-reverse-nested-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-reverse-nested-aggregation.html type ReverseNestedAggregation struct { path string subAggregations map[string]Aggregation diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_sampler.go b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_sampler.go similarity index 98% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_sampler.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_bucket_sampler.go index 90a879f58add55ef712c79860db0d24e43399823..d64e6b3dd661217402666a93f44ce3625f731023 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_sampler.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_sampler.go @@ -9,7 +9,7 @@ package elastic // Optionally, diversity settings can be used to limit the number of matches // that share a common value such as an "author". // -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-sampler-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-sampler-aggregation.html type SamplerAggregation struct { subAggregations map[string]Aggregation meta map[string]interface{} diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_significant_terms.go b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_significant_terms.go similarity index 80% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_significant_terms.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_bucket_significant_terms.go index 0b8e862719c45df8e7067a33cbc91d83ce326711..e30cb22f1a2406762d5beda939a2b89df7ba03dc 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_significant_terms.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_significant_terms.go @@ -6,7 +6,7 @@ package elastic // SignificantTermsAggregation is an aggregation that returns interesting // or unusual occurrences of terms in a set. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-significantterms-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-significantterms-aggregation.html type SignificantTermsAggregation struct { field string subAggregations map[string]Aggregation @@ -19,11 +19,12 @@ type SignificantTermsAggregation struct { filter Query executionHint string significanceHeuristic SignificanceHeuristic + includeExclude *TermsAggregationIncludeExclude } func NewSignificantTermsAggregation() *SignificantTermsAggregation { return &SignificantTermsAggregation{ - subAggregations: make(map[string]Aggregation, 0), + subAggregations: make(map[string]Aggregation), } } @@ -78,6 +79,59 @@ func (a *SignificantTermsAggregation) SignificanceHeuristic(heuristic Significan return a } +func (a *SignificantTermsAggregation) Include(regexp string) *SignificantTermsAggregation { + if a.includeExclude == nil { + a.includeExclude = &TermsAggregationIncludeExclude{} + } + a.includeExclude.Include = regexp + return a +} + +func (a *SignificantTermsAggregation) IncludeValues(values ...interface{}) *SignificantTermsAggregation { + if a.includeExclude == nil { + a.includeExclude = &TermsAggregationIncludeExclude{} + } + a.includeExclude.IncludeValues = append(a.includeExclude.IncludeValues, values...) + return a +} + +func (a *SignificantTermsAggregation) Exclude(regexp string) *SignificantTermsAggregation { + if a.includeExclude == nil { + a.includeExclude = &TermsAggregationIncludeExclude{} + } + a.includeExclude.Exclude = regexp + return a +} + +func (a *SignificantTermsAggregation) ExcludeValues(values ...interface{}) *SignificantTermsAggregation { + if a.includeExclude == nil { + a.includeExclude = &TermsAggregationIncludeExclude{} + } + a.includeExclude.ExcludeValues = append(a.includeExclude.ExcludeValues, values...) + return a +} + +func (a *SignificantTermsAggregation) Partition(p int) *SignificantTermsAggregation { + if a.includeExclude == nil { + a.includeExclude = &TermsAggregationIncludeExclude{} + } + a.includeExclude.Partition = p + return a +} + +func (a *SignificantTermsAggregation) NumPartitions(n int) *SignificantTermsAggregation { + if a.includeExclude == nil { + a.includeExclude = &TermsAggregationIncludeExclude{} + } + a.includeExclude.NumPartitions = n + return a +} + +func (a *SignificantTermsAggregation) IncludeExclude(includeExclude *TermsAggregationIncludeExclude) *SignificantTermsAggregation { + a.includeExclude = includeExclude + return a +} + func (a *SignificantTermsAggregation) Source() (interface{}, error) { // Example: // { @@ -133,6 +187,13 @@ func (a *SignificantTermsAggregation) Source() (interface{}, error) { opts[name] = src } + // Include/Exclude + if ie := a.includeExclude; ie != nil { + if err := ie.MergeInto(opts); err != nil { + return nil, err + } + } + // AggregationBuilder (SubAggregations) if len(a.subAggregations) > 0 { aggsMap := make(map[string]interface{}) @@ -166,7 +227,7 @@ type SignificanceHeuristic interface { // ChiSquareSignificanceHeuristic implements Chi square as described // in "Information Retrieval", Manning et al., Chapter 13.5.2. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-significantterms-aggregation.html#_chi_square +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-significantterms-aggregation.html#_chi_square // for details. type ChiSquareSignificanceHeuristic struct { backgroundIsSuperset *bool @@ -216,7 +277,7 @@ func (sh *ChiSquareSignificanceHeuristic) Source() (interface{}, error) { // as described in "The Google Similarity Distance", Cilibrasi and Vitanyi, // 2007. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-significantterms-aggregation.html#_google_normalized_distance +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-significantterms-aggregation.html#_google_normalized_distance // for details. type GNDSignificanceHeuristic struct { backgroundIsSuperset *bool @@ -252,7 +313,7 @@ func (sh *GNDSignificanceHeuristic) Source() (interface{}, error) { // -- JLH Score -- // JLHScoreSignificanceHeuristic implements the JLH score as described in -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-significantterms-aggregation.html#_jlh_score. +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-significantterms-aggregation.html#_jlh_score. type JLHScoreSignificanceHeuristic struct{} // NewJLHScoreSignificanceHeuristic initializes a new JLHScoreSignificanceHeuristic. @@ -276,7 +337,7 @@ func (sh *JLHScoreSignificanceHeuristic) Source() (interface{}, error) { // MutualInformationSignificanceHeuristic implements Mutual information // as described in "Information Retrieval", Manning et al., Chapter 13.5.1. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-significantterms-aggregation.html#_mutual_information +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-significantterms-aggregation.html#_mutual_information // for details. type MutualInformationSignificanceHeuristic struct { backgroundIsSuperset *bool @@ -324,7 +385,7 @@ func (sh *MutualInformationSignificanceHeuristic) Source() (interface{}, error) // -- Percentage Score -- // PercentageScoreSignificanceHeuristic implements the algorithm described -// in https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-significantterms-aggregation.html#_percentage. +// in https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-significantterms-aggregation.html#_percentage. type PercentageScoreSignificanceHeuristic struct{} // NewPercentageScoreSignificanceHeuristic initializes a new instance of @@ -347,7 +408,7 @@ func (sh *PercentageScoreSignificanceHeuristic) Source() (interface{}, error) { // -- Script -- // ScriptSignificanceHeuristic implements a scripted significance heuristic. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-significantterms-aggregation.html#_scripted +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-significantterms-aggregation.html#_scripted // for details. type ScriptSignificanceHeuristic struct { script *Script @@ -368,7 +429,7 @@ func (sh *ScriptSignificanceHeuristic) Name() string { // parameters are available in the script: `_subset_freq`, `_superset_freq`, // `_subset_size`, and `_superset_size`. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-significantterms-aggregation.html#_scripted +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-significantterms-aggregation.html#_scripted // for details. func (sh *ScriptSignificanceHeuristic) Script(script *Script) *ScriptSignificanceHeuristic { sh.script = script diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_significant_text.go b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_significant_text.go similarity index 96% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_significant_text.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_bucket_significant_text.go index df4139098765f7160ce4360efe910a1373fed742..2602df9075d7d219f2c76c7a709381a2ffa8bd42 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_significant_text.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_significant_text.go @@ -6,7 +6,7 @@ package elastic // SignificantTextAggregation returns interesting or unusual occurrences // of free-text terms in a set. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-significanttext-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-significanttext-aggregation.html type SignificantTextAggregation struct { field string subAggregations map[string]Aggregation @@ -22,7 +22,7 @@ type SignificantTextAggregation struct { func NewSignificantTextAggregation() *SignificantTextAggregation { return &SignificantTextAggregation{ - subAggregations: make(map[string]Aggregation, 0), + subAggregations: make(map[string]Aggregation), } } @@ -142,6 +142,11 @@ func (a *SignificantTextAggregation) NumPartitions(n int) *SignificantTextAggreg return a } +func (a *SignificantTextAggregation) IncludeExclude(includeExclude *TermsAggregationIncludeExclude) *SignificantTextAggregation { + a.includeExclude = includeExclude + return a +} + func (a *SignificantTextAggregation) Source() (interface{}, error) { // Example: // { diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_terms.go b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_terms.go similarity index 82% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_terms.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_bucket_terms.go index 6f66d5f15fc4103c74e9463617f753bb4e751818..8f047be5f267920b67449a824a474b1639c591f2 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_bucket_terms.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_bucket_terms.go @@ -4,10 +4,12 @@ package elastic +import "fmt" + // TermsAggregation is a multi-bucket value source based aggregation // where buckets are dynamically built - one per unique value. // -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-terms-aggregation.html +// See: http://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-bucket-terms-aggregation.html type TermsAggregation struct { field string script *Script @@ -30,7 +32,7 @@ type TermsAggregation struct { func NewTermsAggregation() *TermsAggregation { return &TermsAggregation{ - subAggregations: make(map[string]Aggregation, 0), + subAggregations: make(map[string]Aggregation), } } @@ -134,6 +136,11 @@ func (a *TermsAggregation) NumPartitions(n int) *TermsAggregation { return a } +func (a *TermsAggregation) IncludeExclude(includeExclude *TermsAggregationIncludeExclude) *TermsAggregation { + a.includeExclude = includeExclude + return a +} + // ValueType can be string, long, or double. func (a *TermsAggregation) ValueType(valueType string) *TermsAggregation { a.valueType = valueType @@ -159,20 +166,37 @@ func (a *TermsAggregation) OrderByCountDesc() *TermsAggregation { return a.OrderByCount(false) } +// Deprecated: Use OrderByKey instead. func (a *TermsAggregation) OrderByTerm(asc bool) *TermsAggregation { // "order" : { "_term" : "asc" } a.order = append(a.order, TermsOrder{Field: "_term", Ascending: asc}) return a } +// Deprecated: Use OrderByKeyAsc instead. func (a *TermsAggregation) OrderByTermAsc() *TermsAggregation { return a.OrderByTerm(true) } +// Deprecated: Use OrderByKeyDesc instead. func (a *TermsAggregation) OrderByTermDesc() *TermsAggregation { return a.OrderByTerm(false) } +func (a *TermsAggregation) OrderByKey(asc bool) *TermsAggregation { + // "order" : { "_term" : "asc" } + a.order = append(a.order, TermsOrder{Field: "_key", Ascending: asc}) + return a +} + +func (a *TermsAggregation) OrderByKeyAsc() *TermsAggregation { + return a.OrderByKey(true) +} + +func (a *TermsAggregation) OrderByKeyDesc() *TermsAggregation { + return a.OrderByKey(false) +} + // OrderByAggregation creates a bucket ordering strategy which sorts buckets // based on a single-valued calc get. func (a *TermsAggregation) OrderByAggregation(aggName string, asc bool) *TermsAggregation { @@ -295,24 +319,11 @@ func (a *TermsAggregation) Source() (interface{}, error) { } opts["order"] = orderSlice } + // Include/Exclude if ie := a.includeExclude; ie != nil { - // Include - if ie.Include != "" { - opts["include"] = ie.Include - } else if len(ie.IncludeValues) > 0 { - opts["include"] = ie.IncludeValues - } else if ie.NumPartitions > 0 { - inc := make(map[string]interface{}) - inc["partition"] = ie.Partition - inc["num_partitions"] = ie.NumPartitions - opts["include"] = inc - } - // Exclude - if ie.Exclude != "" { - opts["exclude"] = ie.Exclude - } else if len(ie.ExcludeValues) > 0 { - opts["exclude"] = ie.ExcludeValues + if err := ie.MergeInto(opts); err != nil { + return nil, err } } @@ -351,6 +362,48 @@ type TermsAggregationIncludeExclude struct { NumPartitions int } +// Source returns a JSON serializable struct. +func (ie *TermsAggregationIncludeExclude) Source() (interface{}, error) { + source := make(map[string]interface{}) + + // Include + if ie.Include != "" { + source["include"] = ie.Include + } else if len(ie.IncludeValues) > 0 { + source["include"] = ie.IncludeValues + } else if ie.NumPartitions > 0 { + inc := make(map[string]interface{}) + inc["partition"] = ie.Partition + inc["num_partitions"] = ie.NumPartitions + source["include"] = inc + } + + // Exclude + if ie.Exclude != "" { + source["exclude"] = ie.Exclude + } else if len(ie.ExcludeValues) > 0 { + source["exclude"] = ie.ExcludeValues + } + + return source, nil +} + +// MergeInto merges the values of the include/exclude options into source. +func (ie *TermsAggregationIncludeExclude) MergeInto(source map[string]interface{}) error { + values, err := ie.Source() + if err != nil { + return err + } + mv, ok := values.(map[string]interface{}) + if !ok { + return fmt.Errorf("IncludeExclude: expected a map[string]interface{}, got %T", values) + } + for k, v := range mv { + source[k] = v + } + return nil +} + // TermsOrder specifies a single order field for a terms aggregation. type TermsOrder struct { Field string diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_matrix_stats.go b/vendor/github.com/olivere/elastic/v7/search_aggs_matrix_stats.go similarity index 96% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_matrix_stats.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_matrix_stats.go index fe96d1ef0f26369f25d35ce5f426dbbdc31b9d4d..f0eb457ff627dd44953925d6829ecd6b55695303 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_matrix_stats.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_matrix_stats.go @@ -11,7 +11,7 @@ package elastic // // The stats that are returned consist of: min, max, sum, count and avg. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-stats-aggregation.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-metrics-stats-aggregation.html // for details. type MatrixStatsAggregation struct { fields []string diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_metrics_avg.go b/vendor/github.com/olivere/elastic/v7/search_aggs_metrics_avg.go similarity index 91% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_metrics_avg.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_metrics_avg.go index 6fd942085405c514c83fb75054d201cec22138cc..7f58caf316514aa06d52ccff1c92b337f980fa8e 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_metrics_avg.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_metrics_avg.go @@ -10,11 +10,12 @@ package elastic // specific numeric fields in the documents, or be generated by // a provided script. // -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-avg-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-metrics-avg-aggregation.html type AvgAggregation struct { field string script *Script format string + missing interface{} subAggregations map[string]Aggregation meta map[string]interface{} } @@ -40,6 +41,11 @@ func (a *AvgAggregation) Format(format string) *AvgAggregation { return a } +func (a *AvgAggregation) Missing(missing interface{}) *AvgAggregation { + a.missing = missing + return a +} + func (a *AvgAggregation) SubAggregation(name string, subAggregation Aggregation) *AvgAggregation { a.subAggregations[name] = subAggregation return a @@ -80,6 +86,10 @@ func (a *AvgAggregation) Source() (interface{}, error) { opts["format"] = a.format } + if a.missing != nil { + opts["missing"] = a.missing + } + // AggregationBuilder (SubAggregations) if len(a.subAggregations) > 0 { aggsMap := make(map[string]interface{}) diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_metrics_cardinality.go b/vendor/github.com/olivere/elastic/v7/search_aggs_metrics_cardinality.go similarity index 91% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_metrics_cardinality.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_metrics_cardinality.go index e50d78698af1d664a11a5977e636cb3e9aef5261..f0599a68e7ca3c7b3a753718fdba2a214243c26b 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_metrics_cardinality.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_metrics_cardinality.go @@ -8,11 +8,12 @@ package elastic // calculates an approximate count of distinct values. // Values can be extracted either from specific fields in the document // or generated by a script. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-cardinality-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-metrics-cardinality-aggregation.html type CardinalityAggregation struct { field string script *Script format string + missing interface{} subAggregations map[string]Aggregation meta map[string]interface{} precisionThreshold *int64 @@ -40,6 +41,10 @@ func (a *CardinalityAggregation) Format(format string) *CardinalityAggregation { return a } +func (a *CardinalityAggregation) Missing(missing interface{}) *CardinalityAggregation { + a.missing = missing + return a +} func (a *CardinalityAggregation) SubAggregation(name string, subAggregation Aggregation) *CardinalityAggregation { a.subAggregations[name] = subAggregation return a @@ -87,7 +92,9 @@ func (a *CardinalityAggregation) Source() (interface{}, error) { } opts["script"] = src } - + if a.missing != nil { + opts["missing"] = a.missing + } if a.format != "" { opts["format"] = a.format } diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_metrics_extended_stats.go b/vendor/github.com/olivere/elastic/v7/search_aggs_metrics_extended_stats.go similarity index 85% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_metrics_extended_stats.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_metrics_extended_stats.go index 425444d5f54805f1d7bd2bfb9e81f9fb6b190a64..3008a8d124e452c0bfc93ef985732f8777872522 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_metrics_extended_stats.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_metrics_extended_stats.go @@ -8,11 +8,13 @@ package elastic // computes stats over numeric values extracted from the aggregated documents. // These values can be extracted either from specific numeric fields // in the documents, or be generated by a provided script. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-extendedstats-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-metrics-extendedstats-aggregation.html type ExtendedStatsAggregation struct { field string script *Script format string + missing interface{} + sigma *float64 subAggregations map[string]Aggregation meta map[string]interface{} } @@ -38,6 +40,16 @@ func (a *ExtendedStatsAggregation) Format(format string) *ExtendedStatsAggregati return a } +func (a *ExtendedStatsAggregation) Missing(missing interface{}) *ExtendedStatsAggregation { + a.missing = missing + return a +} + +func (a *ExtendedStatsAggregation) Sigma(sigma float64) *ExtendedStatsAggregation { + a.sigma = &sigma + return a +} + func (a *ExtendedStatsAggregation) SubAggregation(name string, subAggregation Aggregation) *ExtendedStatsAggregation { a.subAggregations[name] = subAggregation return a @@ -76,6 +88,12 @@ func (a *ExtendedStatsAggregation) Source() (interface{}, error) { if a.format != "" { opts["format"] = a.format } + if v := a.missing; v != nil { + opts["missing"] = v + } + if v := a.sigma; v != nil { + opts["sigma"] = *v + } // AggregationBuilder (SubAggregations) if len(a.subAggregations) > 0 { diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_metrics_geo_bounds.go b/vendor/github.com/olivere/elastic/v7/search_aggs_metrics_geo_bounds.go similarity index 97% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_metrics_geo_bounds.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_metrics_geo_bounds.go index 3a322ed20ceb0b32e555b73cd21c0e4bade5eff6..007e3029ae516fda239e20416070196510e14ee2 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_metrics_geo_bounds.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_metrics_geo_bounds.go @@ -6,7 +6,7 @@ package elastic // GeoBoundsAggregation is a metric aggregation that computes the // bounding box containing all geo_point values for a field. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-geobounds-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-metrics-geobounds-aggregation.html type GeoBoundsAggregation struct { field string script *Script diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_metrics_geo_centroid.go b/vendor/github.com/olivere/elastic/v7/search_aggs_metrics_geo_centroid.go similarity index 97% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_metrics_geo_centroid.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_metrics_geo_centroid.go index 23a0f7878c448882a4d7e4e38faf1919cecf9e44..55b3f48a3a7ff9c76297cc3f4260c8bc5c153a77 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_metrics_geo_centroid.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_metrics_geo_centroid.go @@ -6,7 +6,7 @@ package elastic // GeoCentroidAggregation is a metric aggregation that computes the weighted centroid // from all coordinate values for a Geo-point datatype field. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-geocentroid-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-metrics-geocentroid-aggregation.html type GeoCentroidAggregation struct { field string script *Script diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_metrics_max.go b/vendor/github.com/olivere/elastic/v7/search_aggs_metrics_max.go similarity index 91% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_metrics_max.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_metrics_max.go index 7d2c39f8ba0d8de6adea754a09ddbd7dc2c6fa57..9128a2522c28f0ce5352ed23b07fe9f7037f5ab0 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_metrics_max.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_metrics_max.go @@ -9,11 +9,12 @@ package elastic // the aggregated documents. These values can be extracted either from // specific numeric fields in the documents, or be generated by // a provided script. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-max-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-metrics-max-aggregation.html type MaxAggregation struct { field string script *Script format string + missing interface{} subAggregations map[string]Aggregation meta map[string]interface{} } @@ -39,6 +40,11 @@ func (a *MaxAggregation) Format(format string) *MaxAggregation { return a } +func (a *MaxAggregation) Missing(missing interface{}) *MaxAggregation { + a.missing = missing + return a +} + func (a *MaxAggregation) SubAggregation(name string, subAggregation Aggregation) *MaxAggregation { a.subAggregations[name] = subAggregation return a @@ -76,6 +82,9 @@ func (a *MaxAggregation) Source() (interface{}, error) { if a.format != "" { opts["format"] = a.format } + if a.missing != nil { + opts["missing"] = a.missing + } // AggregationBuilder (SubAggregations) if len(a.subAggregations) > 0 { diff --git a/vendor/github.com/olivere/elastic/v7/search_aggs_metrics_median_absolute_deviation.go b/vendor/github.com/olivere/elastic/v7/search_aggs_metrics_median_absolute_deviation.go new file mode 100644 index 0000000000000000000000000000000000000000..dcf421333146919a76dba4f1630483785b89daf4 --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_metrics_median_absolute_deviation.go @@ -0,0 +1,119 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// MedianAbsoluteDeviationAggregation is a measure of variability. +// It is a robust statistic, meaning that it is useful for describing data +// that may have outliers, or may not be normally distributed. +// For such data it can be more descriptive than standard deviation. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.6/search-aggregations-metrics-median-absolute-deviation-aggregation.html +// for details. +type MedianAbsoluteDeviationAggregation struct { + field string + compression *float64 + script *Script + format string + missing interface{} + subAggregations map[string]Aggregation + meta map[string]interface{} +} + +func NewMedianAbsoluteDeviationAggregation() *MedianAbsoluteDeviationAggregation { + return &MedianAbsoluteDeviationAggregation{ + subAggregations: make(map[string]Aggregation), + } +} + +func (a *MedianAbsoluteDeviationAggregation) Field(field string) *MedianAbsoluteDeviationAggregation { + a.field = field + return a +} + +func (a *MedianAbsoluteDeviationAggregation) Compression(compression float64) *MedianAbsoluteDeviationAggregation { + a.compression = &compression + return a +} + +func (a *MedianAbsoluteDeviationAggregation) Script(script *Script) *MedianAbsoluteDeviationAggregation { + a.script = script + return a +} + +func (a *MedianAbsoluteDeviationAggregation) Format(format string) *MedianAbsoluteDeviationAggregation { + a.format = format + return a +} + +func (a *MedianAbsoluteDeviationAggregation) Missing(missing interface{}) *MedianAbsoluteDeviationAggregation { + a.missing = missing + return a +} + +func (a *MedianAbsoluteDeviationAggregation) SubAggregation(name string, subAggregation Aggregation) *MedianAbsoluteDeviationAggregation { + a.subAggregations[name] = subAggregation + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *MedianAbsoluteDeviationAggregation) Meta(metaData map[string]interface{}) *MedianAbsoluteDeviationAggregation { + a.meta = metaData + return a +} + +func (a *MedianAbsoluteDeviationAggregation) Source() (interface{}, error) { + // Example: + // { + // "aggs" : { + // "review_variability" : { "median_absolute_deviation" : { "field" : "rating" } } + // } + // } + // This method returns only the { "median_absolute_deviation" : { "field" : "rating" } } part. + + source := make(map[string]interface{}) + opts := make(map[string]interface{}) + source["median_absolute_deviation"] = opts + + // ValuesSourceAggregationBuilder + if a.field != "" { + opts["field"] = a.field + } + if v := a.compression; v != nil { + opts["compression"] = *v + } + if a.script != nil { + src, err := a.script.Source() + if err != nil { + return nil, err + } + opts["script"] = src + } + if a.format != "" { + opts["format"] = a.format + } + if a.missing != nil { + opts["missing"] = a.missing + } + + // AggregationBuilder (SubAggregations) + if len(a.subAggregations) > 0 { + aggsMap := make(map[string]interface{}) + source["aggregations"] = aggsMap + for name, aggregate := range a.subAggregations { + src, err := aggregate.Source() + if err != nil { + return nil, err + } + aggsMap[name] = src + } + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_metrics_min.go b/vendor/github.com/olivere/elastic/v7/search_aggs_metrics_min.go similarity index 91% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_metrics_min.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_metrics_min.go index 8c963d1dd171b37b11ae2439cd5cd83ad8a49d0c..b6e40f9404bb9c65a4974f4ab8e524e67422bb81 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_metrics_min.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_metrics_min.go @@ -9,11 +9,12 @@ package elastic // aggregated documents. These values can be extracted either from // specific numeric fields in the documents, or be generated by a // provided script. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-min-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-metrics-min-aggregation.html type MinAggregation struct { field string script *Script format string + missing interface{} subAggregations map[string]Aggregation meta map[string]interface{} } @@ -39,6 +40,11 @@ func (a *MinAggregation) Format(format string) *MinAggregation { return a } +func (a *MinAggregation) Missing(missing interface{}) *MinAggregation { + a.missing = missing + return a +} + func (a *MinAggregation) SubAggregation(name string, subAggregation Aggregation) *MinAggregation { a.subAggregations[name] = subAggregation return a @@ -77,6 +83,9 @@ func (a *MinAggregation) Source() (interface{}, error) { if a.format != "" { opts["format"] = a.format } + if a.missing != nil { + opts["missing"] = a.missing + } // AggregationBuilder (SubAggregations) if len(a.subAggregations) > 0 { diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_metrics_percentile_ranks.go b/vendor/github.com/olivere/elastic/v7/search_aggs_metrics_percentile_ranks.go similarity index 92% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_metrics_percentile_ranks.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_metrics_percentile_ranks.go index 684ffc885f112900b89f84d0c27c5ac25a3d2085..a62ff4c345e0640ad71b7651eb17812b8bb9e53f 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_metrics_percentile_ranks.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_metrics_percentile_ranks.go @@ -5,11 +5,12 @@ package elastic // PercentileRanksAggregation -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-percentile-rank-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-metrics-percentile-rank-aggregation.html type PercentileRanksAggregation struct { field string script *Script format string + missing interface{} subAggregations map[string]Aggregation meta map[string]interface{} values []float64 @@ -39,6 +40,11 @@ func (a *PercentileRanksAggregation) Format(format string) *PercentileRanksAggre return a } +func (a *PercentileRanksAggregation) Missing(missing interface{}) *PercentileRanksAggregation { + a.missing = missing + return a +} + func (a *PercentileRanksAggregation) SubAggregation(name string, subAggregation Aggregation) *PercentileRanksAggregation { a.subAggregations[name] = subAggregation return a @@ -99,6 +105,9 @@ func (a *PercentileRanksAggregation) Source() (interface{}, error) { if a.format != "" { opts["format"] = a.format } + if a.missing != nil { + opts["missing"] = a.missing + } if len(a.values) > 0 { opts["values"] = a.values } diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_metrics_percentiles.go b/vendor/github.com/olivere/elastic/v7/search_aggs_metrics_percentiles.go similarity index 69% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_metrics_percentiles.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_metrics_percentiles.go index 1be079fd24e06ae0d83f6e71c4d132ab60eefc9f..1eb62de54ba4ca0414c410bd3095b2ead4f92b7d 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_metrics_percentiles.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_metrics_percentiles.go @@ -10,22 +10,26 @@ package elastic // be extracted either from specific numeric fields in the documents, // or be generated by a provided script. // -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-percentile-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-metrics-percentile-aggregation.html type PercentilesAggregation struct { - field string - script *Script - format string - subAggregations map[string]Aggregation - meta map[string]interface{} - percentiles []float64 - compression *float64 - estimator string + field string + script *Script + format string + missing interface{} + subAggregations map[string]Aggregation + meta map[string]interface{} + percentiles []float64 + method string + compression *float64 + numberOfSignificantValueDigits *int + estimator string } func NewPercentilesAggregation() *PercentilesAggregation { return &PercentilesAggregation{ subAggregations: make(map[string]Aggregation), percentiles: make([]float64, 0), + method: "tdigest", } } @@ -44,6 +48,11 @@ func (a *PercentilesAggregation) Format(format string) *PercentilesAggregation { return a } +func (a *PercentilesAggregation) Missing(missing interface{}) *PercentilesAggregation { + a.missing = missing + return a +} + func (a *PercentilesAggregation) SubAggregation(name string, subAggregation Aggregation) *PercentilesAggregation { a.subAggregations[name] = subAggregation return a @@ -60,11 +69,22 @@ func (a *PercentilesAggregation) Percentiles(percentiles ...float64) *Percentile return a } +// Method is the percentiles method, which can be "tdigest" (default) or "hdr". +func (a *PercentilesAggregation) Method(method string) *PercentilesAggregation { + a.method = method + return a +} + func (a *PercentilesAggregation) Compression(compression float64) *PercentilesAggregation { a.compression = &compression return a } +func (a *PercentilesAggregation) NumberOfSignificantValueDigits(digits int) *PercentilesAggregation { + a.numberOfSignificantValueDigits = &digits + return a +} + func (a *PercentilesAggregation) Estimator(estimator string) *PercentilesAggregation { a.estimator = estimator return a @@ -103,11 +123,25 @@ func (a *PercentilesAggregation) Source() (interface{}, error) { if a.format != "" { opts["format"] = a.format } + if a.missing != nil { + opts["missing"] = a.missing + } if len(a.percentiles) > 0 { opts["percents"] = a.percentiles } - if a.compression != nil { - opts["compression"] = *a.compression + switch a.method { + case "tdigest": + if c := a.compression; c != nil { + opts[a.method] = map[string]interface{}{ + "compression": *c, + } + } + case "hdr": + if n := a.numberOfSignificantValueDigits; n != nil { + opts[a.method] = map[string]interface{}{ + "number_of_significant_value_digits": *n, + } + } } if a.estimator != "" { opts["estimator"] = a.estimator diff --git a/vendor/github.com/olivere/elastic/v7/search_aggs_metrics_scripted_metric.go b/vendor/github.com/olivere/elastic/v7/search_aggs_metrics_scripted_metric.go new file mode 100644 index 0000000000000000000000000000000000000000..0b26c9d6c4f102c2825866d92bd427fa023acd18 --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_metrics_scripted_metric.go @@ -0,0 +1,112 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. +package elastic + +// ScriptedMetricAggregation is a a metric aggregation that executes using scripts to provide a metric output. +// +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-metrics-scripted-metric-aggregation.html +type ScriptedMetricAggregation struct { + initScript *Script + mapScript *Script + combineScript *Script + reduceScript *Script + + params map[string]interface{} + meta map[string]interface{} +} + +func NewScriptedMetricAggregation() *ScriptedMetricAggregation { + a := &ScriptedMetricAggregation{} + return a +} + +func (a *ScriptedMetricAggregation) InitScript(script *Script) *ScriptedMetricAggregation { + a.initScript = script + return a +} + +func (a *ScriptedMetricAggregation) MapScript(script *Script) *ScriptedMetricAggregation { + a.mapScript = script + return a +} + +func (a *ScriptedMetricAggregation) CombineScript(script *Script) *ScriptedMetricAggregation { + a.combineScript = script + return a +} + +func (a *ScriptedMetricAggregation) ReduceScript(script *Script) *ScriptedMetricAggregation { + a.reduceScript = script + return a +} + +func (a *ScriptedMetricAggregation) Params(params map[string]interface{}) *ScriptedMetricAggregation { + a.params = params + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *ScriptedMetricAggregation) Meta(metaData map[string]interface{}) *ScriptedMetricAggregation { + a.meta = metaData + return a +} + +func (a *ScriptedMetricAggregation) Source() (interface{}, error) { + // Example: + // { + // "aggs" : { + // "magic_script" : { "scripted_metric" : { + // "init_script" : "state.transactions = []", + // "map_script" : "state.transactions.add(doc.type.value == 'sale' ? doc.amount.value : -1 * doc.amount.value)", + // "combine_script" : "double profit = 0; for (t in state.transactions) { profit += t } return profit", + // "reduce_script" : "double profit = 0; for (a in states) { profit += a } return profit" + // } } + // } + // } + // This method returns only the { "scripted_metric" : { ... } } part. + + source := make(map[string]interface{}) + opts := make(map[string]interface{}) + source["scripted_metric"] = opts + + if a.initScript != nil { + src, err := a.initScript.Source() + if err != nil { + return nil, err + } + opts["init_script"] = src + } + if a.mapScript != nil { + src, err := a.mapScript.Source() + if err != nil { + return nil, err + } + opts["map_script"] = src + } + if a.combineScript != nil { + src, err := a.combineScript.Source() + if err != nil { + return nil, err + } + opts["combine_script"] = src + } + if a.reduceScript != nil { + src, err := a.reduceScript.Source() + if err != nil { + return nil, err + } + opts["reduce_script"] = src + } + + if a.params != nil && len(a.params) > 0 { + opts["params"] = a.params + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_metrics_stats.go b/vendor/github.com/olivere/elastic/v7/search_aggs_metrics_stats.go similarity index 90% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_metrics_stats.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_metrics_stats.go index f193409a6da08df8664a84c415088f15b534efed..6c00f6855b777123fe1ee10c43777e58c92fdb91 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_metrics_stats.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_metrics_stats.go @@ -8,11 +8,12 @@ package elastic // over numeric values extracted from the aggregated documents. // These values can be extracted either from specific numeric fields // in the documents, or be generated by a provided script. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-stats-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-metrics-stats-aggregation.html type StatsAggregation struct { field string script *Script format string + missing interface{} subAggregations map[string]Aggregation meta map[string]interface{} } @@ -38,6 +39,11 @@ func (a *StatsAggregation) Format(format string) *StatsAggregation { return a } +func (a *StatsAggregation) Missing(missing interface{}) *StatsAggregation { + a.missing = missing + return a +} + func (a *StatsAggregation) SubAggregation(name string, subAggregation Aggregation) *StatsAggregation { a.subAggregations[name] = subAggregation return a @@ -76,6 +82,9 @@ func (a *StatsAggregation) Source() (interface{}, error) { if a.format != "" { opts["format"] = a.format } + if a.missing != nil { + opts["missing"] = a.missing + } // AggregationBuilder (SubAggregations) if len(a.subAggregations) > 0 { diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_metrics_sum.go b/vendor/github.com/olivere/elastic/v7/search_aggs_metrics_sum.go similarity index 91% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_metrics_sum.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_metrics_sum.go index ebef1503d28f5744856359e96fe0fdd4116f1b2d..6de8f1d5b7835ae7f72d8261ad96ce8d502857ea 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_metrics_sum.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_metrics_sum.go @@ -8,11 +8,12 @@ package elastic // numeric values that are extracted from the aggregated documents. // These values can be extracted either from specific numeric fields // in the documents, or be generated by a provided script. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-sum-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-metrics-sum-aggregation.html type SumAggregation struct { field string script *Script format string + missing interface{} subAggregations map[string]Aggregation meta map[string]interface{} } @@ -38,6 +39,11 @@ func (a *SumAggregation) Format(format string) *SumAggregation { return a } +func (a *SumAggregation) Missing(missing interface{}) *SumAggregation { + a.missing = missing + return a +} + func (a *SumAggregation) SubAggregation(name string, subAggregation Aggregation) *SumAggregation { a.subAggregations[name] = subAggregation return a @@ -76,6 +82,9 @@ func (a *SumAggregation) Source() (interface{}, error) { if a.format != "" { opts["format"] = a.format } + if a.missing != nil { + opts["missing"] = a.missing + } // AggregationBuilder (SubAggregations) if len(a.subAggregations) > 0 { diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_metrics_top_hits.go b/vendor/github.com/olivere/elastic/v7/search_aggs_metrics_top_hits.go similarity index 86% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_metrics_top_hits.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_metrics_top_hits.go index a78e556e6cee2083d81e4b4f6252a432e7b0be57..7321667d394fdef07330ec0fefdd676eb9977956 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_metrics_top_hits.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_metrics_top_hits.go @@ -13,7 +13,7 @@ package elastic // a bucket aggregator. One or more bucket aggregators determines by // which properties a result set get sliced into. // -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-top-hits-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-metrics-top-hits-aggregation.html type TopHitsAggregation struct { searchSource *SearchSource } @@ -24,6 +24,14 @@ func NewTopHitsAggregation() *TopHitsAggregation { } } +func (a *TopHitsAggregation) SearchSource(searchSource *SearchSource) *TopHitsAggregation { + a.searchSource = searchSource + if a.searchSource == nil { + a.searchSource = NewSearchSource() + } + return a +} + func (a *TopHitsAggregation) From(from int) *TopHitsAggregation { a.searchSource = a.searchSource.From(from) return a @@ -69,11 +77,21 @@ func (a *TopHitsAggregation) DocvalueFields(docvalueFields ...string) *TopHitsAg return a } +func (a *TopHitsAggregation) DocvalueFieldsWithFormat(docvalueFields ...DocvalueField) *TopHitsAggregation { + a.searchSource = a.searchSource.DocvalueFieldsWithFormat(docvalueFields...) + return a +} + func (a *TopHitsAggregation) DocvalueField(docvalueField string) *TopHitsAggregation { a.searchSource = a.searchSource.DocvalueField(docvalueField) return a } +func (a *TopHitsAggregation) DocvalueFieldWithFormat(docvalueField DocvalueField) *TopHitsAggregation { + a.searchSource = a.searchSource.DocvalueFieldWithFormat(docvalueField) + return a +} + func (a *TopHitsAggregation) ScriptFields(scriptFields ...*ScriptField) *TopHitsAggregation { a.searchSource = a.searchSource.ScriptFields(scriptFields...) return a diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_metrics_value_count.go b/vendor/github.com/olivere/elastic/v7/search_aggs_metrics_value_count.go similarity index 97% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_metrics_value_count.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_metrics_value_count.go index abcc166dc7e5fac42068a53d84743998baf620b6..b948dcccc4d82ed9119d93037b4265b6fb79ea0b 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_metrics_value_count.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_metrics_value_count.go @@ -11,7 +11,7 @@ package elastic // used in conjunction with other single-value aggregations. // For example, when computing the avg one might be interested in the // number of values the average is computed over. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-valuecount-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-metrics-valuecount-aggregation.html type ValueCountAggregation struct { field string script *Script diff --git a/vendor/github.com/olivere/elastic/v7/search_aggs_metrics_weighted_avg.go b/vendor/github.com/olivere/elastic/v7/search_aggs_metrics_weighted_avg.go new file mode 100644 index 0000000000000000000000000000000000000000..cd7ad7ee7927362fe0d1cf425fc9add17cabaf97 --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_metrics_weighted_avg.go @@ -0,0 +1,156 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// WeightedAvgAggregation is a single-value metrics aggregation that +// computes the weighted average of numeric values that are extracted +// from the aggregated documents. These values can be extracted either +// from specific numeric fields in the documents. +// +// See: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-metrics-weight-avg-aggregation.html +type WeightedAvgAggregation struct { + fields map[string]*MultiValuesSourceFieldConfig + valueType string + format string + value *MultiValuesSourceFieldConfig + weight *MultiValuesSourceFieldConfig + subAggregations map[string]Aggregation + meta map[string]interface{} +} + +func NewWeightedAvgAggregation() *WeightedAvgAggregation { + return &WeightedAvgAggregation{ + fields: make(map[string]*MultiValuesSourceFieldConfig), + subAggregations: make(map[string]Aggregation), + } +} + +func (a *WeightedAvgAggregation) Field(field string, config *MultiValuesSourceFieldConfig) *WeightedAvgAggregation { + a.fields[field] = config + return a +} + +func (a *WeightedAvgAggregation) ValueType(valueType string) *WeightedAvgAggregation { + a.valueType = valueType + return a +} + +func (a *WeightedAvgAggregation) Format(format string) *WeightedAvgAggregation { + a.format = format + return a +} + +func (a *WeightedAvgAggregation) Value(value *MultiValuesSourceFieldConfig) *WeightedAvgAggregation { + a.value = value + return a +} + +func (a *WeightedAvgAggregation) Weight(weight *MultiValuesSourceFieldConfig) *WeightedAvgAggregation { + a.weight = weight + return a +} + +func (a *WeightedAvgAggregation) SubAggregation(name string, subAggregation Aggregation) *WeightedAvgAggregation { + a.subAggregations[name] = subAggregation + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *WeightedAvgAggregation) Meta(metaData map[string]interface{}) *WeightedAvgAggregation { + a.meta = metaData + return a +} + +func (a *WeightedAvgAggregation) Source() (interface{}, error) { + source := make(map[string]interface{}) + opts := make(map[string]interface{}) + source["weighted_avg"] = opts + + if len(a.fields) > 0 { + f := make(map[string]interface{}) + for name, config := range a.fields { + cfg, err := config.Source() + if err != nil { + return nil, err + } + f[name] = cfg + } + opts["fields"] = f + } + + if v := a.format; v != "" { + opts["format"] = v + } + + if v := a.valueType; v != "" { + opts["value_type"] = v + } + + if v := a.value; v != nil { + cfg, err := v.Source() + if err != nil { + return nil, err + } + opts["value"] = cfg + } + + if v := a.weight; v != nil { + cfg, err := v.Source() + if err != nil { + return nil, err + } + opts["weight"] = cfg + } + + // AggregationBuilder (SubAggregations) + if len(a.subAggregations) > 0 { + aggsMap := make(map[string]interface{}) + source["aggregations"] = aggsMap + for name, aggregate := range a.subAggregations { + src, err := aggregate.Source() + if err != nil { + return nil, err + } + aggsMap[name] = src + } + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} + +// MultiValuesSourceFieldConfig represents a field configuration +// used e.g. in WeightedAvgAggregation. +type MultiValuesSourceFieldConfig struct { + FieldName string + Missing interface{} + Script *Script + TimeZone string +} + +func (f *MultiValuesSourceFieldConfig) Source() (interface{}, error) { + source := make(map[string]interface{}) + if v := f.Missing; v != nil { + source["missing"] = v + } + if v := f.Script; v != nil { + src, err := v.Source() + if err != nil { + return nil, err + } + source["script"] = src + } + if v := f.FieldName; v != "" { + source["field"] = v + } + if v := f.TimeZone; v != "" { + source["time_zone"] = v + } + return source, nil +} diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_pipeline_avg_bucket.go b/vendor/github.com/olivere/elastic/v7/search_aggs_pipeline_avg_bucket.go similarity index 97% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_pipeline_avg_bucket.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_pipeline_avg_bucket.go index 97046fd33e6e00665ce0d209a36940d06bea5714..5c130d617637b127efb764a2a17da63d3af9bf54 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_pipeline_avg_bucket.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_pipeline_avg_bucket.go @@ -10,7 +10,7 @@ package elastic // be a multi-bucket aggregation. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-avg-bucket-aggregation.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-pipeline-avg-bucket-aggregation.html type AvgBucketAggregation struct { format string gapPolicy string diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_pipeline_bucket_script.go b/vendor/github.com/olivere/elastic/v7/search_aggs_pipeline_bucket_script.go similarity index 98% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_pipeline_bucket_script.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_pipeline_bucket_script.go index 4646ab510c06aeab84e783bd23e5afbd18cd5b70..bc5229b9cfeb1340d5e55cca1992af14af0f5b09 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_pipeline_bucket_script.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_pipeline_bucket_script.go @@ -10,7 +10,7 @@ package elastic // numeric and the script must return a numeric value. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-bucket-script-aggregation.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-pipeline-bucket-script-aggregation.html type BucketScriptAggregation struct { format string gapPolicy string diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_pipeline_bucket_selector.go b/vendor/github.com/olivere/elastic/v7/search_aggs_pipeline_bucket_selector.go similarity index 98% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_pipeline_bucket_selector.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_pipeline_bucket_selector.go index 2ad6d413969fee57685a3a73f1a79f2e4e540850..1051f1ae3147b8d049d24386bd7c3cf85f871afd 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_pipeline_bucket_selector.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_pipeline_bucket_selector.go @@ -12,7 +12,7 @@ package elastic // will be evaluated as false and all other values will evaluate to true. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-bucket-selector-aggregation.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-pipeline-bucket-selector-aggregation.html type BucketSelectorAggregation struct { format string gapPolicy string diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_pipeline_bucket_sort.go b/vendor/github.com/olivere/elastic/v7/search_aggs_pipeline_bucket_sort.go similarity index 98% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_pipeline_bucket_sort.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_pipeline_bucket_sort.go index cd3075f659c1e4bf4a5473ce62468acfd55d17ca..3d060df2b2fe6c57642afbe6c72256e08a588c5e 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_pipeline_bucket_sort.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_pipeline_bucket_sort.go @@ -11,7 +11,7 @@ package elastic // parameters from and size may be set in order to truncate the result buckets. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-bucket-sort-aggregation.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-pipeline-bucket-sort-aggregation.html type BucketSortAggregation struct { sorters []Sorter from int diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_pipeline_cumulative_sum.go b/vendor/github.com/olivere/elastic/v7/search_aggs_pipeline_cumulative_sum.go similarity index 97% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_pipeline_cumulative_sum.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_pipeline_cumulative_sum.go index 18cb5e8a7e2720ed6ebcfa247d8e49fd3357fb4f..1074d86b12ccfdbce41e9d0007a16f3d03ad29c1 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_pipeline_cumulative_sum.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_pipeline_cumulative_sum.go @@ -10,7 +10,7 @@ package elastic // histogram must have min_doc_count set to 0 (default for histogram aggregations). // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-cumulative-sum-aggregation.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-pipeline-cumulative-sum-aggregation.html type CumulativeSumAggregation struct { format string diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_pipeline_derivative.go b/vendor/github.com/olivere/elastic/v7/search_aggs_pipeline_derivative.go similarity index 97% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_pipeline_derivative.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_pipeline_derivative.go index 706be7c8278e99b4339b9475bd28f606d4ee3652..a22219cdf95e0f81f758d2ddb2a73c2903361664 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_pipeline_derivative.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_pipeline_derivative.go @@ -10,7 +10,7 @@ package elastic // histogram must have min_doc_count set to 0 (default for histogram aggregations). // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-derivative-aggregation.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-pipeline-derivative-aggregation.html type DerivativeAggregation struct { format string gapPolicy string diff --git a/vendor/github.com/olivere/elastic/v7/search_aggs_pipeline_extended_stats_bucket.go b/vendor/github.com/olivere/elastic/v7/search_aggs_pipeline_extended_stats_bucket.go new file mode 100644 index 0000000000000000000000000000000000000000..4e816d416e29cfc2b6c2432ec5cf2beee4e06bb5 --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_pipeline_extended_stats_bucket.go @@ -0,0 +1,107 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// ExtendedStatsBucketAggregation is a sibling pipeline aggregation which calculates +// a variety of stats across all bucket of a specified metric in a sibling aggregation. +// The specified metric must be numeric and the sibling aggregation must +// be a multi-bucket aggregation. +// +// This aggregation provides a few more statistics (sum of squares, standard deviation, etc) +// compared to the stats_bucket aggregation. +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-pipeline-extended-stats-bucket-aggregation.html +type ExtendedStatsBucketAggregation struct { + format string + gapPolicy string + sigma *float32 + meta map[string]interface{} + bucketsPaths []string +} + +// NewExtendedStatsBucketAggregation creates and initializes a new ExtendedStatsBucketAggregation. +func NewExtendedStatsBucketAggregation() *ExtendedStatsBucketAggregation { + return &ExtendedStatsBucketAggregation{ + bucketsPaths: make([]string, 0), + } +} + +// Format to use on the output of this aggregation. +func (s *ExtendedStatsBucketAggregation) Format(format string) *ExtendedStatsBucketAggregation { + s.format = format + return s +} + +// GapPolicy defines what should be done when a gap in the series is discovered. +// Valid values include "insert_zeros" or "skip". Default is "insert_zeros". +func (s *ExtendedStatsBucketAggregation) GapPolicy(gapPolicy string) *ExtendedStatsBucketAggregation { + s.gapPolicy = gapPolicy + return s +} + +// GapInsertZeros inserts zeros for gaps in the series. +func (s *ExtendedStatsBucketAggregation) GapInsertZeros() *ExtendedStatsBucketAggregation { + s.gapPolicy = "insert_zeros" + return s +} + +// GapSkip skips gaps in the series. +func (s *ExtendedStatsBucketAggregation) GapSkip() *ExtendedStatsBucketAggregation { + s.gapPolicy = "skip" + return s +} + +// Meta sets the meta data to be included in the aggregation response. +func (s *ExtendedStatsBucketAggregation) Meta(metaData map[string]interface{}) *ExtendedStatsBucketAggregation { + s.meta = metaData + return s +} + +// BucketsPath sets the paths to the buckets to use for this pipeline aggregator. +func (s *ExtendedStatsBucketAggregation) BucketsPath(bucketsPaths ...string) *ExtendedStatsBucketAggregation { + s.bucketsPaths = append(s.bucketsPaths, bucketsPaths...) + return s +} + +// Sigma sets number of standard deviations above/below the mean to display +func (s *ExtendedStatsBucketAggregation) Sigma(sigma float32) *ExtendedStatsBucketAggregation { + s.sigma = &sigma + return s +} + +// Source returns the a JSON-serializable interface. +func (s *ExtendedStatsBucketAggregation) Source() (interface{}, error) { + source := make(map[string]interface{}) + params := make(map[string]interface{}) + source["extended_stats_bucket"] = params + + if s.format != "" { + params["format"] = s.format + } + if s.gapPolicy != "" { + params["gap_policy"] = s.gapPolicy + } + + // Add buckets paths + switch len(s.bucketsPaths) { + case 0: + case 1: + params["buckets_path"] = s.bucketsPaths[0] + default: + params["buckets_path"] = s.bucketsPaths + } + + // Add sigma is not zero or less + if s.sigma != nil && *s.sigma >= 0 { + params["sigma"] = *s.sigma + } + + // Add Meta data if available + if len(s.meta) > 0 { + source["meta"] = s.meta + } + + return source, nil +} diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_pipeline_max_bucket.go b/vendor/github.com/olivere/elastic/v7/search_aggs_pipeline_max_bucket.go similarity index 97% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_pipeline_max_bucket.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_pipeline_max_bucket.go index 42aad230055ddc53b63c8d84e5edd05253f32535..6cd087eeb287aae5ca19c981ef4bd63817664ef1 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_pipeline_max_bucket.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_pipeline_max_bucket.go @@ -11,7 +11,7 @@ package elastic // be a multi-bucket aggregation. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-max-bucket-aggregation.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-pipeline-max-bucket-aggregation.html type MaxBucketAggregation struct { format string gapPolicy string diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_pipeline_min_bucket.go b/vendor/github.com/olivere/elastic/v7/search_aggs_pipeline_min_bucket.go similarity index 97% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_pipeline_min_bucket.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_pipeline_min_bucket.go index 1a3d3d81ae61718f2ebfc24ba0b82b26da2b067e..c87f0d969f8dd3bf1a26aeb4e0e9f5dc1fecad71 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_pipeline_min_bucket.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_pipeline_min_bucket.go @@ -11,7 +11,7 @@ package elastic // be a multi-bucket aggregation. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-min-bucket-aggregation.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-pipeline-min-bucket-aggregation.html type MinBucketAggregation struct { format string gapPolicy string diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_pipeline_mov_avg.go b/vendor/github.com/olivere/elastic/v7/search_aggs_pipeline_mov_avg.go similarity index 93% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_pipeline_mov_avg.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_pipeline_mov_avg.go index f3808128d7d73b2371d8fe8dc8dfd4eaf250f790..035dc0e990f4cd1865fe7f571e604d389f770d2e 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_pipeline_mov_avg.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_pipeline_mov_avg.go @@ -8,7 +8,9 @@ package elastic // across the data and emit the average value of that window. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-movavg-aggregation.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-pipeline-movavg-aggregation.html +// +// Deprecated: The MovAvgAggregation has been deprecated in 6.4.0. Use the more generate MovFnAggregation instead. type MovAvgAggregation struct { format string gapPolicy string @@ -22,6 +24,8 @@ type MovAvgAggregation struct { } // NewMovAvgAggregation creates and initializes a new MovAvgAggregation. +// +// Deprecated: The MovAvgAggregation has been deprecated in 6.4.0. Use the more generate MovFnAggregation instead. func NewMovAvgAggregation() *MovAvgAggregation { return &MovAvgAggregation{ bucketsPaths: make([]string, 0), @@ -143,7 +147,7 @@ func (a *MovAvgAggregation) Source() (interface{}, error) { } // -- Models for moving averages -- -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-movavg-aggregation.html#_models +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-pipeline-movavg-aggregation.html#_models // MovAvgModel specifies the model to use with the MovAvgAggregation. type MovAvgModel interface { @@ -156,7 +160,7 @@ type MovAvgModel interface { // EWMAMovAvgModel calculates an exponentially weighted moving average. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-movavg-aggregation.html#_ewma_exponentially_weighted +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-pipeline-movavg-aggregation.html#_ewma_exponentially_weighted type EWMAMovAvgModel struct { alpha *float64 } @@ -194,7 +198,7 @@ func (m *EWMAMovAvgModel) Settings() map[string]interface{} { // HoltLinearMovAvgModel calculates a doubly exponential weighted moving average. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-movavg-aggregation.html#_holt_linear +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-pipeline-movavg-aggregation.html#_holt_linear type HoltLinearMovAvgModel struct { alpha *float64 beta *float64 @@ -243,7 +247,7 @@ func (m *HoltLinearMovAvgModel) Settings() map[string]interface{} { // HoltWintersMovAvgModel calculates a triple exponential weighted moving average. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-movavg-aggregation.html#_holt_winters +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-pipeline-movavg-aggregation.html#_holt_winters type HoltWintersMovAvgModel struct { alpha *float64 beta *float64 @@ -330,7 +334,7 @@ func (m *HoltWintersMovAvgModel) Settings() map[string]interface{} { // by position in collection. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-movavg-aggregation.html#_linear +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-pipeline-movavg-aggregation.html#_linear type LinearMovAvgModel struct { } @@ -354,7 +358,7 @@ func (m *LinearMovAvgModel) Settings() map[string]interface{} { // SimpleMovAvgModel calculates a simple unweighted (arithmetic) moving average. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-movavg-aggregation.html#_simple +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-pipeline-movavg-aggregation.html#_simple type SimpleMovAvgModel struct { } diff --git a/vendor/github.com/olivere/elastic/v7/search_aggs_pipeline_mov_fn.go b/vendor/github.com/olivere/elastic/v7/search_aggs_pipeline_mov_fn.go new file mode 100644 index 0000000000000000000000000000000000000000..ea8cbdc2f086a7ab167f48ead09a931dc07e3ea4 --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_pipeline_mov_fn.go @@ -0,0 +1,132 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// MovFnAggregation, given an ordered series of data, will slice a window across +// the data and allow the user to specify a custom script that is executed for +// each window of data. +// +// You must pass a script to process the values. There are a number of predefined +// script functions you can use as described here: +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-pipeline-movfn-aggregation.html#_pre_built_functions. +// +// Example: +// agg := elastic.NewMovFnAggregation( +// "the_sum", // bucket path +// elastic.NewScript("MovingFunctions.stdDev(values, MovingFunctions.unweightedAvg(values))"), +// 10, // window size +// ) +// +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-pipeline-movfn-aggregation.html. +type MovFnAggregation struct { + script *Script + format string + gapPolicy string + window int + + meta map[string]interface{} + bucketsPaths []string +} + +// NewMovFnAggregation creates and initializes a new MovFnAggregation. +// +// Deprecated: The MovFnAggregation has been deprecated in 6.4.0. Use the more generate MovFnAggregation instead. +func NewMovFnAggregation(bucketsPath string, script *Script, window int) *MovFnAggregation { + return &MovFnAggregation{ + bucketsPaths: []string{bucketsPath}, + script: script, + window: window, + } +} + +// Script is the script to run. +func (a *MovFnAggregation) Script(script *Script) *MovFnAggregation { + a.script = script + return a +} + +// Format to use on the output of this aggregation. +func (a *MovFnAggregation) Format(format string) *MovFnAggregation { + a.format = format + return a +} + +// GapPolicy defines what should be done when a gap in the series is discovered. +// Valid values include "insert_zeros" or "skip". Default is "insert_zeros". +func (a *MovFnAggregation) GapPolicy(gapPolicy string) *MovFnAggregation { + a.gapPolicy = gapPolicy + return a +} + +// GapInsertZeros inserts zeros for gaps in the series. +func (a *MovFnAggregation) GapInsertZeros() *MovFnAggregation { + a.gapPolicy = "insert_zeros" + return a +} + +// GapSkip skips gaps in the series. +func (a *MovFnAggregation) GapSkip() *MovFnAggregation { + a.gapPolicy = "skip" + return a +} + +// Window sets the window size for this aggregation. +func (a *MovFnAggregation) Window(window int) *MovFnAggregation { + a.window = window + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *MovFnAggregation) Meta(metaData map[string]interface{}) *MovFnAggregation { + a.meta = metaData + return a +} + +// BucketsPath sets the paths to the buckets to use for this pipeline aggregator. +func (a *MovFnAggregation) BucketsPath(bucketsPaths ...string) *MovFnAggregation { + a.bucketsPaths = append(a.bucketsPaths, bucketsPaths...) + return a +} + +// Source returns the a JSON-serializable interface. +func (a *MovFnAggregation) Source() (interface{}, error) { + source := make(map[string]interface{}) + params := make(map[string]interface{}) + source["moving_fn"] = params + + // Add buckets paths + switch len(a.bucketsPaths) { + case 0: + case 1: + params["buckets_path"] = a.bucketsPaths[0] + default: + params["buckets_path"] = a.bucketsPaths + } + + // Script + if a.script != nil { + src, err := a.script.Source() + if err != nil { + return nil, err + } + params["script"] = src + } + + if a.format != "" { + params["format"] = a.format + } + if a.gapPolicy != "" { + params["gap_policy"] = a.gapPolicy + } + params["window"] = a.window + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_pipeline_percentiles_bucket.go b/vendor/github.com/olivere/elastic/v7/search_aggs_pipeline_percentiles_bucket.go similarity index 98% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_pipeline_percentiles_bucket.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_pipeline_percentiles_bucket.go index 671e31e38a97b6c3684fd4391187695c174e7071..a5a3fdf686111cc744722b7484efa9888facb471 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_pipeline_percentiles_bucket.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_pipeline_percentiles_bucket.go @@ -10,7 +10,7 @@ package elastic // be a multi-bucket aggregation. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-percentiles-bucket-aggregation.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-pipeline-percentiles-bucket-aggregation.html type PercentilesBucketAggregation struct { format string gapPolicy string diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_pipeline_serial_diff.go b/vendor/github.com/olivere/elastic/v7/search_aggs_pipeline_serial_diff.go similarity index 97% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_pipeline_serial_diff.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_pipeline_serial_diff.go index 98f84b5870b264cd10002fba3ceaf28ec5bbeaa9..d2a9b4c9d20f6be3aead2d2a2ad36320c4422a18 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_pipeline_serial_diff.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_pipeline_serial_diff.go @@ -9,7 +9,7 @@ package elastic // subtracted from itself at different time lags or periods. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-serialdiff-aggregation.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-pipeline-serialdiff-aggregation.html type SerialDiffAggregation struct { format string gapPolicy string diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_pipeline_stats_bucket.go b/vendor/github.com/olivere/elastic/v7/search_aggs_pipeline_stats_bucket.go similarity index 97% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_pipeline_stats_bucket.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_pipeline_stats_bucket.go index 3f3682e327a0c18dc552bceac696e85e393f3df7..2eb61ebab04c9ac47a35db983617a3bcc24172aa 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_pipeline_stats_bucket.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_pipeline_stats_bucket.go @@ -10,7 +10,7 @@ package elastic // be a multi-bucket aggregation. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-stats-bucket-aggregation.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-pipeline-stats-bucket-aggregation.html type StatsBucketAggregation struct { format string gapPolicy string diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_pipeline_sum_bucket.go b/vendor/github.com/olivere/elastic/v7/search_aggs_pipeline_sum_bucket.go similarity index 97% rename from vendor/gopkg.in/olivere/elastic.v6/search_aggs_pipeline_sum_bucket.go rename to vendor/github.com/olivere/elastic/v7/search_aggs_pipeline_sum_bucket.go index a623ef3177bf15bc734af21ac7f00cf841a6ca74..cfdafce077f9693b68523d8c95ca40ad8bb4ec39 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_aggs_pipeline_sum_bucket.go +++ b/vendor/github.com/olivere/elastic/v7/search_aggs_pipeline_sum_bucket.go @@ -10,7 +10,7 @@ package elastic // be a multi-bucket aggregation. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-sum-bucket-aggregation.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-aggregations-pipeline-sum-bucket-aggregation.html type SumBucketAggregation struct { format string gapPolicy string diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_collapse_builder.go b/vendor/github.com/olivere/elastic/v7/search_collapse_builder.go similarity index 94% rename from vendor/gopkg.in/olivere/elastic.v6/search_collapse_builder.go rename to vendor/github.com/olivere/elastic/v7/search_collapse_builder.go index c2a214bdeb12129602fa278d960c15de23af9f9e..0de4eed616ccb69e3451c34f897be252cfa95127 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_collapse_builder.go +++ b/vendor/github.com/olivere/elastic/v7/search_collapse_builder.go @@ -5,7 +5,7 @@ package elastic // CollapseBuilder enables field collapsing on a search request. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-request-collapse.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-request-collapse.html // for details. type CollapseBuilder struct { field string diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_queries_bool.go b/vendor/github.com/olivere/elastic/v7/search_queries_bool.go similarity index 98% rename from vendor/gopkg.in/olivere/elastic.v6/search_queries_bool.go rename to vendor/github.com/olivere/elastic/v7/search_queries_bool.go index e6b05923948c917afba6814680dfa923cf7c61f9..d192d79ed6b4d2050572da1323d431102015baf8 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_queries_bool.go +++ b/vendor/github.com/olivere/elastic/v7/search_queries_bool.go @@ -9,7 +9,7 @@ import "fmt" // A bool query matches documents matching boolean // combinations of other queries. // For more details, see: -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-bool-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-bool-query.html type BoolQuery struct { Query mustClauses []Query diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_queries_boosting.go b/vendor/github.com/olivere/elastic/v7/search_queries_boosting.go similarity index 97% rename from vendor/gopkg.in/olivere/elastic.v6/search_queries_boosting.go rename to vendor/github.com/olivere/elastic/v7/search_queries_boosting.go index 303bca0ab2144a94333a6868e0beb305b45e8fe2..7a76efbf905fcd859a1509050f5c72c1f5f1c144 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_queries_boosting.go +++ b/vendor/github.com/olivere/elastic/v7/search_queries_boosting.go @@ -7,7 +7,7 @@ package elastic // A boosting query can be used to effectively // demote results that match a given query. // For more details, see: -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-boosting-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-boosting-query.html type BoostingQuery struct { Query positiveClause Query diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_queries_common_terms.go b/vendor/github.com/olivere/elastic/v7/search_queries_common_terms.go similarity index 93% rename from vendor/gopkg.in/olivere/elastic.v6/search_queries_common_terms.go rename to vendor/github.com/olivere/elastic/v7/search_queries_common_terms.go index d19360eb44cfcea8de68b9cc514089045b09543d..a10a213bcb5d1687dd51a04abfe00aefe450f944 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_queries_common_terms.go +++ b/vendor/github.com/olivere/elastic/v7/search_queries_common_terms.go @@ -8,7 +8,11 @@ package elastic // which improves the precision and recall of search results // (by taking stopwords into account), without sacrificing performance. // For more details, see: -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-common-terms-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.4/query-dsl-common-terms-query.html +// +// Deprecated: Use Match query instead (7.3.0+), which skips blocks of +// documents efficiently, without any configuration, provided that the +// total number of hits is not tracked. type CommonTermsQuery struct { Query name string diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_queries_constant_score.go b/vendor/github.com/olivere/elastic/v7/search_queries_constant_score.go similarity index 95% rename from vendor/gopkg.in/olivere/elastic.v6/search_queries_constant_score.go rename to vendor/github.com/olivere/elastic/v7/search_queries_constant_score.go index 088e9b5a3c144112265c83f4902a0d06591a1388..cfa8dff795298e6f568929ce9cbf4cc9137f0904 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_queries_constant_score.go +++ b/vendor/github.com/olivere/elastic/v7/search_queries_constant_score.go @@ -8,7 +8,7 @@ package elastic // a constant score equal to the query boost for every document in the filter. // // For more details, see: -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-constant-score-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-constant-score-query.html type ConstantScoreQuery struct { filter Query boost *float64 diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_queries_dis_max.go b/vendor/github.com/olivere/elastic/v7/search_queries_dis_max.go similarity index 97% rename from vendor/gopkg.in/olivere/elastic.v6/search_queries_dis_max.go rename to vendor/github.com/olivere/elastic/v7/search_queries_dis_max.go index 8082736177f5486db325bb283d3feb6d09748ec9..48376d6dcbf458417554b8bdc485c6d8a5ee98b0 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_queries_dis_max.go +++ b/vendor/github.com/olivere/elastic/v7/search_queries_dis_max.go @@ -10,7 +10,7 @@ package elastic // increment for any additional matching subqueries. // // For more details, see: -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-dis-max-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-dis-max-query.html type DisMaxQuery struct { queries []Query boost *float64 diff --git a/vendor/github.com/olivere/elastic/v7/search_queries_distance_feature_query.go b/vendor/github.com/olivere/elastic/v7/search_queries_distance_feature_query.go new file mode 100644 index 0000000000000000000000000000000000000000..1a8a061c4aaf61555149964487fa92334cc1cb88 --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/search_queries_distance_feature_query.go @@ -0,0 +1,119 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "fmt" +) + +// DistanceFeatureQuery uses a script to provide a custom score for returned documents. +// +// A DistanceFeatureQuery query is useful if, for example, a scoring function is +// expensive and you only need to calculate the score of a filtered set of documents. +// +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/7.4/query-dsl-distance-feature-query.html +type DistanceFeatureQuery struct { + field string + pivot string + origin interface{} + boost *float64 + queryName string +} + +// NewDistanceFeatureQuery creates and initializes a new script_score query. +func NewDistanceFeatureQuery(field string, origin interface{}, pivot string) *DistanceFeatureQuery { + return &DistanceFeatureQuery{ + field: field, + origin: origin, + pivot: pivot, + } +} + +// Field to be used in the DistanceFeatureQuery. +func (q *DistanceFeatureQuery) Field(name string) *DistanceFeatureQuery { + q.field = name + return q +} + +// Origin is the date or point of origin used to calculate distances. +// +// If the field is a date or date_nanos field, the origin value must be a +// date. Date math such as "now-1h" is supported. +// +// If the field is a geo_point field, the origin must be a GeoPoint. +func (q *DistanceFeatureQuery) Origin(origin interface{}) *DistanceFeatureQuery { + q.origin = origin + return q +} + +// Pivot is distance from the origin at which relevance scores +// receive half of the boost value. +// +// If field is a date or date_nanos field, the pivot value must be a time +// unit, such as "1h" or "10d". +// +// If field is a geo_point field, the pivot value must be a distance unit, +// such as "1km" or "12m". You can pass a string, or a GeoPoint. +func (q *DistanceFeatureQuery) Pivot(pivot string) *DistanceFeatureQuery { + q.pivot = pivot + return q +} + +// Boost sets the boost for this query. +func (q *DistanceFeatureQuery) Boost(boost float64) *DistanceFeatureQuery { + q.boost = &boost + return q +} + +// QueryName sets the query name for the filter. +func (q *DistanceFeatureQuery) QueryName(queryName string) *DistanceFeatureQuery { + q.queryName = queryName + return q +} + +// Source returns JSON for the function score query. +func (q *DistanceFeatureQuery) Source() (interface{}, error) { + // { + // "distance_feature" : { + // "field" : "production_date", + // "pivot" : "7d", + // "origin" : "now" + // } + // } + // { + // "distance_feature" : { + // "field" : "location", + // "pivot" : "1000m", + // "origin" : [-71.3, 41.15] + // } + // } + + source := make(map[string]interface{}) + query := make(map[string]interface{}) + source["distance_feature"] = query + + query["field"] = q.field + query["pivot"] = q.pivot + switch v := q.origin.(type) { + default: + return nil, fmt.Errorf("DistanceFeatureQuery: unable to serialize Origin from type %T", v) + case string: + query["origin"] = v + case *GeoPoint: + query["origin"] = v.Source() + case GeoPoint: + query["origin"] = v.Source() + } + + if v := q.boost; v != nil { + query["boost"] = *v + } + if q.queryName != "" { + query["_name"] = q.queryName + } + + return source, nil +} diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_queries_exists.go b/vendor/github.com/olivere/elastic/v7/search_queries_exists.go similarity index 89% rename from vendor/gopkg.in/olivere/elastic.v6/search_queries_exists.go rename to vendor/github.com/olivere/elastic/v7/search_queries_exists.go index 1a6839391591472d184f6fb5b231b5f01139b009..33f15893b84e5c2f48baeee12347a606f4e1b766 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_queries_exists.go +++ b/vendor/github.com/olivere/elastic/v7/search_queries_exists.go @@ -8,13 +8,13 @@ package elastic // has a value in them. // // For more details, see: -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-exists-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-exists-query.html type ExistsQuery struct { name string queryName string } -// NewExistsQuery creates and initializes a new dis max query. +// NewExistsQuery creates and initializes a new exists query. func NewExistsQuery(name string) *ExistsQuery { return &ExistsQuery{ name: name, diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_queries_fsq.go b/vendor/github.com/olivere/elastic/v7/search_queries_fsq.go similarity index 98% rename from vendor/gopkg.in/olivere/elastic.v6/search_queries_fsq.go rename to vendor/github.com/olivere/elastic/v7/search_queries_fsq.go index 5ad4562ed57ba3ca8d527f1f92b7ecb0fdf4f38c..ce00122b7a0d123d4528c0ae97b750ef05b4652e 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_queries_fsq.go +++ b/vendor/github.com/olivere/elastic/v7/search_queries_fsq.go @@ -10,7 +10,7 @@ package elastic // to compute the score on a filtered set of documents. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-function-score-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-function-score-query.html type FunctionScoreQuery struct { query Query filter Query @@ -21,7 +21,6 @@ type FunctionScoreQuery struct { filters []Query scoreFuncs []ScoreFunction minScore *float64 - weight *float64 } // NewFunctionScoreQuery creates and initializes a new function score query. diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_queries_fsq_score_funcs.go b/vendor/github.com/olivere/elastic/v7/search_queries_fsq_score_funcs.go similarity index 91% rename from vendor/gopkg.in/olivere/elastic.v6/search_queries_fsq_score_funcs.go rename to vendor/github.com/olivere/elastic/v7/search_queries_fsq_score_funcs.go index 6e86cb4e5cd10b363c1a500098c230feebc21fa1..b14f3b7cf54a49e9f99b5e66d7e4a93ae238ff30 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_queries_fsq_score_funcs.go +++ b/vendor/github.com/olivere/elastic/v7/search_queries_fsq_score_funcs.go @@ -18,7 +18,7 @@ type ScoreFunction interface { // -- Exponential Decay -- // ExponentialDecayFunction builds an exponential decay score function. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-function-score-query.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-function-score-query.html // for details. type ExponentialDecayFunction struct { fieldName string @@ -75,7 +75,7 @@ func (fn *ExponentialDecayFunction) Offset(offset interface{}) *ExponentialDecay } // Weight adjusts the score of the score function. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-function-score-query.html#_using_function_score +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-function-score-query.html#_using_function_score // for details. func (fn *ExponentialDecayFunction) Weight(weight float64) *ExponentialDecayFunction { fn.weight = &weight @@ -120,7 +120,7 @@ func (fn *ExponentialDecayFunction) Source() (interface{}, error) { // -- Gauss Decay -- // GaussDecayFunction builds a gauss decay score function. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-function-score-query.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-function-score-query.html // for details. type GaussDecayFunction struct { fieldName string @@ -177,7 +177,7 @@ func (fn *GaussDecayFunction) Offset(offset interface{}) *GaussDecayFunction { } // Weight adjusts the score of the score function. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-function-score-query.html#_using_function_score +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-function-score-query.html#_using_function_score // for details. func (fn *GaussDecayFunction) Weight(weight float64) *GaussDecayFunction { fn.weight = &weight @@ -223,7 +223,7 @@ func (fn *GaussDecayFunction) Source() (interface{}, error) { // -- Linear Decay -- // LinearDecayFunction builds a linear decay score function. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-function-score-query.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-function-score-query.html // for details. type LinearDecayFunction struct { fieldName string @@ -280,7 +280,7 @@ func (fn *LinearDecayFunction) Offset(offset interface{}) *LinearDecayFunction { } // Weight adjusts the score of the score function. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-function-score-query.html#_using_function_score +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-function-score-query.html#_using_function_score // for details. func (fn *LinearDecayFunction) Weight(weight float64) *LinearDecayFunction { fn.weight = &weight @@ -336,7 +336,7 @@ func (fn *LinearDecayFunction) Source() (interface{}, error) { // compute or influence the score of documents that match with the inner // query or filter. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-function-score-query.html#_script_score +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-function-score-query.html#_script_score // for details. type ScriptFunction struct { script *Script @@ -363,7 +363,7 @@ func (fn *ScriptFunction) Script(script *Script) *ScriptFunction { } // Weight adjusts the score of the score function. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-function-score-query.html#_using_function_score +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-function-score-query.html#_using_function_score // for details. func (fn *ScriptFunction) Weight(weight float64) *ScriptFunction { fn.weight = &weight @@ -394,7 +394,7 @@ func (fn *ScriptFunction) Source() (interface{}, error) { // FieldValueFactorFunction is a function score function that allows you // to use a field from a document to influence the score. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-function-score-query.html#_field_value_factor. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-function-score-query.html#_field_value_factor. type FieldValueFactorFunction struct { field string factor *float64 @@ -435,7 +435,7 @@ func (fn *FieldValueFactorFunction) Modifier(modifier string) *FieldValueFactorF } // Weight adjusts the score of the score function. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-function-score-query.html#_using_function_score +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-function-score-query.html#_using_function_score // for details. func (fn *FieldValueFactorFunction) Weight(weight float64) *FieldValueFactorFunction { fn.weight = &weight @@ -477,7 +477,7 @@ func (fn *FieldValueFactorFunction) Source() (interface{}, error) { // WeightFactorFunction builds a weight factor function that multiplies // the weight to the score. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-function-score-query.html#_weight +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-function-score-query.html#_weight // for details. type WeightFactorFunction struct { weight float64 @@ -495,7 +495,7 @@ func (fn *WeightFactorFunction) Name() string { } // Weight adjusts the score of the score function. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-function-score-query.html#_using_function_score +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-function-score-query.html#_using_function_score // for details. func (fn *WeightFactorFunction) Weight(weight float64) *WeightFactorFunction { fn.weight = weight @@ -517,7 +517,7 @@ func (fn *WeightFactorFunction) Source() (interface{}, error) { // -- Random -- // RandomFunction builds a random score function. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-function-score-query.html#_random +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-function-score-query.html#_random // for details. type RandomFunction struct { field string @@ -555,7 +555,7 @@ func (fn *RandomFunction) Seed(seed interface{}) *RandomFunction { } // Weight adjusts the score of the score function. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-function-score-query.html#_using_function_score +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-function-score-query.html#_using_function_score // for details. func (fn *RandomFunction) Weight(weight float64) *RandomFunction { fn.weight = &weight diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_queries_fuzzy.go b/vendor/github.com/olivere/elastic/v7/search_queries_fuzzy.go similarity index 97% rename from vendor/gopkg.in/olivere/elastic.v6/search_queries_fuzzy.go rename to vendor/github.com/olivere/elastic/v7/search_queries_fuzzy.go index 68b48c18f1fbcd9df19ba0757b6b071ebb38df9f..a81acfcfdd21d73e63805b2ab2e41c25527ad73a 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_queries_fuzzy.go +++ b/vendor/github.com/olivere/elastic/v7/search_queries_fuzzy.go @@ -8,7 +8,7 @@ package elastic // string fields, and a +/- margin on numeric and date fields. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-fuzzy-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-fuzzy-query.html type FuzzyQuery struct { name string value interface{} diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_queries_geo_bounding_box.go b/vendor/github.com/olivere/elastic/v7/search_queries_geo_bounding_box.go similarity index 98% rename from vendor/gopkg.in/olivere/elastic.v6/search_queries_geo_bounding_box.go rename to vendor/github.com/olivere/elastic/v7/search_queries_geo_bounding_box.go index 1cd6bda7567ab364948ddfe4c91bcbe80de131bf..6345867f698bc5ed33c570cee1e7e13cdb77b2de 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_queries_geo_bounding_box.go +++ b/vendor/github.com/olivere/elastic/v7/search_queries_geo_bounding_box.go @@ -10,7 +10,7 @@ import "errors" // a bounding box. // // For more details, see: -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-geo-bounding-box-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-geo-bounding-box-query.html type GeoBoundingBoxQuery struct { name string top *float64 diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_queries_geo_distance.go b/vendor/github.com/olivere/elastic/v7/search_queries_geo_distance.go similarity index 97% rename from vendor/gopkg.in/olivere/elastic.v6/search_queries_geo_distance.go rename to vendor/github.com/olivere/elastic/v7/search_queries_geo_distance.go index 5c5d5fa2833f260424b09a09d6cad2cc65486b3a..4e6878a4b33ca10dce4f8f2849c9f74e00778971 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_queries_geo_distance.go +++ b/vendor/github.com/olivere/elastic/v7/search_queries_geo_distance.go @@ -8,7 +8,7 @@ package elastic // within a specific distance from a geo point. // // For more details, see: -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-geo-distance-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-geo-distance-query.html type GeoDistanceQuery struct { name string distance string diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_queries_geo_polygon.go b/vendor/github.com/olivere/elastic/v7/search_queries_geo_polygon.go similarity index 96% rename from vendor/gopkg.in/olivere/elastic.v6/search_queries_geo_polygon.go rename to vendor/github.com/olivere/elastic/v7/search_queries_geo_polygon.go index 9f2ed21761f32d713202a931667db3f05a126670..98cd5fe342f460cd41051ce54925245190dd2060 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_queries_geo_polygon.go +++ b/vendor/github.com/olivere/elastic/v7/search_queries_geo_polygon.go @@ -7,7 +7,7 @@ package elastic // GeoPolygonQuery allows to include hits that only fall within a polygon of points. // // For more details, see: -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-geo-polygon-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-geo-polygon-query.html type GeoPolygonQuery struct { name string points []*GeoPoint diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_queries_has_child.go b/vendor/github.com/olivere/elastic/v7/search_queries_has_child.go similarity index 98% rename from vendor/gopkg.in/olivere/elastic.v6/search_queries_has_child.go rename to vendor/github.com/olivere/elastic/v7/search_queries_has_child.go index b6ae5722bf194370e2c15ccb62a3d0339ea32178..d2ce2f9577259a3909b2b66ca1f36ced54068661 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_queries_has_child.go +++ b/vendor/github.com/olivere/elastic/v7/search_queries_has_child.go @@ -8,7 +8,7 @@ package elastic // in parent documents that have child docs matching the query. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-has-child-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-has-child-query.html type HasChildQuery struct { query Query childType string diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_queries_has_parent.go b/vendor/github.com/olivere/elastic/v7/search_queries_has_parent.go similarity index 97% rename from vendor/gopkg.in/olivere/elastic.v6/search_queries_has_parent.go rename to vendor/github.com/olivere/elastic/v7/search_queries_has_parent.go index 79afe32f615a938efa61ad7e4adae48b714710b1..1723f002cc9f3d743c48912fa2b7cff9161ccf56 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_queries_has_parent.go +++ b/vendor/github.com/olivere/elastic/v7/search_queries_has_parent.go @@ -11,7 +11,7 @@ package elastic // same manner as has_child query. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-has-parent-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-has-parent-query.html type HasParentQuery struct { query Query parentType string diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_queries_ids.go b/vendor/github.com/olivere/elastic/v7/search_queries_ids.go similarity index 90% rename from vendor/gopkg.in/olivere/elastic.v6/search_queries_ids.go rename to vendor/github.com/olivere/elastic/v7/search_queries_ids.go index bc5d8ae28116c3ba7346d48a31112e4072f47a8d..5192c53898751b5cb1b2c0d439c99c321560714b 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_queries_ids.go +++ b/vendor/github.com/olivere/elastic/v7/search_queries_ids.go @@ -8,7 +8,7 @@ package elastic // Note, this query uses the _uid field. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-ids-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.6/query-dsl-ids-query.html type IdsQuery struct { types []string values []string @@ -17,6 +17,9 @@ type IdsQuery struct { } // NewIdsQuery creates and initializes a new ids query. +// +// Notice that types are in the process of being removed. +// You should filter on a field instead. func NewIdsQuery(types ...string) *IdsQuery { return &IdsQuery{ types: types, diff --git a/vendor/github.com/olivere/elastic/v7/search_queries_interval.go b/vendor/github.com/olivere/elastic/v7/search_queries_interval.go new file mode 100644 index 0000000000000000000000000000000000000000..d2a9e245761d3092ef459a591178e3a4f4987b0b --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/search_queries_interval.go @@ -0,0 +1,52 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// IntervalQueryRule represents the generic matching interval rule interface. +// Interval Rule is actually just a Query, but may be used only inside +// IntervalQuery. An extra method is added just to shield its +// implementations (*Rule objects) from other query objects. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.5/query-dsl-intervals-query.html +// for details. +type IntervalQueryRule interface { + Query + + // isIntervalQueryRule is never actually called, and is used just for Rule to + // differ from standard Query. + isIntervalQueryRule() bool +} + +// IntervalQuery returns documents based on the order and proximity of matching terms. +// +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/7.5/query-dsl-intervals-query.html +type IntervalQuery struct { + field string + rule IntervalQueryRule +} + +// NewIntervalQuery creates and initializes a new IntervalQuery. +func NewIntervalQuery(field string, rule IntervalQueryRule) *IntervalQuery { + return &IntervalQuery{field: field, rule: rule} +} + +// Source returns JSON for the function score query. +func (q *IntervalQuery) Source() (interface{}, error) { + // { + // "intervals" : { ... } + // } + source := make(map[string]interface{}) + params := make(map[string]interface{}) + source["intervals"] = params + + src, err := q.rule.Source() + if err != nil { + return nil, err + } + params[q.field] = src + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/v7/search_queries_interval_filter.go b/vendor/github.com/olivere/elastic/v7/search_queries_interval_filter.go new file mode 100644 index 0000000000000000000000000000000000000000..d7f0dcade1bcf04fa28eb26c1b325cce289c2287 --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/search_queries_interval_filter.go @@ -0,0 +1,175 @@ +package elastic + +var ( + _ IntervalQueryRule = (*IntervalQueryFilter)(nil) +) + +// IntervalQueryFilter specifies filters used in some +// IntervalQueryRule implementations, e.g. IntervalQueryRuleAllOf. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.5/query-dsl-intervals-query.html#interval_filter +// for details. +type IntervalQueryFilter struct { + after IntervalQueryRule + before IntervalQueryRule + containedBy IntervalQueryRule + containing IntervalQueryRule + overlapping IntervalQueryRule + notContainedBy IntervalQueryRule + notContaining IntervalQueryRule + notOverlapping IntervalQueryRule + script *Script +} + +// NewIntervalQueryFilter initializes and creates a new +// IntervalQueryFilter. +func NewIntervalQueryFilter() *IntervalQueryFilter { + return &IntervalQueryFilter{} +} + +// After specifies the query to be used to return intervals that follow +// an interval from the filter rule. +func (r *IntervalQueryFilter) After(after IntervalQueryRule) *IntervalQueryFilter { + r.after = after + return r +} + +// Before specifies the query to be used to return intervals that occur +// before an interval from the filter rule. +func (r *IntervalQueryFilter) Before(before IntervalQueryRule) *IntervalQueryFilter { + r.before = before + return r +} + +// ContainedBy specifies the query to be used to return intervals contained +// by an interval from the filter rule. +func (r *IntervalQueryFilter) ContainedBy(containedBy IntervalQueryRule) *IntervalQueryFilter { + r.containedBy = containedBy + return r +} + +// Containing specifies the query to be used to return intervals that contain an +// interval from the filter rule. +func (r *IntervalQueryFilter) Containing(containing IntervalQueryRule) *IntervalQueryFilter { + r.containing = containing + return r +} + +// Overlapping specifies the query to be used to return intervals that overlap +// with an interval from the filter rule. +func (r *IntervalQueryFilter) Overlapping(overlapping IntervalQueryRule) *IntervalQueryFilter { + r.overlapping = overlapping + return r +} + +// NotContainedBy specifies the query to be used to return intervals that are NOT +// contained by an interval from the filter rule. +func (r *IntervalQueryFilter) NotContainedBy(notContainedBy IntervalQueryRule) *IntervalQueryFilter { + r.notContainedBy = notContainedBy + return r +} + +// NotContaining specifies the query to be used to return intervals that do NOT +// contain an interval from the filter rule. +func (r *IntervalQueryFilter) NotContaining(notContaining IntervalQueryRule) *IntervalQueryFilter { + r.notContaining = notContaining + return r +} + +// NotOverlapping specifies the query to be used to return intervals that do NOT +// overlap with an interval from the filter rule. +func (r *IntervalQueryFilter) NotOverlapping(notOverlapping IntervalQueryRule) *IntervalQueryFilter { + r.notOverlapping = notOverlapping + return r +} + +// Script allows a script to be used to return matching documents. The script +// must return a boolean value, true or false. +func (r *IntervalQueryFilter) Script(script *Script) *IntervalQueryFilter { + r.script = script + return r +} + +// Source returns JSON for the function score query. +func (r *IntervalQueryFilter) Source() (interface{}, error) { + source := make(map[string]interface{}) + + if r.before != nil { + src, err := r.before.Source() + if err != nil { + return nil, err + } + source["before"] = src + } + + if r.after != nil { + src, err := r.after.Source() + if err != nil { + return nil, err + } + source["after"] = src + } + + if r.containedBy != nil { + src, err := r.containedBy.Source() + if err != nil { + return nil, err + } + source["contained_by"] = src + } + + if r.containing != nil { + src, err := r.containing.Source() + if err != nil { + return nil, err + } + source["containing"] = src + } + + if r.overlapping != nil { + src, err := r.overlapping.Source() + if err != nil { + return nil, err + } + source["overlapping"] = src + } + + if r.notContainedBy != nil { + src, err := r.notContainedBy.Source() + if err != nil { + return nil, err + } + source["not_contained_by"] = src + } + + if r.notContaining != nil { + src, err := r.notContaining.Source() + if err != nil { + return nil, err + } + source["not_containing"] = src + } + + if r.notOverlapping != nil { + src, err := r.notOverlapping.Source() + if err != nil { + return nil, err + } + source["not_overlapping"] = src + } + + if r.script != nil { + src, err := r.script.Source() + if err != nil { + return nil, err + } + source["script"] = src + } + + return source, nil +} + +// isIntervalQueryRule implements the marker interface. +func (r *IntervalQueryFilter) isIntervalQueryRule() bool { + return true +} diff --git a/vendor/github.com/olivere/elastic/v7/search_queries_interval_rules_all_of.go b/vendor/github.com/olivere/elastic/v7/search_queries_interval_rules_all_of.go new file mode 100644 index 0000000000000000000000000000000000000000..99314bb5b84f67af3ef8f7af1207ab2fb5009635 --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/search_queries_interval_rules_all_of.go @@ -0,0 +1,82 @@ +package elastic + +var ( + _ IntervalQueryRule = (*IntervalQueryRuleAllOf)(nil) +) + +// IntervalQueryRuleAllOf is an implementation of IntervalQueryRule. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.5/query-dsl-intervals-query.html#intervals-all_of +// for details. +type IntervalQueryRuleAllOf struct { + intervals []IntervalQueryRule + maxGaps *int + ordered *bool + filter *IntervalQueryFilter +} + +// NewIntervalQueryRuleAllOf initializes and returns a new instance +// of IntervalQueryRuleAllOf. +func NewIntervalQueryRuleAllOf(intervals ...IntervalQueryRule) *IntervalQueryRuleAllOf { + return &IntervalQueryRuleAllOf{intervals: intervals} +} + +// MaxGaps specifies the maximum number of positions between the matching +// terms. Terms further apart than this are considered matches. Defaults to -1. +func (r *IntervalQueryRuleAllOf) MaxGaps(maxGaps int) *IntervalQueryRuleAllOf { + r.maxGaps = &maxGaps + return r +} + +// Ordered, if true, indicates that matching terms must appear in their specified +// order. Defaults to false. +func (r *IntervalQueryRuleAllOf) Ordered(ordered bool) *IntervalQueryRuleAllOf { + r.ordered = &ordered + return r +} + +// Filter adds an additional interval filter. +func (r *IntervalQueryRuleAllOf) Filter(filter *IntervalQueryFilter) *IntervalQueryRuleAllOf { + r.filter = filter + return r +} + +// Source returns JSON for the function score query. +func (r *IntervalQueryRuleAllOf) Source() (interface{}, error) { + source := make(map[string]interface{}) + + intervalSources := make([]interface{}, 0) + for _, interval := range r.intervals { + src, err := interval.Source() + if err != nil { + return nil, err + } + + intervalSources = append(intervalSources, src) + } + source["intervals"] = intervalSources + + if r.ordered != nil { + source["ordered"] = *r.ordered + } + if r.maxGaps != nil { + source["max_gaps"] = *r.maxGaps + } + if r.filter != nil { + src, err := r.filter.Source() + if err != nil { + return nil, err + } + + source["filter"] = src + } + + return map[string]interface{}{ + "all_of": source, + }, nil +} + +// isIntervalQueryRule implements the marker interface. +func (r *IntervalQueryRuleAllOf) isIntervalQueryRule() bool { + return true +} diff --git a/vendor/github.com/olivere/elastic/v7/search_queries_interval_rules_any_of.go b/vendor/github.com/olivere/elastic/v7/search_queries_interval_rules_any_of.go new file mode 100644 index 0000000000000000000000000000000000000000..10092478c929ab8bdc442c3f2e9ebd66d0accb76 --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/search_queries_interval_rules_any_of.go @@ -0,0 +1,60 @@ +package elastic + +var ( + _ IntervalQueryRule = (*IntervalQueryRuleAnyOf)(nil) +) + +// IntervalQueryRuleAnyOf is an implementation of IntervalQueryRule. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.5/query-dsl-intervals-query.html#intervals-any_of +// for details. +type IntervalQueryRuleAnyOf struct { + intervals []IntervalQueryRule + filter *IntervalQueryFilter +} + +// NewIntervalQueryRuleAnyOf initializes and returns a new instance +// of IntervalQueryRuleAnyOf. +func NewIntervalQueryRuleAnyOf(intervals ...IntervalQueryRule) *IntervalQueryRuleAnyOf { + return &IntervalQueryRuleAnyOf{intervals: intervals} +} + +// Filter adds an additional interval filter. +func (r *IntervalQueryRuleAnyOf) Filter(filter *IntervalQueryFilter) *IntervalQueryRuleAnyOf { + r.filter = filter + return r +} + +// Source returns JSON for the function score query. +func (r *IntervalQueryRuleAnyOf) Source() (interface{}, error) { + source := make(map[string]interface{}) + + var intervalSources []interface{} + for _, interval := range r.intervals { + src, err := interval.Source() + if err != nil { + return nil, err + } + + intervalSources = append(intervalSources, src) + } + source["intervals"] = intervalSources + + if r.filter != nil { + src, err := r.filter.Source() + if err != nil { + return nil, err + } + + source["filter"] = src + } + + return map[string]interface{}{ + "any_of": source, + }, nil +} + +// isIntervalQueryRule implements the marker interface. +func (r *IntervalQueryRuleAnyOf) isIntervalQueryRule() bool { + return true +} diff --git a/vendor/github.com/olivere/elastic/v7/search_queries_interval_rules_match.go b/vendor/github.com/olivere/elastic/v7/search_queries_interval_rules_match.go new file mode 100644 index 0000000000000000000000000000000000000000..be07ca26fd0e12ab1b8dfb39733b822efa214c8c --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/search_queries_interval_rules_match.go @@ -0,0 +1,94 @@ +package elastic + +var ( + _ IntervalQueryRule = (*IntervalQueryRuleMatch)(nil) +) + +// IntervalQueryRuleMatch is an implementation of IntervalQueryRule. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.5/query-dsl-intervals-query.html#intervals-match +// for details. +type IntervalQueryRuleMatch struct { + query string + maxGaps *int + ordered *bool + analyzer string + useField string + filter *IntervalQueryFilter +} + +// NewIntervalQueryRuleMatch initializes and returns a new instance +// of IntervalQueryRuleMatch. +func NewIntervalQueryRuleMatch(query string) *IntervalQueryRuleMatch { + return &IntervalQueryRuleMatch{query: query} +} + +// MaxGaps specifies the maximum number of positions between the matching +// terms. Terms further apart than this are considered matches. Defaults to -1. +func (r *IntervalQueryRuleMatch) MaxGaps(maxGaps int) *IntervalQueryRuleMatch { + r.maxGaps = &maxGaps + return r +} + +// Ordered, if true, indicates that matching terms must appear in their specified +// order. Defaults to false. +func (r *IntervalQueryRuleMatch) Ordered(ordered bool) *IntervalQueryRuleMatch { + r.ordered = &ordered + return r +} + +// Analyzer specifies the analyzer used to analyze terms in the query. +func (r *IntervalQueryRuleMatch) Analyzer(analyzer string) *IntervalQueryRuleMatch { + r.analyzer = analyzer + return r +} + +// UseField, if specified, matches the intervals from this field rather than +// the top-level field. +func (r *IntervalQueryRuleMatch) UseField(useField string) *IntervalQueryRuleMatch { + r.useField = useField + return r +} + +// Filter adds an additional interval filter. +func (r *IntervalQueryRuleMatch) Filter(filter *IntervalQueryFilter) *IntervalQueryRuleMatch { + r.filter = filter + return r +} + +// Source returns JSON for the function score query. +func (r *IntervalQueryRuleMatch) Source() (interface{}, error) { + source := make(map[string]interface{}) + + source["query"] = r.query + + if r.ordered != nil { + source["ordered"] = *r.ordered + } + if r.maxGaps != nil { + source["max_gaps"] = *r.maxGaps + } + if r.analyzer != "" { + source["analyzer"] = r.analyzer + } + if r.useField != "" { + source["use_field"] = r.useField + } + if r.filter != nil { + filterRuleSource, err := r.filter.Source() + if err != nil { + return nil, err + } + + source["filter"] = filterRuleSource + } + + return map[string]interface{}{ + "match": source, + }, nil +} + +// isIntervalQueryRule implements the marker interface. +func (r *IntervalQueryRuleMatch) isIntervalQueryRule() bool { + return true +} diff --git a/vendor/github.com/olivere/elastic/v7/search_queries_interval_rules_prefix.go b/vendor/github.com/olivere/elastic/v7/search_queries_interval_rules_prefix.go new file mode 100644 index 0000000000000000000000000000000000000000..7eea791893817ff2a085671890ba6c95c0e0a74b --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/search_queries_interval_rules_prefix.go @@ -0,0 +1,57 @@ +package elastic + +var ( + _ IntervalQueryRule = (*IntervalQueryRulePrefix)(nil) +) + +// IntervalQueryRulePrefix is an implementation of IntervalQueryRule. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.5/query-dsl-intervals-query.html#intervals-prefix +// for details. +type IntervalQueryRulePrefix struct { + prefix string + analyzer string + useField string +} + +// NewIntervalQueryRulePrefix initializes and returns a new instance +// of IntervalQueryRulePrefix. +func NewIntervalQueryRulePrefix(prefix string) *IntervalQueryRulePrefix { + return &IntervalQueryRulePrefix{prefix: prefix} +} + +// Analyzer specifies the analyzer used to analyze terms in the query. +func (r *IntervalQueryRulePrefix) Analyzer(analyzer string) *IntervalQueryRulePrefix { + r.analyzer = analyzer + return r +} + +// UseField, if specified, matches the intervals from this field rather than +// the top-level field. +func (r *IntervalQueryRulePrefix) UseField(useField string) *IntervalQueryRulePrefix { + r.useField = useField + return r +} + +// Source returns JSON for the function score query. +func (r *IntervalQueryRulePrefix) Source() (interface{}, error) { + source := make(map[string]interface{}) + + source["query"] = r.prefix + + if r.analyzer != "" { + source["analyzer"] = r.analyzer + } + if r.useField != "" { + source["use_field"] = r.useField + } + + return map[string]interface{}{ + "prefix": source, + }, nil +} + +// isIntervalQueryRule implements the marker interface. +func (r *IntervalQueryRulePrefix) isIntervalQueryRule() bool { + return true +} diff --git a/vendor/github.com/olivere/elastic/v7/search_queries_interval_rules_wildcard.go b/vendor/github.com/olivere/elastic/v7/search_queries_interval_rules_wildcard.go new file mode 100644 index 0000000000000000000000000000000000000000..8978852574cdfb702ea4a9fbfa483812b36e1096 --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/search_queries_interval_rules_wildcard.go @@ -0,0 +1,57 @@ +package elastic + +var ( + _ IntervalQueryRule = (*IntervalQueryRuleWildcard)(nil) +) + +// IntervalQueryRuleWildcard is an implementation of IntervalQueryRule. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.5/query-dsl-intervals-query.html#intervals-wildcard +// for details. +type IntervalQueryRuleWildcard struct { + pattern string + analyzer string + useField string +} + +// NewIntervalQueryRuleWildcard initializes and returns a new instance +// of IntervalQueryRuleWildcard. +func NewIntervalQueryRuleWildcard(pattern string) *IntervalQueryRuleWildcard { + return &IntervalQueryRuleWildcard{pattern: pattern} +} + +// Analyzer specifies the analyzer used to analyze terms in the query. +func (r *IntervalQueryRuleWildcard) Analyzer(analyzer string) *IntervalQueryRuleWildcard { + r.analyzer = analyzer + return r +} + +// UseField, if specified, matches the intervals from this field rather than +// the top-level field. +func (r *IntervalQueryRuleWildcard) UseField(useField string) *IntervalQueryRuleWildcard { + r.useField = useField + return r +} + +// Source returns JSON for the function score query. +func (r *IntervalQueryRuleWildcard) Source() (interface{}, error) { + source := make(map[string]interface{}) + + source["pattern"] = r.pattern + + if r.analyzer != "" { + source["analyzer"] = r.analyzer + } + if r.useField != "" { + source["use_field"] = r.useField + } + + return map[string]interface{}{ + "wildcard": source, + }, nil +} + +// isIntervalQueryRule implements the marker interface. +func (r *IntervalQueryRuleWildcard) isIntervalQueryRule() bool { + return true +} diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_queries_match.go b/vendor/github.com/olivere/elastic/v7/search_queries_match.go similarity index 98% rename from vendor/gopkg.in/olivere/elastic.v6/search_queries_match.go rename to vendor/github.com/olivere/elastic/v7/search_queries_match.go index 875e259e187bf3d5877f5f9234961196d1a8899c..fce10781a957b05386ddf30548919ab2882beaf5 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_queries_match.go +++ b/vendor/github.com/olivere/elastic/v7/search_queries_match.go @@ -12,7 +12,7 @@ package elastic // or use one of the shortcuts e.g. NewMatchPhraseQuery(...). // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-match-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-match-query.html type MatchQuery struct { name string text interface{} @@ -176,7 +176,7 @@ func (q *MatchQuery) Source() (interface{}, error) { query["zero_terms_query"] = q.zeroTermsQuery } if q.cutoffFrequency != nil { - query["cutoff_frequency"] = q.cutoffFrequency + query["cutoff_frequency"] = *q.cutoffFrequency } if q.boost != nil { query["boost"] = *q.boost diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_queries_match_all.go b/vendor/github.com/olivere/elastic/v7/search_queries_match_all.go similarity index 95% rename from vendor/gopkg.in/olivere/elastic.v6/search_queries_match_all.go rename to vendor/github.com/olivere/elastic/v7/search_queries_match_all.go index d43e857a2a2791fc6e3fd29037640db74481face..921ead5859a168ea612b91c91262728f24796421 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_queries_match_all.go +++ b/vendor/github.com/olivere/elastic/v7/search_queries_match_all.go @@ -8,7 +8,7 @@ package elastic // giving them all a _score of 1.0. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-match-all-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-match-all-query.html type MatchAllQuery struct { boost *float64 queryName string diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_queries_match_none.go b/vendor/github.com/olivere/elastic/v7/search_queries_match_none.go similarity index 93% rename from vendor/gopkg.in/olivere/elastic.v6/search_queries_match_none.go rename to vendor/github.com/olivere/elastic/v7/search_queries_match_none.go index 6d675c1a75d02233e8315e1b9209e3d24309da4a..a1d1f87b5672be220392f0d384b5da37f47aff51 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_queries_match_none.go +++ b/vendor/github.com/olivere/elastic/v7/search_queries_match_none.go @@ -8,7 +8,7 @@ package elastic // MatchAllQuery. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-match-all-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-match-all-query.html type MatchNoneQuery struct { queryName string } diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_queries_match_phrase.go b/vendor/github.com/olivere/elastic/v7/search_queries_match_phrase.go similarity index 97% rename from vendor/gopkg.in/olivere/elastic.v6/search_queries_match_phrase.go rename to vendor/github.com/olivere/elastic/v7/search_queries_match_phrase.go index 58c3c0727dd2252388a40ff6903e857ec08e3cff..974a49acbc908738732d685460d94c718903ad97 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_queries_match_phrase.go +++ b/vendor/github.com/olivere/elastic/v7/search_queries_match_phrase.go @@ -8,7 +8,7 @@ package elastic // the analyzed text. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-match-query-phrase.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-match-query-phrase.html type MatchPhraseQuery struct { name string value interface{} diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_queries_match_phrase_prefix.go b/vendor/github.com/olivere/elastic/v7/search_queries_match_phrase_prefix.go similarity index 97% rename from vendor/gopkg.in/olivere/elastic.v6/search_queries_match_phrase_prefix.go rename to vendor/github.com/olivere/elastic/v7/search_queries_match_phrase_prefix.go index 93a28ccbfdc120006f02a24335f6110f06b83c06..fb366d31d79d69fd0416fb721432ee91e52768ac 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_queries_match_phrase_prefix.go +++ b/vendor/github.com/olivere/elastic/v7/search_queries_match_phrase_prefix.go @@ -8,7 +8,7 @@ package elastic // prefix matches on the last term in the text. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-match-query-phrase-prefix.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-match-query-phrase-prefix.html type MatchPhrasePrefixQuery struct { name string value interface{} diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_queries_more_like_this.go b/vendor/github.com/olivere/elastic/v7/search_queries_more_like_this.go similarity index 98% rename from vendor/gopkg.in/olivere/elastic.v6/search_queries_more_like_this.go rename to vendor/github.com/olivere/elastic/v7/search_queries_more_like_this.go index 1a904eef83ba155c3667c1740cf651642dec8b11..0ee389b9bcc8122bd0770e884081fd742f251739 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_queries_more_like_this.go +++ b/vendor/github.com/olivere/elastic/v7/search_queries_more_like_this.go @@ -13,7 +13,7 @@ import "errors" // how the terms should be selected and how the query is formed. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-mlt-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-mlt-query.html type MoreLikeThisQuery struct { fields []string docs []*MoreLikeThisQueryItem @@ -320,6 +320,8 @@ func (item *MoreLikeThisQueryItem) Index(index string) *MoreLikeThisQueryItem { } // Type represents the document type of the item. +// +// Deprecated: Types are in the process of being removed. func (item *MoreLikeThisQueryItem) Type(typ string) *MoreLikeThisQueryItem { item.typ = typ return item @@ -392,7 +394,7 @@ func (item *MoreLikeThisQueryItem) Source() (interface{}, error) { source["fields"] = item.fields } if item.routing != "" { - source["_routing"] = item.routing + source["routing"] = item.routing } if item.fsc != nil { src, err := item.fsc.Source() diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_queries_multi_match.go b/vendor/github.com/olivere/elastic/v7/search_queries_multi_match.go similarity index 97% rename from vendor/gopkg.in/olivere/elastic.v6/search_queries_multi_match.go rename to vendor/github.com/olivere/elastic/v7/search_queries_multi_match.go index 1a8df170a403452a6f86d2a8587c825a35560715..48c5f284fd6efe521b126aab28f9cbf4e31b9651 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_queries_multi_match.go +++ b/vendor/github.com/olivere/elastic/v7/search_queries_multi_match.go @@ -12,7 +12,7 @@ import ( // MultiMatchQuery builds on the MatchQuery to allow multi-field queries. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-multi-match-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-multi-match-query.html type MultiMatchQuery struct { text interface{} fields []string @@ -60,7 +60,7 @@ func (q *MultiMatchQuery) FieldWithBoost(field string, boost float64) *MultiMatc } // Type can be "best_fields", "boolean", "most_fields", "cross_fields", -// "phrase", or "phrase_prefix". +// "phrase", "phrase_prefix" or "bool_prefix" func (q *MultiMatchQuery) Type(typ string) *MultiMatchQuery { var zero = float64(0.0) var one = float64(1.0) @@ -81,6 +81,9 @@ func (q *MultiMatchQuery) Type(typ string) *MultiMatchQuery { case "phrase_prefix": q.typ = "phrase_prefix" q.tieBreaker = &zero + case "bool_prefix": + q.typ = "bool_prefix" + q.tieBreaker = &zero } return q } diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_queries_nested.go b/vendor/github.com/olivere/elastic/v7/search_queries_nested.go similarity index 97% rename from vendor/gopkg.in/olivere/elastic.v6/search_queries_nested.go rename to vendor/github.com/olivere/elastic/v7/search_queries_nested.go index cdd3f8b04da9e1968cdcaefd63987e0348426951..211649d018c1b12f2553abdb57c3ccb2986d4aab 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_queries_nested.go +++ b/vendor/github.com/olivere/elastic/v7/search_queries_nested.go @@ -10,7 +10,7 @@ package elastic // root parent doc (or parent nested mapping). // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-nested-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-nested-query.html type NestedQuery struct { query Query path string diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_queries_parent_id.go b/vendor/github.com/olivere/elastic/v7/search_queries_parent_id.go similarity index 97% rename from vendor/gopkg.in/olivere/elastic.v6/search_queries_parent_id.go rename to vendor/github.com/olivere/elastic/v7/search_queries_parent_id.go index b015d36923bb6ef48682deebee4931c21c31d7fc..46a499915c1e9976c9afd2e7c2132f74a8738371 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_queries_parent_id.go +++ b/vendor/github.com/olivere/elastic/v7/search_queries_parent_id.go @@ -8,7 +8,7 @@ package elastic // particular parent. Given the following mapping definition. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-parent-id-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-parent-id-query.html type ParentIdQuery struct { typ string id string diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_queries_percolator.go b/vendor/github.com/olivere/elastic/v7/search_queries_percolator.go similarity index 69% rename from vendor/gopkg.in/olivere/elastic.v6/search_queries_percolator.go rename to vendor/github.com/olivere/elastic/v7/search_queries_percolator.go index a6c53f428001b34436a3fd8ff7cea103a7e6f7d0..5a459d051f936beb4c9f68e425b9974be9e4728a 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_queries_percolator.go +++ b/vendor/github.com/olivere/elastic/v7/search_queries_percolator.go @@ -9,11 +9,12 @@ import "errors" // PercolatorQuery can be used to match queries stored in an index. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-percolate-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-percolate-query.html type PercolatorQuery struct { field string + name string documentType string // deprecated - document interface{} + documents []interface{} indexedDocumentIndex string indexedDocumentType string indexedDocumentId string @@ -32,14 +33,21 @@ func (q *PercolatorQuery) Field(field string) *PercolatorQuery { return q } +// Name used for identification purposes in "_percolator_document_slot" response +// field when multiple percolate queries have been specified in the main query. +func (q *PercolatorQuery) Name(name string) *PercolatorQuery { + q.name = name + return q +} + // Deprecated: DocumentType is deprecated as of 6.0. func (q *PercolatorQuery) DocumentType(typ string) *PercolatorQuery { q.documentType = typ return q } -func (q *PercolatorQuery) Document(doc interface{}) *PercolatorQuery { - q.document = doc +func (q *PercolatorQuery) Document(docs ...interface{}) *PercolatorQuery { + q.documents = append(q.documents, docs...) return q } @@ -78,9 +86,6 @@ func (q *PercolatorQuery) Source() (interface{}, error) { if len(q.field) == 0 { return nil, errors.New("elastic: Field is required in PercolatorQuery") } - if q.document == nil { - return nil, errors.New("elastic: Document is required in PercolatorQuery") - } // { // "percolate" : { ... } @@ -92,24 +97,35 @@ func (q *PercolatorQuery) Source() (interface{}, error) { if q.documentType != "" { params["document_type"] = q.documentType } - params["document"] = q.document - if len(q.indexedDocumentIndex) > 0 { - params["index"] = q.indexedDocumentIndex + if q.name != "" { + params["name"] = q.name + } + + switch len(q.documents) { + case 0: + case 1: + params["document"] = q.documents[0] + default: + params["documents"] = q.documents + } + + if s := q.indexedDocumentIndex; s != "" { + params["index"] = s } - if len(q.indexedDocumentType) > 0 { - params["type"] = q.indexedDocumentType + if s := q.indexedDocumentType; s != "" { + params["type"] = s } - if len(q.indexedDocumentId) > 0 { - params["id"] = q.indexedDocumentId + if s := q.indexedDocumentId; s != "" { + params["id"] = s } - if len(q.indexedDocumentRouting) > 0 { - params["routing"] = q.indexedDocumentRouting + if s := q.indexedDocumentRouting; s != "" { + params["routing"] = s } - if len(q.indexedDocumentPreference) > 0 { - params["preference"] = q.indexedDocumentPreference + if s := q.indexedDocumentPreference; s != "" { + params["preference"] = s } - if q.indexedDocumentVersion != nil { - params["version"] = *q.indexedDocumentVersion + if v := q.indexedDocumentVersion; v != nil { + params["version"] = *v } return source, nil } diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_queries_prefix.go b/vendor/github.com/olivere/elastic/v7/search_queries_prefix.go similarity index 96% rename from vendor/gopkg.in/olivere/elastic.v6/search_queries_prefix.go rename to vendor/github.com/olivere/elastic/v7/search_queries_prefix.go index 713bcecf83ceffa3631b02ea03525e10a366c609..8178aac3f45441dd641ef87f6d0d339ad736f69e 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_queries_prefix.go +++ b/vendor/github.com/olivere/elastic/v7/search_queries_prefix.go @@ -8,7 +8,7 @@ package elastic // with a specified prefix (not analyzed). // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-prefix-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-prefix-query.html type PrefixQuery struct { name string prefix string diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_queries_query_string.go b/vendor/github.com/olivere/elastic/v7/search_queries_query_string.go similarity index 99% rename from vendor/gopkg.in/olivere/elastic.v6/search_queries_query_string.go rename to vendor/github.com/olivere/elastic/v7/search_queries_query_string.go index 485930d4cfbd9e8fce98cf0aeacf4e9459b28e00..f9baa21d7a30b76a627b8257c2d4195c7b74cda5 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_queries_query_string.go +++ b/vendor/github.com/olivere/elastic/v7/search_queries_query_string.go @@ -11,7 +11,7 @@ import ( // QueryStringQuery uses the query parser in order to parse its content. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-query-string-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-query-string-query.html type QueryStringQuery struct { queryString string defaultField string diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_queries_range.go b/vendor/github.com/olivere/elastic/v7/search_queries_range.go similarity index 98% rename from vendor/gopkg.in/olivere/elastic.v6/search_queries_range.go rename to vendor/github.com/olivere/elastic/v7/search_queries_range.go index 5ab4636003d2b11eb2efa8aedceca4f1f259ffa9..e3c07308b5bdccd0dba424f2885d7510c78d1044 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_queries_range.go +++ b/vendor/github.com/olivere/elastic/v7/search_queries_range.go @@ -7,7 +7,7 @@ package elastic // RangeQuery matches documents with fields that have terms within a certain range. // // For details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-range-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-range-query.html type RangeQuery struct { name string from interface{} diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_queries_raw_string.go b/vendor/github.com/olivere/elastic/v7/search_queries_raw_string.go similarity index 100% rename from vendor/gopkg.in/olivere/elastic.v6/search_queries_raw_string.go rename to vendor/github.com/olivere/elastic/v7/search_queries_raw_string.go diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_queries_regexp.go b/vendor/github.com/olivere/elastic/v7/search_queries_regexp.go similarity index 97% rename from vendor/gopkg.in/olivere/elastic.v6/search_queries_regexp.go rename to vendor/github.com/olivere/elastic/v7/search_queries_regexp.go index f9234de143b5a8eafd33a8a76ddd69580c52b1c1..25a0c3d02855fd6099c9baa21c63e410e1161e8e 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_queries_regexp.go +++ b/vendor/github.com/olivere/elastic/v7/search_queries_regexp.go @@ -7,7 +7,7 @@ package elastic // RegexpQuery allows you to use regular expression term queries. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-regexp-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-regexp-query.html type RegexpQuery struct { name string regexp string diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_queries_script.go b/vendor/github.com/olivere/elastic/v7/search_queries_script.go similarity index 95% rename from vendor/gopkg.in/olivere/elastic.v6/search_queries_script.go rename to vendor/github.com/olivere/elastic/v7/search_queries_script.go index b75e3181e1d74ec0296096f40d6a08c532460053..d99b0c0533e686538bf669319799093bbde28c63 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_queries_script.go +++ b/vendor/github.com/olivere/elastic/v7/search_queries_script.go @@ -9,7 +9,7 @@ import "errors" // ScriptQuery allows to define scripts as filters. // // For details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-script-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-script-query.html type ScriptQuery struct { script *Script queryName string diff --git a/vendor/github.com/olivere/elastic/v7/search_queries_script_score.go b/vendor/github.com/olivere/elastic/v7/search_queries_script_score.go new file mode 100644 index 0000000000000000000000000000000000000000..7f00e0fe35d8506e2644e0e7b480149e99174b27 --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/search_queries_script_score.go @@ -0,0 +1,110 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import "errors" + +// ScriptScoreQuery uses a script to provide a custom score for returned documents. +// +// A ScriptScoreQuery query is useful if, for example, a scoring function is +// expensive and you only need to calculate the score of a filtered set of documents. +// +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/7.4/query-dsl-script-score-query.html +type ScriptScoreQuery struct { + query Query + script *Script + minScore *float64 + boost *float64 + queryName string +} + +// NewScriptScoreQuery creates and initializes a new script_score query. +func NewScriptScoreQuery(query Query, script *Script) *ScriptScoreQuery { + return &ScriptScoreQuery{ + query: query, + script: script, + } +} + +// Query to be used in the ScriptScoreQuery. +func (q *ScriptScoreQuery) Query(query Query) *ScriptScoreQuery { + q.query = query + return q +} + +// Script to calculate the score. +func (q *ScriptScoreQuery) Script(script *Script) *ScriptScoreQuery { + q.script = script + return q +} + +// MinScore sets the minimum score. +func (q *ScriptScoreQuery) MinScore(minScore float64) *ScriptScoreQuery { + q.minScore = &minScore + return q +} + +// Boost sets the boost for this query. +func (q *ScriptScoreQuery) Boost(boost float64) *ScriptScoreQuery { + q.boost = &boost + return q +} + +// QueryName sets the query name for the filter. +func (q *ScriptScoreQuery) QueryName(queryName string) *ScriptScoreQuery { + q.queryName = queryName + return q +} + +// Source returns JSON for the function score query. +func (q *ScriptScoreQuery) Source() (interface{}, error) { + // { + // "script_score" : { + // "query" : { + // "match" : { "message": "elasticsearch" } + // }, + // "script" : { + // "source" : "doc['likes'].value / 10" + // } + // } + // } + + source := make(map[string]interface{}) + query := make(map[string]interface{}) + source["script_score"] = query + + if q.query == nil { + return nil, errors.New("ScriptScoreQuery: Query is missing") + } + if q.script == nil { + return nil, errors.New("ScriptScoreQuery: Script is missing") + } + + if src, err := q.query.Source(); err != nil { + return nil, err + } else { + query["query"] = src + } + + if src, err := q.script.Source(); err != nil { + return nil, err + } else { + query["script"] = src + } + + if v := q.minScore; v != nil { + query["min_score"] = *v + } + + if v := q.boost; v != nil { + query["boost"] = *v + } + if q.queryName != "" { + query["_name"] = q.queryName + } + + return source, nil +} diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_queries_simple_query_string.go b/vendor/github.com/olivere/elastic/v7/search_queries_simple_query_string.go similarity index 99% rename from vendor/gopkg.in/olivere/elastic.v6/search_queries_simple_query_string.go rename to vendor/github.com/olivere/elastic/v7/search_queries_simple_query_string.go index 0ec8c4acbb9b27388ba153166020514cae91125c..230e041e61617d80109e3f9f0f92015339006530 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_queries_simple_query_string.go +++ b/vendor/github.com/olivere/elastic/v7/search_queries_simple_query_string.go @@ -15,7 +15,7 @@ import ( // and discards invalid parts of the query. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-simple-query-string-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-simple-query-string-query.html type SimpleQueryStringQuery struct { queryText string analyzer string diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_queries_slice.go b/vendor/github.com/olivere/elastic/v7/search_queries_slice.go similarity index 91% rename from vendor/gopkg.in/olivere/elastic.v6/search_queries_slice.go rename to vendor/github.com/olivere/elastic/v7/search_queries_slice.go index 0f58fb5c4151ee8666d9fc33d523ea826a5e3279..0eac78436dc51856d9d6e309e964aa1dfccdb79b 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_queries_slice.go +++ b/vendor/github.com/olivere/elastic/v7/search_queries_slice.go @@ -6,7 +6,7 @@ package elastic // SliceQuery allows to partition the documents into several slices. // It is used e.g. to slice scroll operations in Elasticsearch 5.0 or later. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-request-scroll.html#sliced-scroll +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-request-scroll.html#sliced-scroll // for details. type SliceQuery struct { field string diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_queries_term.go b/vendor/github.com/olivere/elastic/v7/search_queries_term.go similarity index 95% rename from vendor/gopkg.in/olivere/elastic.v6/search_queries_term.go rename to vendor/github.com/olivere/elastic/v7/search_queries_term.go index d495fdae8011e86eab1aaa0df156e6c0d215b248..832e67e5e2b0a32dffb2d445205b9f0adc6bfabd 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_queries_term.go +++ b/vendor/github.com/olivere/elastic/v7/search_queries_term.go @@ -8,7 +8,7 @@ package elastic // in the inverted index. // // For details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-term-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-term-query.html type TermQuery struct { name string value interface{} diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_queries_terms.go b/vendor/github.com/olivere/elastic/v7/search_queries_terms.go similarity index 96% rename from vendor/gopkg.in/olivere/elastic.v6/search_queries_terms.go rename to vendor/github.com/olivere/elastic/v7/search_queries_terms.go index aaa47e8a9c75f57e015bba58fab4c5caa2246356..b8171cdb850a8d73652c6e31f954c9d215fb2a1d 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_queries_terms.go +++ b/vendor/github.com/olivere/elastic/v7/search_queries_terms.go @@ -8,7 +8,7 @@ package elastic // of the provided terms (not analyzed). // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-terms-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-terms-query.html type TermsQuery struct { name string values []interface{} diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_queries_terms_set.go b/vendor/github.com/olivere/elastic/v7/search_queries_terms_set.go similarity index 96% rename from vendor/gopkg.in/olivere/elastic.v6/search_queries_terms_set.go rename to vendor/github.com/olivere/elastic/v7/search_queries_terms_set.go index 22afcb8ddd6e5ebfa49060c6358521b63c5bfa3d..6a33a2a346ec6d5cd8227777d80445de72a8f3f2 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_queries_terms_set.go +++ b/vendor/github.com/olivere/elastic/v7/search_queries_terms_set.go @@ -12,7 +12,7 @@ package elastic // minimum should match script. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-terms-set-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-terms-set-query.html type TermsSetQuery struct { name string values []interface{} @@ -25,7 +25,8 @@ type TermsSetQuery struct { // NewTermsSetQuery creates and initializes a new TermsSetQuery. func NewTermsSetQuery(name string, values ...interface{}) *TermsSetQuery { q := &TermsSetQuery{ - name: name, + name: name, + values: make([]interface{}, 0), } if len(values) > 0 { q.values = append(q.values, values...) diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_queries_type.go b/vendor/github.com/olivere/elastic/v7/search_queries_type.go similarity index 91% rename from vendor/gopkg.in/olivere/elastic.v6/search_queries_type.go rename to vendor/github.com/olivere/elastic/v7/search_queries_type.go index 3ca8d50ef8c9ce862acc71aa2983ee9c946f67ac..61867c1e38eebd9e0ff75ef672829b54bb7e9b8e 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_queries_type.go +++ b/vendor/github.com/olivere/elastic/v7/search_queries_type.go @@ -7,7 +7,7 @@ package elastic // TypeQuery filters documents matching the provided document / mapping type. // // For details, see: -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-type-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-type-query.html type TypeQuery struct { typ string } diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_queries_wildcard.go b/vendor/github.com/olivere/elastic/v7/search_queries_wildcard.go similarity index 96% rename from vendor/gopkg.in/olivere/elastic.v6/search_queries_wildcard.go rename to vendor/github.com/olivere/elastic/v7/search_queries_wildcard.go index de7da6642671a1c23d63e872d20722c515a81a59..33e4ea2aabd48d00874744ed619a64ba59b35b28 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_queries_wildcard.go +++ b/vendor/github.com/olivere/elastic/v7/search_queries_wildcard.go @@ -13,7 +13,7 @@ package elastic // The wildcard query maps to Lucene WildcardQuery. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-wildcard-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-wildcard-query.html type WildcardQuery struct { name string wildcard string diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_queries_wrapper.go b/vendor/github.com/olivere/elastic/v7/search_queries_wrapper.go similarity index 92% rename from vendor/gopkg.in/olivere/elastic.v6/search_queries_wrapper.go rename to vendor/github.com/olivere/elastic/v7/search_queries_wrapper.go index b45c677f3d74ad57b8cf766ac09e5c7ed4389e63..2a32d1e0adf85d3496feea33039cb2742355f6d7 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_queries_wrapper.go +++ b/vendor/github.com/olivere/elastic/v7/search_queries_wrapper.go @@ -7,7 +7,7 @@ package elastic // WrapperQuery accepts any other query as base64 encoded string. // // For details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.3/query-dsl-wrapper-query.html. +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-wrapper-query.html. type WrapperQuery struct { source string } diff --git a/vendor/github.com/olivere/elastic/v7/search_request.go b/vendor/github.com/olivere/elastic/v7/search_request.go new file mode 100644 index 0000000000000000000000000000000000000000..3a444b808ebad45a7d1e7fa839d58d92e1fa362a --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/search_request.go @@ -0,0 +1,586 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "strings" +) + +// SearchRequest combines a search request and its +// query details (see SearchSource). +// It is used in combination with MultiSearch. +type SearchRequest struct { + searchType string + indices []string + types []string + routing *string + preference *string + requestCache *bool + allowPartialSearchResults *bool + ignoreUnavailable *bool + allowNoIndices *bool + expandWildcards string + scroll string + source interface{} + searchSource *SearchSource + batchedReduceSize *int + maxConcurrentShardRequests *int + preFilterShardSize *int +} + +// NewSearchRequest creates a new search request. +func NewSearchRequest() *SearchRequest { + return &SearchRequest{ + searchSource: NewSearchSource(), + } +} + +// SearchType must be one of "dfs_query_then_fetch", "dfs_query_and_fetch", +// "query_then_fetch", or "query_and_fetch". +func (r *SearchRequest) SearchType(searchType string) *SearchRequest { + r.searchType = searchType + return r +} + +// SearchTypeDfsQueryThenFetch sets search type to "dfs_query_then_fetch". +func (r *SearchRequest) SearchTypeDfsQueryThenFetch() *SearchRequest { + return r.SearchType("dfs_query_then_fetch") +} + +// SearchTypeQueryThenFetch sets search type to "query_then_fetch". +func (r *SearchRequest) SearchTypeQueryThenFetch() *SearchRequest { + return r.SearchType("query_then_fetch") +} + +// Index specifies the indices to use in the request. +func (r *SearchRequest) Index(indices ...string) *SearchRequest { + r.indices = append(r.indices, indices...) + return r +} + +// HasIndices returns true if there are indices used, false otherwise. +func (r *SearchRequest) HasIndices() bool { + return len(r.indices) > 0 +} + +// Type specifies one or more types to be used. +// +// Deprecated: Types are in the process of being removed. Instead of using a type, prefer to +// filter on a field on the document. +func (r *SearchRequest) Type(types ...string) *SearchRequest { + r.types = append(r.types, types...) + return r +} + +// Routing specifies the routing parameter. It is a comma-separated list. +func (r *SearchRequest) Routing(routing string) *SearchRequest { + r.routing = &routing + return r +} + +// Routings to be used in the request. +func (r *SearchRequest) Routings(routings ...string) *SearchRequest { + if routings != nil { + routings := strings.Join(routings, ",") + r.routing = &routings + } else { + r.routing = nil + } + return r +} + +// Preference to execute the search. Defaults to randomize across shards. +// Can be set to "_local" to prefer local shards, "_primary" to execute +// only on primary shards, or a custom value, which guarantees that the +// same order will be used across different requests. +func (r *SearchRequest) Preference(preference string) *SearchRequest { + r.preference = &preference + return r +} + +// RequestCache specifies if this request should use the request cache +// or not, assuming that it can. By default, will default to the index +// level setting if request cache is enabled or not. +func (r *SearchRequest) RequestCache(requestCache bool) *SearchRequest { + r.requestCache = &requestCache + return r +} + +// IgnoreUnavailable indicates whether specified concrete indices should be +// ignored when unavailable (missing or closed). +func (s *SearchRequest) IgnoreUnavailable(ignoreUnavailable bool) *SearchRequest { + s.ignoreUnavailable = &ignoreUnavailable + return s +} + +// AllowNoIndices indicates whether to ignore if a wildcard indices +// expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified). +func (s *SearchRequest) AllowNoIndices(allowNoIndices bool) *SearchRequest { + s.allowNoIndices = &allowNoIndices + return s +} + +// ExpandWildcards indicates whether to expand wildcard expression to +// concrete indices that are open, closed or both. +func (s *SearchRequest) ExpandWildcards(expandWildcards string) *SearchRequest { + s.expandWildcards = expandWildcards + return s +} + +// Scroll, if set, will enable scrolling of the search request. +// Pass a timeout value, e.g. "2m" or "30s" as a value. +func (r *SearchRequest) Scroll(scroll string) *SearchRequest { + r.scroll = scroll + return r +} + +// SearchSource allows passing your own SearchSource, overriding +// all values set on the request (except Source). +func (r *SearchRequest) SearchSource(searchSource *SearchSource) *SearchRequest { + if searchSource == nil { + r.searchSource = NewSearchSource() + return r + } + r.searchSource = searchSource + return r +} + +// Source allows passing your own request body. It will have preference over +// all other properties set on the request. +func (r *SearchRequest) Source(source interface{}) *SearchRequest { + r.source = source + return r +} + +// Timeout value for the request, e.g. "30s" or "2m". +func (r *SearchRequest) Timeout(timeout string) *SearchRequest { + r.searchSource = r.searchSource.Timeout(timeout) + return r +} + +// TerminateAfter, when set, specifies an optional document count, +// upon collecting which the search query will terminate early. +func (r *SearchRequest) TerminateAfter(docs int) *SearchRequest { + r.searchSource = r.searchSource.TerminateAfter(docs) + return r +} + +// Query for the search. +func (r *SearchRequest) Query(query Query) *SearchRequest { + r.searchSource = r.searchSource.Query(query) + return r +} + +// PostFilter is a filter that will be executed after the query +// has been executed and only has affect on the search hits +// (not aggregations). This filter is always executed as last +// filtering mechanism. +func (r *SearchRequest) PostFilter(filter Query) *SearchRequest { + r.searchSource = r.searchSource.PostFilter(filter) + return r +} + +// MinScore below which documents are filtered out. +func (r *SearchRequest) MinScore(minScore float64) *SearchRequest { + r.searchSource = r.searchSource.MinScore(minScore) + return r +} + +// From index to start search from (default is 0). +func (r *SearchRequest) From(from int) *SearchRequest { + r.searchSource = r.searchSource.From(from) + return r +} + +// Size is the number of search hits to return (default is 10). +func (r *SearchRequest) Size(size int) *SearchRequest { + r.searchSource = r.searchSource.Size(size) + return r +} + +// Explain indicates whether to return an explanation for each hit. +func (r *SearchRequest) Explain(explain bool) *SearchRequest { + r.searchSource = r.searchSource.Explain(explain) + return r +} + +// Version indicates whether each hit should be returned with +// its version. +func (r *SearchRequest) Version(version bool) *SearchRequest { + r.searchSource = r.searchSource.Version(version) + return r +} + +// IndexBoost sets a boost a specific index will receive when +// the query is executed against it. +func (r *SearchRequest) IndexBoost(index string, boost float64) *SearchRequest { + r.searchSource = r.searchSource.IndexBoost(index, boost) + return r +} + +// Stats groups that this request will be aggregated under. +func (r *SearchRequest) Stats(statsGroup ...string) *SearchRequest { + r.searchSource = r.searchSource.Stats(statsGroup...) + return r +} + +// FetchSource indicates whether the response should contain the stored +// _source for every hit. +func (r *SearchRequest) FetchSource(fetchSource bool) *SearchRequest { + r.searchSource = r.searchSource.FetchSource(fetchSource) + return r +} + +// FetchSourceIncludeExclude specifies that _source should be returned +// with each hit, where "include" and "exclude" serve as a simple wildcard +// matcher that gets applied to its fields +// (e.g. include := []string{"obj1.*","obj2.*"}, exclude := []string{"description.*"}). +func (r *SearchRequest) FetchSourceIncludeExclude(include, exclude []string) *SearchRequest { + r.searchSource = r.searchSource.FetchSourceIncludeExclude(include, exclude) + return r +} + +// FetchSourceContext indicates how the _source should be fetched. +func (r *SearchRequest) FetchSourceContext(fsc *FetchSourceContext) *SearchRequest { + r.searchSource = r.searchSource.FetchSourceContext(fsc) + return r +} + +// DocValueField adds a docvalue based field to load and return. +// The field does not have to be stored, but it's recommended to use +// non analyzed or numeric fields. +func (r *SearchRequest) DocValueField(field string) *SearchRequest { + r.searchSource = r.searchSource.DocvalueField(field) + return r +} + +// DocValueFieldWithFormat adds a docvalue based field to load and return. +// The field does not have to be stored, but it's recommended to use +// non analyzed or numeric fields. +func (r *SearchRequest) DocValueFieldWithFormat(field DocvalueField) *SearchRequest { + r.searchSource = r.searchSource.DocvalueFieldWithFormat(field) + return r +} + +// DocValueFields adds one or more docvalue based field to load and return. +// The fields do not have to be stored, but it's recommended to use +// non analyzed or numeric fields. +func (r *SearchRequest) DocValueFields(fields ...string) *SearchRequest { + r.searchSource = r.searchSource.DocvalueFields(fields...) + return r +} + +// DocValueFieldsWithFormat adds one or more docvalue based field to load and return. +// The fields do not have to be stored, but it's recommended to use +// non analyzed or numeric fields. +func (r *SearchRequest) DocValueFieldsWithFormat(fields ...DocvalueField) *SearchRequest { + r.searchSource = r.searchSource.DocvalueFieldsWithFormat(fields...) + return r +} + +// StoredField adds a stored field to load and return +// (note, it must be stored) as part of the search request. +func (r *SearchRequest) StoredField(field string) *SearchRequest { + r.searchSource = r.searchSource.StoredField(field) + return r +} + +// NoStoredFields indicates that no fields should be loaded, +// resulting in only id and type to be returned per field. +func (r *SearchRequest) NoStoredFields() *SearchRequest { + r.searchSource = r.searchSource.NoStoredFields() + return r +} + +// StoredFields adds one or more stored field to load and return +// (note, they must be stored) as part of the search request. +func (r *SearchRequest) StoredFields(fields ...string) *SearchRequest { + r.searchSource = r.searchSource.StoredFields(fields...) + return r +} + +// ScriptField adds a script based field to load and return. +// The field does not have to be stored, but it's recommended +// to use non analyzed or numeric fields. +func (r *SearchRequest) ScriptField(field *ScriptField) *SearchRequest { + r.searchSource = r.searchSource.ScriptField(field) + return r +} + +// ScriptFields adds one or more script based field to load and return. +// The fields do not have to be stored, but it's recommended +// to use non analyzed or numeric fields. +func (r *SearchRequest) ScriptFields(fields ...*ScriptField) *SearchRequest { + r.searchSource = r.searchSource.ScriptFields(fields...) + return r +} + +// Sort adds a sort order. +func (r *SearchRequest) Sort(field string, ascending bool) *SearchRequest { + r.searchSource = r.searchSource.Sort(field, ascending) + return r +} + +// SortWithInfo adds a sort order. +func (r *SearchRequest) SortWithInfo(info SortInfo) *SearchRequest { + r.searchSource = r.searchSource.SortWithInfo(info) + return r +} + +// SortBy adds a sort order. +func (r *SearchRequest) SortBy(sorter ...Sorter) *SearchRequest { + r.searchSource = r.searchSource.SortBy(sorter...) + return r +} + +// SearchAfter sets the sort values that indicates which docs this +// request should "search after". +func (r *SearchRequest) SearchAfter(sortValues ...interface{}) *SearchRequest { + r.searchSource = r.searchSource.SearchAfter(sortValues...) + return r +} + +// Slice allows partitioning the documents in multiple slices. +// It is e.g. used to slice a scroll operation, supported in +// Elasticsearch 5.0 or later. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-request-scroll.html#sliced-scroll +// for details. +func (r *SearchRequest) Slice(sliceQuery Query) *SearchRequest { + r.searchSource = r.searchSource.Slice(sliceQuery) + return r +} + +// TrackScores is applied when sorting and controls if scores will be +// tracked as well. Defaults to false. +func (r *SearchRequest) TrackScores(trackScores bool) *SearchRequest { + r.searchSource = r.searchSource.TrackScores(trackScores) + return r +} + +// TrackTotalHits indicates if the total hit count for the query should be tracked. +// Defaults to true. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-request-track-total-hits.html +// for details. +func (r *SearchRequest) TrackTotalHits(trackTotalHits interface{}) *SearchRequest { + r.searchSource = r.searchSource.TrackTotalHits(trackTotalHits) + return r +} + +// Aggregation adds an aggreation to perform as part of the search. +func (r *SearchRequest) Aggregation(name string, aggregation Aggregation) *SearchRequest { + r.searchSource = r.searchSource.Aggregation(name, aggregation) + return r +} + +// Highlight adds highlighting to the search. +func (r *SearchRequest) Highlight(highlight *Highlight) *SearchRequest { + r.searchSource = r.searchSource.Highlight(highlight) + return r +} + +// Suggester adds a suggester to the search. +func (r *SearchRequest) Suggester(suggester Suggester) *SearchRequest { + r.searchSource = r.searchSource.Suggester(suggester) + return r +} + +// Rescorer adds a rescorer to the search. +func (r *SearchRequest) Rescorer(rescore *Rescore) *SearchRequest { + r.searchSource = r.searchSource.Rescorer(rescore) + return r +} + +// ClearRescorers removes all rescorers from the search. +func (r *SearchRequest) ClearRescorers() *SearchRequest { + r.searchSource = r.searchSource.ClearRescorers() + return r +} + +// Profile specifies that this search source should activate the +// Profile API for queries made on it. +func (r *SearchRequest) Profile(profile bool) *SearchRequest { + r.searchSource = r.searchSource.Profile(profile) + return r +} + +// Collapse adds field collapsing. +func (r *SearchRequest) Collapse(collapse *CollapseBuilder) *SearchRequest { + r.searchSource = r.searchSource.Collapse(collapse) + return r +} + +// AllowPartialSearchResults indicates if this request should allow partial +// results. (If method is not called, will default to the cluster level +// setting). +func (r *SearchRequest) AllowPartialSearchResults(allow bool) *SearchRequest { + r.allowPartialSearchResults = &allow + return r +} + +// BatchedReduceSize specifies the number of shard results that should be +// reduced at once on the coordinating node. This value should be used +// as a protection mechanism to reduce the memory overhead per search request +// if the potential number of shards in the request can be large. +func (r *SearchRequest) BatchedReduceSize(size int) *SearchRequest { + r.batchedReduceSize = &size + return r +} + +// MaxConcurrentShardRequests sets the number of shard requests that should +// be executed concurrently. This value should be used as a protection +// mechanism to reduce the number of shard requests fired per high level +// search request. Searches that hit the entire cluster can be throttled +// with this number to reduce the cluster load. The default grows with +// the number of nodes in the cluster but is at most 256. +func (r *SearchRequest) MaxConcurrentShardRequests(size int) *SearchRequest { + r.maxConcurrentShardRequests = &size + return r +} + +// PreFilterShardSize sets a threshold that enforces a pre-filter roundtrip +// to pre-filter search shards based on query rewriting if the number of +// shards the search request expands to exceeds the threshold. +// This filter roundtrip can limit the number of shards significantly if for +// instance a shard can not match any documents based on it's rewrite +// method ie. if date filters are mandatory to match but the shard +// bounds and the query are disjoint. The default is 128. +func (r *SearchRequest) PreFilterShardSize(size int) *SearchRequest { + r.preFilterShardSize = &size + return r +} + +// header is used e.g. by MultiSearch to get information about the search header +// of one SearchRequest. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-multi-search.html +func (r *SearchRequest) header() interface{} { + h := make(map[string]interface{}) + if r.searchType != "" { + h["search_type"] = r.searchType + } + + switch len(r.indices) { + case 0: + case 1: + h["index"] = r.indices[0] + default: + h["indices"] = r.indices + } + + switch len(r.types) { + case 0: + case 1: + h["type"] = r.types[0] + default: + h["types"] = r.types + } + + if r.routing != nil && *r.routing != "" { + h["routing"] = *r.routing + } + if r.preference != nil && *r.preference != "" { + h["preference"] = *r.preference + } + if r.requestCache != nil { + h["request_cache"] = *r.requestCache + } + if r.ignoreUnavailable != nil { + h["ignore_unavailable"] = *r.ignoreUnavailable + } + if r.allowNoIndices != nil { + h["allow_no_indices"] = *r.allowNoIndices + } + if r.expandWildcards != "" { + h["expand_wildcards"] = r.expandWildcards + } + if v := r.allowPartialSearchResults; v != nil { + h["allow_partial_search_results"] = *v + } + if r.scroll != "" { + h["scroll"] = r.scroll + } + + return h +} + +// Body allows to access the search body of the request, as generated by the DSL. +// Notice that Body is read-only. You must not change the request body. +// +// Body is used e.g. by MultiSearch to get information about the search body +// of one SearchRequest. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-multi-search.html +func (r *SearchRequest) Body() (string, error) { + if r.source == nil { + // Default: No custom source specified + src, err := r.searchSource.Source() + if err != nil { + return "", err + } + body, err := json.Marshal(src) + if err != nil { + return "", err + } + return string(body), nil + } + switch t := r.source.(type) { + default: + body, err := json.Marshal(r.source) + if err != nil { + return "", err + } + return string(body), nil + case *SearchSource: + src, err := t.Source() + if err != nil { + return "", err + } + body, err := json.Marshal(src) + if err != nil { + return "", err + } + return string(body), nil + case json.RawMessage: + return string(t), nil + case *json.RawMessage: + return string(*t), nil + case string: + return t, nil + case *string: + if t != nil { + return *t, nil + } + return "{}", nil + } +} + +// source returns the search source. It is used by Reindex. +func (r *SearchRequest) sourceAsMap() (interface{}, error) { + if r.source == nil { + // Default: No custom source specified + return r.searchSource.Source() + } + switch t := r.source.(type) { + default: + body, err := json.Marshal(r.source) + if err != nil { + return "", err + } + return RawStringQuery(body), nil + case *SearchSource: + return t.Source() + case json.RawMessage: + return RawStringQuery(string(t)), nil + case *json.RawMessage: + return RawStringQuery(string(*t)), nil + case string: + return RawStringQuery(t), nil + case *string: + if t != nil { + return RawStringQuery(*t), nil + } + return RawStringQuery("{}"), nil + } +} diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_shards.go b/vendor/github.com/olivere/elastic/v7/search_shards.go similarity index 56% rename from vendor/gopkg.in/olivere/elastic.v6/search_shards.go rename to vendor/github.com/olivere/elastic/v7/search_shards.go index cd7383e9280b9f1eff76a935d7a23208df15d681..6e566ac3f430bf72ed72af504c9d5c25b03c80ca 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_shards.go +++ b/vendor/github.com/olivere/elastic/v7/search_shards.go @@ -7,17 +7,25 @@ package elastic import ( "context" "fmt" + "net/http" "net/url" "strings" + "time" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // SearchShardsService returns the indices and shards that a search request would be executed against. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-shards.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-shards.html type SearchShardsService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + index []string routing string local *bool @@ -34,6 +42,46 @@ func NewSearchShardsService(client *Client) *SearchShardsService { } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *SearchShardsService) Pretty(pretty bool) *SearchShardsService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *SearchShardsService) Human(human bool) *SearchShardsService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *SearchShardsService) ErrorTrace(errorTrace bool) *SearchShardsService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *SearchShardsService) FilterPath(filterPath ...string) *SearchShardsService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *SearchShardsService) Header(name string, value string) *SearchShardsService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *SearchShardsService) Headers(headers http.Header) *SearchShardsService { + s.headers = headers + return s +} + // Index sets the names of the indices to restrict the results. func (s *SearchShardsService) Index(index ...string) *SearchShardsService { s.index = append(s.index, index...) @@ -59,12 +107,6 @@ func (s *SearchShardsService) Preference(preference string) *SearchShardsService return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *SearchShardsService) Pretty(pretty bool) *SearchShardsService { - s.pretty = pretty - return s -} - // IgnoreUnavailable indicates whether the specified concrete indices // should be ignored when unavailable (missing or closed). func (s *SearchShardsService) IgnoreUnavailable(ignoreUnavailable bool) *SearchShardsService { @@ -99,8 +141,17 @@ func (s *SearchShardsService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if s.preference != "" { params.Set("preference", s.preference) @@ -150,9 +201,10 @@ func (s *SearchShardsService) Do(ctx context.Context) (*SearchShardsResponse, er // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, + Method: "GET", + Path: path, + Params: params, + Headers: s.headers, }) if err != nil { return nil, err @@ -168,17 +220,39 @@ func (s *SearchShardsService) Do(ctx context.Context) (*SearchShardsResponse, er // SearchShardsResponse is the response of SearchShardsService.Do. type SearchShardsResponse struct { - Nodes map[string]interface{} `json:"nodes"` - Indices map[string]interface{} `json:"indices"` - Shards [][]ShardsInfo `json:"shards"` -} - -type ShardsInfo struct { - Index string `json:"index"` - Node string `json:"node"` - Primary bool `json:"primary"` - Shard uint `json:"shard"` - State string `json:"state"` - AllocationId interface{} `json:"allocation_id"` - RelocatingNode bool `json:"relocating_node"` + Nodes map[string]interface{} `json:"nodes"` + Indices map[string]interface{} `json:"indices"` + Shards [][]*SearchShardsResponseShardsInfo `json:"shards"` +} + +type SearchShardsResponseShardsInfo struct { + Index string `json:"index"` + Node string `json:"node"` + Primary bool `json:"primary"` + Shard uint `json:"shard"` + State string `json:"state"` + AllocationId *AllocationId `json:"allocation_id,omitempty"` + RelocatingNode string `json:"relocating_node"` + ExpectedShardSizeInBytes int64 `json:"expected_shard_size_in_bytes,omitempty"` + RecoverySource *RecoverySource `json:"recovery_source,omitempty"` + UnassignedInfo *UnassignedInfo `json:"unassigned_info,omitempty"` +} + +type RecoverySource struct { + Type string `json:"type"` + // TODO add missing fields here based on the Type +} + +type AllocationId struct { + Id string `json:"id"` + RelocationId string `json:"relocation_id,omitempty"` +} + +type UnassignedInfo struct { + Reason string `json:"reason"` + At *time.Time `json:"at,omitempty"` + FailedAttempts int `json:"failed_attempts,omitempty"` + Delayed bool `json:"delayed"` + Details string `json:"details,omitempty"` + AllocationStatus string `json:"allocation_status"` } diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_source.go b/vendor/github.com/olivere/elastic/v7/search_source.go similarity index 72% rename from vendor/gopkg.in/olivere/elastic.v6/search_source.go rename to vendor/github.com/olivere/elastic/v7/search_source.go index e0deafb06c0935fc6da524d780fd852ca5b84a45..ae2ae41cd85bab504687820ebdbd82fb16370fed 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_source.go +++ b/vendor/github.com/olivere/elastic/v7/search_source.go @@ -11,36 +11,37 @@ import ( // SearchSource enables users to build the search source. // It resembles the SearchSourceBuilder in Elasticsearch. type SearchSource struct { - query Query - postQuery Query - sliceQuery Query - from int - size int - explain *bool - version *bool - sorters []Sorter - trackScores *bool - trackTotalHits *bool - searchAfterSortValues []interface{} - minScore *float64 - timeout string - terminateAfter *int - storedFieldNames []string - docvalueFields []string - scriptFields []*ScriptField - fetchSourceContext *FetchSourceContext - aggregations map[string]Aggregation - highlight *Highlight + query Query // query + postQuery Query // post_filter + sliceQuery Query // slice + from int // from + size int // size + explain *bool // explain + version *bool // version + seqNoAndPrimaryTerm *bool // seq_no_primary_term + sorters []Sorter // sort + trackScores *bool // track_scores + trackTotalHits interface{} // track_total_hits + searchAfterSortValues []interface{} // search_after + minScore *float64 // min_score + timeout string // timeout + terminateAfter *int // terminate_after + storedFieldNames []string // stored_fields + docvalueFields DocvalueFields // docvalue_fields + scriptFields []*ScriptField // script_fields + fetchSourceContext *FetchSourceContext // _source + aggregations map[string]Aggregation // aggregations / aggs + highlight *Highlight // highlight globalSuggestText string - suggesters []Suggester - rescores []*Rescore + suggesters []Suggester // suggest + rescores []*Rescore // rescore defaultRescoreWindowSize *int - indexBoosts map[string]float64 - stats []string + indexBoosts IndexBoosts // indices_boost + stats []string // stats innerHits map[string]*InnerHit - collapse *CollapseBuilder - profile bool - // TODO extBuilders []SearchExtBuilder + collapse *CollapseBuilder // collapse + profile bool // profile + // TODO extBuilders []SearchExtBuilder // ext } // NewSearchSource initializes a new SearchSource. @@ -49,7 +50,6 @@ func NewSearchSource() *SearchSource { from: -1, size: -1, aggregations: make(map[string]Aggregation), - indexBoosts: make(map[string]float64), innerHits: make(map[string]*InnerHit), } } @@ -78,7 +78,7 @@ func (s *SearchSource) PostFilter(postFilter Query) *SearchSource { // Slice allows partitioning the documents in multiple slices. // It is e.g. used to slice a scroll operation, supported in // Elasticsearch 5.0 or later. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-request-scroll.html#sliced-scroll +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-request-scroll.html#sliced-scroll // for details. func (s *SearchSource) Slice(sliceQuery Query) *SearchSource { s.sliceQuery = sliceQuery @@ -117,6 +117,13 @@ func (s *SearchSource) Version(version bool) *SearchSource { return s } +// SeqNoAndPrimaryTerm indicates whether SearchHits should be returned with the +// sequence number and primary term of the last modification of the document. +func (s *SearchSource) SeqNoAndPrimaryTerm(enabled bool) *SearchSource { + s.seqNoAndPrimaryTerm = &enabled + return s +} + // Timeout controls how long a search is allowed to take, e.g. "1s" or "500ms". func (s *SearchSource) Timeout(timeout string) *SearchSource { s.timeout = timeout @@ -166,20 +173,20 @@ func (s *SearchSource) TrackScores(trackScores bool) *SearchSource { return s } -// TrackTotalHits indicates if the total hit count for the query should be tracked. -// Defaults to true. +// TrackTotalHits controls how the total number of hits should be tracked. +// Defaults to 10000 which will count the total hit accurately up to 10,000 hits. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.3/index-modules-index-sorting.html#early-terminate +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-request-track-total-hits.html // for details. -func (s *SearchSource) TrackTotalHits(trackTotalHits bool) *SearchSource { - s.trackTotalHits = &trackTotalHits +func (s *SearchSource) TrackTotalHits(trackTotalHits interface{}) *SearchSource { + s.trackTotalHits = trackTotalHits return s } // SearchAfter allows a different form of pagination by using a live cursor, // using the results of the previous page to help the retrieval of the next. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-request-search-after.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-request-search-after.html func (s *SearchSource) SearchAfter(sortValues ...interface{}) *SearchSource { s.searchAfterSortValues = append(s.searchAfterSortValues, sortValues...) return s @@ -254,10 +261,21 @@ func (s *SearchSource) FetchSourceContext(fetchSourceContext *FetchSourceContext return s } +// FetchSourceIncludeExclude specifies that _source should be returned +// with each hit, where "include" and "exclude" serve as a simple wildcard +// matcher that gets applied to its fields +// (e.g. include := []string{"obj1.*","obj2.*"}, exclude := []string{"description.*"}). +func (s *SearchSource) FetchSourceIncludeExclude(include, exclude []string) *SearchSource { + s.fetchSourceContext = NewFetchSourceContext(true). + Include(include...). + Exclude(exclude...) + return s +} + // NoStoredFields indicates that no fields should be loaded, resulting in only // id and type to be returned per field. func (s *SearchSource) NoStoredFields() *SearchSource { - s.storedFieldNames = nil + s.storedFieldNames = []string{} return s } @@ -279,13 +297,29 @@ func (s *SearchSource) StoredFields(storedFieldNames ...string) *SearchSource { // DocvalueField adds a single field to load from the field data cache // and return as part of the search request. func (s *SearchSource) DocvalueField(fieldDataField string) *SearchSource { - s.docvalueFields = append(s.docvalueFields, fieldDataField) + s.docvalueFields = append(s.docvalueFields, DocvalueField{Field: fieldDataField}) + return s +} + +// DocvalueField adds a single docvalue field to load from the field data cache +// and return as part of the search request. +func (s *SearchSource) DocvalueFieldWithFormat(fieldDataFieldWithFormat DocvalueField) *SearchSource { + s.docvalueFields = append(s.docvalueFields, fieldDataFieldWithFormat) return s } // DocvalueFields adds one or more fields to load from the field data cache // and return as part of the search request. func (s *SearchSource) DocvalueFields(docvalueFields ...string) *SearchSource { + for _, f := range docvalueFields { + s.docvalueFields = append(s.docvalueFields, DocvalueField{Field: f}) + } + return s +} + +// DocvalueFields adds one or more docvalue fields to load from the field data cache +// and return as part of the search request. +func (s *SearchSource) DocvalueFieldsWithFormat(docvalueFields ...DocvalueField) *SearchSource { s.docvalueFields = append(s.docvalueFields, docvalueFields...) return s } @@ -305,7 +339,13 @@ func (s *SearchSource) ScriptFields(scriptFields ...*ScriptField) *SearchSource // IndexBoost sets the boost that a specific index will receive when the // query is executed against it. func (s *SearchSource) IndexBoost(index string, boost float64) *SearchSource { - s.indexBoosts[index] = boost + s.indexBoosts = append(s.indexBoosts, IndexBoost{Index: index, Boost: boost}) + return s +} + +// IndexBoosts sets the boosts for specific indices. +func (s *SearchSource) IndexBoosts(boosts ...IndexBoost) *SearchSource { + s.indexBoosts = append(s.indexBoosts, boosts...) return s } @@ -357,13 +397,6 @@ func (s *SearchSource) Source() (interface{}, error) { } source["post_filter"] = src } - if s.sliceQuery != nil { - src, err := s.sliceQuery.Source() - if err != nil { - return nil, err - } - source["slice"] = src - } if s.minScore != nil { source["min_score"] = *s.minScore } @@ -376,13 +409,6 @@ func (s *SearchSource) Source() (interface{}, error) { if s.profile { source["profile"] = s.profile } - if s.collapse != nil { - src, err := s.collapse.Source() - if err != nil { - return nil, err - } - source["collapse"] = src - } if s.fetchSourceContext != nil { src, err := s.fetchSourceContext.Source() if err != nil { @@ -390,7 +416,6 @@ func (s *SearchSource) Source() (interface{}, error) { } source["_source"] = src } - if s.storedFieldNames != nil { switch len(s.storedFieldNames) { case 1: @@ -399,11 +424,13 @@ func (s *SearchSource) Source() (interface{}, error) { source["stored_fields"] = s.storedFieldNames } } - if len(s.docvalueFields) > 0 { - source["docvalue_fields"] = s.docvalueFields + src, err := s.docvalueFields.Source() + if err != nil { + return nil, err + } + source["docvalue_fields"] = src } - if len(s.scriptFields) > 0 { sfmap := make(map[string]interface{}) for _, scriptField := range s.scriptFields { @@ -415,7 +442,6 @@ func (s *SearchSource) Source() (interface{}, error) { } source["script_fields"] = sfmap } - if len(s.sorters) > 0 { var sortarr []interface{} for _, sorter := range s.sorters { @@ -427,20 +453,29 @@ func (s *SearchSource) Source() (interface{}, error) { } source["sort"] = sortarr } - if v := s.trackScores; v != nil { source["track_scores"] = *v } if v := s.trackTotalHits; v != nil { - source["track_total_hits"] = *v + source["track_total_hits"] = v } if len(s.searchAfterSortValues) > 0 { source["search_after"] = s.searchAfterSortValues } + if s.sliceQuery != nil { + src, err := s.sliceQuery.Source() + if err != nil { + return nil, err + } + source["slice"] = src + } if len(s.indexBoosts) > 0 { - source["indices_boost"] = s.indexBoosts + src, err := s.indexBoosts.Source() + if err != nil { + return nil, err + } + source["indices_boost"] = src } - if len(s.aggregations) > 0 { aggsMap := make(map[string]interface{}) for name, aggregate := range s.aggregations { @@ -452,7 +487,6 @@ func (s *SearchSource) Source() (interface{}, error) { } source["aggregations"] = aggsMap } - if s.highlight != nil { src, err := s.highlight.Source() if err != nil { @@ -460,7 +494,6 @@ func (s *SearchSource) Source() (interface{}, error) { } source["highlight"] = src } - if len(s.suggesters) > 0 { suggesters := make(map[string]interface{}) for _, s := range s.suggesters { @@ -475,7 +508,6 @@ func (s *SearchSource) Source() (interface{}, error) { } source["suggest"] = suggesters } - if len(s.rescores) > 0 { // Strip empty rescores from request var rescores []*Rescore @@ -484,7 +516,6 @@ func (s *SearchSource) Source() (interface{}, error) { rescores = append(rescores, r) } } - if len(rescores) == 1 { rescores[0].defaultRescoreWindowSize = s.defaultRescoreWindowSize src, err := rescores[0].Source() @@ -505,10 +536,22 @@ func (s *SearchSource) Source() (interface{}, error) { source["rescore"] = slice } } - if len(s.stats) > 0 { source["stats"] = s.stats } + // TODO ext builders + + if s.collapse != nil { + src, err := s.collapse.Source() + if err != nil { + return nil, err + } + source["collapse"] = src + } + + if v := s.seqNoAndPrimaryTerm; v != nil { + source["seq_no_primary_term"] = *v + } if len(s.innerHits) > 0 { // Top-level inner hits @@ -556,3 +599,34 @@ func (s *SearchSource) Source() (interface{}, error) { return source, nil } + +// -- IndexBoosts -- + +// IndexBoost specifies an index by some boost factor. +type IndexBoost struct { + Index string + Boost float64 +} + +// Source generates a JSON-serializable output for IndexBoost. +func (b IndexBoost) Source() (interface{}, error) { + return map[string]interface{}{ + b.Index: b.Boost, + }, nil +} + +// IndexBoosts is a slice of IndexBoost entities. +type IndexBoosts []IndexBoost + +// Source generates a JSON-serializable output for IndexBoosts. +func (b IndexBoosts) Source() (interface{}, error) { + var boosts []interface{} + for _, ib := range b { + src, err := ib.Source() + if err != nil { + return nil, err + } + boosts = append(boosts, src) + } + return boosts, nil +} diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_terms_lookup.go b/vendor/github.com/olivere/elastic/v7/search_terms_lookup.go similarity index 92% rename from vendor/gopkg.in/olivere/elastic.v6/search_terms_lookup.go rename to vendor/github.com/olivere/elastic/v7/search_terms_lookup.go index d3fac60085ce13f9e41bb9ba8f867f7c6701065f..f5d6541ac5a41c0bcb473c42cca0de5002253c4e 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/search_terms_lookup.go +++ b/vendor/github.com/olivere/elastic/v7/search_terms_lookup.go @@ -7,7 +7,7 @@ package elastic // TermsLookup encapsulates the parameters needed to fetch terms. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-terms-query.html#query-dsl-terms-lookup. +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-terms-query.html#query-dsl-terms-lookup. type TermsLookup struct { index string typ string @@ -29,6 +29,8 @@ func (t *TermsLookup) Index(index string) *TermsLookup { } // Type name. +// +// Deprecated: Types are in the process of being removed. func (t *TermsLookup) Type(typ string) *TermsLookup { t.typ = typ return t diff --git a/vendor/gopkg.in/olivere/elastic.v6/snapshot_create.go b/vendor/github.com/olivere/elastic/v7/snapshot_create.go similarity index 66% rename from vendor/gopkg.in/olivere/elastic.v6/snapshot_create.go rename to vendor/github.com/olivere/elastic/v7/snapshot_create.go index 408ef70b31f75eaa2f803e7cadecbc8845623c6a..0c3de06b664ef1ade22608d81dde9403448b71e9 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/snapshot_create.go +++ b/vendor/github.com/olivere/elastic/v7/snapshot_create.go @@ -8,16 +8,23 @@ import ( "context" "encoding/json" "fmt" + "net/http" "net/url" - "time" + "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) -// SnapshotCreateService is documented at https://www.elastic.co/guide/en/elasticsearch/reference/6.2/modules-snapshots.html. +// SnapshotCreateService is documented at https://www.elastic.co/guide/en/elasticsearch/reference/7.0/modules-snapshots.html. type SnapshotCreateService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + repository string snapshot string masterTimeout string @@ -33,6 +40,46 @@ func NewSnapshotCreateService(client *Client) *SnapshotCreateService { } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *SnapshotCreateService) Pretty(pretty bool) *SnapshotCreateService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *SnapshotCreateService) Human(human bool) *SnapshotCreateService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *SnapshotCreateService) ErrorTrace(errorTrace bool) *SnapshotCreateService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *SnapshotCreateService) FilterPath(filterPath ...string) *SnapshotCreateService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *SnapshotCreateService) Header(name string, value string) *SnapshotCreateService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *SnapshotCreateService) Headers(headers http.Header) *SnapshotCreateService { + s.headers = headers + return s +} + // Repository is the repository name. func (s *SnapshotCreateService) Repository(repository string) *SnapshotCreateService { s.repository = repository @@ -57,12 +104,6 @@ func (s *SnapshotCreateService) WaitForCompletion(waitForCompletion bool) *Snaps return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *SnapshotCreateService) Pretty(pretty bool) *SnapshotCreateService { - s.pretty = pretty - return s -} - // BodyJson is documented as: The snapshot definition. func (s *SnapshotCreateService) BodyJson(body interface{}) *SnapshotCreateService { s.bodyJson = body @@ -88,14 +129,23 @@ func (s *SnapshotCreateService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if s.masterTimeout != "" { params.Set("master_timeout", s.masterTimeout) } - if s.waitForCompletion != nil { - params.Set("wait_for_completion", fmt.Sprintf("%v", *s.waitForCompletion)) + if v := s.waitForCompletion; v != nil { + params.Set("wait_for_completion", fmt.Sprint(*v)) } return path, params, nil } @@ -138,10 +188,11 @@ func (s *SnapshotCreateService) Do(ctx context.Context) (*SnapshotCreateResponse // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "PUT", - Path: path, - Params: params, - Body: body, + Method: "PUT", + Path: path, + Params: params, + Body: body, + Headers: s.headers, }) if err != nil { return nil, err @@ -172,20 +223,5 @@ type SnapshotCreateResponse struct { Accepted *bool `json:"accepted"` // Snapshot is available when waitForCompletion is true. - Snapshot *struct { - Snapshot string `json:"snapshot"` - UUID string `json:"uuid"` - VersionID int `json:"version_id"` - Version string `json:"version"` - Indices []string `json:"indices"` - State string `json:"state"` - Reason string `json:"reason"` - StartTime time.Time `json:"start_time"` - StartTimeInMillis int64 `json:"start_time_in_millis"` - EndTime time.Time `json:"end_time"` - EndTimeInMillis int64 `json:"end_time_in_millis"` - DurationInMillis int64 `json:"duration_in_millis"` - Failures []SnapshotShardFailure `json:"failures"` - Shards shardsInfo `json:"shards"` - } `json:"snapshot"` + Snapshot *Snapshot `json:"snapshot"` } diff --git a/vendor/gopkg.in/olivere/elastic.v6/snapshot_create_repository.go b/vendor/github.com/olivere/elastic/v7/snapshot_create_repository.go similarity index 69% rename from vendor/gopkg.in/olivere/elastic.v6/snapshot_create_repository.go rename to vendor/github.com/olivere/elastic/v7/snapshot_create_repository.go index bbeb69fd58ed7dc8afdfc87c5fa4a3a8063e49b8..5976b2adc94f27555cefc9eae076f3fbb6c5cbc9 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/snapshot_create_repository.go +++ b/vendor/github.com/olivere/elastic/v7/snapshot_create_repository.go @@ -8,17 +8,25 @@ import ( "context" "encoding/json" "fmt" + "net/http" "net/url" + "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // SnapshotCreateRepositoryService creates a snapshot repository. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/modules-snapshots.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/modules-snapshots.html // for details. type SnapshotCreateRepositoryService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + repository string masterTimeout string timeout string @@ -36,6 +44,46 @@ func NewSnapshotCreateRepositoryService(client *Client) *SnapshotCreateRepositor } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *SnapshotCreateRepositoryService) Pretty(pretty bool) *SnapshotCreateRepositoryService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *SnapshotCreateRepositoryService) Human(human bool) *SnapshotCreateRepositoryService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *SnapshotCreateRepositoryService) ErrorTrace(errorTrace bool) *SnapshotCreateRepositoryService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *SnapshotCreateRepositoryService) FilterPath(filterPath ...string) *SnapshotCreateRepositoryService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *SnapshotCreateRepositoryService) Header(name string, value string) *SnapshotCreateRepositoryService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *SnapshotCreateRepositoryService) Headers(headers http.Header) *SnapshotCreateRepositoryService { + s.headers = headers + return s +} + // Repository is the repository name. func (s *SnapshotCreateRepositoryService) Repository(repository string) *SnapshotCreateRepositoryService { s.repository = repository @@ -60,12 +108,6 @@ func (s *SnapshotCreateRepositoryService) Verify(verify bool) *SnapshotCreateRep return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *SnapshotCreateRepositoryService) Pretty(pretty bool) *SnapshotCreateRepositoryService { - s.pretty = pretty - return s -} - // Type sets the snapshot repository type, e.g. "fs". func (s *SnapshotCreateRepositoryService) Type(typ string) *SnapshotCreateRepositoryService { s.typ = typ @@ -111,8 +153,17 @@ func (s *SnapshotCreateRepositoryService) buildURL() (string, url.Values, error) // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if s.masterTimeout != "" { params.Set("master_timeout", s.masterTimeout) @@ -120,8 +171,8 @@ func (s *SnapshotCreateRepositoryService) buildURL() (string, url.Values, error) if s.timeout != "" { params.Set("timeout", s.timeout) } - if s.verify != nil { - params.Set("verify", fmt.Sprintf("%v", *s.verify)) + if v := s.verify; v != nil { + params.Set("verify", fmt.Sprint(*v)) } return path, params, nil } @@ -150,7 +201,7 @@ func (s *SnapshotCreateRepositoryService) Validate() error { if s.repository == "" { invalid = append(invalid, "Repository") } - if s.bodyString == "" && s.bodyJson == nil { + if s.bodyString == "" && s.bodyJson == nil && len(s.settings) == 0 { invalid = append(invalid, "BodyJson") } if len(invalid) > 0 { @@ -180,10 +231,11 @@ func (s *SnapshotCreateRepositoryService) Do(ctx context.Context) (*SnapshotCrea // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "PUT", - Path: path, - Params: params, - Body: body, + Method: "PUT", + Path: path, + Params: params, + Body: body, + Headers: s.headers, }) if err != nil { return nil, err diff --git a/vendor/github.com/olivere/elastic/v7/snapshot_delete.go b/vendor/github.com/olivere/elastic/v7/snapshot_delete.go new file mode 100644 index 0000000000000000000000000000000000000000..74cf09bc8a82ef81a77b2384806f6ec5d328603b --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/snapshot_delete.go @@ -0,0 +1,154 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "net/url" + + "github.com/olivere/elastic/v7/uritemplates" +) + +// SnapshotDeleteService deletes a snapshot from a snapshot repository. +// It is documented at +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/modules-snapshots.html. +type SnapshotDeleteService struct { + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + + repository string + snapshot string +} + +// NewSnapshotDeleteService creates a new SnapshotDeleteService. +func NewSnapshotDeleteService(client *Client) *SnapshotDeleteService { + return &SnapshotDeleteService{ + client: client, + } +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *SnapshotDeleteService) Pretty(pretty bool) *SnapshotDeleteService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *SnapshotDeleteService) Human(human bool) *SnapshotDeleteService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *SnapshotDeleteService) ErrorTrace(errorTrace bool) *SnapshotDeleteService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *SnapshotDeleteService) FilterPath(filterPath ...string) *SnapshotDeleteService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *SnapshotDeleteService) Header(name string, value string) *SnapshotDeleteService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *SnapshotDeleteService) Headers(headers http.Header) *SnapshotDeleteService { + s.headers = headers + return s +} + +// Repository is the repository name. +func (s *SnapshotDeleteService) Repository(repository string) *SnapshotDeleteService { + s.repository = repository + return s +} + +// Snapshot is the snapshot name. +func (s *SnapshotDeleteService) Snapshot(snapshot string) *SnapshotDeleteService { + s.snapshot = snapshot + return s +} + +// buildURL builds the URL for the operation. +func (s *SnapshotDeleteService) buildURL() (string, url.Values, error) { + // Build URL + path, err := uritemplates.Expand("/_snapshot/{repository}/{snapshot}", map[string]string{ + "repository": s.repository, + "snapshot": s.snapshot, + }) + if err != nil { + return "", url.Values{}, err + } + return path, url.Values{}, nil +} + +// Validate checks if the operation is valid. +func (s *SnapshotDeleteService) Validate() error { + var invalid []string + if s.repository == "" { + invalid = append(invalid, "Repository") + } + if s.snapshot == "" { + invalid = append(invalid, "Snapshot") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the operation. +func (s *SnapshotDeleteService) Do(ctx context.Context) (*SnapshotDeleteResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "DELETE", + Path: path, + Params: params, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(SnapshotDeleteResponse) + if err := json.Unmarshal(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// SnapshotDeleteResponse is the response of SnapshotDeleteService.Do. +type SnapshotDeleteResponse struct { + Acknowledged bool `json:"acknowledged"` +} diff --git a/vendor/gopkg.in/olivere/elastic.v6/snapshot_delete_repository.go b/vendor/github.com/olivere/elastic/v7/snapshot_delete_repository.go similarity index 60% rename from vendor/gopkg.in/olivere/elastic.v6/snapshot_delete_repository.go rename to vendor/github.com/olivere/elastic/v7/snapshot_delete_repository.go index 5a16a5de8eec158214fd8a5509150f3708f36c3e..15b755c14f0d719973b6e6032633cc105ffc4c81 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/snapshot_delete_repository.go +++ b/vendor/github.com/olivere/elastic/v7/snapshot_delete_repository.go @@ -8,18 +8,25 @@ import ( "context" "encoding/json" "fmt" + "net/http" "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // SnapshotDeleteRepositoryService deletes a snapshot repository. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/modules-snapshots.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/modules-snapshots.html // for details. type SnapshotDeleteRepositoryService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + repository []string masterTimeout string timeout string @@ -33,6 +40,46 @@ func NewSnapshotDeleteRepositoryService(client *Client) *SnapshotDeleteRepositor } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *SnapshotDeleteRepositoryService) Pretty(pretty bool) *SnapshotDeleteRepositoryService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *SnapshotDeleteRepositoryService) Human(human bool) *SnapshotDeleteRepositoryService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *SnapshotDeleteRepositoryService) ErrorTrace(errorTrace bool) *SnapshotDeleteRepositoryService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *SnapshotDeleteRepositoryService) FilterPath(filterPath ...string) *SnapshotDeleteRepositoryService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *SnapshotDeleteRepositoryService) Header(name string, value string) *SnapshotDeleteRepositoryService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *SnapshotDeleteRepositoryService) Headers(headers http.Header) *SnapshotDeleteRepositoryService { + s.headers = headers + return s +} + // Repository is the list of repository names. func (s *SnapshotDeleteRepositoryService) Repository(repositories ...string) *SnapshotDeleteRepositoryService { s.repository = append(s.repository, repositories...) @@ -51,12 +98,6 @@ func (s *SnapshotDeleteRepositoryService) Timeout(timeout string) *SnapshotDelet return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *SnapshotDeleteRepositoryService) Pretty(pretty bool) *SnapshotDeleteRepositoryService { - s.pretty = pretty - return s -} - // buildURL builds the URL for the operation. func (s *SnapshotDeleteRepositoryService) buildURL() (string, url.Values, error) { // Build URL @@ -69,8 +110,17 @@ func (s *SnapshotDeleteRepositoryService) buildURL() (string, url.Values, error) // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if s.masterTimeout != "" { params.Set("master_timeout", s.masterTimeout) @@ -108,9 +158,10 @@ func (s *SnapshotDeleteRepositoryService) Do(ctx context.Context) (*SnapshotDele // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "DELETE", - Path: path, - Params: params, + Method: "DELETE", + Path: path, + Params: params, + Headers: s.headers, }) if err != nil { return nil, err diff --git a/vendor/github.com/olivere/elastic/v7/snapshot_get.go b/vendor/github.com/olivere/elastic/v7/snapshot_get.go new file mode 100644 index 0000000000000000000000000000000000000000..02cf99ee8333e77e2e12a18baaa548c0504240af --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/snapshot_get.go @@ -0,0 +1,225 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "net/url" + "strings" + "time" + + "github.com/olivere/elastic/v7/uritemplates" +) + +// SnapshotGetService lists the snapshots on a repository +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/modules-snapshots.html +// for details. +type SnapshotGetService struct { + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + + repository string + snapshot []string + masterTimeout string + ignoreUnavailable *bool + verbose *bool +} + +// NewSnapshotGetService creates a new SnapshotGetService. +func NewSnapshotGetService(client *Client) *SnapshotGetService { + return &SnapshotGetService{ + client: client, + } +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *SnapshotGetService) Pretty(pretty bool) *SnapshotGetService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *SnapshotGetService) Human(human bool) *SnapshotGetService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *SnapshotGetService) ErrorTrace(errorTrace bool) *SnapshotGetService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *SnapshotGetService) FilterPath(filterPath ...string) *SnapshotGetService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *SnapshotGetService) Header(name string, value string) *SnapshotGetService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *SnapshotGetService) Headers(headers http.Header) *SnapshotGetService { + s.headers = headers + return s +} + +// Repository is the repository name. +func (s *SnapshotGetService) Repository(repository string) *SnapshotGetService { + s.repository = repository + return s +} + +// Snapshot is the list of snapshot names. If not set, defaults to all snapshots. +func (s *SnapshotGetService) Snapshot(snapshots ...string) *SnapshotGetService { + s.snapshot = append(s.snapshot, snapshots...) + return s +} + +// MasterTimeout specifies an explicit operation timeout for connection to master node. +func (s *SnapshotGetService) MasterTimeout(masterTimeout string) *SnapshotGetService { + s.masterTimeout = masterTimeout + return s +} + +// IgnoreUnavailable specifies whether to ignore unavailable snapshots, defaults to false +func (s *SnapshotGetService) IgnoreUnavailable(ignoreUnavailable bool) *SnapshotGetService { + s.ignoreUnavailable = &ignoreUnavailable + return s +} + +// Verbose specifies whether to show verbose snapshot info or only show the basic info found in the repository index blob +func (s *SnapshotGetService) Verbose(verbose bool) *SnapshotGetService { + s.verbose = &verbose + return s +} + +// buildURL builds the URL for the operation. +func (s *SnapshotGetService) buildURL() (string, url.Values, error) { + // Build URL + var err error + var path string + if len(s.snapshot) > 0 { + path, err = uritemplates.Expand("/_snapshot/{repository}/{snapshot}", map[string]string{ + "repository": s.repository, + "snapshot": strings.Join(s.snapshot, ","), + }) + } else { + path, err = uritemplates.Expand("/_snapshot/{repository}/_all", map[string]string{ + "repository": s.repository, + }) + } + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } + if s.masterTimeout != "" { + params.Set("master_timeout", s.masterTimeout) + } + if v := s.ignoreUnavailable; v != nil { + params.Set("ignore_unavailable", fmt.Sprint(*v)) + } + if v := s.verbose; v != nil { + params.Set("verbose", fmt.Sprint(*v)) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *SnapshotGetService) Validate() error { + var invalid []string + if s.repository == "" { + invalid = append(invalid, "Repository") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the operation. +func (s *SnapshotGetService) Do(ctx context.Context) (*SnapshotGetResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "GET", + Path: path, + Params: params, + Headers: s.headers, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(SnapshotGetResponse) + if err := json.Unmarshal(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// SnapshotGetResponse is the response of SnapshotGetService.Do. +type SnapshotGetResponse struct { + Snapshots []*Snapshot `json:"snapshots"` +} + +// Snapshot contains all information about a single snapshot +type Snapshot struct { + Snapshot string `json:"snapshot"` + UUID string `json:"uuid"` + VersionID int `json:"version_id"` + Version string `json:"version"` + Indices []string `json:"indices"` + State string `json:"state"` + Reason string `json:"reason"` + StartTime time.Time `json:"start_time"` + StartTimeInMillis int64 `json:"start_time_in_millis"` + EndTime time.Time `json:"end_time"` + EndTimeInMillis int64 `json:"end_time_in_millis"` + DurationInMillis int64 `json:"duration_in_millis"` + Failures []SnapshotShardFailure `json:"failures"` + Shards *ShardsInfo `json:"shards"` +} diff --git a/vendor/gopkg.in/olivere/elastic.v6/snapshot_get_repository.go b/vendor/github.com/olivere/elastic/v7/snapshot_get_repository.go similarity index 60% rename from vendor/gopkg.in/olivere/elastic.v6/snapshot_get_repository.go rename to vendor/github.com/olivere/elastic/v7/snapshot_get_repository.go index b1794c111d586119fbf5f0cab994e46bbe0daf4a..28603563d8e8d86b8fb91741f05d6efeedf30c8b 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/snapshot_get_repository.go +++ b/vendor/github.com/olivere/elastic/v7/snapshot_get_repository.go @@ -8,18 +8,25 @@ import ( "context" "encoding/json" "fmt" + "net/http" "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // SnapshotGetRepositoryService reads a snapshot repository. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/modules-snapshots.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/modules-snapshots.html // for details. type SnapshotGetRepositoryService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + repository []string local *bool masterTimeout string @@ -33,6 +40,46 @@ func NewSnapshotGetRepositoryService(client *Client) *SnapshotGetRepositoryServi } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *SnapshotGetRepositoryService) Pretty(pretty bool) *SnapshotGetRepositoryService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *SnapshotGetRepositoryService) Human(human bool) *SnapshotGetRepositoryService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *SnapshotGetRepositoryService) ErrorTrace(errorTrace bool) *SnapshotGetRepositoryService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *SnapshotGetRepositoryService) FilterPath(filterPath ...string) *SnapshotGetRepositoryService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *SnapshotGetRepositoryService) Header(name string, value string) *SnapshotGetRepositoryService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *SnapshotGetRepositoryService) Headers(headers http.Header) *SnapshotGetRepositoryService { + s.headers = headers + return s +} + // Repository is the list of repository names. func (s *SnapshotGetRepositoryService) Repository(repositories ...string) *SnapshotGetRepositoryService { s.repository = append(s.repository, repositories...) @@ -51,12 +98,6 @@ func (s *SnapshotGetRepositoryService) MasterTimeout(masterTimeout string) *Snap return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *SnapshotGetRepositoryService) Pretty(pretty bool) *SnapshotGetRepositoryService { - s.pretty = pretty - return s -} - // buildURL builds the URL for the operation. func (s *SnapshotGetRepositoryService) buildURL() (string, url.Values, error) { // Build URL @@ -75,11 +116,20 @@ func (s *SnapshotGetRepositoryService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } - if s.local != nil { - params.Set("local", fmt.Sprintf("%v", *s.local)) + if v := s.local; v != nil { + params.Set("local", fmt.Sprint(*v)) } if s.masterTimeout != "" { params.Set("master_timeout", s.masterTimeout) @@ -107,9 +157,10 @@ func (s *SnapshotGetRepositoryService) Do(ctx context.Context) (SnapshotGetRepos // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, + Method: "GET", + Path: path, + Params: params, + Headers: s.headers, }) if err != nil { return nil, err diff --git a/vendor/github.com/olivere/elastic/v7/snapshot_restore.go b/vendor/github.com/olivere/elastic/v7/snapshot_restore.go new file mode 100644 index 0000000000000000000000000000000000000000..1d0b8c0871ef6cfd0d0dc02f64ae3dbe4174d0c9 --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/snapshot_restore.go @@ -0,0 +1,298 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "net/url" + "strings" + + "github.com/olivere/elastic/v7/uritemplates" +) + +// SnapshotRestoreService restores a snapshot from a snapshot repository. +// +// It is documented at +// https://www.elastic.co/guide/en/elasticsearch/reference/7.1/modules-snapshots.html#_restore. +type SnapshotRestoreService struct { + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + + repository string + snapshot string + masterTimeout string + waitForCompletion *bool + ignoreUnavailable *bool + partial *bool + includeAliases *bool + includeGlobalState *bool + bodyString string + renamePattern string + renameReplacement string + indices []string + indexSettings map[string]interface{} +} + +// NewSnapshotCreateService creates a new SnapshotRestoreService. +func NewSnapshotRestoreService(client *Client) *SnapshotRestoreService { + return &SnapshotRestoreService{ + client: client, + } +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *SnapshotRestoreService) Pretty(pretty bool) *SnapshotRestoreService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *SnapshotRestoreService) Human(human bool) *SnapshotRestoreService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *SnapshotRestoreService) ErrorTrace(errorTrace bool) *SnapshotRestoreService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *SnapshotRestoreService) FilterPath(filterPath ...string) *SnapshotRestoreService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *SnapshotRestoreService) Header(name string, value string) *SnapshotRestoreService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *SnapshotRestoreService) Headers(headers http.Header) *SnapshotRestoreService { + s.headers = headers + return s +} + +// Repository name. +func (s *SnapshotRestoreService) Repository(repository string) *SnapshotRestoreService { + s.repository = repository + return s +} + +// Snapshot name. +func (s *SnapshotRestoreService) Snapshot(snapshot string) *SnapshotRestoreService { + s.snapshot = snapshot + return s +} + +// MasterTimeout specifies an explicit operation timeout for connection to master node. +func (s *SnapshotRestoreService) MasterTimeout(masterTimeout string) *SnapshotRestoreService { + s.masterTimeout = masterTimeout + return s +} + +// WaitForCompletion indicates whether this request should wait until the operation has +// completed before returning. +func (s *SnapshotRestoreService) WaitForCompletion(waitForCompletion bool) *SnapshotRestoreService { + s.waitForCompletion = &waitForCompletion + return s +} + +// Indices sets the name of the indices that should be restored from the snapshot. +func (s *SnapshotRestoreService) Indices(indices ...string) *SnapshotRestoreService { + s.indices = indices + return s +} + +// IncludeGlobalState allows the global cluster state to be restored, defaults to false. +func (s *SnapshotRestoreService) IncludeGlobalState(includeGlobalState bool) *SnapshotRestoreService { + s.includeGlobalState = &includeGlobalState + return s +} + +// RenamePattern helps rename indices on restore using regular expressions. +func (s *SnapshotRestoreService) RenamePattern(renamePattern string) *SnapshotRestoreService { + s.renamePattern = renamePattern + return s +} + +// RenameReplacement as RenamePattern, helps rename indices on restore using regular expressions. +func (s *SnapshotRestoreService) RenameReplacement(renameReplacement string) *SnapshotRestoreService { + s.renameReplacement = renameReplacement + return s +} + +// Partial indicates whether to restore indices that where partially snapshoted, defaults to false. +func (s *SnapshotRestoreService) Partial(partial bool) *SnapshotRestoreService { + s.partial = &partial + return s +} + +// BodyString allows the user to specify the body of the HTTP request manually. +func (s *SnapshotRestoreService) BodyString(body string) *SnapshotRestoreService { + s.bodyString = body + return s +} + +// IndexSettings sets the settings to be overwritten during the restore process +func (s *SnapshotRestoreService) IndexSettings(indexSettings map[string]interface{}) *SnapshotRestoreService { + s.indexSettings = indexSettings + return s +} + +// IncludeAliases flags whether indices should be restored with their respective aliases, +// defaults to false. +func (s *SnapshotRestoreService) IncludeAliases(includeAliases bool) *SnapshotRestoreService { + s.includeAliases = &includeAliases + return s +} + +// IgnoreUnavailable specifies whether to ignore unavailable snapshots, defaults to false. +func (s *SnapshotRestoreService) IgnoreUnavailable(ignoreUnavailable bool) *SnapshotRestoreService { + s.ignoreUnavailable = &ignoreUnavailable + return s +} + +// Do executes the operation. +func (s *SnapshotRestoreService) Do(ctx context.Context) (*SnapshotRestoreResponse, error) { + if err := s.Validate(); err != nil { + return nil, err + } + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + var body interface{} + if len(s.bodyString) > 0 { + body = s.bodyString + } else { + body = s.buildBody() + } + + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "POST", + Path: path, + Params: params, + Body: body, + Headers: s.headers, + }) + if err != nil { + return nil, err + } + + ret := new(SnapshotRestoreResponse) + if err := json.Unmarshal(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// Validate checks if the operation is valid. +func (s *SnapshotRestoreService) Validate() error { + var invalid []string + if s.repository == "" { + invalid = append(invalid, "Repository") + } + if s.snapshot == "" { + invalid = append(invalid, "Snapshot") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +func (s *SnapshotRestoreService) buildURL() (string, url.Values, error) { + path, err := uritemplates.Expand("/_snapshot/{repository}/{snapshot}/_restore", map[string]string{ + "snapshot": s.snapshot, + "repository": s.repository, + }) + if err != nil { + return "", url.Values{}, err + } + + params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } + if s.masterTimeout != "" { + params.Set("master_timeout", s.masterTimeout) + } + if v := s.waitForCompletion; v != nil { + params.Set("wait_for_completion", fmt.Sprint(*v)) + } + if v := s.ignoreUnavailable; v != nil { + params.Set("ignore_unavailable", fmt.Sprint(*v)) + } + return path, params, nil +} + +func (s *SnapshotRestoreService) buildBody() interface{} { + body := map[string]interface{}{} + + if s.includeGlobalState != nil { + body["include_global_state"] = *s.includeGlobalState + } + if s.partial != nil { + body["partial"] = *s.partial + } + if s.includeAliases != nil { + body["include_aliases"] = *s.includeAliases + } + if len(s.indices) > 0 { + body["indices"] = strings.Join(s.indices, ",") + } + if len(s.renamePattern) > 0 { + body["rename_pattern"] = s.renamePattern + } + if len(s.renamePattern) > 0 { + body["rename_replacement"] = s.renameReplacement + } + if len(s.indexSettings) > 0 { + body["index_settings"] = s.indexSettings + } + return body +} + +// SnapshotRestoreResponse represents the response for SnapshotRestoreService.Do +type SnapshotRestoreResponse struct { + // Accepted indicates whether the request was accepted by Elasticsearch. + Accepted *bool `json:"accepted"` + + // Snapshot information. + Snapshot *RestoreInfo `json:"snapshot"` +} + +// RestoreInfo represents information about the restored snapshot. +type RestoreInfo struct { + Snapshot string `json:"snapshot"` + Indices []string `json:"indices"` + Shards ShardsInfo `json:"shards"` +} diff --git a/vendor/github.com/olivere/elastic/v7/snapshot_status.go b/vendor/github.com/olivere/elastic/v7/snapshot_status.go new file mode 100644 index 0000000000000000000000000000000000000000..c03ca37253e2235b81a3719f0e6ff1385c59b9d5 --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/snapshot_status.go @@ -0,0 +1,258 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "net/url" + "strings" + + "github.com/olivere/elastic/v7/uritemplates" +) + +// SnapshotStatusService returns information about the status of a snapshot. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.5/modules-snapshots.html +// for details. +type SnapshotStatusService struct { + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + + repository string + snapshot []string + masterTimeout string + ignoreUnavailable *bool +} + +// NewSnapshotStatusService creates a new SnapshotStatusService. +func NewSnapshotStatusService(client *Client) *SnapshotStatusService { + return &SnapshotStatusService{ + client: client, + } +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *SnapshotStatusService) Pretty(pretty bool) *SnapshotStatusService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *SnapshotStatusService) Human(human bool) *SnapshotStatusService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *SnapshotStatusService) ErrorTrace(errorTrace bool) *SnapshotStatusService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *SnapshotStatusService) FilterPath(filterPath ...string) *SnapshotStatusService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *SnapshotStatusService) Header(name string, value string) *SnapshotStatusService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *SnapshotStatusService) Headers(headers http.Header) *SnapshotStatusService { + s.headers = headers + return s +} + +// Repository is the repository name. +func (s *SnapshotStatusService) Repository(repository string) *SnapshotStatusService { + s.repository = repository + return s +} + +// Snapshot is the list of snapshot names. If not set, defaults to all snapshots. +func (s *SnapshotStatusService) Snapshot(snapshots ...string) *SnapshotStatusService { + s.snapshot = append(s.snapshot, snapshots...) + return s +} + +// MasterTimeout specifies an explicit operation timeout for connection to master node. +func (s *SnapshotStatusService) MasterTimeout(masterTimeout string) *SnapshotStatusService { + s.masterTimeout = masterTimeout + return s +} + +// buildURL builds the URL for the operation. +func (s *SnapshotStatusService) buildURL() (string, url.Values, error) { + var err error + var path string + + if s.repository != "" { + if len(s.snapshot) > 0 { + path, err = uritemplates.Expand("/_snapshot/{repository}/{snapshot}/_status", map[string]string{ + "repository": s.repository, + "snapshot": strings.Join(s.snapshot, ","), + }) + } else { + path, err = uritemplates.Expand("/_snapshot/{repository}/_status", map[string]string{ + "repository": s.repository, + }) + } + } else { + path, err = uritemplates.Expand("/_snapshot/_status", nil) + } + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } + if s.masterTimeout != "" { + params.Set("master_timeout", s.masterTimeout) + } + if v := s.ignoreUnavailable; v != nil { + params.Set("ignore_unavailable", fmt.Sprint(*v)) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +// +// Validation only fails if snapshot names were provided but no repository was +// provided. +func (s *SnapshotStatusService) Validate() error { + if len(s.snapshot) > 0 && s.repository == "" { + return fmt.Errorf("snapshots were specified but repository is missing") + } + return nil +} + +// Do executes the operation. +func (s *SnapshotStatusService) Do(ctx context.Context) (*SnapshotStatusResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "GET", + Path: path, + Params: params, + Headers: s.headers, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(SnapshotStatusResponse) + if err := json.Unmarshal(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +type SnapshotStatusResponse struct { + Snapshots []SnapshotStatus `json:"snapshots"` +} + +type SnapshotStatus struct { + Snapshot string `json:"snapshot"` + Repository string `json:"repository"` + UUID string `json:"uuid"` + State string `json:"state"` + IncludeGlobalState bool `json:"include_global_state"` + ShardsStats SnapshotShardsStats `json:"shards_stats"` + Stats SnapshotStats `json:"stats"` + Indices map[string]SnapshotIndexStatus `json:"indices"` +} + +type SnapshotShardsStats struct { + Initializing int `json:"initializing"` + Started int `json:"started"` + Finalizing int `json:"finalizing"` + Done int `json:"done"` + Failed int `json:"failed"` + Total int `json:"total"` +} + +type SnapshotStats struct { + Incremental struct { + FileCount int `json:"file_count"` + Size string `json:"size"` + SizeInBytes int64 `json:"size_in_bytes"` + } `json:"incremental"` + + Processed struct { + FileCount int `json:"file_count"` + Size string `json:"size"` + SizeInBytes int64 `json:"size_in_bytes"` + } `json:"processed"` + + Total struct { + FileCount int `json:"file_count"` + Size string `json:"size"` + SizeInBytes int64 `json:"size_in_bytes"` + } `json:"total"` + + StartTime string `json:"start_time"` + StartTimeInMillis int64 `json:"start_time_in_millis"` + + Time string `json:"time"` + TimeInMillis int64 `json:"time_in_millis"` + + NumberOfFiles int `json:"number_of_files"` + ProcessedFiles int `json:"processed_files"` + + TotalSize string `json:"total_size"` + TotalSizeInBytes int64 `json:"total_size_in_bytes"` +} + +type SnapshotIndexStatus struct { + ShardsStats SnapshotShardsStats `json:"shards_stats"` + Stats SnapshotStats `json:"stats"` + Shards map[string]SnapshotIndexShardStatus `json:"shards"` +} + +type SnapshotIndexShardStatus struct { + Stage string `json:"stage"` // initializing, started, finalize, done, or failed + Stats SnapshotStats `json:"stats"` + Node string `json:"node"` + Reason string `json:"reason"` // reason for failure +} diff --git a/vendor/gopkg.in/olivere/elastic.v6/snapshot_verify_repository.go b/vendor/github.com/olivere/elastic/v7/snapshot_verify_repository.go similarity index 59% rename from vendor/gopkg.in/olivere/elastic.v6/snapshot_verify_repository.go rename to vendor/github.com/olivere/elastic/v7/snapshot_verify_repository.go index fb8820641c63f399fcc30358654a3d2bf297a42d..ca8eab2deafc0f02dd1927c45937abd1baa1bce6 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/snapshot_verify_repository.go +++ b/vendor/github.com/olivere/elastic/v7/snapshot_verify_repository.go @@ -8,17 +8,25 @@ import ( "context" "encoding/json" "fmt" + "net/http" "net/url" + "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // SnapshotVerifyRepositoryService verifies a snapshop repository. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/modules-snapshots.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/modules-snapshots.html // for details. type SnapshotVerifyRepositoryService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + repository string masterTimeout string timeout string @@ -31,6 +39,46 @@ func NewSnapshotVerifyRepositoryService(client *Client) *SnapshotVerifyRepositor } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *SnapshotVerifyRepositoryService) Pretty(pretty bool) *SnapshotVerifyRepositoryService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *SnapshotVerifyRepositoryService) Human(human bool) *SnapshotVerifyRepositoryService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *SnapshotVerifyRepositoryService) ErrorTrace(errorTrace bool) *SnapshotVerifyRepositoryService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *SnapshotVerifyRepositoryService) FilterPath(filterPath ...string) *SnapshotVerifyRepositoryService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *SnapshotVerifyRepositoryService) Header(name string, value string) *SnapshotVerifyRepositoryService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *SnapshotVerifyRepositoryService) Headers(headers http.Header) *SnapshotVerifyRepositoryService { + s.headers = headers + return s +} + // Repository specifies the repository name. func (s *SnapshotVerifyRepositoryService) Repository(repository string) *SnapshotVerifyRepositoryService { s.repository = repository @@ -49,12 +97,6 @@ func (s *SnapshotVerifyRepositoryService) Timeout(timeout string) *SnapshotVerif return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *SnapshotVerifyRepositoryService) Pretty(pretty bool) *SnapshotVerifyRepositoryService { - s.pretty = pretty - return s -} - // buildURL builds the URL for the operation. func (s *SnapshotVerifyRepositoryService) buildURL() (string, url.Values, error) { // Build URL @@ -67,8 +109,17 @@ func (s *SnapshotVerifyRepositoryService) buildURL() (string, url.Values, error) // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if s.masterTimeout != "" { params.Set("master_timeout", s.masterTimeout) @@ -106,9 +157,10 @@ func (s *SnapshotVerifyRepositoryService) Do(ctx context.Context) (*SnapshotVeri // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "POST", - Path: path, - Params: params, + Method: "POST", + Path: path, + Params: params, + Headers: s.headers, }) if err != nil { return nil, err diff --git a/vendor/gopkg.in/olivere/elastic.v6/sort.go b/vendor/github.com/olivere/elastic/v7/sort.go similarity index 85% rename from vendor/gopkg.in/olivere/elastic.v6/sort.go rename to vendor/github.com/olivere/elastic/v7/sort.go index 064d05e92f6c9edc7f271a0597425e40a1d100d4..60cc0a11f721f833cfc5fcb1f7e2bbdff5c0885b 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/sort.go +++ b/vendor/github.com/olivere/elastic/v7/sort.go @@ -9,7 +9,7 @@ import "errors" // -- Sorter -- // Sorter is an interface for sorting strategies, e.g. ScoreSort or FieldSort. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-request-sort.html. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-request-sort.html. type Sorter interface { Source() (interface{}, error) } @@ -25,9 +25,12 @@ type SortInfo struct { IgnoreUnmapped *bool UnmappedType string SortMode string - NestedFilter Query - NestedPath string - NestedSort *NestedSort // available in 6.1 or later + NestedFilter Query // deprecated in 6.1 and replaced by Filter + Filter Query + NestedPath string // deprecated in 6.1 and replaced by Path + Path string + NestedSort *NestedSort // deprecated in 6.1 and replaced by Nested + Nested *NestedSort } func (info SortInfo) Source() (interface{}, error) { @@ -49,17 +52,31 @@ func (info SortInfo) Source() (interface{}, error) { if info.SortMode != "" { prop["mode"] = info.SortMode } - if info.NestedFilter != nil { + if info.Filter != nil { + src, err := info.Filter.Source() + if err != nil { + return nil, err + } + prop["filter"] = src + } else if info.NestedFilter != nil { src, err := info.NestedFilter.Source() if err != nil { return nil, err } - prop["nested_filter"] = src + prop["nested_filter"] = src // deprecated in 6.1 } - if info.NestedPath != "" { - prop["nested_path"] = info.NestedPath + if info.Path != "" { + prop["path"] = info.Path + } else if info.NestedPath != "" { + prop["nested_path"] = info.NestedPath // deprecated in 6.1 } - if info.NestedSort != nil { + if info.Nested != nil { + src, err := info.Nested.Source() + if err != nil { + return nil, err + } + prop["nested"] = src + } else if info.NestedSort != nil { src, err := info.NestedSort.Source() if err != nil { return nil, err @@ -74,7 +91,7 @@ func (info SortInfo) Source() (interface{}, error) { // -- SortByDoc -- // SortByDoc sorts by the "_doc" field, as described in -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-request-scroll.html. +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-request-scroll.html. // // Example: // ss := elastic.NewSearchSource() @@ -142,9 +159,9 @@ type FieldSort struct { missing interface{} unmappedType *string sortMode *string - nestedFilter Query - nestedPath *string - nestedSort *NestedSort + filter Query + path *string + nested *NestedSort } // NewFieldSort creates a new FieldSort. @@ -204,22 +221,45 @@ func (s *FieldSort) SortMode(sortMode string) *FieldSort { // NestedFilter sets a filter that nested objects should match with // in order to be taken into account for sorting. +// Deprecated: Use Filter instead. func (s *FieldSort) NestedFilter(nestedFilter Query) *FieldSort { - s.nestedFilter = nestedFilter + s.filter = nestedFilter + return s +} + +// Filter sets a filter that nested objects should match with +// in order to be taken into account for sorting. +func (s *FieldSort) Filter(filter Query) *FieldSort { + s.filter = filter return s } // NestedPath is used if sorting occurs on a field that is inside a // nested object. +// Deprecated: Use Path instead. func (s *FieldSort) NestedPath(nestedPath string) *FieldSort { - s.nestedPath = &nestedPath + s.path = &nestedPath + return s +} + +// Path is used if sorting occurs on a field that is inside a +// nested object. +func (s *FieldSort) Path(path string) *FieldSort { + s.path = &path return s } // NestedSort is available starting with 6.1 and will replace NestedFilter // and NestedPath. +// Deprecated: Use Nested instead. func (s *FieldSort) NestedSort(nestedSort *NestedSort) *FieldSort { - s.nestedSort = nestedSort + s.nested = nestedSort + return s +} + +// Nested is available starting with 6.1 and will replace Filter and Path. +func (s *FieldSort) Nested(nested *NestedSort) *FieldSort { + s.nested = nested return s } @@ -242,18 +282,18 @@ func (s *FieldSort) Source() (interface{}, error) { if s.sortMode != nil { x["mode"] = *s.sortMode } - if s.nestedFilter != nil { - src, err := s.nestedFilter.Source() + if s.filter != nil { + src, err := s.filter.Source() if err != nil { return nil, err } - x["nested_filter"] = src + x["filter"] = src } - if s.nestedPath != nil { - x["nested_path"] = *s.nestedPath + if s.path != nil { + x["path"] = *s.path } - if s.nestedSort != nil { - src, err := s.nestedSort.Source() + if s.nested != nil { + src, err := s.nested.Source() if err != nil { return nil, err } @@ -265,7 +305,7 @@ func (s *FieldSort) Source() (interface{}, error) { // -- GeoDistanceSort -- // GeoDistanceSort allows for sorting by geographic distance. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-request-sort.html#_geo_distance_sorting. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-request-sort.html#_geo_distance_sorting. type GeoDistanceSort struct { Sorter fieldName string @@ -331,7 +371,7 @@ func (s *GeoDistanceSort) GeoHashes(geohashes ...string) *GeoDistanceSort { } // Unit specifies the distance unit to use. It defaults to km. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/common-options.html#distance-units +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/common-options.html#distance-units // for details. func (s *GeoDistanceSort) Unit(unit string) *GeoDistanceSort { s.unit = unit @@ -344,7 +384,7 @@ func (s *GeoDistanceSort) GeoDistance(geoDistance string) *GeoDistanceSort { } // DistanceType describes how to compute the distance, e.g. "arc" or "plane". -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-request-sort.html#geo-sorting +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-request-sort.html#geo-sorting // for details. func (s *GeoDistanceSort) DistanceType(distanceType string) *GeoDistanceSort { s.distanceType = &distanceType @@ -434,7 +474,7 @@ func (s *GeoDistanceSort) Source() (interface{}, error) { // -- ScriptSort -- // ScriptSort sorts by a custom script. See -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/modules-scripting.html#modules-scripting +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/modules-scripting.html#modules-scripting // for details about scripting. type ScriptSort struct { Sorter diff --git a/vendor/gopkg.in/olivere/elastic.v6/suggest_field.go b/vendor/github.com/olivere/elastic/v7/suggest_field.go similarity index 100% rename from vendor/gopkg.in/olivere/elastic.v6/suggest_field.go rename to vendor/github.com/olivere/elastic/v7/suggest_field.go diff --git a/vendor/gopkg.in/olivere/elastic.v6/suggester.go b/vendor/github.com/olivere/elastic/v7/suggester.go similarity index 100% rename from vendor/gopkg.in/olivere/elastic.v6/suggester.go rename to vendor/github.com/olivere/elastic/v7/suggester.go diff --git a/vendor/gopkg.in/olivere/elastic.v6/suggester_completion.go b/vendor/github.com/olivere/elastic/v7/suggester_completion.go similarity index 95% rename from vendor/gopkg.in/olivere/elastic.v6/suggester_completion.go rename to vendor/github.com/olivere/elastic/v7/suggester_completion.go index 858fda1d72c4d0d8391a2a97baa78592283c2d00..668f0c2e7b2b7be3e9a58eef29c092b0de18dc25 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/suggester_completion.go +++ b/vendor/github.com/olivere/elastic/v7/suggester_completion.go @@ -8,7 +8,7 @@ import "errors" // CompletionSuggester is a fast suggester for e.g. type-ahead completion. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-suggesters-completion.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-suggesters-completion.html // for more details. type CompletionSuggester struct { Suggester @@ -21,7 +21,6 @@ type CompletionSuggester struct { size *int shardSize *int contextQueries []SuggesterContextQuery - payload interface{} fuzzyOptions *FuzzyCompletionSuggesterOptions regexOptions *RegexCompletionSuggesterOptions @@ -245,7 +244,7 @@ func NewFuzzyCompletionSuggesterOptions() *FuzzyCompletionSuggesterOptions { // EditDistance specifies the maximum number of edits, e.g. a number like "1" or "2" // or a string like "0..2" or ">5". // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/common-options.html#fuzziness +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/common-options.html#fuzziness // for details. func (o *FuzzyCompletionSuggesterOptions) EditDistance(editDistance interface{}) *FuzzyCompletionSuggesterOptions { o.editDistance = editDistance @@ -328,7 +327,7 @@ func NewRegexCompletionSuggesterOptions() *RegexCompletionSuggesterOptions { // Flags represents internal regex flags. // Possible flags are ALL (default), ANYSTRING, COMPLEMENT, EMPTY, INTERSECTION, INTERVAL, or NONE. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-suggesters-completion.html#regex +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-suggesters-completion.html#regex // for details. func (o *RegexCompletionSuggesterOptions) Flags(flags interface{}) *RegexCompletionSuggesterOptions { o.flags = flags @@ -337,7 +336,7 @@ func (o *RegexCompletionSuggesterOptions) Flags(flags interface{}) *RegexComplet // MaxDeterminizedStates represents the maximum automaton states allowed for regex expansion. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-suggesters-completion.html#regex +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-suggesters-completion.html#regex // for details. func (o *RegexCompletionSuggesterOptions) MaxDeterminizedStates(max int) *RegexCompletionSuggesterOptions { o.maxDeterminizedStates = &max diff --git a/vendor/gopkg.in/olivere/elastic.v6/suggester_context.go b/vendor/github.com/olivere/elastic/v7/suggester_context.go similarity index 97% rename from vendor/gopkg.in/olivere/elastic.v6/suggester_context.go rename to vendor/github.com/olivere/elastic/v7/suggester_context.go index 5b1508849ed7c590ef307fbc511a48314bffb6ee..fa6e445254090eb3989131fedaa152940be288dc 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/suggester_context.go +++ b/vendor/github.com/olivere/elastic/v7/suggester_context.go @@ -13,7 +13,7 @@ type SuggesterContextQuery interface { } // ContextSuggester is a fast suggester for e.g. type-ahead completion that supports filtering and boosting based on contexts. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/suggester-context.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/suggester-context.html // for more details. type ContextSuggester struct { Suggester diff --git a/vendor/gopkg.in/olivere/elastic.v6/suggester_context_category.go b/vendor/github.com/olivere/elastic/v7/suggester_context_category.go similarity index 74% rename from vendor/gopkg.in/olivere/elastic.v6/suggester_context_category.go rename to vendor/github.com/olivere/elastic/v7/suggester_context_category.go index 134ecc7f70acdadf3d54260957b2472d311fb7af..ccca3018a4af5f57e2af286a959b0333377a2aca 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/suggester_context_category.go +++ b/vendor/github.com/olivere/elastic/v7/suggester_context_category.go @@ -7,7 +7,7 @@ package elastic // -- SuggesterCategoryMapping -- // SuggesterCategoryMapping provides a mapping for a category context in a suggester. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/suggester-context.html#_category_mapping. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/suggester-context.html#_category_mapping. type SuggesterCategoryMapping struct { name string fieldName string @@ -59,7 +59,7 @@ func (q *SuggesterCategoryMapping) Source() (interface{}, error) { // -- SuggesterCategoryQuery -- // SuggesterCategoryQuery provides querying a category context in a suggester. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/suggester-context.html#_category_query. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/suggester-context.html#_category_query. type SuggesterCategoryQuery struct { name string values map[string]*int @@ -117,3 +117,38 @@ func (q *SuggesterCategoryQuery) Source() (interface{}, error) { return source, nil } + +type SuggesterCategoryIndex struct { + name string + values []string +} + +// NewSuggesterCategoryIndex creates a new SuggesterCategoryIndex. +func NewSuggesterCategoryIndex(name string, values ...string) *SuggesterCategoryIndex { + q := &SuggesterCategoryIndex{ + name: name, + values: values, + } + return q +} + +func (q *SuggesterCategoryIndex) Values(values ...string) *SuggesterCategoryIndex { + q.values = append(q.values, values...) + return q +} + +// Source returns a map that will be used to serialize the context query as JSON. +func (q *SuggesterCategoryIndex) Source() (interface{}, error) { + source := make(map[string]interface{}) + + switch len(q.values) { + case 0: + source[q.name] = make([]string, 0) + case 1: + source[q.name] = q.values[0] + default: + source[q.name] = q.values + } + + return source, nil +} diff --git a/vendor/gopkg.in/olivere/elastic.v6/suggester_context_geo.go b/vendor/github.com/olivere/elastic/v7/suggester_context_geo.go similarity index 56% rename from vendor/gopkg.in/olivere/elastic.v6/suggester_context_geo.go rename to vendor/github.com/olivere/elastic/v7/suggester_context_geo.go index 88b8cdb2f1cc269586a1bf5bb80f7689dcc83bd5..82ddd5735845afcc66bfea2c1032fd1f992c83fe 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/suggester_context_geo.go +++ b/vendor/github.com/olivere/elastic/v7/suggester_context_geo.go @@ -7,7 +7,7 @@ package elastic // -- SuggesterGeoMapping -- // SuggesterGeoMapping provides a mapping for a geolocation context in a suggester. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/suggester-context.html#_geo_location_mapping. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/suggester-context.html#_geo_location_mapping. type SuggesterGeoMapping struct { name string defaultLocations []*GeoPoint @@ -80,24 +80,36 @@ func (q *SuggesterGeoMapping) Source() (interface{}, error) { // -- SuggesterGeoQuery -- // SuggesterGeoQuery provides querying a geolocation context in a suggester. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/suggester-context.html#_geo_location_query +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/suggester-context.html#_geo_location_query type SuggesterGeoQuery struct { - name string - location *GeoPoint - precision []string + name string + location *GeoPoint + precision string + neighbours []string + boost *int } // NewSuggesterGeoQuery creates a new SuggesterGeoQuery. func NewSuggesterGeoQuery(name string, location *GeoPoint) *SuggesterGeoQuery { return &SuggesterGeoQuery{ - name: name, - location: location, - precision: make([]string, 0), + name: name, + location: location, + neighbours: make([]string, 0), } } -func (q *SuggesterGeoQuery) Precision(precision ...string) *SuggesterGeoQuery { - q.precision = append(q.precision, precision...) +func (q *SuggesterGeoQuery) Precision(precision string) *SuggesterGeoQuery { + q.precision = precision + return q +} + +func (q *SuggesterGeoQuery) Neighbours(neighbours ...string) *SuggesterGeoQuery { + q.neighbours = append(q.neighbours, neighbours...) + return q +} + +func (q *SuggesterGeoQuery) Boost(boost int) *SuggesterGeoQuery { + q.boost = &boost return q } @@ -105,25 +117,61 @@ func (q *SuggesterGeoQuery) Precision(precision ...string) *SuggesterGeoQuery { func (q *SuggesterGeoQuery) Source() (interface{}, error) { source := make(map[string]interface{}) - if len(q.precision) == 0 { - if q.location != nil { - source[q.name] = q.location.Source() - } - } else { - x := make(map[string]interface{}) - source[q.name] = x + x := make(map[string]interface{}) + source[q.name] = x - if q.location != nil { - x["value"] = q.location.Source() - } + if q.location != nil { + x["context"] = q.location.Source() + } + if q.precision != "" { + x["precision"] = q.precision + } + if q.boost != nil { + x["boost"] = q.boost + } + switch len(q.neighbours) { + case 0: + case 1: + x["neighbours"] = q.neighbours[0] + default: + x["neighbours"] = q.neighbours + } + + return source, nil +} + +type SuggesterGeoIndex struct { + name string + locations []*GeoPoint +} - switch len(q.precision) { - case 0: - case 1: - x["precision"] = q.precision[0] - default: - x["precision"] = q.precision +// NewSuggesterGeoQuery creates a new SuggesterGeoQuery. +func NewSuggesterGeoIndex(name string) *SuggesterGeoIndex { + return &SuggesterGeoIndex{ + name: name, + } +} + +func (q *SuggesterGeoIndex) Locations(locations ...*GeoPoint) *SuggesterGeoIndex { + q.locations = append(q.locations, locations...) + return q +} + +// Source returns a map that will be used to serialize the context query as JSON. +func (q *SuggesterGeoIndex) Source() (interface{}, error) { + source := make(map[string]interface{}) + + switch len(q.locations) { + case 0: + source[q.name] = make([]string, 0) + case 1: + source[q.name] = q.locations[0].Source() + default: + var arr []interface{} + for _, p := range q.locations { + arr = append(arr, p.Source()) } + source[q.name] = arr } return source, nil diff --git a/vendor/gopkg.in/olivere/elastic.v6/suggester_phrase.go b/vendor/github.com/olivere/elastic/v7/suggester_phrase.go similarity index 94% rename from vendor/gopkg.in/olivere/elastic.v6/suggester_phrase.go rename to vendor/github.com/olivere/elastic/v7/suggester_phrase.go index 2fc9420fb14b67b5231027bfba38e27f12e9f4fa..82ce443b70971426f6f76abeaf16622d023d6dd2 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/suggester_phrase.go +++ b/vendor/github.com/olivere/elastic/v7/suggester_phrase.go @@ -7,7 +7,7 @@ package elastic // PhraseSuggester provides an API to access word alternatives // on a per token basis within a certain string distance. // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-suggesters-phrase.html. +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-suggesters-phrase.html. type PhraseSuggester struct { Suggester name string @@ -29,7 +29,7 @@ type PhraseSuggester struct { forceUnigrams *bool tokenLimit *int preTag, postTag *string - collateQuery *string + collateQuery *Script collatePreference *string collateParams map[string]interface{} collatePrune *bool @@ -154,8 +154,8 @@ func (q *PhraseSuggester) Highlight(preTag, postTag string) *PhraseSuggester { return q } -func (q *PhraseSuggester) CollateQuery(collateQuery string) *PhraseSuggester { - q.collateQuery = &collateQuery +func (q *PhraseSuggester) CollateQuery(collateQuery *Script) *PhraseSuggester { + q.collateQuery = collateQuery return q } @@ -282,7 +282,11 @@ func (q *PhraseSuggester) Source(includeName bool) (interface{}, error) { collate := make(map[string]interface{}) suggester["collate"] = collate if q.collateQuery != nil { - collate["query"] = *q.collateQuery + src, err := q.collateQuery.Source() + if err != nil { + return nil, err + } + collate["query"] = src } if q.collatePreference != nil { collate["preference"] = *q.collatePreference @@ -312,7 +316,7 @@ type SmoothingModel interface { } // StupidBackoffSmoothingModel implements a stupid backoff smoothing model. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-suggesters-phrase.html#_smoothing_models +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-suggesters-phrase.html#_smoothing_models // for details about smoothing models. type StupidBackoffSmoothingModel struct { discount float64 @@ -337,7 +341,7 @@ func (sm *StupidBackoffSmoothingModel) Source() (interface{}, error) { // -- // LaplaceSmoothingModel implements a laplace smoothing model. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-suggesters-phrase.html#_smoothing_models +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-suggesters-phrase.html#_smoothing_models // for details about smoothing models. type LaplaceSmoothingModel struct { alpha float64 @@ -363,7 +367,7 @@ func (sm *LaplaceSmoothingModel) Source() (interface{}, error) { // LinearInterpolationSmoothingModel implements a linear interpolation // smoothing model. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-suggesters-phrase.html#_smoothing_models +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-suggesters-phrase.html#_smoothing_models // for details about smoothing models. type LinearInterpolationSmoothingModel struct { trigramLamda float64 @@ -399,7 +403,7 @@ type CandidateGenerator interface { } // DirectCandidateGenerator implements a direct candidate generator. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-suggesters-phrase.html#_smoothing_models +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-suggesters-phrase.html#_smoothing_models // for details about smoothing models. type DirectCandidateGenerator struct { field string diff --git a/vendor/gopkg.in/olivere/elastic.v6/suggester_term.go b/vendor/github.com/olivere/elastic/v7/suggester_term.go similarity index 97% rename from vendor/gopkg.in/olivere/elastic.v6/suggester_term.go rename to vendor/github.com/olivere/elastic/v7/suggester_term.go index fc51280d6ae6d45c641048d9ada22551744a5acc..ecb6d9e872b1d0d41aa67fa85031698612c28a64 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/suggester_term.go +++ b/vendor/github.com/olivere/elastic/v7/suggester_term.go @@ -6,7 +6,7 @@ package elastic // TermSuggester suggests terms based on edit distance. // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-suggesters-term.html. +// https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-suggesters-term.html. type TermSuggester struct { Suggester name string @@ -217,7 +217,7 @@ func (q *TermSuggester) Source(includeName bool) (interface{}, error) { suggester["prefix_length"] = *q.prefixLength } if q.minWordLength != nil { - suggester["min_word_len"] = *q.minWordLength + suggester["min_word_length"] = *q.minWordLength } if q.minDocFreq != nil { suggester["min_doc_freq"] = *q.minDocFreq diff --git a/vendor/github.com/olivere/elastic/v7/tasks_cancel.go b/vendor/github.com/olivere/elastic/v7/tasks_cancel.go new file mode 100644 index 0000000000000000000000000000000000000000..1294004443a3583db9b6d2b913e46d3648e05975 --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/tasks_cancel.go @@ -0,0 +1,207 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/http" + "net/url" + "strings" + + "github.com/olivere/elastic/v7/uritemplates" +) + +// TasksCancelService can cancel long-running tasks. +// It is supported as of Elasticsearch 2.3.0. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/tasks.html#task-cancellation +// for details. +type TasksCancelService struct { + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + + taskId string + actions []string + nodeId []string + parentTaskId string +} + +// NewTasksCancelService creates a new TasksCancelService. +func NewTasksCancelService(client *Client) *TasksCancelService { + return &TasksCancelService{ + client: client, + } +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *TasksCancelService) Pretty(pretty bool) *TasksCancelService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *TasksCancelService) Human(human bool) *TasksCancelService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *TasksCancelService) ErrorTrace(errorTrace bool) *TasksCancelService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *TasksCancelService) FilterPath(filterPath ...string) *TasksCancelService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *TasksCancelService) Header(name string, value string) *TasksCancelService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *TasksCancelService) Headers(headers http.Header) *TasksCancelService { + s.headers = headers + return s +} + +// TaskId specifies the task to cancel. Notice that the caller is responsible +// for using the correct format, i.e. node_id:task_number, as specified in +// the REST API. +func (s *TasksCancelService) TaskId(taskId string) *TasksCancelService { + s.taskId = taskId + return s +} + +// TaskIdFromNodeAndId specifies the task to cancel. Set id to -1 for all tasks. +func (s *TasksCancelService) TaskIdFromNodeAndId(nodeId string, id int64) *TasksCancelService { + if id != -1 { + s.taskId = fmt.Sprintf("%s:%d", nodeId, id) + } + return s +} + +// Actions is a list of actions that should be cancelled. Leave empty to cancel all. +func (s *TasksCancelService) Actions(actions ...string) *TasksCancelService { + s.actions = append(s.actions, actions...) + return s +} + +// NodeId is a list of node IDs or names to limit the returned information; +// use `_local` to return information from the node you're connecting to, +// leave empty to get information from all nodes. +func (s *TasksCancelService) NodeId(nodeId ...string) *TasksCancelService { + s.nodeId = append(s.nodeId, nodeId...) + return s +} + +// ParentTaskId specifies to cancel tasks with specified parent task id. +// Notice that the caller is responsible for using the correct format, +// i.e. node_id:task_number, as specified in the REST API. +func (s *TasksCancelService) ParentTaskId(parentTaskId string) *TasksCancelService { + s.parentTaskId = parentTaskId + return s +} + +// ParentTaskIdFromNodeAndId specifies to cancel tasks with specified parent task id. +func (s *TasksCancelService) ParentTaskIdFromNodeAndId(nodeId string, id int64) *TasksCancelService { + if id != -1 { + s.parentTaskId = fmt.Sprintf("%s:%d", nodeId, id) + } + return s +} + +// buildURL builds the URL for the operation. +func (s *TasksCancelService) buildURL() (string, url.Values, error) { + // Build URL + var err error + var path string + if s.taskId != "" { + path, err = uritemplates.Expand("/_tasks/{task_id}/_cancel", map[string]string{ + "task_id": s.taskId, + }) + } else { + path = "/_tasks/_cancel" + } + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } + if len(s.actions) > 0 { + params.Set("actions", strings.Join(s.actions, ",")) + } + if len(s.nodeId) > 0 { + params.Set("nodes", strings.Join(s.nodeId, ",")) + } + if s.parentTaskId != "" { + params.Set("parent_task_id", s.parentTaskId) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *TasksCancelService) Validate() error { + return nil +} + +// Do executes the operation. +func (s *TasksCancelService) Do(ctx context.Context) (*TasksListResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "POST", + Path: path, + Params: params, + Headers: s.headers, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(TasksListResponse) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} diff --git a/vendor/github.com/olivere/elastic/v7/tasks_get_task.go b/vendor/github.com/olivere/elastic/v7/tasks_get_task.go new file mode 100644 index 0000000000000000000000000000000000000000..d9f8a8b1e753c5dd2636e63e61e7907d155e2445 --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/tasks_get_task.go @@ -0,0 +1,169 @@ +package elastic + +import ( + "context" + "fmt" + "net/http" + "net/url" + "strings" + + "github.com/olivere/elastic/v7/uritemplates" +) + +// TasksGetTaskService retrieves the state of a task in the cluster. It is part of the Task Management API +// documented at https://www.elastic.co/guide/en/elasticsearch/reference/7.0/tasks.html#_current_tasks_information. +type TasksGetTaskService struct { + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + + taskId string + waitForCompletion *bool +} + +// NewTasksGetTaskService creates a new TasksGetTaskService. +func NewTasksGetTaskService(client *Client) *TasksGetTaskService { + return &TasksGetTaskService{ + client: client, + } +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *TasksGetTaskService) Pretty(pretty bool) *TasksGetTaskService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *TasksGetTaskService) Human(human bool) *TasksGetTaskService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *TasksGetTaskService) ErrorTrace(errorTrace bool) *TasksGetTaskService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *TasksGetTaskService) FilterPath(filterPath ...string) *TasksGetTaskService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *TasksGetTaskService) Header(name string, value string) *TasksGetTaskService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *TasksGetTaskService) Headers(headers http.Header) *TasksGetTaskService { + s.headers = headers + return s +} + +// TaskId specifies the task to return. Notice that the caller is responsible +// for using the correct format, i.e. node_id:task_number, as specified in +// the REST API. +func (s *TasksGetTaskService) TaskId(taskId string) *TasksGetTaskService { + s.taskId = taskId + return s +} + +// TaskIdFromNodeAndId indicates to return the task on the given node with specified id. +func (s *TasksGetTaskService) TaskIdFromNodeAndId(nodeId string, id int64) *TasksGetTaskService { + s.taskId = fmt.Sprintf("%s:%d", nodeId, id) + return s +} + +// WaitForCompletion indicates whether to wait for the matching tasks +// to complete (default: false). +func (s *TasksGetTaskService) WaitForCompletion(waitForCompletion bool) *TasksGetTaskService { + s.waitForCompletion = &waitForCompletion + return s +} + +// buildURL builds the URL for the operation. +func (s *TasksGetTaskService) buildURL() (string, url.Values, error) { + // Build URL + path, err := uritemplates.Expand("/_tasks/{task_id}", map[string]string{ + "task_id": s.taskId, + }) + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } + if v := s.waitForCompletion; v != nil { + params.Set("wait_for_completion", fmt.Sprint(*v)) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *TasksGetTaskService) Validate() error { + return nil +} + +// Do executes the operation. +func (s *TasksGetTaskService) Do(ctx context.Context) (*TasksGetTaskResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "GET", + Path: path, + Params: params, + Headers: s.headers, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(TasksGetTaskResponse) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + ret.Header = res.Header + return ret, nil +} + +type TasksGetTaskResponse struct { + Header http.Header `json:"-"` + Completed bool `json:"completed"` + Task *TaskInfo `json:"task,omitempty"` + Error *ErrorDetails `json:"error,omitempty"` +} diff --git a/vendor/gopkg.in/olivere/elastic.v6/tasks_list.go b/vendor/github.com/olivere/elastic/v7/tasks_list.go similarity index 59% rename from vendor/gopkg.in/olivere/elastic.v6/tasks_list.go rename to vendor/github.com/olivere/elastic/v7/tasks_list.go index bbbe9af6aeab285439276316c90194c68fad5f52..dc1ad495cf4b7297f526ec255be43c9f921705ce 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/tasks_list.go +++ b/vendor/github.com/olivere/elastic/v7/tasks_list.go @@ -7,27 +7,32 @@ package elastic import ( "context" "fmt" + "net/http" "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // TasksListService retrieves the list of currently executing tasks // on one ore more nodes in the cluster. It is part of the Task Management API -// documented at https://www.elastic.co/guide/en/elasticsearch/reference/6.2/tasks.html. +// documented at https://www.elastic.co/guide/en/elasticsearch/reference/7.0/tasks.html. // // It is supported as of Elasticsearch 2.3.0. type TasksListService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + taskId []string actions []string detailed *bool - human *bool nodeId []string - parentNode string - parentTaskId *string + parentTaskId string waitForCompletion *bool groupBy string } @@ -39,7 +44,49 @@ func NewTasksListService(client *Client) *TasksListService { } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *TasksListService) Pretty(pretty bool) *TasksListService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *TasksListService) Human(human bool) *TasksListService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *TasksListService) ErrorTrace(errorTrace bool) *TasksListService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *TasksListService) FilterPath(filterPath ...string) *TasksListService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *TasksListService) Header(name string, value string) *TasksListService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *TasksListService) Headers(headers http.Header) *TasksListService { + s.headers = headers + return s +} + // TaskId indicates to returns the task(s) with specified id(s). +// Notice that the caller is responsible for using the correct format, +// i.e. node_id:task_number, as specified in the REST API. func (s *TasksListService) TaskId(taskId ...string) *TasksListService { s.taskId = append(s.taskId, taskId...) return s @@ -57,12 +104,6 @@ func (s *TasksListService) Detailed(detailed bool) *TasksListService { return s } -// Human indicates whether to return time and byte values in human-readable format. -func (s *TasksListService) Human(human bool) *TasksListService { - s.human = &human - return s -} - // NodeId is a list of node IDs or names to limit the returned information; // use `_local` to return information from the node you're connecting to, // leave empty to get information from all nodes. @@ -71,15 +112,11 @@ func (s *TasksListService) NodeId(nodeId ...string) *TasksListService { return s } -// ParentNode returns tasks with specified parent node. -func (s *TasksListService) ParentNode(parentNode string) *TasksListService { - s.parentNode = parentNode - return s -} - -// ParentTaskId returns tasks with specified parent task id (node_id:task_number). Set to -1 to return all. +// ParentTaskId returns tasks with specified parent task id. +// Notice that the caller is responsible for using the correct format, +// i.e. node_id:task_number, as specified in the REST API. func (s *TasksListService) ParentTaskId(parentTaskId string) *TasksListService { - s.parentTaskId = &parentTaskId + s.parentTaskId = parentTaskId return s } @@ -91,18 +128,12 @@ func (s *TasksListService) WaitForCompletion(waitForCompletion bool) *TasksListS } // GroupBy groups tasks by nodes or parent/child relationships. -// As of now, it can either be "nodes" (default) or "parents". +// As of now, it can either be "nodes" (default) or "parents" or "none". func (s *TasksListService) GroupBy(groupBy string) *TasksListService { s.groupBy = groupBy return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *TasksListService) Pretty(pretty bool) *TasksListService { - s.pretty = pretty - return s -} - // buildURL builds the URL for the operation. func (s *TasksListService) buildURL() (string, url.Values, error) { // Build URL @@ -121,29 +152,32 @@ func (s *TasksListService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if len(s.actions) > 0 { params.Set("actions", strings.Join(s.actions, ",")) } - if s.detailed != nil { - params.Set("detailed", fmt.Sprintf("%v", *s.detailed)) - } - if s.human != nil { - params.Set("human", fmt.Sprintf("%v", *s.human)) + if v := s.detailed; v != nil { + params.Set("detailed", fmt.Sprint(*v)) } if len(s.nodeId) > 0 { - params.Set("node_id", strings.Join(s.nodeId, ",")) - } - if s.parentNode != "" { - params.Set("parent_node", s.parentNode) + params.Set("nodes", strings.Join(s.nodeId, ",")) } - if s.parentTaskId != nil { - params.Set("parent_task_id", *s.parentTaskId) + if s.parentTaskId != "" { + params.Set("parent_task_id", s.parentTaskId) } - if s.waitForCompletion != nil { - params.Set("wait_for_completion", fmt.Sprintf("%v", *s.waitForCompletion)) + if v := s.waitForCompletion; v != nil { + params.Set("wait_for_completion", fmt.Sprint(*v)) } if s.groupBy != "" { params.Set("group_by", s.groupBy) @@ -171,9 +205,10 @@ func (s *TasksListService) Do(ctx context.Context) (*TasksListResponse, error) { // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, + Method: "GET", + Path: path, + Params: params, + Headers: s.headers, }) if err != nil { return nil, err @@ -184,11 +219,13 @@ func (s *TasksListService) Do(ctx context.Context) (*TasksListResponse, error) { if err := s.client.decoder.Decode(res.Body, ret); err != nil { return nil, err } + ret.Header = res.Header return ret, nil } // TasksListResponse is the response of TasksListService.Do. type TasksListResponse struct { + Header http.Header `json:"-"` TaskFailures []*TaskOperationFailure `json:"task_failures"` NodeFailures []*FailedNodeException `json:"node_failures"` // Nodes returns the tasks per node. The key is the node id. @@ -220,22 +257,24 @@ type DiscoveryNode struct { // TaskInfo represents information about a currently running task. type TaskInfo struct { - Node string `json:"node"` - Id int64 `json:"id"` // the task id (yes, this is a long in the Java source) - Type string `json:"type"` - Action string `json:"action"` - Status interface{} `json:"status"` // has separate implementations of Task.Status in Java for reindexing, replication, and "RawTaskStatus" - Description interface{} `json:"description"` // same as Status - StartTime string `json:"start_time"` - StartTimeInMillis int64 `json:"start_time_in_millis"` - RunningTime string `json:"running_time"` - RunningTimeInNanos int64 `json:"running_time_in_nanos"` - Cancellable bool `json:"cancellable"` - ParentTaskId string `json:"parent_task_id"` // like "YxJnVYjwSBm_AUbzddTajQ:12356" + Node string `json:"node"` + Id int64 `json:"id"` // the task id (yes, this is a long in the Java source) + Type string `json:"type"` + Action string `json:"action"` + Status interface{} `json:"status"` // has separate implementations of Task.Status in Java for reindexing, replication, and "RawTaskStatus" + Description interface{} `json:"description"` // same as Status + StartTime string `json:"start_time"` + StartTimeInMillis int64 `json:"start_time_in_millis"` + RunningTime string `json:"running_time"` + RunningTimeInNanos int64 `json:"running_time_in_nanos"` + Cancellable bool `json:"cancellable"` + ParentTaskId string `json:"parent_task_id"` // like "YxJnVYjwSBm_AUbzddTajQ:12356" + Headers map[string]string `json:"headers"` } // StartTaskResult is used in cases where a task gets started asynchronously and // the operation simply returnes a TaskID to watch for via the Task Management API. type StartTaskResult struct { - TaskId string `json:"task"` + Header http.Header `json:"-"` + TaskId string `json:"task"` } diff --git a/vendor/gopkg.in/olivere/elastic.v6/termvectors.go b/vendor/github.com/olivere/elastic/v7/termvectors.go similarity index 79% rename from vendor/gopkg.in/olivere/elastic.v6/termvectors.go rename to vendor/github.com/olivere/elastic/v7/termvectors.go index a3b48752f622f4a436a4f3fb7e3670f8030be299..a196810633495bd24e079cdf51e70f074f54ce5a 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/termvectors.go +++ b/vendor/github.com/olivere/elastic/v7/termvectors.go @@ -7,21 +7,28 @@ package elastic import ( "context" "fmt" + "net/http" "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // TermvectorsService returns information and statistics on terms in the // fields of a particular document. The document could be stored in the // index or artificially provided by the user. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-termvectors.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/docs-termvectors.html // for documentation. type TermvectorsService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + id string index string typ string @@ -52,6 +59,46 @@ func NewTermvectorsService(client *Client) *TermvectorsService { } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *TermvectorsService) Pretty(pretty bool) *TermvectorsService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *TermvectorsService) Human(human bool) *TermvectorsService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *TermvectorsService) ErrorTrace(errorTrace bool) *TermvectorsService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *TermvectorsService) FilterPath(filterPath ...string) *TermvectorsService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *TermvectorsService) Header(name string, value string) *TermvectorsService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *TermvectorsService) Headers(headers http.Header) *TermvectorsService { + s.headers = headers + return s +} + // Index in which the document resides. func (s *TermvectorsService) Index(index string) *TermvectorsService { s.index = index @@ -59,6 +106,8 @@ func (s *TermvectorsService) Index(index string) *TermvectorsService { } // Type of the document. +// +// Deprecated: Types are in the process of being removed. func (s *TermvectorsService) Type(typ string) *TermvectorsService { s.typ = typ return s @@ -175,12 +224,6 @@ func (s *TermvectorsService) VersionType(versionType string) *TermvectorsService return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *TermvectorsService) Pretty(pretty bool) *TermvectorsService { - s.pretty = pretty - return s -} - // BodyJson defines the body parameters. See documentation. func (s *TermvectorsService) BodyJson(body interface{}) *TermvectorsService { s.bodyJson = body @@ -197,60 +240,75 @@ func (s *TermvectorsService) BodyString(body string) *TermvectorsService { func (s *TermvectorsService) buildURL() (string, url.Values, error) { var pathParam = map[string]string{ "index": s.index, - "type": s.typ, } - var path string + path := "/{index}" var err error - // Build URL + if s.typ != "" { + pathParam["type"] = s.typ + path += "/{type}" + } else { + path += "/_termvectors" + } if s.id != "" { pathParam["id"] = s.id - path, err = uritemplates.Expand("/{index}/{type}/{id}/_termvectors", pathParam) - } else { - path, err = uritemplates.Expand("/{index}/{type}/_termvectors", pathParam) + path += "/{id}" + } + if s.typ != "" { + path += "/_termvectors" } + path, err = uritemplates.Expand(path, pathParam) if err != nil { return "", url.Values{}, err } // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) } - if s.dfs != nil { - params.Set("dfs", fmt.Sprintf("%v", *s.dfs)) + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) } - if s.fieldStatistics != nil { - params.Set("field_statistics", fmt.Sprintf("%v", *s.fieldStatistics)) + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } + if v := s.dfs; v != nil { + params.Set("dfs", fmt.Sprint(*v)) + } + if v := s.fieldStatistics; v != nil { + params.Set("field_statistics", fmt.Sprint(*v)) } if len(s.fields) > 0 { params.Set("fields", strings.Join(s.fields, ",")) } - if s.offsets != nil { - params.Set("offsets", fmt.Sprintf("%v", *s.offsets)) + if v := s.offsets; v != nil { + params.Set("offsets", fmt.Sprint(*v)) } if s.parent != "" { params.Set("parent", s.parent) } - if s.payloads != nil { - params.Set("payloads", fmt.Sprintf("%v", *s.payloads)) + if v := s.payloads; v != nil { + params.Set("payloads", fmt.Sprint(*v)) } - if s.positions != nil { - params.Set("positions", fmt.Sprintf("%v", *s.positions)) + if v := s.positions; v != nil { + params.Set("positions", fmt.Sprint(*v)) } if s.preference != "" { params.Set("preference", s.preference) } - if s.realtime != nil { - params.Set("realtime", fmt.Sprintf("%v", *s.realtime)) + if v := s.realtime; v != nil { + params.Set("realtime", fmt.Sprint(*v)) } if s.routing != "" { params.Set("routing", s.routing) } - if s.termStatistics != nil { - params.Set("term_statistics", fmt.Sprintf("%v", *s.termStatistics)) + if v := s.termStatistics; v != nil { + params.Set("term_statistics", fmt.Sprint(*v)) } if s.version != nil { params.Set("version", fmt.Sprintf("%v", s.version)) @@ -267,9 +325,6 @@ func (s *TermvectorsService) Validate() error { if s.index == "" { invalid = append(invalid, "Index") } - if s.typ == "" { - invalid = append(invalid, "Type") - } if len(invalid) > 0 { return fmt.Errorf("missing required fields: %v", invalid) } @@ -317,10 +372,11 @@ func (s *TermvectorsService) Do(ctx context.Context) (*TermvectorsResponse, erro // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, - Body: body, + Method: "GET", + Path: path, + Params: params, + Body: body, + Headers: s.headers, }) if err != nil { return nil, err @@ -338,7 +394,7 @@ func (s *TermvectorsService) Do(ctx context.Context) (*TermvectorsResponse, erro // TermvectorsFilterSettings adds additional filters to a Termsvector request. // It allows to filter terms based on their tf-idf scores. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-termvectors.html#_terms_filtering +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/docs-termvectors.html#_terms_filtering // for more information. type TermvectorsFilterSettings struct { maxNumTerms *int64 diff --git a/vendor/github.com/olivere/elastic/v7/update.go b/vendor/github.com/olivere/elastic/v7/update.go new file mode 100644 index 0000000000000000000000000000000000000000..468032e6a0e3b3f48d581abc86bf83d4690cb1ac --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/update.go @@ -0,0 +1,412 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/http" + "net/url" + "strings" + + "github.com/olivere/elastic/v7/uritemplates" +) + +// UpdateService updates a document in Elasticsearch. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/docs-update.html +// for details. +type UpdateService struct { + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + + index string + typ string + id string + routing string + parent string + script *Script + fields []string + fsc *FetchSourceContext + version *int64 + versionType string + retryOnConflict *int + refresh string + waitForActiveShards string + upsert interface{} + scriptedUpsert *bool + docAsUpsert *bool + detectNoop *bool + doc interface{} + timeout string + ifSeqNo *int64 + ifPrimaryTerm *int64 +} + +// NewUpdateService creates the service to update documents in Elasticsearch. +func NewUpdateService(client *Client) *UpdateService { + return &UpdateService{ + client: client, + typ: "_doc", + fields: make([]string, 0), + } +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *UpdateService) Pretty(pretty bool) *UpdateService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *UpdateService) Human(human bool) *UpdateService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *UpdateService) ErrorTrace(errorTrace bool) *UpdateService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *UpdateService) FilterPath(filterPath ...string) *UpdateService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *UpdateService) Header(name string, value string) *UpdateService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *UpdateService) Headers(headers http.Header) *UpdateService { + s.headers = headers + return s +} + +// Index is the name of the Elasticsearch index (required). +func (s *UpdateService) Index(name string) *UpdateService { + s.index = name + return s +} + +// Type is the type of the document. +// +// Deprecated: Types are in the process of being removed. +func (s *UpdateService) Type(typ string) *UpdateService { + s.typ = typ + return s +} + +// Id is the identifier of the document to update (required). +func (s *UpdateService) Id(id string) *UpdateService { + s.id = id + return s +} + +// Routing specifies a specific routing value. +func (s *UpdateService) Routing(routing string) *UpdateService { + s.routing = routing + return s +} + +// Parent sets the id of the parent document. +func (s *UpdateService) Parent(parent string) *UpdateService { + s.parent = parent + return s +} + +// Script is the script definition. +func (s *UpdateService) Script(script *Script) *UpdateService { + s.script = script + return s +} + +// RetryOnConflict specifies how many times the operation should be retried +// when a conflict occurs (default: 0). +func (s *UpdateService) RetryOnConflict(retryOnConflict int) *UpdateService { + s.retryOnConflict = &retryOnConflict + return s +} + +// Fields is a list of fields to return in the response. +func (s *UpdateService) Fields(fields ...string) *UpdateService { + s.fields = make([]string, 0, len(fields)) + s.fields = append(s.fields, fields...) + return s +} + +// Version defines the explicit version number for concurrency control. +func (s *UpdateService) Version(version int64) *UpdateService { + s.version = &version + return s +} + +// VersionType is e.g. "internal". +func (s *UpdateService) VersionType(versionType string) *UpdateService { + s.versionType = versionType + return s +} + +// Refresh the index after performing the update. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/docs-refresh.html +// for details. +func (s *UpdateService) Refresh(refresh string) *UpdateService { + s.refresh = refresh + return s +} + +// WaitForActiveShards sets the number of shard copies that must be active before +// proceeding with the update operation. Defaults to 1, meaning the primary shard only. +// Set to `all` for all shard copies, otherwise set to any non-negative value less than +// or equal to the total number of copies for the shard (number of replicas + 1). +func (s *UpdateService) WaitForActiveShards(waitForActiveShards string) *UpdateService { + s.waitForActiveShards = waitForActiveShards + return s +} + +// Doc allows for updating a partial document. +func (s *UpdateService) Doc(doc interface{}) *UpdateService { + s.doc = doc + return s +} + +// Upsert can be used to index the document when it doesn't exist yet. +// Use this e.g. to initialize a document with a default value. +func (s *UpdateService) Upsert(doc interface{}) *UpdateService { + s.upsert = doc + return s +} + +// DocAsUpsert can be used to insert the document if it doesn't already exist. +func (s *UpdateService) DocAsUpsert(docAsUpsert bool) *UpdateService { + s.docAsUpsert = &docAsUpsert + return s +} + +// DetectNoop will instruct Elasticsearch to check if changes will occur +// when updating via Doc. It there aren't any changes, the request will +// turn into a no-op. +func (s *UpdateService) DetectNoop(detectNoop bool) *UpdateService { + s.detectNoop = &detectNoop + return s +} + +// ScriptedUpsert should be set to true if the referenced script +// (defined in Script or ScriptId) should be called to perform an insert. +// The default is false. +func (s *UpdateService) ScriptedUpsert(scriptedUpsert bool) *UpdateService { + s.scriptedUpsert = &scriptedUpsert + return s +} + +// Timeout is an explicit timeout for the operation, e.g. "1000", "1s" or "500ms". +func (s *UpdateService) Timeout(timeout string) *UpdateService { + s.timeout = timeout + return s +} + +// IfSeqNo indicates to only perform the update operation if the last +// operation that has changed the document has the specified sequence number. +func (s *UpdateService) IfSeqNo(seqNo int64) *UpdateService { + s.ifSeqNo = &seqNo + return s +} + +// IfPrimaryTerm indicates to only perform the update operation if the +// last operation that has changed the document has the specified primary term. +func (s *UpdateService) IfPrimaryTerm(primaryTerm int64) *UpdateService { + s.ifPrimaryTerm = &primaryTerm + return s +} + +// FetchSource asks Elasticsearch to return the updated _source in the response. +func (s *UpdateService) FetchSource(fetchSource bool) *UpdateService { + if s.fsc == nil { + s.fsc = NewFetchSourceContext(fetchSource) + } else { + s.fsc.SetFetchSource(fetchSource) + } + return s +} + +// FetchSourceContext indicates that _source should be returned in the response, +// allowing wildcard patterns to be defined via FetchSourceContext. +func (s *UpdateService) FetchSourceContext(fetchSourceContext *FetchSourceContext) *UpdateService { + s.fsc = fetchSourceContext + return s +} + +// url returns the URL part of the document request. +func (s *UpdateService) url() (string, url.Values, error) { + // Build url + var path string + var err error + if s.typ == "" || s.typ == "_doc" { + path, err = uritemplates.Expand("/{index}/_update/{id}", map[string]string{ + "index": s.index, + "id": s.id, + }) + } else { + path, err = uritemplates.Expand("/{index}/{type}/{id}/_update", map[string]string{ + "index": s.index, + "type": s.typ, + "id": s.id, + }) + } + if err != nil { + return "", url.Values{}, err + } + + // Parameters + params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } + if s.routing != "" { + params.Set("routing", s.routing) + } + if s.parent != "" { + params.Set("parent", s.parent) + } + if s.timeout != "" { + params.Set("timeout", s.timeout) + } + if s.refresh != "" { + params.Set("refresh", s.refresh) + } + if s.waitForActiveShards != "" { + params.Set("wait_for_active_shards", s.waitForActiveShards) + } + if len(s.fields) > 0 { + params.Set("fields", strings.Join(s.fields, ",")) + } + if s.version != nil { + params.Set("version", fmt.Sprintf("%d", *s.version)) + } + if s.versionType != "" { + params.Set("version_type", s.versionType) + } + if s.retryOnConflict != nil { + params.Set("retry_on_conflict", fmt.Sprintf("%v", *s.retryOnConflict)) + } + if v := s.ifSeqNo; v != nil { + params.Set("if_seq_no", fmt.Sprintf("%d", *v)) + } + if v := s.ifPrimaryTerm; v != nil { + params.Set("if_primary_term", fmt.Sprintf("%d", *v)) + } + return path, params, nil +} + +// body returns the body part of the document request. +func (s *UpdateService) body() (interface{}, error) { + source := make(map[string]interface{}) + + if s.script != nil { + src, err := s.script.Source() + if err != nil { + return nil, err + } + source["script"] = src + } + + if v := s.scriptedUpsert; v != nil { + source["scripted_upsert"] = *v + } + + if s.upsert != nil { + source["upsert"] = s.upsert + } + + if s.doc != nil { + source["doc"] = s.doc + } + if v := s.docAsUpsert; v != nil { + source["doc_as_upsert"] = *v + } + if v := s.detectNoop; v != nil { + source["detect_noop"] = *v + } + if s.fsc != nil { + src, err := s.fsc.Source() + if err != nil { + return nil, err + } + source["_source"] = src + } + + return source, nil +} + +// Do executes the update operation. +func (s *UpdateService) Do(ctx context.Context) (*UpdateResponse, error) { + path, params, err := s.url() + if err != nil { + return nil, err + } + + // Get body of the request + body, err := s.body() + if err != nil { + return nil, err + } + + // Get response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "POST", + Path: path, + Params: params, + Body: body, + Headers: s.headers, + }) + if err != nil { + return nil, err + } + + // Return result + ret := new(UpdateResponse) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// UpdateResponse is the result of updating a document in Elasticsearch. +type UpdateResponse struct { + Index string `json:"_index,omitempty"` + Type string `json:"_type,omitempty"` + Id string `json:"_id,omitempty"` + Version int64 `json:"_version,omitempty"` + Result string `json:"result,omitempty"` + Shards *ShardsInfo `json:"_shards,omitempty"` + SeqNo int64 `json:"_seq_no,omitempty"` + PrimaryTerm int64 `json:"_primary_term,omitempty"` + Status int `json:"status,omitempty"` + ForcedRefresh bool `json:"forced_refresh,omitempty"` + GetResult *GetResult `json:"get,omitempty"` +} diff --git a/vendor/gopkg.in/olivere/elastic.v6/update_by_query.go b/vendor/github.com/olivere/elastic/v7/update_by_query.go similarity index 85% rename from vendor/gopkg.in/olivere/elastic.v6/update_by_query.go rename to vendor/github.com/olivere/elastic/v7/update_by_query.go index cd35f02ccb520158551151ae1095b49f63415527..8fdffd349f4dfb3290d52b8c190387533599d862 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/update_by_query.go +++ b/vendor/github.com/olivere/elastic/v7/update_by_query.go @@ -7,16 +7,23 @@ package elastic import ( "context" "fmt" + "net/http" "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // UpdateByQueryService is documented at https://www.elastic.co/guide/en/elasticsearch/plugins/master/plugins-reindex.html. type UpdateByQueryService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + index []string typ []string script *Script @@ -75,6 +82,46 @@ func NewUpdateByQueryService(client *Client) *UpdateByQueryService { } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *UpdateByQueryService) Pretty(pretty bool) *UpdateByQueryService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *UpdateByQueryService) Human(human bool) *UpdateByQueryService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *UpdateByQueryService) ErrorTrace(errorTrace bool) *UpdateByQueryService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *UpdateByQueryService) FilterPath(filterPath ...string) *UpdateByQueryService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *UpdateByQueryService) Header(name string, value string) *UpdateByQueryService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *UpdateByQueryService) Headers(headers http.Header) *UpdateByQueryService { + s.headers = headers + return s +} + // Index is a list of index names to search; use `_all` or empty string to // perform the operation on all indices. func (s *UpdateByQueryService) Index(index ...string) *UpdateByQueryService { @@ -89,12 +136,6 @@ func (s *UpdateByQueryService) Type(typ ...string) *UpdateByQueryService { return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *UpdateByQueryService) Pretty(pretty bool) *UpdateByQueryService { - s.pretty = pretty - return s -} - // Script sets an update script. func (s *UpdateByQueryService) Script(script *Script) *UpdateByQueryService { s.script = script @@ -261,7 +302,7 @@ func (s *UpdateByQueryService) Query(query Query) *UpdateByQueryService { // Refresh indicates whether the effected indexes should be refreshed. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-refresh.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/docs-refresh.html // for details. func (s *UpdateByQueryService) Refresh(refresh string) *UpdateByQueryService { s.refresh = refresh @@ -322,9 +363,9 @@ func (s *UpdateByQueryService) Size(size int) *UpdateByQueryService { } // Slices represents the number of slices (default: 1). -// It used to be a number, but can be set to "auto" as of 6.3. +// It used to be a number, but can be set to "auto" as of 6.7. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.3/docs-update-by-query.html#docs-update-by-query-slice +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/docs-update-by-query.html#docs-update-by-query-slice // for details. func (s *UpdateByQueryService) Slices(slices interface{}) *UpdateByQueryService { s.slices = slices @@ -460,17 +501,26 @@ func (s *UpdateByQueryService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if len(s.xSource) > 0 { params.Set("_source", strings.Join(s.xSource, ",")) } if len(s.xSourceExclude) > 0 { - params.Set("_source_exclude", strings.Join(s.xSourceExclude, ",")) + params.Set("_source_excludes", strings.Join(s.xSourceExclude, ",")) } if len(s.xSourceInclude) > 0 { - params.Set("_source_include", strings.Join(s.xSourceInclude, ",")) + params.Set("_source_includes", strings.Join(s.xSourceInclude, ",")) } if s.allowNoIndices != nil { params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) @@ -478,8 +528,8 @@ func (s *UpdateByQueryService) buildURL() (string, url.Values, error) { if s.analyzer != "" { params.Set("analyzer", s.analyzer) } - if s.analyzeWildcard != nil { - params.Set("analyze_wildcard", fmt.Sprintf("%v", *s.analyzeWildcard)) + if v := s.analyzeWildcard; v != nil { + params.Set("analyze_wildcard", fmt.Sprint(*v)) } if s.conflicts != "" { params.Set("conflicts", s.conflicts) @@ -493,8 +543,8 @@ func (s *UpdateByQueryService) buildURL() (string, url.Values, error) { if s.expandWildcards != "" { params.Set("expand_wildcards", s.expandWildcards) } - if s.explain != nil { - params.Set("explain", fmt.Sprintf("%v", *s.explain)) + if v := s.explain; v != nil { + params.Set("explain", fmt.Sprint(*v)) } if len(s.storedFields) > 0 { params.Set("stored_fields", strings.Join(s.storedFields, ",")) @@ -508,14 +558,14 @@ func (s *UpdateByQueryService) buildURL() (string, url.Values, error) { if s.from != nil { params.Set("from", fmt.Sprintf("%d", *s.from)) } - if s.ignoreUnavailable != nil { - params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) + if v := s.ignoreUnavailable; v != nil { + params.Set("ignore_unavailable", fmt.Sprint(*v)) } - if s.lenient != nil { - params.Set("lenient", fmt.Sprintf("%v", *s.lenient)) + if v := s.lenient; v != nil { + params.Set("lenient", fmt.Sprint(*v)) } - if s.lowercaseExpandedTerms != nil { - params.Set("lowercase_expanded_terms", fmt.Sprintf("%v", *s.lowercaseExpandedTerms)) + if v := s.lowercaseExpandedTerms; v != nil { + params.Set("lowercase_expanded_terms", fmt.Sprint(*v)) } if s.pipeline != "" { params.Set("pipeline", s.pipeline) @@ -529,8 +579,8 @@ func (s *UpdateByQueryService) buildURL() (string, url.Values, error) { if s.refresh != "" { params.Set("refresh", s.refresh) } - if s.requestCache != nil { - params.Set("request_cache", fmt.Sprintf("%v", *s.requestCache)) + if v := s.requestCache; v != nil { + params.Set("request_cache", fmt.Sprint(*v)) } if len(s.routing) > 0 { params.Set("routing", strings.Join(s.routing, ",")) @@ -577,20 +627,20 @@ func (s *UpdateByQueryService) buildURL() (string, url.Values, error) { if s.timeout != "" { params.Set("timeout", s.timeout) } - if s.trackScores != nil { - params.Set("track_scores", fmt.Sprintf("%v", *s.trackScores)) + if v := s.trackScores; v != nil { + params.Set("track_scores", fmt.Sprint(*v)) } - if s.version != nil { - params.Set("version", fmt.Sprintf("%v", *s.version)) + if v := s.version; v != nil { + params.Set("version", fmt.Sprint(*v)) } - if s.versionType != nil { - params.Set("version_type", fmt.Sprintf("%v", *s.versionType)) + if v := s.versionType; v != nil { + params.Set("version_type", fmt.Sprint(*v)) } if s.waitForActiveShards != "" { params.Set("wait_for_active_shards", s.waitForActiveShards) } - if s.waitForCompletion != nil { - params.Set("wait_for_completion", fmt.Sprintf("%v", *s.waitForCompletion)) + if v := s.waitForCompletion; v != nil { + params.Set("wait_for_completion", fmt.Sprint(*v)) } if s.requestsPerSecond != nil { params.Set("requests_per_second", fmt.Sprintf("%v", *s.requestsPerSecond)) @@ -654,10 +704,12 @@ func (s *UpdateByQueryService) Do(ctx context.Context) (*BulkIndexByScrollRespon // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "POST", - Path: path, - Params: params, - Body: body, + Method: "POST", + Path: path, + Params: params, + Body: body, + Headers: s.headers, + IgnoreErrors: []int{http.StatusConflict}, }) if err != nil { return nil, err @@ -701,10 +753,12 @@ func (s *UpdateByQueryService) DoAsync(ctx context.Context) (*StartTaskResult, e // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "POST", - Path: path, - Params: params, - Body: body, + Method: "POST", + Path: path, + Params: params, + Body: body, + Headers: s.headers, + IgnoreErrors: []int{http.StatusConflict}, }) if err != nil { return nil, err diff --git a/vendor/github.com/olivere/elastic/uritemplates/LICENSE b/vendor/github.com/olivere/elastic/v7/uritemplates/LICENSE similarity index 100% rename from vendor/github.com/olivere/elastic/uritemplates/LICENSE rename to vendor/github.com/olivere/elastic/v7/uritemplates/LICENSE diff --git a/vendor/github.com/olivere/elastic/uritemplates/uritemplates.go b/vendor/github.com/olivere/elastic/v7/uritemplates/uritemplates.go similarity index 99% rename from vendor/github.com/olivere/elastic/uritemplates/uritemplates.go rename to vendor/github.com/olivere/elastic/v7/uritemplates/uritemplates.go index 8a84813fe52e3930f07f599b8b228c80201671e0..fdb9cb443e689c54698ab5eb2d3b613a2fffc1e5 100644 --- a/vendor/github.com/olivere/elastic/uritemplates/uritemplates.go +++ b/vendor/github.com/olivere/elastic/v7/uritemplates/uritemplates.go @@ -12,7 +12,7 @@ // values := make(map[string]interface{}) // values["user"] = "jtacoma" // values["repo"] = "uritemplates" -// expanded, _ := template.ExpandString(values) +// expanded, _ := template.Expand(values) // fmt.Printf(expanded) // package uritemplates diff --git a/vendor/github.com/olivere/elastic/uritemplates/utils.go b/vendor/github.com/olivere/elastic/v7/uritemplates/utils.go similarity index 100% rename from vendor/github.com/olivere/elastic/uritemplates/utils.go rename to vendor/github.com/olivere/elastic/v7/uritemplates/utils.go diff --git a/vendor/gopkg.in/olivere/elastic.v6/validate.go b/vendor/github.com/olivere/elastic/v7/validate.go similarity index 73% rename from vendor/gopkg.in/olivere/elastic.v6/validate.go rename to vendor/github.com/olivere/elastic/v7/validate.go index b232963260c9dc755ed6ff76eaf40146e0f928ce..7ed9158c33999e5300e51994adb1e176ac1836b9 100644 --- a/vendor/gopkg.in/olivere/elastic.v6/validate.go +++ b/vendor/github.com/olivere/elastic/v7/validate.go @@ -7,18 +7,25 @@ package elastic import ( "context" "fmt" + "net/http" "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "github.com/olivere/elastic/v7/uritemplates" ) // ValidateService allows a user to validate a potentially // expensive query without executing it. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-validate.html. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search-validate.html. type ValidateService struct { - client *Client - pretty bool + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + index []string typ []string q string @@ -44,13 +51,56 @@ func NewValidateService(client *Client) *ValidateService { } } +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *ValidateService) Pretty(pretty bool) *ValidateService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *ValidateService) Human(human bool) *ValidateService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *ValidateService) ErrorTrace(errorTrace bool) *ValidateService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *ValidateService) FilterPath(filterPath ...string) *ValidateService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *ValidateService) Header(name string, value string) *ValidateService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *ValidateService) Headers(headers http.Header) *ValidateService { + s.headers = headers + return s +} + // Index sets the names of the indices to use for search. func (s *ValidateService) Index(index ...string) *ValidateService { s.index = append(s.index, index...) return s } -// Types adds search restrictions for a list of types. +// Type adds search restrictions for a list of types. +// +// Deprecated: Types are in the process of being removed. Instead of using a type, prefer to +// filter on a field on the document. func (s *ValidateService) Type(typ ...string) *ValidateService { s.typ = append(s.typ, typ...) return s @@ -112,12 +162,6 @@ func (s *ValidateService) DefaultOperator(defaultOperator string) *ValidateServi return s } -// Pretty indicates that the JSON response be indented and human readable. -func (s *ValidateService) Pretty(pretty bool) *ValidateService { - s.pretty = pretty - return s -} - // Query sets a query definition using the Query DSL. func (s *ValidateService) Query(query Query) *ValidateService { src, err := query.Source() @@ -190,8 +234,17 @@ func (s *ValidateService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} - if s.pretty { - params.Set("pretty", "true") + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) } if s.explain != nil { params.Set("explain", fmt.Sprintf("%v", *s.explain)) @@ -205,14 +258,14 @@ func (s *ValidateService) buildURL() (string, url.Values, error) { if s.defaultOperator != "" { params.Set("default_operator", s.defaultOperator) } - if s.lenient != nil { - params.Set("lenient", fmt.Sprintf("%v", *s.lenient)) + if v := s.lenient; v != nil { + params.Set("lenient", fmt.Sprint(*v)) } if s.q != "" { params.Set("q", s.q) } - if s.analyzeWildcard != nil { - params.Set("analyze_wildcard", fmt.Sprintf("%v", *s.analyzeWildcard)) + if v := s.analyzeWildcard; v != nil { + params.Set("analyze_wildcard", fmt.Sprint(*v)) } if s.analyzer != "" { params.Set("analyzer", s.analyzer) @@ -220,14 +273,14 @@ func (s *ValidateService) buildURL() (string, url.Values, error) { if s.df != "" { params.Set("df", s.df) } - if s.allowNoIndices != nil { - params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) + if v := s.allowNoIndices; v != nil { + params.Set("allow_no_indices", fmt.Sprint(*v)) } if s.expandWildcards != "" { params.Set("expand_wildcards", s.expandWildcards) } - if s.ignoreUnavailable != nil { - params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) + if v := s.ignoreUnavailable; v != nil { + params.Set("ignore_unavailable", fmt.Sprint(*v)) } return path, params, nil } @@ -260,10 +313,11 @@ func (s *ValidateService) Do(ctx context.Context) (*ValidateResponse, error) { // Get HTTP response res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, - Body: body, + Method: "GET", + Path: path, + Params: params, + Body: body, + Headers: s.headers, }) if err != nil { return nil, err diff --git a/vendor/github.com/olivere/elastic/v7/xpack_ilm_delete_lifecycle.go b/vendor/github.com/olivere/elastic/v7/xpack_ilm_delete_lifecycle.go new file mode 100644 index 0000000000000000000000000000000000000000..bd60fde5049aad187d4ea9b06bb556189c188255 --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/xpack_ilm_delete_lifecycle.go @@ -0,0 +1,194 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/http" + "net/url" + "strings" + + "github.com/olivere/elastic/v7/uritemplates" +) + +// See the documentation at +// https://www.elastic.co/guide/en/elasticsearch/reference/6.7/ilm-get-lifecycle.html. +type XPackIlmDeleteLifecycleService struct { + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + + policy string + timeout string + masterTimeout string + flatSettings *bool + local *bool +} + +// NewXPackIlmDeleteLifecycleService creates a new XPackIlmDeleteLifecycleService. +func NewXPackIlmDeleteLifecycleService(client *Client) *XPackIlmDeleteLifecycleService { + return &XPackIlmDeleteLifecycleService{ + client: client, + } +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *XPackIlmDeleteLifecycleService) Pretty(pretty bool) *XPackIlmDeleteLifecycleService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *XPackIlmDeleteLifecycleService) Human(human bool) *XPackIlmDeleteLifecycleService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *XPackIlmDeleteLifecycleService) ErrorTrace(errorTrace bool) *XPackIlmDeleteLifecycleService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *XPackIlmDeleteLifecycleService) FilterPath(filterPath ...string) *XPackIlmDeleteLifecycleService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *XPackIlmDeleteLifecycleService) Header(name string, value string) *XPackIlmDeleteLifecycleService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *XPackIlmDeleteLifecycleService) Headers(headers http.Header) *XPackIlmDeleteLifecycleService { + s.headers = headers + return s +} + +// Policy is the name of the index lifecycle policy. +func (s *XPackIlmDeleteLifecycleService) Policy(policy string) *XPackIlmDeleteLifecycleService { + s.policy = policy + return s +} + +// Timeout is an explicit operation timeout. +func (s *XPackIlmDeleteLifecycleService) Timeout(timeout string) *XPackIlmDeleteLifecycleService { + s.timeout = timeout + return s +} + +// MasterTimeout specifies the timeout for connection to master. +func (s *XPackIlmDeleteLifecycleService) MasterTimeout(masterTimeout string) *XPackIlmDeleteLifecycleService { + s.masterTimeout = masterTimeout + return s +} + +// FlatSettings is returns settings in flat format (default: false). +func (s *XPackIlmDeleteLifecycleService) FlatSettings(flatSettings bool) *XPackIlmDeleteLifecycleService { + s.flatSettings = &flatSettings + return s +} + +// buildURL builds the URL for the operation. +func (s *XPackIlmDeleteLifecycleService) buildURL() (string, url.Values, error) { + // Build URL + var err error + var path string + path, err = uritemplates.Expand("/_ilm/policy/{policy}", map[string]string{ + "policy": s.policy, + }) + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } + if v := s.flatSettings; v != nil { + params.Set("flat_settings", fmt.Sprint(*v)) + } + if s.timeout != "" { + params.Set("timeout", s.timeout) + } + if s.masterTimeout != "" { + params.Set("master_timeout", s.masterTimeout) + } + if v := s.local; v != nil { + params.Set("local", fmt.Sprint(*v)) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *XPackIlmDeleteLifecycleService) Validate() error { + var invalid []string + if s.policy == "" { + invalid = append(invalid, "Policy") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the operation. +func (s *XPackIlmDeleteLifecycleService) Do(ctx context.Context) (*XPackIlmDeleteLifecycleResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Delete URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Delete HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "DELETE", + Path: path, + Params: params, + Headers: s.headers, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(XPackIlmDeleteLifecycleResponse) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// XPackIlmDeleteLifecycleResponse is the response of XPackIlmDeleteLifecycleService.Do. +type XPackIlmDeleteLifecycleResponse struct { + Acknowledged bool `json:"acknowledged"` +} diff --git a/vendor/github.com/olivere/elastic/v7/xpack_ilm_get_lifecycle.go b/vendor/github.com/olivere/elastic/v7/xpack_ilm_get_lifecycle.go new file mode 100644 index 0000000000000000000000000000000000000000..3a52c36d5db18874db78d2444872b42ca841d597 --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/xpack_ilm_get_lifecycle.go @@ -0,0 +1,193 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/http" + "net/url" + "strings" + + "github.com/olivere/elastic/v7/uritemplates" +) + +// See the documentation at +// https://www.elastic.co/guide/en/elasticsearch/reference/6.7/ilm-get-lifecycle.html. +type XPackIlmGetLifecycleService struct { + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + + policy []string + timeout string + masterTimeout string + flatSettings *bool + local *bool +} + +// NewXPackIlmGetLifecycleService creates a new XPackIlmGetLifecycleService. +func NewXPackIlmGetLifecycleService(client *Client) *XPackIlmGetLifecycleService { + return &XPackIlmGetLifecycleService{ + client: client, + } +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *XPackIlmGetLifecycleService) Pretty(pretty bool) *XPackIlmGetLifecycleService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *XPackIlmGetLifecycleService) Human(human bool) *XPackIlmGetLifecycleService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *XPackIlmGetLifecycleService) ErrorTrace(errorTrace bool) *XPackIlmGetLifecycleService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *XPackIlmGetLifecycleService) FilterPath(filterPath ...string) *XPackIlmGetLifecycleService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *XPackIlmGetLifecycleService) Header(name string, value string) *XPackIlmGetLifecycleService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *XPackIlmGetLifecycleService) Headers(headers http.Header) *XPackIlmGetLifecycleService { + s.headers = headers + return s +} + +// Policy is the name of the index lifecycle policy. +func (s *XPackIlmGetLifecycleService) Policy(policies ...string) *XPackIlmGetLifecycleService { + s.policy = append(s.policy, policies...) + return s +} + +// Timeout is an explicit operation timeout. +func (s *XPackIlmGetLifecycleService) Timeout(timeout string) *XPackIlmGetLifecycleService { + s.timeout = timeout + return s +} + +// MasterTimeout specifies the timeout for connection to master. +func (s *XPackIlmGetLifecycleService) MasterTimeout(masterTimeout string) *XPackIlmGetLifecycleService { + s.masterTimeout = masterTimeout + return s +} + +// FlatSettings is returns settings in flat format (default: false). +func (s *XPackIlmGetLifecycleService) FlatSettings(flatSettings bool) *XPackIlmGetLifecycleService { + s.flatSettings = &flatSettings + return s +} + +// buildURL builds the URL for the operation. +func (s *XPackIlmGetLifecycleService) buildURL() (string, url.Values, error) { + // Build URL + var err error + var path string + if len(s.policy) > 0 { + path, err = uritemplates.Expand("/_ilm/policy/{policy}", map[string]string{ + "policy": strings.Join(s.policy, ","), + }) + } else { + path = "/_ilm/policy" + } + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } + if v := s.flatSettings; v != nil { + params.Set("flat_settings", fmt.Sprint(*v)) + } + if s.timeout != "" { + params.Set("timeout", s.timeout) + } + if s.masterTimeout != "" { + params.Set("master_timeout", s.masterTimeout) + } + if v := s.local; v != nil { + params.Set("local", fmt.Sprint(*v)) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *XPackIlmGetLifecycleService) Validate() error { + return nil +} + +// Do executes the operation. +func (s *XPackIlmGetLifecycleService) Do(ctx context.Context) (map[string]*XPackIlmGetLifecycleResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "GET", + Path: path, + Params: params, + Headers: s.headers, + }) + if err != nil { + return nil, err + } + + // Return operation response + var ret map[string]*XPackIlmGetLifecycleResponse + if err := s.client.decoder.Decode(res.Body, &ret); err != nil { + return nil, err + } + return ret, nil +} + +// XPackIlmGetLifecycleResponse is the response of XPackIlmGetLifecycleService.Do. +type XPackIlmGetLifecycleResponse struct { + Version int `json:"version,omitempty"` + ModifiedDate string `json:"modified_date,omitempty"` // e.g. "2019-10-03T17:43:42.720Z" + Policy map[string]interface{} `json:"policy,omitempty"` +} diff --git a/vendor/github.com/olivere/elastic/v7/xpack_ilm_put_lifecycle.go b/vendor/github.com/olivere/elastic/v7/xpack_ilm_put_lifecycle.go new file mode 100644 index 0000000000000000000000000000000000000000..f2e8ba10209fe34ad7b5190a455ecc916cdf83dd --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/xpack_ilm_put_lifecycle.go @@ -0,0 +1,214 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/http" + "net/url" + "strings" + + "github.com/olivere/elastic/v7/uritemplates" +) + +// See the documentation at +// https://www.elastic.co/guide/en/elasticsearch/reference/6.7/ilm-put-lifecycle.html +type XPackIlmPutLifecycleService struct { + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + + policy string + timeout string + masterTimeout string + flatSettings *bool + bodyJson interface{} + bodyString string +} + +// NewXPackIlmPutLifecycleService creates a new XPackIlmPutLifecycleService. +func NewXPackIlmPutLifecycleService(client *Client) *XPackIlmPutLifecycleService { + return &XPackIlmPutLifecycleService{ + client: client, + } +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *XPackIlmPutLifecycleService) Pretty(pretty bool) *XPackIlmPutLifecycleService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *XPackIlmPutLifecycleService) Human(human bool) *XPackIlmPutLifecycleService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *XPackIlmPutLifecycleService) ErrorTrace(errorTrace bool) *XPackIlmPutLifecycleService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *XPackIlmPutLifecycleService) FilterPath(filterPath ...string) *XPackIlmPutLifecycleService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *XPackIlmPutLifecycleService) Header(name string, value string) *XPackIlmPutLifecycleService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *XPackIlmPutLifecycleService) Headers(headers http.Header) *XPackIlmPutLifecycleService { + s.headers = headers + return s +} + +// Policy is the name of the index lifecycle policy. +func (s *XPackIlmPutLifecycleService) Policy(policy string) *XPackIlmPutLifecycleService { + s.policy = policy + return s +} + +// Timeout is an explicit operation timeout. +func (s *XPackIlmPutLifecycleService) Timeout(timeout string) *XPackIlmPutLifecycleService { + s.timeout = timeout + return s +} + +// MasterTimeout specifies the timeout for connection to master. +func (s *XPackIlmPutLifecycleService) MasterTimeout(masterTimeout string) *XPackIlmPutLifecycleService { + s.masterTimeout = masterTimeout + return s +} + +// FlatSettings indicates whether to return settings in flat format (default: false). +func (s *XPackIlmPutLifecycleService) FlatSettings(flatSettings bool) *XPackIlmPutLifecycleService { + s.flatSettings = &flatSettings + return s +} + +// BodyJson is documented as: The template definition. +func (s *XPackIlmPutLifecycleService) BodyJson(body interface{}) *XPackIlmPutLifecycleService { + s.bodyJson = body + return s +} + +// BodyString is documented as: The template definition. +func (s *XPackIlmPutLifecycleService) BodyString(body string) *XPackIlmPutLifecycleService { + s.bodyString = body + return s +} + +// buildURL builds the URL for the operation. +func (s *XPackIlmPutLifecycleService) buildURL() (string, url.Values, error) { + // Build URL + path, err := uritemplates.Expand("/_ilm/policy/{policy}", map[string]string{ + "policy": s.policy, + }) + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } + if s.timeout != "" { + params.Set("timeout", s.timeout) + } + if s.masterTimeout != "" { + params.Set("master_timeout", s.masterTimeout) + } + if v := s.flatSettings; v != nil { + params.Set("flat_settings", fmt.Sprint(*v)) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *XPackIlmPutLifecycleService) Validate() error { + var invalid []string + if s.policy == "" { + invalid = append(invalid, "Policy") + } + if s.bodyString == "" && s.bodyJson == nil { + invalid = append(invalid, "BodyJson") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the operation. +func (s *XPackIlmPutLifecycleService) Do(ctx context.Context) (*XPackIlmPutLifecycleResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Setup HTTP request body + var body interface{} + if s.bodyJson != nil { + body = s.bodyJson + } else { + body = s.bodyString + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "PUT", + Path: path, + Params: params, + Body: body, + Headers: s.headers, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(XPackIlmPutLifecycleResponse) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// XPackIlmPutLifecycleSResponse is the response of XPackIlmPutLifecycleService.Do. +type XPackIlmPutLifecycleResponse struct { + Acknowledged bool `json:"acknowledged"` +} diff --git a/vendor/github.com/olivere/elastic/v7/xpack_info.go b/vendor/github.com/olivere/elastic/v7/xpack_info.go new file mode 100644 index 0000000000000000000000000000000000000000..d9cbeedcec328e6da3e1f7cc6a70087861a8ddb0 --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/xpack_info.go @@ -0,0 +1,225 @@ +// Copyright 2012-2018 Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "net/url" + "strings" + + "github.com/olivere/elastic/v7/uritemplates" +) + +// XPackInfoService retrieves xpack info. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/info-api.html. +type XPackInfoService struct { + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers +} + +// NewXPackInfoService creates a new XPackInfoService. +func NewXPackInfoService(client *Client) *XPackInfoService { + return &XPackInfoService{ + client: client, + } +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *XPackInfoService) Pretty(pretty bool) *XPackInfoService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *XPackInfoService) Human(human bool) *XPackInfoService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *XPackInfoService) ErrorTrace(errorTrace bool) *XPackInfoService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *XPackInfoService) FilterPath(filterPath ...string) *XPackInfoService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *XPackInfoService) Header(name string, value string) *XPackInfoService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *XPackInfoService) Headers(headers http.Header) *XPackInfoService { + s.headers = headers + return s +} + +// buildURL builds the URL for the operation. +func (s *XPackInfoService) buildURL() (string, url.Values, error) { + // Build URL + path, err := uritemplates.Expand("/_xpack", map[string]string{}) + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *XPackInfoService) Validate() error { + var invalid []string + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the operation. +func (s *XPackInfoService) Do(ctx context.Context) (*XPackInfoServiceResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "GET", + Path: path, + Params: params, + Headers: s.headers, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := XPackInfoServiceResponse{} + if err := json.Unmarshal(res.Body, &ret); err != nil { + return nil, err + } + return &ret, nil +} + +// XPackInfoServiceResponse is the response of XPackInfoService.Do. +type XPackInfoServiceResponse struct { + Build XPackInfoBuild `json:"build"` + License XPackInfoLicense `json:"license"` + Features XPackInfoFeatures `json:"features"` + Tagline string `json:"tagline"` +} + +// XPackInfoBuild is the xpack build info +type XPackInfoBuild struct { + Hash string `json:"hash"` + Date string `json:"date"` +} + +// XPackInfoLicense is the xpack license info +type XPackInfoLicense struct { + UID string `json:"uid"` + Type string `json:"type"` + Mode string `json:"mode"` + Status string `json:"status"` + ExpiryMilis int `json:"expiry_date_in_millis"` +} + +// XPackInfoFeatures is the xpack feature info object +type XPackInfoFeatures struct { + Graph XPackInfoGraph `json:"graph"` + Logstash XPackInfoLogstash `json:"logstash"` + MachineLearning XPackInfoML `json:"ml"` + Monitoring XPackInfoMonitoring `json:"monitoring"` + Rollup XPackInfoRollup `json:"rollup"` + Security XPackInfoSecurity `json:"security"` + Watcher XPackInfoWatcher `json:"watcher"` +} + +// XPackInfoGraph is the xpack graph plugin info +type XPackInfoGraph struct { + Description string `json:"description"` + Available bool `json:"available"` + Enabled bool `json:"enabled"` +} + +// XPackInfoLogstash is the xpack logstash plugin info +type XPackInfoLogstash struct { + Description string `json:"description"` + Available bool `json:"available"` + Enabled bool `json:"enabled"` +} + +// XPackInfoML is the xpack machine learning plugin info +type XPackInfoML struct { + Description string `json:"description"` + Available bool `json:"available"` + Enabled bool `json:"enabled"` + NativeCodeInfo map[string]string `json:"native_code_info"` +} + +// XPackInfoMonitoring is the xpack monitoring plugin info +type XPackInfoMonitoring struct { + Description string `json:"description"` + Available bool `json:"available"` + Enabled bool `json:"enabled"` +} + +// XPackInfoRollup is the xpack rollup plugin info +type XPackInfoRollup struct { + Description string `json:"description"` + Available bool `json:"available"` + Enabled bool `json:"enabled"` +} + +// XPackInfoSecurity is the xpack security plugin info +type XPackInfoSecurity struct { + Description string `json:"description"` + Available bool `json:"available"` + Enabled bool `json:"enabled"` +} + +// XPackInfoWatcher is the xpack watcher plugin info +type XPackInfoWatcher struct { + Description string `json:"description"` + Available bool `json:"available"` + Enabled bool `json:"enabled"` +} diff --git a/vendor/github.com/olivere/elastic/v7/xpack_security_change_password.go b/vendor/github.com/olivere/elastic/v7/xpack_security_change_password.go new file mode 100644 index 0000000000000000000000000000000000000000..34174a15c5191e69d02cf0eaec5c1c6d7d35940a --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/xpack_security_change_password.go @@ -0,0 +1,201 @@ +// Copyright 2012-2018 Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "net/url" + "strings" + + "github.com/olivere/elastic/v7/uritemplates" +) + +// XPackSecurityChangePasswordService changes a native user's password. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.1/security-api-change-password.html. +type XPackSecurityChangePasswordService struct { + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + + username string + password string + refresh string + body interface{} +} + +// NewXPackSecurityChangePasswordService creates a new XPackSecurityChangePasswordService. +func NewXPackSecurityChangePasswordService(client *Client) *XPackSecurityChangePasswordService { + return &XPackSecurityChangePasswordService{ + client: client, + } +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *XPackSecurityChangePasswordService) Pretty(pretty bool) *XPackSecurityChangePasswordService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *XPackSecurityChangePasswordService) Human(human bool) *XPackSecurityChangePasswordService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *XPackSecurityChangePasswordService) ErrorTrace(errorTrace bool) *XPackSecurityChangePasswordService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *XPackSecurityChangePasswordService) FilterPath(filterPath ...string) *XPackSecurityChangePasswordService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *XPackSecurityChangePasswordService) Header(name string, value string) *XPackSecurityChangePasswordService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *XPackSecurityChangePasswordService) Headers(headers http.Header) *XPackSecurityChangePasswordService { + s.headers = headers + return s +} + +// Username is name of the user to change. +func (s *XPackSecurityChangePasswordService) Username(username string) *XPackSecurityChangePasswordService { + s.username = username + return s +} + +// Password is the new value of the password. +func (s *XPackSecurityChangePasswordService) Password(password string) *XPackSecurityChangePasswordService { + s.password = password + return s +} + +// Refresh, if "true" (the default), refreshes the affected shards to make this operation +// visible to search, if "wait_for" then wait for a refresh to make this operation visible +// to search, if "false" then do nothing with refreshes. +func (s *XPackSecurityChangePasswordService) Refresh(refresh string) *XPackSecurityChangePasswordService { + s.refresh = refresh + return s +} + +// Body specifies the password. Use a string or a type that will get serialized as JSON. +func (s *XPackSecurityChangePasswordService) Body(body interface{}) *XPackSecurityChangePasswordService { + s.body = body + return s +} + +// buildURL builds the URL for the operation. +func (s *XPackSecurityChangePasswordService) buildURL() (string, url.Values, error) { + // Build URL + path, err := uritemplates.Expand("/_xpack/security/user/{username}/_password", map[string]string{ + "username": s.username, + }) + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } + if v := s.refresh; v != "" { + params.Set("refresh", v) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *XPackSecurityChangePasswordService) Validate() error { + var invalid []string + if s.username == "" { + invalid = append(invalid, "Userame") + } + if s.password == "" && s.body == nil { + invalid = append(invalid, "Body") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the operation. +func (s *XPackSecurityChangePasswordService) Do(ctx context.Context) (*XPackSecurityChangeUserPasswordResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + var body interface{} + if s.body != nil { + body = s.body + } else { + body = map[string]interface{}{ + "password": s.password, + } + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "POST", + Path: path, + Params: params, + Body: body, + Headers: s.headers, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(XPackSecurityChangeUserPasswordResponse) + if err := json.Unmarshal(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// XPackSecurityChangeUserPasswordResponse is the response of +// XPackSecurityChangePasswordService.Do. +// +// A successful call returns an empty JSON structure: {}. +type XPackSecurityChangeUserPasswordResponse struct { +} diff --git a/vendor/github.com/olivere/elastic/v7/xpack_security_delete_role.go b/vendor/github.com/olivere/elastic/v7/xpack_security_delete_role.go new file mode 100644 index 0000000000000000000000000000000000000000..d9c7cb9a0bc5c3671caf1bb036829f82b0149902 --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/xpack_security_delete_role.go @@ -0,0 +1,159 @@ +// Copyright 2012-2018 Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "net/url" + "strings" + + "github.com/olivere/elastic/v7/uritemplates" +) + +// XPackSecurityDeleteRoleService delete a role by its name. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/security-api-delete-role.html. +type XPackSecurityDeleteRoleService struct { + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + + name string +} + +// NewXPackSecurityDeleteRoleService creates a new XPackSecurityDeleteRoleService. +func NewXPackSecurityDeleteRoleService(client *Client) *XPackSecurityDeleteRoleService { + return &XPackSecurityDeleteRoleService{ + client: client, + } +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *XPackSecurityDeleteRoleService) Pretty(pretty bool) *XPackSecurityDeleteRoleService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *XPackSecurityDeleteRoleService) Human(human bool) *XPackSecurityDeleteRoleService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *XPackSecurityDeleteRoleService) ErrorTrace(errorTrace bool) *XPackSecurityDeleteRoleService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *XPackSecurityDeleteRoleService) FilterPath(filterPath ...string) *XPackSecurityDeleteRoleService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *XPackSecurityDeleteRoleService) Header(name string, value string) *XPackSecurityDeleteRoleService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *XPackSecurityDeleteRoleService) Headers(headers http.Header) *XPackSecurityDeleteRoleService { + s.headers = headers + return s +} + +// Name is name of the role to delete. +func (s *XPackSecurityDeleteRoleService) Name(name string) *XPackSecurityDeleteRoleService { + s.name = name + return s +} + +// buildURL builds the URL for the operation. +func (s *XPackSecurityDeleteRoleService) buildURL() (string, url.Values, error) { + // Build URL + path, err := uritemplates.Expand("/_security/role/{name}", map[string]string{ + "name": s.name, + }) + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *XPackSecurityDeleteRoleService) Validate() error { + var invalid []string + if s.name == "" { + invalid = append(invalid, "Name") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the operation. +func (s *XPackSecurityDeleteRoleService) Do(ctx context.Context) (*XPackSecurityDeleteRoleResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "DELETE", + Path: path, + Params: params, + Headers: s.headers, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(XPackSecurityDeleteRoleResponse) + if err := json.Unmarshal(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// XPackSecurityDeleteRoleResponse is the response of XPackSecurityDeleteRoleService.Do. +type XPackSecurityDeleteRoleResponse struct { + Found bool `json:"found"` +} diff --git a/vendor/github.com/olivere/elastic/v7/xpack_security_delete_role_mapping.go b/vendor/github.com/olivere/elastic/v7/xpack_security_delete_role_mapping.go new file mode 100644 index 0000000000000000000000000000000000000000..05b564b456c23d8ac55ddb736e87715cca343889 --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/xpack_security_delete_role_mapping.go @@ -0,0 +1,159 @@ +// Copyright 2012-2018 Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "net/url" + "strings" + + "github.com/olivere/elastic/v7/uritemplates" +) + +// XPackSecurityDeleteRoleMappingService delete a role mapping by its name. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/security-api-delete-role-mapping.html. +type XPackSecurityDeleteRoleMappingService struct { + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + + name string +} + +// NewXPackSecurityDeleteRoleMappingService creates a new XPackSecurityDeleteRoleMappingService. +func NewXPackSecurityDeleteRoleMappingService(client *Client) *XPackSecurityDeleteRoleMappingService { + return &XPackSecurityDeleteRoleMappingService{ + client: client, + } +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *XPackSecurityDeleteRoleMappingService) Pretty(pretty bool) *XPackSecurityDeleteRoleMappingService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *XPackSecurityDeleteRoleMappingService) Human(human bool) *XPackSecurityDeleteRoleMappingService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *XPackSecurityDeleteRoleMappingService) ErrorTrace(errorTrace bool) *XPackSecurityDeleteRoleMappingService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *XPackSecurityDeleteRoleMappingService) FilterPath(filterPath ...string) *XPackSecurityDeleteRoleMappingService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *XPackSecurityDeleteRoleMappingService) Header(name string, value string) *XPackSecurityDeleteRoleMappingService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *XPackSecurityDeleteRoleMappingService) Headers(headers http.Header) *XPackSecurityDeleteRoleMappingService { + s.headers = headers + return s +} + +// Name is name of the role mapping to delete. +func (s *XPackSecurityDeleteRoleMappingService) Name(name string) *XPackSecurityDeleteRoleMappingService { + s.name = name + return s +} + +// buildURL builds the URL for the operation. +func (s *XPackSecurityDeleteRoleMappingService) buildURL() (string, url.Values, error) { + // Build URL + path, err := uritemplates.Expand("/_security/role_mapping/{name}", map[string]string{ + "name": s.name, + }) + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *XPackSecurityDeleteRoleMappingService) Validate() error { + var invalid []string + if s.name == "" { + invalid = append(invalid, "Name") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the operation. +func (s *XPackSecurityDeleteRoleMappingService) Do(ctx context.Context) (*XPackSecurityDeleteRoleMappingResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "DELETE", + Path: path, + Params: params, + Headers: s.headers, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(XPackSecurityDeleteRoleMappingResponse) + if err := json.Unmarshal(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// XPackSecurityDeleteRoleMappingResponse is the response of XPackSecurityDeleteRoleMappingService.Do. +type XPackSecurityDeleteRoleMappingResponse struct { + Found bool `json:"found"` +} diff --git a/vendor/github.com/olivere/elastic/v7/xpack_security_delete_user.go b/vendor/github.com/olivere/elastic/v7/xpack_security_delete_user.go new file mode 100644 index 0000000000000000000000000000000000000000..1e079f73a83fc8c79ca837b31057255c8f6f3ee8 --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/xpack_security_delete_user.go @@ -0,0 +1,170 @@ +// Copyright 2012-2019 Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "net/url" + "strings" + + "github.com/olivere/elastic/v7/uritemplates" +) + +// XPackSecurityDeleteUserService delete a user by its name. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.4/security-api-delete-user.html. +type XPackSecurityDeleteUserService struct { + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + + username string + refresh string +} + +// NewXPackSecurityDeleteUserService creates a new XPackSecurityDeleteUserService. +func NewXPackSecurityDeleteUserService(client *Client) *XPackSecurityDeleteUserService { + return &XPackSecurityDeleteUserService{ + client: client, + } +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *XPackSecurityDeleteUserService) Pretty(pretty bool) *XPackSecurityDeleteUserService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *XPackSecurityDeleteUserService) Human(human bool) *XPackSecurityDeleteUserService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *XPackSecurityDeleteUserService) ErrorTrace(errorTrace bool) *XPackSecurityDeleteUserService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *XPackSecurityDeleteUserService) FilterPath(filterPath ...string) *XPackSecurityDeleteUserService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *XPackSecurityDeleteUserService) Header(name string, value string) *XPackSecurityDeleteUserService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *XPackSecurityDeleteUserService) Headers(headers http.Header) *XPackSecurityDeleteUserService { + s.headers = headers + return s +} + +// Username is name of the user to delete. +func (s *XPackSecurityDeleteUserService) Username(username string) *XPackSecurityDeleteUserService { + s.username = username + return s +} + +// Refresh specifies if and how to wait for refreshing the shards after the request. +// Possible values are "true" (default), "false" and "wait_for", all of type string. +func (s *XPackSecurityDeleteUserService) Refresh(refresh string) *XPackSecurityDeleteUserService { + s.refresh = refresh + return s +} + +// buildURL builds the URL for the operation. +func (s *XPackSecurityDeleteUserService) buildURL() (string, url.Values, error) { + // Build URL + path, err := uritemplates.Expand("/_security/user/{username}", map[string]string{ + "username": s.username, + }) + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } + if v := s.refresh; v != "" { + params.Set("refresh", v) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *XPackSecurityDeleteUserService) Validate() error { + var invalid []string + if s.username == "" { + invalid = append(invalid, "Username") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the operation. +func (s *XPackSecurityDeleteUserService) Do(ctx context.Context) (*XPackSecurityDeleteUserResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "DELETE", + Path: path, + Params: params, + Headers: s.headers, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(XPackSecurityDeleteUserResponse) + if err := json.Unmarshal(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// XPackSecurityDeleteUserResponse is the response of XPackSecurityDeleteUserService.Do. +type XPackSecurityDeleteUserResponse struct { + Found bool `json:"found"` +} diff --git a/vendor/github.com/olivere/elastic/v7/xpack_security_disable_user.go b/vendor/github.com/olivere/elastic/v7/xpack_security_disable_user.go new file mode 100644 index 0000000000000000000000000000000000000000..846c0e28513c3a038bd155a7fbfa42a2af89bf5e --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/xpack_security_disable_user.go @@ -0,0 +1,168 @@ +// Copyright 2012-2019 Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "net/url" + "strings" + + "github.com/olivere/elastic/v7/uritemplates" +) + +// XPackSecurityDisableUserService retrieves a user by its name. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/security-api-get-user.html. +type XPackSecurityDisableUserService struct { + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + + username string + refresh string +} + +// NewXPackSecurityDisableUserService creates a new XPackSecurityDisableUserService. +func NewXPackSecurityDisableUserService(client *Client) *XPackSecurityDisableUserService { + return &XPackSecurityDisableUserService{ + client: client, + } +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *XPackSecurityDisableUserService) Pretty(pretty bool) *XPackSecurityDisableUserService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *XPackSecurityDisableUserService) Human(human bool) *XPackSecurityDisableUserService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *XPackSecurityDisableUserService) ErrorTrace(errorTrace bool) *XPackSecurityDisableUserService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *XPackSecurityDisableUserService) FilterPath(filterPath ...string) *XPackSecurityDisableUserService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *XPackSecurityDisableUserService) Header(name string, value string) *XPackSecurityDisableUserService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *XPackSecurityDisableUserService) Headers(headers http.Header) *XPackSecurityDisableUserService { + s.headers = headers + return s +} + +// Username is name of the user to disable. +func (s *XPackSecurityDisableUserService) Username(username string) *XPackSecurityDisableUserService { + s.username = username + return s +} + +// Refresh specifies if and how to wait for refreshing the shards after the request. +// Possible values are "true" (default), "false" and "wait_for", all of type string. +func (s *XPackSecurityDisableUserService) Refresh(refresh string) *XPackSecurityDisableUserService { + s.refresh = refresh + return s +} + +// buildURL builds the URL for the operation. +func (s *XPackSecurityDisableUserService) buildURL() (string, url.Values, error) { + // Build URL + path, err := uritemplates.Expand("/_security/user/{username}/_disable", map[string]string{ + "username": s.username, + }) + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } + if v := s.refresh; v != "" { + params.Set("refresh", v) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *XPackSecurityDisableUserService) Validate() error { + var invalid []string + if s.username == "" { + invalid = append(invalid, "Username") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the operation. +func (s *XPackSecurityDisableUserService) Do(ctx context.Context) (*XPackSecurityDisableUserResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "PUT", + Path: path, + Params: params, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(XPackSecurityDisableUserResponse) + if err := json.Unmarshal(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// XPackSecurityDisableUserResponse is the response of XPackSecurityDisableUserService.Do. +type XPackSecurityDisableUserResponse struct { +} diff --git a/vendor/github.com/olivere/elastic/v7/xpack_security_enable_user.go b/vendor/github.com/olivere/elastic/v7/xpack_security_enable_user.go new file mode 100644 index 0000000000000000000000000000000000000000..c04b917331670a1717fae204675e434fa17d1521 --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/xpack_security_enable_user.go @@ -0,0 +1,168 @@ +// Copyright 2012-2019 Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "net/url" + "strings" + + "github.com/olivere/elastic/v7/uritemplates" +) + +// XPackSecurityEnableUserService retrieves a user by its name. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/security-api-get-user.html. +type XPackSecurityEnableUserService struct { + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + + username string + refresh string +} + +// NewXPackSecurityEnableUserService creates a new XPackSecurityEnableUserService. +func NewXPackSecurityEnableUserService(client *Client) *XPackSecurityEnableUserService { + return &XPackSecurityEnableUserService{ + client: client, + } +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *XPackSecurityEnableUserService) Pretty(pretty bool) *XPackSecurityEnableUserService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *XPackSecurityEnableUserService) Human(human bool) *XPackSecurityEnableUserService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *XPackSecurityEnableUserService) ErrorTrace(errorTrace bool) *XPackSecurityEnableUserService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *XPackSecurityEnableUserService) FilterPath(filterPath ...string) *XPackSecurityEnableUserService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *XPackSecurityEnableUserService) Header(name string, value string) *XPackSecurityEnableUserService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *XPackSecurityEnableUserService) Headers(headers http.Header) *XPackSecurityEnableUserService { + s.headers = headers + return s +} + +// Username is name of the user to enable. +func (s *XPackSecurityEnableUserService) Username(username string) *XPackSecurityEnableUserService { + s.username = username + return s +} + +// Refresh specifies if and how to wait for refreshing the shards after the request. +// Possible values are "true" (default), "false" and "wait_for", all of type string. +func (s *XPackSecurityEnableUserService) Refresh(refresh string) *XPackSecurityEnableUserService { + s.refresh = refresh + return s +} + +// buildURL builds the URL for the operation. +func (s *XPackSecurityEnableUserService) buildURL() (string, url.Values, error) { + // Build URL + path, err := uritemplates.Expand("/_security/user/{username}/_enable", map[string]string{ + "username": s.username, + }) + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } + if v := s.refresh; v != "" { + params.Set("refresh", v) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *XPackSecurityEnableUserService) Validate() error { + var invalid []string + if s.username == "" { + invalid = append(invalid, "Username") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the operation. +func (s *XPackSecurityEnableUserService) Do(ctx context.Context) (*XPackSecurityEnableUserResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "PUT", + Path: path, + Params: params, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(XPackSecurityEnableUserResponse) + if err := json.Unmarshal(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// XPackSecurityEnableUserResponse is the response of XPackSecurityEnableUserService.Do. +type XPackSecurityEnableUserResponse struct { +} diff --git a/vendor/github.com/olivere/elastic/v7/xpack_security_get_role.go b/vendor/github.com/olivere/elastic/v7/xpack_security_get_role.go new file mode 100644 index 0000000000000000000000000000000000000000..c2ab0fda643e9e5d8671180bb319500775a60cce --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/xpack_security_get_role.go @@ -0,0 +1,186 @@ +// Copyright 2012-2018 Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "net/url" + "strings" + + "github.com/olivere/elastic/v7/uritemplates" +) + +// XPackSecurityGetRoleService retrieves a role by its name. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/security-api-get-role.html. +type XPackSecurityGetRoleService struct { + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + + name string +} + +// NewXPackSecurityGetRoleService creates a new XPackSecurityGetRoleService. +func NewXPackSecurityGetRoleService(client *Client) *XPackSecurityGetRoleService { + return &XPackSecurityGetRoleService{ + client: client, + } +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *XPackSecurityGetRoleService) Pretty(pretty bool) *XPackSecurityGetRoleService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *XPackSecurityGetRoleService) Human(human bool) *XPackSecurityGetRoleService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *XPackSecurityGetRoleService) ErrorTrace(errorTrace bool) *XPackSecurityGetRoleService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *XPackSecurityGetRoleService) FilterPath(filterPath ...string) *XPackSecurityGetRoleService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *XPackSecurityGetRoleService) Header(name string, value string) *XPackSecurityGetRoleService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *XPackSecurityGetRoleService) Headers(headers http.Header) *XPackSecurityGetRoleService { + s.headers = headers + return s +} + +// Name is name of the role to retrieve. +func (s *XPackSecurityGetRoleService) Name(name string) *XPackSecurityGetRoleService { + s.name = name + return s +} + +// buildURL builds the URL for the operation. +func (s *XPackSecurityGetRoleService) buildURL() (string, url.Values, error) { + // Build URL + path, err := uritemplates.Expand("/_security/role/{name}", map[string]string{ + "name": s.name, + }) + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *XPackSecurityGetRoleService) Validate() error { + var invalid []string + if s.name == "" { + invalid = append(invalid, "Name") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the operation. +func (s *XPackSecurityGetRoleService) Do(ctx context.Context) (*XPackSecurityGetRoleResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "GET", + Path: path, + Params: params, + Headers: s.headers, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := XPackSecurityGetRoleResponse{} + if err := json.Unmarshal(res.Body, &ret); err != nil { + return nil, err + } + return &ret, nil +} + +// XPackSecurityGetRoleResponse is the response of XPackSecurityGetRoleService.Do. +type XPackSecurityGetRoleResponse map[string]XPackSecurityRole + +// XPackSecurityRole is the role object. +// +// The Java source for this struct is defined here: +// https://github.com/elastic/elasticsearch/blob/6.7/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/security/authz/RoleDescriptor.java +type XPackSecurityRole struct { + Cluster []string `json:"cluster"` + Indices []XPackSecurityIndicesPermissions `json:"indices"` + Applications []XPackSecurityApplicationPrivileges `json:"applications"` + RunAs []string `json:"run_as"` + Global map[string]interface{} `json:"global"` + Metadata map[string]interface{} `json:"metadata"` + TransientMetadata map[string]interface{} `json:"transient_metadata"` +} + +// XPackSecurityApplicationPrivileges is the application privileges object +type XPackSecurityApplicationPrivileges struct { + Application string `json:"application"` + Privileges []string `json:"privileges"` + Ressources []string `json:"resources"` +} + +// XPackSecurityIndicesPermissions is the indices permission object +type XPackSecurityIndicesPermissions struct { + Names []string `json:"names"` + Privileges []string `json:"privileges"` + FieldSecurity interface{} `json:"field_security,omitempty"` + Query string `json:"query"` +} diff --git a/vendor/github.com/olivere/elastic/v7/xpack_security_get_role_mapping.go b/vendor/github.com/olivere/elastic/v7/xpack_security_get_role_mapping.go new file mode 100644 index 0000000000000000000000000000000000000000..24230be339320db994e472e9b9fcd02b0adaef4a --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/xpack_security_get_role_mapping.go @@ -0,0 +1,165 @@ +// Copyright 2012-2018 Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "net/url" + "strings" + + "github.com/olivere/elastic/v7/uritemplates" +) + +// XPackSecurityGetRoleMappingService retrieves a role mapping by its name. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/security-api-get-role-mapping.html. +type XPackSecurityGetRoleMappingService struct { + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + + name string +} + +// NewXPackSecurityGetRoleMappingService creates a new XPackSecurityGetRoleMappingService. +func NewXPackSecurityGetRoleMappingService(client *Client) *XPackSecurityGetRoleMappingService { + return &XPackSecurityGetRoleMappingService{ + client: client, + } +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *XPackSecurityGetRoleMappingService) Pretty(pretty bool) *XPackSecurityGetRoleMappingService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *XPackSecurityGetRoleMappingService) Human(human bool) *XPackSecurityGetRoleMappingService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *XPackSecurityGetRoleMappingService) ErrorTrace(errorTrace bool) *XPackSecurityGetRoleMappingService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *XPackSecurityGetRoleMappingService) FilterPath(filterPath ...string) *XPackSecurityGetRoleMappingService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *XPackSecurityGetRoleMappingService) Header(name string, value string) *XPackSecurityGetRoleMappingService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *XPackSecurityGetRoleMappingService) Headers(headers http.Header) *XPackSecurityGetRoleMappingService { + s.headers = headers + return s +} + +// Name is name of the role mapping to retrieve. +func (s *XPackSecurityGetRoleMappingService) Name(name string) *XPackSecurityGetRoleMappingService { + s.name = name + return s +} + +// buildURL builds the URL for the operation. +func (s *XPackSecurityGetRoleMappingService) buildURL() (string, url.Values, error) { + // Build URL + path, err := uritemplates.Expand("/_security/role_mapping/{name}", map[string]string{ + "name": s.name, + }) + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *XPackSecurityGetRoleMappingService) Validate() error { + var invalid []string + if s.name == "" { + invalid = append(invalid, "Name") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the operation. +func (s *XPackSecurityGetRoleMappingService) Do(ctx context.Context) (*XPackSecurityGetRoleMappingResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "GET", + Path: path, + Params: params, + Headers: s.headers, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := XPackSecurityGetRoleMappingResponse{} + if err := json.Unmarshal(res.Body, &ret); err != nil { + return nil, err + } + return &ret, nil +} + +// XPackSecurityGetRoleMappingResponse is the response of XPackSecurityGetRoleMappingService.Do. +type XPackSecurityGetRoleMappingResponse map[string]XPackSecurityRoleMapping + +// XPackSecurityRoleMapping is the role mapping object +type XPackSecurityRoleMapping struct { + Enabled bool `json:"enabled"` + Roles []string `json:"roles"` + Rules map[string]interface{} `json:"rules"` + Metadata interface{} `json:"metadata"` +} diff --git a/vendor/github.com/olivere/elastic/v7/xpack_security_get_user.go b/vendor/github.com/olivere/elastic/v7/xpack_security_get_user.go new file mode 100644 index 0000000000000000000000000000000000000000..50a179b194be6e8e6dc6bd5ace5d713b50d836d5 --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/xpack_security_get_user.go @@ -0,0 +1,176 @@ +// Copyright 2012-2019 Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "net/url" + "strings" + + "github.com/olivere/elastic/v7/uritemplates" +) + +// XPackSecurityGetUserService retrieves a user by its name. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/security-api-get-user.html. +type XPackSecurityGetUserService struct { + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + + usernames []string +} + +// NewXPackSecurityGetUserService creates a new XPackSecurityGetUserService. +func NewXPackSecurityGetUserService(client *Client) *XPackSecurityGetUserService { + return &XPackSecurityGetUserService{ + client: client, + } +} + +// Pretty indicates that the JSON response be indented and human readable. +func (s *XPackSecurityGetUserService) Pretty(pretty bool) *XPackSecurityGetUserService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *XPackSecurityGetUserService) Human(human bool) *XPackSecurityGetUserService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *XPackSecurityGetUserService) ErrorTrace(errorTrace bool) *XPackSecurityGetUserService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *XPackSecurityGetUserService) FilterPath(filterPath ...string) *XPackSecurityGetUserService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *XPackSecurityGetUserService) Header(name string, value string) *XPackSecurityGetUserService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *XPackSecurityGetUserService) Headers(headers http.Header) *XPackSecurityGetUserService { + s.headers = headers + return s +} + +// Usernames are the names of one or more users to retrieve. +func (s *XPackSecurityGetUserService) Usernames(usernames ...string) *XPackSecurityGetUserService { + for _, username := range usernames { + if v := strings.TrimSpace(username); v != "" { + s.usernames = append(s.usernames, v) + } + } + return s +} + +// buildURL builds the URL for the operation. +func (s *XPackSecurityGetUserService) buildURL() (string, url.Values, error) { + // Build URL + var ( + path string + err error + ) + if len(s.usernames) > 0 { + path, err = uritemplates.Expand("/_security/user/{username}", map[string]string{ + "username": strings.Join(s.usernames, ","), + }) + } else { + path = "/_security/user" + } + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } + + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *XPackSecurityGetUserService) Validate() error { + return nil +} + +// Do executes the operation. +func (s *XPackSecurityGetUserService) Do(ctx context.Context) (*XPackSecurityGetUserResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "GET", + Path: path, + Params: params, + Headers: s.headers, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := XPackSecurityGetUserResponse{} + if err := json.Unmarshal(res.Body, &ret); err != nil { + return nil, err + } + return &ret, nil +} + +// XPackSecurityGetUserResponse is the response of XPackSecurityGetUserService.Do. +type XPackSecurityGetUserResponse map[string]XPackSecurityUser + +// XPackSecurityUser is the user object. +// +// The Java source for this struct is defined here: +// https://github.com/elastic/elasticsearch/blob/7.3/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/security/user/User.java +type XPackSecurityUser struct { + Username string `json:"username"` + Roles []string `json:"roles"` + Fullname string `json:"full_name"` + Email string `json:"email"` + Metadata map[string]interface{} `json:"metadata"` + Enabled bool `json:"enabled"` +} diff --git a/vendor/github.com/olivere/elastic/v7/xpack_security_put_role.go b/vendor/github.com/olivere/elastic/v7/xpack_security_put_role.go new file mode 100644 index 0000000000000000000000000000000000000000..f3c869f898c336b8cd2a9f14cce52206431fd525 --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/xpack_security_put_role.go @@ -0,0 +1,174 @@ +// Copyright 2012-2018 Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "net/url" + "strings" + + "github.com/olivere/elastic/v7/uritemplates" +) + +// XPackSecurityPutRoleService retrieves a role by its name. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/security-api-put-role.html. +type XPackSecurityPutRoleService struct { + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + + name string + body interface{} +} + +// NewXPackSecurityPutRoleService creates a new XPackSecurityPutRoleService. +func NewXPackSecurityPutRoleService(client *Client) *XPackSecurityPutRoleService { + return &XPackSecurityPutRoleService{ + client: client, + } +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *XPackSecurityPutRoleService) Pretty(pretty bool) *XPackSecurityPutRoleService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *XPackSecurityPutRoleService) Human(human bool) *XPackSecurityPutRoleService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *XPackSecurityPutRoleService) ErrorTrace(errorTrace bool) *XPackSecurityPutRoleService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *XPackSecurityPutRoleService) FilterPath(filterPath ...string) *XPackSecurityPutRoleService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *XPackSecurityPutRoleService) Header(name string, value string) *XPackSecurityPutRoleService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *XPackSecurityPutRoleService) Headers(headers http.Header) *XPackSecurityPutRoleService { + s.headers = headers + return s +} + +// Name is name of the role to create. +func (s *XPackSecurityPutRoleService) Name(name string) *XPackSecurityPutRoleService { + s.name = name + return s +} + +// Body specifies the role. Use a string or a type that will get serialized as JSON. +func (s *XPackSecurityPutRoleService) Body(body interface{}) *XPackSecurityPutRoleService { + s.body = body + return s +} + +// buildURL builds the URL for the operation. +func (s *XPackSecurityPutRoleService) buildURL() (string, url.Values, error) { + // Build URL + path, err := uritemplates.Expand("/_security/role/{name}", map[string]string{ + "name": s.name, + }) + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *XPackSecurityPutRoleService) Validate() error { + var invalid []string + if s.name == "" { + invalid = append(invalid, "Name") + } + if s.body == nil { + invalid = append(invalid, "Body") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the operation. +func (s *XPackSecurityPutRoleService) Do(ctx context.Context) (*XPackSecurityPutRoleResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "PUT", + Path: path, + Params: params, + Body: s.body, + Headers: s.headers, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(XPackSecurityPutRoleResponse) + if err := json.Unmarshal(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// XPackSecurityPutRoleResponse is the response of XPackSecurityPutRoleService.Do. +type XPackSecurityPutRoleResponse struct { + Role XPackSecurityPutRole +} + +type XPackSecurityPutRole struct { + Created bool `json:"created"` +} diff --git a/vendor/github.com/olivere/elastic/v7/xpack_security_put_role_mapping.go b/vendor/github.com/olivere/elastic/v7/xpack_security_put_role_mapping.go new file mode 100644 index 0000000000000000000000000000000000000000..0850d5e56b381c810a68ae9b9a8f315ee5017e96 --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/xpack_security_put_role_mapping.go @@ -0,0 +1,174 @@ +// Copyright 2012-2018 Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "net/url" + "strings" + + "github.com/olivere/elastic/v7/uritemplates" +) + +// XPackSecurityPutRoleMappingService create or update a role mapping by its name. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/security-api-put-role-mapping.html. +type XPackSecurityPutRoleMappingService struct { + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + + name string + body interface{} +} + +// NewXPackSecurityPutRoleMappingService creates a new XPackSecurityPutRoleMappingService. +func NewXPackSecurityPutRoleMappingService(client *Client) *XPackSecurityPutRoleMappingService { + return &XPackSecurityPutRoleMappingService{ + client: client, + } +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *XPackSecurityPutRoleMappingService) Pretty(pretty bool) *XPackSecurityPutRoleMappingService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *XPackSecurityPutRoleMappingService) Human(human bool) *XPackSecurityPutRoleMappingService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *XPackSecurityPutRoleMappingService) ErrorTrace(errorTrace bool) *XPackSecurityPutRoleMappingService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *XPackSecurityPutRoleMappingService) FilterPath(filterPath ...string) *XPackSecurityPutRoleMappingService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *XPackSecurityPutRoleMappingService) Header(name string, value string) *XPackSecurityPutRoleMappingService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *XPackSecurityPutRoleMappingService) Headers(headers http.Header) *XPackSecurityPutRoleMappingService { + s.headers = headers + return s +} + +// Name is name of the role mapping to create/update. +func (s *XPackSecurityPutRoleMappingService) Name(name string) *XPackSecurityPutRoleMappingService { + s.name = name + return s +} + +// Body specifies the role mapping. Use a string or a type that will get serialized as JSON. +func (s *XPackSecurityPutRoleMappingService) Body(body interface{}) *XPackSecurityPutRoleMappingService { + s.body = body + return s +} + +// buildURL builds the URL for the operation. +func (s *XPackSecurityPutRoleMappingService) buildURL() (string, url.Values, error) { + // Build URL + path, err := uritemplates.Expand("/_security/role_mapping/{name}", map[string]string{ + "name": s.name, + }) + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *XPackSecurityPutRoleMappingService) Validate() error { + var invalid []string + if s.name == "" { + invalid = append(invalid, "Name") + } + if s.body == nil { + invalid = append(invalid, "Body") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the operation. +func (s *XPackSecurityPutRoleMappingService) Do(ctx context.Context) (*XPackSecurityPutRoleMappingResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "PUT", + Path: path, + Params: params, + Body: s.body, + Headers: s.headers, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(XPackSecurityPutRoleMappingResponse) + if err := json.Unmarshal(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// XPackSecurityPutRoleMappingResponse is the response of XPackSecurityPutRoleMappingService.Do. +type XPackSecurityPutRoleMappingResponse struct { + Role_Mapping XPackSecurityPutRoleMapping +} + +type XPackSecurityPutRoleMapping struct { + Created bool `json:"created"` +} diff --git a/vendor/github.com/olivere/elastic/v7/xpack_security_put_user.go b/vendor/github.com/olivere/elastic/v7/xpack_security_put_user.go new file mode 100644 index 0000000000000000000000000000000000000000..f7ab77e8c8e5efa5c20562f4414a92174adca2ac --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/xpack_security_put_user.go @@ -0,0 +1,215 @@ +// Copyright 2012-2019 Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "net/url" + "strings" + + "github.com/olivere/elastic/v7/uritemplates" +) + +// XPackSecurityPutUserService adds a user. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.4/security-api-put-user.html. +type XPackSecurityPutUserService struct { + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + + username string + refresh string + + user *XPackSecurityPutUserRequest + body interface{} +} + +// NewXPackSecurityPutUserService creates a new XPackSecurityPutUserService. +func NewXPackSecurityPutUserService(client *Client) *XPackSecurityPutUserService { + return &XPackSecurityPutUserService{ + client: client, + } +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *XPackSecurityPutUserService) Pretty(pretty bool) *XPackSecurityPutUserService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *XPackSecurityPutUserService) Human(human bool) *XPackSecurityPutUserService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *XPackSecurityPutUserService) ErrorTrace(errorTrace bool) *XPackSecurityPutUserService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *XPackSecurityPutUserService) FilterPath(filterPath ...string) *XPackSecurityPutUserService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *XPackSecurityPutUserService) Header(name string, value string) *XPackSecurityPutUserService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *XPackSecurityPutUserService) Headers(headers http.Header) *XPackSecurityPutUserService { + s.headers = headers + return s +} + +// Username is the name of the user to add. +func (s *XPackSecurityPutUserService) Username(username string) *XPackSecurityPutUserService { + s.username = username + return s +} + +// User specifies the data of the new user. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.4/security-api-put-user.html +// for details. +func (s *XPackSecurityPutUserService) User(user *XPackSecurityPutUserRequest) *XPackSecurityPutUserService { + s.user = user + return s +} + +// Refresh specifies if and how to wait for refreshing the shards after the request. +// Possible values are "true" (default), "false" and "wait_for", all of type string. +func (s *XPackSecurityPutUserService) Refresh(refresh string) *XPackSecurityPutUserService { + s.refresh = refresh + return s +} + +// Body specifies the user. Use a string or a type that will get serialized as JSON. +func (s *XPackSecurityPutUserService) Body(body interface{}) *XPackSecurityPutUserService { + s.body = body + return s +} + +// buildURL builds the URL for the operation. +func (s *XPackSecurityPutUserService) buildURL() (string, url.Values, error) { + // Build URL + path, err := uritemplates.Expand("/_security/user/{username}", map[string]string{ + "username": s.username, + }) + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } + if v := s.refresh; v != "" { + params.Set("refresh", v) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *XPackSecurityPutUserService) Validate() error { + var invalid []string + if s.username == "" { + invalid = append(invalid, "Username") + } + if s.user == nil && s.body == nil { + invalid = append(invalid, "User") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the operation. +func (s *XPackSecurityPutUserService) Do(ctx context.Context) (*XPackSecurityPutUserResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + var body interface{} + if s.user != nil { + body = s.user + } else { + body = s.body + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "PUT", + Path: path, + Params: params, + Body: body, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(XPackSecurityPutUserResponse) + if err := json.Unmarshal(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// XPackSecurityPutUserRequest specifies the data required/allowed to add +// a new user. +type XPackSecurityPutUserRequest struct { + Enabled bool `json:"enabled"` + Email string `json:"email,omitempty"` + FullName string `json:"full_name,omitempty"` + Metadata map[string]interface{} `json:"metadata,omitempty"` + Password string `json:"password,omitempty"` + PasswordHash string `json:"password_hash,omitempty"` + Roles []string `json:"roles"` +} + +// XPackSecurityPutUserResponse is the response of XPackSecurityPutUserService.Do. +type XPackSecurityPutUserResponse struct { + User XPackSecurityPutUser `json:"user"` +} + +// XPackSecurityPutUser is the response containing the creation information +type XPackSecurityPutUser struct { + Created bool `json:"created"` +} diff --git a/vendor/github.com/olivere/elastic/v7/xpack_watcher_ack_watch.go b/vendor/github.com/olivere/elastic/v7/xpack_watcher_ack_watch.go new file mode 100644 index 0000000000000000000000000000000000000000..d1ae9253ba8f8f32f8e36494ea43a15c4ac89e2f --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/xpack_watcher_ack_watch.go @@ -0,0 +1,198 @@ +// Copyright 2012-2018 Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "net/url" + "strings" + + "github.com/olivere/elastic/v7/uritemplates" +) + +// XPackWatcherAckWatchService enables you to manually throttle execution of the watch’s actions. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/watcher-api-ack-watch.html. +type XPackWatcherAckWatchService struct { + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + + watchId string + actionId []string + masterTimeout string +} + +// NewXPackWatcherAckWatchService creates a new XPackWatcherAckWatchService. +func NewXPackWatcherAckWatchService(client *Client) *XPackWatcherAckWatchService { + return &XPackWatcherAckWatchService{ + client: client, + } +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *XPackWatcherAckWatchService) Pretty(pretty bool) *XPackWatcherAckWatchService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *XPackWatcherAckWatchService) Human(human bool) *XPackWatcherAckWatchService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *XPackWatcherAckWatchService) ErrorTrace(errorTrace bool) *XPackWatcherAckWatchService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *XPackWatcherAckWatchService) FilterPath(filterPath ...string) *XPackWatcherAckWatchService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *XPackWatcherAckWatchService) Header(name string, value string) *XPackWatcherAckWatchService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *XPackWatcherAckWatchService) Headers(headers http.Header) *XPackWatcherAckWatchService { + s.headers = headers + return s +} + +// WatchId is the unique ID of the watch. +func (s *XPackWatcherAckWatchService) WatchId(watchId string) *XPackWatcherAckWatchService { + s.watchId = watchId + return s +} + +// ActionId is a slice of action ids to be acked. +func (s *XPackWatcherAckWatchService) ActionId(actionId ...string) *XPackWatcherAckWatchService { + s.actionId = append(s.actionId, actionId...) + return s +} + +// MasterTimeout indicates an explicit operation timeout for +// connection to master node. +func (s *XPackWatcherAckWatchService) MasterTimeout(masterTimeout string) *XPackWatcherAckWatchService { + s.masterTimeout = masterTimeout + return s +} + +// buildURL builds the URL for the operation. +func (s *XPackWatcherAckWatchService) buildURL() (string, url.Values, error) { + // Build URL + var ( + path string + err error + ) + if len(s.actionId) > 0 { + path, err = uritemplates.Expand("/_watcher/watch/{watch_id}/_ack/{action_id}", map[string]string{ + "watch_id": s.watchId, + "action_id": strings.Join(s.actionId, ","), + }) + } else { + path, err = uritemplates.Expand("/_watcher/watch/{watch_id}/_ack", map[string]string{ + "watch_id": s.watchId, + }) + } + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } + if s.masterTimeout != "" { + params.Set("master_timeout", s.masterTimeout) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *XPackWatcherAckWatchService) Validate() error { + var invalid []string + if s.watchId == "" { + invalid = append(invalid, "WatchId") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the operation. +func (s *XPackWatcherAckWatchService) Do(ctx context.Context) (*XPackWatcherAckWatchResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "PUT", + Path: path, + Params: params, + Headers: s.headers, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(XPackWatcherAckWatchResponse) + if err := json.Unmarshal(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// XPackWatcherAckWatchResponse is the response of XPackWatcherAckWatchService.Do. +type XPackWatcherAckWatchResponse struct { + Status *XPackWatcherAckWatchStatus `json:"status"` +} + +// XPackWatcherAckWatchStatus is the status of a XPackWatcherAckWatchResponse. +type XPackWatcherAckWatchStatus struct { + State map[string]interface{} `json:"state"` + LastChecked string `json:"last_checked"` + LastMetCondition string `json:"last_met_condition"` + Actions map[string]map[string]interface{} `json:"actions"` + ExecutionState string `json:"execution_state"` + Version int `json:"version"` +} diff --git a/vendor/github.com/olivere/elastic/v7/xpack_watcher_activate_watch.go b/vendor/github.com/olivere/elastic/v7/xpack_watcher_activate_watch.go new file mode 100644 index 0000000000000000000000000000000000000000..9a496053201762dc0b0dcfbd2eb4325415124335 --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/xpack_watcher_activate_watch.go @@ -0,0 +1,169 @@ +// Copyright 2012-2018 Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "net/url" + "strings" + + "github.com/olivere/elastic/v7/uritemplates" +) + +// XPackWatcherActivateWatchService enables you to activate a currently inactive watch. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/watcher-api-activate-watch.html. +type XPackWatcherActivateWatchService struct { + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + + watchId string + masterTimeout string +} + +// NewXPackWatcherActivateWatchService creates a new XPackWatcherActivateWatchService. +func NewXPackWatcherActivateWatchService(client *Client) *XPackWatcherActivateWatchService { + return &XPackWatcherActivateWatchService{ + client: client, + } +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *XPackWatcherActivateWatchService) Pretty(pretty bool) *XPackWatcherActivateWatchService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *XPackWatcherActivateWatchService) Human(human bool) *XPackWatcherActivateWatchService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *XPackWatcherActivateWatchService) ErrorTrace(errorTrace bool) *XPackWatcherActivateWatchService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *XPackWatcherActivateWatchService) FilterPath(filterPath ...string) *XPackWatcherActivateWatchService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *XPackWatcherActivateWatchService) Header(name string, value string) *XPackWatcherActivateWatchService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *XPackWatcherActivateWatchService) Headers(headers http.Header) *XPackWatcherActivateWatchService { + s.headers = headers + return s +} + +// WatchId is the ID of the watch to activate. +func (s *XPackWatcherActivateWatchService) WatchId(watchId string) *XPackWatcherActivateWatchService { + s.watchId = watchId + return s +} + +// MasterTimeout specifies an explicit operation timeout for connection to master node. +func (s *XPackWatcherActivateWatchService) MasterTimeout(masterTimeout string) *XPackWatcherActivateWatchService { + s.masterTimeout = masterTimeout + return s +} + +// buildURL builds the URL for the operation. +func (s *XPackWatcherActivateWatchService) buildURL() (string, url.Values, error) { + // Build URL + path, err := uritemplates.Expand("/_watcher/watch/{watch_id}/_activate", map[string]string{ + "watch_id": s.watchId, + }) + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } + if s.masterTimeout != "" { + params.Set("master_timeout", s.masterTimeout) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *XPackWatcherActivateWatchService) Validate() error { + var invalid []string + if s.watchId == "" { + invalid = append(invalid, "WatchId") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the operation. +func (s *XPackWatcherActivateWatchService) Do(ctx context.Context) (*XPackWatcherActivateWatchResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "PUT", + Path: path, + Params: params, + Headers: s.headers, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(XPackWatcherActivateWatchResponse) + if err := json.Unmarshal(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// XPackWatcherActivateWatchResponse is the response of XPackWatcherActivateWatchService.Do. +type XPackWatcherActivateWatchResponse struct { + Status *XPackWatchStatus `json:"status"` +} diff --git a/vendor/github.com/olivere/elastic/v7/xpack_watcher_deactivate_watch.go b/vendor/github.com/olivere/elastic/v7/xpack_watcher_deactivate_watch.go new file mode 100644 index 0000000000000000000000000000000000000000..42c5e55663769f6ddfdaaea46fcbae1240c9042e --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/xpack_watcher_deactivate_watch.go @@ -0,0 +1,169 @@ +// Copyright 2012-2018 Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "net/url" + "strings" + + "github.com/olivere/elastic/v7/uritemplates" +) + +// XPackWatcherDeactivateWatchService enables you to deactivate a currently active watch. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/watcher-api-deactivate-watch.html. +type XPackWatcherDeactivateWatchService struct { + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + + watchId string + masterTimeout string +} + +// NewXPackWatcherDeactivateWatchService creates a new XPackWatcherDeactivateWatchService. +func NewXPackWatcherDeactivateWatchService(client *Client) *XPackWatcherDeactivateWatchService { + return &XPackWatcherDeactivateWatchService{ + client: client, + } +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *XPackWatcherDeactivateWatchService) Pretty(pretty bool) *XPackWatcherDeactivateWatchService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *XPackWatcherDeactivateWatchService) Human(human bool) *XPackWatcherDeactivateWatchService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *XPackWatcherDeactivateWatchService) ErrorTrace(errorTrace bool) *XPackWatcherDeactivateWatchService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *XPackWatcherDeactivateWatchService) FilterPath(filterPath ...string) *XPackWatcherDeactivateWatchService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *XPackWatcherDeactivateWatchService) Header(name string, value string) *XPackWatcherDeactivateWatchService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *XPackWatcherDeactivateWatchService) Headers(headers http.Header) *XPackWatcherDeactivateWatchService { + s.headers = headers + return s +} + +// WatchId is the ID of the watch to deactivate. +func (s *XPackWatcherDeactivateWatchService) WatchId(watchId string) *XPackWatcherDeactivateWatchService { + s.watchId = watchId + return s +} + +// MasterTimeout specifies an explicit operation timeout for connection to master node. +func (s *XPackWatcherDeactivateWatchService) MasterTimeout(masterTimeout string) *XPackWatcherDeactivateWatchService { + s.masterTimeout = masterTimeout + return s +} + +// buildURL builds the URL for the operation. +func (s *XPackWatcherDeactivateWatchService) buildURL() (string, url.Values, error) { + // Build URL + path, err := uritemplates.Expand("/_watcher/watch/{watch_id}/_deactivate", map[string]string{ + "watch_id": s.watchId, + }) + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } + if s.masterTimeout != "" { + params.Set("master_timeout", s.masterTimeout) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *XPackWatcherDeactivateWatchService) Validate() error { + var invalid []string + if s.watchId == "" { + invalid = append(invalid, "WatchId") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the operation. +func (s *XPackWatcherDeactivateWatchService) Do(ctx context.Context) (*XPackWatcherDeactivateWatchResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "PUT", + Path: path, + Params: params, + Headers: s.headers, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(XPackWatcherDeactivateWatchResponse) + if err := json.Unmarshal(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// XPackWatcherDeactivateWatchResponse is the response of XPackWatcherDeactivateWatchService.Do. +type XPackWatcherDeactivateWatchResponse struct { + Status *XPackWatchStatus `json:"status"` +} diff --git a/vendor/github.com/olivere/elastic/v7/xpack_watcher_delete_watch.go b/vendor/github.com/olivere/elastic/v7/xpack_watcher_delete_watch.go new file mode 100644 index 0000000000000000000000000000000000000000..dc7e7f959562efdadaa892446b320a5e9ab34e54 --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/xpack_watcher_delete_watch.go @@ -0,0 +1,171 @@ +// Copyright 2012-2018 Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "net/url" + "strings" + + "github.com/olivere/elastic/v7/uritemplates" +) + +// XPackWatcherDeleteWatchService removes a watch. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/watcher-api-delete-watch.html. +type XPackWatcherDeleteWatchService struct { + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + + id string + masterTimeout string +} + +// NewXPackWatcherDeleteWatchService creates a new XPackWatcherDeleteWatchService. +func NewXPackWatcherDeleteWatchService(client *Client) *XPackWatcherDeleteWatchService { + return &XPackWatcherDeleteWatchService{ + client: client, + } +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *XPackWatcherDeleteWatchService) Pretty(pretty bool) *XPackWatcherDeleteWatchService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *XPackWatcherDeleteWatchService) Human(human bool) *XPackWatcherDeleteWatchService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *XPackWatcherDeleteWatchService) ErrorTrace(errorTrace bool) *XPackWatcherDeleteWatchService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *XPackWatcherDeleteWatchService) FilterPath(filterPath ...string) *XPackWatcherDeleteWatchService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *XPackWatcherDeleteWatchService) Header(name string, value string) *XPackWatcherDeleteWatchService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *XPackWatcherDeleteWatchService) Headers(headers http.Header) *XPackWatcherDeleteWatchService { + s.headers = headers + return s +} + +// Id of the watch to delete. +func (s *XPackWatcherDeleteWatchService) Id(id string) *XPackWatcherDeleteWatchService { + s.id = id + return s +} + +// MasterTimeout specifies an explicit operation timeout for connection to master node. +func (s *XPackWatcherDeleteWatchService) MasterTimeout(masterTimeout string) *XPackWatcherDeleteWatchService { + s.masterTimeout = masterTimeout + return s +} + +// buildURL builds the URL for the operation. +func (s *XPackWatcherDeleteWatchService) buildURL() (string, url.Values, error) { + // Build URL + path, err := uritemplates.Expand("/_watcher/watch/{id}", map[string]string{ + "id": s.id, + }) + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } + if s.masterTimeout != "" { + params.Set("master_timeout", s.masterTimeout) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *XPackWatcherDeleteWatchService) Validate() error { + var invalid []string + if s.id == "" { + invalid = append(invalid, "Id") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the operation. +func (s *XPackWatcherDeleteWatchService) Do(ctx context.Context) (*XPackWatcherDeleteWatchResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "DELETE", + Path: path, + Params: params, + Headers: s.headers, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(XPackWatcherDeleteWatchResponse) + if err := json.Unmarshal(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// XPackWatcherDeleteWatchResponse is the response of XPackWatcherDeleteWatchService.Do. +type XPackWatcherDeleteWatchResponse struct { + Found bool `json:"found"` + Id string `json:"_id"` + Version int `json:"_version"` +} diff --git a/vendor/github.com/olivere/elastic/v7/xpack_watcher_execute_watch.go b/vendor/github.com/olivere/elastic/v7/xpack_watcher_execute_watch.go new file mode 100644 index 0000000000000000000000000000000000000000..9a31c51ee345b7014adb3a92775fa90f06fa5aa6 --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/xpack_watcher_execute_watch.go @@ -0,0 +1,214 @@ +// Copyright 2012-2018 Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "net/url" + "strings" + + "github.com/olivere/elastic/v7/uritemplates" +) + +// XPackWatcherExecuteWatchService forces the execution of a stored watch. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/watcher-api-execute-watch.html. +type XPackWatcherExecuteWatchService struct { + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + + id string + debug *bool + bodyJson interface{} + bodyString string +} + +// NewXPackWatcherExecuteWatchService creates a new XPackWatcherExecuteWatchService. +func NewXPackWatcherExecuteWatchService(client *Client) *XPackWatcherExecuteWatchService { + return &XPackWatcherExecuteWatchService{ + client: client, + } +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *XPackWatcherExecuteWatchService) Pretty(pretty bool) *XPackWatcherExecuteWatchService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *XPackWatcherExecuteWatchService) Human(human bool) *XPackWatcherExecuteWatchService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *XPackWatcherExecuteWatchService) ErrorTrace(errorTrace bool) *XPackWatcherExecuteWatchService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *XPackWatcherExecuteWatchService) FilterPath(filterPath ...string) *XPackWatcherExecuteWatchService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *XPackWatcherExecuteWatchService) Header(name string, value string) *XPackWatcherExecuteWatchService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *XPackWatcherExecuteWatchService) Headers(headers http.Header) *XPackWatcherExecuteWatchService { + s.headers = headers + return s +} + +// Id of the watch to execute on. +func (s *XPackWatcherExecuteWatchService) Id(id string) *XPackWatcherExecuteWatchService { + s.id = id + return s +} + +// Debug indicates whether the watch should execute in debug mode. +func (s *XPackWatcherExecuteWatchService) Debug(debug bool) *XPackWatcherExecuteWatchService { + s.debug = &debug + return s +} + +// BodyJson is documented as: Execution control. +func (s *XPackWatcherExecuteWatchService) BodyJson(body interface{}) *XPackWatcherExecuteWatchService { + s.bodyJson = body + return s +} + +// BodyString is documented as: Execution control. +func (s *XPackWatcherExecuteWatchService) BodyString(body string) *XPackWatcherExecuteWatchService { + s.bodyString = body + return s +} + +// buildURL builds the URL for the operation. +func (s *XPackWatcherExecuteWatchService) buildURL() (string, url.Values, error) { + // Build URL + var ( + path string + err error + ) + if s.id != "" { + path, err = uritemplates.Expand("/_watcher/watch/{id}/_execute", map[string]string{ + "id": s.id, + }) + } else { + path = "/_watcher/watch/_execute" + } + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } + if v := s.debug; v != nil { + params.Set("debug", fmt.Sprint(*v)) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *XPackWatcherExecuteWatchService) Validate() error { + return nil +} + +// Do executes the operation. +func (s *XPackWatcherExecuteWatchService) Do(ctx context.Context) (*XPackWatcherExecuteWatchResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Setup HTTP request body + var body interface{} + if s.bodyJson != nil { + body = s.bodyJson + } else { + body = s.bodyString + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "PUT", + Path: path, + Params: params, + Body: body, + Headers: s.headers, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(XPackWatcherExecuteWatchResponse) + if err := json.Unmarshal(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// XPackWatcherExecuteWatchResponse is the response of XPackWatcherExecuteWatchService.Do. +type XPackWatcherExecuteWatchResponse struct { + Id string `json:"_id"` + WatchRecord *XPackWatchRecord `json:"watch_record"` +} + +type XPackWatchRecord struct { + WatchId string `json:"watch_id"` + Node string `json:"node"` + Messages []string `json:"messages"` + State string `json:"state"` + Status *XPackWatchRecordStatus `json:"status"` + Input map[string]map[string]interface{} `json:"input"` + Condition map[string]map[string]interface{} `json:"condition"` + Result map[string]interface{} `json:"Result"` +} + +type XPackWatchRecordStatus struct { + Version int `json:"version"` + State map[string]interface{} `json:"state"` + LastChecked string `json:"last_checked"` + LastMetCondition string `json:"last_met_condition"` + Actions map[string]map[string]interface{} `json:"actions"` + ExecutionState string `json:"execution_state"` +} diff --git a/vendor/github.com/olivere/elastic/v7/xpack_watcher_get_watch.go b/vendor/github.com/olivere/elastic/v7/xpack_watcher_get_watch.go new file mode 100644 index 0000000000000000000000000000000000000000..b0ce092883144ff82502e509703a933bb1b50454 --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/xpack_watcher_get_watch.go @@ -0,0 +1,214 @@ +// Copyright 2012-2018 Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "net/url" + "strings" + "time" + + "github.com/olivere/elastic/v7/uritemplates" +) + +// XPackWatcherGetWatchService retrieves a watch by its ID. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/watcher-api-get-watch.html. +type XPackWatcherGetWatchService struct { + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + + id string +} + +// NewXPackWatcherGetWatchService creates a new XPackWatcherGetWatchService. +func NewXPackWatcherGetWatchService(client *Client) *XPackWatcherGetWatchService { + return &XPackWatcherGetWatchService{ + client: client, + } +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *XPackWatcherGetWatchService) Pretty(pretty bool) *XPackWatcherGetWatchService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *XPackWatcherGetWatchService) Human(human bool) *XPackWatcherGetWatchService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *XPackWatcherGetWatchService) ErrorTrace(errorTrace bool) *XPackWatcherGetWatchService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *XPackWatcherGetWatchService) FilterPath(filterPath ...string) *XPackWatcherGetWatchService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *XPackWatcherGetWatchService) Header(name string, value string) *XPackWatcherGetWatchService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *XPackWatcherGetWatchService) Headers(headers http.Header) *XPackWatcherGetWatchService { + s.headers = headers + return s +} + +// Id is ID of the watch to retrieve. +func (s *XPackWatcherGetWatchService) Id(id string) *XPackWatcherGetWatchService { + s.id = id + return s +} + +// buildURL builds the URL for the operation. +func (s *XPackWatcherGetWatchService) buildURL() (string, url.Values, error) { + // Build URL + path, err := uritemplates.Expand("/_watcher/watch/{id}", map[string]string{ + "id": s.id, + }) + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *XPackWatcherGetWatchService) Validate() error { + var invalid []string + if s.id == "" { + invalid = append(invalid, "Id") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the operation. +func (s *XPackWatcherGetWatchService) Do(ctx context.Context) (*XPackWatcherGetWatchResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "GET", + Path: path, + Params: params, + Headers: s.headers, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(XPackWatcherGetWatchResponse) + if err := json.Unmarshal(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// XPackWatcherGetWatchResponse is the response of XPackWatcherGetWatchService.Do. +type XPackWatcherGetWatchResponse struct { + Found bool `json:"found"` + Id string `json:"_id"` + Version int64 `json:"_version,omitempty"` + Status *XPackWatchStatus `json:"status,omitempty"` + Watch *XPackWatch `json:"watch,omitempty"` +} + +type XPackWatchStatus struct { + State *XPackWatchExecutionState `json:"state,omitempty"` + LastChecked *time.Time `json:"last_checked,omitempty"` + LastMetCondition *time.Time `json:"last_met_condition,omitempty"` + Actions map[string]*XPackWatchActionStatus `json:"actions,omitempty"` + ExecutionState string `json:"execution_state,omitempty"` + Headers map[string]string `json:"headers,omitempty"` + Version int64 `json:"version"` +} + +type XPackWatchExecutionState struct { + Active bool `json:"active"` + Timestamp time.Time `json:"timestamp"` +} + +type XPackWatchActionStatus struct { + AckStatus *XPackWatchActionAckStatus `json:"ack"` + LastExecution *XPackWatchActionExecutionState `json:"last_execution,omitempty"` + LastSuccessfulExecution *XPackWatchActionExecutionState `json:"last_successful_execution,omitempty"` + LastThrottle *XPackWatchActionThrottle `json:"last_throttle,omitempty"` +} + +type XPackWatchActionAckStatus struct { + Timestamp time.Time `json:"timestamp"` + AckStatusState string `json:"ack_status_state"` +} + +type XPackWatchActionExecutionState struct { + Timestamp time.Time `json:"timestamp"` + Successful bool `json:"successful"` + Reason string `json:"reason,omitempty"` +} + +type XPackWatchActionThrottle struct { + Timestamp time.Time `json:"timestamp"` + Reason string `json:"reason,omitempty"` +} + +type XPackWatch struct { + Trigger map[string]map[string]interface{} `json:"trigger"` + Input map[string]map[string]interface{} `json:"input"` + Condition map[string]map[string]interface{} `json:"condition"` + Transform map[string]interface{} `json:"transform,omitempty"` + ThrottlePeriod string `json:"throttle_period,omitempty"` + ThrottlePeriodInMillis int64 `json:"throttle_period_in_millis,omitempty"` + Actions map[string]*XPackWatchActionStatus `json:"actions"` + Metadata map[string]interface{} `json:"metadata,omitempty"` + Status *XPackWatchStatus `json:"status,omitempty"` +} diff --git a/vendor/github.com/olivere/elastic/v7/xpack_watcher_put_watch.go b/vendor/github.com/olivere/elastic/v7/xpack_watcher_put_watch.go new file mode 100644 index 0000000000000000000000000000000000000000..03298253a46d0fdffa5ab73dcb0cf3713d5593fe --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/xpack_watcher_put_watch.go @@ -0,0 +1,212 @@ +// Copyright 2012-2018 Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "net/url" + "strings" + + "github.com/olivere/elastic/v7/uritemplates" +) + +// XPackWatcherPutWatchService either registers a new watch in Watcher +// or update an existing one. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/watcher-api-put-watch.html. +type XPackWatcherPutWatchService struct { + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + + id string + active *bool + masterTimeout string + ifSeqNo *int64 + ifPrimaryTerm *int64 + body interface{} +} + +// NewXPackWatcherPutWatchService creates a new XPackWatcherPutWatchService. +func NewXPackWatcherPutWatchService(client *Client) *XPackWatcherPutWatchService { + return &XPackWatcherPutWatchService{ + client: client, + } +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *XPackWatcherPutWatchService) Pretty(pretty bool) *XPackWatcherPutWatchService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *XPackWatcherPutWatchService) Human(human bool) *XPackWatcherPutWatchService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *XPackWatcherPutWatchService) ErrorTrace(errorTrace bool) *XPackWatcherPutWatchService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *XPackWatcherPutWatchService) FilterPath(filterPath ...string) *XPackWatcherPutWatchService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *XPackWatcherPutWatchService) Header(name string, value string) *XPackWatcherPutWatchService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *XPackWatcherPutWatchService) Headers(headers http.Header) *XPackWatcherPutWatchService { + s.headers = headers + return s +} + +// Id of the watch to upsert. +func (s *XPackWatcherPutWatchService) Id(id string) *XPackWatcherPutWatchService { + s.id = id + return s +} + +// Active specifies whether the watch is in/active by default. +func (s *XPackWatcherPutWatchService) Active(active bool) *XPackWatcherPutWatchService { + s.active = &active + return s +} + +// MasterTimeout is an explicit operation timeout for connection to master node. +func (s *XPackWatcherPutWatchService) MasterTimeout(masterTimeout string) *XPackWatcherPutWatchService { + s.masterTimeout = masterTimeout + return s +} + +// IfSeqNo indicates to update the watch only if the last operation that +// has changed the watch has the specified sequence number. +func (s *XPackWatcherPutWatchService) IfSeqNo(seqNo int64) *XPackWatcherPutWatchService { + s.ifSeqNo = &seqNo + return s +} + +// IfPrimaryTerm indicates to update the watch only if the last operation that +// has changed the watch has the specified primary term. +func (s *XPackWatcherPutWatchService) IfPrimaryTerm(primaryTerm int64) *XPackWatcherPutWatchService { + s.ifPrimaryTerm = &primaryTerm + return s +} + +// Body specifies the watch. Use a string or a type that will get serialized as JSON. +func (s *XPackWatcherPutWatchService) Body(body interface{}) *XPackWatcherPutWatchService { + s.body = body + return s +} + +// buildURL builds the URL for the operation. +func (s *XPackWatcherPutWatchService) buildURL() (string, url.Values, error) { + // Build URL + path, err := uritemplates.Expand("/_watcher/watch/{id}", map[string]string{ + "id": s.id, + }) + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } + if v := s.active; v != nil { + params.Set("active", fmt.Sprint(*v)) + } + if s.masterTimeout != "" { + params.Set("master_timeout", s.masterTimeout) + } + if v := s.ifSeqNo; v != nil { + params.Set("if_seq_no", fmt.Sprintf("%d", *v)) + } + if v := s.ifPrimaryTerm; v != nil { + params.Set("if_primary_term", fmt.Sprintf("%d", *v)) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *XPackWatcherPutWatchService) Validate() error { + var invalid []string + if s.id == "" { + invalid = append(invalid, "Id") + } + if s.body == nil { + invalid = append(invalid, "Body") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the operation. +func (s *XPackWatcherPutWatchService) Do(ctx context.Context) (*XPackWatcherPutWatchResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "PUT", + Path: path, + Params: params, + Body: s.body, + Headers: s.headers, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(XPackWatcherPutWatchResponse) + if err := json.Unmarshal(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// XPackWatcherPutWatchResponse is the response of XPackWatcherPutWatchService.Do. +type XPackWatcherPutWatchResponse struct { +} diff --git a/vendor/github.com/olivere/elastic/v7/xpack_watcher_start.go b/vendor/github.com/olivere/elastic/v7/xpack_watcher_start.go new file mode 100644 index 0000000000000000000000000000000000000000..3fb29a7ac37631805b111bc8a1e41773cfe27d31 --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/xpack_watcher_start.go @@ -0,0 +1,137 @@ +// Copyright 2012-2018 Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "net/url" + "strings" +) + +// XPackWatcherStartService starts the watcher service if it is not already running. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/watcher-api-start.html. +type XPackWatcherStartService struct { + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers +} + +// NewXPackWatcherStartService creates a new XPackWatcherStartService. +func NewXPackWatcherStartService(client *Client) *XPackWatcherStartService { + return &XPackWatcherStartService{ + client: client, + } +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *XPackWatcherStartService) Pretty(pretty bool) *XPackWatcherStartService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *XPackWatcherStartService) Human(human bool) *XPackWatcherStartService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *XPackWatcherStartService) ErrorTrace(errorTrace bool) *XPackWatcherStartService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *XPackWatcherStartService) FilterPath(filterPath ...string) *XPackWatcherStartService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *XPackWatcherStartService) Header(name string, value string) *XPackWatcherStartService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *XPackWatcherStartService) Headers(headers http.Header) *XPackWatcherStartService { + s.headers = headers + return s +} + +// buildURL builds the URL for the operation. +func (s *XPackWatcherStartService) buildURL() (string, url.Values, error) { + // Build URL path + path := "/_watcher/_start" + + // Add query string parameters + params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *XPackWatcherStartService) Validate() error { + return nil +} + +// Do executes the operation. +func (s *XPackWatcherStartService) Do(ctx context.Context) (*XPackWatcherStartResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "POST", + Path: path, + Params: params, + Headers: s.headers, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(XPackWatcherStartResponse) + if err := json.Unmarshal(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// XPackWatcherStartResponse is the response of XPackWatcherStartService.Do. +type XPackWatcherStartResponse struct { + Acknowledged bool `json:"acknowledged"` +} diff --git a/vendor/github.com/olivere/elastic/v7/xpack_watcher_stats.go b/vendor/github.com/olivere/elastic/v7/xpack_watcher_stats.go new file mode 100644 index 0000000000000000000000000000000000000000..9c615c2ec1fd931463db9e78a950f61816426144 --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/xpack_watcher_stats.go @@ -0,0 +1,165 @@ +// Copyright 2012-2018 Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "net/url" + "strings" +) + +// XPackWatcherStatsService returns the current watcher metrics. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/watcher-api-stats.html. +type XPackWatcherStatsService struct { + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers + + metric string + emitStacktraces *bool +} + +// NewXPackWatcherStatsService creates a new XPackWatcherStatsService. +func NewXPackWatcherStatsService(client *Client) *XPackWatcherStatsService { + return &XPackWatcherStatsService{ + client: client, + } +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *XPackWatcherStatsService) Pretty(pretty bool) *XPackWatcherStatsService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *XPackWatcherStatsService) Human(human bool) *XPackWatcherStatsService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *XPackWatcherStatsService) ErrorTrace(errorTrace bool) *XPackWatcherStatsService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *XPackWatcherStatsService) FilterPath(filterPath ...string) *XPackWatcherStatsService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *XPackWatcherStatsService) Header(name string, value string) *XPackWatcherStatsService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *XPackWatcherStatsService) Headers(headers http.Header) *XPackWatcherStatsService { + s.headers = headers + return s +} + +// Metric controls what additional stat metrics should be include in the response. +func (s *XPackWatcherStatsService) Metric(metric string) *XPackWatcherStatsService { + s.metric = metric + return s +} + +// EmitStacktraces, if enabled, emits stack traces of currently running watches. +func (s *XPackWatcherStatsService) EmitStacktraces(emitStacktraces bool) *XPackWatcherStatsService { + s.emitStacktraces = &emitStacktraces + return s +} + +// buildURL builds the URL for the operation. +func (s *XPackWatcherStatsService) buildURL() (string, url.Values, error) { + // Build URL + path := "/_watcher/stats" + + // Add query string parameters + params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } + if v := s.emitStacktraces; v != nil { + params.Set("emit_stacktraces", fmt.Sprint(*v)) + } + if s.metric != "" { + params.Set("metric", s.metric) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *XPackWatcherStatsService) Validate() error { + return nil +} + +// Do executes the operation. +func (s *XPackWatcherStatsService) Do(ctx context.Context) (*XPackWatcherStatsResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "GET", + Path: path, + Params: params, + Headers: s.headers, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(XPackWatcherStatsResponse) + if err := json.Unmarshal(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// XPackWatcherStatsResponse is the response of XPackWatcherStatsService.Do. +type XPackWatcherStatsResponse struct { + Stats []XPackWatcherStats `json:"stats"` +} + +// XPackWatcherStats represents the stats used in XPackWatcherStatsResponse. +type XPackWatcherStats struct { + WatcherState string `json:"watcher_state"` + WatchCount int `json:"watch_count"` + ExecutionThreadPool map[string]interface{} `json:"execution_thread_pool"` +} diff --git a/vendor/github.com/olivere/elastic/v7/xpack_watcher_stop.go b/vendor/github.com/olivere/elastic/v7/xpack_watcher_stop.go new file mode 100644 index 0000000000000000000000000000000000000000..d5fe9d09b21235f5488807e2ebb5d8216271d018 --- /dev/null +++ b/vendor/github.com/olivere/elastic/v7/xpack_watcher_stop.go @@ -0,0 +1,137 @@ +// Copyright 2012-2018 Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "net/url" + "strings" +) + +// XPackWatcherStopService stops the watcher service if it is running. +// See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/watcher-api-stop.html. +type XPackWatcherStopService struct { + client *Client + + pretty *bool // pretty format the returned JSON response + human *bool // return human readable values for statistics + errorTrace *bool // include the stack trace of returned errors + filterPath []string // list of filters used to reduce the response + headers http.Header // custom request-level HTTP headers +} + +// NewXPackWatcherStopService creates a new XPackWatcherStopService. +func NewXPackWatcherStopService(client *Client) *XPackWatcherStopService { + return &XPackWatcherStopService{ + client: client, + } +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *XPackWatcherStopService) Pretty(pretty bool) *XPackWatcherStopService { + s.pretty = &pretty + return s +} + +// Human specifies whether human readable values should be returned in +// the JSON response, e.g. "7.5mb". +func (s *XPackWatcherStopService) Human(human bool) *XPackWatcherStopService { + s.human = &human + return s +} + +// ErrorTrace specifies whether to include the stack trace of returned errors. +func (s *XPackWatcherStopService) ErrorTrace(errorTrace bool) *XPackWatcherStopService { + s.errorTrace = &errorTrace + return s +} + +// FilterPath specifies a list of filters used to reduce the response. +func (s *XPackWatcherStopService) FilterPath(filterPath ...string) *XPackWatcherStopService { + s.filterPath = filterPath + return s +} + +// Header adds a header to the request. +func (s *XPackWatcherStopService) Header(name string, value string) *XPackWatcherStopService { + if s.headers == nil { + s.headers = http.Header{} + } + s.headers.Add(name, value) + return s +} + +// Headers specifies the headers of the request. +func (s *XPackWatcherStopService) Headers(headers http.Header) *XPackWatcherStopService { + s.headers = headers + return s +} + +// buildURL builds the URL for the operation. +func (s *XPackWatcherStopService) buildURL() (string, url.Values, error) { + // Build URL path + path := "/_watcher/_stop" + + // Add query string parameters + params := url.Values{} + if v := s.pretty; v != nil { + params.Set("pretty", fmt.Sprint(*v)) + } + if v := s.human; v != nil { + params.Set("human", fmt.Sprint(*v)) + } + if v := s.errorTrace; v != nil { + params.Set("error_trace", fmt.Sprint(*v)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *XPackWatcherStopService) Validate() error { + return nil +} + +// Do executes the operation. +func (s *XPackWatcherStopService) Do(ctx context.Context) (*XPackWatcherStopResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "POST", + Path: path, + Params: params, + Headers: s.headers, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(XPackWatcherStopResponse) + if err := json.Unmarshal(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// XPackWatcherStopResponse is the response of XPackWatcherStopService.Do. +type XPackWatcherStopResponse struct { + Acknowledged bool `json:"acknowledged"` +} diff --git a/vendor/github.com/pkg/errors/.gitignore b/vendor/github.com/pkg/errors/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..daf913b1b347aae6de6f48d599bc89ef8c8693d6 --- /dev/null +++ b/vendor/github.com/pkg/errors/.gitignore @@ -0,0 +1,24 @@ +# Compiled Object files, Static and Dynamic libs (Shared Objects) +*.o +*.a +*.so + +# Folders +_obj +_test + +# Architecture specific extensions/prefixes +*.[568vq] +[568vq].out + +*.cgo1.go +*.cgo2.c +_cgo_defun.c +_cgo_gotypes.go +_cgo_export.* + +_testmain.go + +*.exe +*.test +*.prof diff --git a/vendor/github.com/pkg/errors/.travis.yml b/vendor/github.com/pkg/errors/.travis.yml new file mode 100644 index 0000000000000000000000000000000000000000..9159de03e03db33c638044251c3ffe1fc2ab7e95 --- /dev/null +++ b/vendor/github.com/pkg/errors/.travis.yml @@ -0,0 +1,10 @@ +language: go +go_import_path: github.com/pkg/errors +go: + - 1.11.x + - 1.12.x + - 1.13.x + - tip + +script: + - make check diff --git a/vendor/github.com/pkg/errors/Makefile b/vendor/github.com/pkg/errors/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..ce9d7cded649a1d1c40da875136344d2130f6bff --- /dev/null +++ b/vendor/github.com/pkg/errors/Makefile @@ -0,0 +1,44 @@ +PKGS := github.com/pkg/errors +SRCDIRS := $(shell go list -f '{{.Dir}}' $(PKGS)) +GO := go + +check: test vet gofmt misspell unconvert staticcheck ineffassign unparam + +test: + $(GO) test $(PKGS) + +vet: | test + $(GO) vet $(PKGS) + +staticcheck: + $(GO) get honnef.co/go/tools/cmd/staticcheck + staticcheck -checks all $(PKGS) + +misspell: + $(GO) get github.com/client9/misspell/cmd/misspell + misspell \ + -locale GB \ + -error \ + *.md *.go + +unconvert: + $(GO) get github.com/mdempsky/unconvert + unconvert -v $(PKGS) + +ineffassign: + $(GO) get github.com/gordonklaus/ineffassign + find $(SRCDIRS) -name '*.go' | xargs ineffassign + +pedantic: check errcheck + +unparam: + $(GO) get mvdan.cc/unparam + unparam ./... + +errcheck: + $(GO) get github.com/kisielk/errcheck + errcheck $(PKGS) + +gofmt: + @echo Checking code is gofmted + @test -z "$(shell gofmt -s -l -d -e $(SRCDIRS) | tee /dev/stderr)" diff --git a/vendor/github.com/pkg/errors/README.md b/vendor/github.com/pkg/errors/README.md index 6483ba2afb51278516423dc013fcfa275ee597a9..54dfdcb12ea1b5b2a33aba639b7ffe412cae44ce 100644 --- a/vendor/github.com/pkg/errors/README.md +++ b/vendor/github.com/pkg/errors/README.md @@ -41,11 +41,18 @@ default: [Read the package documentation for more information](https://godoc.org/github.com/pkg/errors). +## Roadmap + +With the upcoming [Go2 error proposals](https://go.googlesource.com/proposal/+/master/design/go2draft.md) this package is moving into maintenance mode. The roadmap for a 1.0 release is as follows: + +- 0.9. Remove pre Go 1.9 and Go 1.10 support, address outstanding pull requests (if possible) +- 1.0. Final release. + ## Contributing -We welcome pull requests, bug fixes and issue reports. With that said, the bar for adding new symbols to this package is intentionally set high. +Because of the Go2 errors changes, this package is not accepting proposals for new functionality. With that said, we welcome pull requests, bug fixes and issue reports. -Before proposing a change, please discuss your change by raising an issue. +Before sending a PR, please discuss your change by raising an issue. ## License diff --git a/vendor/github.com/pkg/errors/errors.go b/vendor/github.com/pkg/errors/errors.go index 842ee80456dbaab024d2a0f1ca524f7b7c5f241a..161aea258296917e31752cda8d7f5aaf4f691f38 100644 --- a/vendor/github.com/pkg/errors/errors.go +++ b/vendor/github.com/pkg/errors/errors.go @@ -6,7 +6,7 @@ // return err // } // -// which applied recursively up the call stack results in error reports +// which when applied recursively up the call stack results in error reports // without context or debugging information. The errors package allows // programmers to add context to the failure path in their code in a way // that does not destroy the original value of the error. @@ -15,16 +15,17 @@ // // The errors.Wrap function returns a new error that adds context to the // original error by recording a stack trace at the point Wrap is called, -// and the supplied message. For example +// together with the supplied message. For example // // _, err := ioutil.ReadAll(r) // if err != nil { // return errors.Wrap(err, "read failed") // } // -// If additional control is required the errors.WithStack and errors.WithMessage -// functions destructure errors.Wrap into its component operations of annotating -// an error with a stack trace and an a message, respectively. +// If additional control is required, the errors.WithStack and +// errors.WithMessage functions destructure errors.Wrap into its component +// operations: annotating an error with a stack trace and with a message, +// respectively. // // Retrieving the cause of an error // @@ -38,7 +39,7 @@ // } // // can be inspected by errors.Cause. errors.Cause will recursively retrieve -// the topmost error which does not implement causer, which is assumed to be +// the topmost error that does not implement causer, which is assumed to be // the original cause. For example: // // switch err := errors.Cause(err).(type) { @@ -48,16 +49,16 @@ // // unknown error // } // -// causer interface is not exported by this package, but is considered a part -// of stable public API. +// Although the causer interface is not exported by this package, it is +// considered a part of its stable public interface. // // Formatted printing of errors // // All error values returned from this package implement fmt.Formatter and can -// be formatted by the fmt package. The following verbs are supported +// be formatted by the fmt package. The following verbs are supported: // // %s print the error. If the error has a Cause it will be -// printed recursively +// printed recursively. // %v see %s // %+v extended format. Each Frame of the error's StackTrace will // be printed in detail. @@ -65,13 +66,13 @@ // Retrieving the stack trace of an error or wrapper // // New, Errorf, Wrap, and Wrapf record a stack trace at the point they are -// invoked. This information can be retrieved with the following interface. +// invoked. This information can be retrieved with the following interface: // // type stackTracer interface { // StackTrace() errors.StackTrace // } // -// Where errors.StackTrace is defined as +// The returned errors.StackTrace type is defined as // // type StackTrace []Frame // @@ -81,12 +82,12 @@ // // if err, ok := err.(stackTracer); ok { // for _, f := range err.StackTrace() { -// fmt.Printf("%+s:%d", f) +// fmt.Printf("%+s:%d\n", f, f) // } // } // -// stackTracer interface is not exported by this package, but is considered a part -// of stable public API. +// Although the stackTracer interface is not exported by this package, it is +// considered a part of its stable public interface. // // See the documentation for Frame.Format for more details. package errors @@ -158,6 +159,9 @@ type withStack struct { func (w *withStack) Cause() error { return w.error } +// Unwrap provides compatibility for Go 1.13 error chains. +func (w *withStack) Unwrap() error { return w.error } + func (w *withStack) Format(s fmt.State, verb rune) { switch verb { case 'v': @@ -192,7 +196,7 @@ func Wrap(err error, message string) error { } // Wrapf returns an error annotating err with a stack trace -// at the point Wrapf is call, and the format specifier. +// at the point Wrapf is called, and the format specifier. // If err is nil, Wrapf returns nil. func Wrapf(err error, format string, args ...interface{}) error { if err == nil { @@ -220,6 +224,18 @@ func WithMessage(err error, message string) error { } } +// WithMessagef annotates err with the format specifier. +// If err is nil, WithMessagef returns nil. +func WithMessagef(err error, format string, args ...interface{}) error { + if err == nil { + return nil + } + return &withMessage{ + cause: err, + msg: fmt.Sprintf(format, args...), + } +} + type withMessage struct { cause error msg string @@ -228,6 +244,9 @@ type withMessage struct { func (w *withMessage) Error() string { return w.msg + ": " + w.cause.Error() } func (w *withMessage) Cause() error { return w.cause } +// Unwrap provides compatibility for Go 1.13 error chains. +func (w *withMessage) Unwrap() error { return w.cause } + func (w *withMessage) Format(s fmt.State, verb rune) { switch verb { case 'v': diff --git a/vendor/github.com/pkg/errors/go113.go b/vendor/github.com/pkg/errors/go113.go new file mode 100644 index 0000000000000000000000000000000000000000..be0d10d0c793dd8c2962300be806becfed3af273 --- /dev/null +++ b/vendor/github.com/pkg/errors/go113.go @@ -0,0 +1,38 @@ +// +build go1.13 + +package errors + +import ( + stderrors "errors" +) + +// Is reports whether any error in err's chain matches target. +// +// The chain consists of err itself followed by the sequence of errors obtained by +// repeatedly calling Unwrap. +// +// An error is considered to match a target if it is equal to that target or if +// it implements a method Is(error) bool such that Is(target) returns true. +func Is(err, target error) bool { return stderrors.Is(err, target) } + +// As finds the first error in err's chain that matches target, and if so, sets +// target to that error value and returns true. +// +// The chain consists of err itself followed by the sequence of errors obtained by +// repeatedly calling Unwrap. +// +// An error matches target if the error's concrete value is assignable to the value +// pointed to by target, or if the error has a method As(interface{}) bool such that +// As(target) returns true. In the latter case, the As method is responsible for +// setting target. +// +// As will panic if target is not a non-nil pointer to either a type that implements +// error, or to any interface type. As returns false if err is nil. +func As(err error, target interface{}) bool { return stderrors.As(err, target) } + +// Unwrap returns the result of calling the Unwrap method on err, if err's +// type contains an Unwrap method returning error. +// Otherwise, Unwrap returns nil. +func Unwrap(err error) error { + return stderrors.Unwrap(err) +} diff --git a/vendor/github.com/pkg/errors/stack.go b/vendor/github.com/pkg/errors/stack.go index 2874a048cf3e6f03a74179e408aaeedd6b2951b4..779a8348fb9c2cd08f4bcb1d3915ba7755eb187c 100644 --- a/vendor/github.com/pkg/errors/stack.go +++ b/vendor/github.com/pkg/errors/stack.go @@ -5,10 +5,13 @@ import ( "io" "path" "runtime" + "strconv" "strings" ) // Frame represents a program counter inside a stack frame. +// For historical reasons if Frame is interpreted as a uintptr +// its value represents the program counter + 1. type Frame uintptr // pc returns the program counter for this frame; @@ -37,6 +40,15 @@ func (f Frame) line() int { return line } +// name returns the name of this function, if known. +func (f Frame) name() string { + fn := runtime.FuncForPC(f.pc()) + if fn == nil { + return "unknown" + } + return fn.Name() +} + // Format formats the frame according to the fmt.Formatter interface. // // %s source file @@ -54,22 +66,16 @@ func (f Frame) Format(s fmt.State, verb rune) { case 's': switch { case s.Flag('+'): - pc := f.pc() - fn := runtime.FuncForPC(pc) - if fn == nil { - io.WriteString(s, "unknown") - } else { - file, _ := fn.FileLine(pc) - fmt.Fprintf(s, "%s\n\t%s", fn.Name(), file) - } + io.WriteString(s, f.name()) + io.WriteString(s, "\n\t") + io.WriteString(s, f.file()) default: io.WriteString(s, path.Base(f.file())) } case 'd': - fmt.Fprintf(s, "%d", f.line()) + io.WriteString(s, strconv.Itoa(f.line())) case 'n': - name := runtime.FuncForPC(f.pc()).Name() - io.WriteString(s, funcname(name)) + io.WriteString(s, funcname(f.name())) case 'v': f.Format(s, 's') io.WriteString(s, ":") @@ -77,6 +83,16 @@ func (f Frame) Format(s fmt.State, verb rune) { } } +// MarshalText formats a stacktrace Frame as a text string. The output is the +// same as that of fmt.Sprintf("%+v", f), but without newlines or tabs. +func (f Frame) MarshalText() ([]byte, error) { + name := f.name() + if name == "unknown" { + return []byte(name), nil + } + return []byte(fmt.Sprintf("%s %s:%d", name, f.file(), f.line())), nil +} + // StackTrace is stack of Frames from innermost (newest) to outermost (oldest). type StackTrace []Frame @@ -94,16 +110,30 @@ func (st StackTrace) Format(s fmt.State, verb rune) { switch { case s.Flag('+'): for _, f := range st { - fmt.Fprintf(s, "\n%+v", f) + io.WriteString(s, "\n") + f.Format(s, verb) } case s.Flag('#'): fmt.Fprintf(s, "%#v", []Frame(st)) default: - fmt.Fprintf(s, "%v", []Frame(st)) + st.formatSlice(s, verb) } case 's': - fmt.Fprintf(s, "%s", []Frame(st)) + st.formatSlice(s, verb) + } +} + +// formatSlice will format this StackTrace into the given buffer as a slice of +// Frame, only valid when called with '%s' or '%v'. +func (st StackTrace) formatSlice(s fmt.State, verb rune) { + io.WriteString(s, "[") + for i, f := range st { + if i > 0 { + io.WriteString(s, " ") + } + f.Format(s, verb) } + io.WriteString(s, "]") } // stack represents a stack of program counters. diff --git a/vendor/gopkg.in/olivere/elastic.v6/LICENSE b/vendor/gopkg.in/olivere/elastic.v6/LICENSE deleted file mode 100644 index 8b22cdb6014c39ef4cd055215e9df74e86192f67..0000000000000000000000000000000000000000 --- a/vendor/gopkg.in/olivere/elastic.v6/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -The MIT License (MIT) -Copyright © 2012-2015 Oliver Eilhard - -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. diff --git a/vendor/gopkg.in/olivere/elastic.v6/go.mod b/vendor/gopkg.in/olivere/elastic.v6/go.mod deleted file mode 100644 index cde57f58c9fd5dbe61218d0a54cd5f4012c17c79..0000000000000000000000000000000000000000 --- a/vendor/gopkg.in/olivere/elastic.v6/go.mod +++ /dev/null @@ -1,13 +0,0 @@ -module github.com/olivere/elastic/v6 - -require ( - github.com/fortytw2/leaktest v1.2.0 - github.com/google/uuid v0.0.0-20171129191014-dec09d789f3d - github.com/mailru/easyjson v0.0.0-20180730094502-03f2033d19d5 - github.com/olivere/elastic v6.1.25+incompatible - github.com/olivere/env v1.0.0 - github.com/pkg/errors v0.8.0 - github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9 - golang.org/x/net v0.0.0-20180801234040-f4c29de78a2a - golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f -) diff --git a/vendor/gopkg.in/olivere/elastic.v6/indices_create.go b/vendor/gopkg.in/olivere/elastic.v6/indices_create.go deleted file mode 100644 index 08d8e5392d5e700d2c57d24af0d3f4bce04242ef..0000000000000000000000000000000000000000 --- a/vendor/gopkg.in/olivere/elastic.v6/indices_create.go +++ /dev/null @@ -1,136 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "errors" - "net/url" - - "github.com/olivere/elastic/uritemplates" -) - -// IndicesCreateService creates a new index. -// -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-create-index.html -// for details. -type IndicesCreateService struct { - client *Client - pretty bool - index string - timeout string - masterTimeout string - bodyJson interface{} - bodyString string -} - -// NewIndicesCreateService returns a new IndicesCreateService. -func NewIndicesCreateService(client *Client) *IndicesCreateService { - return &IndicesCreateService{client: client} -} - -// Index is the name of the index to create. -func (b *IndicesCreateService) Index(index string) *IndicesCreateService { - b.index = index - return b -} - -// Timeout the explicit operation timeout, e.g. "5s". -func (s *IndicesCreateService) Timeout(timeout string) *IndicesCreateService { - s.timeout = timeout - return s -} - -// MasterTimeout specifies the timeout for connection to master. -func (s *IndicesCreateService) MasterTimeout(masterTimeout string) *IndicesCreateService { - s.masterTimeout = masterTimeout - return s -} - -// Body specifies the configuration of the index as a string. -// It is an alias for BodyString. -func (b *IndicesCreateService) Body(body string) *IndicesCreateService { - b.bodyString = body - return b -} - -// BodyString specifies the configuration of the index as a string. -func (b *IndicesCreateService) BodyString(body string) *IndicesCreateService { - b.bodyString = body - return b -} - -// BodyJson specifies the configuration of the index. The interface{} will -// be serializes as a JSON document, so use a map[string]interface{}. -func (b *IndicesCreateService) BodyJson(body interface{}) *IndicesCreateService { - b.bodyJson = body - return b -} - -// Pretty indicates that the JSON response be indented and human readable. -func (b *IndicesCreateService) Pretty(pretty bool) *IndicesCreateService { - b.pretty = pretty - return b -} - -// Do executes the operation. -func (b *IndicesCreateService) Do(ctx context.Context) (*IndicesCreateResult, error) { - if b.index == "" { - return nil, errors.New("missing index name") - } - - // Build url - path, err := uritemplates.Expand("/{index}", map[string]string{ - "index": b.index, - }) - if err != nil { - return nil, err - } - - params := make(url.Values) - if b.pretty { - params.Set("pretty", "true") - } - if b.masterTimeout != "" { - params.Set("master_timeout", b.masterTimeout) - } - if b.timeout != "" { - params.Set("timeout", b.timeout) - } - - // Setup HTTP request body - var body interface{} - if b.bodyJson != nil { - body = b.bodyJson - } else { - body = b.bodyString - } - - // Get response - res, err := b.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "PUT", - Path: path, - Params: params, - Body: body, - }) - if err != nil { - return nil, err - } - - ret := new(IndicesCreateResult) - if err := b.client.decoder.Decode(res.Body, ret); err != nil { - return nil, err - } - return ret, nil -} - -// -- Result of a create index request. - -// IndicesCreateResult is the outcome of creating a new index. -type IndicesCreateResult struct { - Acknowledged bool `json:"acknowledged"` - ShardsAcknowledged bool `json:"shards_acknowledged"` - Index string `json:"index,omitempty"` -} diff --git a/vendor/gopkg.in/olivere/elastic.v6/indices_exists_type.go b/vendor/gopkg.in/olivere/elastic.v6/indices_exists_type.go deleted file mode 100644 index 76db6b3c85f758214bbcc576d94c26493a3ae9e2..0000000000000000000000000000000000000000 --- a/vendor/gopkg.in/olivere/elastic.v6/indices_exists_type.go +++ /dev/null @@ -1,165 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "fmt" - "net/http" - "net/url" - "strings" - - "github.com/olivere/elastic/uritemplates" -) - -// IndicesExistsTypeService checks if one or more types exist in one or more indices. -// -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-types-exists.html -// for details. -type IndicesExistsTypeService struct { - client *Client - pretty bool - typ []string - index []string - expandWildcards string - local *bool - ignoreUnavailable *bool - allowNoIndices *bool -} - -// NewIndicesExistsTypeService creates a new IndicesExistsTypeService. -func NewIndicesExistsTypeService(client *Client) *IndicesExistsTypeService { - return &IndicesExistsTypeService{ - client: client, - } -} - -// Index is a list of index names; use `_all` to check the types across all indices. -func (s *IndicesExistsTypeService) Index(indices ...string) *IndicesExistsTypeService { - s.index = append(s.index, indices...) - return s -} - -// Type is a list of document types to check. -func (s *IndicesExistsTypeService) Type(types ...string) *IndicesExistsTypeService { - s.typ = append(s.typ, types...) - return s -} - -// IgnoreUnavailable indicates whether specified concrete indices should be -// ignored when unavailable (missing or closed). -func (s *IndicesExistsTypeService) IgnoreUnavailable(ignoreUnavailable bool) *IndicesExistsTypeService { - s.ignoreUnavailable = &ignoreUnavailable - return s -} - -// AllowNoIndices indicates whether to ignore if a wildcard indices -// expression resolves into no concrete indices. -// (This includes `_all` string or when no indices have been specified). -func (s *IndicesExistsTypeService) AllowNoIndices(allowNoIndices bool) *IndicesExistsTypeService { - s.allowNoIndices = &allowNoIndices - return s -} - -// ExpandWildcards indicates whether to expand wildcard expression to -// concrete indices that are open, closed or both. -func (s *IndicesExistsTypeService) ExpandWildcards(expandWildcards string) *IndicesExistsTypeService { - s.expandWildcards = expandWildcards - return s -} - -// Local specifies whether to return local information, i.e. do not retrieve -// the state from master node (default: false). -func (s *IndicesExistsTypeService) Local(local bool) *IndicesExistsTypeService { - s.local = &local - return s -} - -// Pretty indicates that the JSON response be indented and human readable. -func (s *IndicesExistsTypeService) Pretty(pretty bool) *IndicesExistsTypeService { - s.pretty = pretty - return s -} - -// buildURL builds the URL for the operation. -func (s *IndicesExistsTypeService) buildURL() (string, url.Values, error) { - // Build URL - path, err := uritemplates.Expand("/{index}/_mapping/{type}", map[string]string{ - "index": strings.Join(s.index, ","), - "type": strings.Join(s.typ, ","), - }) - if err != nil { - return "", url.Values{}, err - } - - // Add query string parameters - params := url.Values{} - if s.pretty { - params.Set("pretty", "true") - } - if s.ignoreUnavailable != nil { - params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) - } - if s.allowNoIndices != nil { - params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) - } - if s.expandWildcards != "" { - params.Set("expand_wildcards", s.expandWildcards) - } - if s.local != nil { - params.Set("local", fmt.Sprintf("%v", *s.local)) - } - return path, params, nil -} - -// Validate checks if the operation is valid. -func (s *IndicesExistsTypeService) Validate() error { - var invalid []string - if len(s.index) == 0 { - invalid = append(invalid, "Index") - } - if len(s.typ) == 0 { - invalid = append(invalid, "Type") - } - if len(invalid) > 0 { - return fmt.Errorf("missing required fields: %v", invalid) - } - return nil -} - -// Do executes the operation. -func (s *IndicesExistsTypeService) Do(ctx context.Context) (bool, error) { - // Check pre-conditions - if err := s.Validate(); err != nil { - return false, err - } - - // Get URL for request - path, params, err := s.buildURL() - if err != nil { - return false, err - } - - // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "HEAD", - Path: path, - Params: params, - IgnoreErrors: []int{404}, - }) - if err != nil { - return false, err - } - - // Return operation response - switch res.StatusCode { - case http.StatusOK: - return true, nil - case http.StatusNotFound: - return false, nil - default: - return false, fmt.Errorf("elastic: got HTTP code %d when it should have been either 200 or 404", res.StatusCode) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v6/indices_refresh.go b/vendor/gopkg.in/olivere/elastic.v6/indices_refresh.go deleted file mode 100644 index 712cdc57e5f823104f5902d95f5537f45aae482e..0000000000000000000000000000000000000000 --- a/vendor/gopkg.in/olivere/elastic.v6/indices_refresh.go +++ /dev/null @@ -1,98 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "fmt" - "net/url" - "strings" - - "github.com/olivere/elastic/uritemplates" -) - -// RefreshService explicitly refreshes one or more indices. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-refresh.html. -type RefreshService struct { - client *Client - index []string - pretty bool -} - -// NewRefreshService creates a new instance of RefreshService. -func NewRefreshService(client *Client) *RefreshService { - builder := &RefreshService{ - client: client, - } - return builder -} - -// Index specifies the indices to refresh. -func (s *RefreshService) Index(index ...string) *RefreshService { - s.index = append(s.index, index...) - return s -} - -// Pretty asks Elasticsearch to return indented JSON. -func (s *RefreshService) Pretty(pretty bool) *RefreshService { - s.pretty = pretty - return s -} - -// buildURL builds the URL for the operation. -func (s *RefreshService) buildURL() (string, url.Values, error) { - var err error - var path string - - if len(s.index) > 0 { - path, err = uritemplates.Expand("/{index}/_refresh", map[string]string{ - "index": strings.Join(s.index, ","), - }) - } else { - path = "/_refresh" - } - if err != nil { - return "", url.Values{}, err - } - - // Add query string parameters - params := url.Values{} - if s.pretty { - params.Set("pretty", fmt.Sprintf("%v", s.pretty)) - } - return path, params, nil -} - -// Do executes the request. -func (s *RefreshService) Do(ctx context.Context) (*RefreshResult, error) { - path, params, err := s.buildURL() - if err != nil { - return nil, err - } - - // Get response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "POST", - Path: path, - Params: params, - }) - if err != nil { - return nil, err - } - - // Return result - ret := new(RefreshResult) - if err := s.client.decoder.Decode(res.Body, ret); err != nil { - return nil, err - } - return ret, nil -} - -// -- Result of a refresh request. - -// RefreshResult is the outcome of RefreshService.Do. -type RefreshResult struct { - Shards shardsInfo `json:"_shards,omitempty"` -} diff --git a/vendor/gopkg.in/olivere/elastic.v6/indices_stats.go b/vendor/gopkg.in/olivere/elastic.v6/indices_stats.go deleted file mode 100644 index e237e456eb92d8cf065292dd1173788bb8217205..0000000000000000000000000000000000000000 --- a/vendor/gopkg.in/olivere/elastic.v6/indices_stats.go +++ /dev/null @@ -1,392 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "fmt" - "net/url" - "strings" - - "github.com/olivere/elastic/uritemplates" -) - -// IndicesStatsService provides stats on various metrics of one or more -// indices. See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-stats.html. -type IndicesStatsService struct { - client *Client - pretty bool - metric []string - index []string - level string - types []string - completionFields []string - fielddataFields []string - fields []string - groups []string - human *bool -} - -// NewIndicesStatsService creates a new IndicesStatsService. -func NewIndicesStatsService(client *Client) *IndicesStatsService { - return &IndicesStatsService{ - client: client, - index: make([]string, 0), - metric: make([]string, 0), - completionFields: make([]string, 0), - fielddataFields: make([]string, 0), - fields: make([]string, 0), - groups: make([]string, 0), - types: make([]string, 0), - } -} - -// Metric limits the information returned the specific metrics. Options are: -// docs, store, indexing, get, search, completion, fielddata, flush, merge, -// query_cache, refresh, suggest, and warmer. -func (s *IndicesStatsService) Metric(metric ...string) *IndicesStatsService { - s.metric = append(s.metric, metric...) - return s -} - -// Index is the list of index names; use `_all` or empty string to perform -// the operation on all indices. -func (s *IndicesStatsService) Index(indices ...string) *IndicesStatsService { - s.index = append(s.index, indices...) - return s -} - -// Type is a list of document types for the `indexing` index metric. -func (s *IndicesStatsService) Type(types ...string) *IndicesStatsService { - s.types = append(s.types, types...) - return s -} - -// Level returns stats aggregated at cluster, index or shard level. -func (s *IndicesStatsService) Level(level string) *IndicesStatsService { - s.level = level - return s -} - -// CompletionFields is a list of fields for `fielddata` and `suggest` -// index metric (supports wildcards). -func (s *IndicesStatsService) CompletionFields(completionFields ...string) *IndicesStatsService { - s.completionFields = append(s.completionFields, completionFields...) - return s -} - -// FielddataFields is a list of fields for `fielddata` index metric (supports wildcards). -func (s *IndicesStatsService) FielddataFields(fielddataFields ...string) *IndicesStatsService { - s.fielddataFields = append(s.fielddataFields, fielddataFields...) - return s -} - -// Fields is a list of fields for `fielddata` and `completion` index metric -// (supports wildcards). -func (s *IndicesStatsService) Fields(fields ...string) *IndicesStatsService { - s.fields = append(s.fields, fields...) - return s -} - -// Groups is a list of search groups for `search` index metric. -func (s *IndicesStatsService) Groups(groups ...string) *IndicesStatsService { - s.groups = append(s.groups, groups...) - return s -} - -// Human indicates whether to return time and byte values in human-readable format.. -func (s *IndicesStatsService) Human(human bool) *IndicesStatsService { - s.human = &human - return s -} - -// Pretty indicates that the JSON response be indented and human readable. -func (s *IndicesStatsService) Pretty(pretty bool) *IndicesStatsService { - s.pretty = pretty - return s -} - -// buildURL builds the URL for the operation. -func (s *IndicesStatsService) buildURL() (string, url.Values, error) { - var err error - var path string - if len(s.index) > 0 && len(s.metric) > 0 { - path, err = uritemplates.Expand("/{index}/_stats/{metric}", map[string]string{ - "index": strings.Join(s.index, ","), - "metric": strings.Join(s.metric, ","), - }) - } else if len(s.index) > 0 { - path, err = uritemplates.Expand("/{index}/_stats", map[string]string{ - "index": strings.Join(s.index, ","), - }) - } else if len(s.metric) > 0 { - path, err = uritemplates.Expand("/_stats/{metric}", map[string]string{ - "metric": strings.Join(s.metric, ","), - }) - } else { - path = "/_stats" - } - if err != nil { - return "", url.Values{}, err - } - - // Add query string parameters - params := url.Values{} - if s.pretty { - params.Set("pretty", "true") - } - if len(s.groups) > 0 { - params.Set("groups", strings.Join(s.groups, ",")) - } - if s.human != nil { - params.Set("human", fmt.Sprintf("%v", *s.human)) - } - if s.level != "" { - params.Set("level", s.level) - } - if len(s.types) > 0 { - params.Set("types", strings.Join(s.types, ",")) - } - if len(s.completionFields) > 0 { - params.Set("completion_fields", strings.Join(s.completionFields, ",")) - } - if len(s.fielddataFields) > 0 { - params.Set("fielddata_fields", strings.Join(s.fielddataFields, ",")) - } - if len(s.fields) > 0 { - params.Set("fields", strings.Join(s.fields, ",")) - } - return path, params, nil -} - -// Validate checks if the operation is valid. -func (s *IndicesStatsService) Validate() error { - return nil -} - -// Do executes the operation. -func (s *IndicesStatsService) Do(ctx context.Context) (*IndicesStatsResponse, error) { - // Check pre-conditions - if err := s.Validate(); err != nil { - return nil, err - } - - // Get URL for request - path, params, err := s.buildURL() - if err != nil { - return nil, err - } - - // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, - }) - if err != nil { - return nil, err - } - - // Return operation response - ret := new(IndicesStatsResponse) - if err := s.client.decoder.Decode(res.Body, ret); err != nil { - return nil, err - } - return ret, nil -} - -// IndicesStatsResponse is the response of IndicesStatsService.Do. -type IndicesStatsResponse struct { - // Shards provides information returned from shards. - Shards shardsInfo `json:"_shards"` - - // All provides summary stats about all indices. - All *IndexStats `json:"_all,omitempty"` - - // Indices provides a map into the stats of an index. The key of the - // map is the index name. - Indices map[string]*IndexStats `json:"indices,omitempty"` -} - -// IndexStats is index stats for a specific index. -type IndexStats struct { - Primaries *IndexStatsDetails `json:"primaries,omitempty"` - Total *IndexStatsDetails `json:"total,omitempty"` -} - -type IndexStatsDetails struct { - Docs *IndexStatsDocs `json:"docs,omitempty"` - Store *IndexStatsStore `json:"store,omitempty"` - Indexing *IndexStatsIndexing `json:"indexing,omitempty"` - Get *IndexStatsGet `json:"get,omitempty"` - Search *IndexStatsSearch `json:"search,omitempty"` - Merges *IndexStatsMerges `json:"merges,omitempty"` - Refresh *IndexStatsRefresh `json:"refresh,omitempty"` - Flush *IndexStatsFlush `json:"flush,omitempty"` - Warmer *IndexStatsWarmer `json:"warmer,omitempty"` - FilterCache *IndexStatsFilterCache `json:"filter_cache,omitempty"` - IdCache *IndexStatsIdCache `json:"id_cache,omitempty"` - Fielddata *IndexStatsFielddata `json:"fielddata,omitempty"` - Percolate *IndexStatsPercolate `json:"percolate,omitempty"` - Completion *IndexStatsCompletion `json:"completion,omitempty"` - Segments *IndexStatsSegments `json:"segments,omitempty"` - Translog *IndexStatsTranslog `json:"translog,omitempty"` - Suggest *IndexStatsSuggest `json:"suggest,omitempty"` - QueryCache *IndexStatsQueryCache `json:"query_cache,omitempty"` -} - -type IndexStatsDocs struct { - Count int64 `json:"count,omitempty"` - Deleted int64 `json:"deleted,omitempty"` -} - -type IndexStatsStore struct { - Size string `json:"size,omitempty"` // human size, e.g. 119.3mb - SizeInBytes int64 `json:"size_in_bytes,omitempty"` -} - -type IndexStatsIndexing struct { - IndexTotal int64 `json:"index_total,omitempty"` - IndexTime string `json:"index_time,omitempty"` - IndexTimeInMillis int64 `json:"index_time_in_millis,omitempty"` - IndexCurrent int64 `json:"index_current,omitempty"` - DeleteTotal int64 `json:"delete_total,omitempty"` - DeleteTime string `json:"delete_time,omitempty"` - DeleteTimeInMillis int64 `json:"delete_time_in_millis,omitempty"` - DeleteCurrent int64 `json:"delete_current,omitempty"` - NoopUpdateTotal int64 `json:"noop_update_total,omitempty"` -} - -type IndexStatsGet struct { - Total int64 `json:"total,omitempty"` - GetTime string `json:"get_time,omitempty"` - TimeInMillis int64 `json:"time_in_millis,omitempty"` - ExistsTotal int64 `json:"exists_total,omitempty"` - ExistsTime string `json:"exists_time,omitempty"` - ExistsTimeInMillis int64 `json:"exists_time_in_millis,omitempty"` - MissingTotal int64 `json:"missing_total,omitempty"` - MissingTime string `json:"missing_time,omitempty"` - MissingTimeInMillis int64 `json:"missing_time_in_millis,omitempty"` - Current int64 `json:"current,omitempty"` -} - -type IndexStatsSearch struct { - OpenContexts int64 `json:"open_contexts,omitempty"` - QueryTotal int64 `json:"query_total,omitempty"` - QueryTime string `json:"query_time,omitempty"` - QueryTimeInMillis int64 `json:"query_time_in_millis,omitempty"` - QueryCurrent int64 `json:"query_current,omitempty"` - FetchTotal int64 `json:"fetch_total,omitempty"` - FetchTime string `json:"fetch_time,omitempty"` - FetchTimeInMillis int64 `json:"fetch_time_in_millis,omitempty"` - FetchCurrent int64 `json:"fetch_current,omitempty"` - ScrollTotal int64 `json:"scroll_total,omitempty"` - ScrollTime string `json:"scroll_time,omitempty"` - ScrollTimeInMillis int64 `json:"scroll_time_in_millis,omitempty"` - ScrollCurrent int64 `json:"scroll_current,omitempty"` - SuggestTotal int64 `json:"suggest_total,omitempty"` - SuggestTime string `json:"suggest_time,omitempty"` - SuggestTimeInMillis int64 `json:"suggest_time_in_millis,omitempty"` - SuggestCurrent int64 `json:"suggest_current,omitempty"` -} - -type IndexStatsMerges struct { - Current int64 `json:"current,omitempty"` - CurrentDocs int64 `json:"current_docs,omitempty"` - CurrentSize string `json:"current_size,omitempty"` - CurrentSizeInBytes int64 `json:"current_size_in_bytes,omitempty"` - Total int64 `json:"total,omitempty"` - TotalTime string `json:"total_time,omitempty"` - TotalTimeInMillis int64 `json:"total_time_in_millis,omitempty"` - TotalDocs int64 `json:"total_docs,omitempty"` - TotalSize string `json:"total_size,omitempty"` - TotalSizeInBytes int64 `json:"total_size_in_bytes,omitempty"` -} - -type IndexStatsRefresh struct { - Total int64 `json:"total,omitempty"` - TotalTime string `json:"total_time,omitempty"` - TotalTimeInMillis int64 `json:"total_time_in_millis,omitempty"` -} - -type IndexStatsFlush struct { - Total int64 `json:"total,omitempty"` - TotalTime string `json:"total_time,omitempty"` - TotalTimeInMillis int64 `json:"total_time_in_millis,omitempty"` -} - -type IndexStatsWarmer struct { - Current int64 `json:"current,omitempty"` - Total int64 `json:"total,omitempty"` - TotalTime string `json:"total_time,omitempty"` - TotalTimeInMillis int64 `json:"total_time_in_millis,omitempty"` -} - -type IndexStatsFilterCache struct { - MemorySize string `json:"memory_size,omitempty"` - MemorySizeInBytes int64 `json:"memory_size_in_bytes,omitempty"` - Evictions int64 `json:"evictions,omitempty"` -} - -type IndexStatsIdCache struct { - MemorySize string `json:"memory_size,omitempty"` - MemorySizeInBytes int64 `json:"memory_size_in_bytes,omitempty"` -} - -type IndexStatsFielddata struct { - MemorySize string `json:"memory_size,omitempty"` - MemorySizeInBytes int64 `json:"memory_size_in_bytes,omitempty"` - Evictions int64 `json:"evictions,omitempty"` -} - -type IndexStatsPercolate struct { - Total int64 `json:"total,omitempty"` - GetTime string `json:"get_time,omitempty"` - TimeInMillis int64 `json:"time_in_millis,omitempty"` - Current int64 `json:"current,omitempty"` - MemorySize string `json:"memory_size,omitempty"` - MemorySizeInBytes int64 `json:"memory_size_in_bytes,omitempty"` - Queries int64 `json:"queries,omitempty"` -} - -type IndexStatsCompletion struct { - Size string `json:"size,omitempty"` - SizeInBytes int64 `json:"size_in_bytes,omitempty"` -} - -type IndexStatsSegments struct { - Count int64 `json:"count,omitempty"` - Memory string `json:"memory,omitempty"` - MemoryInBytes int64 `json:"memory_in_bytes,omitempty"` - IndexWriterMemory string `json:"index_writer_memory,omitempty"` - IndexWriterMemoryInBytes int64 `json:"index_writer_memory_in_bytes,omitempty"` - IndexWriterMaxMemory string `json:"index_writer_max_memory,omitempty"` - IndexWriterMaxMemoryInBytes int64 `json:"index_writer_max_memory_in_bytes,omitempty"` - VersionMapMemory string `json:"version_map_memory,omitempty"` - VersionMapMemoryInBytes int64 `json:"version_map_memory_in_bytes,omitempty"` - FixedBitSetMemory string `json:"fixed_bit_set,omitempty"` - FixedBitSetMemoryInBytes int64 `json:"fixed_bit_set_memory_in_bytes,omitempty"` -} - -type IndexStatsTranslog struct { - Operations int64 `json:"operations,omitempty"` - Size string `json:"size,omitempty"` - SizeInBytes int64 `json:"size_in_bytes,omitempty"` -} - -type IndexStatsSuggest struct { - Total int64 `json:"total,omitempty"` - Time string `json:"time,omitempty"` - TimeInMillis int64 `json:"time_in_millis,omitempty"` - Current int64 `json:"current,omitempty"` -} - -type IndexStatsQueryCache struct { - MemorySize string `json:"memory_size,omitempty"` - MemorySizeInBytes int64 `json:"memory_size_in_bytes,omitempty"` - Evictions int64 `json:"evictions,omitempty"` - HitCount int64 `json:"hit_count,omitempty"` - MissCount int64 `json:"miss_count,omitempty"` -} diff --git a/vendor/gopkg.in/olivere/elastic.v6/ping.go b/vendor/gopkg.in/olivere/elastic.v6/ping.go deleted file mode 100644 index 5c2d34f009b5b43a4c526accac26ac6ac4882928..0000000000000000000000000000000000000000 --- a/vendor/gopkg.in/olivere/elastic.v6/ping.go +++ /dev/null @@ -1,127 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "encoding/json" - "net/http" - "net/url" -) - -// PingService checks if an Elasticsearch server on a given URL is alive. -// When asked for, it can also return various information about the -// Elasticsearch server, e.g. the Elasticsearch version number. -// -// Ping simply starts a HTTP GET request to the URL of the server. -// If the server responds with HTTP Status code 200 OK, the server is alive. -type PingService struct { - client *Client - url string - timeout string - httpHeadOnly bool - pretty bool -} - -// PingResult is the result returned from querying the Elasticsearch server. -type PingResult struct { - Name string `json:"name"` - ClusterName string `json:"cluster_name"` - Version struct { - Number string `json:"number"` - BuildHash string `json:"build_hash"` - BuildTimestamp string `json:"build_timestamp"` - BuildSnapshot bool `json:"build_snapshot"` - LuceneVersion string `json:"lucene_version"` - } `json:"version"` - TagLine string `json:"tagline"` -} - -func NewPingService(client *Client) *PingService { - return &PingService{ - client: client, - url: DefaultURL, - httpHeadOnly: false, - pretty: false, - } -} - -func (s *PingService) URL(url string) *PingService { - s.url = url - return s -} - -func (s *PingService) Timeout(timeout string) *PingService { - s.timeout = timeout - return s -} - -// HeadOnly makes the service to only return the status code in Do; -// the PingResult will be nil. -func (s *PingService) HttpHeadOnly(httpHeadOnly bool) *PingService { - s.httpHeadOnly = httpHeadOnly - return s -} - -func (s *PingService) Pretty(pretty bool) *PingService { - s.pretty = pretty - return s -} - -// Do returns the PingResult, the HTTP status code of the Elasticsearch -// server, and an error. -func (s *PingService) Do(ctx context.Context) (*PingResult, int, error) { - s.client.mu.RLock() - basicAuth := s.client.basicAuth - basicAuthUsername := s.client.basicAuthUsername - basicAuthPassword := s.client.basicAuthPassword - s.client.mu.RUnlock() - - url_ := s.url + "/" - - params := make(url.Values) - if s.timeout != "" { - params.Set("timeout", s.timeout) - } - if s.pretty { - params.Set("pretty", "true") - } - if len(params) > 0 { - url_ += "?" + params.Encode() - } - - var method string - if s.httpHeadOnly { - method = "HEAD" - } else { - method = "GET" - } - - // Notice: This service must NOT use PerformRequest! - req, err := NewRequest(method, url_) - if err != nil { - return nil, 0, err - } - - if basicAuth { - req.SetBasicAuth(basicAuthUsername, basicAuthPassword) - } - - res, err := s.client.c.Do((*http.Request)(req).WithContext(ctx)) - if err != nil { - return nil, 0, err - } - defer res.Body.Close() - - var ret *PingResult - if !s.httpHeadOnly { - ret = new(PingResult) - if err := json.NewDecoder(res.Body).Decode(ret); err != nil { - return nil, res.StatusCode, err - } - } - - return ret, res.StatusCode, nil -} diff --git a/vendor/gopkg.in/olivere/elastic.v6/search.go b/vendor/gopkg.in/olivere/elastic.v6/search.go deleted file mode 100644 index 58e962a5206d184135c2bd293925aeb0eabe9196..0000000000000000000000000000000000000000 --- a/vendor/gopkg.in/olivere/elastic.v6/search.go +++ /dev/null @@ -1,595 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "encoding/json" - "fmt" - "net/url" - "reflect" - "strings" - - "github.com/olivere/elastic/uritemplates" -) - -// Search for documents in Elasticsearch. -type SearchService struct { - client *Client - searchSource *SearchSource - source interface{} - pretty bool - filterPath []string - searchType string - index []string - typ []string - routing string - preference string - requestCache *bool - ignoreUnavailable *bool - allowNoIndices *bool - expandWildcards string -} - -// NewSearchService creates a new service for searching in Elasticsearch. -func NewSearchService(client *Client) *SearchService { - builder := &SearchService{ - client: client, - searchSource: NewSearchSource(), - } - return builder -} - -// SearchSource sets the search source builder to use with this service. -func (s *SearchService) SearchSource(searchSource *SearchSource) *SearchService { - s.searchSource = searchSource - if s.searchSource == nil { - s.searchSource = NewSearchSource() - } - return s -} - -// Source allows the user to set the request body manually without using -// any of the structs and interfaces in Elastic. -func (s *SearchService) Source(source interface{}) *SearchService { - s.source = source - return s -} - -// FilterPath allows reducing the response, a mechanism known as -// response filtering and described here: -// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/common-options.html#common-options-response-filtering. -func (s *SearchService) FilterPath(filterPath ...string) *SearchService { - s.filterPath = append(s.filterPath, filterPath...) - return s -} - -// Index sets the names of the indices to use for search. -func (s *SearchService) Index(index ...string) *SearchService { - s.index = append(s.index, index...) - return s -} - -// Types adds search restrictions for a list of types. -func (s *SearchService) Type(typ ...string) *SearchService { - s.typ = append(s.typ, typ...) - return s -} - -// Pretty enables the caller to indent the JSON output. -func (s *SearchService) Pretty(pretty bool) *SearchService { - s.pretty = pretty - return s -} - -// Timeout sets the timeout to use, e.g. "1s" or "1000ms". -func (s *SearchService) Timeout(timeout string) *SearchService { - s.searchSource = s.searchSource.Timeout(timeout) - return s -} - -// Profile sets the Profile API flag on the search source. -// When enabled, a search executed by this service will return query -// profiling data. -func (s *SearchService) Profile(profile bool) *SearchService { - s.searchSource = s.searchSource.Profile(profile) - return s -} - -// Collapse adds field collapsing. -func (s *SearchService) Collapse(collapse *CollapseBuilder) *SearchService { - s.searchSource = s.searchSource.Collapse(collapse) - return s -} - -// TimeoutInMillis sets the timeout in milliseconds. -func (s *SearchService) TimeoutInMillis(timeoutInMillis int) *SearchService { - s.searchSource = s.searchSource.TimeoutInMillis(timeoutInMillis) - return s -} - -// TerminateAfter specifies the maximum number of documents to collect for -// each shard, upon reaching which the query execution will terminate early. -func (s *SearchService) TerminateAfter(terminateAfter int) *SearchService { - s.searchSource = s.searchSource.TerminateAfter(terminateAfter) - return s -} - -// SearchType sets the search operation type. Valid values are: -// "dfs_query_then_fetch" and "query_then_fetch". -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-request-search-type.html -// for details. -func (s *SearchService) SearchType(searchType string) *SearchService { - s.searchType = searchType - return s -} - -// Routing is a list of specific routing values to control the shards -// the search will be executed on. -func (s *SearchService) Routing(routings ...string) *SearchService { - s.routing = strings.Join(routings, ",") - return s -} - -// Preference sets the preference to execute the search. Defaults to -// randomize across shards ("random"). Can be set to "_local" to prefer -// local shards, "_primary" to execute on primary shards only, -// or a custom value which guarantees that the same order will be used -// across different requests. -func (s *SearchService) Preference(preference string) *SearchService { - s.preference = preference - return s -} - -// RequestCache indicates whether the cache should be used for this -// request or not, defaults to index level setting. -func (s *SearchService) RequestCache(requestCache bool) *SearchService { - s.requestCache = &requestCache - return s -} - -// Query sets the query to perform, e.g. MatchAllQuery. -func (s *SearchService) Query(query Query) *SearchService { - s.searchSource = s.searchSource.Query(query) - return s -} - -// PostFilter will be executed after the query has been executed and -// only affects the search hits, not the aggregations. -// This filter is always executed as the last filtering mechanism. -func (s *SearchService) PostFilter(postFilter Query) *SearchService { - s.searchSource = s.searchSource.PostFilter(postFilter) - return s -} - -// FetchSource indicates whether the response should contain the stored -// _source for every hit. -func (s *SearchService) FetchSource(fetchSource bool) *SearchService { - s.searchSource = s.searchSource.FetchSource(fetchSource) - return s -} - -// FetchSourceContext indicates how the _source should be fetched. -func (s *SearchService) FetchSourceContext(fetchSourceContext *FetchSourceContext) *SearchService { - s.searchSource = s.searchSource.FetchSourceContext(fetchSourceContext) - return s -} - -// Highlight adds highlighting to the search. -func (s *SearchService) Highlight(highlight *Highlight) *SearchService { - s.searchSource = s.searchSource.Highlight(highlight) - return s -} - -// GlobalSuggestText defines the global text to use with all suggesters. -// This avoids repetition. -func (s *SearchService) GlobalSuggestText(globalText string) *SearchService { - s.searchSource = s.searchSource.GlobalSuggestText(globalText) - return s -} - -// Suggester adds a suggester to the search. -func (s *SearchService) Suggester(suggester Suggester) *SearchService { - s.searchSource = s.searchSource.Suggester(suggester) - return s -} - -// Aggregation adds an aggreation to perform as part of the search. -func (s *SearchService) Aggregation(name string, aggregation Aggregation) *SearchService { - s.searchSource = s.searchSource.Aggregation(name, aggregation) - return s -} - -// MinScore sets the minimum score below which docs will be filtered out. -func (s *SearchService) MinScore(minScore float64) *SearchService { - s.searchSource = s.searchSource.MinScore(minScore) - return s -} - -// From index to start the search from. Defaults to 0. -func (s *SearchService) From(from int) *SearchService { - s.searchSource = s.searchSource.From(from) - return s -} - -// Size is the number of search hits to return. Defaults to 10. -func (s *SearchService) Size(size int) *SearchService { - s.searchSource = s.searchSource.Size(size) - return s -} - -// Explain indicates whether each search hit should be returned with -// an explanation of the hit (ranking). -func (s *SearchService) Explain(explain bool) *SearchService { - s.searchSource = s.searchSource.Explain(explain) - return s -} - -// Version indicates whether each search hit should be returned with -// a version associated to it. -func (s *SearchService) Version(version bool) *SearchService { - s.searchSource = s.searchSource.Version(version) - return s -} - -// Sort adds a sort order. -func (s *SearchService) Sort(field string, ascending bool) *SearchService { - s.searchSource = s.searchSource.Sort(field, ascending) - return s -} - -// SortWithInfo adds a sort order. -func (s *SearchService) SortWithInfo(info SortInfo) *SearchService { - s.searchSource = s.searchSource.SortWithInfo(info) - return s -} - -// SortBy adds a sort order. -func (s *SearchService) SortBy(sorter ...Sorter) *SearchService { - s.searchSource = s.searchSource.SortBy(sorter...) - return s -} - -// NoStoredFields indicates that no stored fields should be loaded, resulting in only -// id and type to be returned per field. -func (s *SearchService) NoStoredFields() *SearchService { - s.searchSource = s.searchSource.NoStoredFields() - return s -} - -// StoredField adds a single field to load and return (note, must be stored) as -// part of the search request. If none are specified, the source of the -// document will be returned. -func (s *SearchService) StoredField(fieldName string) *SearchService { - s.searchSource = s.searchSource.StoredField(fieldName) - return s -} - -// StoredFields sets the fields to load and return as part of the search request. -// If none are specified, the source of the document will be returned. -func (s *SearchService) StoredFields(fields ...string) *SearchService { - s.searchSource = s.searchSource.StoredFields(fields...) - return s -} - -// TrackScores is applied when sorting and controls if scores will be -// tracked as well. Defaults to false. -func (s *SearchService) TrackScores(trackScores bool) *SearchService { - s.searchSource = s.searchSource.TrackScores(trackScores) - return s -} - -// SearchAfter allows a different form of pagination by using a live cursor, -// using the results of the previous page to help the retrieval of the next. -// -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-request-search-after.html -func (s *SearchService) SearchAfter(sortValues ...interface{}) *SearchService { - s.searchSource = s.searchSource.SearchAfter(sortValues...) - return s -} - -// IgnoreUnavailable indicates whether the specified concrete indices -// should be ignored when unavailable (missing or closed). -func (s *SearchService) IgnoreUnavailable(ignoreUnavailable bool) *SearchService { - s.ignoreUnavailable = &ignoreUnavailable - return s -} - -// AllowNoIndices indicates whether to ignore if a wildcard indices -// expression resolves into no concrete indices. (This includes `_all` string -// or when no indices have been specified). -func (s *SearchService) AllowNoIndices(allowNoIndices bool) *SearchService { - s.allowNoIndices = &allowNoIndices - return s -} - -// ExpandWildcards indicates whether to expand wildcard expression to -// concrete indices that are open, closed or both. -func (s *SearchService) ExpandWildcards(expandWildcards string) *SearchService { - s.expandWildcards = expandWildcards - return s -} - -// buildURL builds the URL for the operation. -func (s *SearchService) buildURL() (string, url.Values, error) { - var err error - var path string - - if len(s.index) > 0 && len(s.typ) > 0 { - path, err = uritemplates.Expand("/{index}/{type}/_search", map[string]string{ - "index": strings.Join(s.index, ","), - "type": strings.Join(s.typ, ","), - }) - } else if len(s.index) > 0 { - path, err = uritemplates.Expand("/{index}/_search", map[string]string{ - "index": strings.Join(s.index, ","), - }) - } else if len(s.typ) > 0 { - path, err = uritemplates.Expand("/_all/{type}/_search", map[string]string{ - "type": strings.Join(s.typ, ","), - }) - } else { - path = "/_search" - } - if err != nil { - return "", url.Values{}, err - } - - // Add query string parameters - params := url.Values{} - if s.pretty { - params.Set("pretty", fmt.Sprintf("%v", s.pretty)) - } - if s.searchType != "" { - params.Set("search_type", s.searchType) - } - if s.routing != "" { - params.Set("routing", s.routing) - } - if s.preference != "" { - params.Set("preference", s.preference) - } - if s.requestCache != nil { - params.Set("request_cache", fmt.Sprintf("%v", *s.requestCache)) - } - if s.allowNoIndices != nil { - params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) - } - if s.expandWildcards != "" { - params.Set("expand_wildcards", s.expandWildcards) - } - if s.ignoreUnavailable != nil { - params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) - } - if len(s.filterPath) > 0 { - params.Set("filter_path", strings.Join(s.filterPath, ",")) - } - return path, params, nil -} - -// Validate checks if the operation is valid. -func (s *SearchService) Validate() error { - return nil -} - -// Do executes the search and returns a SearchResult. -func (s *SearchService) Do(ctx context.Context) (*SearchResult, error) { - // Check pre-conditions - if err := s.Validate(); err != nil { - return nil, err - } - - // Get URL for request - path, params, err := s.buildURL() - if err != nil { - return nil, err - } - - // Perform request - var body interface{} - if s.source != nil { - body = s.source - } else { - src, err := s.searchSource.Source() - if err != nil { - return nil, err - } - body = src - } - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "POST", - Path: path, - Params: params, - Body: body, - }) - if err != nil { - return nil, err - } - - // Return search results - ret := new(SearchResult) - if err := s.client.decoder.Decode(res.Body, ret); err != nil { - return nil, err - } - return ret, nil -} - -// SearchResult is the result of a search in Elasticsearch. -type SearchResult struct { - TookInMillis int64 `json:"took"` // search time in milliseconds - ScrollId string `json:"_scroll_id"` // only used with Scroll and Scan operations - Hits *SearchHits `json:"hits"` // the actual search hits - Suggest SearchSuggest `json:"suggest"` // results from suggesters - Aggregations Aggregations `json:"aggregations"` // results from aggregations - TimedOut bool `json:"timed_out"` // true if the search timed out - Error *ErrorDetails `json:"error,omitempty"` // only used in MultiGet - Profile *SearchProfile `json:"profile,omitempty"` // profiling results, if optional Profile API was active for this search - Shards *shardsInfo `json:"_shards,omitempty"` // shard information -} - -// TotalHits is a convenience function to return the number of hits for -// a search result. -func (r *SearchResult) TotalHits() int64 { - if r.Hits != nil { - return r.Hits.TotalHits - } - return 0 -} - -// Each is a utility function to iterate over all hits. It saves you from -// checking for nil values. Notice that Each will ignore errors in -// serializing JSON and hits with empty/nil _source will get an empty -// value -func (r *SearchResult) Each(typ reflect.Type) []interface{} { - if r.Hits == nil || r.Hits.Hits == nil || len(r.Hits.Hits) == 0 { - return nil - } - var slice []interface{} - for _, hit := range r.Hits.Hits { - v := reflect.New(typ).Elem() - if hit.Source == nil { - slice = append(slice, v.Interface()) - continue - } - if err := json.Unmarshal(*hit.Source, v.Addr().Interface()); err == nil { - slice = append(slice, v.Interface()) - } - } - return slice -} - -// SearchHits specifies the list of search hits. -type SearchHits struct { - TotalHits int64 `json:"total"` // total number of hits found - MaxScore *float64 `json:"max_score"` // maximum score of all hits - Hits []*SearchHit `json:"hits"` // the actual hits returned -} - -// NestedHit is a nested innerhit -type NestedHit struct { - Field string `json:"field"` - Offset int `json:"offset"` -} - -// SearchHit is a single hit. -type SearchHit struct { - Score *float64 `json:"_score"` // computed score - Index string `json:"_index"` // index name - Type string `json:"_type"` // type meta field - Id string `json:"_id"` // external or internal - Uid string `json:"_uid"` // uid meta field (see MapperService.java for all meta fields) - Routing string `json:"_routing"` // routing meta field - Parent string `json:"_parent"` // parent meta field - Version *int64 `json:"_version"` // version number, when Version is set to true in SearchService - Sort []interface{} `json:"sort"` // sort information - Highlight SearchHitHighlight `json:"highlight"` // highlighter information - Source *json.RawMessage `json:"_source"` // stored document source - Fields map[string]interface{} `json:"fields"` // returned (stored) fields - Explanation *SearchExplanation `json:"_explanation"` // explains how the score was computed - MatchedQueries []string `json:"matched_queries"` // matched queries - InnerHits map[string]*SearchHitInnerHits `json:"inner_hits"` // inner hits with ES >= 1.5.0 - Nested *NestedHit `json:"_nested"` - - // Shard - // HighlightFields - // SortValues - // MatchedFilters -} - -type SearchHitInnerHits struct { - Hits *SearchHits `json:"hits"` -} - -// SearchExplanation explains how the score for a hit was computed. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-request-explain.html. -type SearchExplanation struct { - Value float64 `json:"value"` // e.g. 1.0 - Description string `json:"description"` // e.g. "boost" or "ConstantScore(*:*), product of:" - Details []SearchExplanation `json:"details,omitempty"` // recursive details -} - -// Suggest - -// SearchSuggest is a map of suggestions. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-suggesters.html. -type SearchSuggest map[string][]SearchSuggestion - -// SearchSuggestion is a single search suggestion. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-suggesters.html. -type SearchSuggestion struct { - Text string `json:"text"` - Offset int `json:"offset"` - Length int `json:"length"` - Options []SearchSuggestionOption `json:"options"` -} - -// SearchSuggestionOption is an option of a SearchSuggestion. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-suggesters.html. -type SearchSuggestionOption struct { - Text string `json:"text"` - Index string `json:"_index"` - Type string `json:"_type"` - Id string `json:"_id"` - Score float64 `json:"score"` // term and phrase suggesters uses "score" as of 6.2.4 - ScoreUnderscore float64 `json:"_score"` // completion and context suggesters uses "_score" as of 6.2.4 - Highlighted string `json:"highlighted"` - CollateMatch bool `json:"collate_match"` - Freq int `json:"freq"` // from TermSuggestion.Option in Java API - Source *json.RawMessage `json:"_source"` -} - -// SearchProfile is a list of shard profiling data collected during -// query execution in the "profile" section of a SearchResult -type SearchProfile struct { - Shards []SearchProfileShardResult `json:"shards"` -} - -// SearchProfileShardResult returns the profiling data for a single shard -// accessed during the search query or aggregation. -type SearchProfileShardResult struct { - ID string `json:"id"` - Searches []QueryProfileShardResult `json:"searches"` - Aggregations []ProfileResult `json:"aggregations"` -} - -// QueryProfileShardResult is a container class to hold the profile results -// for a single shard in the request. It comtains a list of query profiles, -// a collector tree and a total rewrite tree. -type QueryProfileShardResult struct { - Query []ProfileResult `json:"query,omitempty"` - RewriteTime int64 `json:"rewrite_time,omitempty"` - Collector []interface{} `json:"collector,omitempty"` -} - -// CollectorResult holds the profile timings of the collectors used in the -// search. Children's CollectorResults may be embedded inside of a parent -// CollectorResult. -type CollectorResult struct { - Name string `json:"name,omitempty"` - Reason string `json:"reason,omitempty"` - Time string `json:"time,omitempty"` - TimeNanos int64 `json:"time_in_nanos,omitempty"` - Children []CollectorResult `json:"children,omitempty"` -} - -// ProfileResult is the internal representation of a profiled query, -// corresponding to a single node in the query tree. -type ProfileResult struct { - Type string `json:"type"` - Description string `json:"description,omitempty"` - NodeTime string `json:"time,omitempty"` - NodeTimeNanos int64 `json:"time_in_nanos,omitempty"` - Breakdown map[string]int64 `json:"breakdown,omitempty"` - Children []ProfileResult `json:"children,omitempty"` -} - -// Aggregations (see search_aggs.go) - -// Highlighting - -// SearchHitHighlight is the highlight information of a search hit. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-request-highlighting.html -// for a general discussion of highlighting. -type SearchHitHighlight map[string][]string diff --git a/vendor/gopkg.in/olivere/elastic.v6/search_request.go b/vendor/gopkg.in/olivere/elastic.v6/search_request.go deleted file mode 100644 index b07dce68ed8e3201c0190e80db7d17d579ff006c..0000000000000000000000000000000000000000 --- a/vendor/gopkg.in/olivere/elastic.v6/search_request.go +++ /dev/null @@ -1,211 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "strings" -) - -// SearchRequest combines a search request and its -// query details (see SearchSource). -// It is used in combination with MultiSearch. -type SearchRequest struct { - searchType string - indices []string - types []string - routing *string - preference *string - requestCache *bool - ignoreUnavailable *bool - allowNoIndices *bool - expandWildcards string - scroll string - source interface{} -} - -// NewSearchRequest creates a new search request. -func NewSearchRequest() *SearchRequest { - return &SearchRequest{} -} - -// SearchRequest must be one of "dfs_query_then_fetch" or -// "query_then_fetch". -func (r *SearchRequest) SearchType(searchType string) *SearchRequest { - r.searchType = searchType - return r -} - -// SearchTypeDfsQueryThenFetch sets search type to dfs_query_then_fetch. -func (r *SearchRequest) SearchTypeDfsQueryThenFetch() *SearchRequest { - return r.SearchType("dfs_query_then_fetch") -} - -// SearchTypeQueryThenFetch sets search type to query_then_fetch. -func (r *SearchRequest) SearchTypeQueryThenFetch() *SearchRequest { - return r.SearchType("query_then_fetch") -} - -func (r *SearchRequest) Index(indices ...string) *SearchRequest { - r.indices = append(r.indices, indices...) - return r -} - -func (r *SearchRequest) HasIndices() bool { - return len(r.indices) > 0 -} - -func (r *SearchRequest) Type(types ...string) *SearchRequest { - r.types = append(r.types, types...) - return r -} - -func (r *SearchRequest) Routing(routing string) *SearchRequest { - r.routing = &routing - return r -} - -func (r *SearchRequest) Routings(routings ...string) *SearchRequest { - if routings != nil { - routings := strings.Join(routings, ",") - r.routing = &routings - } else { - r.routing = nil - } - return r -} - -func (r *SearchRequest) Preference(preference string) *SearchRequest { - r.preference = &preference - return r -} - -func (r *SearchRequest) RequestCache(requestCache bool) *SearchRequest { - r.requestCache = &requestCache - return r -} - -// IgnoreUnavailable indicates whether specified concrete indices should be -// ignored when unavailable (missing or closed). -func (s *SearchRequest) IgnoreUnavailable(ignoreUnavailable bool) *SearchRequest { - s.ignoreUnavailable = &ignoreUnavailable - return s -} - -// AllowNoIndices indicates whether to ignore if a wildcard indices -// expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified). -func (s *SearchRequest) AllowNoIndices(allowNoIndices bool) *SearchRequest { - s.allowNoIndices = &allowNoIndices - return s -} - -// ExpandWildcards indicates whether to expand wildcard expression to -// concrete indices that are open, closed or both. -func (s *SearchRequest) ExpandWildcards(expandWildcards string) *SearchRequest { - s.expandWildcards = expandWildcards - return s -} - -func (r *SearchRequest) Scroll(scroll string) *SearchRequest { - r.scroll = scroll - return r -} - -func (r *SearchRequest) SearchSource(searchSource *SearchSource) *SearchRequest { - return r.Source(searchSource) -} - -func (r *SearchRequest) Source(source interface{}) *SearchRequest { - r.source = source - return r -} - -// header is used e.g. by MultiSearch to get information about the search header -// of one SearchRequest. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-multi-search.html -func (r *SearchRequest) header() interface{} { - h := make(map[string]interface{}) - if r.searchType != "" { - h["search_type"] = r.searchType - } - - switch len(r.indices) { - case 0: - case 1: - h["index"] = r.indices[0] - default: - h["indices"] = r.indices - } - - switch len(r.types) { - case 0: - case 1: - h["type"] = r.types[0] - default: - h["types"] = r.types - } - - if r.routing != nil && *r.routing != "" { - h["routing"] = *r.routing - } - if r.preference != nil && *r.preference != "" { - h["preference"] = *r.preference - } - if r.requestCache != nil { - h["request_cache"] = *r.requestCache - } - if r.ignoreUnavailable != nil { - h["ignore_unavailable"] = *r.ignoreUnavailable - } - if r.allowNoIndices != nil { - h["allow_no_indices"] = *r.allowNoIndices - } - if r.expandWildcards != "" { - h["expand_wildcards"] = r.expandWildcards - } - if r.scroll != "" { - h["scroll"] = r.scroll - } - - return h -} - -// Body allows to access the search body of the request, as generated by the DSL. -// Notice that Body is read-only. You must not change the request body. -// -// Body is used e.g. by MultiSearch to get information about the search body -// of one SearchRequest. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-multi-search.html -func (r *SearchRequest) Body() (string, error) { - switch t := r.source.(type) { - default: - body, err := json.Marshal(r.source) - if err != nil { - return "", err - } - return string(body), nil - case *SearchSource: - src, err := t.Source() - if err != nil { - return "", err - } - body, err := json.Marshal(src) - if err != nil { - return "", err - } - return string(body), nil - case json.RawMessage: - return string(t), nil - case *json.RawMessage: - return string(*t), nil - case string: - return t, nil - case *string: - if t != nil { - return *t, nil - } - return "{}", nil - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v6/tasks_cancel.go b/vendor/gopkg.in/olivere/elastic.v6/tasks_cancel.go deleted file mode 100644 index 84f8aec359224dccc6a85f9389dde503c8696bfd..0000000000000000000000000000000000000000 --- a/vendor/gopkg.in/olivere/elastic.v6/tasks_cancel.go +++ /dev/null @@ -1,149 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "fmt" - "net/url" - "strings" - - "github.com/olivere/elastic/uritemplates" -) - -// TasksCancelService can cancel long-running tasks. -// It is supported as of Elasticsearch 2.3.0. -// -// See http://www.elastic.co/guide/en/elasticsearch/reference/5.2/tasks-cancel.html -// for details. -type TasksCancelService struct { - client *Client - pretty bool - taskId *int64 - actions []string - nodeId []string - parentNode string - parentTask *int64 -} - -// NewTasksCancelService creates a new TasksCancelService. -func NewTasksCancelService(client *Client) *TasksCancelService { - return &TasksCancelService{ - client: client, - actions: make([]string, 0), - nodeId: make([]string, 0), - } -} - -// TaskId specifies the task to cancel. Set to -1 to cancel all tasks. -func (s *TasksCancelService) TaskId(taskId int64) *TasksCancelService { - s.taskId = &taskId - return s -} - -// Actions is a list of actions that should be cancelled. Leave empty to cancel all. -func (s *TasksCancelService) Actions(actions []string) *TasksCancelService { - s.actions = actions - return s -} - -// NodeId is a list of node IDs or names to limit the returned information; -// use `_local` to return information from the node you're connecting to, -// leave empty to get information from all nodes. -func (s *TasksCancelService) NodeId(nodeId []string) *TasksCancelService { - s.nodeId = nodeId - return s -} - -// ParentNode specifies to cancel tasks with specified parent node. -func (s *TasksCancelService) ParentNode(parentNode string) *TasksCancelService { - s.parentNode = parentNode - return s -} - -// ParentTask specifies to cancel tasks with specified parent task id. -// Set to -1 to cancel all. -func (s *TasksCancelService) ParentTask(parentTask int64) *TasksCancelService { - s.parentTask = &parentTask - return s -} - -// Pretty indicates that the JSON response be indented and human readable. -func (s *TasksCancelService) Pretty(pretty bool) *TasksCancelService { - s.pretty = pretty - return s -} - -// buildURL builds the URL for the operation. -func (s *TasksCancelService) buildURL() (string, url.Values, error) { - // Build URL - var err error - var path string - if s.taskId != nil { - path, err = uritemplates.Expand("/_tasks/{task_id}/_cancel", map[string]string{ - "task_id": fmt.Sprintf("%d", *s.taskId), - }) - } else { - path = "/_tasks/_cancel" - } - if err != nil { - return "", url.Values{}, err - } - - // Add query string parameters - params := url.Values{} - if s.pretty { - params.Set("pretty", "true") - } - if len(s.actions) > 0 { - params.Set("actions", strings.Join(s.actions, ",")) - } - if len(s.nodeId) > 0 { - params.Set("node_id", strings.Join(s.nodeId, ",")) - } - if s.parentNode != "" { - params.Set("parent_node", s.parentNode) - } - if s.parentTask != nil { - params.Set("parent_task", fmt.Sprintf("%v", *s.parentTask)) - } - return path, params, nil -} - -// Validate checks if the operation is valid. -func (s *TasksCancelService) Validate() error { - return nil -} - -// Do executes the operation. -func (s *TasksCancelService) Do(ctx context.Context) (*TasksListResponse, error) { - // Check pre-conditions - if err := s.Validate(); err != nil { - return nil, err - } - - // Get URL for request - path, params, err := s.buildURL() - if err != nil { - return nil, err - } - - // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "POST", - Path: path, - Params: params, - }) - if err != nil { - return nil, err - } - - // Return operation response - ret := new(TasksListResponse) - if err := s.client.decoder.Decode(res.Body, ret); err != nil { - return nil, err - } - return ret, nil -} diff --git a/vendor/gopkg.in/olivere/elastic.v6/tasks_get_task.go b/vendor/gopkg.in/olivere/elastic.v6/tasks_get_task.go deleted file mode 100644 index 5f63726e49e886e054b94558686e6e65d1366131..0000000000000000000000000000000000000000 --- a/vendor/gopkg.in/olivere/elastic.v6/tasks_get_task.go +++ /dev/null @@ -1,108 +0,0 @@ -package elastic - -import ( - "context" - "fmt" - "net/url" - - "github.com/olivere/elastic/uritemplates" -) - -// TasksGetTaskService retrieves the state of a task in the cluster. It is part of the Task Management API -// documented at http://www.elastic.co/guide/en/elasticsearch/reference/5.2/tasks-list.html. -// -// It is supported as of Elasticsearch 2.3.0. -type TasksGetTaskService struct { - client *Client - pretty bool - taskId string - waitForCompletion *bool -} - -// NewTasksGetTaskService creates a new TasksGetTaskService. -func NewTasksGetTaskService(client *Client) *TasksGetTaskService { - return &TasksGetTaskService{ - client: client, - } -} - -// TaskId indicates to return the task with specified id. -func (s *TasksGetTaskService) TaskId(taskId string) *TasksGetTaskService { - s.taskId = taskId - return s -} - -// WaitForCompletion indicates whether to wait for the matching tasks -// to complete (default: false). -func (s *TasksGetTaskService) WaitForCompletion(waitForCompletion bool) *TasksGetTaskService { - s.waitForCompletion = &waitForCompletion - return s -} - -// Pretty indicates that the JSON response be indented and human readable. -func (s *TasksGetTaskService) Pretty(pretty bool) *TasksGetTaskService { - s.pretty = pretty - return s -} - -// buildURL builds the URL for the operation. -func (s *TasksGetTaskService) buildURL() (string, url.Values, error) { - // Build URL - path, err := uritemplates.Expand("/_tasks/{task_id}", map[string]string{ - "task_id": s.taskId, - }) - if err != nil { - return "", url.Values{}, err - } - - // Add query string parameters - params := url.Values{} - if s.pretty { - params.Set("pretty", "1") - } - if s.waitForCompletion != nil { - params.Set("wait_for_completion", fmt.Sprintf("%v", *s.waitForCompletion)) - } - return path, params, nil -} - -// Validate checks if the operation is valid. -func (s *TasksGetTaskService) Validate() error { - return nil -} - -// Do executes the operation. -func (s *TasksGetTaskService) Do(ctx context.Context) (*TasksGetTaskResponse, error) { - // Check pre-conditions - if err := s.Validate(); err != nil { - return nil, err - } - - // Get URL for request - path, params, err := s.buildURL() - if err != nil { - return nil, err - } - - // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, - }) - if err != nil { - return nil, err - } - - // Return operation response - ret := new(TasksGetTaskResponse) - if err := s.client.decoder.Decode(res.Body, ret); err != nil { - return nil, err - } - return ret, nil -} - -type TasksGetTaskResponse struct { - Completed bool `json:"completed"` - Task *TaskInfo `json:"task,omitempty"` -} diff --git a/vendor/gopkg.in/olivere/elastic.v6/update.go b/vendor/gopkg.in/olivere/elastic.v6/update.go deleted file mode 100644 index c8ae2af6485c82caf30bf3e2f3284a7106f7413e..0000000000000000000000000000000000000000 --- a/vendor/gopkg.in/olivere/elastic.v6/update.go +++ /dev/null @@ -1,330 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "fmt" - "net/url" - "strings" - - "github.com/olivere/elastic/uritemplates" -) - -// UpdateService updates a document in Elasticsearch. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-update.html -// for details. -type UpdateService struct { - client *Client - index string - typ string - id string - routing string - parent string - script *Script - fields []string - fsc *FetchSourceContext - version *int64 - versionType string - retryOnConflict *int - refresh string - waitForActiveShards string - upsert interface{} - scriptedUpsert *bool - docAsUpsert *bool - detectNoop *bool - doc interface{} - timeout string - pretty bool -} - -// NewUpdateService creates the service to update documents in Elasticsearch. -func NewUpdateService(client *Client) *UpdateService { - builder := &UpdateService{ - client: client, - fields: make([]string, 0), - } - return builder -} - -// Index is the name of the Elasticsearch index (required). -func (b *UpdateService) Index(name string) *UpdateService { - b.index = name - return b -} - -// Type is the type of the document (required). -func (b *UpdateService) Type(typ string) *UpdateService { - b.typ = typ - return b -} - -// Id is the identifier of the document to update (required). -func (b *UpdateService) Id(id string) *UpdateService { - b.id = id - return b -} - -// Routing specifies a specific routing value. -func (b *UpdateService) Routing(routing string) *UpdateService { - b.routing = routing - return b -} - -// Parent sets the id of the parent document. -func (b *UpdateService) Parent(parent string) *UpdateService { - b.parent = parent - return b -} - -// Script is the script definition. -func (b *UpdateService) Script(script *Script) *UpdateService { - b.script = script - return b -} - -// RetryOnConflict specifies how many times the operation should be retried -// when a conflict occurs (default: 0). -func (b *UpdateService) RetryOnConflict(retryOnConflict int) *UpdateService { - b.retryOnConflict = &retryOnConflict - return b -} - -// Fields is a list of fields to return in the response. -func (b *UpdateService) Fields(fields ...string) *UpdateService { - b.fields = make([]string, 0, len(fields)) - b.fields = append(b.fields, fields...) - return b -} - -// Version defines the explicit version number for concurrency control. -func (b *UpdateService) Version(version int64) *UpdateService { - b.version = &version - return b -} - -// VersionType is e.g. "internal". -func (b *UpdateService) VersionType(versionType string) *UpdateService { - b.versionType = versionType - return b -} - -// Refresh the index after performing the update. -// -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-refresh.html -// for details. -func (b *UpdateService) Refresh(refresh string) *UpdateService { - b.refresh = refresh - return b -} - -// WaitForActiveShards sets the number of shard copies that must be active before -// proceeding with the update operation. Defaults to 1, meaning the primary shard only. -// Set to `all` for all shard copies, otherwise set to any non-negative value less than -// or equal to the total number of copies for the shard (number of replicas + 1). -func (b *UpdateService) WaitForActiveShards(waitForActiveShards string) *UpdateService { - b.waitForActiveShards = waitForActiveShards - return b -} - -// Doc allows for updating a partial document. -func (b *UpdateService) Doc(doc interface{}) *UpdateService { - b.doc = doc - return b -} - -// Upsert can be used to index the document when it doesn't exist yet. -// Use this e.g. to initialize a document with a default value. -func (b *UpdateService) Upsert(doc interface{}) *UpdateService { - b.upsert = doc - return b -} - -// DocAsUpsert can be used to insert the document if it doesn't already exist. -func (b *UpdateService) DocAsUpsert(docAsUpsert bool) *UpdateService { - b.docAsUpsert = &docAsUpsert - return b -} - -// DetectNoop will instruct Elasticsearch to check if changes will occur -// when updating via Doc. It there aren't any changes, the request will -// turn into a no-op. -func (b *UpdateService) DetectNoop(detectNoop bool) *UpdateService { - b.detectNoop = &detectNoop - return b -} - -// ScriptedUpsert should be set to true if the referenced script -// (defined in Script or ScriptId) should be called to perform an insert. -// The default is false. -func (b *UpdateService) ScriptedUpsert(scriptedUpsert bool) *UpdateService { - b.scriptedUpsert = &scriptedUpsert - return b -} - -// Timeout is an explicit timeout for the operation, e.g. "1000", "1s" or "500ms". -func (b *UpdateService) Timeout(timeout string) *UpdateService { - b.timeout = timeout - return b -} - -// Pretty instructs to return human readable, prettified JSON. -func (b *UpdateService) Pretty(pretty bool) *UpdateService { - b.pretty = pretty - return b -} - -// FetchSource asks Elasticsearch to return the updated _source in the response. -func (s *UpdateService) FetchSource(fetchSource bool) *UpdateService { - if s.fsc == nil { - s.fsc = NewFetchSourceContext(fetchSource) - } else { - s.fsc.SetFetchSource(fetchSource) - } - return s -} - -// FetchSourceContext indicates that _source should be returned in the response, -// allowing wildcard patterns to be defined via FetchSourceContext. -func (s *UpdateService) FetchSourceContext(fetchSourceContext *FetchSourceContext) *UpdateService { - s.fsc = fetchSourceContext - return s -} - -// url returns the URL part of the document request. -func (b *UpdateService) url() (string, url.Values, error) { - // Build url - path := "/{index}/{type}/{id}/_update" - path, err := uritemplates.Expand(path, map[string]string{ - "index": b.index, - "type": b.typ, - "id": b.id, - }) - if err != nil { - return "", url.Values{}, err - } - - // Parameters - params := make(url.Values) - if b.pretty { - params.Set("pretty", "true") - } - if b.routing != "" { - params.Set("routing", b.routing) - } - if b.parent != "" { - params.Set("parent", b.parent) - } - if b.timeout != "" { - params.Set("timeout", b.timeout) - } - if b.refresh != "" { - params.Set("refresh", b.refresh) - } - if b.waitForActiveShards != "" { - params.Set("wait_for_active_shards", b.waitForActiveShards) - } - if len(b.fields) > 0 { - params.Set("fields", strings.Join(b.fields, ",")) - } - if b.version != nil { - params.Set("version", fmt.Sprintf("%d", *b.version)) - } - if b.versionType != "" { - params.Set("version_type", b.versionType) - } - if b.retryOnConflict != nil { - params.Set("retry_on_conflict", fmt.Sprintf("%v", *b.retryOnConflict)) - } - - return path, params, nil -} - -// body returns the body part of the document request. -func (b *UpdateService) body() (interface{}, error) { - source := make(map[string]interface{}) - - if b.script != nil { - src, err := b.script.Source() - if err != nil { - return nil, err - } - source["script"] = src - } - - if b.scriptedUpsert != nil { - source["scripted_upsert"] = *b.scriptedUpsert - } - - if b.upsert != nil { - source["upsert"] = b.upsert - } - - if b.doc != nil { - source["doc"] = b.doc - } - if b.docAsUpsert != nil { - source["doc_as_upsert"] = *b.docAsUpsert - } - if b.detectNoop != nil { - source["detect_noop"] = *b.detectNoop - } - if b.fsc != nil { - src, err := b.fsc.Source() - if err != nil { - return nil, err - } - source["_source"] = src - } - - return source, nil -} - -// Do executes the update operation. -func (b *UpdateService) Do(ctx context.Context) (*UpdateResponse, error) { - path, params, err := b.url() - if err != nil { - return nil, err - } - - // Get body of the request - body, err := b.body() - if err != nil { - return nil, err - } - - // Get response - res, err := b.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "POST", - Path: path, - Params: params, - Body: body, - }) - if err != nil { - return nil, err - } - - // Return result - ret := new(UpdateResponse) - if err := b.client.decoder.Decode(res.Body, ret); err != nil { - return nil, err - } - return ret, nil -} - -// UpdateResponse is the result of updating a document in Elasticsearch. -type UpdateResponse struct { - Index string `json:"_index,omitempty"` - Type string `json:"_type,omitempty"` - Id string `json:"_id,omitempty"` - Version int64 `json:"_version,omitempty"` - Result string `json:"result,omitempty"` - Shards *shardsInfo `json:"_shards,omitempty"` - SeqNo int64 `json:"_seq_no,omitempty"` - PrimaryTerm int64 `json:"_primary_term,omitempty"` - Status int `json:"status,omitempty"` - ForcedRefresh bool `json:"forced_refresh,omitempty"` - GetResult *GetResult `json:"get,omitempty"` -} diff --git a/vendor/modules.txt b/vendor/modules.txt new file mode 100644 index 0000000000000000000000000000000000000000..fd1f59e062bb4ca55946cfb3aa368be1fb840914 --- /dev/null +++ b/vendor/modules.txt @@ -0,0 +1,11 @@ +# github.com/mailru/easyjson v0.7.1 +github.com/mailru/easyjson +github.com/mailru/easyjson/jlexer +github.com/mailru/easyjson/jwriter +github.com/mailru/easyjson/buffer +# github.com/olivere/elastic/v7 v7.0.15 +github.com/olivere/elastic/v7 +github.com/olivere/elastic/v7/config +github.com/olivere/elastic/v7/uritemplates +# github.com/pkg/errors v0.9.1 +github.com/pkg/errors diff --git a/vendor/vendor.json b/vendor/vendor.json deleted file mode 100644 index caf297883c821c3d8b62d1cbbe1af33bc1cce9b3..0000000000000000000000000000000000000000 --- a/vendor/vendor.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "comment": "", - "ignore": "test", - "package": [ - { - "checksumSHA1": "Ckkk75h7Xhrc3b+QJ3oqbIrGsaY=", - "path": "github.com/mailru/easyjson", - "revision": "03f2033d19d5860aef995fe360ac7d395cd8ce65", - "revisionTime": "2018-07-30T09:45:02Z" - }, - { - "checksumSHA1": "T8soMJArSZrYnhmdpAnq1bVxQ6Q=", - "path": "github.com/mailru/easyjson/buffer", - "revision": "03f2033d19d5860aef995fe360ac7d395cd8ce65", - "revisionTime": "2018-07-30T09:45:02Z" - }, - { - "checksumSHA1": "zErZOOMVWCO/Z1WGWBAG9VdccQc=", - "path": "github.com/mailru/easyjson/jlexer", - "revision": "03f2033d19d5860aef995fe360ac7d395cd8ce65", - "revisionTime": "2018-07-30T09:45:02Z" - }, - { - "checksumSHA1": "4BAeeJ7JywEQyR6GqRrxfSfN2/Q=", - "path": "github.com/mailru/easyjson/jwriter", - "revision": "03f2033d19d5860aef995fe360ac7d395cd8ce65", - "revisionTime": "2018-07-30T09:45:02Z" - }, - { - "checksumSHA1": "v/phfIsGFjsgpJqe4BEKbGmMYAY=", - "path": "github.com/olivere/elastic/config", - "revision": "3a15a1301c4bf0bb5a4eb3f5a65331912ae25ef0", - "revisionTime": "2018-08-02T18:54:02Z" - }, - { - "checksumSHA1": "AmcqvKDAUGvVsrf8NDCQ/B8cMj4=", - "path": "github.com/olivere/elastic/uritemplates", - "revision": "3a15a1301c4bf0bb5a4eb3f5a65331912ae25ef0", - "revisionTime": "2018-08-02T18:54:02Z" - }, - { - "checksumSHA1": "ljd3FhYRJ91cLZz3wsH9BQQ2JbA=", - "path": "github.com/pkg/errors", - "revision": "816c9085562cd7ee03e7f8188a1cfd942858cded", - "revisionTime": "2018-03-11T21:45:15Z" - }, - { - "checksumSHA1": "W70ayHguz9qyWgVlL+SH/xeYruc=", - "path": "gopkg.in/olivere/elastic.v6", - "revision": "e3492b022a109ac0e52a6d42d5bfb835050fa7f4", - "revisionTime": "2018-08-02T18:23:21Z" - } - ], - "rootPath": "git.autistici.org/ai/logcat" -}