ghost_reader 1.1.6 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
- log "GhostReader spawning agents."
25
- spawn_retriever
26
- spawn_reporter
27
- log "GhostReader spawned its agents."
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
- ex.nil? ? result : raise(ex)
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.inspect}"
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
- log "Spawning retriever."
71
- @retriever = Thread.new do
72
- begin
73
- log "Performing initial request."
74
- response = config.client.initial_request
75
- memoize_merge! response[:data]
76
- self.missings = {} # initialized
77
- log "Initial request successfull.", :info
78
- until false
79
- begin
80
- sleep config.retrieval_interval
81
- response = config.client.incremental_request
82
- if response[:status] == 200
83
- log "Incremental request with data.", :info
84
- log "Data: #{response[:data].inspect}"
85
- memoize_merge! response[:data], :method => :deep_merge!
86
- else
87
- log "Incremental request, but no data."
88
- end
89
- rescue => ex
90
- log "Exception in retriever loop: #{ex}", :error
91
- log ex.backtrace.join("\n")
92
- end
93
- end
94
- rescue => ex
95
- log "Exception in retriever thread: #{ex}", :error
96
- log ex.backtrace.join("\n")
97
- end
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
- log "Spawning reporter."
104
- @reporter = Thread.new do
105
- until false
106
- begin
107
- sleep config.report_interval
108
- unless self.missings.nil?
109
- unless self.missings.empty?
110
- log "Reporting request with % missings." % self.missings.keys.size, :info
111
- config.client.reporting_request(missings)
112
- missings.clear
113
- else
114
- log "Reporting request omitted, nothing to report."
115
- end
116
- else
117
- log "Reporting request omitted, not yet initialized," +
118
- " waiting for intial request."
119
- end
120
- rescue => ex
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
@@ -1,3 +1,3 @@
1
1
  module GhostReader
2
- VERSION = "1.1.6"
2
+ VERSION = "1.2.0"
3
3
  end
@@ -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.should_not be_nil
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
metadata CHANGED
@@ -5,9 +5,9 @@ version: !ruby/object:Gem::Version
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
- - 1
9
- - 6
10
- version: 1.1.6
8
+ - 2
9
+ - 0
10
+ version: 1.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Phil Hofmann