Skip to content

Commit

Permalink
Add metrics as subcollection under /vms
Browse files Browse the repository at this point in the history
  • Loading branch information
agrare committed Nov 18, 2021
1 parent d9d0805 commit d67408f
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 1 deletion.
17 changes: 17 additions & 0 deletions app/controllers/api/subcollections/metrics.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
module Api
module Subcollections
module Metrics
RESOURCE_TYPES = {
'vms' => 'VmOrTemplate'
}.freeze

def metrics_query_resource(object)
params[:resource_type] = RESOURCE_TYPES[@req.collection] || object.class.to_s
params[:resource_ids] ||= [object.id]

metrics_service = MetricsService.new(params)
metrics_service.query_metrics
end
end
end
end
1 change: 1 addition & 0 deletions app/controllers/api/vms_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ class VmsController < BaseController
include Subcollections::Compliances
include Subcollections::CustomAttributes
include Subcollections::Disks
include Subcollections::Metrics
include Subcollections::MetricRollups
include Subcollections::Policies
include Subcollections::PolicyProfiles
Expand Down
2 changes: 1 addition & 1 deletion config/api.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2237,7 +2237,7 @@
:klass: ChargebackRateDetailMeasure
:metric_rollups:
:description: Metric Rollups
:identifier: metric_rollups
:identifier: metrics
:options:
- :collection
- :subcollection
Expand Down
31 changes: 31 additions & 0 deletions spec/requests/vms_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2148,6 +2148,37 @@ def query_match_regexp(*tables)
end
end

describe "metrics subcollection" do
let(:url) { api_vm_metrics_url(nil, vm) }

before do
FactoryBot.create_list(:metric_vm_rt, 3, :resource => vm)
end

it 'returns the metrics for the vm' do
api_basic_authorize subcollection_action_identifier(:vms, :metrics, :read, :get)

get(url, :params => {:start_date => Time.zone.today.to_s})

expected = {
'count' => 3,
'subcount' => 3,
'pages' => 1
}
expect(response).to have_http_status(:ok)
expect(response.parsed_body).to include(expected)
expect(response.parsed_body['links'].keys).to match_array(%w[self first last])
end

it 'will not return metrics without an appropriate role' do
api_basic_authorize

get(url, :params => {:start_date => Time.zone.today.to_s})

expect(response).to have_http_status(:forbidden)
end
end

describe "metric rollups subcollection" do
let(:url) { api_vm_metric_rollups_url(nil, vm) }

Expand Down

0 comments on commit d67408f

Please sign in to comment.