vpsb_client 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +22 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +29 -0
- data/Rakefile +2 -0
- data/bin/close_trial.rb +20 -0
- data/bin/create_trial.rb +13 -0
- data/bin/get_current_trial.rb +8 -0
- data/bin/get_item_ids.rb +9 -0
- data/bin/get_trial_last_metric.rb +8 -0
- data/bin/signed_in.rb +7 -0
- data/bin/sync_metrics.rb +19 -0
- data/bin/test_timing_interval.rb +18 -0
- data/bin/upload_metric.rb +37 -0
- data/doc/design.rb +109 -0
- data/lib/vpsb_client/api/close_trial_request.rb +23 -0
- data/lib/vpsb_client/api/create_trial_request.rb +38 -0
- data/lib/vpsb_client/api/get_current_trial_request.rb +30 -0
- data/lib/vpsb_client/api/get_item_id_request.rb +33 -0
- data/lib/vpsb_client/api/get_trial_last_metric_request.rb +25 -0
- data/lib/vpsb_client/api/post_metric_request.rb +28 -0
- data/lib/vpsb_client/api/request.rb +57 -0
- data/lib/vpsb_client/api/response.rb +30 -0
- data/lib/vpsb_client/builders/system_info_parser.rb +127 -0
- data/lib/vpsb_client/builders/trial.rb +54 -0
- data/lib/vpsb_client/client/upload_metrics.rb +39 -0
- data/lib/vpsb_client/config.rb +18 -0
- data/lib/vpsb_client/curl_wrapper.rb +41 -0
- data/lib/vpsb_client/datafiles/formatted_sar_log_parser.rb +38 -0
- data/lib/vpsb_client/datafiles/logfile_decompressor.rb +48 -0
- data/lib/vpsb_client/datafiles/pxx_aggregator.rb +94 -0
- data/lib/vpsb_client/datafiles/sar_manager.rb +71 -0
- data/lib/vpsb_client/datafiles/timing_log_parser.rb +32 -0
- data/lib/vpsb_client/http_client.rb +60 -0
- data/lib/vpsb_client/manager.rb +149 -0
- data/lib/vpsb_client/metrics/interval_builder.rb +85 -0
- data/lib/vpsb_client/metrics/interval_config.rb +45 -0
- data/lib/vpsb_client/metrics/manager.rb +34 -0
- data/lib/vpsb_client/metrics/uploader.rb +16 -0
- data/lib/vpsb_client/version.rb +3 -0
- data/lib/vpsb_client.rb +33 -0
- data/spec/lib/client/upload_metrics_spec.rb +23 -0
- data/spec/lib/config_spec.rb +26 -0
- data/spec/lib/logfile_decompressor_spec.rb +74 -0
- data/spec/lib/metrics/interval_builder_spec.rb +88 -0
- data/spec/lib/metrics/interval_config_spec.rb +99 -0
- data/spec/lib/metrics/manager_spec.rb +60 -0
- data/spec/lib/metrics/uploader_spec.rb +45 -0
- data/spec/lib/pxx_spec.rb +120 -0
- data/spec/lib/request_spec.rb +186 -0
- data/spec/lib/sar_manager_spec.rb +57 -0
- data/spec/lib/system_info_parser_spec.rb +51 -0
- data/spec/spec_helper.rb +9 -0
- data/spec/support/sarfiles/formatted/formatted_sa20 +147 -0
- data/spec/support/sarfiles/formatted/formatted_sa21 +85 -0
- data/spec/support/sarfiles/orig/sa18 +0 -0
- data/spec/support/sarfiles/orig/sa19 +0 -0
- data/spec/support/sarfiles/orig/sa20 +0 -0
- data/spec/support/sarfiles/orig/sa21 +0 -0
- data/spec/support/timingfiles/other.log.2.gz +0 -0
- data/spec/support/timingfiles/timings.log +11 -0
- data/spec/support/timingfiles/timings.log.1 +11 -0
- data/spec/support/timingfiles/timings.log.2.gz +0 -0
- data/spec/support/timingfiles/timings.log.3.gz +0 -0
- data/spec/support/vpsb.yml +12 -0
- data/vpsb_client.gemspec +29 -0
- metadata +241 -0
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module VpsbClient
|
4
|
+
module Metrics
|
5
|
+
describe Manager do
|
6
|
+
before :each do
|
7
|
+
@min_start_time = Time.new(2014, 11, 15, 20, 0, 0)
|
8
|
+
@length = 3600
|
9
|
+
@builder = double('builder')
|
10
|
+
@uploader = double('uploader')
|
11
|
+
@interval_config = double('config')
|
12
|
+
allow(@interval_config).to receive(:length).and_return(@length)
|
13
|
+
allow(@interval_config).to receive(:min_start_time).and_return(@min_start_time)
|
14
|
+
allow(@interval_config).to receive(:min_end_time).and_return(@min_start_time + @length)
|
15
|
+
|
16
|
+
@manager = Manager.new(@builder, @uploader, @interval_config)
|
17
|
+
end
|
18
|
+
|
19
|
+
describe :run do
|
20
|
+
it 'uploads each builder metric' do
|
21
|
+
metric = double('metric')
|
22
|
+
allow(metric).to receive(:[]).with(:started_at).and_return(@min_start_time)
|
23
|
+
expect(@builder).to receive(:each).and_yield(metric)
|
24
|
+
expect(@uploader).to receive(:upload).with(metric).once
|
25
|
+
|
26
|
+
@manager.run
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'stops at the first metric with start_time lower than min_start_time' do
|
30
|
+
metric1 = double('metric1')
|
31
|
+
allow(metric1).to receive(:[]).with(:started_at).and_return(@min_start_time)
|
32
|
+
|
33
|
+
metric2 = double('metric2')
|
34
|
+
allow(metric2).to receive(:[]).with(:started_at).and_return(@min_start_time - 2)
|
35
|
+
expect(@builder).to receive(:each).and_yield(metric1).and_yield(metric2)
|
36
|
+
expect(@uploader).to receive(:upload).with(metric1).once
|
37
|
+
expect(@uploader).to receive(:upload).with(metric2).never
|
38
|
+
|
39
|
+
@manager.run
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe :created_metric_ids do
|
44
|
+
it 'contains the ids of the new metrics' do
|
45
|
+
metric1 = double('metric1')
|
46
|
+
allow(metric1).to receive(:[]).with(:started_at).and_return(@min_start_time + 1)
|
47
|
+
|
48
|
+
metric2 = double('metric2')
|
49
|
+
allow(metric2).to receive(:[]).with(:started_at).and_return(@min_start_time)
|
50
|
+
allow(@builder).to receive(:each).and_yield(metric1).and_yield(metric2)
|
51
|
+
allow(@uploader).to receive(:upload).with(metric1).and_return(100)
|
52
|
+
allow(@uploader).to receive(:upload).with(metric2).and_return(101)
|
53
|
+
|
54
|
+
@manager.run
|
55
|
+
expect(@manager.created_metric_ids).to eq([100, 101])
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module VpsbClient
|
4
|
+
module Metrics
|
5
|
+
describe Uploader do
|
6
|
+
before :each do
|
7
|
+
VpsbClient.logger = Logger.new('/dev/null')
|
8
|
+
@curl = double('curl')
|
9
|
+
@client = HttpClient.new(@curl, 'http', 'localhost')
|
10
|
+
@trial_id = 1
|
11
|
+
@start = Time.new(2014, 10, 15, 20, 0, 0)
|
12
|
+
@len = 3600
|
13
|
+
end
|
14
|
+
|
15
|
+
describe 'upload' do
|
16
|
+
before :each do
|
17
|
+
@metric = {started_at: @start + @len, duration_seconds: @len, trial_id: @trial_id}
|
18
|
+
@metric_params = { metric: @metric }
|
19
|
+
|
20
|
+
@curl_response = double('response')
|
21
|
+
allow(@curl_response).to receive(:response_code).and_return(200)
|
22
|
+
allow(@curl_response).to receive(:body_str).and_return('{"id": 8}')
|
23
|
+
allow(@curl_response).to receive(:content_type).and_return("application/json")
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'posts once for each interval' do
|
27
|
+
expect(@curl).to receive(:post).with('http://localhost/api/metrics.json',
|
28
|
+
@metric_params.to_json,
|
29
|
+
"application/json").once.and_return(@curl_response)
|
30
|
+
|
31
|
+
uploader = Uploader.new(@client, @trial_id)
|
32
|
+
uploader.upload(@metric)
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'returns the new metric id' do
|
36
|
+
allow(@curl).to receive(:post).with('http://localhost/api/metrics.json',
|
37
|
+
@metric_params.to_json,
|
38
|
+
"application/json").once.and_return(@curl_response)
|
39
|
+
uploader = Uploader.new(@client, @trial_id)
|
40
|
+
expect(uploader.upload(@metric)).to eq(8)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,120 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require_relative File.expand_path("../../../lib/vpsb_client/datafiles/pxx_aggregator", __FILE__)
|
3
|
+
|
4
|
+
describe PxxBuckets do
|
5
|
+
before :each do
|
6
|
+
@ranges = {
|
7
|
+
10 => 5,
|
8
|
+
20 => 10
|
9
|
+
}
|
10
|
+
@pxxbuckets = PxxBuckets.new({ :ranges => @ranges, :pxx_keys => [ 75, 95, 99 ] })
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'initializes 4 buckets' do
|
14
|
+
expect(@pxxbuckets.buckets.size).to eq(4)
|
15
|
+
expect(@pxxbuckets.ary[0]).to eq(0)
|
16
|
+
expect(@pxxbuckets.ary[1]).to eq(5)
|
17
|
+
expect(@pxxbuckets.ary[2]).to eq(10)
|
18
|
+
expect(@pxxbuckets.ary[3]).to eq(20)
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'initializes bucket values to 0' do
|
22
|
+
expect(@pxxbuckets.buckets.values).to eq([0, 0, 0, 0])
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'sets bucket keys to ranges start' do
|
26
|
+
expect(@pxxbuckets.buckets.keys).to eq([0, 5, 10, 20])
|
27
|
+
end
|
28
|
+
|
29
|
+
describe :find_bucket_key do
|
30
|
+
it 'returns bucket indexes' do
|
31
|
+
expect(@pxxbuckets.find_bucket_key(0)).to eq(0)
|
32
|
+
expect(@pxxbuckets.find_bucket_key(5)).to eq(1)
|
33
|
+
expect(@pxxbuckets.find_bucket_key(15)).to eq(2)
|
34
|
+
expect(@pxxbuckets.find_bucket_key(1000)).to eq(3)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'places 0 in first bucket' do
|
39
|
+
@pxxbuckets.increment(0)
|
40
|
+
expect(@pxxbuckets.buckets[0]).to eq(1)
|
41
|
+
expect(@pxxbuckets.buckets[5]).to eq(0)
|
42
|
+
expect(@pxxbuckets.buckets[10]).to eq(0)
|
43
|
+
expect(@pxxbuckets.buckets[20]).to eq(0)
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'places 15 in 3rd bucket' do
|
47
|
+
@pxxbuckets.increment(15)
|
48
|
+
expect(@pxxbuckets.buckets[0]).to eq(0)
|
49
|
+
expect(@pxxbuckets.buckets[5]).to eq(0)
|
50
|
+
expect(@pxxbuckets.buckets[10]).to eq(1)
|
51
|
+
expect(@pxxbuckets.buckets[20]).to eq(0)
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'places 1000 in last bucket' do
|
55
|
+
@pxxbuckets.increment(1000)
|
56
|
+
expect(@pxxbuckets.buckets[0]).to eq(0)
|
57
|
+
expect(@pxxbuckets.buckets[5]).to eq(0)
|
58
|
+
expect(@pxxbuckets.buckets[10]).to eq(0)
|
59
|
+
expect(@pxxbuckets.buckets[20]).to eq(1)
|
60
|
+
end
|
61
|
+
|
62
|
+
describe :value do
|
63
|
+
it 'finds the pXX value for single high item' do
|
64
|
+
@pxxbuckets.increment(1000)
|
65
|
+
expect(@pxxbuckets.value(0.50)).to eq(20)
|
66
|
+
expect(@pxxbuckets.value(0.75)).to eq(20)
|
67
|
+
expect(@pxxbuckets.value(0.95)).to eq(20)
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'finds the pXX value for single low item' do
|
71
|
+
@pxxbuckets.increment(2)
|
72
|
+
expect(@pxxbuckets.value(0.50)).to eq(0)
|
73
|
+
expect(@pxxbuckets.value(0.75)).to eq(0)
|
74
|
+
expect(@pxxbuckets.value(0.95)).to eq(0)
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'finds the pxx value for low majority' do
|
78
|
+
@pxxbuckets.increment(2)
|
79
|
+
@pxxbuckets.increment(2)
|
80
|
+
@pxxbuckets.increment(10)
|
81
|
+
expect(@pxxbuckets.value(0.50)).to eq(0)
|
82
|
+
expect(@pxxbuckets.value(0.75)).to eq(10)
|
83
|
+
expect(@pxxbuckets.value(0.95)).to eq(10)
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'finds the pxx value for scattered data points' do
|
87
|
+
@pxxbuckets.increment(2)
|
88
|
+
@pxxbuckets.increment(7)
|
89
|
+
@pxxbuckets.increment(12)
|
90
|
+
@pxxbuckets.increment(14)
|
91
|
+
@pxxbuckets.increment(18)
|
92
|
+
@pxxbuckets.increment(25)
|
93
|
+
expect(@pxxbuckets.value(0.50)).to eq(10)
|
94
|
+
expect(@pxxbuckets.value(0.75)).to eq(10)
|
95
|
+
expect(@pxxbuckets.value(0.95)).to eq(20)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
context :with_floats do
|
100
|
+
before :each do
|
101
|
+
@ranges = {
|
102
|
+
10 => 0.1,
|
103
|
+
20 => 0.2,
|
104
|
+
40 => 0.5,
|
105
|
+
100 => 1
|
106
|
+
}
|
107
|
+
|
108
|
+
@pxxbuckets = PxxBuckets.new({ :ranges => @ranges, :pxx_keys => [ 75, 95, 99 ] })
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'finds the pxx value for scattered data points' do
|
112
|
+
0.upto(99) do |i|
|
113
|
+
@pxxbuckets.increment(i+0.1)
|
114
|
+
end
|
115
|
+
expect(@pxxbuckets.value(0.95)).to eq(94)
|
116
|
+
expect(@pxxbuckets.value(0.99)).to eq(98)
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
end
|
@@ -0,0 +1,186 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module VpsbClient
|
4
|
+
module Api
|
5
|
+
describe 'Requests' do
|
6
|
+
support_dir = File.join(File.dirname(__FILE__), '..', 'support/')
|
7
|
+
|
8
|
+
before :each do
|
9
|
+
@curl = double('curl')
|
10
|
+
@client = HttpClient.new(@curl, 'http', 'localhost')
|
11
|
+
end
|
12
|
+
|
13
|
+
describe GetItemIdRequest do
|
14
|
+
it 'url includes item type and name' do
|
15
|
+
expect(@curl).to receive(:get).with('http://localhost/api/hosters/by_name/linode.json').once
|
16
|
+
|
17
|
+
req = GetItemIdRequest.new(@client, 'hosters', 'linode')
|
18
|
+
req.run
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'parses the response from the server' do
|
22
|
+
curl_response = double('response')
|
23
|
+
allow(curl_response).to receive(:response_code).and_return(200)
|
24
|
+
allow(curl_response).to receive(:body_str).and_return('[{"id": 25}]')
|
25
|
+
allow(curl_response).to receive(:content_type).and_return("application/json")
|
26
|
+
allow(@curl).to receive(:get).and_return(curl_response)
|
27
|
+
req = GetItemIdRequest.new(@client, 'hosters', 'linode')
|
28
|
+
resp = Response.new(req.run)
|
29
|
+
expect(GetItemIdRequest.item_id(resp)).to eq(25)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe CreateTrialRequest do
|
34
|
+
before :each do
|
35
|
+
@config = { 'client_host' => 'test-001' , 'comment' => 'rien a dire' }
|
36
|
+
@params = Builders::Trial.new(@config, 1, 1, 1).create_params
|
37
|
+
@trial_params = { 'trial' => @params }
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'url id /api/trials' do
|
41
|
+
expect(@curl).to receive(:post).with('http://localhost/api/trials.json',
|
42
|
+
@trial_params.to_json,
|
43
|
+
"application/json").once
|
44
|
+
|
45
|
+
req = CreateTrialRequest.new(@client, @params)
|
46
|
+
req.run
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'parses the response from the server' do
|
50
|
+
curl_response = double('response')
|
51
|
+
allow(curl_response).to receive(:response_code).and_return(200)
|
52
|
+
allow(curl_response).to receive(:body_str).and_return('{"id": 8, "application_id": 1}')
|
53
|
+
allow(curl_response).to receive(:content_type).and_return("application/json")
|
54
|
+
allow(@curl).to receive(:post).and_return(curl_response)
|
55
|
+
req = CreateTrialRequest.new(@client, @params)
|
56
|
+
resp = Response.new(req.run)
|
57
|
+
expect(CreateTrialRequest.trial_id(resp)).to eq(8)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe GetCurrentTrialRequest do
|
62
|
+
before :each do
|
63
|
+
@params = { client_hostname: 'test-001' }
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'gets /api/trials/current with ids' do
|
67
|
+
expect(@curl).to receive(:get).with('http://localhost/api/trials/current.json?client_hostname=test-001').once
|
68
|
+
|
69
|
+
req = GetCurrentTrialRequest.new(@client, @params)
|
70
|
+
req.run
|
71
|
+
end
|
72
|
+
|
73
|
+
it 'extracts current trial id from response if found' do
|
74
|
+
curl_response = double('response')
|
75
|
+
allow(curl_response).to receive(:response_code).and_return(200)
|
76
|
+
allow(curl_response).to receive(:body_str).and_return('[{"id": 8, "application_id": 1}]')
|
77
|
+
allow(curl_response).to receive(:content_type).and_return("application/json")
|
78
|
+
allow(@curl).to receive(:get).and_return(curl_response)
|
79
|
+
req = GetCurrentTrialRequest.new(@client, @params)
|
80
|
+
resp = Response.new(req.run)
|
81
|
+
expect(GetCurrentTrialRequest.trial_id(resp)).to eq(8)
|
82
|
+
end
|
83
|
+
|
84
|
+
it 'extracts nil from response if notfound' do
|
85
|
+
curl_response = double('response')
|
86
|
+
allow(curl_response).to receive(:response_code).and_return(200)
|
87
|
+
allow(curl_response).to receive(:body_str).and_return('[]')
|
88
|
+
allow(curl_response).to receive(:content_type).and_return("application/json")
|
89
|
+
allow(@curl).to receive(:get).and_return(curl_response)
|
90
|
+
req = GetCurrentTrialRequest.new(@client, @params)
|
91
|
+
resp = Response.new(req.run)
|
92
|
+
expect(GetCurrentTrialRequest.trial_id(resp)).to be_nil
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
describe GetTrialLastMetricRequest do
|
97
|
+
before :each do
|
98
|
+
@params = { trial_id: 1, length: 3600 }
|
99
|
+
end
|
100
|
+
|
101
|
+
it 'gets /api/trials/:id/last_metric with length' do
|
102
|
+
expect(@curl).to receive(:get).with('http://localhost/api/trials/1/last_metric.json?length=3600').once
|
103
|
+
|
104
|
+
req = GetTrialLastMetricRequest.new(@client, @params)
|
105
|
+
req.run
|
106
|
+
end
|
107
|
+
|
108
|
+
it 'extracts current trial id from response if found' do
|
109
|
+
curl_response = double('response')
|
110
|
+
allow(curl_response).to receive(:response_code).and_return(200)
|
111
|
+
allow(curl_response).to receive(:body_str).and_return('[{"id":3016,"trial_id":22,"started_at":"2014-07-06T23:00:00.000Z","duration_seconds":3600}]')
|
112
|
+
allow(curl_response).to receive(:content_type).and_return("application/json")
|
113
|
+
allow(@curl).to receive(:get).and_return(curl_response)
|
114
|
+
req = GetTrialLastMetricRequest.new(@client, @params)
|
115
|
+
resp = Response.new(req.run)
|
116
|
+
expect(GetTrialLastMetricRequest.started_at(resp)).to eq(Time.new(2014,7,6,16,0,0))
|
117
|
+
end
|
118
|
+
|
119
|
+
it 'extracts nil from response if notfound' do
|
120
|
+
curl_response = double('response')
|
121
|
+
allow(curl_response).to receive(:response_code).and_return(200)
|
122
|
+
allow(curl_response).to receive(:body_str).and_return('[]')
|
123
|
+
allow(curl_response).to receive(:content_type).and_return("application/json")
|
124
|
+
allow(@curl).to receive(:get).and_return(curl_response)
|
125
|
+
req = GetTrialLastMetricRequest.new(@client, @params)
|
126
|
+
resp = Response.new(req.run)
|
127
|
+
expect(GetTrialLastMetricRequest.started_at(resp)).to be_nil
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
describe PostMetricRequest do
|
132
|
+
before :each do
|
133
|
+
@trial_id = 1
|
134
|
+
@metric = { duration_seconds: 3600 }
|
135
|
+
@metric_params = { metric: @metric.merge({ 'trial_id' => @trial_id}) }
|
136
|
+
end
|
137
|
+
|
138
|
+
it 'posts /api/metrics with length' do
|
139
|
+
expect(@curl).to receive(:post).with('http://localhost/api/metrics.json',
|
140
|
+
@metric_params.to_json,
|
141
|
+
"application/json").once
|
142
|
+
|
143
|
+
req = PostMetricRequest.new(@client, @trial_id, @metric)
|
144
|
+
req.run
|
145
|
+
end
|
146
|
+
|
147
|
+
it 'parses the response from the server' do
|
148
|
+
curl_response = double('response')
|
149
|
+
allow(curl_response).to receive(:response_code).and_return(200)
|
150
|
+
allow(curl_response).to receive(:body_str).and_return('{"id": 8}')
|
151
|
+
allow(curl_response).to receive(:content_type).and_return("application/json")
|
152
|
+
allow(@curl).to receive(:post).and_return(curl_response)
|
153
|
+
req = PostMetricRequest.new(@client, @trial_id, @metric)
|
154
|
+
resp = Response.new(req.run)
|
155
|
+
expect(PostMetricRequest.metric_id(resp)).to eq(8)
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
describe CloseTrialRequest do
|
160
|
+
before :each do
|
161
|
+
@trial_id = 1
|
162
|
+
@params = { }
|
163
|
+
end
|
164
|
+
|
165
|
+
it 'posts /api/metrics with length' do
|
166
|
+
expect(@curl).to receive(:put).with('http://localhost/api/trials/1/close.json',
|
167
|
+
@params.to_json,
|
168
|
+
"application/json").once
|
169
|
+
|
170
|
+
req = CloseTrialRequest.new(@client, @trial_id)
|
171
|
+
req.run
|
172
|
+
end
|
173
|
+
|
174
|
+
it 'parses the response from the server' do
|
175
|
+
curl_response = double('response')
|
176
|
+
allow(curl_response).to receive(:response_code).and_return(200)
|
177
|
+
allow(curl_response).to receive(:body_str).and_return('')
|
178
|
+
allow(curl_response).to receive(:content_type).and_return("application/json")
|
179
|
+
expect(@curl).to receive(:put).and_return(curl_response)
|
180
|
+
req = CloseTrialRequest.new(@client, @trial_id)
|
181
|
+
resp = Response.new(req.run)
|
182
|
+
end
|
183
|
+
end
|
184
|
+
end
|
185
|
+
end
|
186
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module VpsbClient
|
4
|
+
|
5
|
+
module Datafiles
|
6
|
+
data_dir = File.join(File.dirname(__FILE__), '..', 'support/sarfiles')
|
7
|
+
|
8
|
+
class TestSadf
|
9
|
+
SADF = '/usr/bin/sadf'
|
10
|
+
|
11
|
+
def self.run(src, dest)
|
12
|
+
cmd = "touch #{dest}"
|
13
|
+
ret = system cmd
|
14
|
+
raise VpsbClient::Datafiles::SarManager::SadfError, "\"#{cmd}\" failed" unless ret
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe SarManager do
|
19
|
+
before :each do
|
20
|
+
@orig_dir = "#{data_dir}/orig"
|
21
|
+
@target_dir = "#{data_dir}/dest"
|
22
|
+
@manager = SarManager.new(@orig_dir, @target_dir, TestSadf)
|
23
|
+
allow(Time).to receive(:now).and_return(Time.new(2014,9,21,16,0,1,'-08:00'))
|
24
|
+
end
|
25
|
+
|
26
|
+
after :each do
|
27
|
+
FileUtils.rm_rf(@target_dir)
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'raises an error if the orig dir does not exist' do
|
31
|
+
expect{SarManager.new('blah', @target_dir)}.to raise_error(SarManager::NotFoundError)
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'creates the target directory' do
|
35
|
+
@manager.run
|
36
|
+
expect(File.directory?(@target_dir)).to be true
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'generates daily formatted files' do
|
40
|
+
@manager.run
|
41
|
+
sa_files = [ 'sa18', 'sa19', 'sa20', 'sa21' ]
|
42
|
+
formatted_files = sa_files.map { |f| "#{@target_dir}/formatted_#{f}" }
|
43
|
+
formatted_files.each do |f|
|
44
|
+
expect(File.exist?(f)).to be true
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'replaces current day formatted file if it exists' do
|
49
|
+
system "mkdir #{@target_dir}"
|
50
|
+
system "echo \"hello\" > #{@target_dir}/formatted_sa21"
|
51
|
+
@manager.run
|
52
|
+
lines = File.readlines("#{@target_dir}/formatted_sa21")
|
53
|
+
expect(lines.first).not_to match(/hello/)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module VpsbClient
|
4
|
+
module Builders
|
5
|
+
support_dir = File.join(File.dirname(__FILE__), '..', 'support/')
|
6
|
+
|
7
|
+
describe MemoryParser do
|
8
|
+
it 'finds the amount of memory available in the system' do
|
9
|
+
mp = MemoryParser.new
|
10
|
+
mp.parse
|
11
|
+
expect(mp.used).to be_an_instance_of(Fixnum)
|
12
|
+
expect(mp.free).to be_an_instance_of(Fixnum)
|
13
|
+
expect(mp.total).to be_an_instance_of(Fixnum)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe UnameParser do
|
18
|
+
it 'finds the kernel version' do
|
19
|
+
mp = UnameParser.new
|
20
|
+
mp.parse
|
21
|
+
expect(mp.kernel).to match(/^\d\.\d+\.\d+$/)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe CpuinfoParser do
|
26
|
+
before :each do
|
27
|
+
@mp = CpuinfoParser.new
|
28
|
+
@mp.parse
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'finds the model and number of processors' do
|
32
|
+
expect(@mp.model).to match(/^.*CPU.*GHz$/)
|
33
|
+
expect(@mp.num).to be_an_instance_of(Fixnum)
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'finds the cpu speed' do
|
37
|
+
expect(@mp.mhz).to be_an_instance_of(Fixnum)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe IssueParser do
|
42
|
+
it 'finds the linux release' do
|
43
|
+
mp = IssueParser.new
|
44
|
+
mp.parse
|
45
|
+
expect(mp.os).to be_a(String)
|
46
|
+
expect(mp.os.size).to be > 0
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,147 @@
|
|
1
|
+
# hostname;interval;timestamp;CPU;%user;%nice;%system;%iowait;%steal;%idle
|
2
|
+
gcengine;288;1411196701;-1;13.36;0.00;1.10;0.05;0.00;85.49
|
3
|
+
gcengine;590;1411197301;-1;9.08;0.00;0.83;0.29;0.00;89.80
|
4
|
+
gcengine;595;1411197901;-1;7.05;0.00;0.57;0.03;0.00;92.34
|
5
|
+
gcengine;595;1411198502;-1;7.54;0.00;0.60;0.04;0.00;91.83
|
6
|
+
gcengine;592;1411199101;-1;8.46;0.00;0.65;0.04;0.00;90.86
|
7
|
+
gcengine;595;1411199701;-1;7.77;0.00;0.56;0.04;0.00;91.63
|
8
|
+
gcengine;594;1411200301;-1;7.66;0.00;0.60;0.04;0.00;91.70
|
9
|
+
gcengine;589;1411200901;-1;7.88;0.00;0.83;0.36;0.00;90.93
|
10
|
+
gcengine;597;1411201501;-1;6.06;0.00;0.51;0.04;0.00;93.39
|
11
|
+
gcengine;596;1411202101;-1;6.42;0.00;0.53;0.03;0.00;93.01
|
12
|
+
gcengine;595;1411202701;-1;6.44;0.00;0.54;0.05;0.00;92.97
|
13
|
+
gcengine;596;1411203301;-1;6.45;0.00;0.53;0.04;0.00;92.99
|
14
|
+
gcengine;587;1411203901;-1;9.31;0.00;0.74;0.04;0.00;89.92
|
15
|
+
gcengine;587;1411204501;-1;9.10;0.00;0.87;0.23;0.00;89.80
|
16
|
+
gcengine;596;1411205101;-1;6.60;0.00;0.52;0.04;0.00;92.85
|
17
|
+
gcengine;595;1411205701;-1;5.98;0.00;0.53;0.03;0.00;93.46
|
18
|
+
gcengine;594;1411206301;-1;6.85;0.00;0.56;0.03;0.00;92.55
|
19
|
+
gcengine;595;1411206901;-1;6.56;0.00;0.52;0.03;0.00;92.89
|
20
|
+
gcengine;597;1411207501;-1;6.47;0.00;0.54;0.05;0.00;92.94
|
21
|
+
gcengine;590;1411208101;-1;6.93;0.00;0.71;0.25;0.00;92.11
|
22
|
+
gcengine;597;1411208701;-1;4.09;0.00;0.41;0.03;0.00;95.47
|
23
|
+
gcengine;596;1411209301;-1;5.80;0.00;0.51;0.03;0.00;93.66
|
24
|
+
gcengine;596;1411209901;-1;5.29;0.00;0.51;0.04;0.00;94.16
|
25
|
+
gcengine;597;1411210501;-1;4.96;0.00;0.44;0.04;0.00;94.57
|
26
|
+
gcengine;592;1411211101;-1;8.11;0.00;0.71;0.03;0.00;91.14
|
27
|
+
gcengine;583;1411211702;-1;7.61;0.00;0.80;0.47;0.00;91.12
|
28
|
+
gcengine;596;1411212301;-1;4.26;0.00;0.38;0.05;0.00;95.31
|
29
|
+
gcengine;597;1411212901;-1;4.94;0.00;0.46;0.04;0.00;94.56
|
30
|
+
gcengine;595;1411213501;-1;5.51;0.00;0.47;0.05;0.00;93.98
|
31
|
+
gcengine;595;1411214101;-1;4.97;0.00;0.47;0.04;0.00;94.52
|
32
|
+
gcengine;596;1411214701;-1;4.79;0.00;0.45;0.05;0.00;94.71
|
33
|
+
gcengine;580;1411215301;-1;8.15;0.00;0.81;0.28;0.00;90.76
|
34
|
+
gcengine;595;1411215901;-1;4.41;0.00;0.41;0.06;0.00;95.11
|
35
|
+
gcengine;596;1411216501;-1;4.46;0.00;0.41;0.06;0.00;95.07
|
36
|
+
gcengine;596;1411217101;-1;4.63;0.00;0.44;0.06;0.00;94.87
|
37
|
+
gcengine;595;1411217701;-1;4.97;0.00;0.42;0.04;0.00;94.58
|
38
|
+
gcengine;590;1411218301;-1;8.47;0.00;0.69;0.04;0.00;90.81
|
39
|
+
gcengine;590;1411218901;-1;7.57;0.00;0.79;0.26;0.00;91.38
|
40
|
+
gcengine;596;1411219501;-1;6.20;0.00;0.52;0.04;0.00;93.24
|
41
|
+
gcengine;583;1411220101;-1;6.88;0.00;0.72;1.90;0.00;90.50
|
42
|
+
gcengine;595;1411220701;-1;6.42;0.00;0.56;0.06;0.00;92.97
|
43
|
+
gcengine;596;1411221301;-1;6.23;0.00;0.49;0.05;0.00;93.24
|
44
|
+
gcengine;596;1411221901;-1;5.43;0.00;0.46;0.05;0.00;94.05
|
45
|
+
gcengine;586;1411222501;-1;8.62;0.00;0.79;0.23;0.00;90.36
|
46
|
+
gcengine;597;1411223101;-1;6.19;0.00;0.49;0.04;0.00;93.28
|
47
|
+
gcengine;595;1411223701;-1;6.57;0.00;0.49;0.04;0.00;92.89
|
48
|
+
gcengine;594;1411224301;-1;6.86;0.00;0.55;0.05;0.00;92.54
|
49
|
+
gcengine;595;1411224901;-1;6.60;0.00;0.55;0.06;0.00;92.79
|
50
|
+
gcengine;589;1411225501;-1;9.26;0.00;0.79;0.05;0.00;89.90
|
51
|
+
gcengine;589;1411226101;-1;8.41;0.00;0.80;0.23;0.00;90.56
|
52
|
+
gcengine;594;1411226701;-1;7.60;0.00;0.56;0.05;0.00;91.80
|
53
|
+
gcengine;596;1411227301;-1;6.46;0.00;0.56;0.05;0.00;92.94
|
54
|
+
gcengine;595;1411227901;-1;6.36;0.00;0.53;0.04;0.00;93.06
|
55
|
+
gcengine;595;1411228501;-1;5.85;0.00;0.50;0.04;0.00;93.60
|
56
|
+
gcengine;597;1411229101;-1;5.59;0.00;0.46;0.04;0.00;93.90
|
57
|
+
gcengine;590;1411229701;-1;7.31;0.00;0.76;0.34;0.00;91.59
|
58
|
+
gcengine;595;1411230301;-1;5.86;0.00;0.49;0.05;0.00;93.60
|
59
|
+
gcengine;596;1411230901;-1;6.20;0.00;0.51;0.04;0.00;93.25
|
60
|
+
gcengine;596;1411231501;-1;5.88;0.00;0.55;0.05;0.00;93.52
|
61
|
+
gcengine;596;1411232101;-1;5.64;0.00;0.47;0.04;0.00;93.84
|
62
|
+
gcengine;593;1411232701;-1;8.48;0.00;0.68;0.04;0.00;90.80
|
63
|
+
gcengine;589;1411233301;-1;7.37;0.00;0.73;0.26;0.00;91.65
|
64
|
+
gcengine;597;1411233902;-1;6.10;0.00;0.49;0.04;0.00;93.38
|
65
|
+
gcengine;595;1411234501;-1;5.75;0.00;0.45;0.04;0.00;93.76
|
66
|
+
gcengine;596;1411235101;-1;5.66;0.00;0.48;0.04;0.00;93.82
|
67
|
+
gcengine;595;1411235701;-1;6.37;0.00;0.54;0.04;0.00;93.05
|
68
|
+
gcengine;596;1411236301;-1;5.46;0.00;0.47;0.04;0.00;94.02
|
69
|
+
gcengine;581;1411236901;-1;9.59;0.00;0.91;0.29;0.00;89.21
|
70
|
+
gcengine;596;1411237501;-1;5.70;0.00;0.50;0.04;0.00;93.76
|
71
|
+
gcengine;596;1411238101;-1;5.68;0.00;0.46;0.04;0.00;93.82
|
72
|
+
gcengine;593;1411238701;-1;7.48;0.00;0.62;0.06;0.00;91.84
|
73
|
+
gcengine;595;1411239301;-1;7.70;0.00;0.61;0.05;0.00;91.64
|
74
|
+
gcengine;593;1411239901;-1;10.08;0.00;0.70;0.05;0.00;89.17
|
75
|
+
gcengine;586;1411240501;-1;9.64;0.00;0.88;0.23;0.00;89.25
|
76
|
+
gcengine;596;1411241101;-1;8.08;0.00;0.66;0.05;0.00;91.22
|
77
|
+
gcengine;595;1411241701;-1;7.44;0.00;0.58;0.04;0.00;91.94
|
78
|
+
gcengine;595;1411242301;-1;8.30;0.00;0.65;0.04;0.00;91.01
|
79
|
+
gcengine;592;1411242901;-1;10.76;0.00;0.79;0.05;0.00;88.40
|
80
|
+
gcengine;595;1411243501;-1;7.72;0.00;0.62;0.04;0.00;91.62
|
81
|
+
gcengine;582;1411244101;-1;9.96;0.00;0.88;0.25;0.00;88.92
|
82
|
+
gcengine;595;1411244701;-1;8.03;0.00;0.59;0.04;0.00;91.34
|
83
|
+
gcengine;596;1411245301;-1;7.72;0.00;0.60;0.04;0.00;91.64
|
84
|
+
gcengine;595;1411245901;-1;8.19;0.00;0.65;0.04;0.00;91.11
|
85
|
+
gcengine;596;1411246501;-1;8.07;0.00;0.61;0.03;0.00;91.29
|
86
|
+
gcengine;588;1411247101;-1;10.00;0.00;0.75;0.04;0.00;89.22
|
87
|
+
gcengine;589;1411247701;-1;9.28;0.00;0.81;0.22;0.00;89.69
|
88
|
+
gcengine;596;1411248301;-1;7.32;0.00;0.59;0.04;0.00;92.05
|
89
|
+
gcengine;595;1411248901;-1;7.46;0.00;0.60;0.05;0.00;91.89
|
90
|
+
gcengine;595;1411249502;-1;7.98;0.00;0.62;0.04;0.00;91.35
|
91
|
+
gcengine;594;1411250101;-1;7.79;0.00;0.59;0.03;0.00;91.59
|
92
|
+
gcengine;596;1411250701;-1;7.89;0.00;0.58;0.04;0.00;91.49
|
93
|
+
gcengine;589;1411251301;-1;9.32;0.00;0.88;0.26;0.00;89.54
|
94
|
+
gcengine;595;1411251901;-1;7.93;0.00;0.62;0.04;0.00;91.42
|
95
|
+
gcengine;596;1411252501;-1;8.34;0.00;0.69;0.04;0.00;90.94
|
96
|
+
gcengine;593;1411253101;-1;8.73;0.00;0.66;0.05;0.00;90.56
|
97
|
+
gcengine;596;1411253701;-1;8.08;0.00;0.62;0.04;0.00;91.26
|
98
|
+
gcengine;586;1411254301;-1;10.95;0.00;0.85;0.04;0.00;88.16
|
99
|
+
gcengine;579;1411254901;-1;11.20;0.00;1.00;0.26;0.00;87.54
|
100
|
+
gcengine;595;1411255501;-1;8.76;0.00;0.72;0.03;0.00;90.49
|
101
|
+
gcengine;596;1411256101;-1;8.19;0.00;0.61;0.03;0.00;91.17
|
102
|
+
gcengine;595;1411256701;-1;8.16;0.00;0.68;0.05;0.00;91.11
|
103
|
+
gcengine;595;1411257301;-1;7.31;0.00;0.54;0.03;0.00;92.12
|
104
|
+
gcengine;593;1411257901;-1;9.31;0.00;0.70;0.06;0.00;89.93
|
105
|
+
gcengine;589;1411258501;-1;9.95;0.00;0.88;0.25;0.00;88.92
|
106
|
+
gcengine;593;1411259101;-1;7.28;0.00;0.71;0.03;0.00;91.98
|
107
|
+
gcengine;595;1411259701;-1;8.93;0.00;0.64;0.04;0.00;90.39
|
108
|
+
gcengine;595;1411260301;-1;7.55;0.00;0.56;0.04;0.00;91.85
|
109
|
+
gcengine;595;1411260901;-1;7.89;0.00;0.64;0.04;0.00;91.43
|
110
|
+
gcengine;585;1411261501;-1;10.37;0.00;0.82;0.04;0.00;88.77
|
111
|
+
gcengine;592;1411262101;-1;8.42;0.00;0.77;0.22;0.00;90.59
|
112
|
+
gcengine;595;1411262701;-1;8.72;0.00;0.67;0.03;0.00;90.58
|
113
|
+
gcengine;594;1411263301;-1;7.82;0.00;0.60;0.03;0.00;91.55
|
114
|
+
gcengine;594;1411263901;-1;7.28;0.00;0.56;0.04;0.00;92.13
|
115
|
+
gcengine;596;1411264501;-1;6.95;0.00;0.52;0.03;0.00;92.50
|
116
|
+
gcengine;595;1411265101;-1;7.43;0.00;0.58;0.04;0.00;91.95
|
117
|
+
gcengine;591;1411265701;-1;8.63;0.00;0.78;0.23;0.00;90.35
|
118
|
+
gcengine;595;1411266301;-1;7.14;0.00;0.59;0.03;0.00;92.24
|
119
|
+
gcengine;596;1411266901;-1;6.89;0.00;0.56;0.04;0.00;92.50
|
120
|
+
gcengine;594;1411267501;-1;7.42;0.00;0.59;0.05;0.00;91.94
|
121
|
+
gcengine;595;1411268101;-1;8.08;0.00;0.58;0.03;0.00;91.31
|
122
|
+
gcengine;587;1411268701;-1;10.12;0.00;0.82;0.03;0.00;89.03
|
123
|
+
gcengine;591;1411269301;-1;8.24;0.00;0.77;0.24;0.00;90.75
|
124
|
+
gcengine;595;1411269901;-1;6.88;0.00;0.52;0.04;0.00;92.56
|
125
|
+
gcengine;596;1411270501;-1;7.02;0.00;0.59;0.04;0.00;92.36
|
126
|
+
gcengine;594;1411271101;-1;7.43;0.00;0.57;0.04;0.00;91.96
|
127
|
+
gcengine;595;1411271701;-1;7.12;0.00;0.58;0.04;0.00;92.27
|
128
|
+
gcengine;595;1411272301;-1;7.55;0.00;0.57;0.09;0.00;91.79
|
129
|
+
gcengine;592;1411272901;-1;9.16;0.00;0.81;0.21;0.00;89.82
|
130
|
+
gcengine;596;1411273501;-1;7.01;0.00;0.56;0.04;0.00;92.40
|
131
|
+
gcengine;597;1411274101;-1;7.08;0.00;0.57;0.04;0.00;92.31
|
132
|
+
gcengine;595;1411274701;-1;7.35;0.00;0.59;0.04;0.00;92.03
|
133
|
+
gcengine;597;1411275301;-1;6.53;0.00;0.52;0.04;0.00;92.91
|
134
|
+
gcengine;587;1411275901;-1;9.65;0.00;0.75;0.03;0.00;89.57
|
135
|
+
gcengine;583;1411276501;-1;10.96;0.00;0.98;0.38;0.00;87.69
|
136
|
+
gcengine;594;1411277101;-1;7.48;0.00;0.60;0.03;0.00;91.88
|
137
|
+
gcengine;595;1411277701;-1;8.07;0.00;0.64;0.04;0.00;91.25
|
138
|
+
gcengine;593;1411278301;-1;8.68;0.00;0.65;0.04;0.00;90.63
|
139
|
+
gcengine;594;1411278901;-1;7.36;0.00;0.60;0.04;0.00;92.01
|
140
|
+
gcengine;595;1411279501;-1;7.69;0.00;0.58;0.03;0.00;91.70
|
141
|
+
gcengine;581;1411280101;-1;10.51;0.00;0.96;0.22;0.00;88.30
|
142
|
+
gcengine;594;1411280701;-1;8.05;0.00;0.60;0.03;0.00;91.31
|
143
|
+
gcengine;597;1411281301;-1;7.50;0.00;0.56;0.03;0.00;91.90
|
144
|
+
gcengine;593;1411281901;-1;8.20;0.00;0.61;0.05;0.00;91.14
|
145
|
+
gcengine;594;1411282501;-1;8.62;0.00;0.66;0.05;0.00;90.67
|
146
|
+
gcengine;159;1411282741;-1;55.12;0.00;2.44;1.31;0.00;41.13
|
147
|
+
gcengine;58;1411282801;-1;10.39;0.00;0.85;0.69;0.00;88.07
|