From 3050e99fd62a2ecf88c80e19dc4548658b0bdbfa Mon Sep 17 00:00:00 2001 From: John O'Connor Date: Fri, 21 Aug 2020 17:07:35 +0100 Subject: [PATCH] (MAINT) Normalise all tokens for stats /api/v1/token, /token, /img and /lib endpoints need to be normalised the same way that /vm and /ondemandvm endpoints are handled. --- .../metrics/promstats/collector_middleware.rb | 3 + spec/unit/collector_middleware_spec.rb | 58 ++++++++++++++++++- 2 files changed, 60 insertions(+), 1 deletion(-) diff --git a/lib/vmpooler/metrics/promstats/collector_middleware.rb b/lib/vmpooler/metrics/promstats/collector_middleware.rb index bfaa7a0..540b1e6 100644 --- a/lib/vmpooler/metrics/promstats/collector_middleware.rb +++ b/lib/vmpooler/metrics/promstats/collector_middleware.rb @@ -114,6 +114,9 @@ module Vmpooler path .gsub(%r{/vm/.+$}, '/vm') .gsub(%r{/ondemand/.+$}, '/ondemand') + .gsub(%r{/token/.+$}, '/token') + .gsub(%r{/lib/.+$}, '/lib') + .gsub(%r{/img/.+$}, '/img') end end end diff --git a/spec/unit/collector_middleware_spec.rb b/spec/unit/collector_middleware_spec.rb index 671e118..5244c25 100644 --- a/spec/unit/collector_middleware_spec.rb +++ b/spec/unit/collector_middleware_spec.rb @@ -55,7 +55,7 @@ describe Vmpooler::Metrics::Promstats::CollectorMiddleware do expect(registry.get(metric).get(labels: labels)).to include("0.1" => 0, "0.25" => 1) end - it 'normalizes paths cotaining /vm by default' do + it 'normalizes paths containing /vm by default' do expect(Benchmark).to receive(:realtime).and_yield.and_return(0.3) get '/foo/vm/bar-mumble-flame' @@ -83,6 +83,62 @@ describe Vmpooler::Metrics::Promstats::CollectorMiddleware do expect(registry.get(metric).get(labels: labels)).to include("0.1" => 0, "0.5" => 1) end + it 'normalizes paths containing /token by default' do + expect(Benchmark).to receive(:realtime).and_yield.and_return(0.3) + + get '/token/secret-token-name' + + metric = :http_server_requests_total + labels = { method: 'get', path: '/token', code: '200' } + expect(registry.get(metric).get(labels: labels)).to eql(1.0) + + metric = :http_server_request_duration_seconds + labels = { method: 'get', path: '/token' } + expect(registry.get(metric).get(labels: labels)).to include("0.1" => 0, "0.5" => 1) + end + + it 'normalizes paths containing /api/v1/token by default' do + expect(Benchmark).to receive(:realtime).and_yield.and_return(0.3) + + get '/api/v1/token/secret-token-name' + + metric = :http_server_requests_total + labels = { method: 'get', path: '/api/v1/token', code: '200' } + expect(registry.get(metric).get(labels: labels)).to eql(1.0) + + metric = :http_server_request_duration_seconds + labels = { method: 'get', path: '/api/v1/token' } + expect(registry.get(metric).get(labels: labels)).to include("0.1" => 0, "0.5" => 1) + end + + it 'normalizes paths containing /img by default' do + expect(Benchmark).to receive(:realtime).and_yield.and_return(0.3) + + get '/img/image-name' + + metric = :http_server_requests_total + labels = { method: 'get', path: '/img', code: '200' } + expect(registry.get(metric).get(labels: labels)).to eql(1.0) + + metric = :http_server_request_duration_seconds + labels = { method: 'get', path: '/img' } + expect(registry.get(metric).get(labels: labels)).to include("0.1" => 0, "0.5" => 1) + end + + it 'normalizes paths containing /lib by default' do + expect(Benchmark).to receive(:realtime).and_yield.and_return(0.3) + + get '/lib/xxxxx.js' + + metric = :http_server_requests_total + labels = { method: 'get', path: '/lib', code: '200' } + expect(registry.get(metric).get(labels: labels)).to eql(1.0) + + metric = :http_server_request_duration_seconds + labels = { method: 'get', path: '/lib' } + expect(registry.get(metric).get(labels: labels)).to include("0.1" => 0, "0.5" => 1) + end + context 'when the app raises an exception' do let(:original_app) do lambda do |env|