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.
@@ -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