-
-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathes_metrics.rb
63 lines (48 loc) · 1.97 KB
/
es_metrics.rb
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
require 'json'
require_relative 'include.rb'
# percent complete
unless @expected_doc_count.nil?
expected_doc_count_pretty = as_val(@expected_doc_count.to_i)
SCHEDULER.every '1m' do
url = URI.parse "#{@es_endpoint}#{@es_index}/_stats/docs"
response = JSON.parse @es_client.get(url).body
indexed = response['indices'][@es_index]['primaries']['docs']['count']
percent_complete = ((indexed.to_f / @expected_doc_count.to_f) * 100).to_i
percent_complete > 100 ? percent_complete = 100 : percent_complete
send_event('percent-complete', text: "#{percent_complete}% (~#{expected_doc_count_pretty} expected docs)")
end
end
# es metrics
SCHEDULER.every '1m' do
url = URI.parse "#{@es_endpoint}#{@es_index}/_stats?human"
response = JSON.parse @es_client.get(url).body
store_size = response['indices'][@es_index]['primaries']['store']['size']
send_event('es-store-size', text: store_size)
completion_size = response['indices'][@es_index]['primaries']['completion']['size']
send_event('es-completion-size', text: completion_size)
end
# index rate
count = []
count << { rate: 0, indexed: false }
SCHEDULER.every '10s' do
url = URI.parse "#{@es_endpoint}#{@es_index}/_stats/indexing?human"
response = JSON.parse @es_client.get(url).body
indexed = response['indices'][@es_index]['primaries']['indexing']['index_total']
# avoid huge spike with first data point
count.last[:indexed] == false ? rate = 0 : rate = (indexed - count.last[:indexed]) / 10
# don't return a negative indexing rate
rate < 0 ? rate = 0 : rate
count.shift
count << { rate: rate, indexed: indexed }
send_event('es-index-rate', value: count.last[:rate])
end
# version
SCHEDULER.every '5m' do
host = URI.split(@es_endpoint)[2]
port = URI.split(@es_endpoint)[3]
port.nil? ? port = 80 : port
version_url = URI.parse "http://#{host}:#{port}/"
response = JSON.parse @es_client.get(version_url).body
version = response['version']['number']
send_event('es-version', text: version)
end