elasticsearch-xpack 0.1.0.pre
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +9 -0
- data/.travis.yml +4 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +62 -0
- data/Rakefile +95 -0
- data/elasticsearch-xpack.gemspec +39 -0
- data/examples/watcher/error_500.rb +163 -0
- data/lib/elasticsearch/xpack.rb +32 -0
- data/lib/elasticsearch/xpack/api/actions/graph/explore.rb +39 -0
- data/lib/elasticsearch/xpack/api/actions/info.rb +30 -0
- data/lib/elasticsearch/xpack/api/actions/license/delete.rb +23 -0
- data/lib/elasticsearch/xpack/api/actions/license/get.rb +26 -0
- data/lib/elasticsearch/xpack/api/actions/license/post.rb +28 -0
- data/lib/elasticsearch/xpack/api/actions/monitoring/bulk.rb +45 -0
- data/lib/elasticsearch/xpack/api/actions/security/authenticate.rb +24 -0
- data/lib/elasticsearch/xpack/api/actions/security/change_password.rb +34 -0
- data/lib/elasticsearch/xpack/api/actions/security/clear_cached_realms.rb +33 -0
- data/lib/elasticsearch/xpack/api/actions/security/clear_cached_roles.rb +27 -0
- data/lib/elasticsearch/xpack/api/actions/security/delete_role.rb +34 -0
- data/lib/elasticsearch/xpack/api/actions/security/delete_user.rb +37 -0
- data/lib/elasticsearch/xpack/api/actions/security/get_role.rb +29 -0
- data/lib/elasticsearch/xpack/api/actions/security/get_user.rb +29 -0
- data/lib/elasticsearch/xpack/api/actions/security/put_role.rb +32 -0
- data/lib/elasticsearch/xpack/api/actions/security/put_user.rb +34 -0
- data/lib/elasticsearch/xpack/api/actions/usage.rb +23 -0
- data/lib/elasticsearch/xpack/api/actions/watcher/ack_watch.rb +36 -0
- data/lib/elasticsearch/xpack/api/actions/watcher/activate_watch.rb +32 -0
- data/lib/elasticsearch/xpack/api/actions/watcher/deactivate_watch.rb +32 -0
- data/lib/elasticsearch/xpack/api/actions/watcher/delete_watch.rb +35 -0
- data/lib/elasticsearch/xpack/api/actions/watcher/execute_watch.rb +28 -0
- data/lib/elasticsearch/xpack/api/actions/watcher/get_watch.rb +27 -0
- data/lib/elasticsearch/xpack/api/actions/watcher/put_watch.rb +35 -0
- data/lib/elasticsearch/xpack/api/actions/watcher/restart.rb +23 -0
- data/lib/elasticsearch/xpack/api/actions/watcher/start.rb +24 -0
- data/lib/elasticsearch/xpack/api/actions/watcher/stats.rb +27 -0
- data/lib/elasticsearch/xpack/api/actions/watcher/stop.rb +24 -0
- data/lib/elasticsearch/xpack/api/namespace/graph.rb +18 -0
- data/lib/elasticsearch/xpack/api/namespace/license.rb +18 -0
- data/lib/elasticsearch/xpack/api/namespace/monitoring.rb +18 -0
- data/lib/elasticsearch/xpack/api/namespace/security.rb +18 -0
- data/lib/elasticsearch/xpack/api/namespace/watcher.rb +18 -0
- data/lib/elasticsearch/xpack/version.rb +5 -0
- metadata +297 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 72d019a7e50f9f6e17e5876243f036ab1162a0f8
|
4
|
+
data.tar.gz: da5a762394b24d1b99f77c0ad7b4e31916b620c6
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 41e5df6ce07833d9a8b979da33e321d2279464f0956a963ec472666a8cee8dab484a30ceb8cafb215084cc51c3b6df9c1bd9682ed3c975db406c37d2e64ed077
|
7
|
+
data.tar.gz: f35e4f346658bd0f2f6e803e29eda9449fe1e0be21870d4b6e4591aacecf0ee94ce0bb38955703cc9ac44fe9dd27212dfb0c242b260d0c5dc3291498fa8b5f81
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2016 Karel Minarik
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
# Elasticsearch::XPack
|
2
|
+
|
3
|
+
A Ruby integration for the [X-Pack extensions](https://www.elastic.co/v5)
|
4
|
+
for Elasticsearch.
|
5
|
+
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
Install the package from [Rubygems](https://rubygems.org):
|
10
|
+
|
11
|
+
gem install elasticsearch-xpack
|
12
|
+
|
13
|
+
To use an unreleased version, either add it to your `Gemfile` for [Bundler](http://gembundler.com):
|
14
|
+
|
15
|
+
gem 'elasticsearch-xpack', git: 'git://github.com/elastic/elasticsearch-ruby-xpack.git'
|
16
|
+
|
17
|
+
or install it from a source code checkout:
|
18
|
+
|
19
|
+
git clone https://github.com/elasticsearch/elasticsearch-ruby-xpack.git
|
20
|
+
bundle install
|
21
|
+
rake install
|
22
|
+
|
23
|
+
## Usage
|
24
|
+
|
25
|
+
If you use the official [Ruby client for Elasticsearch](https://github.com/elastic/elasticsearch-ruby),
|
26
|
+
require the library in your code, and all the methods will be automatically available in the `xpack` namespace:
|
27
|
+
|
28
|
+
```ruby
|
29
|
+
require 'elasticsearch'
|
30
|
+
require 'elasticsearch/xpack'
|
31
|
+
|
32
|
+
client = Elasticsearch::Client.new url: 'http://elastic:changeme@localhost:9200'
|
33
|
+
|
34
|
+
client.xpack.info
|
35
|
+
# => {"build"=> ..., "features"=> ...}
|
36
|
+
```
|
37
|
+
|
38
|
+
The integration is designed as a standalone `Elasticsearch::XPack::API` module, so it's easy
|
39
|
+
to mix it into a different client, and the methods will be available in the top namespace.
|
40
|
+
|
41
|
+
For documentation, look into the RDoc annotations in the source files, which contain links to the
|
42
|
+
official [X-Pack for the Elastic Stack](https://www.elastic.co/guide/en/x-pack/current/index.html) documentation.
|
43
|
+
|
44
|
+
For examples, look into the [`examples`](examples) folder in this repository.
|
45
|
+
|
46
|
+
## License
|
47
|
+
|
48
|
+
This software is licensed under the Apache 2 license, quoted below.
|
49
|
+
|
50
|
+
Copyright (c) 2016 Elasticsearch <http://www.elasticsearch.org>
|
51
|
+
|
52
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
53
|
+
you may not use this file except in compliance with the License.
|
54
|
+
You may obtain a copy of the License at
|
55
|
+
|
56
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
57
|
+
|
58
|
+
Unless required by applicable law or agreed to in writing, software
|
59
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
60
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
61
|
+
See the License for the specific language governing permissions and
|
62
|
+
limitations under the License.
|
data/Rakefile
ADDED
@@ -0,0 +1,95 @@
|
|
1
|
+
require 'bundler/gem_tasks'
|
2
|
+
|
3
|
+
require 'rake/testtask'
|
4
|
+
|
5
|
+
task :default do
|
6
|
+
exec "rake --tasks"
|
7
|
+
end
|
8
|
+
|
9
|
+
Rake::TestTask.new('test:unit') do |test|
|
10
|
+
test.libs << 'test'
|
11
|
+
test.test_files = FileList['test/unit/**/*_test.rb']
|
12
|
+
# test.verbose = true
|
13
|
+
# test.warning = true
|
14
|
+
end
|
15
|
+
|
16
|
+
namespace :test do
|
17
|
+
desc "Run integration tests"
|
18
|
+
task :integration do
|
19
|
+
require 'ansi'
|
20
|
+
|
21
|
+
suites = %w[
|
22
|
+
x-plugins/elasticsearch/x-pack/src/test/resources/rest-api-spec/test
|
23
|
+
x-plugins/elasticsearch/x-pack/graph/src/test/resources/rest-api-spec/test
|
24
|
+
x-plugins/elasticsearch/x-pack/monitoring/src/test/resources/rest-api-spec/test/monitoring
|
25
|
+
x-plugins/elasticsearch/x-pack/security/src/test/resources/rest-api-spec/test
|
26
|
+
x-plugins/elasticsearch/x-pack/watcher/src/test/resources/rest-api-spec/test/xpack/watcher
|
27
|
+
x-plugins/elasticsearch/x-pack/license-plugin/src/test/resources/rest-api-spec/test
|
28
|
+
]
|
29
|
+
|
30
|
+
# TEMPORARY
|
31
|
+
disabled_suites = %w[
|
32
|
+
]
|
33
|
+
|
34
|
+
suites = (suites + disabled_suites).select! { |d| d =~ Regexp.new(ENV['SUITE'].gsub(/,/, '|')) } if ENV['SUITE']
|
35
|
+
|
36
|
+
executed_suites = []
|
37
|
+
|
38
|
+
at_exit do
|
39
|
+
errors = executed_suites.any? { |d| d.values.first == 1 }
|
40
|
+
color = errors ? :red : :green
|
41
|
+
|
42
|
+
if errors
|
43
|
+
puts "----- ".ansi(color) + "ERROR".ansi(color).ansi(:bold) + ('-'*(80-12)).ansi(color)
|
44
|
+
else
|
45
|
+
puts "----- ".ansi(color) + "SUCCESS".ansi(color).ansi(:bold) + ('-'*(80-13)).ansi(color)
|
46
|
+
end
|
47
|
+
|
48
|
+
executed_suites.each do |d|
|
49
|
+
name = d.keys.first.gsub(%r{x-plugins/elasticsearch/x-pack/([^/]+)/.*}, '\1')
|
50
|
+
status = d.values.first == 0 ? 'OK'.ansi(:green) : 'KO'.ansi(:red)
|
51
|
+
puts "#{status} #{name.ansi(:bold)}"
|
52
|
+
end
|
53
|
+
|
54
|
+
puts ('-'*80).ansi(color)
|
55
|
+
|
56
|
+
exit( errors ? 1 : 0 )
|
57
|
+
end
|
58
|
+
|
59
|
+
suites.each do |suite|
|
60
|
+
begin
|
61
|
+
sh <<-COMMAND
|
62
|
+
TEST_REST_API_SPEC=../#{suite} bundle exec ruby -I lib:test test/integration/yaml_test_runner.rb
|
63
|
+
COMMAND
|
64
|
+
executed_suites << { suite => 0 }
|
65
|
+
rescue RuntimeError
|
66
|
+
executed_suites << { suite => 1 }
|
67
|
+
end
|
68
|
+
|
69
|
+
puts '', '-'*80, ''
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
namespace :elasticsearch do
|
75
|
+
desc "Start Elasticsearch node for tests"
|
76
|
+
task :start do
|
77
|
+
require 'elasticsearch/extensions/test/cluster'
|
78
|
+
Elasticsearch::Extensions::Test::Cluster.start(port: ENV.fetch('TEST_CLUSTER_PORT', 9260), nodes: 1, path_logs: '/tmp')
|
79
|
+
end
|
80
|
+
|
81
|
+
desc "Stop Elasticsearch node for tests"
|
82
|
+
task :stop do
|
83
|
+
require 'elasticsearch/extensions/test/cluster'
|
84
|
+
Elasticsearch::Extensions::Test::Cluster.stop(port: ENV.fetch('TEST_CLUSTER_PORT', 9260), nodes: 1)
|
85
|
+
end
|
86
|
+
|
87
|
+
task :status do
|
88
|
+
require 'elasticsearch/extensions/test/cluster'
|
89
|
+
begin
|
90
|
+
Elasticsearch::Extensions::Test::Cluster.__print_cluster_info(ENV.fetch('TEST_CLUSTER_PORT', 9260))
|
91
|
+
rescue Errno::ECONNREFUSED
|
92
|
+
puts "\e[31m[!] Test cluster not running\e[0m"; exit(1)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'elasticsearch/xpack/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "elasticsearch-xpack"
|
8
|
+
spec.version = Elasticsearch::XPack::VERSION
|
9
|
+
spec.authors = ["Karel Minarik"]
|
10
|
+
spec.email = ["karel@elastic.co"]
|
11
|
+
|
12
|
+
spec.summary = "Ruby integrations for the X-Pack extensions for Elasticsearch"
|
13
|
+
spec.description = "Ruby integrations for the X-Pack extensions for Elasticsearch"
|
14
|
+
spec.homepage = "https://github.com/elastic/elasticsearch-xpack-ruby"
|
15
|
+
spec.license = "Apache 2"
|
16
|
+
|
17
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
18
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.10"
|
22
|
+
spec.add_development_dependency "rake", "~> 11.1"
|
23
|
+
|
24
|
+
spec.add_dependency "elasticsearch-api"
|
25
|
+
|
26
|
+
spec.add_development_dependency "elasticsearch"
|
27
|
+
spec.add_development_dependency "elasticsearch-transport"
|
28
|
+
spec.add_development_dependency "elasticsearch-extensions"
|
29
|
+
|
30
|
+
spec.add_development_dependency "activesupport"
|
31
|
+
spec.add_development_dependency "ansi"
|
32
|
+
spec.add_development_dependency "turn"
|
33
|
+
spec.add_development_dependency "minitest"
|
34
|
+
spec.add_development_dependency "minitest-reporters"
|
35
|
+
spec.add_development_dependency "shoulda-context"
|
36
|
+
spec.add_development_dependency "mocha"
|
37
|
+
spec.add_development_dependency "yard"
|
38
|
+
spec.add_development_dependency "pry"
|
39
|
+
end
|
@@ -0,0 +1,163 @@
|
|
1
|
+
# An example of a complex configuration for Elasticsearch Watcher alerting and notification system.
|
2
|
+
#
|
3
|
+
# Execute this file from the root of the repository:
|
4
|
+
#
|
5
|
+
# bundle exec ruby -I lib ./examples/watcher/error_500.rb
|
6
|
+
#
|
7
|
+
# The watch searches for `500` errors in a specific index on a periodic basis, and performs three
|
8
|
+
# actions when at least 3 errors have been received in the last 5 minutes:
|
9
|
+
#
|
10
|
+
# 1. indexes the error documents and aggregations returned from search,
|
11
|
+
# 2. sends a notification via e-mail, and
|
12
|
+
# 3. sends the data to a HTTP API.
|
13
|
+
#
|
14
|
+
# If you want to test sending the e-mail, you have to configure Watcher:
|
15
|
+
# <https://www.elastic.co/guide/en/x-pack/current/actions-email.html#configuring-email>
|
16
|
+
#
|
17
|
+
# You can run a simple Sinatra based web server to test the webhook action with this script:
|
18
|
+
#
|
19
|
+
# $ ruby -r sinatra -r json -e 'post("/") { json = JSON.parse(request.body.read); puts %Q~Received #{json["watch_id"]} with payload: #{json["payload"]}~ }'
|
20
|
+
#
|
21
|
+
|
22
|
+
require 'elasticsearch'
|
23
|
+
require 'elasticsearch/xpack'
|
24
|
+
|
25
|
+
client = Elasticsearch::Client.new url: 'http://elastic:changeme@localhost:9260', log: true
|
26
|
+
client.transport.logger.formatter = proc do |severity, datetime, progname, msg| "\e[2m#{msg}\e[0m\n" end
|
27
|
+
|
28
|
+
# Delete the Watcher and test indices
|
29
|
+
#
|
30
|
+
['test_errors', 'alerts', '.watcher-history-*'].each do |index|
|
31
|
+
client.indices.delete index: index, ignore: 404
|
32
|
+
end
|
33
|
+
|
34
|
+
# Print information about the Watcher plugin
|
35
|
+
#
|
36
|
+
puts "X-Pack #{client.xpack.info['build']['hash']}"
|
37
|
+
|
38
|
+
# Register a new watch
|
39
|
+
#
|
40
|
+
client.xpack.watcher.put_watch id: 'error_500', body: {
|
41
|
+
# Label the watch
|
42
|
+
#
|
43
|
+
metadata: { tags: ['errors'] },
|
44
|
+
|
45
|
+
# Run the watch every 10 seconds
|
46
|
+
#
|
47
|
+
trigger: { schedule: { interval: '10s' } },
|
48
|
+
|
49
|
+
# Search for at least 3 documents matching the condition
|
50
|
+
#
|
51
|
+
condition: { compare: { 'ctx.payload.hits.total' => { gt: 3 } } },
|
52
|
+
|
53
|
+
# Throttle the watch execution for 30 seconds
|
54
|
+
#
|
55
|
+
throttle_period: '30s',
|
56
|
+
|
57
|
+
# The search request to execute
|
58
|
+
#
|
59
|
+
input: {
|
60
|
+
search: {
|
61
|
+
request: {
|
62
|
+
indices: ['test_errors'],
|
63
|
+
body: {
|
64
|
+
query: {
|
65
|
+
bool: {
|
66
|
+
must: [
|
67
|
+
{ match: { status: 500 } } ,
|
68
|
+
{ range: { timestamp: { from: '{{ctx.trigger.scheduled_time}}||-5m',
|
69
|
+
to: '{{ctx.trigger.triggered_time}}' } } }
|
70
|
+
]
|
71
|
+
}
|
72
|
+
},
|
73
|
+
# Return hosts with most errors
|
74
|
+
#
|
75
|
+
aggregations: {
|
76
|
+
hosts: { terms: { field: 'host' } }
|
77
|
+
}
|
78
|
+
}}}
|
79
|
+
},
|
80
|
+
|
81
|
+
# The actions to perform
|
82
|
+
#
|
83
|
+
actions: {
|
84
|
+
send_email: {
|
85
|
+
transform: {
|
86
|
+
# Transform the data for the template
|
87
|
+
#
|
88
|
+
script: {
|
89
|
+
lang: 'painless',
|
90
|
+
inline: "[ 'total': ctx.payload.hits.total, 'hosts': ctx.payload.aggregations.hosts.buckets.collect(bucket -> [ 'host': bucket.key, 'errors': bucket.doc_count ]), 'errors': ctx.payload.hits.hits.collect(d -> d._source) ]"
|
91
|
+
}
|
92
|
+
},
|
93
|
+
email: { to: 'alerts@example.com',
|
94
|
+
subject: '[ALERT] {{ctx.watch_id}}',
|
95
|
+
body: <<-BODY.gsub(/^ {28}/, ''),
|
96
|
+
Received {{ctx.payload.total}} errors in the last 5 minutes.
|
97
|
+
|
98
|
+
Hosts:
|
99
|
+
|
100
|
+
{{#ctx.payload.hosts}}- {{host}} ({{errors}} errors)\n{{/ctx.payload.hosts}}
|
101
|
+
|
102
|
+
A file with complete data is attached to this message.\n
|
103
|
+
BODY
|
104
|
+
attachments: { 'data.yml' => { data: { format: 'yaml' } } }
|
105
|
+
}
|
106
|
+
},
|
107
|
+
|
108
|
+
index_payload: {
|
109
|
+
# Transform the data to be stored
|
110
|
+
#
|
111
|
+
transform: {
|
112
|
+
script: {
|
113
|
+
lang: 'painless',
|
114
|
+
inline: "[ 'watch_id': ctx.watch_id, 'payload': ctx.payload ]"
|
115
|
+
}
|
116
|
+
},
|
117
|
+
index: { index: 'alerts', doc_type: 'alert' }
|
118
|
+
},
|
119
|
+
|
120
|
+
ping_webhook: {
|
121
|
+
webhook: {
|
122
|
+
method: 'post',
|
123
|
+
url: 'http://localhost:4567',
|
124
|
+
body: %q|{"watch_id" : "{{ctx.watch_id}}", "payload" : "{{ctx.payload}}"}| }
|
125
|
+
}
|
126
|
+
}
|
127
|
+
}
|
128
|
+
|
129
|
+
# Create the index with example documents
|
130
|
+
#
|
131
|
+
client.indices.create index: 'test_errors', body: {
|
132
|
+
mappings: {
|
133
|
+
d: {
|
134
|
+
properties: {
|
135
|
+
host: { type: 'keyword' }
|
136
|
+
}
|
137
|
+
}
|
138
|
+
}
|
139
|
+
}
|
140
|
+
|
141
|
+
# Index documents to trigger the watch
|
142
|
+
#
|
143
|
+
10.times do
|
144
|
+
client.index index: 'test_errors', type: 'd',
|
145
|
+
body: { timestamp: Time.now.utc.iso8601, status: "#{rand(4..5)}00", host: "10.0.0.#{rand(1..3)}" }
|
146
|
+
end
|
147
|
+
|
148
|
+
# Wait a bit...
|
149
|
+
#
|
150
|
+
print "Waiting 30 seconds..."
|
151
|
+
$i=0; while $i < 30 do
|
152
|
+
sleep(1); print('.'); $i+=1
|
153
|
+
end; puts "\n"
|
154
|
+
|
155
|
+
# Display information about watch execution
|
156
|
+
#
|
157
|
+
client.search(index: '.watcher-history-*', q: 'watch_id:error_500', sort: 'trigger_event.triggered_time:asc')['hits']['hits'].each do |r|
|
158
|
+
puts "#{r['_source']['watch_id']} #{r['_source']['state'].upcase} at #{r['_source']['result']['execution_time']}"
|
159
|
+
end
|
160
|
+
|
161
|
+
# Delete the watch
|
162
|
+
#
|
163
|
+
client.xpack.watcher.delete_watch id: 'error_500', master_timeout: '30s', force: true
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require "elasticsearch/api"
|
2
|
+
require "elasticsearch/xpack/version"
|
3
|
+
|
4
|
+
Dir[ File.expand_path('../xpack/api/actions/**/*.rb', __FILE__) ].each { |f| require f }
|
5
|
+
Dir[ File.expand_path('../xpack/api/namespace/**/*.rb', __FILE__) ].each { |f| require f }
|
6
|
+
|
7
|
+
module Elasticsearch
|
8
|
+
module XPack
|
9
|
+
module API
|
10
|
+
def self.included(base)
|
11
|
+
Elasticsearch::XPack::API.constants.reject {|c| c == :Client }.each do |m|
|
12
|
+
base.__send__ :include, Elasticsearch::XPack::API.const_get(m)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class Client
|
17
|
+
include Elasticsearch::API::Common::Client, Elasticsearch::API::Common::Client::Base
|
18
|
+
include Elasticsearch::XPack::API
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
module Elasticsearch
|
25
|
+
module Transport
|
26
|
+
class Client
|
27
|
+
def xpack
|
28
|
+
@xpack_client ||= Elasticsearch::XPack::API::Client.new(self)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end if defined?(Elasticsearch::Transport::Client)
|