ovirt_metrics 1.3.1 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/ovirt_metrics.rb +28 -3
- data/lib/ovirt_metrics/configurator.rb +24 -0
- data/lib/ovirt_metrics/models/ovirt_history.rb +9 -0
- data/lib/ovirt_metrics/models/vm_device_history.rb +10 -0
- data/lib/ovirt_metrics/version.rb +1 -1
- data/spec/ovirt_metrics_spec.rb +30 -5
- data/spec/spec_helper.rb +9 -1
- data/spec/support/active_record.rb +0 -2
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b8f6eb0cee5ba8ae32e0f2fa316048a258204db1
|
4
|
+
data.tar.gz: 16b8c4b956bdbf7016483bb4dc225dde3779a6c7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ebde982b37176d5d7374792f54508747feda496cc2b4a4166548c6117c3fae3fab73a1a1fc434c39a16ceb727f665c7f85fd7d535acf6474927766137395520e
|
7
|
+
data.tar.gz: b215b596b463b6c07b7230ada719f7f07c1c642ac28c807e7d5c93f0a266393dc17c6614a7306e8b84b227c64d0278c61a1864f588e4baf484378ca5ab5b8164
|
data/lib/ovirt_metrics.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require "active_record"
|
2
2
|
require "ovirt_metrics/version"
|
3
|
+
require "ovirt_metrics/configurator"
|
3
4
|
require "ovirt_metrics/column_definitions"
|
4
5
|
require "ovirt_metrics/nic_metrics"
|
5
6
|
|
@@ -12,6 +13,12 @@ module OvirtMetrics
|
|
12
13
|
DEFAULT_HISTORY_DATABASE_NAME_3_0 = "rhevm_history".freeze
|
13
14
|
VM_NOT_RUNNING = 0
|
14
15
|
|
16
|
+
def self.config
|
17
|
+
@config ||= Configurator.new
|
18
|
+
yield @config if block_given?
|
19
|
+
@config
|
20
|
+
end
|
21
|
+
|
15
22
|
def self.establish_connection(opts)
|
16
23
|
self.connect(opts)
|
17
24
|
end
|
@@ -38,8 +45,15 @@ module OvirtMetrics
|
|
38
45
|
OvirtHistory.establish_connection(opts)
|
39
46
|
end
|
40
47
|
|
48
|
+
# Note: This method is expected to raise PGErrors and other exceptions
|
41
49
|
def self.connected?
|
42
|
-
OvirtHistory.connection.active?
|
50
|
+
OvirtHistory.connection.active? && OvirtHistory.connected?
|
51
|
+
rescue ActiveRecord::ConnectionNotEstablished => e
|
52
|
+
if e.message =~ /No connection pool.+found/
|
53
|
+
false
|
54
|
+
else
|
55
|
+
raise
|
56
|
+
end
|
43
57
|
end
|
44
58
|
|
45
59
|
def self.disconnect
|
@@ -59,7 +73,14 @@ module OvirtMetrics
|
|
59
73
|
host_realtime_metrics_to_hashes(metrics, nic_metrics)
|
60
74
|
end
|
61
75
|
|
62
|
-
|
76
|
+
def self.warn(message)
|
77
|
+
unless config.suppress_warnings
|
78
|
+
puts "#{message} To hide this warning, use OvirtMetrics.config.suppress_warnings = true"
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
# The methods below this line are PRIVATE not meant to be used out of the scope
|
83
|
+
# of this class. TODO refactor to force privacy or remove this line.
|
63
84
|
|
64
85
|
def self.query_host_realtime_metrics(host_id, start_time = nil, end_time = nil)
|
65
86
|
HostSamplesHistory.where(:host_id => host_id).includes(:host_configuration).with_time_range(start_time, end_time)
|
@@ -82,10 +103,14 @@ module OvirtMetrics
|
|
82
103
|
end
|
83
104
|
|
84
105
|
def self.query_vm_disk_realtime_metrics(vm_id, start_time = nil, end_time = nil)
|
85
|
-
disk_ids =
|
106
|
+
disk_ids = vms_disk_ids_for(vm_id)
|
86
107
|
VmDiskSamplesHistory.where(:vm_disk_id => disk_ids).with_time_range(start_time, end_time)
|
87
108
|
end
|
88
109
|
|
110
|
+
def self.vms_disk_ids_for(vm_id)
|
111
|
+
VmDeviceHistory.where(:vm_id => vm_id).disks.attached.pluck('DISTINCT device_id')
|
112
|
+
end
|
113
|
+
|
89
114
|
def self.query_vm_nic_realtime_metrics(vm_id, start_time = nil, end_time = nil)
|
90
115
|
nic_ids = VmInterfaceConfiguration.where(:vm_id => vm_id).collect(&:vm_interface_id)
|
91
116
|
VmInterfaceSamplesHistory.where(:vm_interface_id => nic_ids).with_time_range(start_time, end_time)
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module OvirtMetrics
|
2
|
+
class Configurator
|
3
|
+
def initialize
|
4
|
+
self.suppress_warnings = false
|
5
|
+
self.connection_specification_name = 'ovirt_metrics' if ActiveRecord::VERSION::MAJOR >= 5
|
6
|
+
end
|
7
|
+
|
8
|
+
attr_accessor :suppress_warnings
|
9
|
+
|
10
|
+
attr_reader :connection_specification_name
|
11
|
+
|
12
|
+
def connection_specification_name=(value)
|
13
|
+
if ActiveRecord::VERSION::MAJOR < 5
|
14
|
+
OvirtMetrics.warn "WARNING: ovirt_metric's " \
|
15
|
+
"connection_specification_name option is only available with " \
|
16
|
+
"Active Record 5 or newer. The main application pool " \
|
17
|
+
"('primary') will be used by default until you connect to a " \
|
18
|
+
"separate Ovirt database."
|
19
|
+
else
|
20
|
+
@connection_specification_name = value
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -1,8 +1,17 @@
|
|
1
1
|
module OvirtMetrics
|
2
2
|
class OvirtHistory < ActiveRecord::Base
|
3
|
+
attr_writer :connection_specification_name if ActiveRecord::VERSION::MAJOR < 5
|
4
|
+
|
3
5
|
self.abstract_class = true
|
4
6
|
self.pluralize_table_names = false
|
5
7
|
|
8
|
+
def self.connection_specification_name
|
9
|
+
if !defined?(@connection_specification_name) || @connection_specification_name.nil?
|
10
|
+
return self == OvirtHistory ? OvirtMetrics.config.connection_specification_name : superclass.connection_specification_name
|
11
|
+
end
|
12
|
+
@connection_specification_name
|
13
|
+
end
|
14
|
+
|
6
15
|
def self.with_time_range(start_time = nil, end_time = nil)
|
7
16
|
return all if start_time.nil?
|
8
17
|
where(:history_datetime => (start_time..(end_time || Time.now.utc)))
|
@@ -0,0 +1,10 @@
|
|
1
|
+
module OvirtMetrics
|
2
|
+
class VmDeviceHistory < OvirtHistory
|
3
|
+
# have to rename the inheritance_column since this table has a column
|
4
|
+
# called "type"
|
5
|
+
self.inheritance_column = :_type_disabled
|
6
|
+
|
7
|
+
scope :disks, -> { where(:type => "disk") }
|
8
|
+
scope :attached, -> { where(:delete_date => nil) }
|
9
|
+
end
|
10
|
+
end
|
data/spec/ovirt_metrics_spec.rb
CHANGED
@@ -1,6 +1,36 @@
|
|
1
1
|
describe OvirtMetrics do
|
2
2
|
shared_examples_for "OvirtMetrics" do |multiplication_required|
|
3
3
|
let(:multiplication_required) { multiplication_required }
|
4
|
+
describe ".vms_disk_ids_for" do
|
5
|
+
before(:each) do
|
6
|
+
@vm1_id = 1
|
7
|
+
@device_id1 = "device1"
|
8
|
+
@device_id2 = "device2"
|
9
|
+
generic_params = {
|
10
|
+
:vm_id => @vm1_id,
|
11
|
+
:device_id => @device_id1,
|
12
|
+
:type => "disk",
|
13
|
+
:address => "address",
|
14
|
+
:create_date => 1.week.ago
|
15
|
+
}
|
16
|
+
OvirtMetrics::VmDeviceHistory.create(generic_params)
|
17
|
+
OvirtMetrics::VmDeviceHistory.create(generic_params.merge(:address => "duplicate_with_same_device_id"))
|
18
|
+
OvirtMetrics::VmDeviceHistory.create(generic_params.merge(:device_id => @device_id2))
|
19
|
+
OvirtMetrics::VmDeviceHistory.create(generic_params.merge(:vm_id => 2, :device_id => "disk_from_other_vm"))
|
20
|
+
OvirtMetrics::VmDeviceHistory.create(generic_params.merge(:type => "nic",
|
21
|
+
:device_id => "device_of_non_disk_type"))
|
22
|
+
OvirtMetrics::VmDeviceHistory.create(generic_params.merge(:device_id => "device_that_was_deleted",
|
23
|
+
:delete_date => 2.days.ago))
|
24
|
+
end
|
25
|
+
|
26
|
+
subject { described_class.vms_disk_ids_for(@vm1_id) }
|
27
|
+
|
28
|
+
it { is_expected.to match_array([@device_id1, @device_id2]) }
|
29
|
+
it { is_expected.not_to include("disk_from_other_vm") }
|
30
|
+
it { is_expected.not_to include("device_of_non_disk_type") }
|
31
|
+
it { is_expected.not_to include("device_that_was_deleted") }
|
32
|
+
end
|
33
|
+
|
4
34
|
context ".vm_realtime" do
|
5
35
|
it "when vm_id finds no matches" do
|
6
36
|
expect(described_class.vm_realtime(42)).to eq([{}, {}])
|
@@ -57,11 +87,6 @@ describe OvirtMetrics do
|
|
57
87
|
|
58
88
|
end
|
59
89
|
|
60
|
-
context "RHEV 3.0" do
|
61
|
-
before(:each) { load_rhev_30 }
|
62
|
-
it_should_behave_like "OvirtMetrics", true
|
63
|
-
end
|
64
|
-
|
65
90
|
context "RHEV 3.1" do
|
66
91
|
before(:each) { load_rhev_31 }
|
67
92
|
it_should_behave_like "OvirtMetrics", true
|
data/spec/spec_helper.rb
CHANGED
@@ -77,6 +77,7 @@ RSpec.configure do |config|
|
|
77
77
|
end
|
78
78
|
|
79
79
|
require 'support/active_record'
|
80
|
+
require 'ovirt_metrics'
|
80
81
|
|
81
82
|
begin
|
82
83
|
require 'coveralls'
|
@@ -84,4 +85,11 @@ begin
|
|
84
85
|
rescue LoadError
|
85
86
|
end
|
86
87
|
|
87
|
-
|
88
|
+
OvirtMetrics.config do |c|
|
89
|
+
# Necessary because you currently cannot specify the
|
90
|
+
# connection name for ActiveRecord::Schema, which we use
|
91
|
+
# in tests to reset db schema for different RHEV versions.
|
92
|
+
c.connection_specification_name = 'primary' if ActiveRecord::VERSION::MAJOR >= 5
|
93
|
+
end
|
94
|
+
ActiveRecord::Base.establish_connection :adapter => "sqlite3", :database => ":memory:"
|
95
|
+
|
@@ -1,7 +1,5 @@
|
|
1
1
|
require 'active_record'
|
2
2
|
|
3
|
-
ActiveRecord::Base.establish_connection adapter: "sqlite3", database: ":memory:"
|
4
|
-
|
5
3
|
module ActiveModel::Validations
|
6
4
|
# Extension to enhance `should have` on AR Model instances. Calls
|
7
5
|
# model.valid? in order to prepare the object's errors object.
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ovirt_metrics
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Oleg Barenboim
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-
|
12
|
+
date: 2016-12-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -176,6 +176,7 @@ files:
|
|
176
176
|
- lib/active_record/connection_adapters/ovirt_legacy_postgresql_adapter.rb
|
177
177
|
- lib/ovirt_metrics.rb
|
178
178
|
- lib/ovirt_metrics/column_definitions.rb
|
179
|
+
- lib/ovirt_metrics/configurator.rb
|
179
180
|
- lib/ovirt_metrics/models/calendar.rb
|
180
181
|
- lib/ovirt_metrics/models/cluster_configuration.rb
|
181
182
|
- lib/ovirt_metrics/models/datacenter_configuration.rb
|
@@ -204,6 +205,7 @@ files:
|
|
204
205
|
- lib/ovirt_metrics/models/tag_relations_history.rb
|
205
206
|
- lib/ovirt_metrics/models/vm_configuration.rb
|
206
207
|
- lib/ovirt_metrics/models/vm_daily_history.rb
|
208
|
+
- lib/ovirt_metrics/models/vm_device_history.rb
|
207
209
|
- lib/ovirt_metrics/models/vm_disk_configuration.rb
|
208
210
|
- lib/ovirt_metrics/models/vm_disk_daily_history.rb
|
209
211
|
- lib/ovirt_metrics/models/vm_disk_hourly_history.rb
|