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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4db7cb93e8cfd8e52ef91b888359f61d513761a0
4
- data.tar.gz: 3370237ff41037080a11ce54c4efb04510d24cab
3
+ metadata.gz: ee8e44bf402532fa027e91c284013a1044da5190
4
+ data.tar.gz: 779b1cfc0560936edb1c75efe381d321c9407476
5
5
  SHA512:
6
- metadata.gz: 153d84d057e7011351998a401f44139827b72edb6051d274b8ab09bd9aaefc2a61083e26807073bd0e0a9ccfa5b53f5f4f66d654d0415cfa4743ebb2a84d0e90
7
- data.tar.gz: f59a60e8c490cca293ef9836fbc990ce56663d55c681f9ecc32017ace690947a6d9ecc06728e5f1fd004762f9c87afeb050a02b790cec82079cc1ae1af244160
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
- # should we actually decomment these lines?
4
- # require 'rubygems'
5
- # require 'bundler/setup'
6
-
7
- require 'awesome_print'
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
@@ -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 Error, "Cannot find hourly cost for data center #{x[:dc_id]} and VM size #{x[:vm_size]}!"
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
@@ -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
@@ -1,3 +1,3 @@
1
1
  module SISFC
2
- VERSION = '0.0.1'
2
+ VERSION = '0.1.0'
3
3
  end
data/lib/sisfc.rb CHANGED
@@ -2,3 +2,4 @@ require 'active_support/time'
2
2
 
3
3
  require 'sisfc/configuration'
4
4
  require 'sisfc/simulation'
5
+ require 'sisfc/evaluation'
@@ -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.1
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-02-14 00:00:00.000000000 Z
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: 1.2.0
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: 0.0.2
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: 1.5.3
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: 10.1.1
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.2.1
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