| 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 109
109: def close(flush_to_disk = false)
110: @shared_data.synchronize do
111: # We need an ACK here. See abstract_request_handler.rb finalize_request.
112: @shared_data.client.write("closeTransaction", @txn_id,
113: AnalyticsLogger.timestamp_string, true)
114: result = @shared_data.client.read
115: if result != ["ok"]
116: raise "Expected logging server to respond with 'ok', but got #{result.inspect} instead"
117: end
118: if flush_to_disk
119: @shared_data.client.write("flush")
120: result = @shared_data.client.read
121: if result != ["ok"]
122: raise "Invalid logging server response #{result.inspect} to the 'flush' command"
123: end
124: end
125: @shared_data.unref
126: @shared_data = nil
127: end if @shared_data
128: end
# File lib/phusion_passenger/analytics_logger.rb, line 130
130: def closed?
131: if @shared_data
132: @shared_data.synchronize do
133: return !@shared_data.client.connected?
134: end
135: else
136: return nil
137: end
138: 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: is_closed = closed?
89: raise
90: ensure
91: end_measure(name, error) if !is_closed
92: end
93: end
# File lib/phusion_passenger/analytics_logger.rb, line 95
95: def measured_time_points(name, begin_time, end_time, extra_info = nil)
96: if extra_info
97: extra_info_base64 = [extra_info].pack("m")
98: extra_info_base64.gsub!("\n", "")
99: extra_info_base64.strip!
100: else
101: extra_info_base64 = nil
102: end
103: begin_timestamp = begin_time.to_i * 1_000_000 + begin_time.usec
104: end_timestamp = end_time.to_i * 1_000_000 + end_time.usec
105: message "BEGIN: #{name} (#{begin_timestamp.to_s(36)}) #{extra_info_base64}"
106: message "END: #{name} (#{end_timestamp.to_s(36)})"
107: end