Module: D13n::Metric::AppHttpMetric::Out
- Includes:
- Namespace
- Defined in:
- lib/d13n/metric/metrics/app_http_metric.rb
Instance Method Summary
collapse
-
#collect_error_count(request, response, count = 1, rate = 1.0) ⇒ Object
-
#collect_request_count(request, count = 1, rate = 1.0) ⇒ Object
-
#collect_request_timing(request, timing, rate = 1.0) ⇒ Object
-
#collect_status_count(request, response, count = 1, rate = 1.0) ⇒ Object
-
#finish(state, t0, node, request, response) ⇒ Object
-
#inject_request_headers(state, request) ⇒ Object
-
#process(request, collectable = true) ⇒ Object
-
#start(state, t0, request) ⇒ Object
Methods included from Namespace
#endpoint_metric, #endpoint_status_metric, #get_service_endpoint, #http_basic_tags, #http_error_tags, #http_status_tags, #service_error_metric, #service_metric
Instance Method Details
#collect_error_count(request, response, count = 1, rate = 1.0) ⇒ Object
190
191
192
|
# File 'lib/d13n/metric/metrics/app_http_metric.rb', line 190
def collect_error_count(request, response, count=1, rate=1.0)
@collector.increment(metric_name('count'), count, sample_rate: rate, tags: http_error_tags(request, response))
end
|
#collect_request_count(request, count = 1, rate = 1.0) ⇒ Object
182
183
184
|
# File 'lib/d13n/metric/metrics/app_http_metric.rb', line 182
def collect_request_count(request, count=1, rate=1.0)
@collector.increment(metric_name('count'), count, sample_rate: rate, tags: http_basic_tags(request))
end
|
#collect_request_timing(request, timing, rate = 1.0) ⇒ Object
194
195
196
|
# File 'lib/d13n/metric/metrics/app_http_metric.rb', line 194
def collect_request_timing(request, timing, rate=1.0)
@collector.measure(metric_name('timing'), timing, sample_rate: rate, tags: http_basic_tags(request))
end
|
#collect_status_count(request, response, count = 1, rate = 1.0) ⇒ Object
186
187
188
|
# File 'lib/d13n/metric/metrics/app_http_metric.rb', line 186
def collect_status_count(request, response, count=1, rate=1.0)
@collector.increment(metric_name('count'), count, sample_rate: rate, tags: http_status_tags(request, response))
end
|
#finish(state, t0, node, request, response) ⇒ Object
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
|
# File 'lib/d13n/metric/metrics/app_http_metric.rb', line 143
def finish(state, t0, node, request, response)
unless t0
D13n.logger.error("HTTP request process finished metric without start time. This is probably a bug.")
return
end
unless request
D13n.logger.error("HTTP request process finished metric without request. This is probably a bug.")
end
t1 = Time.now
duration = t1.to_f - t0.to_f
begin
scoped_metric = get_service_endpoint(request).join('.')
node.name = scoped_metric if node
if response
collect_error_count(request, response) if response.is_a? Exception
if response.is_a? Net::HTTPResponse
collect_status_count(request, response)
collect_request_timing(request, duration)
end
else
collect_request_count(request)
end
ensure
if node
stack = state.traced_span_stack
stack.pop_frame(state, node, scoped_metric, t1)
end
end
rescue ServiceNotFound, EndpointNotFound => e
D13n.logger.debug "service or endpoind not found while collect HTTP metric:", e.message
rescue HTTPMetricError => e
D13n.logger.debug "while collect HTTP metric", e.message
rescue => e
D13n.logger.error "Uncaught exception while finishing an HTTP request metric", e
end
|
133
134
135
136
137
138
139
140
141
|
# File 'lib/d13n/metric/metrics/app_http_metric.rb', line 133
def (state, request)
stream = state.current_stream
state.is_cross_app_caller = true
if stream
request[StreamState::D13N_STREAM_HEADER] = state.referring_stream_id || stream.uuid
end
request[StreamState::D13N_APP_HEADER] = D13n.app_name
end
|
#process(request, collectable = true) ⇒ Object
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
# File 'lib/d13n/metric/metrics/app_http_metric.rb', line 104
def process(request, collectable=true)
state = D13n::Metric::StreamState.st_get
return yield unless collectable && Helper.http_out_tracable?
t0 = Time.now
begin
node = start(state, t0, request)
response = yield
rescue ServiceNotFound => err
D13n.logger.error err.message
rescue Exception => err
D13n.logger.debug 'Unexpected exception raise while processing HTTP request metric', err
ensure
finish(state, t0, node, request, response || err)
end
return response
end
|
#start(state, t0, request) ⇒ Object
123
124
125
126
127
128
129
130
131
|
# File 'lib/d13n/metric/metrics/app_http_metric.rb', line 123
def start(state, t0, request)
(state, request)
stack = state.traced_span_stack
node = stack.push_frame(state, prefix , t0)
return node
rescue => e
D13n.logger.error 'Uncaught exception while start processing HTTP request metric', e
return nil
end
|