sisfc 0.0.1 → 0.1.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/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
|