sisfc 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/sisfc +10 -8
- data/lib/sisfc/evaluation.rb +2 -2
- data/lib/sisfc/simulation.rb +1 -1
- data/lib/sisfc/version.rb +1 -1
- data/lib/sisfc.rb +1 -0
- data/test/sisfc/evaluation_test.rb +36 -0
- data/test/sisfc/reference_configuration.rb +14 -1
- metadata +23 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ee8e44bf402532fa027e91c284013a1044da5190
|
4
|
+
data.tar.gz: 779b1cfc0560936edb1c75efe381d321c9407476
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bd44dc6c5480ce6e2f23418315148a186c7106ede73bcc0e3320b5794a97f64e934a74c356641dc02dfb710e7746e81377359b4c4481ca1e6447f5aad4524d1e
|
7
|
+
data.tar.gz: a927ec9bb0a5a8cc0f5e89259220358acb4d7f19712ba65f071813a07c5e6b77c8a4b3c680207a31809fb7facc2da6ceb3d47a7485b950b4471b8607f69dde0a
|
data/bin/sisfc
CHANGED
@@ -1,13 +1,15 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
require 'sisfc'
|
10
|
-
require 'sisfc/evaluation'
|
3
|
+
begin
|
4
|
+
require 'sisfc'
|
5
|
+
require 'sisfc/evaluation'
|
6
|
+
require 'awesome_print'
|
7
|
+
rescue LoadError
|
8
|
+
require 'rubygems'
|
9
|
+
require 'sisfc'
|
10
|
+
require 'sisfc/evaluation'
|
11
|
+
require 'awesome_print'
|
12
|
+
end
|
11
13
|
|
12
14
|
|
13
15
|
if __FILE__ == $0
|
data/lib/sisfc/evaluation.rb
CHANGED
@@ -14,7 +14,7 @@ module SISFC
|
|
14
14
|
cost = vm_allocation.inject(0.0) do |s,x|
|
15
15
|
hc = @vm_hourly_cost.find{|i| i[:data_center] == x[:dc_id] and i[:vm_type] == x[:vm_size] }
|
16
16
|
unless hc
|
17
|
-
raise
|
17
|
+
raise "Cannot find hourly cost for data center #{x[:dc_id]} and VM size #{x[:vm_size]}!"
|
18
18
|
end
|
19
19
|
s += x[:vm_num] * hc[:cost]
|
20
20
|
end
|
@@ -23,7 +23,7 @@ module SISFC
|
|
23
23
|
# puts "vm allocation cost: #{cost}"
|
24
24
|
|
25
25
|
# consider SLO violations
|
26
|
-
penalties = (@penalties_func.nil? ? 0.0 : @penalties_func.call(kpis, dc_kpis))
|
26
|
+
penalties = (@penalties_func.nil? ? 0.0 : (@penalties_func.call(kpis, dc_kpis) or 0.0))
|
27
27
|
kpis[:penalties] = penalties
|
28
28
|
# puts "slo penalties cost: #{penalties}"
|
29
29
|
cost += penalties
|
data/lib/sisfc/simulation.rb
CHANGED
@@ -195,7 +195,7 @@ module SISFC
|
|
195
195
|
fitness = @evaluator.evaluate_business_impact(kpis, dc_kpis, vm_allocation)
|
196
196
|
puts "====== Evaluating new allocation ======\n" +
|
197
197
|
vm_allocation.map{|x| x.except(:service_time_distribution) }.inspect + "\n" +
|
198
|
-
"kpis #{kpis.to_s}\n" +
|
198
|
+
"kpis: #{kpis.to_s}\n" +
|
199
199
|
"dc_kpis: #{dc_kpis.to_s}\n" +
|
200
200
|
"=======================================\n"
|
201
201
|
fitness
|
data/lib/sisfc/version.rb
CHANGED
data/lib/sisfc.rb
CHANGED
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
require 'sisfc/reference_configuration'
|
4
|
+
|
5
|
+
|
6
|
+
describe SISFC::Evaluator do
|
7
|
+
describe '.penalties' do
|
8
|
+
EXAMPLE_ALLOCATION = [
|
9
|
+
{ dc_id: 1, vm_size: :medium, vm_num: 20 },
|
10
|
+
{ dc_id: 1, vm_size: :large, vm_num: 30 },
|
11
|
+
{ dc_id: 2, vm_size: :medium, vm_num: 50 },
|
12
|
+
{ dc_id: 2, vm_size: :large, vm_num: 60 },
|
13
|
+
]
|
14
|
+
|
15
|
+
it 'should work if no penalty function is provided' do
|
16
|
+
evaluation_no_penalties = EVALUATION.reject {|x| x == :penalties }
|
17
|
+
with_reference_config(evaluation: evaluation_no_penalties) do |conf|
|
18
|
+
SISFC::Evaluator.new(conf)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'should work if penalty function returns something' do
|
23
|
+
evaluator = with_reference_config do |conf|
|
24
|
+
SISFC::Evaluator.new(conf)
|
25
|
+
end
|
26
|
+
evaluator.evaluate_business_impact({ mttr: 0.075 }, nil, EXAMPLE_ALLOCATION)
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'should work if penalty function returns nil' do
|
30
|
+
evaluator = with_reference_config do |conf|
|
31
|
+
SISFC::Evaluator.new(conf)
|
32
|
+
end
|
33
|
+
evaluator.evaluate_business_impact({ mttr: 0.025 }, nil, EXAMPLE_ALLOCATION)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -131,6 +131,17 @@ request_generation \
|
|
131
131
|
command: "<pwd>/generator.R"
|
132
132
|
END
|
133
133
|
|
134
|
+
EVALUATION_CHARACTERIZATION = <<END
|
135
|
+
evaluation \
|
136
|
+
:vm_hourly_cost => [
|
137
|
+
{ :data_center => 1, :vm_type => :medium, :cost => 0.160 },
|
138
|
+
{ :data_center => 1, :vm_type => :large, :cost => 0.320 },
|
139
|
+
{ :data_center => 2, :vm_type => :medium, :cost => 0.184 },
|
140
|
+
{ :data_center => 2, :vm_type => :large, :cost => 0.368 }
|
141
|
+
],
|
142
|
+
# 500$ penalties if MTTR takes more than 50 msecs
|
143
|
+
:penalties => lambda {|kpis,dc_kpis| 500.0 if kpis[:mttr] > 0.050 }
|
144
|
+
END
|
134
145
|
|
135
146
|
# this is the whole reference configuration
|
136
147
|
# (useful for spec'ing configuration.rb)
|
@@ -139,7 +150,8 @@ REFERENCE_CONFIGURATION =
|
|
139
150
|
DATA_CENTERS_CHARACTERIZATION +
|
140
151
|
SERVICE_COMPONENT_TYPES_CHARACTERIZATION +
|
141
152
|
WORKFLOW_TYPES_CHARACTERIZATION +
|
142
|
-
REQUEST_GENERATION_CHARACTERIZATION
|
153
|
+
REQUEST_GENERATION_CHARACTERIZATION +
|
154
|
+
EVALUATION_CHARACTERIZATION
|
143
155
|
|
144
156
|
|
145
157
|
evaluator = Object.new
|
@@ -151,6 +163,7 @@ evaluator.instance_eval(REFERENCE_CONFIGURATION)
|
|
151
163
|
DATA_CENTERS = evaluator.data_centers
|
152
164
|
SERVICE_COMPONENT_TYPES = evaluator.service_component_types
|
153
165
|
WORKFLOW_TYPES = evaluator.workflow_types
|
166
|
+
EVALUATION = evaluator.evaluation
|
154
167
|
|
155
168
|
|
156
169
|
def with_reference_config(opts={})
|
metadata
CHANGED
@@ -1,85 +1,85 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sisfc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mauro Tortonesi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-12-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name: activesupport
|
15
|
-
version_requirements: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ~>
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 4.0.0
|
20
14
|
requirement: !ruby/object:Gem::Requirement
|
21
15
|
requirements:
|
22
16
|
- - ~>
|
23
17
|
- !ruby/object:Gem::Version
|
24
18
|
version: 4.0.0
|
19
|
+
name: activesupport
|
25
20
|
prerelease: false
|
26
21
|
type: :runtime
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: awesome_print
|
29
22
|
version_requirements: !ruby/object:Gem::Requirement
|
30
23
|
requirements:
|
31
24
|
- - ~>
|
32
25
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
26
|
+
version: 4.0.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
34
28
|
requirement: !ruby/object:Gem::Requirement
|
35
29
|
requirements:
|
36
30
|
- - ~>
|
37
31
|
- !ruby/object:Gem::Version
|
38
32
|
version: 1.2.0
|
33
|
+
name: awesome_print
|
39
34
|
prerelease: false
|
40
35
|
type: :runtime
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: erv
|
43
36
|
version_requirements: !ruby/object:Gem::Requirement
|
44
37
|
requirements:
|
45
38
|
- - ~>
|
46
39
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
40
|
+
version: 1.2.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
48
42
|
requirement: !ruby/object:Gem::Requirement
|
49
43
|
requirements:
|
50
44
|
- - ~>
|
51
45
|
- !ruby/object:Gem::Version
|
52
46
|
version: 0.0.2
|
47
|
+
name: erv
|
53
48
|
prerelease: false
|
54
49
|
type: :runtime
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: bundler
|
57
50
|
version_requirements: !ruby/object:Gem::Requirement
|
58
51
|
requirements:
|
59
52
|
- - ~>
|
60
53
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
54
|
+
version: 0.0.2
|
55
|
+
- !ruby/object:Gem::Dependency
|
62
56
|
requirement: !ruby/object:Gem::Requirement
|
63
57
|
requirements:
|
64
58
|
- - ~>
|
65
59
|
- !ruby/object:Gem::Version
|
66
60
|
version: 1.5.3
|
61
|
+
name: bundler
|
67
62
|
prerelease: false
|
68
63
|
type: :development
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: rake
|
71
64
|
version_requirements: !ruby/object:Gem::Requirement
|
72
65
|
requirements:
|
73
66
|
- - ~>
|
74
67
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
68
|
+
version: 1.5.3
|
69
|
+
- !ruby/object:Gem::Dependency
|
76
70
|
requirement: !ruby/object:Gem::Requirement
|
77
71
|
requirements:
|
78
72
|
- - ~>
|
79
73
|
- !ruby/object:Gem::Version
|
80
74
|
version: 10.1.1
|
75
|
+
name: rake
|
81
76
|
prerelease: false
|
82
77
|
type: :development
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ~>
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 10.1.1
|
83
83
|
description: Simulator for IT Services in Federated Clouds
|
84
84
|
email:
|
85
85
|
- mauro.tortonesi@unife.it
|
@@ -112,6 +112,7 @@ files:
|
|
112
112
|
- lib/sisfc/vm.rb
|
113
113
|
- sisfc.gemspec
|
114
114
|
- test/sisfc/configuration_test.rb
|
115
|
+
- test/sisfc/evaluation_test.rb
|
115
116
|
- test/sisfc/generator_test.rb
|
116
117
|
- test/sisfc/reference_configuration.rb
|
117
118
|
- test/sisfc/request_test.rb
|
@@ -136,12 +137,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
136
137
|
version: '0'
|
137
138
|
requirements: []
|
138
139
|
rubyforge_project:
|
139
|
-
rubygems_version: 2.
|
140
|
+
rubygems_version: 2.1.9
|
140
141
|
signing_key:
|
141
142
|
specification_version: 4
|
142
143
|
summary: A simulator for business-driven IT management research capable of evaluating IT service component placement in federated Cloud environments
|
143
144
|
test_files:
|
144
145
|
- test/sisfc/configuration_test.rb
|
146
|
+
- test/sisfc/evaluation_test.rb
|
145
147
|
- test/sisfc/generator_test.rb
|
146
148
|
- test/sisfc/reference_configuration.rb
|
147
149
|
- test/sisfc/request_test.rb
|