diff --git a/lib/prometheus/middleware/collector.rb b/lib/prometheus/middleware/collector.rb index 65de3d17..48e3ddd1 100644 --- a/lib/prometheus/middleware/collector.rb +++ b/lib/prometheus/middleware/collector.rb @@ -67,15 +67,17 @@ def trace(env) end def record(env, code, duration) + path = [env["SCRIPT_NAME"], env['PATH_INFO']].join + counter_labels = { code: code, method: env['REQUEST_METHOD'].downcase, - path: strip_ids_from_path(env['PATH_INFO']), + path: strip_ids_from_path(path), } duration_labels = { method: env['REQUEST_METHOD'].downcase, - path: strip_ids_from_path(env['PATH_INFO']), + path: strip_ids_from_path(path), } @requests.increment(labels: counter_labels) diff --git a/spec/prometheus/middleware/collector_spec.rb b/spec/prometheus/middleware/collector_spec.rb index e2d53164..7809bcf9 100644 --- a/spec/prometheus/middleware/collector_spec.rb +++ b/spec/prometheus/middleware/collector_spec.rb @@ -55,6 +55,18 @@ expect(registry.get(metric).get(labels: labels)).to include("0.1" => 0, "0.25" => 1) end + it 'includes SCRIPT_NAME in the path if provided' do + metric = :http_server_requests_total + + get '/foo' + expect(registry.get(metric).values.keys.last[:path]).to eql("/foo") + + env('SCRIPT_NAME', '/engine') + get '/foo' + env('SCRIPT_NAME', nil) + expect(registry.get(metric).values.keys.last[:path]).to eql("/engine/foo") + end + it 'normalizes paths containing numeric IDs by default' do expect(Benchmark).to receive(:realtime).and_yield.and_return(0.3)