| Class | PhusionPassenger::AnalyticsLogger::Log |
| In: |
lib/phusion_passenger/analytics_logger.rb
|
| Parent: | Object |
| txn_id | [R] |
# File lib/phusion_passenger/analytics_logger.rb, line 41
41: def initialize(shared_data = nil, txn_id = nil)
42: if shared_data
43: @shared_data = shared_data
44: @txn_id = txn_id
45: shared_data.ref
46: end
47: end
# File lib/phusion_passenger/analytics_logger.rb, line 61
61: def begin_measure(name, extra_info = nil)
62: if extra_info
63: extra_info_base64 = [extra_info].pack("m")
64: extra_info_base64.gsub!("\n", "")
65: extra_info_base64.strip!
66: else
67: extra_info_base64 = nil
68: end
69: times = NativeSupport.process_times
70: message "BEGIN: #{name} (#{current_timestamp.to_s(36)},#{times.utime.to_s(36)},#{times.stime.to_s(36)}) #{extra_info_base64}"
71: end
# File lib/phusion_passenger/analytics_logger.rb, line 108
108: def close(flush_to_disk = false)
109: @shared_data.synchronize do
110: # We need an ACK here. See abstract_request_handler.rb finalize_request.
111: @shared_data.client.write("closeTransaction", @txn_id,
112: AnalyticsLogger.timestamp_string, true)
113: result = @shared_data.client.read
114: if result != ["ok"]
115: raise "Expected logging server to respond with 'ok', but got #{result.inspect} instead"
116: end
117: if flush_to_disk
118: @shared_data.client.write("flush")
119: result = @shared_data.client.read
120: if result != ["ok"]
121: raise "Invalid logging server response #{result.inspect} to the 'flush' command"
122: end
123: end
124: @shared_data.unref
125: @shared_data = nil
126: end if @shared_data
127: end
# File lib/phusion_passenger/analytics_logger.rb, line 73
73: def end_measure(name, error_encountered = false)
74: times = NativeSupport.process_times
75: if error_encountered
76: message "FAIL: #{name} (#{current_timestamp.to_s(36)},#{times.utime.to_s(36)},#{times.stime.to_s(36)})"
77: else
78: message "END: #{name} (#{current_timestamp.to_s(36)},#{times.utime.to_s(36)},#{times.stime.to_s(36)})"
79: end
80: end
# File lib/phusion_passenger/analytics_logger.rb, line 82
82: def measure(name, extra_info = nil)
83: begin_measure(name, extra_info)
84: begin
85: yield
86: rescue Exception
87: error = true
88: raise
89: ensure
90: end_measure(name, error)
91: end
92: end
# File lib/phusion_passenger/analytics_logger.rb, line 94
94: def measured_time_points(name, begin_time, end_time, extra_info = nil)
95: if extra_info
96: extra_info_base64 = [extra_info].pack("m")
97: extra_info_base64.gsub!("\n", "")
98: extra_info_base64.strip!
99: else
100: extra_info_base64 = nil
101: end
102: begin_timestamp = begin_time.to_i * 1_000_000 + begin_time.usec
103: end_timestamp = end_time.to_i * 1_000_000 + end_time.usec
104: message "BEGIN: #{name} (#{begin_timestamp.to_s(36)}) #{extra_info_base64}"
105: message "END: #{name} (#{end_timestamp.to_s(36)})"
106: end