ghost_reader 1.1.6 → 1.2.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.
- data/lib/ghost_reader/backend.rb +106 -62
- data/lib/ghost_reader/version.rb +1 -1
- data/spec/ghost_reader/backend_spec.rb +3 -2
- metadata +3 -3
data/lib/ghost_reader/backend.rb
CHANGED
@@ -20,12 +20,13 @@ module GhostReader
|
|
20
20
|
config.logger.level = config.log_level || Logger::WARN
|
21
21
|
config.service[:logger] ||= config.logger
|
22
22
|
config.client ||= Client.new(config.service)
|
23
|
-
unless config.no_auto_spawn
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
end
|
23
|
+
# unless config.no_auto_spawn
|
24
|
+
# log "GhostReader spawning agents."
|
25
|
+
# spawn_retriever
|
26
|
+
# spawn_reporter
|
27
|
+
# log "GhostReader spawned its agents."
|
28
|
+
# end
|
29
|
+
@report_ts = @retrieval_ts = Time.now
|
29
30
|
log "Initialized GhostReader backend.", :info
|
30
31
|
end
|
31
32
|
|
@@ -42,20 +43,56 @@ module GhostReader
|
|
42
43
|
|
43
44
|
result = config.fallback.translate(locale, key, options)
|
44
45
|
log "fallback result: #{result.inspect}"
|
45
|
-
return result
|
46
46
|
rescue Exception => ex
|
47
47
|
log "fallback.translate raised exception: #{ex}"
|
48
48
|
ensure # make sure everything is tracked
|
49
49
|
# TODO results which are hashes need to be tracked disaggregated
|
50
50
|
track({ key => { locale.to_s => { 'default' => result } } }) unless result.is_a?(Hash)
|
51
|
-
|
51
|
+
report_and_retrieve
|
52
|
+
raise(ex) unless ex.nil?
|
53
|
+
return result
|
52
54
|
end
|
53
55
|
|
54
56
|
def track(missing)
|
55
57
|
return if missings.nil? # not yet initialized
|
56
58
|
log "tracking: #{missing.inspect}"
|
57
59
|
self.missings.deep_merge!(missing)
|
58
|
-
log "missings: #{missings.
|
60
|
+
log "# of missings: #{missings.keys.size}"
|
61
|
+
end
|
62
|
+
|
63
|
+
def report_and_retrieve
|
64
|
+
initialize_retrieval if missings.nil?
|
65
|
+
diff = Time.now - @report_ts
|
66
|
+
if diff > config.report_interval
|
67
|
+
threadify do
|
68
|
+
log "Kick off report. #{missings.inspect}", :info
|
69
|
+
@report_ts = Time.now
|
70
|
+
report
|
71
|
+
@report_ts = Time.now
|
72
|
+
end
|
73
|
+
else
|
74
|
+
log "Skipping report. #{diff}"
|
75
|
+
end
|
76
|
+
|
77
|
+
diff = Time.now - @retrieval_ts
|
78
|
+
if diff > config.retrieval_interval
|
79
|
+
threadify do
|
80
|
+
log "Kick off retrieval."
|
81
|
+
@retrieval_ts = Time.now
|
82
|
+
retrieve
|
83
|
+
@retrieval_ts = Time.now
|
84
|
+
end
|
85
|
+
else
|
86
|
+
log "Skipping retrieval. #{diff}"
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def threadify(&block)
|
91
|
+
if config.no_threads
|
92
|
+
block.call
|
93
|
+
else
|
94
|
+
Thread.new { block.call }
|
95
|
+
end
|
59
96
|
end
|
60
97
|
|
61
98
|
# data, e.g. {'en' => {'this' => {'is' => {'a' => {'test' => 'This is a test.'}}}}}
|
@@ -65,64 +102,71 @@ module GhostReader
|
|
65
102
|
memoized_lookup.send(options[:method], symbolized_flattend)
|
66
103
|
end
|
67
104
|
|
68
|
-
# performs initial and incremental requests
|
69
|
-
def spawn_retriever
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
105
|
+
# # performs initial and incremental requests
|
106
|
+
# def spawn_retriever
|
107
|
+
# log "Spawning retriever."
|
108
|
+
# @retriever = Thread.new do
|
109
|
+
# initialize_retrieval
|
110
|
+
# until false
|
111
|
+
# sleep config.retrieval_interval
|
112
|
+
# retrieve
|
113
|
+
# end
|
114
|
+
# end
|
115
|
+
# end
|
116
|
+
|
117
|
+
def initialize_retrieval
|
118
|
+
log "Performing initial request."
|
119
|
+
response = config.client.initial_request
|
120
|
+
memoize_merge! response[:data]
|
121
|
+
self.missings = {} # initialized
|
122
|
+
log "Initial request successfull.", :info
|
123
|
+
rescue => ex
|
124
|
+
log "Exception initializing retrieval: #{ex}", :error
|
125
|
+
log ex.backtrace.join("\n"), :error
|
126
|
+
end
|
127
|
+
|
128
|
+
def retrieve
|
129
|
+
response = config.client.incremental_request
|
130
|
+
if response[:status] == 200
|
131
|
+
log "Incremental request with data.", :info
|
132
|
+
log "Data: #{response[:data].inspect}"
|
133
|
+
memoize_merge! response[:data], :method => :deep_merge!
|
134
|
+
else
|
135
|
+
log "Incremental request, but no data."
|
98
136
|
end
|
137
|
+
rescue => ex
|
138
|
+
log "Exception in retrieval: #{ex}", :error
|
139
|
+
log ex.backtrace.join("\n"), :error
|
99
140
|
end
|
100
141
|
|
101
|
-
# performs reporting requests
|
102
|
-
def spawn_reporter
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
log "Exception in reporter thread: #{ex}", :error
|
122
|
-
log ex.backtrace.join("\n")
|
123
|
-
end
|
142
|
+
# # performs reporting requests
|
143
|
+
# def spawn_reporter
|
144
|
+
# log "Spawning reporter."
|
145
|
+
# @reporter = Thread.new do
|
146
|
+
# until false
|
147
|
+
# sleep config.report_interval
|
148
|
+
# report
|
149
|
+
# end
|
150
|
+
# end
|
151
|
+
# end
|
152
|
+
|
153
|
+
def report
|
154
|
+
unless self.missings.nil?
|
155
|
+
unless self.missings.empty?
|
156
|
+
log "Reporting request with #{self.missings.keys.size} missings.", :info
|
157
|
+
config.client.reporting_request(missings)
|
158
|
+
self.missings.clear
|
159
|
+
log "Missings emptied.", :info
|
160
|
+
else
|
161
|
+
log "Reporting request omitted, nothing to report."
|
124
162
|
end
|
163
|
+
else
|
164
|
+
log "Reporting request omitted, not yet initialized," +
|
165
|
+
" waiting for intial request."
|
125
166
|
end
|
167
|
+
rescue => ex
|
168
|
+
log "Exception in report: #{ex}", :error
|
169
|
+
log ex.backtrace.join("\n")
|
126
170
|
end
|
127
171
|
|
128
172
|
# a wrapper for I18n::Backend::Flatten#flatten_translations
|
data/lib/ghost_reader/version.rb
CHANGED
@@ -134,8 +134,9 @@ describe GhostReader::Backend do
|
|
134
134
|
end
|
135
135
|
|
136
136
|
it 'should track lookups which raise exceptions' do
|
137
|
-
backend.retriever.should be_alive
|
138
|
-
backend.missings
|
137
|
+
# backend.retriever.should be_alive
|
138
|
+
backend.missings = {} # fake initialize
|
139
|
+
backend.missings.should be_empty
|
139
140
|
expect { backend.translate(:de, :asdf) }.to raise_error('missing translation')
|
140
141
|
backend.missings.should_not be_empty
|
141
142
|
end
|