bidu-house 0.2.1 → 1.0.0
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 +4 -4
- data/Gemfile.lock +3 -3
- data/README.md +3 -0
- data/lib/bidu/house/report/error.rb +21 -42
- data/lib/bidu/house/report.rb +45 -1
- data/lib/bidu/house/version.rb +1 -1
- data/spec/lib/bidu/house/report/error_spec.rb +29 -0
- data/spec/support/report/dummy.rb +2 -2
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e81c76e00406e53d4990c5cc225f38e81fa4de1c
|
4
|
+
data.tar.gz: cf6bd8a5b1f369c44cf2b3e4c67464a13c4e4700
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6dc1bf73244b34f0a5c84c8ca65238f4f43bcf94b7278d6d028f41e3e9d0351a4711cd08ab95a93499ff7033c7ff9e52e3c0cdb84cc3bba7ac5b67ead002be67
|
7
|
+
data.tar.gz: a6d7313fa19994b600c4a87bb83191d1ca8e289563756e8b23a52a122712d104daed6e6561a4975a4ebb2d1a029a8b44e57c9ac0550f3947de666e0a6f3852af
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
bidu-house (0.
|
4
|
+
bidu-house (1.0.0)
|
5
5
|
activesupport
|
6
6
|
bidu-active_ext
|
7
7
|
concern_builder
|
@@ -27,7 +27,7 @@ GEM
|
|
27
27
|
bidu-active_ext (1.0.0)
|
28
28
|
activesupport
|
29
29
|
bidu-core_ext
|
30
|
-
bidu-core_ext (1.2.
|
30
|
+
bidu-core_ext (1.2.2)
|
31
31
|
activesupport
|
32
32
|
builder (3.2.2)
|
33
33
|
coderay (1.1.0)
|
@@ -82,4 +82,4 @@ DEPENDENCIES
|
|
82
82
|
sqlite3
|
83
83
|
|
84
84
|
BUNDLED WITH
|
85
|
-
1.
|
85
|
+
1.12.5
|
data/README.md
CHANGED
@@ -50,6 +50,9 @@ with error and render the report
|
|
50
50
|
- threshold: default report threshold (default: 0.02)
|
51
51
|
- period: default search period (default: 1 day)
|
52
52
|
- on: report bucket (default: :default)
|
53
|
+
- base_scope: scope to be universal sample
|
54
|
+
- uniq: when the output ids should not be repeated
|
55
|
+
- limit: limit of ids to be outputed
|
53
56
|
|
54
57
|
4. Run the server and hit the health-check routes
|
55
58
|
|
@@ -1,29 +1,22 @@
|
|
1
1
|
module Bidu
|
2
2
|
module House
|
3
|
-
|
4
|
-
class Error
|
5
|
-
include JsonParser
|
6
|
-
|
3
|
+
class Report
|
4
|
+
class Error < Report
|
7
5
|
ALLOWED_PARAMETERS=[:period, :threshold]
|
8
|
-
|
9
|
-
|
6
|
+
DEFAULT_OPTION = {
|
7
|
+
external_key: :id,
|
8
|
+
threshold: 0.02,
|
9
|
+
period: 1.day,
|
10
|
+
scope: :with_error,
|
11
|
+
base_scope: :all,
|
12
|
+
uniq: false
|
13
|
+
}
|
10
14
|
|
11
15
|
json_parse :threshold, type: :float
|
12
|
-
json_parse :
|
13
|
-
json_parse :scope, :id, :clazz, :base_scope, :external_key, case: :snake
|
16
|
+
json_parse :scope, :id, :external_key, :uniq, :limit, case: :snake
|
14
17
|
|
15
18
|
def initialize(options)
|
16
|
-
|
17
|
-
external_key: :id,
|
18
|
-
threshold: 0.02,
|
19
|
-
period: 1.day,
|
20
|
-
scope: :with_error,
|
21
|
-
base_scope: :all
|
22
|
-
}.merge(options)
|
23
|
-
end
|
24
|
-
|
25
|
-
def status
|
26
|
-
@status ||= error? ? :error : :ok
|
19
|
+
super(DEFAULT_OPTION.merge(options))
|
27
20
|
end
|
28
21
|
|
29
22
|
def percentage
|
@@ -38,13 +31,9 @@ module Bidu
|
|
38
31
|
@error ||= percentage > threshold
|
39
32
|
end
|
40
33
|
|
41
|
-
def status
|
42
|
-
error? ? :error : :ok
|
43
|
-
end
|
44
|
-
|
45
34
|
def as_json
|
46
35
|
{
|
47
|
-
ids:
|
36
|
+
ids: ids,
|
48
37
|
percentage: percentage,
|
49
38
|
status: status
|
50
39
|
}
|
@@ -52,6 +41,14 @@ module Bidu
|
|
52
41
|
|
53
42
|
private
|
54
43
|
|
44
|
+
def ids
|
45
|
+
relation = scoped
|
46
|
+
relation = relation.uniq if uniq
|
47
|
+
relation = relation.limit(limit) if limit
|
48
|
+
|
49
|
+
relation.pluck(external_key)
|
50
|
+
end
|
51
|
+
|
55
52
|
def fetch_percentage
|
56
53
|
if (scope.is_a?(Symbol))
|
57
54
|
last_entries.percentage(*(scope.to_s.split('.').map(&:to_sym)))
|
@@ -59,24 +56,6 @@ module Bidu
|
|
59
56
|
last_entries.percentage(scope)
|
60
57
|
end
|
61
58
|
end
|
62
|
-
|
63
|
-
def fetch_scoped(base, scope)
|
64
|
-
if (scope.is_a?(Symbol))
|
65
|
-
scope.to_s.split('.').inject(base) do |entries, method|
|
66
|
-
entries.public_send(method)
|
67
|
-
end
|
68
|
-
else
|
69
|
-
base.where(scope)
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
def last_entries
|
74
|
-
@last_entries ||= base.where('updated_at >= ?', period.seconds.ago)
|
75
|
-
end
|
76
|
-
|
77
|
-
def base
|
78
|
-
fetch_scoped(clazz, base_scope)
|
79
|
-
end
|
80
59
|
end
|
81
60
|
end
|
82
61
|
end
|
data/lib/bidu/house/report.rb
CHANGED
@@ -1,7 +1,51 @@
|
|
1
1
|
module Bidu
|
2
2
|
module House
|
3
|
-
|
3
|
+
class Report
|
4
|
+
include JsonParser
|
4
5
|
require 'bidu/house/report/error'
|
6
|
+
ALLOWED_PARAMETERS = []
|
7
|
+
DEFAULT_OPTION = {}
|
8
|
+
|
9
|
+
attr_reader :json
|
10
|
+
|
11
|
+
json_parse :period, type: :period
|
12
|
+
json_parse :clazz, :base_scope, case: :snake
|
13
|
+
|
14
|
+
def initialize(options)
|
15
|
+
@json = DEFAULT_OPTION.merge(options)
|
16
|
+
end
|
17
|
+
|
18
|
+
def status
|
19
|
+
@status ||= error? ? :error : :ok
|
20
|
+
end
|
21
|
+
|
22
|
+
def error?
|
23
|
+
raise 'Not implemented yet'
|
24
|
+
end
|
25
|
+
|
26
|
+
def as_json
|
27
|
+
{ status: status }
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def fetch_scoped(base, scope)
|
33
|
+
if (scope.is_a?(Symbol))
|
34
|
+
scope.to_s.split('.').inject(base) do |entries, method|
|
35
|
+
entries.public_send(method)
|
36
|
+
end
|
37
|
+
else
|
38
|
+
base.where(scope)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def last_entries
|
43
|
+
@last_entries ||= base.where('updated_at >= ?', period.seconds.ago)
|
44
|
+
end
|
45
|
+
|
46
|
+
def base
|
47
|
+
fetch_scoped(clazz, base_scope)
|
48
|
+
end
|
5
49
|
end
|
6
50
|
end
|
7
51
|
end
|
data/lib/bidu/house/version.rb
CHANGED
@@ -341,6 +341,35 @@ describe Bidu::House::Report::Error do
|
|
341
341
|
it 'returns the correct external keys' do
|
342
342
|
expect(subject.as_json).to eq(expected)
|
343
343
|
end
|
344
|
+
|
345
|
+
context 'when some external ids are the same' do
|
346
|
+
let(:ids_expected) { [10, 10, 10] }
|
347
|
+
before do
|
348
|
+
Document.update_all(outter_external_id: 10)
|
349
|
+
end
|
350
|
+
|
351
|
+
it 'returns the correct external keys' do
|
352
|
+
expect(subject.as_json).to eq(expected)
|
353
|
+
end
|
354
|
+
|
355
|
+
context 'and passing uniq option' do
|
356
|
+
before { options[:uniq] = true }
|
357
|
+
let(:ids_expected) { [10] }
|
358
|
+
|
359
|
+
it 'returns the correct external keys only once' do
|
360
|
+
expect(subject.as_json).to eq(expected)
|
361
|
+
end
|
362
|
+
end
|
363
|
+
end
|
364
|
+
|
365
|
+
context 'with a limit' do
|
366
|
+
before { options[:limit] = 2 }
|
367
|
+
let(:ids_expected) { [0, 1] }
|
368
|
+
|
369
|
+
it 'returns only the limited ids' do
|
370
|
+
expect(subject.as_json).to eq(expected)
|
371
|
+
end
|
372
|
+
end
|
344
373
|
end
|
345
374
|
|
346
375
|
context 'when configurated without external key' do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bidu-house
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bidu Dev's Team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-08-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -222,7 +222,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
222
222
|
version: '0'
|
223
223
|
requirements: []
|
224
224
|
rubyforge_project:
|
225
|
-
rubygems_version: 2.
|
225
|
+
rubygems_version: 2.5.1
|
226
226
|
signing_key:
|
227
227
|
specification_version: 4
|
228
228
|
summary: Gem for easy health check
|