oneacct-export 0.4.2 → 0.4.3
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/.travis.yml +4 -0
- data/README.md +43 -3
- data/config/conf.yml +1 -1
- data/lib/one_data_accessor.rb +42 -30
- data/lib/one_worker.rb +5 -4
- data/lib/oneacct_exporter/version.rb +1 -1
- data/mock/one_data_accessor_cluster_01.xml +1 -1
- data/mock/one_data_accessor_host_01.xml +1 -1
- data/mock/one_data_accessor_host_02.xml +1 -2
- data/spec/one_data_accessor_spec.rb +3 -3
- data/spec/one_worker_spec.rb +2 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3d05de90f6c075741a02dee7cc02b1ec10633935
|
4
|
+
data.tar.gz: 232870fe469a478ac67710257be3768da938806d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 930ffdb5223cd34c6b0b26929d2be5d321602dad5555cafa73d633611caf7b5874f8f991b0298d129ec869404c14a75b3b7e7752923168755285cd9746f74986
|
7
|
+
data.tar.gz: 4e17fba48c83dbbf1bcb6c6ffe40b6eaaadf5da82d510767cd2724a62844c3ec6525816719ce525cc37aec78866b8db1273c925624a5d691e11c0ffdba95805d
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -116,6 +116,33 @@ INHERIT_IMAGE_ATTR = "VMCATCHER_EVENT_SL_CHECKSUM_SHA512"
|
|
116
116
|
INHERIT_IMAGE_ATTR = "VMCATCHER_EVENT_HV_VERSION"
|
117
117
|
~~~
|
118
118
|
|
119
|
+
###Configure benchmark host attributes in OpenNebula
|
120
|
+
In order to recognize and fill `BenchmarkType` and `Benchmark` APEL v0.4 fields,
|
121
|
+
two attributes have to be set for every host in OpenNebula:
|
122
|
+
* `BENCHMARK_TYPE` - represents benchmark's type. For example: `HEP-SPEC06`
|
123
|
+
* `BENCHMARK_VALUES` - represents a map of virtual machine instance types and
|
124
|
+
their measured values of said benchmark formatted as JSON. For example:
|
125
|
+
```
|
126
|
+
{
|
127
|
+
"http://schemas.fedcloud.egi.eu/occi/infrastructure/resource_tpl#atlas":312.39,
|
128
|
+
"http://schemas.fedcloud.egi.eu/occi/infrastructure/resource_tpl#extra_large":146.64,
|
129
|
+
"http://schemas.fedcloud.egi.eu/occi/infrastructure/resource_tpl#goliath":255.80,
|
130
|
+
"http://fedcloud.egi.eu/occi/compute/flavour/1.0#large":84.46
|
131
|
+
}
|
132
|
+
```
|
133
|
+
Virtual machine instance types are in form of OCCI `scheme#term` of `resource_tpl` mixins.
|
134
|
+
You can list your mixins via OCCI cli utility with command
|
135
|
+
```
|
136
|
+
occi --endpoint $ENDPOINT -a list -r resource_tpl
|
137
|
+
```
|
138
|
+
|
139
|
+
To check whether the value is correctly formatted use one of the JSON format validators and formatters, for example
|
140
|
+
[https://jsonformatter.curiousconcept.com/](https://jsonformatter.curiousconcept.com/).
|
141
|
+
|
142
|
+
Both attributes can be set both for clusters and hosts in OpenNebula with hosts'
|
143
|
+
attributes taking precedence. If attributes are set only for cluster, all hosts
|
144
|
+
within the cluster will be assigned these values.
|
145
|
+
|
119
146
|
###Set Rails environment variable according to your environment
|
120
147
|
You have to set system environment variable `RAILS_ENV` to one of the
|
121
148
|
values production, development or test. OneacctExport is not a Rails
|
@@ -147,9 +174,10 @@ Usage oneacct-export [options]
|
|
147
174
|
|
148
175
|
--records-from TIME Retrieves only records newer than TIME
|
149
176
|
--records-to TIME Retrieves only records older than TIME
|
150
|
-
--
|
177
|
+
--records-for PERIOD Retrieves only records within the time PERIOD
|
178
|
+
--include-groups [GROUP1,GROUP2,...]
|
151
179
|
Retrieves only records of virtual machines which belong to the specified groups
|
152
|
-
--exclude-groups GROUP1
|
180
|
+
--exclude-groups [GROUP1,GROUP2,...]
|
153
181
|
Retrieves only records of virtual machines which don't belong to the specified groups
|
154
182
|
--group-file FILE If --include-groups or --exclude-groups specified, loads groups from file FILE
|
155
183
|
-b, --[no-]blocking Run in a blocking mode - wait until all submitted jobs are processed
|
@@ -159,6 +187,19 @@ Usage oneacct-export [options]
|
|
159
187
|
-v, --version Shows version
|
160
188
|
```
|
161
189
|
|
190
|
+
###Package specific scripts
|
191
|
+
When installed from packages build via [omnibus packaging for OneacctExport](https://github.com/EGI-FCTF/omnibus-oneacct-export),
|
192
|
+
both Sidekiq and OneacctExport are automatically registered as cron jobs to run
|
193
|
+
periodically. Cron job managing OneacctExport uses a bash script which is
|
194
|
+
simplifying OneacctExport interface for most common use cases. After the installation,
|
195
|
+
script can be found in `/usr/bin/oneacct-export-cron`. Script can accept command line options
|
196
|
+
`--week|-w` (default), `--two-weeks`, `--month|-m`, `--two-months`, `--six-months`, `--year|-y` and `--all|-a`
|
197
|
+
which sets age of retrieved records accordingly. There is also a set of files
|
198
|
+
which when present in `/opt/oneacct-export/` directory serves as a configuration shortcut:
|
199
|
+
* `compat.one` - turns on compatibility mode (same as OneacctExport option `--compatibility-mode`)
|
200
|
+
* `groups.include` - contains list of groups to include (same as combination of OneacctExport options `--include-groups` and `--group-file`)
|
201
|
+
* `groups.exclude` - contains list of groups to exclude (same as combination of OneacctExport options `--exclude-groups` and `--group-file`)
|
202
|
+
|
162
203
|
##Code Documentation
|
163
204
|
[Code Documentation for OneacctExport by YARD](http://rubydoc.info/github/EGI-FCTF/oneacct_export/)
|
164
205
|
|
@@ -178,4 +219,3 @@ To change the log level of `oneacct-export` and `sidekiq` you have to set the en
|
|
178
219
|
```bash
|
179
220
|
export ONEACCT_EXPORT_LOG_LEVEL=DEBUG
|
180
221
|
```
|
181
|
-
|
data/config/conf.yml
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
defaults: &defaults
|
3
3
|
output:
|
4
4
|
output_dir: /var/spool/apel/outgoing/00000000 # Directory for outgoing messages
|
5
|
-
output_type: apel-0.
|
5
|
+
output_type: apel-0.4 # Format of outgoing messages. Choices are: apel-0.2, apel-0.4, pbs-0.1, logstash-0.1
|
6
6
|
num_of_vms_per_file: 500 # Maximum number of virtual machine records per one output file
|
7
7
|
apel: # Options for apel output format
|
8
8
|
site_name: Undefined # Usually a short provider name, e.g. CESNET
|
data/lib/one_data_accessor.rb
CHANGED
@@ -16,6 +16,8 @@ class OneDataAccessor
|
|
16
16
|
include InputValidator
|
17
17
|
|
18
18
|
STATE_DONE = '6'
|
19
|
+
BENCHMARK_TYPE_XPATH = 'TEMPLATE/BENCHMARK_TYPE'
|
20
|
+
BENCHMARK_VALUES_XPATH = 'TEMPLATE/BENCHMARK_VALUES'
|
19
21
|
|
20
22
|
attr_reader :log, :batch_size, :client, :compatibility
|
21
23
|
attr_accessor :start_vm_id
|
@@ -197,45 +199,55 @@ class OneDataAccessor
|
|
197
199
|
#
|
198
200
|
# @return [Hash] hosts' IDs and hash with benchmark name and value
|
199
201
|
def benchmark_map
|
202
|
+
map = {}
|
200
203
|
host_pool = OpenNebula::HostPool.new(@client)
|
201
204
|
rc = host_pool.info
|
202
205
|
check_retval(rc, Errors::ResourceRetrievalError)
|
203
206
|
|
204
|
-
bench_map = {}
|
205
|
-
|
206
207
|
host_pool.each do |host|
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
if (benchmark_type = host['TEMPLATE/BENCHMARK_TYPE'])
|
212
|
-
benchmark_values = host['TEMPLATE/BENCHMARK_VALUES'].split(/\s*\n\s*/)
|
213
|
-
else
|
214
|
-
cluster_id = host['CLUSTER_ID'].to_i
|
215
|
-
|
216
|
-
unless cluster_id == -1
|
217
|
-
searched_cluster = OpenNebula::Cluster.new(OpenNebula::Cluster.build_xml(cluster_id), @client)
|
218
|
-
rc = searched_cluster.info
|
219
|
-
check_retval(rc, Errors::ResourceRetrievalError)
|
220
|
-
|
221
|
-
if (benchmark_type = searched_cluster['TEMPLATE/BENCHMARK_TYPE'])
|
222
|
-
benchmark_values = searched_cluster['TEMPLATE/BENCHMARK_VALUES'].split(/\s*\n\s*/)
|
223
|
-
end
|
224
|
-
end
|
208
|
+
benchmark = benchmark_values(host)
|
209
|
+
if benchmark.empty?
|
210
|
+
cluster = cluster_for_host(host)
|
211
|
+
benchmark = benchmark_values(cluster) if cluster
|
225
212
|
end
|
226
213
|
|
227
|
-
|
228
|
-
|
229
|
-
benchmark_values.each do |value|
|
230
|
-
values = value.split(/\s+/, 2)
|
231
|
-
mixins[values[0]] = values[1]
|
232
|
-
end
|
233
|
-
structure = { :benchmark_type => benchmark_type, :mixins => mixins }
|
234
|
-
end
|
214
|
+
map[host['ID']] = benchmark
|
215
|
+
end
|
235
216
|
|
236
|
-
|
217
|
+
map
|
218
|
+
end
|
219
|
+
|
220
|
+
# Returns benchmark type and values of specified entity
|
221
|
+
#
|
222
|
+
# @param [OpenNebula::PoolElement] entity
|
223
|
+
# @return [Hash] benchmark type and values in form of hash
|
224
|
+
def benchmark_values(entity)
|
225
|
+
benchmark_type = entity[BENCHMARK_TYPE_XPATH]
|
226
|
+
return {} unless benchmark_type
|
227
|
+
|
228
|
+
mixins = {}
|
229
|
+
benchmark_values = entity[BENCHMARK_VALUES_XPATH]
|
230
|
+
if benchmark_values
|
231
|
+
mixins = JSON.parse(benchmark_values, :max_nesting => 1)
|
237
232
|
end
|
238
233
|
|
239
|
-
|
234
|
+
{ :benchmark_type => benchmark_type, :mixins => mixins }
|
235
|
+
end
|
236
|
+
|
237
|
+
# Returns object representing a cluster for specified host
|
238
|
+
#
|
239
|
+
# @param [OpenNebula::Host] host
|
240
|
+
# @return [OpenNebula::Cluster] host's cluster
|
241
|
+
def cluster_for_host(host)
|
242
|
+
cluster_id = host['CLUSTER_ID'].to_i
|
243
|
+
|
244
|
+
# host without cluster
|
245
|
+
return nil if cluster_id == -1
|
246
|
+
|
247
|
+
cluster = OpenNebula::Cluster.new(OpenNebula::Cluster.build_xml(cluster_id), @client)
|
248
|
+
rc = cluster.info
|
249
|
+
check_retval(rc, Errors::ResourceRetrievalError)
|
250
|
+
|
251
|
+
cluster
|
240
252
|
end
|
241
253
|
end
|
data/lib/one_worker.rb
CHANGED
@@ -279,16 +279,17 @@ class OneWorker
|
|
279
279
|
#
|
280
280
|
# @return [Hash] benchmark type and value or both can be nil
|
281
281
|
def search_benchmark(vm, benchmark_map)
|
282
|
-
nil_benchmark = { :benchmark_type => nil, :benchmark_value => nil }
|
283
282
|
map = benchmark_map[vm['HISTORY_RECORDS/HISTORY[last()]/HID']]
|
284
|
-
|
285
|
-
return
|
283
|
+
|
284
|
+
return {} unless vm['USER_TEMPLATE/OCCI_COMPUTE_MIXINS']
|
285
|
+
return {} if map.nil? || map.empty?
|
286
286
|
|
287
287
|
occi_compute_mixins = vm['USER_TEMPLATE/OCCI_COMPUTE_MIXINS'].split(/\s+/)
|
288
288
|
occi_compute_mixins.each do |mixin|
|
289
289
|
return { :benchmark_type => map[:benchmark_type], :benchmark_value => map[:mixins][mixin] } if map[:mixins].has_key?(mixin)
|
290
290
|
end
|
291
|
-
|
291
|
+
|
292
|
+
{}
|
292
293
|
end
|
293
294
|
|
294
295
|
private
|
@@ -20,7 +20,7 @@
|
|
20
20
|
</VNETS>
|
21
21
|
<TEMPLATE>
|
22
22
|
<BENCHMARK_TYPE>bench_type_cluster_1</BENCHMARK_TYPE>
|
23
|
-
<BENCHMARK_VALUES>mixin1 21.7</BENCHMARK_VALUES>
|
23
|
+
<BENCHMARK_VALUES>{"mixin1": 21.7}</BENCHMARK_VALUES>
|
24
24
|
<RESERVED_CPU><![CDATA[]]></RESERVED_CPU>
|
25
25
|
<RESERVED_MEM><![CDATA[8388608]]></RESERVED_MEM>
|
26
26
|
</TEMPLATE>
|
@@ -49,7 +49,7 @@
|
|
49
49
|
<TEMPLATE>
|
50
50
|
<ARCH><![CDATA[x86_64]]></ARCH>
|
51
51
|
<BENCHMARK_TYPE>bench_type_1</BENCHMARK_TYPE>
|
52
|
-
<BENCHMARK_VALUES>mixin1 36.9</BENCHMARK_VALUES>
|
52
|
+
<BENCHMARK_VALUES>{"mixin1": 36.9}</BENCHMARK_VALUES>
|
53
53
|
<CPUSPEED><![CDATA[1200]]></CPUSPEED>
|
54
54
|
<ERROR><![CDATA[Thu Nov 19 11:56:06 2015 : Error monitoring Host whatever.in.czech.republic.cz (21): -]]></ERROR>
|
55
55
|
<HOSTNAME><![CDATA[whatever.in.czech.republic.cz]]></HOSTNAME>
|
@@ -49,8 +49,7 @@
|
|
49
49
|
<TEMPLATE>
|
50
50
|
<ARCH><![CDATA[x86_64]]></ARCH>
|
51
51
|
<BENCHMARK_TYPE>bench_type_2</BENCHMARK_TYPE>
|
52
|
-
<BENCHMARK_VALUES>mixin1 788.6
|
53
|
-
mixin2 123.123</BENCHMARK_VALUES>
|
52
|
+
<BENCHMARK_VALUES>{"mixin1": 788.6, "mixin2": 123.123}</BENCHMARK_VALUES>
|
54
53
|
<CPUSPEED><![CDATA[1200]]></CPUSPEED>
|
55
54
|
<ERROR><![CDATA[Thu Nov 19 11:56:06 2015 : Error monitoring Host whatever.in.czech.republic.cz (21): -]]></ERROR>
|
56
55
|
<HOSTNAME><![CDATA[whatever.in.czech.republic.cz]]></HOSTNAME>
|
@@ -453,7 +453,7 @@ describe OneDataAccessor do
|
|
453
453
|
context 'with correct data on a host with one benchmark value' do
|
454
454
|
let(:host_filename) { 'one_data_accessor_host_01.xml' }
|
455
455
|
let(:expected) { { '1' => { :benchmark_type => 'bench_type_1',
|
456
|
-
:mixins => { 'mixin1' =>
|
456
|
+
:mixins => { 'mixin1' => 36.9 } } } }
|
457
457
|
|
458
458
|
it 'creates correct benchmark_map' do
|
459
459
|
expect(subject.benchmark_map).to eq(expected)
|
@@ -463,7 +463,7 @@ describe OneDataAccessor do
|
|
463
463
|
context 'with correct data on a host with two benchmark values' do
|
464
464
|
let(:host_filename) { 'one_data_accessor_host_02.xml' }
|
465
465
|
let(:expected) { { '2' => { :benchmark_type => 'bench_type_2',
|
466
|
-
:mixins => { 'mixin1' =>
|
466
|
+
:mixins => { 'mixin1' => 788.6, 'mixin2' => 123.123 } } } }
|
467
467
|
|
468
468
|
it 'creates correct benchmark_map' do
|
469
469
|
expect(subject.benchmark_map).to eq(expected)
|
@@ -478,7 +478,7 @@ describe OneDataAccessor do
|
|
478
478
|
let(:host_filename) { 'one_data_accessor_host_03.xml' }
|
479
479
|
let(:cluster_filename) { 'one_data_accessor_cluster_01.xml' }
|
480
480
|
let(:expected) { { '3' => { :benchmark_type => 'bench_type_cluster_1',
|
481
|
-
:mixins => { 'mixin1' =>
|
481
|
+
:mixins => { 'mixin1' => 21.7 } } } }
|
482
482
|
|
483
483
|
it 'creates correct benchmark_map' do
|
484
484
|
expect(subject.benchmark_map).to eq(expected)
|
data/spec/one_worker_spec.rb
CHANGED
@@ -602,7 +602,7 @@ describe OneWorker do
|
|
602
602
|
context 'with empty benchmark_map' do
|
603
603
|
let(:filename) { 'one_worker_vm_search_benchmark_01.xml' }
|
604
604
|
let(:benchmark_map) { {} }
|
605
|
-
let(:expected) { {
|
605
|
+
let(:expected) { {} }
|
606
606
|
|
607
607
|
it 'returns array with two nil items' do
|
608
608
|
expect(subject.search_benchmark(vm, benchmark_map)).to eq(expected)
|
@@ -611,7 +611,7 @@ describe OneWorker do
|
|
611
611
|
|
612
612
|
context 'with no data for the virtual machine in benchmark_map' do
|
613
613
|
let(:filename) { 'one_worker_vm_search_benchmark_02.xml' }
|
614
|
-
let(:expected) { {
|
614
|
+
let(:expected) { {} }
|
615
615
|
|
616
616
|
it 'returns array with two nil items' do
|
617
617
|
expect(subject.search_benchmark(vm, benchmark_map)).to eq(expected)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oneacct-export
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michal Kimle
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-06-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|