union_station_hooks_core 2.0.0 → 2.0.1

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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NGUzYzY0ODI2NjJhZTdjZDliOWJjOWQyZTFhZDM3MzVjODFhYWUzYw==
4
+ Mjg3MGI3ZWUzZTk0NDRmMWQyMTI5ZDJiY2JiN2U1NDk0ZjFiYTRjZA==
5
5
  data.tar.gz: !binary |-
6
- NjBjOGIzYjU3NmYwYjkzNzJhOTA4ZTU1MWJkNDQ2MmFhYzIyODZiMQ==
6
+ ZDExODg5NjdjYWVlYjNiYmYyY2ZiNTlmYTZlNGQyOTgyMTEzMTMyOQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ODhmNDg4NTgwNDNjMjgwNjIyYjIwY2VjNzI1ZjZiZTI4MGUxOWE1NTZlODYy
10
- NTI1N2U4MzJkYzk0NDdkZGJhN2U5MzNjOTg3NDY5YmI2MWQwNDFlMmRhMGJk
11
- MTQyMzFiNmM0NmEyOTU1NTcyOGY4NjNhOGU3YWFjNzEzNWRlYmU=
9
+ NzRlYTIyZDc5ZTE5Zjc1ODZkNzg3YjhjMmM1MTJmZjk4OWMwZWUwMzNiOTVl
10
+ NDViNDM2ZjFmMTdjZTk5MjkzNzg0NjliM2U4MTBmOWQ1Nzg5OGE2ZDRlOTUz
11
+ YWI0NTIzNjI5NjZlYjBkMTE2NGJiYjFiZDAyMzk3MzU4MGEzOWE=
12
12
  data.tar.gz: !binary |-
13
- OTJhNDI4YzJkNjhhYTkyODc2NjNmOTllMzM2NWUwNjlhY2IxNzhhMzlkNWVj
14
- MzY0ZmJjZDlmYWVmYmRkMzNhMWRiMGFlNTAzMDRjMGI5ODJiMDk4NmFjYzAy
15
- ZTk5MzE0ZjgwZTliOTQ1NTI5YjM2OTQ3NWRiNDQyODJkZTVjNTA=
13
+ ZjEyNWM2MGVjNjg5Zjk3OGYxOWIzZTQ4NjJjMDY2ODY3NGI5N2JiYmMxNWZl
14
+ ZDM3MjdhMGVhZWY5NzU4MjQ5NzY0ZjA0MWQzNWVlZjEwNTNlNTk4ZWRlNDky
15
+ Y2Q5NWQ2ZTgzYTcyOTZmNzgxZjI1ZTQyNmE3ZmRhYjM5YWNhN2M=
@@ -151,6 +151,16 @@ module UnionStationHooks
151
151
  config[:node_name])
152
152
  end
153
153
 
154
+ def install_postfork_hook
155
+ if defined?(PhusionPassenger)
156
+ PhusionPassenger.on_event(:starting_worker_process) do |forked|
157
+ if forked
158
+ UnionStationHooks.context.clear_connection
159
+ end
160
+ end
161
+ end
162
+ end
163
+
154
164
  def install_event_pre_hook
155
165
  preprocessor = @@config[:event_preprocessor]
156
166
  if preprocessor
@@ -64,7 +64,6 @@ module UnionStationHooks
64
64
  else
65
65
  @node_name = `hostname`.strip
66
66
  end
67
- @random_dev = File.open('/dev/urandom')
68
67
 
69
68
  # This mutex protects the following instance variables, but
70
69
  # not the contents of @connection.
@@ -89,7 +88,6 @@ module UnionStationHooks
89
88
  def clear_connection
90
89
  @mutex.synchronize do
91
90
  @connection.synchronize do
92
- @random_dev = File.open('/dev/urandom') if @random_dev.closed?
93
91
  @connection.unref
94
92
  @connection = Connection.new(nil)
95
93
  end
@@ -99,7 +97,6 @@ module UnionStationHooks
99
97
  def close
100
98
  @mutex.synchronize do
101
99
  @connection.synchronize do
102
- @random_dev.close
103
100
  @connection.unref
104
101
  @connection = nil
105
102
  end
@@ -113,8 +110,6 @@ module UnionStationHooks
113
110
  raise ArgumentError, 'Group name may not be empty'
114
111
  end
115
112
 
116
- txn_id = create_txn_id
117
-
118
113
  Lock.new(@mutex).synchronize do |_lock|
119
114
  if Time.now < @next_reconnect_time
120
115
  return Transaction.new(nil, nil)
@@ -140,7 +135,7 @@ module UnionStationHooks
140
135
 
141
136
  begin
142
137
  @connection.channel.write('openTransaction',
143
- txn_id, group_name, '', category,
138
+ '', group_name, '', category,
144
139
  Utils.encoded_timestamp,
145
140
  key,
146
141
  true,
@@ -149,20 +144,21 @@ module UnionStationHooks
149
144
  if result[0] != 'status'
150
145
  raise "Expected UstRouter to respond with 'status', " \
151
146
  "but got #{result.inspect} instead"
152
- elsif result[1] == 'ok'
153
- # Do nothing
154
147
  elsif result[1] == 'error'
155
148
  if result[2]
156
149
  raise "Unable to close transaction: #{result[2]}"
157
150
  else
158
151
  raise 'Unable to close transaction (no server message given)'
159
152
  end
160
- else
153
+ elsif result[1] != 'ok'
161
154
  raise "Expected UstRouter to respond with 'ok' or 'error', " \
162
155
  "but got #{result.inspect} instead"
156
+ elsif result.size < 3
157
+ raise 'Expected UstRouter to respond with an autogenerated ' \
158
+ 'transaction ID, but got none'
163
159
  end
164
160
 
165
- return Transaction.new(@connection, txn_id)
161
+ return Transaction.new(@connection, result[2])
166
162
  rescue SystemCallError, IOError
167
163
  @connection.disconnect
168
164
  UnionStationHooks::Log.warn(
@@ -279,19 +275,5 @@ module UnionStationHooks
279
275
  process_ust_router_reply(channel,
280
276
  'UstRouter client initialization error')
281
277
  end
282
-
283
- def random_token(length)
284
- token = ''
285
- @random_dev.read(length).each_byte do |c|
286
- token << RANDOM_CHARS[c % RANDOM_CHARS.size]
287
- end
288
- token
289
- end
290
-
291
- def create_txn_id
292
- result = (Time.now.to_i / 60).to_s(36)
293
- result << "-#{random_token(11)}"
294
- result
295
- end
296
278
  end
297
279
  end
@@ -148,7 +148,7 @@ module UnionStationHooks
148
148
  # @return An ID to be passed later to {#log_writing_rack_body_end}.
149
149
  def log_writing_rack_body_begin
150
150
  return do_nothing_on_null(:log_writing_rack_body_begin) if null?
151
- @transaction.log_activity_begin('writing out response body')
151
+ @transaction.log_activity_begin('app writing out response body')
152
152
  nil
153
153
  end
154
154
 
@@ -162,7 +162,7 @@ module UnionStationHooks
162
162
  # @private
163
163
  def log_writing_rack_body_end(id)
164
164
  return do_nothing_on_null(:log_writing_rack_body_end) if null?
165
- @transaction.log_activity_end('writing out response body')
165
+ @transaction.log_activity_end('app writing out response body')
166
166
  nil
167
167
  end
168
168
 
@@ -159,7 +159,8 @@ module UnionStationHooks
159
159
  do_nothing_on_null(:log_benchmark_block)
160
160
  yield
161
161
  else
162
- log_user_activity_block("Benchmark: #{title}", &block)
162
+ @transaction.log_activity_block(next_benchmark_name,
163
+ title, &block)
163
164
  end
164
165
  end
165
166
 
@@ -283,6 +284,12 @@ module UnionStationHooks
283
284
  "user activity #{result}"
284
285
  end
285
286
 
287
+ def next_benchmark_name
288
+ result = @next_benchmark_number
289
+ @next_benchmark_number += 1
290
+ "benchmark #{result}"
291
+ end
292
+
286
293
  def next_database_query_name
287
294
  result = @next_database_query_number
288
295
  @next_database_query_number += 1
@@ -113,6 +113,7 @@ module UnionStationHooks
113
113
  @transaction = continue_transaction
114
114
  @next_view_rendering_number = 1
115
115
  @next_user_activity_number = 1
116
+ @next_benchmark_number = 1
116
117
  @next_database_query_number = 1
117
118
  end
118
119
 
@@ -39,6 +39,6 @@
39
39
  {
40
40
  :major => 2,
41
41
  :minor => 0,
42
- :tiny => 0,
43
- :string => '2.0.0'
42
+ :tiny => 1,
43
+ :string => '2.0.1'
44
44
  }
@@ -163,6 +163,7 @@ module UnionStationHooks
163
163
  finalize_and_validate_config
164
164
  require_lib('api')
165
165
  create_context
166
+ install_postfork_hook
166
167
  install_event_pre_hook
167
168
  initialize_other_union_station_hooks_gems
168
169
  finalize_install
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: union_station_hooks_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hongli Lai
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-09-15 00:00:00.000000000 Z
11
+ date: 2015-09-25 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Union Station Ruby hooks core code.
14
14
  email: info@phusion.nl