fluent-plugin-mongo-slow-query 0.0.5 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,15 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 284e26c6dc167bed1678ea14f4efb320be3148e5
4
- data.tar.gz: a50274330aa6b8fe11eb052d4fa2414cf095ba1d
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ YzJhM2VkMGUzMTA2ZTczMTg1ZjU1ZDVmNjdjYTI2MjUwOWI5OTBiOA==
5
+ data.tar.gz: !binary |-
6
+ ZjQxMDYwOWYyMzYzNWRiYjZhZjc4MjZlOTQyNTU3YWQ1YWVjNjlmZg==
5
7
  SHA512:
6
- metadata.gz: fdc3f9ef96cc3e558831772744e8709d10a6e1b42df55435a2a2bf732c67f926acefbdda555372b969c3d9634508fc688ad144d8059912a142fa8a98e124f865
7
- data.tar.gz: da2a2a1938f10227c0a62f2106d378ea69ced0c930a07f4eebf7cc62d77c0fb08abe73c73fa8982430f6e75561d119de834d50df8843e7962b3c5fce39985c28
8
+ metadata.gz: !binary |-
9
+ OWQ4M2FmNDFmM2RhZTQ5Y2JmYTRlZWRiMmQ1NDU2OTg3ZDBlZWRjZGI5MGI1
10
+ ZjViZDlmNjcwZWM0Y2NkNDk1MDAxMGM1NTIxZDEyMjI0MWY4ZTU4ZWRhNzIw
11
+ YjIxN2Q4NDFjMGE3ZjFiOWZmODkyYTgwOGRjMDQ0ZTM3MDg5OWY=
12
+ data.tar.gz: !binary |-
13
+ NDRmMTdiYWRhODE1ZGM4NjZmMDZiOTE0YWQwMmQwMWMwYjNiOTBiZTBkNGMx
14
+ MTRjZGQ5NzlmNGVhNDU4YzRmNTFkZWRjZjkyMTMxZWJhNjExZmU4MmYwZGYw
15
+ OGI2YjQyMmNhYzNhMDcxYjdiNzk0ZGUzZWM4NGE4ZWE4ZmUwMzU=
@@ -10,22 +10,18 @@ module Fluent
10
10
  # 'conf' is a Hash that includes configuration parameters.
11
11
  # If the configuration is invalid, raise Fluent::ConfigError.
12
12
  def configure(conf)
13
- #unless conf.has_key?("format")
14
- # conf["format"] = '/(?<time>.*) \[\w+\] (?<op>[^ ]+) (?<ns>[^ ]+) (?<detail>((query: (?<query>{.+}) update: {.*})|(query: (?<query>{.+})))) .* (?<ms>\d+)ms/'
15
- # $log.warn "load default format: ", conf["format"]
16
- #end
17
-
18
- # load default format that degisned for MongoDB
19
- conf["format"] = '/(?<time>.*) \[\w+\] (?<op>[^ ]+) (?<ns>[^ ]+) ((?<detail>(query: (?<query>\{.+\}) update: \{.*\}))|((?<detail>(query: (?<query>\{.+\}))) planSummary: .*)|((?<detail>query: (?<query>\{.+\})))) .* (?<ms>\d+)ms/'
13
+ # load log format for MongoDB
14
+ conf["format"] = '/^(?<time>.*?)(?:\s+\w\s\w+\s*)? \[conn\d+\] (?<op>\w+) (?<ns>\S+) (?<detail>(?:(?:query: (?<query>\{.+\}) update: \{.*\})|(?:query: (?<query>\{.*\}) planSummary: \w+(?: \{.*\})?)|(?:query: (?<query>\{.*\}))|(?:command: \{.*\}))) (?<stat>.*) (?<ms>\d+)ms$/'
20
15
 
21
16
  # not set "time_format"
22
17
  # default use Ruby's DateTime.parse() to pase time
23
18
  #
24
- # be compatible for v2.2, 2.4 and 2.6
19
+ # be compatible for v2.2, 2.4, 2.6 and 3.0
25
20
  # difference of time format
26
- # 2.2: Wed Sep 17 10:00:00 [conn] ...
27
- # 2.4: Wed Sep 17 10:00:00.123 [conn] ...
28
- # 2.6: 2014-09-17T10:00:43.506+0800 [conn] ...
21
+ # 2.2: Wed Sep 17 10:00:00 [connXXX] ...
22
+ # 2.4: Wed Sep 17 10:00:00.123 [connXXX] ...
23
+ # 2.6: 2014-09-17T10:00:43.506+0800 [connXXX] ...
24
+ # 3.0: 2015-03-18T15:28:44.321+0800 I QUERY [conn5462] ...
29
25
  #unless conf.has_key?("time_format")
30
26
  # #conf["time_format"] = '%a %b %d %H:%M:%S'
31
27
  # #conf["time_format"] = '%a %b %d %H:%M:%S.%L'
@@ -41,12 +37,58 @@ module Fluent
41
37
  line.chomp! # remove \n
42
38
  time, record = parse_line(line)
43
39
  if time && record
44
- record["query"] = get_query_prototype(record["query"])
40
+ record["query"] = get_query_prototype(record["query"]) if record["query"]
45
41
  record["ms"] = record["ms"].to_i
46
42
  record["ts"] = time
43
+
44
+ case record["op"]
45
+ when "query"
46
+ when "getmore"
47
+ res = /ntoskip:(?<ntoskip>\d+)/.match(record["stat"])
48
+ if res
49
+ record["ntoskip"] = res["ntoskip"].to_i
50
+ end
51
+ res = /nscanned:(?<nscanned>\d+)/.match(record["stat"])
52
+ if res
53
+ record["nscanned"] = res["nscanned"].to_i
54
+ end
55
+ res = /nreturned:(?<nreturned>\d+)/.match(record["stat"])
56
+ if res
57
+ record["nreturned"] = res["nreturned"].to_i
58
+ end
59
+ res = /reslen:(?<reslen>\d+)/.match(record["stat"])
60
+ if res
61
+ record["reslen"] = res["reslen"].to_i
62
+ end
63
+ when "update"
64
+ res = /nscanned:(?<nscanned>\d+)/.match(record["stat"])
65
+ if res
66
+ record["nscanned"] = res["nscanned"].to_i
67
+ end
68
+ res = /nMatched:(?<nmatched>\d+)/.match(record["stat"])
69
+ if res # MongoDB v3.0
70
+ record["nmatched"] = res["nmatched"].to_i
71
+ res = /nModified:(?<nmodified>\d+)/.match(record["stat"])
72
+ if res
73
+ record["nmodified"] = res["nmodified"].to_i
74
+ end
75
+ else # MongoDB v2.4
76
+ res = /nupdated:(?<nmodified>\d+)/.match(record["stat"])
77
+ if res
78
+ record["nmodified"] = res["nmodified"].to_i
79
+ end
80
+ end
81
+ when "remove"
82
+ res = /ndeleted:(?<ndeleted>\d+)/.match(record["stat"])
83
+ if res
84
+ record["ndeleted"] = res["ndeleted"].to_i
85
+ end
86
+ end
87
+
47
88
  #if record.has_key?("update")
48
89
  # record["update"] = get_query_prototype(record["update"])
49
90
  #end
91
+
50
92
  es.add(time, record)
51
93
  end
52
94
  rescue
@@ -73,10 +115,11 @@ module Fluent
73
115
  ns_array += extract_query_prototype(val, ns)
74
116
  elsif val.class == Array
75
117
  val.each do |item|
76
- if item.class == Hash
118
+ if item.class == Hash # e.g. $eq $gt $gte $lt $lte $ne $in $nin
77
119
  ns_array += extract_query_prototype(item, ns)
78
- else
79
- ns_array << ns + '.' + item
120
+ else # e.g. $and $or $nor
121
+ ns_array << ns
122
+ break
80
123
  end
81
124
  end
82
125
  else
@@ -92,7 +135,7 @@ module Fluent
92
135
  prototype = extract_query_prototype(JSON.parse(to_json(query)))
93
136
  return '{ ' + prototype.join(', ') + ' }'
94
137
  rescue
95
- $log.error $!.to_s
138
+ $log.warn $!.to_s
96
139
  return query
97
140
  end
98
141
  end
metadata CHANGED
@@ -1,16 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-mongo-slow-query
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
- - caosiyang
7
+ - Caosiyang
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-18 00:00:00.000000000 Z
11
+ date: 2015-03-27 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description: fluent plugin for mongo slow query
13
+ description: Fluent plugin for MongoDB slow operation. It's helpful to statistics
14
+ the slow queries and build indexes
14
15
  email: csy3228@gmail.com
15
16
  executables: []
16
17
  extensions: []
@@ -27,18 +28,19 @@ require_paths:
27
28
  - lib
28
29
  required_ruby_version: !ruby/object:Gem::Requirement
29
30
  requirements:
30
- - - '>='
31
+ - - ! '>='
31
32
  - !ruby/object:Gem::Version
32
33
  version: '0'
33
34
  required_rubygems_version: !ruby/object:Gem::Requirement
34
35
  requirements:
35
- - - '>='
36
+ - - ! '>='
36
37
  - !ruby/object:Gem::Version
37
38
  version: '0'
38
39
  requirements: []
39
40
  rubyforge_project:
40
- rubygems_version: 2.3.0
41
+ rubygems_version: 2.4.5
41
42
  signing_key:
42
43
  specification_version: 4
43
- summary: fluent plugin for mongo slow query
44
+ summary: Fluent plugin for MongoDB slow operation. It's helpful to statistics the
45
+ slow queries and build indexes
44
46
  test_files: []